diff options
| author | Francisco Paisana <francisco.paisana@softwareradiosystems.com> | 2023-04-26 01:29:06 +0200 |
|---|---|---|
| committer | Justin Tallon <justin.tallon@softwareradiosystems.com> | 2023-04-27 16:18:59 +0200 |
| commit | e0d10a262576c6f495c628b50d2e7f5549d4d8f4 (patch) | |
| tree | 56536326ba2a257b4b27287929f8930d133177c3 | |
| parent | 51e4711bc4b68719999f4e753d5910f9149aaac4 (diff) | |
update rrc asn1 to release 17
43 files changed, 40083 insertions, 3508 deletions
diff --git a/lib/include/srsran/asn1/asn1_utils.h b/lib/include/srsran/asn1/asn1_utils.h index f1dcfcd74..d7c6737a5 100644 --- a/lib/include/srsran/asn1/asn1_utils.h +++ b/lib/include/srsran/asn1/asn1_utils.h @@ -132,7 +132,8 @@ public: bit_ref_impl() = default; bit_ref_impl(Ptr start_ptr_, uint32_t max_size_) : ptr(start_ptr_), start_ptr(start_ptr_), max_ptr(max_size_ + start_ptr_) - {} + { + } int distance(const bit_ref_impl<Ptr>& other) const; int distance(const uint8_t* ref_ptr) const; @@ -1277,7 +1278,8 @@ struct choice_buffer_base_t { template <typename... Ts> struct choice_buffer_t : public choice_buffer_base_t<static_max<sizeof(alignment_t), sizeof(Ts)...>::value, - static_max<alignof(alignment_t), alignof(Ts)...>::value> {}; + static_max<alignof(alignment_t), alignof(Ts)...>::value> { +}; using pod_choice_buffer_t = choice_buffer_t<>; @@ -1539,6 +1541,11 @@ struct setup_release_c { return c; } + bool operator==(const setup_release_c<T>& other) const + { + return type_ == other.type_ and (type_ != types::setup or (c == other.c)); + } + private: types type_; T c; @@ -1645,15 +1652,18 @@ struct base_ie_field : public IEItem { // ProtocolIE-Field{LAYER-PROTOCOL-IES : IEsSetParam} ::= SEQUENCE{{IEsSetParam}} template <class IEsSetParam> -struct protocol_ie_field_s : public detail::base_ie_field<detail::ie_field_value_item<IEsSetParam> > {}; +struct protocol_ie_field_s : public detail::base_ie_field<detail::ie_field_value_item<IEsSetParam> > { +}; // ProtocolIE-SingleContainer{LAYER-PROTOCOL-IES : IEsSetParam} ::= SEQUENCE{{IEsSetParam}} template <class ies_set_paramT_> -struct protocol_ie_single_container_s : public protocol_ie_field_s<ies_set_paramT_> {}; +struct protocol_ie_single_container_s : public protocol_ie_field_s<ies_set_paramT_> { +}; // ProtocolExtensionField{LAYER-PROTOCOL-EXTENSION : ExtensionSetParam} ::= SEQUENCE{{LAYER-PROTOCOL-EXTENSION}} template <class ExtensionSetParam> -struct protocol_ext_field_s : public detail::base_ie_field<detail::ie_field_ext_item<ExtensionSetParam> > {}; +struct protocol_ext_field_s : public detail::base_ie_field<detail::ie_field_ext_item<ExtensionSetParam> > { +}; namespace detail { diff --git a/lib/include/srsran/asn1/rrc.h b/lib/include/srsran/asn1/rrc.h index 32b415b3b..459855d35 100644 --- a/lib/include/srsran/asn1/rrc.h +++ b/lib/include/srsran/asn1/rrc.h @@ -12,7 +12,7 @@ /******************************************************************************* * - * 3GPP TS ASN1 RRC v15.11.0 (2020-09) + * 3GPP TS ASN1 RRC v17.4.0 (2023-03) * ******************************************************************************/ @@ -46,8 +46,9 @@ struct mib_mbms_r14_s { // member variables dl_bw_mbms_r14_e_ dl_bw_mbms_r14; fixed_bitstring<6> sys_frame_num_r14; - uint8_t add_non_mbsfn_sfs_r14 = 0; - fixed_bitstring<13> spare; + uint8_t add_non_mbsfn_sfs_r14 = 0; + uint8_t semi_static_cfi_mbms_r16 = 0; + fixed_bitstring<11> spare; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -169,7 +170,7 @@ struct bcch_dl_sch_msg_mbms_s { }; // ThresholdEUTRA-v1250 ::= INTEGER (0..97) -using thres_eutra_v1250 = integer<uint8_t, 0, 97>; +using thres_eutra_v1250 = uint8_t; // MBMS-SessionInfo-r9 ::= SEQUENCE struct mbms_session_info_r9_s { @@ -186,6 +187,71 @@ struct mbms_session_info_r9_s { void to_json(json_writer& j) const; }; +// MBSFN-SubframeConfig-v1610 ::= SEQUENCE +struct mbsfn_sf_cfg_v1610_s { + struct sf_alloc_v1610_c_ { + struct types_opts { + enum options { one_frame_v1610, four_frames_v1610, 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_v1610_c_() = default; + sf_alloc_v1610_c_(const sf_alloc_v1610_c_& other); + sf_alloc_v1610_c_& operator=(const sf_alloc_v1610_c_& other); + ~sf_alloc_v1610_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<2>& one_frame_v1610() + { + assert_choice_type(types::one_frame_v1610, type_, "subframeAllocation-v1610"); + return c.get<fixed_bitstring<2> >(); + } + fixed_bitstring<8>& four_frames_v1610() + { + assert_choice_type(types::four_frames_v1610, type_, "subframeAllocation-v1610"); + return c.get<fixed_bitstring<8> >(); + } + const fixed_bitstring<2>& one_frame_v1610() const + { + assert_choice_type(types::one_frame_v1610, type_, "subframeAllocation-v1610"); + return c.get<fixed_bitstring<2> >(); + } + const fixed_bitstring<8>& four_frames_v1610() const + { + assert_choice_type(types::four_frames_v1610, type_, "subframeAllocation-v1610"); + return c.get<fixed_bitstring<8> >(); + } + fixed_bitstring<2>& set_one_frame_v1610(); + fixed_bitstring<8>& set_four_frames_v1610(); + + private: + types type_; + choice_buffer_t<fixed_bitstring<8> > c; + + void destroy_(); + }; + + // member variables + sf_alloc_v1610_c_ sf_alloc_v1610; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// CommonSF-AllocPatternList-v1610 ::= SEQUENCE (SIZE (1..8)) OF MBSFN-SubframeConfig-v1610 +using common_sf_alloc_pattern_list_v1610_l = dyn_array<mbsfn_sf_cfg_v1610_s>; + // MBMS-SessionInfoList-r9 ::= SEQUENCE (SIZE (0..29)) OF MBMS-SessionInfo-r9 using mbms_session_info_list_r9_l = dyn_array<mbms_session_info_r9_s>; @@ -272,8 +338,20 @@ struct pmch_cfg_r12_s { void to_json(json_writer& j) const; }; -// CommonSF-AllocPatternList-r14 ::= SEQUENCE (SIZE (1..8)) OF MBSFN-SubframeConfig-v1430 -using common_sf_alloc_pattern_list_r14_l = dyn_array<mbsfn_sf_cfg_v1430_s>; +// CommonSF-AllocPatternList-v1430 ::= SEQUENCE (SIZE (1..8)) OF MBSFN-SubframeConfig-v1430 +using common_sf_alloc_pattern_list_v1430_l = dyn_array<mbsfn_sf_cfg_v1430_s>; + +// MBSFNAreaConfiguration-v1610-IEs ::= SEQUENCE +struct mbsfn_area_cfg_v1610_ies_s { + bool common_sf_alloc_v1610_present = false; + bool non_crit_ext_present = false; + common_sf_alloc_pattern_list_v1610_l common_sf_alloc_v1610; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; // PMCH-InfoExt-r12 ::= SEQUENCE struct pmch_info_ext_r12_s { @@ -290,8 +368,9 @@ struct pmch_info_ext_r12_s { // MBSFNAreaConfiguration-v1430-IEs ::= SEQUENCE struct mbsfn_area_cfg_v1430_ies_s { - bool non_crit_ext_present = false; - common_sf_alloc_pattern_list_r14_l common_sf_alloc_r14; + bool non_crit_ext_present = false; + common_sf_alloc_pattern_list_v1430_l common_sf_alloc_v1430; + mbsfn_area_cfg_v1610_ies_s non_crit_ext; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -844,6 +923,157 @@ struct sc_mtch_sched_info_br_r14_s { void to_json(json_writer& j) const; }; +// SC-MTCH-Info-BR-r14 ::= SEQUENCE +struct sc_mtch_info_br_r14_s { + struct mpdcch_num_repeat_sc_mtch_r14_opts { + enum options { r1, r2, r4, r8, r16, r32, r64, r128, r256, nulltype } value; + typedef uint16_t number_type; + + const char* to_string() const; + uint16_t to_number() const; + }; + typedef enumerated<mpdcch_num_repeat_sc_mtch_r14_opts> mpdcch_num_repeat_sc_mtch_r14_e_; + struct mpdcch_start_sf_sc_mtch_r14_c_ { + struct fdd_r14_opts { + enum options { v1, v1dot5, v2, v2dot5, v4, v5, v8, v10, nulltype } value; + typedef float number_type; + + const char* to_string() const; + float to_number() const; + const char* to_number_string() const; + }; + typedef enumerated<fdd_r14_opts> fdd_r14_e_; + struct tdd_r14_opts { + enum options { v1, v2, v4, v5, v8, v10, v20, nulltype } value; + typedef uint8_t number_type; + + const char* to_string() const; + uint8_t to_number() const; + }; + typedef enumerated<tdd_r14_opts> tdd_r14_e_; + struct types_opts { + enum options { fdd_r14, tdd_r14, nulltype } value; + + const char* to_string() const; + }; + typedef enumerated<types_opts> types; + + // choice methods + mpdcch_start_sf_sc_mtch_r14_c_() = default; + mpdcch_start_sf_sc_mtch_r14_c_(const mpdcch_start_sf_sc_mtch_r14_c_& other); + mpdcch_start_sf_sc_mtch_r14_c_& operator=(const mpdcch_start_sf_sc_mtch_r14_c_& other); + ~mpdcch_start_sf_sc_mtch_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 + fdd_r14_e_& fdd_r14() + { + assert_choice_type(types::fdd_r14, type_, "mpdcch-StartSF-SC-MTCH-r14"); + return c.get<fdd_r14_e_>(); + } + tdd_r14_e_& tdd_r14() + { + assert_choice_type(types::tdd_r14, type_, "mpdcch-StartSF-SC-MTCH-r14"); + return c.get<tdd_r14_e_>(); + } + const fdd_r14_e_& fdd_r14() const + { + assert_choice_type(types::fdd_r14, type_, "mpdcch-StartSF-SC-MTCH-r14"); + return c.get<fdd_r14_e_>(); + } + const tdd_r14_e_& tdd_r14() const + { + assert_choice_type(types::tdd_r14, type_, "mpdcch-StartSF-SC-MTCH-r14"); + return c.get<tdd_r14_e_>(); + } + fdd_r14_e_& set_fdd_r14(); + tdd_r14_e_& set_tdd_r14(); + + private: + types type_; + pod_choice_buffer_t c; + + void destroy_(); + }; + struct mpdcch_pdsch_hop_cfg_sc_mtch_r14_opts { + enum options { on, off, nulltype } value; + + const char* to_string() const; + }; + typedef enumerated<mpdcch_pdsch_hop_cfg_sc_mtch_r14_opts> mpdcch_pdsch_hop_cfg_sc_mtch_r14_e_; + struct mpdcch_pdsch_cemode_cfg_sc_mtch_r14_opts { + enum options { ce_mode_a, ce_mode_b, nulltype } value; + + const char* to_string() const; + }; + typedef enumerated<mpdcch_pdsch_cemode_cfg_sc_mtch_r14_opts> mpdcch_pdsch_cemode_cfg_sc_mtch_r14_e_; + struct mpdcch_pdsch_max_bw_sc_mtch_r14_opts { + enum options { bw1dot4, bw5, nulltype } value; + typedef float number_type; + + const char* to_string() const; + float to_number() const; + const char* to_number_string() const; + }; + typedef enumerated<mpdcch_pdsch_max_bw_sc_mtch_r14_opts> mpdcch_pdsch_max_bw_sc_mtch_r14_e_; + struct mpdcch_offset_sc_mtch_r14_opts { + enum options { + zero, + one_eighth, + one_quarter, + three_eighth, + one_half, + five_eighth, + three_quarter, + seven_eighth, + nulltype + } value; + typedef float number_type; + + const char* to_string() const; + float to_number() const; + const char* to_number_string() const; + }; + typedef enumerated<mpdcch_offset_sc_mtch_r14_opts> mpdcch_offset_sc_mtch_r14_e_; + struct p_a_r14_opts { + enum options { db_minus6, db_minus4dot77, db_minus3, db_minus1dot77, db0, db1, db2, db3, nulltype } value; + typedef float number_type; + + const char* to_string() const; + float to_number() const; + const char* to_number_string() const; + }; + typedef enumerated<p_a_r14_opts> p_a_r14_e_; + + // member variables + bool ext = false; + bool sc_mtch_sched_info_r14_present = false; + bool sc_mtch_neighbour_cell_r14_present = false; + bool p_a_r14_present = false; + uint32_t sc_mtch_carrier_freq_r14 = 0; + mbms_session_info_r13_s mbms_session_info_r14; + fixed_bitstring<16> g_rnti_r14; + sc_mtch_sched_info_br_r14_s sc_mtch_sched_info_r14; + fixed_bitstring<8> sc_mtch_neighbour_cell_r14; + uint8_t mpdcch_nb_sc_mtch_r14 = 1; + mpdcch_num_repeat_sc_mtch_r14_e_ mpdcch_num_repeat_sc_mtch_r14; + mpdcch_start_sf_sc_mtch_r14_c_ mpdcch_start_sf_sc_mtch_r14; + mpdcch_pdsch_hop_cfg_sc_mtch_r14_e_ mpdcch_pdsch_hop_cfg_sc_mtch_r14; + mpdcch_pdsch_cemode_cfg_sc_mtch_r14_e_ mpdcch_pdsch_cemode_cfg_sc_mtch_r14; + mpdcch_pdsch_max_bw_sc_mtch_r14_e_ mpdcch_pdsch_max_bw_sc_mtch_r14; + mpdcch_offset_sc_mtch_r14_e_ mpdcch_offset_sc_mtch_r14; + p_a_r14_e_ p_a_r14; + // ... + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // SC-MTCH-SchedulingInfo-r13 ::= SEQUENCE struct sc_mtch_sched_info_r13_s { struct on_dur_timer_scptm_r13_opts { @@ -1146,157 +1376,6 @@ struct pci_arfcn_r13_s { void to_json(json_writer& j) const; }; -// SC-MTCH-Info-BR-r14 ::= SEQUENCE -struct sc_mtch_info_br_r14_s { - struct mpdcch_num_repeat_sc_mtch_r14_opts { - enum options { r1, r2, r4, r8, r16, r32, r64, r128, r256, nulltype } value; - typedef uint16_t number_type; - - const char* to_string() const; - uint16_t to_number() const; - }; - typedef enumerated<mpdcch_num_repeat_sc_mtch_r14_opts> mpdcch_num_repeat_sc_mtch_r14_e_; - struct mpdcch_start_sf_sc_mtch_r14_c_ { - struct fdd_r14_opts { - enum options { v1, v1dot5, v2, v2dot5, v4, v5, v8, v10, nulltype } value; - typedef float number_type; - - const char* to_string() const; - float to_number() const; - const char* to_number_string() const; - }; - typedef enumerated<fdd_r14_opts> fdd_r14_e_; - struct tdd_r14_opts { - enum options { v1, v2, v4, v5, v8, v10, v20, nulltype } value; - typedef uint8_t number_type; - - const char* to_string() const; - uint8_t to_number() const; - }; - typedef enumerated<tdd_r14_opts> tdd_r14_e_; - struct types_opts { - enum options { fdd_r14, tdd_r14, nulltype } value; - - const char* to_string() const; - }; - typedef enumerated<types_opts> types; - - // choice methods - mpdcch_start_sf_sc_mtch_r14_c_() = default; - mpdcch_start_sf_sc_mtch_r14_c_(const mpdcch_start_sf_sc_mtch_r14_c_& other); - mpdcch_start_sf_sc_mtch_r14_c_& operator=(const mpdcch_start_sf_sc_mtch_r14_c_& other); - ~mpdcch_start_sf_sc_mtch_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 - fdd_r14_e_& fdd_r14() - { - assert_choice_type(types::fdd_r14, type_, "mpdcch-StartSF-SC-MTCH-r14"); - return c.get<fdd_r14_e_>(); - } - tdd_r14_e_& tdd_r14() - { - assert_choice_type(types::tdd_r14, type_, "mpdcch-StartSF-SC-MTCH-r14"); - return c.get<tdd_r14_e_>(); - } - const fdd_r14_e_& fdd_r14() const - { - assert_choice_type(types::fdd_r14, type_, "mpdcch-StartSF-SC-MTCH-r14"); - return c.get<fdd_r14_e_>(); - } - const tdd_r14_e_& tdd_r14() const - { - assert_choice_type(types::tdd_r14, type_, "mpdcch-StartSF-SC-MTCH-r14"); - return c.get<tdd_r14_e_>(); - } - fdd_r14_e_& set_fdd_r14(); - tdd_r14_e_& set_tdd_r14(); - - private: - types type_; - pod_choice_buffer_t c; - - void destroy_(); - }; - struct mpdcch_pdsch_hop_cfg_sc_mtch_r14_opts { - enum options { on, off, nulltype } value; - - const char* to_string() const; - }; - typedef enumerated<mpdcch_pdsch_hop_cfg_sc_mtch_r14_opts> mpdcch_pdsch_hop_cfg_sc_mtch_r14_e_; - struct mpdcch_pdsch_cemode_cfg_sc_mtch_r14_opts { - enum options { ce_mode_a, ce_mode_b, nulltype } value; - - const char* to_string() const; - }; - typedef enumerated<mpdcch_pdsch_cemode_cfg_sc_mtch_r14_opts> mpdcch_pdsch_cemode_cfg_sc_mtch_r14_e_; - struct mpdcch_pdsch_max_bw_sc_mtch_r14_opts { - enum options { bw1dot4, bw5, nulltype } value; - typedef float number_type; - - const char* to_string() const; - float to_number() const; - const char* to_number_string() const; - }; - typedef enumerated<mpdcch_pdsch_max_bw_sc_mtch_r14_opts> mpdcch_pdsch_max_bw_sc_mtch_r14_e_; - struct mpdcch_offset_sc_mtch_r14_opts { - enum options { - zero, - one_eighth, - one_quarter, - three_eighth, - one_half, - five_eighth, - three_quarter, - seven_eighth, - nulltype - } value; - typedef float number_type; - - const char* to_string() const; - float to_number() const; - const char* to_number_string() const; - }; - typedef enumerated<mpdcch_offset_sc_mtch_r14_opts> mpdcch_offset_sc_mtch_r14_e_; - struct p_a_r14_opts { - enum options { db_minus6, db_minus4dot77, db_minus3, db_minus1dot77, db0, db1, db2, db3, nulltype } value; - typedef float number_type; - - const char* to_string() const; - float to_number() const; - const char* to_number_string() const; - }; - typedef enumerated<p_a_r14_opts> p_a_r14_e_; - - // member variables - bool ext = false; - bool sc_mtch_sched_info_r14_present = false; - bool sc_mtch_neighbour_cell_r14_present = false; - bool p_a_r14_present = false; - uint32_t sc_mtch_carrier_freq_r14 = 0; - mbms_session_info_r13_s mbms_session_info_r14; - fixed_bitstring<16> g_rnti_r14; - sc_mtch_sched_info_br_r14_s sc_mtch_sched_info_r14; - fixed_bitstring<8> sc_mtch_neighbour_cell_r14; - uint8_t mpdcch_nb_sc_mtch_r14 = 1; - mpdcch_num_repeat_sc_mtch_r14_e_ mpdcch_num_repeat_sc_mtch_r14; - mpdcch_start_sf_sc_mtch_r14_c_ mpdcch_start_sf_sc_mtch_r14; - mpdcch_pdsch_hop_cfg_sc_mtch_r14_e_ mpdcch_pdsch_hop_cfg_sc_mtch_r14; - mpdcch_pdsch_cemode_cfg_sc_mtch_r14_e_ mpdcch_pdsch_cemode_cfg_sc_mtch_r14; - mpdcch_pdsch_max_bw_sc_mtch_r14_e_ mpdcch_pdsch_max_bw_sc_mtch_r14; - mpdcch_offset_sc_mtch_r14_e_ mpdcch_offset_sc_mtch_r14; - p_a_r14_e_ p_a_r14; - // ... - - // sequence methods - SRSASN_CODE pack(bit_ref& bref) const; - SRSASN_CODE unpack(cbit_ref& bref); - void to_json(json_writer& j) const; -}; - // SC-MTCH-Info-r13 ::= SEQUENCE struct sc_mtch_info_r13_s { struct p_a_r13_opts { @@ -1337,6 +1416,29 @@ using sc_mtch_info_list_r13_l = dyn_array<sc_mtch_info_r13_s>; // SCPTM-NeighbourCellList-r13 ::= SEQUENCE (SIZE (1..8)) OF PCI-ARFCN-r13 using scptm_neighbour_cell_list_r13_l = dyn_array<pci_arfcn_r13_s>; +// SCPTMConfiguration-BR-v1610 ::= SEQUENCE +struct scptm_cfg_br_v1610_s { + struct multi_tb_gap_r16_opts { + enum options { sf2, sf4, sf8, sf16, sf32, sf64, sf128, spare, nulltype } value; + typedef uint8_t number_type; + + const char* to_string() const; + uint8_t to_number() const; + }; + typedef enumerated<multi_tb_gap_r16_opts> multi_tb_gap_r16_e_; + + // member variables + bool multi_tb_gap_r16_present = false; + bool non_crit_ext_present = false; + sc_mtch_info_list_br_r14_l sc_mtch_info_list_multi_tb_r16; + multi_tb_gap_r16_e_ multi_tb_gap_r16; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // SCPTMConfiguration-v1340 ::= SEQUENCE struct scptm_cfg_v1340_s { bool p_b_r13_present = false; @@ -1359,6 +1461,7 @@ struct scptm_cfg_br_r14_s { scptm_neighbour_cell_list_r13_l scptm_neighbour_cell_list_r14; uint8_t p_b_r14 = 0; dyn_octstring late_non_crit_ext; + scptm_cfg_br_v1610_s non_crit_ext; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -1598,30 +1701,15 @@ struct mimo_ue_params_v13e0_s { void to_json(json_writer& j) const; }; -// MeasResult3EUTRA-r15 ::= SEQUENCE -struct meas_result3_eutra_r15_s { - bool ext = false; - bool meas_result_serving_cell_r15_present = false; - bool meas_result_neigh_cell_list_r15_present = false; - uint32_t carrier_freq_r15 = 0; - meas_result_eutra_s meas_result_serving_cell_r15; - meas_result_list_eutra_l meas_result_neigh_cell_list_r15; - // ... - - // sequence methods - SRSASN_CODE pack(bit_ref& bref) const; - SRSASN_CODE unpack(cbit_ref& bref); - void to_json(json_writer& j) const; -}; - -// MeasResultList3EUTRA-r15 ::= SEQUENCE (SIZE (1..8)) OF MeasResult3EUTRA-r15 -using meas_result_list3_eutra_r15_l = dyn_array<meas_result3_eutra_r15_s>; - // MeasResultSCG-FailureMRDC-r15 ::= SEQUENCE struct meas_result_scg_fail_mrdc_r15_s { bool ext = false; meas_result_list3_eutra_r15_l meas_result_freq_list_eutra_r15; // ... + // group 0 + copy_ptr<location_info_r10_s> location_info_r16; + copy_ptr<log_meas_result_list_bt_r15_l> log_meas_result_list_bt_r16; + copy_ptr<log_meas_result_list_wlan_r15_l> log_meas_result_list_wlan_r16; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -1971,6 +2059,30 @@ using meas_result_serv_cell_list_scg_ext_r13_l = dyn_array<meas_result_serv_cell // MeasResultServCellListSCG-r12 ::= SEQUENCE (SIZE (1..5)) OF MeasResultServCellSCG-r12 using meas_result_serv_cell_list_scg_r12_l = dyn_array<meas_result_serv_cell_scg_r12_s>; +// RLF-Report-NB-r16 ::= SEQUENCE +struct rlf_report_nb_r16_s { + struct meas_result_last_serv_cell_r16_s_ { + bool nrsrq_result_r16_present = false; + uint8_t nrsrp_result_r16 = 0; + int8_t nrsrq_result_r16 = -30; + }; + + // member variables + bool reest_cell_id_r16_present = false; + bool location_info_r16_present = false; + bool time_since_fail_r16_present = false; + cell_global_id_eutra_s failed_pcell_id_r16; + cell_global_id_eutra_s reest_cell_id_r16; + location_info_r10_s location_info_r16; + meas_result_last_serv_cell_r16_s_ meas_result_last_serv_cell_r16; + uint32_t time_since_fail_r16 = 0; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // SBCCH-SL-BCH-MessageType ::= MasterInformationBlock-SL using sbcch_sl_bch_msg_type_s = mib_sl_s; @@ -2677,6 +2789,19 @@ struct sl_v2x_precfg_r14_s { copy_ptr<sl_v2x_packet_dupl_cfg_r15_s> v2x_packet_dupl_cfg_r15; copy_ptr<sl_v2x_sync_freq_list_r15_l> sync_freq_list_r15; copy_ptr<sl_v2x_tx_profile_list_r15_l> v2x_tx_profile_list_r15; + // group 1 + copy_ptr<sl_nr_anchor_carrier_freq_list_r16_l> anchor_carrier_freq_list_nr_r16; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// VarConditionalReconfiguration ::= SEQUENCE +struct var_conditional_recfg_s { + bool cond_recfg_list_r16_present = false; + cond_recfg_to_add_mod_list_r16_l cond_recfg_list_r16; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -2761,6 +2886,30 @@ struct var_log_meas_cfg_r15_s { void to_json(json_writer& j) const; }; +// VarLogMeasConfig-r17 ::= SEQUENCE +struct var_log_meas_cfg_r17_s { + bool area_cfg_r10_present = false; + bool area_cfg_v1130_present = false; + bool target_mbsfn_area_list_r12_present = false; + bool bt_name_list_r15_present = false; + bool wlan_name_list_r15_present = false; + bool logged_event_trigger_cfg_r17_present = false; + bool meas_uncom_bar_pre_r17_present = false; + area_cfg_r10_c area_cfg_r10; + area_cfg_v1130_s area_cfg_v1130; + logging_dur_r10_e logging_dur_r10; + logging_interv_r10_e logging_interv_r10; + target_mbsfn_area_list_r12_l target_mbsfn_area_list_r12; + bt_name_list_r15_l bt_name_list_r15; + wlan_name_list_r15_l wlan_name_list_r15; + logged_event_trigger_cfg_r17_s logged_event_trigger_cfg_r17; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // VarLogMeasReport-r10 ::= SEQUENCE struct var_log_meas_report_r10_s { trace_ref_r10_s trace_ref_r10; @@ -2813,6 +2962,19 @@ struct var_meas_idle_cfg_r15_s { void to_json(json_writer& j) const; }; +// VarMeasIdleConfig-r16 ::= SEQUENCE +struct var_meas_idle_cfg_r16_s { + bool meas_idle_carrier_list_nr_r16_present = false; + bool validity_area_list_r16_present = false; + nr_carrier_list_r16_l meas_idle_carrier_list_nr_r16; + validity_area_list_r16_l validity_area_list_r16; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // VarMeasIdleReport-r15 ::= SEQUENCE struct var_meas_idle_report_r15_s { meas_result_list_idle_r15_l meas_report_idle_r15; @@ -2823,6 +2985,19 @@ struct var_meas_idle_report_r15_s { void to_json(json_writer& j) const; }; +// VarMeasIdleReport-r16 ::= SEQUENCE +struct var_meas_idle_report_r16_s { + bool meas_report_idle_r16_present = false; + bool meas_report_idle_nr_r16_present = false; + meas_result_list_ext_idle_r16_l meas_report_idle_r16; + meas_result_list_idle_nr_r16_l meas_report_idle_nr_r16; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // VarMeasReport ::= SEQUENCE struct var_meas_report_s { bool meas_id_v1250_present = false; @@ -2851,6 +3026,17 @@ using var_meas_report_list_r12_l = dyn_array<var_meas_report_s>; // VarMobilityHistoryReport-r12 ::= VisitedCellInfoList-r12 using var_mob_history_report_r12_l = visited_cell_info_list_r12_l; +// VarRLF-Report-NB-r16 ::= SEQUENCE +struct var_rlf_report_nb_r16_s { + rlf_report_nb_r16_s rlf_report_r16; + plmn_id_list3_r11_l plmn_id_list_r16; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // VarRLF-Report-r10 ::= SEQUENCE struct var_rlf_report_r10_s { rlf_report_r9_s rlf_report_r10; diff --git a/lib/include/srsran/asn1/rrc/bcch_msg.h b/lib/include/srsran/asn1/rrc/bcch_msg.h index 2c648d235..45353db12 100644 --- a/lib/include/srsran/asn1/rrc/bcch_msg.h +++ b/lib/include/srsran/asn1/rrc/bcch_msg.h @@ -12,7 +12,7 @@ /******************************************************************************* * - * 3GPP TS ASN1 RRC v15.11.0 (2020-09) + * 3GPP TS ASN1 RRC v17.4.0 (2023-03) * ******************************************************************************/ @@ -20,6 +20,7 @@ #define SRSASN1_RRC_BCCH_MSG_H #include "meascfg.h" +#include "phy_ded.h" #include "si.h" namespace asn1 { @@ -140,6 +141,46 @@ struct neigh_cells_per_bandclass_cdma2000_v920_s { void to_json(json_writer& j) const; }; +// PhysCellIdRangeNR-r16 ::= SEQUENCE +struct pci_range_nr_r16_s { + struct range_opts { + enum options { + n4, + n8, + n12, + n16, + n24, + n32, + n48, + n64, + n84, + n96, + n128, + n168, + n252, + n504, + n1008, + spare1, + nulltype + } value; + typedef uint16_t number_type; + + const char* to_string() const; + uint16_t to_number() const; + }; + typedef enumerated<range_opts> 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; +}; + // RedistributionNeighCell-r13 ::= SEQUENCE struct redist_neigh_cell_r13_s { uint16_t pci_r13 = 0; @@ -170,6 +211,26 @@ struct ac_barr_cfg1_xrtt_r9_s { void to_json(json_writer& j) const; }; +// BeamMeasConfigIdleNR-r16 ::= SEQUENCE +struct beam_meas_cfg_idle_nr_r16_s { + struct report_quant_rs_idx_nr_r16_opts { + enum options { rsrp, rsrq, both, nulltype } value; + + const char* to_string() const; + }; + typedef enumerated<report_quant_rs_idx_nr_r16_opts> report_quant_rs_idx_nr_r16_e_; + + // member variables + report_quant_rs_idx_nr_r16_e_ report_quant_rs_idx_nr_r16; + uint8_t max_report_rs_idx_r16 = 0; + bool report_rs_idx_results_nr_r16 = false; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // CSFB-RegistrationParam1XRTT ::= SEQUENCE struct csfb_regist_param1_xrtt_s { fixed_bitstring<15> sid; @@ -200,6 +261,9 @@ struct csfb_regist_param1_xrtt_v920_s { void to_json(json_writer& j) const; }; +// CellListNR-r16 ::= SEQUENCE (SIZE (1..8)) OF PhysCellIdRangeNR-r16 +using cell_list_nr_r16_l = dyn_array<pci_range_nr_r16_s>; + // CellReselectionParametersCDMA2000-r11 ::= SEQUENCE struct cell_resel_params_cdma2000_r11_s { using neigh_cell_list_r11_l_ = dyn_array<neigh_cell_cdma2000_r11_s>; @@ -228,6 +292,16 @@ struct inter_freq_neigh_cell_info_s { void to_json(json_writer& j) const; }; +// InterFreqNeighCellInfo-v1610 ::= SEQUENCE +struct inter_freq_neigh_cell_info_v1610_s { + rss_meas_pwr_bias_r16_e rss_meas_pwr_bias_r16; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // NS-PmaxList-r10 ::= SEQUENCE (SIZE (1..8)) OF NS-PmaxValue-r10 using ns_pmax_list_r10_l = dyn_array<ns_pmax_value_r10_s>; @@ -368,18 +442,222 @@ struct uac_barr_per_cat_r15_s { void to_json(json_writer& j) const; }; -// InterFreqBlackCellList ::= SEQUENCE (SIZE (1..16)) OF PhysCellIdRange -using inter_freq_black_cell_list_l = dyn_array<pci_range_s>; +// AllowedCellListNR-r16 ::= SEQUENCE (SIZE (1..16)) OF INTEGER (0..1007) +using allowed_cell_list_nr_r16_l = bounded_array<uint16_t, 16>; + +// InterFreqExcludedCellList ::= SEQUENCE (SIZE (1..16)) OF PhysCellIdRange +using inter_freq_excluded_cell_list_l = dyn_array<pci_range_s>; // InterFreqNeighCellList ::= SEQUENCE (SIZE (1..16)) OF InterFreqNeighCellInfo using inter_freq_neigh_cell_list_l = dyn_array<inter_freq_neigh_cell_info_s>; +// InterFreqNeighCellList-v1610 ::= SEQUENCE (SIZE (1..16)) OF InterFreqNeighCellInfo-v1610 +using inter_freq_neigh_cell_list_v1610_l = dyn_array<inter_freq_neigh_cell_info_v1610_s>; + // InterFreqNeighHSDN-CellList-r15 ::= SEQUENCE (SIZE (1..16)) OF PhysCellIdRange using inter_freq_neigh_hsdn_cell_list_r15_l = dyn_array<pci_range_s>; // MBMS-SAI-List-r11 ::= SEQUENCE (SIZE (1..64)) OF INTEGER (0..65535) using mbms_sai_list_r11_l = dyn_array<uint32_t>; +// MBSFN-AreaInfo-r16 ::= SEQUENCE +struct mbsfn_area_info_r16_s { + struct mcch_cfg_r16_s_ { + struct mcch_repeat_period_r16_opts { + enum options { + rf1, + rf2, + rf4, + rf8, + rf16, + rf32, + rf64, + rf128, + rf256, + spare7, + spare6, + spare5, + spare4, + spare3, + spare2, + spare1, + nulltype + } value; + typedef uint16_t number_type; + + const char* to_string() const; + uint16_t to_number() const; + }; + typedef enumerated<mcch_repeat_period_r16_opts> mcch_repeat_period_r16_e_; + struct mcch_mod_period_r16_opts { + enum options { + rf1, + rf2, + rf4, + rf8, + rf16, + rf32, + rf64, + rf128, + rf256, + rf512, + rf1024, + spare5, + spare4, + spare3, + spare2, + spare1, + nulltype + } value; + typedef uint16_t number_type; + + const char* to_string() const; + uint16_t to_number() const; + }; + typedef enumerated<mcch_mod_period_r16_opts> mcch_mod_period_r16_e_; + struct sig_mcs_r16_opts { + enum options { n2, n7, n13, n19, nulltype } value; + typedef uint8_t number_type; + + const char* to_string() const; + uint8_t to_number() const; + }; + typedef enumerated<sig_mcs_r16_opts> sig_mcs_r16_e_; + + // member variables + mcch_repeat_period_r16_e_ mcch_repeat_period_r16; + mcch_mod_period_r16_e_ mcch_mod_period_r16; + uint8_t mcch_offset_r16 = 0; + fixed_bitstring<10> sf_alloc_info_r16; + sig_mcs_r16_e_ sig_mcs_r16; + }; + struct subcarrier_spacing_mbms_r16_opts { + enum options { khz7dot5, khz2dot5, khz1dot25, khz0dot37, khz15_v1710, 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<subcarrier_spacing_mbms_r16_opts> subcarrier_spacing_mbms_r16_e_; + struct time_separation_r16_opts { + enum options { sl2, sl4, nulltype } value; + typedef uint8_t number_type; + + const char* to_string() const; + uint8_t to_number() const; + }; + typedef enumerated<time_separation_r16_opts> time_separation_r16_e_; + + // member variables + bool ext = false; + bool time_separation_r16_present = false; + uint16_t mbsfn_area_id_r16 = 0; + uint8_t notif_ind_r16 = 0; + mcch_cfg_r16_s_ mcch_cfg_r16; + subcarrier_spacing_mbms_r16_e_ subcarrier_spacing_mbms_r16; + time_separation_r16_e_ time_separation_r16; + // ... + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// MTC-SSB2-LP-NR-r16 ::= SEQUENCE +struct mtc_ssb2_lp_nr_r16_s { + using pci_list_r16_l_ = dyn_array<uint16_t>; + struct periodicity_r16_opts { + enum options { sf10, sf20, sf40, sf80, sf160, spare3, spare2, spare1, nulltype } value; + typedef uint8_t number_type; + + const char* to_string() const; + uint8_t to_number() const; + }; + typedef enumerated<periodicity_r16_opts> periodicity_r16_e_; + + // member variables + bool pci_list_r16_present = false; + pci_list_r16_l_ pci_list_r16; + periodicity_r16_e_ periodicity_r16; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// MeasIdleCarrierNR-r16 ::= SEQUENCE +struct meas_idle_carrier_nr_r16_s { + struct subcarrier_spacing_ssb_r16_opts { + enum options { khz15, khz30, khz120, khz240, nulltype } value; + typedef uint8_t number_type; + + const char* to_string() const; + uint8_t to_number() const; + }; + typedef enumerated<subcarrier_spacing_ssb_r16_opts> subcarrier_spacing_ssb_r16_e_; + struct report_quantities_nr_r16_opts { + enum options { rsrp, rsrq, both, nulltype } value; + + const char* to_string() const; + }; + typedef enumerated<report_quantities_nr_r16_opts> report_quantities_nr_r16_e_; + struct quality_thres_nr_r16_s_ { + bool idle_rsrp_thres_nr_r16_present = false; + bool idle_rsrq_thres_nr_r16_present = false; + uint8_t idle_rsrp_thres_nr_r16 = 0; + uint8_t idle_rsrq_thres_nr_r16 = 0; + }; + struct ssb_meas_cfg_r16_s_ { + bool max_rs_idx_cell_qual_r16_present = false; + bool thresh_rs_idx_r16_present = false; + bool meas_timing_cfg_r16_present = false; + bool ssb_to_measure_r16_present = false; + bool ss_rssi_meas_r16_present = false; + uint8_t max_rs_idx_cell_qual_r16 = 1; + thres_list_nr_r15_s thresh_rs_idx_r16; + mtc_ssb_nr_r15_s meas_timing_cfg_r16; + ssb_to_measure_r15_c ssb_to_measure_r16; + bool derive_ssb_idx_from_cell_r16 = false; + ss_rssi_meas_r15_s ss_rssi_meas_r16; + }; + struct subcarrier_spacing_ssb_r17_opts { + enum options { khz480, spare1, nulltype } value; + typedef uint16_t number_type; + + const char* to_string() const; + uint16_t to_number() const; + }; + typedef enumerated<subcarrier_spacing_ssb_r17_opts> subcarrier_spacing_ssb_r17_e_; + + // member variables + bool ext = false; + bool freq_band_list_present = false; + bool meas_cell_list_nr_r16_present = false; + bool quality_thres_nr_r16_present = false; + bool ssb_meas_cfg_r16_present = false; + bool beam_meas_cfg_idle_r16_present = false; + uint32_t carrier_freq_nr_r16 = 0; + subcarrier_spacing_ssb_r16_e_ subcarrier_spacing_ssb_r16; + multi_freq_band_list_nr_r15_l freq_band_list; + cell_list_nr_r16_l meas_cell_list_nr_r16; + report_quantities_nr_r16_e_ report_quantities_nr_r16; + quality_thres_nr_r16_s_ quality_thres_nr_r16; + ssb_meas_cfg_r16_s_ ssb_meas_cfg_r16; + beam_meas_cfg_idle_nr_r16_s beam_meas_cfg_idle_r16; + // ... + // group 0 + bool subcarrier_spacing_ssb_r17_present = false; + subcarrier_spacing_ssb_r17_e_ subcarrier_spacing_ssb_r17; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // MultiBandInfoList-v10j0 ::= SEQUENCE (SIZE (1..8)) OF NS-PmaxList-r10 using multi_band_info_list_v10j0_l = dyn_array<ns_pmax_list_r10_l>; @@ -389,6 +667,9 @@ using multi_band_ns_pmax_list_nr_minus1_v1550_l = dyn_array<ns_pmax_list_nr_r15_ // MultiBandNsPmaxListNR-v1550 ::= SEQUENCE (SIZE (1..32)) OF NS-PmaxListNR-r15 using multi_band_ns_pmax_list_nr_v1550_l = dyn_array<ns_pmax_list_nr_r15_l>; +// NR-FreqNeighHSDN-CellList-r17 ::= SEQUENCE (SIZE (1..8)) OF PhysCellIdRangeNR-r16 +using nr_freq_neigh_hsdn_cell_list_r17_l = dyn_array<pci_range_nr_r16_s>; + // NeighCellCDMA2000 ::= SEQUENCE struct neigh_cell_cdma2000_s { bandclass_cdma2000_e band_class; @@ -515,9 +796,76 @@ struct sl_disc_cfg_other_inter_freq_r13_s { void to_json(json_writer& j) const; }; +// TLE-EphemerisParameters-r17 ::= SEQUENCE +struct tle_ephemeris_params_r17_s { + uint32_t inclination_r17 = 0; + uint32_t argument_perigee_r17 = 0; + uint32_t right_ascension_r17 = 0; + uint32_t mean_anomaly_r17 = 0; + uint32_t eccentricity_r17 = 0; + uint64_t mean_motion_r17 = 0; + int32_t bstar_decimal_r17 = -99999; + int8_t bstar_exponent_r17 = -9; + int32_t epoch_star_r17 = -1048575; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // UAC-BarringPerCatList-r15 ::= SEQUENCE (SIZE (1..63)) OF UAC-BarringPerCat-r15 using uac_barr_per_cat_list_r15_l = dyn_array<uac_barr_per_cat_r15_s>; +// CarrierFreqNBIOT-r16 ::= SEQUENCE +struct carrier_freq_nbiot_r16_s { + struct carrier_freq_offset_r16_opts { + enum options { + v_minus10, + v_minus9, + v_minus8dot5, + v_minus8, + v_minus7, + v_minus6, + v_minus5, + v_minus4dot5, + v_minus4, + v_minus3, + v_minus2, + v_minus1, + v_minus0dot5, + v0, + v1, + v2, + v3, + v3dot5, + v4, + v5, + v6, + v7, + v7dot5, + v8, + v9, + nulltype + } value; + typedef float number_type; + + const char* to_string() const; + float to_number() const; + const char* to_number_string() const; + }; + typedef enumerated<carrier_freq_offset_r16_opts> carrier_freq_offset_r16_e_; + + // member variables + uint32_t carrier_freq_r16 = 0; + carrier_freq_offset_r16_e_ carrier_freq_offset_r16; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // CarrierFreqNR-r15 ::= SEQUENCE struct carrier_freq_nr_r15_s { struct subcarrier_spacing_ssb_r15_opts { @@ -578,6 +926,56 @@ struct carrier_freq_nr_r15_s { void to_json(json_writer& j) const; }; +// CarrierFreqNR-v1610 ::= SEQUENCE +struct carrier_freq_nr_v1610_s { + bool smtc2_lp_r16_present = false; + bool ssb_position_qcl_common_nr_r16_present = false; + bool allowed_cell_list_nr_r16_present = false; + bool high_speed_carrier_nr_r16_present = false; + mtc_ssb2_lp_nr_r16_s smtc2_lp_r16; + ssb_position_qcl_relation_nr_r16_e ssb_position_qcl_common_nr_r16; + allowed_cell_list_nr_r16_l allowed_cell_list_nr_r16; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// CarrierFreqNR-v1700 ::= SEQUENCE +struct carrier_freq_nr_v1700_s { + bool nr_freq_neigh_hsdn_cell_list_r17_present = false; + nr_freq_neigh_hsdn_cell_list_r17_l nr_freq_neigh_hsdn_cell_list_r17; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// CarrierFreqNR-v1720 ::= SEQUENCE +struct carrier_freq_nr_v1720_s { + struct subcarrier_spacing_ssb_r17_opts { + enum options { khz480, spare1, nulltype } value; + typedef uint16_t number_type; + + const char* to_string() const; + uint16_t to_number() const; + }; + typedef enumerated<subcarrier_spacing_ssb_r17_opts> subcarrier_spacing_ssb_r17_e_; + + // member variables + bool subcarrier_spacing_ssb_r17_present = false; + bool ssb_position_qcl_common_nr_r17_present = false; + subcarrier_spacing_ssb_r17_e_ subcarrier_spacing_ssb_r17; + ssb_position_qcl_relation_nr_r17_e ssb_position_qcl_common_nr_r17; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // CarrierFreqUTRA-FDD ::= SEQUENCE struct carrier_freq_utra_fdd_s { struct thresh_x_q_r9_s_ { @@ -717,6 +1115,36 @@ struct eab_cfg_r11_s { void to_json(json_writer& j) const; }; +// EphemerisOrbitalParameters-r17 ::= SEQUENCE +struct ephemeris_orbital_params_r17_s { + uint64_t semi_major_axis_r17 = 0; + uint32_t eccentricity_r17 = 0; + uint32_t periapsis_r17 = 0; + uint32_t longitude_r17 = 0; + int32_t inclination_r17 = -67108864; + uint32_t anomaly_r17 = 0; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// EphemerisStateVectors-r17 ::= SEQUENCE +struct ephemeris_state_vectors_r17_s { + int32_t position_x_r17 = -33554432; + int32_t position_y_r17 = -33554432; + int32_t position_z_r17 = -33554432; + int32_t velocity_vx_r17 = -131072; + int32_t velocity_vy_r17 = -131072; + int32_t velocity_vz_r17 = -131072; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // InterFreqCarrierFreqInfo ::= SEQUENCE struct inter_freq_carrier_freq_info_s { struct thresh_x_q_r9_s_ { @@ -725,27 +1153,27 @@ struct inter_freq_carrier_freq_info_s { }; // member variables - bool ext = false; - bool p_max_present = false; - bool t_resel_eutra_sf_present = false; - bool cell_resel_prio_present = false; - bool q_offset_freq_present = false; - bool inter_freq_neigh_cell_list_present = false; - bool inter_freq_black_cell_list_present = false; - uint32_t dl_carrier_freq = 0; - int8_t q_rx_lev_min = -70; - int8_t p_max = -30; - uint8_t t_resel_eutra = 0; - speed_state_scale_factors_s t_resel_eutra_sf; - uint8_t thresh_x_high = 0; - uint8_t thresh_x_low = 0; - allowed_meas_bw_e allowed_meas_bw; - bool presence_ant_port1 = false; - uint8_t cell_resel_prio = 0; - fixed_bitstring<2> neigh_cell_cfg; - q_offset_range_e q_offset_freq; - inter_freq_neigh_cell_list_l inter_freq_neigh_cell_list; - inter_freq_black_cell_list_l inter_freq_black_cell_list; + bool ext = false; + bool p_max_present = false; + bool t_resel_eutra_sf_present = false; + bool cell_resel_prio_present = false; + bool q_offset_freq_present = false; + bool inter_freq_neigh_cell_list_present = false; + bool inter_freq_excluded_cell_list_present = false; + uint32_t dl_carrier_freq = 0; + int8_t q_rx_lev_min = -70; + int8_t p_max = -30; + uint8_t t_resel_eutra = 0; + speed_state_scale_factors_s t_resel_eutra_sf; + uint8_t thresh_x_high = 0; + uint8_t thresh_x_low = 0; + allowed_meas_bw_e allowed_meas_bw; + bool presence_ant_port1 = false; + uint8_t cell_resel_prio = 0; + fixed_bitstring<2> neigh_cell_cfg; + q_offset_range_e q_offset_freq; + inter_freq_neigh_cell_list_l inter_freq_neigh_cell_list; + inter_freq_excluded_cell_list_l inter_freq_excluded_cell_list; // ... // group 0 bool q_qual_min_r9_present = false; @@ -769,38 +1197,38 @@ struct inter_freq_carrier_freq_info_r12_s { }; // member variables - bool ext = false; - bool p_max_r12_present = false; - bool t_resel_eutra_sf_r12_present = false; - bool cell_resel_prio_r12_present = false; - bool q_offset_freq_r12_present = false; - bool inter_freq_neigh_cell_list_r12_present = false; - bool inter_freq_black_cell_list_r12_present = false; - bool q_qual_min_r12_present = false; - bool thresh_x_q_r12_present = false; - bool q_qual_min_wb_r12_present = false; - bool multi_band_info_list_r12_present = false; - bool reduced_meas_performance_r12_present = false; - bool q_qual_min_rsrq_on_all_symbols_r12_present = false; - uint32_t dl_carrier_freq_r12 = 0; - int8_t q_rx_lev_min_r12 = -70; - int8_t p_max_r12 = -30; - uint8_t t_resel_eutra_r12 = 0; - speed_state_scale_factors_s t_resel_eutra_sf_r12; - uint8_t thresh_x_high_r12 = 0; - uint8_t thresh_x_low_r12 = 0; - allowed_meas_bw_e allowed_meas_bw_r12; - bool presence_ant_port1_r12 = false; - uint8_t cell_resel_prio_r12 = 0; - fixed_bitstring<2> neigh_cell_cfg_r12; - q_offset_range_e q_offset_freq_r12; - inter_freq_neigh_cell_list_l inter_freq_neigh_cell_list_r12; - inter_freq_black_cell_list_l inter_freq_black_cell_list_r12; - int8_t q_qual_min_r12 = -34; - thresh_x_q_r12_s_ thresh_x_q_r12; - int8_t q_qual_min_wb_r12 = -34; - multi_band_info_list_r11_l multi_band_info_list_r12; - int8_t q_qual_min_rsrq_on_all_symbols_r12 = -34; + bool ext = false; + bool p_max_r12_present = false; + bool t_resel_eutra_sf_r12_present = false; + bool cell_resel_prio_r12_present = false; + bool q_offset_freq_r12_present = false; + bool inter_freq_neigh_cell_list_r12_present = false; + bool inter_freq_excluded_cell_list_r12_present = false; + bool q_qual_min_r12_present = false; + bool thresh_x_q_r12_present = false; + bool q_qual_min_wb_r12_present = false; + bool multi_band_info_list_r12_present = false; + bool reduced_meas_performance_r12_present = false; + bool q_qual_min_rsrq_on_all_symbols_r12_present = false; + uint32_t dl_carrier_freq_r12 = 0; + int8_t q_rx_lev_min_r12 = -70; + int8_t p_max_r12 = -30; + uint8_t t_resel_eutra_r12 = 0; + speed_state_scale_factors_s t_resel_eutra_sf_r12; + uint8_t thresh_x_high_r12 = 0; + uint8_t thresh_x_low_r12 = 0; + allowed_meas_bw_e allowed_meas_bw_r12; + bool presence_ant_port1_r12 = false; + uint8_t cell_resel_prio_r12 = 0; + fixed_bitstring<2> neigh_cell_cfg_r12; + q_offset_range_e q_offset_freq_r12; + inter_freq_neigh_cell_list_l inter_freq_neigh_cell_list_r12; + inter_freq_excluded_cell_list_l inter_freq_excluded_cell_list_r12; + int8_t q_qual_min_r12 = -34; + thresh_x_q_r12_s_ thresh_x_q_r12; + int8_t q_qual_min_wb_r12 = -34; + multi_band_info_list_r11_l multi_band_info_list_r12; + int8_t q_qual_min_rsrq_on_all_symbols_r12 = -34; // ... // sequence methods @@ -887,6 +1315,23 @@ struct inter_freq_carrier_freq_info_v1530_s { void to_json(json_writer& j) const; }; +// InterFreqCarrierFreqInfo-v1610 ::= SEQUENCE +struct inter_freq_carrier_freq_info_v1610_s { + bool alt_cell_resel_prio_r16_present = false; + bool alt_cell_resel_sub_prio_r16_present = false; + bool rss_cfg_carrier_info_r16_present = false; + bool inter_freq_neigh_cell_list_v1610_present = false; + uint8_t alt_cell_resel_prio_r16 = 0; + cell_resel_sub_prio_r13_e alt_cell_resel_sub_prio_r16; + rss_cfg_carrier_info_r16_s rss_cfg_carrier_info_r16; + inter_freq_neigh_cell_list_v1610_l inter_freq_neigh_cell_list_v1610; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // IntraFreqNeighCellInfo ::= SEQUENCE struct intra_freq_neigh_cell_info_s { bool ext = false; @@ -900,6 +1345,16 @@ struct intra_freq_neigh_cell_info_s { void to_json(json_writer& j) const; }; +// IntraFreqNeighCellInfo-v1610 ::= SEQUENCE +struct intra_freq_neigh_cell_info_v1610_s { + rss_meas_pwr_bias_r16_e rss_meas_pwr_bias_r16; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // MBMS-CarrierType-r14 ::= SEQUENCE struct mbms_carrier_type_r14_s { struct carrier_type_r14_opts { @@ -942,6 +1397,29 @@ struct mbms_sai_inter_freq_v1140_s { void to_json(json_writer& j) const; }; +// MBSFN-AreaInfo-r17 ::= SEQUENCE +struct mbsfn_area_info_r17_s { + struct pmch_bw_r17_opts { + enum options { n40, n35, n30, spare1, nulltype } value; + typedef uint8_t number_type; + + const char* to_string() const; + uint8_t to_number() const; + }; + typedef enumerated<pmch_bw_r17_opts> pmch_bw_r17_e_; + + // member variables + bool ext = false; + mbsfn_area_info_r16_s mbsfn_area_info_r17; + pmch_bw_r17_e_ pmch_bw_r17; + // ... + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // MBSFN-AreaInfo-r9 ::= SEQUENCE struct mbsfn_area_info_r9_s { struct non_mbsfn_region_len_opts { @@ -1037,12 +1515,26 @@ struct mbsfn_area_info_r9_s { void to_json(json_writer& j) const; }; +// NR-CarrierList-r16 ::= SEQUENCE (SIZE (1..8)) OF MeasIdleCarrierNR-r16 +using nr_carrier_list_r16_l = dyn_array<meas_idle_carrier_nr_r16_s>; + // NeighCellListCDMA2000 ::= SEQUENCE (SIZE (1..16)) OF NeighCellCDMA2000 using neigh_cell_list_cdma2000_l = dyn_array<neigh_cell_cdma2000_s>; // NeighCellListCDMA2000-v920 ::= SEQUENCE (SIZE (1..16)) OF NeighCellCDMA2000-v920 using neigh_cell_list_cdma2000_v920_l = dyn_array<neigh_cell_cdma2000_v920_s>; +// PLMN-Info-r16 ::= SEQUENCE +struct plmn_info_r16_s { + bool nr_band_list_r16_present = false; + fixed_bitstring<10> nr_band_list_r16; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // ReselectionInfoRelay-r13 ::= SEQUENCE struct resel_info_relay_r13_s { struct min_hyst_r13_opts { @@ -1159,6 +1651,45 @@ struct sl_pppp_tx_cfg_idx_r15_s { void to_json(json_writer& j) const; }; +// SatelliteInfo-r17 ::= SEQUENCE +struct satellite_info_r17_s { + struct service_info_r17_s_ { + bool tle_ephemeris_params_r17_present = false; + bool t_service_start_r17_present = false; + tle_ephemeris_params_r17_s tle_ephemeris_params_r17; + uint32_t t_service_start_r17 = 0; + }; + struct footprint_info_r17_s_ { + struct ref_point_r17_s_ { + int32_t longitude_r17 = -131072; + int32_t latitude_r17 = -131072; + }; + struct elevation_angles_r17_s_ { + bool elevation_angle_left_r17_present = false; + int8_t elevation_angle_right_r17 = -14; + int8_t elevation_angle_left_r17 = -14; + }; + + // member variables + bool ref_point_r17_present = false; + bool elevation_angles_r17_present = false; + bool radius_r17_present = false; + ref_point_r17_s_ ref_point_r17; + elevation_angles_r17_s_ elevation_angles_r17; + uint16_t radius_r17 = 1; + }; + + // member variables + uint16_t satellite_id_r17 = 0; + service_info_r17_s_ service_info_r17; + footprint_info_r17_s_ footprint_info_r17; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // UAC-BarringInfoSet-r15 ::= SEQUENCE struct uac_barr_info_set_r15_s { struct uac_barr_factor_r15_opts { @@ -1190,6 +1721,28 @@ struct uac_barr_info_set_r15_s { void to_json(json_writer& j) const; }; +// UAC-BarringInfoSet-v1700 ::= SEQUENCE +struct uac_barr_info_set_v1700_s { + struct uac_barr_factor_for_ai3_r17_opts { + enum options { p00, p05, p10, p15, p20, p25, p30, p40, p50, p60, p70, p75, p80, p85, p90, p95, nulltype } value; + typedef float number_type; + + const char* to_string() const; + float to_number() const; + const char* to_number_string() const; + }; + typedef enumerated<uac_barr_factor_for_ai3_r17_opts> uac_barr_factor_for_ai3_r17_e_; + + // member variables + bool uac_barr_factor_for_ai3_r17_present = false; + uac_barr_factor_for_ai3_r17_e_ uac_barr_factor_for_ai3_r17; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // UAC-BarringPerPLMN-r15 ::= SEQUENCE struct uac_barr_per_plmn_r15_s { struct uac_ac_barr_list_type_r15_c_ { @@ -1253,6 +1806,47 @@ struct uac_barr_per_plmn_r15_s { void to_json(json_writer& j) const; }; +// ApplicableDisasterInfo-r17 ::= CHOICE +struct applicable_disaster_info_r17_c { + using ded_plmns_r17_l_ = dyn_array<plmn_id_s>; + struct types_opts { + enum options { no_disaster_roaming_r17, disaster_related_ind_r17, common_plmns_r17, ded_plmns_r17, nulltype } value; + + const char* to_string() const; + }; + typedef enumerated<types_opts> types; + + // choice methods + applicable_disaster_info_r17_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 + ded_plmns_r17_l_& ded_plmns_r17() + { + assert_choice_type(types::ded_plmns_r17, type_, "ApplicableDisasterInfo-r17"); + return c; + } + const ded_plmns_r17_l_& ded_plmns_r17() const + { + assert_choice_type(types::ded_plmns_r17, type_, "ApplicableDisasterInfo-r17"); + return c; + } + void set_no_disaster_roaming_r17(); + void set_disaster_related_ind_r17(); + void set_common_plmns_r17(); + ded_plmns_r17_l_& set_ded_plmns_r17(); + +private: + types type_; + ded_plmns_r17_l_ c; +}; + +// BandListENDC-r16 ::= SEQUENCE (SIZE (1..10)) OF INTEGER (1..1024) +using band_list_endc_r16_l = bounded_array<uint16_t, 10>; + // CarrierFreqInfoUTRA-v1250 ::= SEQUENCE struct carrier_freq_info_utra_v1250_s { bool reduced_meas_performance_r12_present = false; @@ -1263,9 +1857,21 @@ struct carrier_freq_info_utra_v1250_s { void to_json(json_writer& j) const; }; +// CarrierFreqListNBIOT-r16 ::= SEQUENCE (SIZE (1..8)) OF CarrierFreqNBIOT-r16 +using carrier_freq_list_nbiot_r16_l = dyn_array<carrier_freq_nbiot_r16_s>; + // CarrierFreqListNR-r15 ::= SEQUENCE (SIZE (1..8)) OF CarrierFreqNR-r15 using carrier_freq_list_nr_r15_l = dyn_array<carrier_freq_nr_r15_s>; +// CarrierFreqListNR-v1610 ::= SEQUENCE (SIZE (1..8)) OF CarrierFreqNR-v1610 +using carrier_freq_list_nr_v1610_l = dyn_array<carrier_freq_nr_v1610_s>; + +// CarrierFreqListNR-v1700 ::= SEQUENCE (SIZE (1..8)) OF CarrierFreqNR-v1700 +using carrier_freq_list_nr_v1700_l = dyn_array<carrier_freq_nr_v1700_s>; + +// CarrierFreqListNR-v1720 ::= SEQUENCE (SIZE (1..8)) OF CarrierFreqNR-v1720 +using carrier_freq_list_nr_v1720_l = dyn_array<carrier_freq_nr_v1720_s>; + // CarrierFreqListUTRA-FDD ::= SEQUENCE (SIZE (1..16)) OF CarrierFreqUTRA-FDD using carrier_freq_list_utra_fdd_l = dyn_array<carrier_freq_utra_fdd_s>; @@ -1345,6 +1951,19 @@ struct cell_resel_serving_freq_info_v1310_s { void to_json(json_writer& j) const; }; +// CellReselectionServingFreqInfo-v1610 ::= SEQUENCE +struct cell_resel_serving_freq_info_v1610_s { + bool alt_cell_resel_prio_r16_present = false; + bool alt_cell_resel_sub_prio_r16_present = false; + uint8_t alt_cell_resel_prio_r16 = 0; + cell_resel_sub_prio_r13_e alt_cell_resel_sub_prio_r16; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // EAB-ConfigPLMN-r11 ::= SEQUENCE struct eab_cfg_plmn_r11_s { bool eab_cfg_r11_present = false; @@ -1371,6 +1990,9 @@ using inter_freq_carrier_freq_list_v1350_l = dyn_array<inter_freq_carrier_freq_i // InterFreqCarrierFreqList-v1530 ::= SEQUENCE (SIZE (1..8)) OF InterFreqCarrierFreqInfo-v1530 using inter_freq_carrier_freq_list_v1530_l = dyn_array<inter_freq_carrier_freq_info_v1530_s>; +// InterFreqCarrierFreqList-v1610 ::= SEQUENCE (SIZE (1..8)) OF InterFreqCarrierFreqInfo-v1610 +using inter_freq_carrier_freq_list_v1610_l = dyn_array<inter_freq_carrier_freq_info_v1610_s>; + // InterFreqCarrierFreqListExt-r12 ::= SEQUENCE (SIZE (1..8)) OF InterFreqCarrierFreqInfo-r12 using inter_freq_carrier_freq_list_ext_r12_l = dyn_array<inter_freq_carrier_freq_info_r12_s>; @@ -1389,12 +2011,18 @@ using inter_freq_carrier_freq_list_ext_v1360_l = dyn_array<inter_freq_carrier_fr // InterFreqCarrierFreqListExt-v1530 ::= SEQUENCE (SIZE (1..8)) OF InterFreqCarrierFreqInfo-v1530 using inter_freq_carrier_freq_list_ext_v1530_l = dyn_array<inter_freq_carrier_freq_info_v1530_s>; -// IntraFreqBlackCellList ::= SEQUENCE (SIZE (1..16)) OF PhysCellIdRange -using intra_freq_black_cell_list_l = dyn_array<pci_range_s>; +// InterFreqCarrierFreqListExt-v1610 ::= SEQUENCE (SIZE (1..8)) OF InterFreqCarrierFreqInfo-v1610 +using inter_freq_carrier_freq_list_ext_v1610_l = dyn_array<inter_freq_carrier_freq_info_v1610_s>; + +// IntraFreqExcludedCellList ::= SEQUENCE (SIZE (1..16)) OF PhysCellIdRange +using intra_freq_excluded_cell_list_l = dyn_array<pci_range_s>; // IntraFreqNeighCellList ::= SEQUENCE (SIZE (1..16)) OF IntraFreqNeighCellInfo using intra_freq_neigh_cell_list_l = dyn_array<intra_freq_neigh_cell_info_s>; +// IntraFreqNeighCellList-v1610 ::= SEQUENCE (SIZE (1..16)) OF IntraFreqNeighCellInfo-v1610 +using intra_freq_neigh_cell_list_v1610_l = dyn_array<intra_freq_neigh_cell_info_v1610_s>; + // IntraFreqNeighHSDN-CellList-r15 ::= SEQUENCE (SIZE (1..16)) OF PhysCellIdRange using intra_freq_neigh_hsdn_cell_list_r15_l = dyn_array<pci_range_s>; @@ -1439,9 +2067,27 @@ using mbms_sai_inter_freq_list_r11_l = dyn_array<mbms_sai_inter_freq_r11_s>; // MBMS-SAI-InterFreqList-v1140 ::= SEQUENCE (SIZE (1..8)) OF MBMS-SAI-InterFreq-v1140 using mbms_sai_inter_freq_list_v1140_l = dyn_array<mbms_sai_inter_freq_v1140_s>; +// MBSFN-AreaInfoList-r16 ::= SEQUENCE (SIZE (1..8)) OF MBSFN-AreaInfo-r16 +using mbsfn_area_info_list_r16_l = dyn_array<mbsfn_area_info_r16_s>; + +// MBSFN-AreaInfoList-r17 ::= SEQUENCE (SIZE (1..8)) OF MBSFN-AreaInfo-r17 +using mbsfn_area_info_list_r17_l = dyn_array<mbsfn_area_info_r17_s>; + // MBSFN-AreaInfoList-r9 ::= SEQUENCE (SIZE (1..8)) OF MBSFN-AreaInfo-r9 using mbsfn_area_info_list_r9_l = dyn_array<mbsfn_area_info_r9_s>; +// MeasIdleConfigSIB-NR-r16 ::= SEQUENCE +struct meas_idle_cfg_sib_nr_r16_s { + bool ext = false; + nr_carrier_list_r16_l meas_idle_carrier_list_nr_r16; + // ... + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // MeasIdleConfigSIB-r15 ::= SEQUENCE struct meas_idle_cfg_sib_r15_s { bool ext = false; @@ -1454,6 +2100,9 @@ struct meas_idle_cfg_sib_r15_s { void to_json(json_writer& j) const; }; +// PLMN-InfoList-r16 ::= SEQUENCE (SIZE (0..6)) OF PLMN-Info-r16 +using plmn_info_list_r16_l = dyn_array<plmn_info_r16_s>; + // RedistributionServingInfo-r13 ::= SEQUENCE struct redist_serving_info_r13_s { struct t360_r13_opts { @@ -1829,9 +2478,104 @@ struct sl_disc_cfg_remote_ue_r13_s { void to_json(json_writer& j) const; }; +// SL-NR-AnchorCarrierFreqList-r16 ::= SEQUENCE (SIZE (1..8)) OF INTEGER (0..3279165) +using sl_nr_anchor_carrier_freq_list_r16_l = bounded_array<uint32_t, 8>; + // SL-SyncConfigList-r12 ::= SEQUENCE (SIZE (1..16)) OF SL-SyncConfig-r12 using sl_sync_cfg_list_r12_l = dyn_array<sl_sync_cfg_r12_s>; +// SatelliteInfoList-r17 ::= SEQUENCE (SIZE (1..4)) OF SatelliteInfo-r17 +using satellite_info_list_r17_l = dyn_array<satellite_info_r17_s>; + +// ServingSatelliteInfo-r17 ::= SEQUENCE +struct serving_satellite_info_r17_s { + struct ephemeris_info_r17_c_ { + struct types_opts { + enum options { state_vectors, orbital_params, nulltype } value; + + const char* to_string() const; + }; + typedef enumerated<types_opts> types; + + // choice methods + ephemeris_info_r17_c_() = default; + ephemeris_info_r17_c_(const ephemeris_info_r17_c_& other); + ephemeris_info_r17_c_& operator=(const ephemeris_info_r17_c_& other); + ~ephemeris_info_r17_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 + ephemeris_state_vectors_r17_s& state_vectors() + { + assert_choice_type(types::state_vectors, type_, "ephemerisInfo-r17"); + return c.get<ephemeris_state_vectors_r17_s>(); + } + ephemeris_orbital_params_r17_s& orbital_params() + { + assert_choice_type(types::orbital_params, type_, "ephemerisInfo-r17"); + return c.get<ephemeris_orbital_params_r17_s>(); + } + const ephemeris_state_vectors_r17_s& state_vectors() const + { + assert_choice_type(types::state_vectors, type_, "ephemerisInfo-r17"); + return c.get<ephemeris_state_vectors_r17_s>(); + } + const ephemeris_orbital_params_r17_s& orbital_params() const + { + assert_choice_type(types::orbital_params, type_, "ephemerisInfo-r17"); + return c.get<ephemeris_orbital_params_r17_s>(); + } + ephemeris_state_vectors_r17_s& set_state_vectors(); + ephemeris_orbital_params_r17_s& set_orbital_params(); + + private: + types type_; + choice_buffer_t<ephemeris_orbital_params_r17_s, ephemeris_state_vectors_r17_s> c; + + void destroy_(); + }; + struct nta_common_params_minus17_s_ { + bool nta_common_r17_present = false; + bool nta_common_drift_r17_present = false; + bool nta_common_drift_variation_r17_present = false; + uint32_t nta_common_r17 = 0; + int32_t nta_common_drift_r17 = -261935; + uint16_t nta_common_drift_variation_r17 = 0; + }; + struct ul_sync_validity_dur_r17_opts { + enum options { s5, s10, s15, s20, s25, s30, s35, s40, s45, s50, s55, s60, s120, s180, s240, s900, nulltype } value; + typedef uint16_t number_type; + + const char* to_string() const; + uint16_t to_number() const; + }; + typedef enumerated<ul_sync_validity_dur_r17_opts> ul_sync_validity_dur_r17_e_; + struct epoch_time_r17_s_ { + uint16_t start_sfn_r17 = 0; + uint8_t start_sub_frame_r17 = 0; + }; + + // member variables + bool ext = false; + bool epoch_time_r17_present = false; + bool k_mac_r17_present = false; + ephemeris_info_r17_c_ ephemeris_info_r17; + nta_common_params_minus17_s_ nta_common_params_minus17; + ul_sync_validity_dur_r17_e_ ul_sync_validity_dur_r17; + epoch_time_r17_s_ epoch_time_r17; + uint16_t k_offset_r17 = 0; + uint16_t k_mac_r17 = 1; + // ... + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // UAC-AC1-SelectAssistInfo-r15 ::= ENUMERATED struct uac_ac1_select_assist_info_r15_opts { enum options { a, b, c, nulltype } value; @@ -1840,9 +2584,20 @@ struct uac_ac1_select_assist_info_r15_opts { }; typedef enumerated<uac_ac1_select_assist_info_r15_opts> uac_ac1_select_assist_info_r15_e; +// UAC-AC1-SelectAssistInfo-r16 ::= ENUMERATED +struct uac_ac1_select_assist_info_r16_opts { + enum options { a, b, c, not_cfgured, nulltype } value; + + const char* to_string() const; +}; +typedef enumerated<uac_ac1_select_assist_info_r16_opts> uac_ac1_select_assist_info_r16_e; + // UAC-BarringInfoSetList-r15 ::= SEQUENCE (SIZE (1..8)) OF UAC-BarringInfoSet-r15 using uac_barr_info_set_list_r15_l = dyn_array<uac_barr_info_set_r15_s>; +// UAC-BarringInfoSetList-v1700 ::= SEQUENCE (SIZE (1..8)) OF UAC-BarringInfoSet-v1700 +using uac_barr_info_set_list_v1700_l = dyn_array<uac_barr_info_set_v1700_s>; + // UAC-BarringPerPLMN-List-r15 ::= SEQUENCE (SIZE (1..6)) OF UAC-BarringPerPLMN-r15 using uac_barr_per_plmn_list_r15_l = dyn_array<uac_barr_per_plmn_r15_s>; @@ -1959,6 +2714,10 @@ struct sib_type13_r9_s { // ... // group 0 copy_ptr<mbms_notif_cfg_v1430_s> notif_cfg_v1430; + // group 1 + copy_ptr<mbsfn_area_info_list_r16_l> mbsfn_area_info_list_r16; + // group 2 + copy_ptr<mbsfn_area_info_list_r17_l> mbsfn_area_info_list_r17; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -2400,6 +3159,8 @@ struct sib_type21_r14_s { sl_v2x_cfg_common_r14_s sl_v2x_cfg_common_r14; dyn_octstring late_non_crit_ext; // ... + // group 0 + copy_ptr<sl_nr_anchor_carrier_freq_list_r16_l> anchor_carrier_freq_list_nr_r16; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -2418,6 +3179,12 @@ struct sib_type24_r15_s { speed_state_scale_factors_s t_resel_nr_sf_r15; dyn_octstring late_non_crit_ext; // ... + // group 0 + copy_ptr<carrier_freq_list_nr_v1610_l> carrier_freq_list_nr_v1610; + // group 1 + copy_ptr<carrier_freq_list_nr_v1700_l> carrier_freq_list_nr_v1700; + // group 2 + copy_ptr<carrier_freq_list_nr_v1720_l> carrier_freq_list_nr_v1720; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -2476,6 +3243,15 @@ struct sib_type25_r15_s { void destroy_(); }; + struct ab_per_rsrp_r16_opts { + enum options { thresh0, thresh1, thresh2, thresh3, nulltype } value; + typedef uint8_t number_type; + + const char* to_string() const; + uint8_t to_number() const; + }; + typedef enumerated<ab_per_rsrp_r16_opts> ab_per_rsrp_r16_e_; + using uac_ac1_select_assist_info_r16_l_ = bounded_array<uac_ac1_select_assist_info_r16_e, 6>; // member variables bool ext = false; @@ -2489,6 +3265,13 @@ struct sib_type25_r15_s { uac_ac1_select_assist_info_r15_c_ uac_ac1_select_assist_info_r15; dyn_octstring late_non_crit_ext; // ... + // group 0 + bool ab_per_rsrp_r16_present = false; + ab_per_rsrp_r16_e_ ab_per_rsrp_r16; + // group 1 + copy_ptr<uac_ac1_select_assist_info_r16_l_> uac_ac1_select_assist_info_r16; + // group 2 + copy_ptr<uac_barr_info_set_list_v1700_l> uac_barr_info_set_list_v1700; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -2522,6 +3305,77 @@ struct sib_type26_r15_s { void to_json(json_writer& j) const; }; +// SystemInformationBlockType26a-r16 ::= SEQUENCE +struct sib_type26a_r16_s { + bool ext = false; + bool late_non_crit_ext_present = false; + plmn_info_list_r16_l plmn_info_list_r16; + band_list_endc_r16_l band_list_endc_r16; + dyn_octstring late_non_crit_ext; + // ... + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// SystemInformationBlockType27-r16 ::= SEQUENCE +struct sib_type27_r16_s { + bool ext = false; + bool carrier_freq_list_nbiot_r16_present = false; + bool late_non_crit_ext_present = false; + carrier_freq_list_nbiot_r16_l carrier_freq_list_nbiot_r16; + dyn_octstring late_non_crit_ext; + // ... + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// SystemInformationBlockType28-r16 ::= SEQUENCE +struct sib_type28_r16_s { + struct segment_type_r16_opts { + enum options { not_last_segment, last_segment, nulltype } value; + + const char* to_string() const; + }; + typedef enumerated<segment_type_r16_opts> segment_type_r16_e_; + + // member variables + bool ext = false; + bool late_non_crit_ext_present = false; + uint8_t segment_num_r16 = 0; + segment_type_r16_e_ segment_type_r16; + dyn_octstring segment_container_r16; + dyn_octstring late_non_crit_ext; + // ... + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// SystemInformationBlockType29-r16 ::= SEQUENCE +struct sib_type29_r16_s { + bool ext = false; + bool res_reserv_cfg_common_dl_r16_present = false; + bool res_reserv_cfg_common_ul_r16_present = false; + bool late_non_crit_ext_present = false; + res_reserv_cfg_dl_r16_s res_reserv_cfg_common_dl_r16; + res_reserv_cfg_ul_r16_s res_reserv_cfg_common_ul_r16; + dyn_octstring late_non_crit_ext; + // ... + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // SystemInformationBlockType3 ::= SEQUENCE struct sib_type3_s { struct cell_resel_info_common_s_ { @@ -2651,6 +3505,61 @@ struct sib_type3_s { bool crs_intf_mitig_neigh_cells_ce_r15_present = false; copy_ptr<cell_resel_info_hsdn_r15_s> cell_resel_info_hsdn_r15; copy_ptr<cell_sel_info_ce_v1530_s> cell_sel_info_ce_v1530; + // group 8 + copy_ptr<cell_resel_serving_freq_info_v1610_s> cell_resel_serving_freq_info_v1610; + // group 9 + bool t_service_r17_present = false; + uint32_t t_service_r17 = 0; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// SystemInformationBlockType30-r17 ::= SEQUENCE +struct sib_type30_r17_s { + using common_plmns_with_disaster_condition_r17_l_ = dyn_array<plmn_id_s>; + using applicable_disaster_info_list_r17_l_ = dyn_array<applicable_disaster_info_r17_c>; + + // member variables + bool ext = false; + bool common_plmns_with_disaster_condition_r17_present = false; + bool applicable_disaster_info_list_r17_present = false; + bool late_non_crit_ext_present = false; + common_plmns_with_disaster_condition_r17_l_ common_plmns_with_disaster_condition_r17; + applicable_disaster_info_list_r17_l_ applicable_disaster_info_list_r17; + dyn_octstring late_non_crit_ext; + // ... + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// SystemInformationBlockType31-r17 ::= SEQUENCE +struct sib_type31_r17_s { + bool ext = false; + bool late_non_crit_ext_present = false; + serving_satellite_info_r17_s serving_satellite_info_r17; + dyn_octstring late_non_crit_ext; + // ... + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// SystemInformationBlockType32-r17 ::= SEQUENCE +struct sib_type32_r17_s { + bool ext = false; + bool satellite_info_list_r17_present = false; + bool late_non_crit_ext_present = false; + satellite_info_list_r17_l satellite_info_list_r17; + dyn_octstring late_non_crit_ext; + // ... // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -2660,18 +3569,21 @@ struct sib_type3_s { // SystemInformationBlockType4 ::= SEQUENCE struct sib_type4_s { - bool ext = false; - bool intra_freq_neigh_cell_list_present = false; - bool intra_freq_black_cell_list_present = false; - bool csg_pci_range_present = false; - intra_freq_neigh_cell_list_l intra_freq_neigh_cell_list; - intra_freq_black_cell_list_l intra_freq_black_cell_list; - pci_range_s csg_pci_range; + bool ext = false; + bool intra_freq_neigh_cell_list_present = false; + bool intra_freq_excluded_cell_list_present = false; + bool csg_pci_range_present = false; + intra_freq_neigh_cell_list_l intra_freq_neigh_cell_list; + intra_freq_excluded_cell_list_l intra_freq_excluded_cell_list; + pci_range_s csg_pci_range; // ... bool late_non_crit_ext_present = false; dyn_octstring late_non_crit_ext; // group 0 copy_ptr<intra_freq_neigh_hsdn_cell_list_r15_l> intra_freq_neigh_hsdn_cell_list_r15; + // group 1 + copy_ptr<rss_cfg_carrier_info_r16_s> rss_cfg_carrier_info_r16; + copy_ptr<intra_freq_neigh_cell_list_v1610_l> intra_freq_neigh_cell_list_v1610; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -2706,6 +3618,10 @@ struct sib_type5_s { copy_ptr<inter_freq_carrier_freq_list_v1530_l> inter_freq_carrier_freq_list_v1530; copy_ptr<inter_freq_carrier_freq_list_ext_v1530_l> inter_freq_carrier_freq_list_ext_v1530; copy_ptr<meas_idle_cfg_sib_r15_s> meas_idle_cfg_sib_r15; + // group 7 + copy_ptr<inter_freq_carrier_freq_list_v1610_l> inter_freq_carrier_freq_list_v1610; + copy_ptr<inter_freq_carrier_freq_list_ext_v1610_l> inter_freq_carrier_freq_list_ext_v1610; + copy_ptr<meas_idle_cfg_sib_nr_r16_s> meas_idle_cfg_sib_nr_r16; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -2855,12 +3771,23 @@ struct pos_sys_info_r15_ies_s { pos_sib2_minus19_r15, pos_sib3_minus1_r15, // ... + pos_sib1_minus8_v1610, + pos_sib2_minus20_v1610, + pos_sib2_minus21_v1610, + pos_sib2_minus22_v1610, + pos_sib2_minus23_v1610, + pos_sib2_minus24_v1610, + pos_sib2_minus25_v1610, + pos_sib4_minus1_v1610, + pos_sib5_minus1_v1610, + pos_sib1_minus9_v1700, + pos_sib1_minus10_v1700, nulltype } value; const char* to_string() const; }; - typedef enumerated<types_opts, true> types; + typedef enumerated<types_opts, true, 11> types; // choice methods pos_sib_type_and_info_r15_item_c_() = default; @@ -3008,6 +3935,61 @@ struct pos_sys_info_r15_ies_s { assert_choice_type(types::pos_sib3_minus1_r15, type_, "posSIB-TypeAndInfo-r15-item"); return c.get<sib_pos_r15_s>(); } + sib_pos_r15_s& pos_sib1_minus8_v1610() + { + assert_choice_type(types::pos_sib1_minus8_v1610, type_, "posSIB-TypeAndInfo-r15-item"); + return c.get<sib_pos_r15_s>(); + } + sib_pos_r15_s& pos_sib2_minus20_v1610() + { + assert_choice_type(types::pos_sib2_minus20_v1610, type_, "posSIB-TypeAndInfo-r15-item"); + return c.get<sib_pos_r15_s>(); + } + sib_pos_r15_s& pos_sib2_minus21_v1610() + { + assert_choice_type(types::pos_sib2_minus21_v1610, type_, "posSIB-TypeAndInfo-r15-item"); + return c.get<sib_pos_r15_s>(); + } + sib_pos_r15_s& pos_sib2_minus22_v1610() + { + assert_choice_type(types::pos_sib2_minus22_v1610, type_, "posSIB-TypeAndInfo-r15-item"); + return c.get<sib_pos_r15_s>(); + } + sib_pos_r15_s& pos_sib2_minus23_v1610() + { + assert_choice_type(types::pos_sib2_minus23_v1610, type_, "posSIB-TypeAndInfo-r15-item"); + return c.get<sib_pos_r15_s>(); + } + sib_pos_r15_s& pos_sib2_minus24_v1610() + { + assert_choice_type(types::pos_sib2_minus24_v1610, type_, "posSIB-TypeAndInfo-r15-item"); + return c.get<sib_pos_r15_s>(); + } + sib_pos_r15_s& pos_sib2_minus25_v1610() + { + assert_choice_type(types::pos_sib2_minus25_v1610, type_, "posSIB-TypeAndInfo-r15-item"); + return c.get<sib_pos_r15_s>(); + } + sib_pos_r15_s& pos_sib4_minus1_v1610() + { + assert_choice_type(types::pos_sib4_minus1_v1610, type_, "posSIB-TypeAndInfo-r15-item"); + return c.get<sib_pos_r15_s>(); + } + sib_pos_r15_s& pos_sib5_minus1_v1610() + { + assert_choice_type(types::pos_sib5_minus1_v1610, type_, "posSIB-TypeAndInfo-r15-item"); + return c.get<sib_pos_r15_s>(); + } + sib_pos_r15_s& pos_sib1_minus9_v1700() + { + assert_choice_type(types::pos_sib1_minus9_v1700, type_, "posSIB-TypeAndInfo-r15-item"); + return c.get<sib_pos_r15_s>(); + } + sib_pos_r15_s& pos_sib1_minus10_v1700() + { + assert_choice_type(types::pos_sib1_minus10_v1700, type_, "posSIB-TypeAndInfo-r15-item"); + return c.get<sib_pos_r15_s>(); + } const sib_pos_r15_s& pos_sib1_minus1_r15() const { assert_choice_type(types::pos_sib1_minus1_r15, type_, "posSIB-TypeAndInfo-r15-item"); @@ -3143,6 +4125,61 @@ struct pos_sys_info_r15_ies_s { assert_choice_type(types::pos_sib3_minus1_r15, type_, "posSIB-TypeAndInfo-r15-item"); return c.get<sib_pos_r15_s>(); } + const sib_pos_r15_s& pos_sib1_minus8_v1610() const + { + assert_choice_type(types::pos_sib1_minus8_v1610, type_, "posSIB-TypeAndInfo-r15-item"); + return c.get<sib_pos_r15_s>(); + } + const sib_pos_r15_s& pos_sib2_minus20_v1610() const + { + assert_choice_type(types::pos_sib2_minus20_v1610, type_, "posSIB-TypeAndInfo-r15-item"); + return c.get<sib_pos_r15_s>(); + } + const sib_pos_r15_s& pos_sib2_minus21_v1610() const + { + assert_choice_type(types::pos_sib2_minus21_v1610, type_, "posSIB-TypeAndInfo-r15-item"); + return c.get<sib_pos_r15_s>(); + } + const sib_pos_r15_s& pos_sib2_minus22_v1610() const + { + assert_choice_type(types::pos_sib2_minus22_v1610, type_, "posSIB-TypeAndInfo-r15-item"); + return c.get<sib_pos_r15_s>(); + } + const sib_pos_r15_s& pos_sib2_minus23_v1610() const + { + assert_choice_type(types::pos_sib2_minus23_v1610, type_, "posSIB-TypeAndInfo-r15-item"); + return c.get<sib_pos_r15_s>(); + } + const sib_pos_r15_s& pos_sib2_minus24_v1610() const + { + assert_choice_type(types::pos_sib2_minus24_v1610, type_, "posSIB-TypeAndInfo-r15-item"); + return c.get<sib_pos_r15_s>(); + } + const sib_pos_r15_s& pos_sib2_minus25_v1610() const + { + assert_choice_type(types::pos_sib2_minus25_v1610, type_, "posSIB-TypeAndInfo-r15-item"); + return c.get<sib_pos_r15_s>(); + } + const sib_pos_r15_s& pos_sib4_minus1_v1610() const + { + assert_choice_type(types::pos_sib4_minus1_v1610, type_, "posSIB-TypeAndInfo-r15-item"); + return c.get<sib_pos_r15_s>(); + } + const sib_pos_r15_s& pos_sib5_minus1_v1610() const + { + assert_choice_type(types::pos_sib5_minus1_v1610, type_, "posSIB-TypeAndInfo-r15-item"); + return c.get<sib_pos_r15_s>(); + } + const sib_pos_r15_s& pos_sib1_minus9_v1700() const + { + assert_choice_type(types::pos_sib1_minus9_v1700, type_, "posSIB-TypeAndInfo-r15-item"); + return c.get<sib_pos_r15_s>(); + } + const sib_pos_r15_s& pos_sib1_minus10_v1700() const + { + assert_choice_type(types::pos_sib1_minus10_v1700, type_, "posSIB-TypeAndInfo-r15-item"); + return c.get<sib_pos_r15_s>(); + } sib_pos_r15_s& set_pos_sib1_minus1_r15(); sib_pos_r15_s& set_pos_sib1_minus2_r15(); sib_pos_r15_s& set_pos_sib1_minus3_r15(); @@ -3170,6 +4207,17 @@ struct pos_sys_info_r15_ies_s { sib_pos_r15_s& set_pos_sib2_minus18_r15(); sib_pos_r15_s& set_pos_sib2_minus19_r15(); sib_pos_r15_s& set_pos_sib3_minus1_r15(); + sib_pos_r15_s& set_pos_sib1_minus8_v1610(); + sib_pos_r15_s& set_pos_sib2_minus20_v1610(); + sib_pos_r15_s& set_pos_sib2_minus21_v1610(); + sib_pos_r15_s& set_pos_sib2_minus22_v1610(); + sib_pos_r15_s& set_pos_sib2_minus23_v1610(); + sib_pos_r15_s& set_pos_sib2_minus24_v1610(); + sib_pos_r15_s& set_pos_sib2_minus25_v1610(); + sib_pos_r15_s& set_pos_sib4_minus1_v1610(); + sib_pos_r15_s& set_pos_sib5_minus1_v1610(); + sib_pos_r15_s& set_pos_sib1_minus9_v1700(); + sib_pos_r15_s& set_pos_sib1_minus10_v1700(); private: types type_; @@ -3218,14 +4266,19 @@ struct sib_info_item_c { sib24_v1530, sib25_v1530, sib26_v1530, + sib26a_v1610, + sib27_v1610, + sib28_v1610, + sib29_v1610, + sib30_v1700, + sib31_v1700, + sib32_v1700, nulltype } value; - typedef uint8_t number_type; const char* to_string() const; - uint8_t to_number() const; }; - typedef enumerated<types_opts, true, 13> types; + typedef enumerated<types_opts, true, 20> types; // choice methods sib_info_item_c() = default; @@ -3353,6 +4406,41 @@ struct sib_info_item_c { assert_choice_type(types::sib26_v1530, type_, "sib-TypeAndInfo-item"); return c.get<sib_type26_r15_s>(); } + sib_type26a_r16_s& sib26a_v1610() + { + assert_choice_type(types::sib26a_v1610, type_, "sib-TypeAndInfo-item"); + return c.get<sib_type26a_r16_s>(); + } + sib_type27_r16_s& sib27_v1610() + { + assert_choice_type(types::sib27_v1610, type_, "sib-TypeAndInfo-item"); + return c.get<sib_type27_r16_s>(); + } + sib_type28_r16_s& sib28_v1610() + { + assert_choice_type(types::sib28_v1610, type_, "sib-TypeAndInfo-item"); + return c.get<sib_type28_r16_s>(); + } + sib_type29_r16_s& sib29_v1610() + { + assert_choice_type(types::sib29_v1610, type_, "sib-TypeAndInfo-item"); + return c.get<sib_type29_r16_s>(); + } + sib_type30_r17_s& sib30_v1700() + { + assert_choice_type(types::sib30_v1700, type_, "sib-TypeAndInfo-item"); + return c.get<sib_type30_r17_s>(); + } + sib_type31_r17_s& sib31_v1700() + { + assert_choice_type(types::sib31_v1700, type_, "sib-TypeAndInfo-item"); + return c.get<sib_type31_r17_s>(); + } + sib_type32_r17_s& sib32_v1700() + { + assert_choice_type(types::sib32_v1700, type_, "sib-TypeAndInfo-item"); + return c.get<sib_type32_r17_s>(); + } const sib_type2_s& sib2() const { assert_choice_type(types::sib2, type_, "sib-TypeAndInfo-item"); @@ -3468,29 +4556,71 @@ struct sib_info_item_c { assert_choice_type(types::sib26_v1530, type_, "sib-TypeAndInfo-item"); return c.get<sib_type26_r15_s>(); } - sib_type2_s& set_sib2(); - sib_type3_s& set_sib3(); - sib_type4_s& set_sib4(); - sib_type5_s& set_sib5(); - sib_type6_s& set_sib6(); - sib_type7_s& set_sib7(); - sib_type8_s& set_sib8(); - sib_type9_s& set_sib9(); - sib_type10_s& set_sib10(); - sib_type11_s& set_sib11(); - sib_type12_r9_s& set_sib12_v920(); - sib_type13_r9_s& set_sib13_v920(); - sib_type14_r11_s& set_sib14_v1130(); - sib_type15_r11_s& set_sib15_v1130(); - sib_type16_r11_s& set_sib16_v1130(); - sib_type17_r12_s& set_sib17_v1250(); - sib_type18_r12_s& set_sib18_v1250(); - sib_type19_r12_s& set_sib19_v1250(); - sib_type20_r13_s& set_sib20_v1310(); - sib_type21_r14_s& set_sib21_v1430(); - sib_type24_r15_s& set_sib24_v1530(); - sib_type25_r15_s& set_sib25_v1530(); - sib_type26_r15_s& set_sib26_v1530(); + const sib_type26a_r16_s& sib26a_v1610() const + { + assert_choice_type(types::sib26a_v1610, type_, "sib-TypeAndInfo-item"); + return c.get<sib_type26a_r16_s>(); + } + const sib_type27_r16_s& sib27_v1610() const + { + assert_choice_type(types::sib27_v1610, type_, "sib-TypeAndInfo-item"); + return c.get<sib_type27_r16_s>(); + } + const sib_type28_r16_s& sib28_v1610() const + { + assert_choice_type(types::sib28_v1610, type_, "sib-TypeAndInfo-item"); + return c.get<sib_type28_r16_s>(); + } + const sib_type29_r16_s& sib29_v1610() const + { + assert_choice_type(types::sib29_v1610, type_, "sib-TypeAndInfo-item"); + return c.get<sib_type29_r16_s>(); + } + const sib_type30_r17_s& sib30_v1700() const + { + assert_choice_type(types::sib30_v1700, type_, "sib-TypeAndInfo-item"); + return c.get<sib_type30_r17_s>(); + } + const sib_type31_r17_s& sib31_v1700() const + { + assert_choice_type(types::sib31_v1700, type_, "sib-TypeAndInfo-item"); + return c.get<sib_type31_r17_s>(); + } + const sib_type32_r17_s& sib32_v1700() const + { + assert_choice_type(types::sib32_v1700, type_, "sib-TypeAndInfo-item"); + return c.get<sib_type32_r17_s>(); + } + sib_type2_s& set_sib2(); + sib_type3_s& set_sib3(); + sib_type4_s& set_sib4(); + sib_type5_s& set_sib5(); + sib_type6_s& set_sib6(); + sib_type7_s& set_sib7(); + sib_type8_s& set_sib8(); + sib_type9_s& set_sib9(); + sib_type10_s& set_sib10(); + sib_type11_s& set_sib11(); + sib_type12_r9_s& set_sib12_v920(); + sib_type13_r9_s& set_sib13_v920(); + sib_type14_r11_s& set_sib14_v1130(); + sib_type15_r11_s& set_sib15_v1130(); + sib_type16_r11_s& set_sib16_v1130(); + sib_type17_r12_s& set_sib17_v1250(); + sib_type18_r12_s& set_sib18_v1250(); + sib_type19_r12_s& set_sib19_v1250(); + sib_type20_r13_s& set_sib20_v1310(); + sib_type21_r14_s& set_sib21_v1430(); + sib_type24_r15_s& set_sib24_v1530(); + sib_type25_r15_s& set_sib25_v1530(); + sib_type26_r15_s& set_sib26_v1530(); + sib_type26a_r16_s& set_sib26a_v1610(); + sib_type27_r16_s& set_sib27_v1610(); + sib_type28_r16_s& set_sib28_v1610(); + sib_type29_r16_s& set_sib29_v1610(); + sib_type30_r17_s& set_sib30_v1700(); + sib_type31_r17_s& set_sib31_v1700(); + sib_type32_r17_s& set_sib32_v1700(); private: types type_; @@ -3509,7 +4639,14 @@ private: sib_type24_r15_s, sib_type25_r15_s, sib_type26_r15_s, + sib_type26a_r16_s, + sib_type27_r16_s, + sib_type28_r16_s, + sib_type29_r16_s, sib_type2_s, + sib_type30_r17_s, + sib_type31_r17_s, + sib_type32_r17_s, sib_type3_s, sib_type4_s, sib_type5_s, @@ -4039,23 +5176,21 @@ struct sib_type_v12j0_opts { sib_type24_v1530, sib_type25_v1530, sib_type26_v1530, - spare10, - spare9, - spare8, - spare7, - spare6, - spare5, - spare4, + sib_type26a_v1610, + sib_type27_v1610, + sib_type28_v1610, + sib_type29_v1610, + sib_type30_v1700, + sib_type31_v1700, + sib_type32_v1700, spare3, spare2, spare1, // ... nulltype } value; - typedef uint8_t number_type; const char* to_string() const; - uint8_t to_number() const; }; typedef enumerated<sib_type_v12j0_opts, true> sib_type_v12j0_e; @@ -4090,6 +5225,23 @@ using sched_info_list_v12j0_l = dyn_array<sched_info_v12j0_s>; // SchedulingInfoListExt-r12 ::= SEQUENCE (SIZE (1..32)) OF SchedulingInfoExt-r12 using sched_info_list_ext_r12_l = dyn_array<sched_info_ext_r12_s>; +// SystemInformationBlockType1-v15g0-IEs ::= SEQUENCE +struct sib_type1_v15g0_ies_s { + struct bw_reduced_access_related_info_v15g0_s_ { + sched_info_list_br_r13_l pos_sched_info_list_br_r15; + }; + + // member variables + bool bw_reduced_access_related_info_v15g0_present = false; + bool non_crit_ext_present = false; + bw_reduced_access_related_info_v15g0_s_ bw_reduced_access_related_info_v15g0; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // SystemInformationBlockType1-v12j0-IEs ::= SEQUENCE struct sib_type1_v12j0_ies_s { bool sched_info_list_v12j0_present = false; @@ -4097,6 +5249,7 @@ struct sib_type1_v12j0_ies_s { bool non_crit_ext_present = false; sched_info_list_v12j0_l sched_info_list_v12j0; sched_info_list_ext_r12_l sched_info_list_ext_r12; + sib_type1_v15g0_ies_s non_crit_ext; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; diff --git a/lib/include/srsran/asn1/rrc/common.h b/lib/include/srsran/asn1/rrc/common.h index 77a887644..3f7c37db6 100644 --- a/lib/include/srsran/asn1/rrc/common.h +++ b/lib/include/srsran/asn1/rrc/common.h @@ -12,7 +12,7 @@ /******************************************************************************* * - * 3GPP TS ASN1 RRC v15.11.0 (2020-09) + * 3GPP TS ASN1 RRC v17.4.0 (2023-03) * ******************************************************************************/ @@ -33,11 +33,14 @@ namespace rrc { #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_AVAIL_NARROW_BANDS_MINUS1_R16 15 #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_BAND_COMB_SIDELINK_NR_R16 512 #define ASN1_RRC_MAX_BANDS 64 #define ASN1_RRC_MAX_BANDS_NR_R15 1024 +#define ASN1_RRC_MAX_BANDS_ENDC_R16 10 #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 @@ -48,11 +51,12 @@ namespace rrc { #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_EXCLUDED_CELL 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_CELL_NR_R17 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 @@ -73,6 +77,8 @@ namespace rrc { #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_CELL_ALLOWED_NR_R16 16 +#define ASN1_RRC_MAX_COND_CFG_R16 8 #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 @@ -92,15 +98,23 @@ namespace rrc { #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_MINUS1_R16 7 #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_NBIOT_R16 8 #define ASN1_RRC_MAX_FREQ_NR_R15 5 +#define ASN1_RRC_MAX_FREQ_SL_NR_R16 8 #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_GWUS_GROUPS_MINUS1_R16 31 +#define ASN1_RRC_MAX_GWUS_RES_R16 4 +#define ASN1_RRC_MAX_GWUS_PROB_THRESS_R16 3 #define ASN1_RRC_MAX_IDLE_MEAS_CARRIERS_R15 3 +#define ASN1_RRC_MAX_IDLE_MEAS_CARRIERS_EXT_R16 5 +#define ASN1_RRC_MAX_IDLE_MEAS_CARRIERS_R16 8 #define ASN1_RRC_MAX_LCG_R13 4 #define ASN1_RRC_MAX_LOG_MEAS_REPORT_R10 520 #define ASN1_RRC_MAX_MBSFN_ALLOCS 8 @@ -117,6 +131,7 @@ namespace rrc { #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_PCI_PER_SMTC_R16 64 #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 @@ -143,6 +158,7 @@ namespace rrc { #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_SAT_R17 4 #define ASN1_RRC_MAX_SCELL_R10 4 #define ASN1_RRC_MAX_SCELL_R13 31 #define ASN1_RRC_MAX_SCELL_GROUPS_R15 4 @@ -194,6 +210,7 @@ namespace rrc { #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_TAC_R17 12 #define ASN1_RRC_MAX_TRAFFIC_PATTERN_R14 8 #define ASN1_RRC_MAX_UTRA_FDD_CARRIER 16 #define ASN1_RRC_MAX_UTRA_TDD_CARRIER 16 @@ -207,6 +224,12 @@ namespace rrc { #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_FREQ_ANR_NB_R16 2 +#define ASN1_RRC_MAX_FREQ_EUTRA_NB_R16 8 +#define ASN1_RRC_MAX_FREQS_GERAN_NB_R16 8 +#define ASN1_RRC_MAX_GWUS_GROUPS_MINUS1_NB_R16 15 +#define ASN1_RRC_MAX_GWUS_RES_NB_R16 2 +#define ASN1_RRC_MAX_GWUS_PROB_THRESS_NB_R16 3 #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 @@ -214,6 +237,7 @@ namespace rrc { #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 +#define ASN1_RRC_MAX_TAC_NB_R17 12 /******************************************************************************* * Struct Definitions diff --git a/lib/include/srsran/asn1/rrc/common_ext.h b/lib/include/srsran/asn1/rrc/common_ext.h index 8b18d9360..dd205d7d5 100644 --- a/lib/include/srsran/asn1/rrc/common_ext.h +++ b/lib/include/srsran/asn1/rrc/common_ext.h @@ -12,7 +12,7 @@ /******************************************************************************* * - * 3GPP TS ASN1 RRC v15.11.0 (2020-09) + * 3GPP TS ASN1 RRC v17.4.0 (2023-03) * ******************************************************************************/ diff --git a/lib/include/srsran/asn1/rrc/dl_ccch_msg.h b/lib/include/srsran/asn1/rrc/dl_ccch_msg.h index 746cb827f..f22466556 100644 --- a/lib/include/srsran/asn1/rrc/dl_ccch_msg.h +++ b/lib/include/srsran/asn1/rrc/dl_ccch_msg.h @@ -12,7 +12,7 @@ /******************************************************************************* * - * 3GPP TS ASN1 RRC v15.11.0 (2020-09) + * 3GPP TS ASN1 RRC v17.4.0 (2023-03) * ******************************************************************************/ @@ -233,6 +233,18 @@ struct rrc_conn_reject_v1020_ies_s { void to_json(json_writer& j) const; }; +// RRCConnectionSetup-v1610-IEs ::= SEQUENCE +struct rrc_conn_setup_v1610_ies_s { + bool ded_info_nas_r16_present = false; + bool non_crit_ext_present = false; + dyn_octstring ded_info_nas_r16; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // IdleModeMobilityControlInfo ::= SEQUENCE struct idle_mode_mob_ctrl_info_s { struct t320_opts { @@ -327,9 +339,10 @@ struct rrc_conn_reject_v8a0_ies_s { // RRCConnectionSetup-v8a0-IEs ::= SEQUENCE struct rrc_conn_setup_v8a0_ies_s { - bool late_non_crit_ext_present = false; - bool non_crit_ext_present = false; - dyn_octstring late_non_crit_ext; + bool late_non_crit_ext_present = false; + bool non_crit_ext_present = false; + dyn_octstring late_non_crit_ext; + rrc_conn_setup_v1610_ies_s non_crit_ext; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -352,15 +365,7 @@ struct rrc_early_data_complete_v1590_ies_s { // RedirectedCarrierInfo-r15-IEs ::= CHOICE struct redirected_carrier_info_r15_ies_c { struct types_opts { - enum options { - eutra_r15, - geran_r15, - utra_fdd_r15, - cdma2000_hrpd_r15, - cdma2000_minus1x_rtt_r15, - utra_tdd_r15, - nulltype - } value; + enum options { eutra, geran, utra_fdd, cdma2000_hrpd, cdma2000_minus1x_rtt, utra_tdd, nulltype } value; const char* to_string() const; }; @@ -377,72 +382,72 @@ struct redirected_carrier_info_r15_ies_c { SRSASN_CODE unpack(cbit_ref& bref); void to_json(json_writer& j) const; // getters - uint32_t& eutra_r15() + uint32_t& eutra() { - assert_choice_type(types::eutra_r15, type_, "RedirectedCarrierInfo-r15-IEs"); + assert_choice_type(types::eutra, type_, "RedirectedCarrierInfo-r15-IEs"); return c.get<uint32_t>(); } - carrier_freqs_geran_s& geran_r15() + carrier_freqs_geran_s& geran() { - assert_choice_type(types::geran_r15, type_, "RedirectedCarrierInfo-r15-IEs"); + assert_choice_type(types::geran, type_, "RedirectedCarrierInfo-r15-IEs"); return c.get<carrier_freqs_geran_s>(); } - uint16_t& utra_fdd_r15() + uint16_t& utra_fdd() { - assert_choice_type(types::utra_fdd_r15, type_, "RedirectedCarrierInfo-r15-IEs"); + assert_choice_type(types::utra_fdd, type_, "RedirectedCarrierInfo-r15-IEs"); return c.get<uint16_t>(); } - carrier_freq_cdma2000_s& cdma2000_hrpd_r15() + carrier_freq_cdma2000_s& cdma2000_hrpd() { - assert_choice_type(types::cdma2000_hrpd_r15, type_, "RedirectedCarrierInfo-r15-IEs"); + assert_choice_type(types::cdma2000_hrpd, type_, "RedirectedCarrierInfo-r15-IEs"); return c.get<carrier_freq_cdma2000_s>(); } - carrier_freq_cdma2000_s& cdma2000_minus1x_rtt_r15() + carrier_freq_cdma2000_s& cdma2000_minus1x_rtt() { - assert_choice_type(types::cdma2000_minus1x_rtt_r15, type_, "RedirectedCarrierInfo-r15-IEs"); + assert_choice_type(types::cdma2000_minus1x_rtt, type_, "RedirectedCarrierInfo-r15-IEs"); return c.get<carrier_freq_cdma2000_s>(); } - carrier_freq_list_utra_tdd_r10_l& utra_tdd_r15() + carrier_freq_list_utra_tdd_r10_l& utra_tdd() { - assert_choice_type(types::utra_tdd_r15, type_, "RedirectedCarrierInfo-r15-IEs"); + assert_choice_type(types::utra_tdd, type_, "RedirectedCarrierInfo-r15-IEs"); return c.get<carrier_freq_list_utra_tdd_r10_l>(); } - const uint32_t& eutra_r15() const + const uint32_t& eutra() const { - assert_choice_type(types::eutra_r15, type_, "RedirectedCarrierInfo-r15-IEs"); + assert_choice_type(types::eutra, type_, "RedirectedCarrierInfo-r15-IEs"); return c.get<uint32_t>(); } - const carrier_freqs_geran_s& geran_r15() const + const carrier_freqs_geran_s& geran() const { - assert_choice_type(types::geran_r15, type_, "RedirectedCarrierInfo-r15-IEs"); + assert_choice_type(types::geran, type_, "RedirectedCarrierInfo-r15-IEs"); return c.get<carrier_freqs_geran_s>(); } - const uint16_t& utra_fdd_r15() const + const uint16_t& utra_fdd() const { - assert_choice_type(types::utra_fdd_r15, type_, "RedirectedCarrierInfo-r15-IEs"); + assert_choice_type(types::utra_fdd, type_, "RedirectedCarrierInfo-r15-IEs"); return c.get<uint16_t>(); } - const carrier_freq_cdma2000_s& cdma2000_hrpd_r15() const + const carrier_freq_cdma2000_s& cdma2000_hrpd() const { - assert_choice_type(types::cdma2000_hrpd_r15, type_, "RedirectedCarrierInfo-r15-IEs"); + assert_choice_type(types::cdma2000_hrpd, type_, "RedirectedCarrierInfo-r15-IEs"); return c.get<carrier_freq_cdma2000_s>(); } - const carrier_freq_cdma2000_s& cdma2000_minus1x_rtt_r15() const + const carrier_freq_cdma2000_s& cdma2000_minus1x_rtt() const { - assert_choice_type(types::cdma2000_minus1x_rtt_r15, type_, "RedirectedCarrierInfo-r15-IEs"); + assert_choice_type(types::cdma2000_minus1x_rtt, type_, "RedirectedCarrierInfo-r15-IEs"); return c.get<carrier_freq_cdma2000_s>(); } - const carrier_freq_list_utra_tdd_r10_l& utra_tdd_r15() const + const carrier_freq_list_utra_tdd_r10_l& utra_tdd() const { - assert_choice_type(types::utra_tdd_r15, type_, "RedirectedCarrierInfo-r15-IEs"); + assert_choice_type(types::utra_tdd, type_, "RedirectedCarrierInfo-r15-IEs"); return c.get<carrier_freq_list_utra_tdd_r10_l>(); } - uint32_t& set_eutra_r15(); - carrier_freqs_geran_s& set_geran_r15(); - uint16_t& set_utra_fdd_r15(); - carrier_freq_cdma2000_s& set_cdma2000_hrpd_r15(); - carrier_freq_cdma2000_s& set_cdma2000_minus1x_rtt_r15(); - carrier_freq_list_utra_tdd_r10_l& set_utra_tdd_r15(); + uint32_t& set_eutra(); + carrier_freqs_geran_s& set_geran(); + uint16_t& set_utra_fdd(); + carrier_freq_cdma2000_s& set_cdma2000_hrpd(); + carrier_freq_cdma2000_s& set_cdma2000_minus1x_rtt(); + carrier_freq_list_utra_tdd_r10_l& set_utra_tdd(); private: types type_; diff --git a/lib/include/srsran/asn1/rrc/dl_dcch_msg.h b/lib/include/srsran/asn1/rrc/dl_dcch_msg.h index b82632259..de33de7a0 100644 --- a/lib/include/srsran/asn1/rrc/dl_dcch_msg.h +++ b/lib/include/srsran/asn1/rrc/dl_dcch_msg.h @@ -12,13 +12,14 @@ /******************************************************************************* * - * 3GPP TS ASN1 RRC v15.11.0 (2020-09) + * 3GPP TS ASN1 RRC v17.4.0 (2023-03) * ******************************************************************************/ #ifndef SRSASN1_RRC_DLDCCH_MSG_H #define SRSASN1_RRC_DLDCCH_MSG_H +#include "bcch_msg.h" #include "dl_ccch_msg.h" #include "security.h" #include "si.h" @@ -31,6 +32,34 @@ namespace rrc { * Struct Definitions ******************************************************************************/ +// CondReconfigurationAddMod-r16 ::= SEQUENCE +struct cond_recfg_add_mod_r16_s { + using trigger_condition_r16_l_ = bounded_array<uint8_t, 2>; + + // member variables + bool ext = false; + bool trigger_condition_r16_present = false; + bool cond_recfg_to_apply_r16_present = false; + uint8_t cond_recfg_id_r16 = 1; + trigger_condition_r16_l_ trigger_condition_r16; + dyn_octstring cond_recfg_to_apply_r16; + // ... + // group 0 + bool trigger_condition_sn_r17_present = false; + dyn_octstring trigger_condition_sn_r17; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// CondReconfigurationToAddModList-r16 ::= SEQUENCE (SIZE (1..8)) OF CondReconfigurationAddMod-r16 +using cond_recfg_to_add_mod_list_r16_l = dyn_array<cond_recfg_add_mod_r16_s>; + +// CondReconfigurationToRemoveList-r16 ::= SEQUENCE (SIZE (1..8)) OF INTEGER (1..8) +using cond_recfg_to_rem_list_r16_l = bounded_array<uint8_t, 8>; + // SCellConfigCommon-r15 ::= SEQUENCE struct scell_cfg_common_r15_s { bool rr_cfg_common_scell_r15_present = false; @@ -73,6 +102,73 @@ struct sl_tf_idx_pair_r12b_s { void to_json(json_writer& j) const; }; +// SubframeAssignment-r15 ::= ENUMERATED +struct sf_assign_r15_opts { + enum options { sa0, sa1, sa2, sa3, sa4, sa5, sa6, nulltype } value; + typedef uint8_t number_type; + + const char* to_string() const; + uint8_t to_number() const; +}; +typedef enumerated<sf_assign_r15_opts> sf_assign_r15_e; + +// ConditionalReconfiguration-r16 ::= SEQUENCE +struct conditional_recfg_r16_s { + bool ext = false; + bool cond_recfg_to_add_mod_list_r16_present = false; + bool cond_recfg_to_rem_list_r16_present = false; + bool attempt_cond_reconf_r16_present = false; + cond_recfg_to_add_mod_list_r16_l cond_recfg_to_add_mod_list_r16; + cond_recfg_to_rem_list_r16_l cond_recfg_to_rem_list_r16; + // ... + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// RRCConnectionReconfiguration-v1700-IEs ::= SEQUENCE +struct rrc_conn_recfg_v1700_ies_s { + bool sib_type31_ded_r17_present = false; + bool scg_state_r17_present = false; + bool non_crit_ext_present = false; + dyn_octstring sib_type31_ded_r17; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// RSRP-ChangeThresh-r16 ::= ENUMERATED +struct rsrp_change_thresh_r16_opts { + enum options { + db4, + db6, + db8, + db10, + db14, + db18, + db22, + db26, + db30, + db34, + 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<rsrp_change_thresh_r16_opts> rsrp_change_thresh_r16_e; + // SCellGroupToAddMod-r15 ::= SEQUENCE struct scell_group_to_add_mod_r15_s { bool scell_cfg_common_r15_present = false; @@ -120,6 +216,40 @@ using sl_tf_idx_pair_list_r12b_l = dyn_array<sl_tf_idx_pair_r12b_s>; // SL-TxPoolToReleaseList-r12 ::= SEQUENCE (SIZE (1..4)) OF INTEGER (1..4) using sl_tx_pool_to_release_list_r12_l = bounded_array<uint8_t, 4>; +// TDM-PatternConfig-r15 ::= CHOICE +struct tdm_pattern_cfg_r15_c { + struct setup_s_ { + sf_assign_r15_e sf_assign_r15; + uint8_t harq_offset_r15 = 0; + }; + using types = setup_e; + + // choice methods + tdm_pattern_cfg_r15_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_, "TDM-PatternConfig-r15"); + return c; + } + const setup_s_& setup() const + { + assert_choice_type(types::setup, type_, "TDM-PatternConfig-r15"); + return c; + } + void set_release(); + setup_s_& set_setup(); + +private: + types type_; + setup_s_ c; +}; + // IKE-Identity-r13 ::= SEQUENCE struct ike_id_r13_s { dyn_octstring id_i_r13; @@ -182,6 +312,253 @@ private: void destroy_(); }; +// PUR-MPDCCH-Config-r16 ::= SEQUENCE +struct pur_mpdcch_cfg_r16_s { + struct mpdcch_prb_pairs_cfg_r16_s_ { + struct num_prb_pairs_r16_opts { + enum options { n2, n4, n6, spare1, nulltype } value; + typedef uint8_t number_type; + + const char* to_string() const; + uint8_t to_number() const; + }; + typedef enumerated<num_prb_pairs_r16_opts> num_prb_pairs_r16_e_; + + // member variables + num_prb_pairs_r16_e_ num_prb_pairs_r16; + fixed_bitstring<4> res_block_assign_r16; + }; + struct mpdcch_num_repeat_r16_opts { + enum options { r1, r2, r4, r8, r16, r32, r64, r128, r256, nulltype } value; + typedef uint16_t number_type; + + const char* to_string() const; + uint16_t to_number() const; + }; + typedef enumerated<mpdcch_num_repeat_r16_opts> mpdcch_num_repeat_r16_e_; + struct mpdcch_start_sf_uess_r16_c_ { + struct fdd_opts { + enum options { v1, v1dot5, v2, v2dot5, v4, v5, v8, v10, nulltype } value; + typedef float number_type; + + const char* to_string() const; + float to_number() const; + const char* to_number_string() const; + }; + typedef enumerated<fdd_opts> fdd_e_; + struct tdd_opts { + enum options { v1, v2, v4, v5, v8, v10, v20, spare1, nulltype } value; + typedef uint8_t number_type; + + const char* to_string() const; + uint8_t to_number() const; + }; + typedef enumerated<tdd_opts> tdd_e_; + struct types_opts { + enum options { fdd, tdd, nulltype } value; + + const char* to_string() const; + }; + typedef enumerated<types_opts> types; + + // choice methods + mpdcch_start_sf_uess_r16_c_() = default; + mpdcch_start_sf_uess_r16_c_(const mpdcch_start_sf_uess_r16_c_& other); + mpdcch_start_sf_uess_r16_c_& operator=(const mpdcch_start_sf_uess_r16_c_& other); + ~mpdcch_start_sf_uess_r16_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 + fdd_e_& fdd() + { + assert_choice_type(types::fdd, type_, "mpdcch-StartSF-UESS-r16"); + return c.get<fdd_e_>(); + } + tdd_e_& tdd() + { + assert_choice_type(types::tdd, type_, "mpdcch-StartSF-UESS-r16"); + return c.get<tdd_e_>(); + } + const fdd_e_& fdd() const + { + assert_choice_type(types::fdd, type_, "mpdcch-StartSF-UESS-r16"); + return c.get<fdd_e_>(); + } + const tdd_e_& tdd() const + { + assert_choice_type(types::tdd, type_, "mpdcch-StartSF-UESS-r16"); + return c.get<tdd_e_>(); + } + fdd_e_& set_fdd(); + tdd_e_& set_tdd(); + + private: + types type_; + pod_choice_buffer_t c; + + void destroy_(); + }; + struct mpdcch_offset_pur_ss_r16_opts { + enum options { + zero, + one_eighth, + one_quarter, + three_eighth, + one_half, + five_eighth, + three_quarter, + seven_eighth, + nulltype + } value; + typedef float number_type; + + const char* to_string() const; + float to_number() const; + const char* to_number_string() const; + }; + typedef enumerated<mpdcch_offset_pur_ss_r16_opts> mpdcch_offset_pur_ss_r16_e_; + + // member variables + bool mpdcch_freq_hop_r16 = false; + uint8_t mpdcch_nb_r16 = 1; + mpdcch_prb_pairs_cfg_r16_s_ mpdcch_prb_pairs_cfg_r16; + mpdcch_num_repeat_r16_e_ mpdcch_num_repeat_r16; + mpdcch_start_sf_uess_r16_c_ mpdcch_start_sf_uess_r16; + mpdcch_offset_pur_ss_r16_e_ mpdcch_offset_pur_ss_r16; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// PUR-PUCCH-Config-r16 ::= SEQUENCE +struct pur_pucch_cfg_r16_s { + struct pucch_num_repeat_ce_format1_r16_opts { + enum options { n1, n2, n4, n8, nulltype } value; + typedef uint8_t number_type; + + const char* to_string() const; + uint8_t to_number() const; + }; + typedef enumerated<pucch_num_repeat_ce_format1_r16_opts> pucch_num_repeat_ce_format1_r16_e_; + + // member variables + bool n1_pucch_an_r16_present = false; + bool pucch_num_repeat_ce_format1_r16_present = false; + uint16_t n1_pucch_an_r16 = 0; + pucch_num_repeat_ce_format1_r16_e_ pucch_num_repeat_ce_format1_r16; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// PUR-PUSCH-Config-r16 ::= SEQUENCE +struct pur_pusch_cfg_r16_s { + struct pur_grant_info_r16_c_ { + struct ce_mode_a_s_ { + fixed_bitstring<2> num_rus_r16; + fixed_bitstring<10> prb_alloc_info_r16; + fixed_bitstring<4> mcs_r16; + fixed_bitstring<3> num_repeats_r16; + }; + struct ce_mode_b_s_ { + bool sub_prb_alloc_r16 = false; + bool num_rus_r16 = false; + fixed_bitstring<8> prb_alloc_info_r16; + fixed_bitstring<4> mcs_r16; + fixed_bitstring<3> num_repeats_r16; + }; + struct types_opts { + enum options { ce_mode_a, ce_mode_b, nulltype } value; + + const char* to_string() const; + }; + typedef enumerated<types_opts> types; + + // choice methods + pur_grant_info_r16_c_() = default; + pur_grant_info_r16_c_(const pur_grant_info_r16_c_& other); + pur_grant_info_r16_c_& operator=(const pur_grant_info_r16_c_& other); + ~pur_grant_info_r16_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 + ce_mode_a_s_& ce_mode_a() + { + assert_choice_type(types::ce_mode_a, type_, "pur-GrantInfo-r16"); + return c.get<ce_mode_a_s_>(); + } + ce_mode_b_s_& ce_mode_b() + { + assert_choice_type(types::ce_mode_b, type_, "pur-GrantInfo-r16"); + return c.get<ce_mode_b_s_>(); + } + const ce_mode_a_s_& ce_mode_a() const + { + assert_choice_type(types::ce_mode_a, type_, "pur-GrantInfo-r16"); + return c.get<ce_mode_a_s_>(); + } + const ce_mode_b_s_& ce_mode_b() const + { + assert_choice_type(types::ce_mode_b, type_, "pur-GrantInfo-r16"); + return c.get<ce_mode_b_s_>(); + } + ce_mode_a_s_& set_ce_mode_a(); + ce_mode_b_s_& set_ce_mode_b(); + + private: + types type_; + choice_buffer_t<ce_mode_a_s_, ce_mode_b_s_> c; + + void destroy_(); + }; + struct pusch_cyclic_shift_r16_opts { + enum options { n0, n6, nulltype } value; + typedef uint8_t number_type; + + const char* to_string() const; + uint8_t to_number() const; + }; + typedef enumerated<pusch_cyclic_shift_r16_opts> pusch_cyclic_shift_r16_e_; + + // member variables + bool pur_grant_info_r16_present = false; + bool location_ce_mode_b_r16_present = false; + pur_grant_info_r16_c_ pur_grant_info_r16; + bool pur_pusch_freq_hop_r16 = false; + int8_t p0_ue_pusch_r16 = -8; + alpha_r12_e alpha_r16; + pusch_cyclic_shift_r16_e_ pusch_cyclic_shift_r16; + bool pusch_nb_max_tbs_r16 = false; + uint8_t location_ce_mode_b_r16 = 0; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// PUR-RSRP-ChangeThreshold-r16 ::= SEQUENCE +struct pur_rsrp_change_thres_r16_s { + bool decrease_thresh_r16_present = false; + rsrp_change_thresh_r16_e increase_thresh_r16; + rsrp_change_thresh_r16_e decrease_thresh_r16; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // PhysicalConfigDedicated-v1370 ::= SEQUENCE struct phys_cfg_ded_v1370_s { bool pucch_cfg_ded_v1370_present = false; @@ -208,6 +585,26 @@ struct ran_area_cfg_r15_s { void to_json(json_writer& j) const; }; +// RRCConnectionReconfiguration-v1610-IEs ::= SEQUENCE +struct rrc_conn_recfg_v1610_ies_s { + bool conditional_recfg_r16_present = false; + bool daps_source_release_r16_present = false; + bool tdm_pattern_cfg2_r16_present = false; + bool sl_cfg_ded_for_nr_r16_present = false; + bool sl_ssb_prio_eutra_r16_present = false; + bool non_crit_ext_present = false; + conditional_recfg_r16_s conditional_recfg_r16; + tdm_pattern_cfg_r15_c tdm_pattern_cfg2_r16; + dyn_octstring sl_cfg_ded_for_nr_r16; + uint8_t sl_ssb_prio_eutra_r16 = 1; + rrc_conn_recfg_v1700_ies_s non_crit_ext; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // RadioResourceConfigCommonSCell-v1440 ::= SEQUENCE struct rr_cfg_common_scell_v1440_s { struct ul_cfg_v1440_s_ { @@ -275,16 +672,6 @@ struct sl_tx_pool_to_add_mod_r14_s { void to_json(json_writer& j) const; }; -// SubframeAssignment-r15 ::= ENUMERATED -struct sf_assign_r15_opts { - enum options { sa0, sa1, sa2, sa3, sa4, sa5, sa6, nulltype } value; - typedef uint8_t number_type; - - const char* to_string() const; - uint8_t to_number() const; -}; -typedef enumerated<sf_assign_r15_opts> sf_assign_r15_e; - // UplinkPowerControlCommonPSCell-r12 ::= SEQUENCE struct ul_pwr_ctrl_common_ps_cell_r12_s { struct delta_f_pucch_format3_r12_opts { @@ -387,6 +774,94 @@ struct plmn_ran_area_cfg_r15_s { void to_json(json_writer& j) const; }; +// PUR-Config-r16 ::= SEQUENCE +struct pur_cfg_r16_s { + struct pur_implicit_release_after_r16_opts { + enum options { n2, n4, n8, spare, nulltype } value; + typedef uint8_t number_type; + + const char* to_string() const; + uint8_t to_number() const; + }; + typedef enumerated<pur_implicit_release_after_r16_opts> pur_implicit_release_after_r16_e_; + struct pur_start_time_params_r16_s_ { + pur_periodicity_and_offset_r16_c periodicity_and_offset_r16; + uint16_t start_sfn_r16 = 0; + uint8_t start_sub_frame_r16 = 0; + fixed_bitstring<1> hsfn_lsb_info_r16; + }; + struct pur_num_occasions_r16_opts { + enum options { one, infinite, nulltype } value; + typedef uint8_t number_type; + + const char* to_string() const; + uint8_t to_number() const; + }; + typedef enumerated<pur_num_occasions_r16_opts> pur_num_occasions_r16_e_; + struct pur_resp_win_timer_r16_opts { + enum options { sf240, sf480, sf960, sf1920, sf3840, sf5760, sf7680, sf10240, nulltype } value; + typedef uint16_t number_type; + + const char* to_string() const; + uint16_t to_number() const; + }; + typedef enumerated<pur_resp_win_timer_r16_opts> pur_resp_win_timer_r16_e_; + + // member variables + bool ext = false; + bool pur_cfg_id_r16_present = false; + bool pur_implicit_release_after_r16_present = false; + bool pur_start_time_params_r16_present = false; + bool pur_rnti_r16_present = false; + bool pur_time_align_timer_r16_present = false; + bool pur_rsrp_change_thres_r16_present = false; + bool pur_resp_win_timer_r16_present = false; + bool pur_mpdcch_cfg_r16_present = false; + bool pur_pucch_cfg_r16_present = false; + bool pur_pusch_cfg_r16_present = false; + fixed_bitstring<20> pur_cfg_id_r16; + pur_implicit_release_after_r16_e_ pur_implicit_release_after_r16; + pur_start_time_params_r16_s_ pur_start_time_params_r16; + pur_num_occasions_r16_e_ pur_num_occasions_r16; + fixed_bitstring<16> pur_rnti_r16; + uint8_t pur_time_align_timer_r16 = 1; + setup_release_c<pur_rsrp_change_thres_r16_s> pur_rsrp_change_thres_r16; + pur_resp_win_timer_r16_e_ pur_resp_win_timer_r16; + pur_mpdcch_cfg_r16_s pur_mpdcch_cfg_r16; + bool pur_pdsch_freq_hop_r16 = false; + pur_pucch_cfg_r16_s pur_pucch_cfg_r16; + pur_pusch_cfg_r16_s pur_pusch_cfg_r16; + // ... + // group 0 + bool pur_pdsch_max_tbs_r17_present = false; + bool pur_pdsch_max_tbs_r17 = false; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// RRC-InactiveConfig-v1610 ::= SEQUENCE +struct rrc_inactive_cfg_v1610_s { + struct ran_paging_cycle_v1610_opts { + enum options { rf512, rf1024, nulltype } value; + typedef uint16_t number_type; + + const char* to_string() const; + uint16_t to_number() const; + }; + typedef enumerated<ran_paging_cycle_v1610_opts> ran_paging_cycle_v1610_e_; + + // member variables + ran_paging_cycle_v1610_e_ ran_paging_cycle_v1610; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // RRCConnectionReconfiguration-v1530-IEs ::= SEQUENCE struct rrc_conn_recfg_v1530_ies_s { using ded_info_nas_list_r15_l_ = bounded_array<dyn_octstring, 15>; @@ -405,6 +880,18 @@ struct rrc_conn_recfg_v1530_ies_s { ded_info_nas_list_r15_l_ ded_info_nas_list_r15; int8_t p_max_ue_fr1_r15 = -30; mtc_ssb_nr_r15_s smtc_r15; + rrc_conn_recfg_v1610_ies_s non_crit_ext; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// RRCConnectionRelease-v1650-IEs ::= SEQUENCE +struct rrc_conn_release_v1650_ies_s { + bool mps_prio_ind_r16_present = false; + bool non_crit_ext_present = false; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -609,40 +1096,6 @@ using sl_tx_pool_to_add_mod_list_v2x_r14_l = dyn_array<sl_tx_pool_to_add_mod_r14 // SL-TxPoolToReleaseListV2X-r14 ::= SEQUENCE (SIZE (1..8)) OF INTEGER (1..8) using sl_tx_pool_to_release_list_v2x_r14_l = bounded_array<uint8_t, 8>; -// TDM-PatternConfig-r15 ::= CHOICE -struct tdm_pattern_cfg_r15_c { - struct setup_s_ { - sf_assign_r15_e sf_assign_r15; - uint8_t harq_offset_r15 = 0; - }; - using types = setup_e; - - // choice methods - tdm_pattern_cfg_r15_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_, "TDM-PatternConfig-r15"); - return c; - } - const setup_s_& setup() const - { - assert_choice_type(types::setup, type_, "TDM-PatternConfig-r15"); - return c; - } - void set_release(); - setup_s_& set_setup(); - -private: - types type_; - setup_s_ c; -}; - // TunnelConfigLWIP-r13 ::= SEQUENCE struct tunnel_cfg_lwip_r13_s { bool ext = false; @@ -659,6 +1112,9 @@ struct tunnel_cfg_lwip_r13_s { void to_json(json_writer& j) const; }; +// ValidityCellList-r16 ::= SEQUENCE (SIZE (1..8)) OF PhysCellIdRange +using validity_cell_list_r16_l = dyn_array<pci_range_s>; + // WLAN-MobilityConfig-r13 ::= SEQUENCE struct wlan_mob_cfg_r13_s { struct assoc_timer_r13_opts { @@ -911,6 +1367,39 @@ struct rrc_conn_recfg_v1510_ies_s { void to_json(json_writer& j) const; }; +// RRCConnectionRelease-v1610-IEs ::= SEQUENCE +struct rrc_conn_release_v1610_ies_s { + struct t323_r16_opts { + enum options { min5, min10, min20, min30, min60, min120, min180, min720, nulltype } value; + typedef uint16_t number_type; + + const char* to_string() const; + uint16_t to_number() const; + }; + typedef enumerated<t323_r16_opts> t323_r16_e_; + + // member variables + bool full_i_rnti_r16_present = false; + bool short_i_rnti_r16_present = false; + bool pur_cfg_r16_present = false; + bool rrc_inactive_cfg_v1610_present = false; + bool release_idle_meas_cfg_r16_present = false; + bool alt_freq_priorities_r16_present = false; + bool t323_r16_present = false; + bool non_crit_ext_present = false; + fixed_bitstring<40> full_i_rnti_r16; + fixed_bitstring<24> short_i_rnti_r16; + setup_release_c<pur_cfg_r16_s> pur_cfg_r16; + rrc_inactive_cfg_v1610_s rrc_inactive_cfg_v1610; + t323_r16_e_ t323_r16; + rrc_conn_release_v1650_ies_s non_crit_ext; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // SCellToReleaseList-r10 ::= SEQUENCE (SIZE (1..4)) OF INTEGER (1..7) using scell_to_release_list_r10_l = bounded_array<uint8_t, 4>; @@ -1183,6 +1672,18 @@ struct sl_v2x_cfg_ded_r14_s { void to_json(json_writer& j) const; }; +// ValidityArea-r16 ::= SEQUENCE +struct validity_area_r16_s { + bool validity_cell_list_r16_present = false; + uint32_t carrier_freq_r16 = 0; + validity_cell_list_r16_l validity_cell_list_r16; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // LWA-Configuration-r13 ::= CHOICE struct lwa_cfg_r13_c { struct setup_s_ { @@ -1264,7 +1765,7 @@ struct pwr_coordination_info_r12_s { // RAN-NotificationAreaInfo-r15 ::= CHOICE struct ran_notif_area_info_r15_c { struct types_opts { - enum options { cell_list_r15, ran_area_cfg_list_r15, nulltype } value; + enum options { cell_list, ran_area_cfg_list, nulltype } value; const char* to_string() const; }; @@ -1281,28 +1782,28 @@ struct ran_notif_area_info_r15_c { SRSASN_CODE unpack(cbit_ref& bref); void to_json(json_writer& j) const; // getters - plmn_ran_area_cell_list_r15_l& cell_list_r15() + plmn_ran_area_cell_list_r15_l& cell_list() { - assert_choice_type(types::cell_list_r15, type_, "RAN-NotificationAreaInfo-r15"); + assert_choice_type(types::cell_list, type_, "RAN-NotificationAreaInfo-r15"); return c.get<plmn_ran_area_cell_list_r15_l>(); } - plmn_ran_area_cfg_list_r15_l& ran_area_cfg_list_r15() + plmn_ran_area_cfg_list_r15_l& ran_area_cfg_list() { - assert_choice_type(types::ran_area_cfg_list_r15, type_, "RAN-NotificationAreaInfo-r15"); + assert_choice_type(types::ran_area_cfg_list, type_, "RAN-NotificationAreaInfo-r15"); return c.get<plmn_ran_area_cfg_list_r15_l>(); } - const plmn_ran_area_cell_list_r15_l& cell_list_r15() const + const plmn_ran_area_cell_list_r15_l& cell_list() const { - assert_choice_type(types::cell_list_r15, type_, "RAN-NotificationAreaInfo-r15"); + assert_choice_type(types::cell_list, type_, "RAN-NotificationAreaInfo-r15"); return c.get<plmn_ran_area_cell_list_r15_l>(); } - const plmn_ran_area_cfg_list_r15_l& ran_area_cfg_list_r15() const + const plmn_ran_area_cfg_list_r15_l& ran_area_cfg_list() const { - assert_choice_type(types::ran_area_cfg_list_r15, type_, "RAN-NotificationAreaInfo-r15"); + assert_choice_type(types::ran_area_cfg_list, type_, "RAN-NotificationAreaInfo-r15"); return c.get<plmn_ran_area_cfg_list_r15_l>(); } - plmn_ran_area_cell_list_r15_l& set_cell_list_r15(); - plmn_ran_area_cfg_list_r15_l& set_ran_area_cfg_list_r15(); + plmn_ran_area_cell_list_r15_l& set_cell_list(); + plmn_ran_area_cfg_list_r15_l& set_ran_area_cfg_list(); private: types type_; @@ -1364,8 +1865,9 @@ struct rrc_conn_recfg_v1430_ies_s { // RRCConnectionRelease-v15b0-IEs ::= SEQUENCE struct rrc_conn_release_v15b0_ies_s { - bool no_last_cell_upd_r15_present = false; - bool non_crit_ext_present = false; + bool no_last_cell_upd_r15_present = false; + bool non_crit_ext_present = false; + rrc_conn_release_v1610_ies_s non_crit_ext; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -1454,6 +1956,9 @@ using sl_tf_idx_pair_list_r12_l = dyn_array<sl_tf_idx_pair_r12_s>; // SL-TxPoolToReleaseListExt-r13 ::= SEQUENCE (SIZE (1..4)) OF INTEGER (5..8) using sl_tx_pool_to_release_list_ext_r13_l = bounded_array<uint8_t, 4>; +// ValidityAreaList-r16 ::= SEQUENCE (SIZE (1..8)) OF ValidityArea-r16 +using validity_area_list_r16_l = dyn_array<validity_area_r16_s>; + // FlightPathInfoReportConfig-r15 ::= SEQUENCE struct flight_path_info_report_cfg_r15_s { bool include_time_stamp_r15_present = false; @@ -1482,6 +1987,9 @@ struct meas_idle_cfg_ded_r15_s { eutra_carrier_list_r15_l meas_idle_carrier_list_eutra_r15; meas_idle_dur_r15_e_ meas_idle_dur_r15; // ... + // group 0 + copy_ptr<nr_carrier_list_r16_l> meas_idle_carrier_list_nr_r16; + copy_ptr<validity_area_list_r16_l> validity_area_list_r16; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -1607,6 +2115,42 @@ private: setup_s_ c; }; +// SCellToAddMod-r16 ::= SEQUENCE +struct scell_to_add_mod_r16_s { + struct cell_identif_r16_s_ { + uint16_t pci_r16 = 0; + uint32_t dl_carrier_freq_r16 = 0; + }; + struct scell_state_r16_opts { + enum options { activ, dormant, nulltype } value; + + const char* to_string() const; + }; + typedef enumerated<scell_state_r16_opts> scell_state_r16_e_; + + // member variables + bool ext = false; + bool cell_identif_r16_present = false; + bool rr_cfg_common_scell_r16_present = false; + bool rr_cfg_ded_scell_r16_present = false; + bool ant_info_ded_scell_r16_present = false; + bool srs_switch_from_serv_cell_idx_r16_present = false; + bool scell_state_r16_present = false; + uint8_t scell_idx_r16 = 1; + cell_identif_r16_s_ cell_identif_r16; + rr_cfg_common_scell_r10_s rr_cfg_common_scell_r16; + rr_cfg_ded_scell_r10_s rr_cfg_ded_scell_r16; + ant_info_ded_v10i0_s ant_info_ded_scell_r16; + uint8_t srs_switch_from_serv_cell_idx_r16 = 0; + scell_state_r16_e_ scell_state_r16; + // ... + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // SL-CommConfig-r12 ::= SEQUENCE struct sl_comm_cfg_r12_s { struct comm_tx_res_r12_c_ { @@ -2181,6 +2725,17 @@ struct sl_sync_tx_ctrl_r12_s { void to_json(json_writer& j) const; }; +// UEInformationRequest-v1710-IEs ::= SEQUENCE +struct ue_info_request_v1710_ies_s { + bool coarse_location_req_r17_present = false; + bool non_crit_ext_present = false; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // CandidateServingFreqListNR-r15 ::= SEQUENCE (SIZE (1..32)) OF INTEGER (0..3279165) using candidate_serving_freq_list_nr_r15_l = bounded_array<uint32_t, 32>; @@ -2280,6 +2835,20 @@ struct rrc_conn_release_v1530_ies_s { void to_json(json_writer& j) const; }; +// RRCConnectionResume-v1700-IEs ::= SEQUENCE +struct rrc_conn_resume_v1700_ies_s { + bool scg_state_r17_present = false; + bool non_crit_ext_present = false; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// SCellToAddModList-r16 ::= SEQUENCE (SIZE (1..31)) OF SCellToAddMod-r16 +using scell_to_add_mod_list_r16_l = dyn_array<scell_to_add_mod_r16_s>; + // SystemInfoListGERAN ::= SEQUENCE (SIZE (1..10)) OF OCTET STRING (SIZE (1..23)) using sys_info_list_geran_l = bounded_array<bounded_octstring<1, 23>, 10>; @@ -2303,6 +2872,7 @@ struct ue_info_request_v1530_ies_s { bool flight_path_info_req_r15_present = false; bool non_crit_ext_present = false; flight_path_info_report_cfg_r15_s flight_path_info_req_r15; + ue_info_request_v1710_ies_s non_crit_ext; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -2538,6 +3108,38 @@ struct rrc_conn_release_v1320_ies_s { void to_json(json_writer& j) const; }; +// RRCConnectionResume-v1610-IEs ::= SEQUENCE +struct rrc_conn_resume_v1610_ies_s { + bool idle_mode_meas_req_r16_present = false; + bool restore_mcg_scells_r16_present = false; + bool restore_scg_r16_present = false; + bool scell_to_add_mod_list_r16_present = false; + bool scell_to_release_list_r16_present = false; + bool scell_group_to_release_list_r16_present = false; + bool scell_group_to_add_mod_list_r16_present = false; + bool nr_secondary_cell_group_cfg_r16_present = false; + bool p_max_eutra_r16_present = false; + bool p_max_ue_fr1_r16_present = false; + bool tdm_pattern_cfg_r16_present = false; + bool tdm_pattern_cfg2_r16_present = false; + bool non_crit_ext_present = false; + scell_to_add_mod_list_r16_l scell_to_add_mod_list_r16; + scell_to_release_list_ext_r13_l scell_to_release_list_r16; + scell_group_to_release_list_r15_l scell_group_to_release_list_r16; + scell_group_to_add_mod_list_r15_l scell_group_to_add_mod_list_r16; + dyn_octstring nr_secondary_cell_group_cfg_r16; + int8_t p_max_eutra_r16 = -30; + int8_t p_max_ue_fr1_r16 = -30; + tdm_pattern_cfg_r15_c tdm_pattern_cfg_r16; + tdm_pattern_cfg_r15_c tdm_pattern_cfg2_r16; + rrc_conn_resume_v1700_ies_s non_crit_ext; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // ReportProximityConfig-r9 ::= SEQUENCE struct report_proximity_cfg_r9_s { bool proximity_ind_eutra_r9_present = false; @@ -2549,6 +3151,26 @@ struct report_proximity_cfg_r9_s { void to_json(json_writer& j) const; }; +// SCG-DeactivationPreferenceConfig-r17 ::= SEQUENCE +struct scg_deactivation_pref_cfg_r17_s { + struct scg_deactivation_pref_prohibit_timer_r17_opts { + enum options { s0, s1, s2, s4, s8, s10, s20, s30, s60, s120, s180, s240, s300, s600, s900, s1800, nulltype } value; + typedef uint16_t number_type; + + const char* to_string() const; + uint16_t to_number() const; + }; + typedef enumerated<scg_deactivation_pref_prohibit_timer_r17_opts> scg_deactivation_pref_prohibit_timer_r17_e_; + + // member variables + scg_deactivation_pref_prohibit_timer_r17_e_ scg_deactivation_pref_prohibit_timer_r17; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // TargetMBSFN-AreaList-r12 ::= SEQUENCE (SIZE (0..8)) OF TargetMBSFN-Area-r12 using target_mbsfn_area_list_r12_l = dyn_array<target_mbsfn_area_r12_s>; @@ -2897,6 +3519,13 @@ struct other_cfg_r9_s { bool ailc_bit_cfg_r15 = false; copy_ptr<bt_name_list_cfg_r15_c> bt_name_list_cfg_r15; copy_ptr<wlan_name_list_cfg_r15_c> wlan_name_list_cfg_r15; + // group 4 + bool overheat_assist_cfg_for_scg_r16_present = false; + bool overheat_assist_cfg_for_scg_r16 = false; + // group 5 + bool meas_uncom_bar_pre_r17_present = false; + bool meas_uncom_bar_pre_r17 = false; + copy_ptr<setup_release_c<scg_deactivation_pref_cfg_r17_s> > scg_deactivation_pref_cfg_r17; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -2937,8 +3566,9 @@ struct rrc_conn_release_v1020_ies_s { // RRCConnectionResume-v1530-IEs ::= SEQUENCE struct rrc_conn_resume_v1530_ies_s { - bool full_cfg_r15_present = false; - bool non_crit_ext_present = false; + bool full_cfg_r15_present = false; + bool non_crit_ext_present = false; + rrc_conn_resume_v1610_ies_s non_crit_ext; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -2981,6 +3611,29 @@ struct carrier_info_nr_r15_s { void to_json(json_writer& j) const; }; +// CarrierInfoNR-r17 ::= SEQUENCE +struct carrier_info_nr_r17_s { + struct subcarrier_spacing_ssb_r17_opts { + enum options { khz15, khz30, khz120, khz240, khz480, spare1, nulltype } value; + typedef uint16_t number_type; + + const char* to_string() const; + uint16_t to_number() const; + }; + typedef enumerated<subcarrier_spacing_ssb_r17_opts> subcarrier_spacing_ssb_r17_e_; + + // member variables + bool smtc_r17_present = false; + uint32_t carrier_freq_r17 = 0; + subcarrier_spacing_ssb_r17_e_ subcarrier_spacing_ssb_r17; + mtc_ssb_nr_r15_s smtc_r17; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // CellGlobalIdList-r10 ::= SEQUENCE (SIZE (1..32)) OF CellGlobalIdEUTRA using cell_global_id_list_r10_l = dyn_array<cell_global_id_eutra_s>; @@ -2996,6 +3649,18 @@ struct counter_check_v1530_ies_s { void to_json(json_writer& j) const; }; +// DLInformationTransfer-v1610-IEs ::= SEQUENCE +struct dl_info_transfer_v1610_ies_s { + bool ded_info_f1c_r16_present = false; + bool non_crit_ext_present = false; + dyn_octstring ded_info_f1c_r16; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // HandoverFromEUTRAPreparationRequest-v920-IEs ::= SEQUENCE struct ho_from_eutra_prep_request_v920_ies_s { bool concurr_prep_cdma2000_hrpd_r9_present = false; @@ -3360,9 +4025,10 @@ struct counter_check_v8a0_ies_s { // DLInformationTransfer-v8a0-IEs ::= SEQUENCE struct dl_info_transfer_v8a0_ies_s { - bool late_non_crit_ext_present = false; - bool non_crit_ext_present = false; - dyn_octstring late_non_crit_ext; + bool late_non_crit_ext_present = false; + bool non_crit_ext_present = false; + dyn_octstring late_non_crit_ext; + dl_info_transfer_v1610_ies_s non_crit_ext; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -4044,12 +4710,13 @@ struct redirected_carrier_info_c { // ... utra_tdd_r10, nr_r15, + nr_r17, nulltype } value; const char* to_string() const; }; - typedef enumerated<types_opts, true, 2> types; + typedef enumerated<types_opts, true, 3> types; // choice methods redirected_carrier_info_c() = default; @@ -4102,6 +4769,11 @@ struct redirected_carrier_info_c { assert_choice_type(types::nr_r15, type_, "RedirectedCarrierInfo"); return c.get<carrier_info_nr_r15_s>(); } + carrier_info_nr_r17_s& nr_r17() + { + assert_choice_type(types::nr_r17, type_, "RedirectedCarrierInfo"); + return c.get<carrier_info_nr_r17_s>(); + } const uint32_t& eutra() const { assert_choice_type(types::eutra, type_, "RedirectedCarrierInfo"); @@ -4142,6 +4814,11 @@ struct redirected_carrier_info_c { assert_choice_type(types::nr_r15, type_, "RedirectedCarrierInfo"); return c.get<carrier_info_nr_r15_s>(); } + const carrier_info_nr_r17_s& nr_r17() const + { + assert_choice_type(types::nr_r17, type_, "RedirectedCarrierInfo"); + return c.get<carrier_info_nr_r17_s>(); + } uint32_t& set_eutra(); carrier_freqs_geran_s& set_geran(); uint16_t& set_utra_fdd(); @@ -4150,13 +4827,15 @@ struct redirected_carrier_info_c { carrier_freq_cdma2000_s& set_cdma2000_minus1x_rtt(); carrier_freq_list_utra_tdd_r10_l& set_utra_tdd_r10(); carrier_info_nr_r15_s& set_nr_r15(); + carrier_info_nr_r17_s& set_nr_r17(); private: types type_; choice_buffer_t<carrier_freq_cdma2000_s, carrier_freq_list_utra_tdd_r10_l, carrier_freqs_geran_s, - carrier_info_nr_r15_s> + carrier_info_nr_r15_s, + carrier_info_nr_r17_s> c; void destroy_(); @@ -4208,11 +4887,34 @@ struct counter_check_r8_ies_s { void to_json(json_writer& j) const; }; +// DLDedicatedMessageSegment-r16-IEs ::= SEQUENCE +struct dl_ded_msg_segment_r16_ies_s { + struct rrc_msg_segment_type_r16_opts { + enum options { not_last_segment, last_segment, nulltype } value; + + const char* to_string() const; + }; + typedef enumerated<rrc_msg_segment_type_r16_opts> rrc_msg_segment_type_r16_e_; + + // member variables + bool late_non_crit_ext_present = false; + bool non_crit_ext_present = false; + uint8_t segment_num_r16 = 0; + dyn_octstring rrc_msg_segment_container_r16; + rrc_msg_segment_type_r16_e_ rrc_msg_segment_type_r16; + dyn_octstring late_non_crit_ext; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // DLInformationTransfer-r15-IEs ::= SEQUENCE struct dl_info_transfer_r15_ies_s { struct ded_info_type_r15_c_ { struct types_opts { - enum options { ded_info_nas_r15, ded_info_cdma2000_minus1_xrtt_r15, ded_info_cdma2000_hrpd_r15, nulltype } value; + enum options { ded_info_nas, ded_info_cdma2000_minus1_xrtt, ded_info_cdma2000_hrpd, nulltype } value; const char* to_string() const; }; @@ -4229,39 +4931,39 @@ struct dl_info_transfer_r15_ies_s { SRSASN_CODE unpack(cbit_ref& bref); void to_json(json_writer& j) const; // getters - dyn_octstring& ded_info_nas_r15() + dyn_octstring& ded_info_nas() { - assert_choice_type(types::ded_info_nas_r15, type_, "dedicatedInfoType-r15"); + assert_choice_type(types::ded_info_nas, type_, "dedicatedInfoType-r15"); return c.get<dyn_octstring>(); } - dyn_octstring& ded_info_cdma2000_minus1_xrtt_r15() + dyn_octstring& ded_info_cdma2000_minus1_xrtt() { - assert_choice_type(types::ded_info_cdma2000_minus1_xrtt_r15, type_, "dedicatedInfoType-r15"); + assert_choice_type(types::ded_info_cdma2000_minus1_xrtt, type_, "dedicatedInfoType-r15"); return c.get<dyn_octstring>(); } - dyn_octstring& ded_info_cdma2000_hrpd_r15() + dyn_octstring& ded_info_cdma2000_hrpd() { - assert_choice_type(types::ded_info_cdma2000_hrpd_r15, type_, "dedicatedInfoType-r15"); + assert_choice_type(types::ded_info_cdma2000_hrpd, type_, "dedicatedInfoType-r15"); return c.get<dyn_octstring>(); } - const dyn_octstring& ded_info_nas_r15() const + const dyn_octstring& ded_info_nas() const { - assert_choice_type(types::ded_info_nas_r15, type_, "dedicatedInfoType-r15"); + assert_choice_type(types::ded_info_nas, type_, "dedicatedInfoType-r15"); return c.get<dyn_octstring>(); } - const dyn_octstring& ded_info_cdma2000_minus1_xrtt_r15() const + const dyn_octstring& ded_info_cdma2000_minus1_xrtt() const { - assert_choice_type(types::ded_info_cdma2000_minus1_xrtt_r15, type_, "dedicatedInfoType-r15"); + assert_choice_type(types::ded_info_cdma2000_minus1_xrtt, type_, "dedicatedInfoType-r15"); return c.get<dyn_octstring>(); } - const dyn_octstring& ded_info_cdma2000_hrpd_r15() const + const dyn_octstring& ded_info_cdma2000_hrpd() const { - assert_choice_type(types::ded_info_cdma2000_hrpd_r15, type_, "dedicatedInfoType-r15"); + assert_choice_type(types::ded_info_cdma2000_hrpd, type_, "dedicatedInfoType-r15"); return c.get<dyn_octstring>(); } - dyn_octstring& set_ded_info_nas_r15(); - dyn_octstring& set_ded_info_cdma2000_minus1_xrtt_r15(); - dyn_octstring& set_ded_info_cdma2000_hrpd_r15(); + dyn_octstring& set_ded_info_nas(); + dyn_octstring& set_ded_info_cdma2000_minus1_xrtt(); + dyn_octstring& set_ded_info_cdma2000_hrpd(); private: types type_; @@ -4743,6 +5445,51 @@ struct counter_check_s { void to_json(json_writer& j) const; }; +// DLDedicatedMessageSegment-r16 ::= SEQUENCE +struct dl_ded_msg_segment_r16_s { + struct crit_exts_c_ { + struct types_opts { + enum options { dl_ded_msg_segment_r16, crit_exts_future, nulltype } value; + + const char* to_string() const; + }; + typedef enumerated<types_opts> types; + + // choice methods + crit_exts_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 + dl_ded_msg_segment_r16_ies_s& dl_ded_msg_segment_r16() + { + assert_choice_type(types::dl_ded_msg_segment_r16, type_, "criticalExtensions"); + return c; + } + const dl_ded_msg_segment_r16_ies_s& dl_ded_msg_segment_r16() const + { + assert_choice_type(types::dl_ded_msg_segment_r16, type_, "criticalExtensions"); + return c; + } + dl_ded_msg_segment_r16_ies_s& set_dl_ded_msg_segment_r16(); + void set_crit_exts_future(); + + private: + types type_; + dl_ded_msg_segment_r16_ies_s c; + }; + + // member variables + crit_exts_c_ crit_exts; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // DLInformationTransfer ::= SEQUENCE struct dl_info_transfer_s { struct crit_exts_c_ { @@ -5478,7 +6225,7 @@ struct dl_dcch_msg_type_c { logged_meas_cfg_r10, rn_recfg_r10, rrc_conn_resume_r13, - spare3, + dl_ded_msg_segment_r16, spare2, spare1, nulltype @@ -5566,6 +6313,11 @@ struct dl_dcch_msg_type_c { assert_choice_type(types::rrc_conn_resume_r13, type_, "c1"); return c.get<rrc_conn_resume_r13_s>(); } + dl_ded_msg_segment_r16_s& dl_ded_msg_segment_r16() + { + assert_choice_type(types::dl_ded_msg_segment_r16, type_, "c1"); + return c.get<dl_ded_msg_segment_r16_s>(); + } const csfb_params_resp_cdma2000_s& csfb_params_resp_cdma2000() const { assert_choice_type(types::csfb_params_resp_cdma2000, type_, "c1"); @@ -5631,6 +6383,11 @@ struct dl_dcch_msg_type_c { assert_choice_type(types::rrc_conn_resume_r13, type_, "c1"); return c.get<rrc_conn_resume_r13_s>(); } + const dl_ded_msg_segment_r16_s& dl_ded_msg_segment_r16() const + { + assert_choice_type(types::dl_ded_msg_segment_r16, type_, "c1"); + return c.get<dl_ded_msg_segment_r16_s>(); + } csfb_params_resp_cdma2000_s& set_csfb_params_resp_cdma2000(); dl_info_transfer_s& set_dl_info_transfer(); ho_from_eutra_prep_request_s& set_ho_from_eutra_prep_request(); @@ -5644,7 +6401,7 @@ struct dl_dcch_msg_type_c { logged_meas_cfg_r10_s& set_logged_meas_cfg_r10(); rn_recfg_r10_s& set_rn_recfg_r10(); rrc_conn_resume_r13_s& set_rrc_conn_resume_r13(); - void set_spare3(); + dl_ded_msg_segment_r16_s& set_dl_ded_msg_segment_r16(); void set_spare2(); void set_spare1(); @@ -5652,6 +6409,7 @@ struct dl_dcch_msg_type_c { types type_; choice_buffer_t<counter_check_s, csfb_params_resp_cdma2000_s, + dl_ded_msg_segment_r16_s, dl_info_transfer_s, ho_from_eutra_prep_request_s, logged_meas_cfg_r10_s, diff --git a/lib/include/srsran/asn1/rrc/ho_cmd.h b/lib/include/srsran/asn1/rrc/ho_cmd.h index 3b38cff61..67e01497a 100644 --- a/lib/include/srsran/asn1/rrc/ho_cmd.h +++ b/lib/include/srsran/asn1/rrc/ho_cmd.h @@ -12,7 +12,7 @@ /******************************************************************************* * - * 3GPP TS ASN1 RRC v15.11.0 (2020-09) + * 3GPP TS ASN1 RRC v17.4.0 (2023-03) * ******************************************************************************/ @@ -108,6 +108,16 @@ struct as_cfg_nr_v1570_s { void to_json(json_writer& j) const; }; +// AS-ConfigNR-v1620 ::= SEQUENCE +struct as_cfg_nr_v1620_s { + tdm_pattern_cfg_r15_c tdm_pattern_cfg2_r16; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // SCG-Config-r12 ::= SEQUENCE struct scg_cfg_r12_s { struct crit_exts_c_ { @@ -214,6 +224,8 @@ struct as_cfg_s { copy_ptr<as_cfg_v1550_s> as_cfg_v1550; // group 5 copy_ptr<as_cfg_nr_v1570_s> as_cfg_nr_v1570; + // group 6 + copy_ptr<as_cfg_nr_v1620_s> as_cfg_nr_v1620; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -348,10 +360,10 @@ struct as_context_v1130_s { bool ext = false; bool idc_ind_r11_present = false; bool mbms_interest_ind_r11_present = false; - bool pwr_pref_ind_r11_present = false; + bool ue_assist_info_r11_present = false; dyn_octstring idc_ind_r11; dyn_octstring mbms_interest_ind_r11; - dyn_octstring pwr_pref_ind_r11; + dyn_octstring ue_assist_info_r11; // ... // group 0 bool sidelink_ue_info_r12_present = false; @@ -380,6 +392,56 @@ struct as_context_v1320_s { void to_json(json_writer& j) const; }; +// ConfigRestrictInfoDAPS-r16 ::= SEQUENCE +struct cfg_restrict_info_daps_r16_s { + bool max_sch_tb_bits_dl_r16_present = false; + bool max_sch_tb_bits_ul_r16_present = false; + uint8_t max_sch_tb_bits_dl_r16 = 1; + uint8_t max_sch_tb_bits_ul_r16 = 1; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// AS-Context-v1610 ::= SEQUENCE +struct as_context_v1610_s { + bool sidelink_ue_info_nr_r16_present = false; + bool ue_assist_info_nr_r16_present = false; + bool cfg_restrict_info_daps_r16_present = false; + dyn_octstring sidelink_ue_info_nr_r16; + dyn_octstring ue_assist_info_nr_r16; + cfg_restrict_info_daps_r16_s cfg_restrict_info_daps_r16; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// ConfigRestrictInfoDAPS-v1630 ::= SEQUENCE +struct cfg_restrict_info_daps_v1630_s { + bool daps_pwr_coordination_info_r16_present = false; + daps_pwr_coordination_info_r16_s daps_pwr_coordination_info_r16; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// AS-Context-v1630 ::= SEQUENCE +struct as_context_v1630_s { + bool cfg_restrict_info_daps_v1630_present = false; + cfg_restrict_info_daps_v1630_s cfg_restrict_info_daps_v1630; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // CandidateCellInfo-r10 ::= SEQUENCE struct candidate_cell_info_r10_s { bool ext = false; @@ -499,11 +561,84 @@ struct ho_cmd_s { void to_json(json_writer& j) const; }; +// AS-Config-v1700 ::= SEQUENCE +struct as_cfg_v1700_s { + bool scg_state_r17_present = false; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// HandoverPreparationInformation-v1700-IEs ::= SEQUENCE +struct ho_prep_info_v1700_ies_s { + bool as_cfg_v1700_present = false; + bool non_crit_ext_present = false; + as_cfg_v1700_s as_cfg_v1700; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// AS-Context-v1620 ::= SEQUENCE +struct as_context_v1620_s { + bool ue_assist_info_nr_scg_r16_present = false; + dyn_octstring ue_assist_info_nr_scg_r16; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// HandoverPreparationInformation-v1630-IEs ::= SEQUENCE +struct ho_prep_info_v1630_ies_s { + bool as_context_v1630_present = false; + bool non_crit_ext_present = false; + as_context_v1630_s as_context_v1630; + ho_prep_info_v1700_ies_s non_crit_ext; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// HandoverPreparationInformation-v1620-IEs ::= SEQUENCE +struct ho_prep_info_v1620_ies_s { + bool as_context_v1620_present = false; + bool non_crit_ext_present = false; + as_context_v1620_s as_context_v1620; + ho_prep_info_v1630_ies_s non_crit_ext; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// HandoverPreparationInformation-v1610-IEs ::= SEQUENCE +struct ho_prep_info_v1610_ies_s { + bool as_context_v1610_present = false; + bool non_crit_ext_present = false; + as_context_v1610_s as_context_v1610; + ho_prep_info_v1620_ies_s non_crit_ext; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // HandoverPreparationInformation-v1540-IEs ::= SEQUENCE struct ho_prep_info_v1540_ies_s { - bool source_rb_cfg_intra5_gc_r15_present = false; - bool non_crit_ext_present = false; - dyn_octstring source_rb_cfg_intra5_gc_r15; + bool source_rb_cfg_intra5_gc_r15_present = false; + bool non_crit_ext_present = false; + dyn_octstring source_rb_cfg_intra5_gc_r15; + ho_prep_info_v1610_ies_s non_crit_ext; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -610,11 +745,25 @@ struct ho_prep_info_v9d0_ies_s { // HandoverPreparationInformation-v920-IEs ::= SEQUENCE struct ho_prep_info_v920_ies_s { struct ue_cfg_release_r9_opts { - enum options { rel9, rel10, rel11, rel12, v10j0, v11e0, v1280, rel13, /*...*/ rel14, rel15, nulltype } value; + enum options { + rel9, + rel10, + rel11, + rel12, + v10j0, + v11e0, + v1280, + rel13, + /*...*/ rel14, + rel15, + rel16, + rel17, + nulltype + } value; const char* to_string() const; }; - typedef enumerated<ue_cfg_release_r9_opts, true, 2> ue_cfg_release_r9_e_; + typedef enumerated<ue_cfg_release_r9_opts, true, 4> ue_cfg_release_r9_e_; // member variables bool ue_cfg_release_r9_present = false; diff --git a/lib/include/srsran/asn1/rrc/meascfg.h b/lib/include/srsran/asn1/rrc/meascfg.h index f0f911de4..e28d30a13 100644 --- a/lib/include/srsran/asn1/rrc/meascfg.h +++ b/lib/include/srsran/asn1/rrc/meascfg.h @@ -12,7 +12,7 @@ /******************************************************************************* * - * 3GPP TS ASN1 RRC v15.11.0 (2020-09) + * 3GPP TS ASN1 RRC v17.4.0 (2023-03) * ******************************************************************************/ @@ -72,6 +72,16 @@ struct q_offset_range_opts { }; typedef enumerated<q_offset_range_opts> q_offset_range_e; +// RSS-MeasPowerBias-r16 ::= ENUMERATED +struct rss_meas_pwr_bias_r16_opts { + enum options { db_minus6, db_minus3, db0, db3, db6, db9, db12, rss_not_used, nulltype } value; + typedef int8_t number_type; + + const char* to_string() const; + int8_t to_number() const; +}; +typedef enumerated<rss_meas_pwr_bias_r16_opts> rss_meas_pwr_bias_r16_e; + // SecondaryPreRegistrationZoneIdListHRPD ::= SEQUENCE (SIZE (1..2)) OF INTEGER (0..255) using secondary_pre_regist_zone_id_list_hrpd_l = bounded_array<uint16_t, 2>; @@ -119,112 +129,6 @@ typedef enumerated<band_ind_geran_opts> band_ind_geran_e; // ExplicitListOfARFCNs ::= SEQUENCE (SIZE (0..31)) OF INTEGER (0..1023) using explicit_list_of_arfcns_l = bounded_array<uint16_t, 31>; -// PreRegistrationInfoHRPD ::= SEQUENCE -struct pre_regist_info_hrpd_s { - bool pre_regist_zone_id_present = false; - bool secondary_pre_regist_zone_id_list_present = false; - bool pre_regist_allowed = false; - uint16_t pre_regist_zone_id = 0; - secondary_pre_regist_zone_id_list_hrpd_l secondary_pre_regist_zone_id_list; - - // sequence methods - SRSASN_CODE pack(bit_ref& bref) const; - SRSASN_CODE unpack(cbit_ref& bref); - void to_json(json_writer& j) const; -}; - -// CarrierFreqsGERAN ::= SEQUENCE -struct carrier_freqs_geran_s { - struct following_arfcns_c_ { - struct equally_spaced_arfcns_s_ { - uint8_t arfcn_spacing = 1; - uint8_t nof_following_arfcns = 0; - }; - struct types_opts { - enum options { explicit_list_of_arfcns, equally_spaced_arfcns, variable_bit_map_of_arfcns, nulltype } value; - - const char* to_string() const; - }; - typedef enumerated<types_opts> types; - - // choice methods - following_arfcns_c_() = default; - following_arfcns_c_(const following_arfcns_c_& other); - following_arfcns_c_& operator=(const following_arfcns_c_& other); - ~following_arfcns_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 following_arfcns_c_& other) const; - bool operator!=(const following_arfcns_c_& other) const { return not(*this == other); } - // getters - explicit_list_of_arfcns_l& explicit_list_of_arfcns() - { - assert_choice_type(types::explicit_list_of_arfcns, type_, "followingARFCNs"); - return c.get<explicit_list_of_arfcns_l>(); - } - equally_spaced_arfcns_s_& equally_spaced_arfcns() - { - assert_choice_type(types::equally_spaced_arfcns, type_, "followingARFCNs"); - return c.get<equally_spaced_arfcns_s_>(); - } - bounded_octstring<1, 16>& variable_bit_map_of_arfcns() - { - assert_choice_type(types::variable_bit_map_of_arfcns, type_, "followingARFCNs"); - return c.get<bounded_octstring<1, 16> >(); - } - const explicit_list_of_arfcns_l& explicit_list_of_arfcns() const - { - assert_choice_type(types::explicit_list_of_arfcns, type_, "followingARFCNs"); - return c.get<explicit_list_of_arfcns_l>(); - } - const equally_spaced_arfcns_s_& equally_spaced_arfcns() const - { - assert_choice_type(types::equally_spaced_arfcns, type_, "followingARFCNs"); - return c.get<equally_spaced_arfcns_s_>(); - } - const bounded_octstring<1, 16>& variable_bit_map_of_arfcns() const - { - assert_choice_type(types::variable_bit_map_of_arfcns, type_, "followingARFCNs"); - return c.get<bounded_octstring<1, 16> >(); - } - explicit_list_of_arfcns_l& set_explicit_list_of_arfcns(); - equally_spaced_arfcns_s_& set_equally_spaced_arfcns(); - bounded_octstring<1, 16>& set_variable_bit_map_of_arfcns(); - - private: - types type_; - choice_buffer_t<bounded_octstring<1, 16>, equally_spaced_arfcns_s_, explicit_list_of_arfcns_l> c; - - void destroy_(); - }; - - // member variables - uint16_t start_arfcn = 0; - band_ind_geran_e band_ind; - following_arfcns_c_ following_arfcns; - - // 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 carrier_freqs_geran_s& other) const; - bool operator!=(const carrier_freqs_geran_s& other) const { return not(*this == other); } -}; - -// CellReselectionSubPriority-r13 ::= ENUMERATED -struct cell_resel_sub_prio_r13_opts { - enum options { odot2, odot4, odot6, odot8, nulltype } value; - typedef float number_type; - - const char* to_string() const; - float to_number() const; - const char* to_number_string() const; -}; -typedef enumerated<cell_resel_sub_prio_r13_opts> cell_resel_sub_prio_r13_e; - // MTC-SSB-NR-r15 ::= SEQUENCE struct mtc_ssb_nr_r15_s { struct periodicity_and_offset_r15_c_ { @@ -344,12 +248,23 @@ struct mtc_ssb_nr_r15_s { bool operator!=(const mtc_ssb_nr_r15_s& other) const { return not(*this == other); } }; -// MultiBandInfoList-r11 ::= SEQUENCE (SIZE (1..8)) OF INTEGER (1..256) -using multi_band_info_list_r11_l = bounded_array<uint16_t, 8>; - // MultiFrequencyBandListNR-r15 ::= SEQUENCE (SIZE (1..32)) OF INTEGER (1..1024) using multi_freq_band_list_nr_r15_l = bounded_array<uint16_t, 32>; +// PreRegistrationInfoHRPD ::= SEQUENCE +struct pre_regist_info_hrpd_s { + bool pre_regist_zone_id_present = false; + bool secondary_pre_regist_zone_id_list_present = false; + bool pre_regist_allowed = false; + uint16_t pre_regist_zone_id = 0; + secondary_pre_regist_zone_id_list_hrpd_l secondary_pre_regist_zone_id_list; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // SS-RSSI-Measurement-r15 ::= SEQUENCE struct ss_rssi_meas_r15_s { bounded_bitstring<1, 80> meas_slots_r15; @@ -443,6 +358,144 @@ struct thres_list_nr_r15_s { bool operator!=(const thres_list_nr_r15_s& other) const { return not(*this == other); } }; +// CarrierFreqsGERAN ::= SEQUENCE +struct carrier_freqs_geran_s { + struct following_arfcns_c_ { + struct equally_spaced_arfcns_s_ { + uint8_t arfcn_spacing = 1; + uint8_t nof_following_arfcns = 0; + }; + struct types_opts { + enum options { explicit_list_of_arfcns, equally_spaced_arfcns, variable_bit_map_of_arfcns, nulltype } value; + + const char* to_string() const; + }; + typedef enumerated<types_opts> types; + + // choice methods + following_arfcns_c_() = default; + following_arfcns_c_(const following_arfcns_c_& other); + following_arfcns_c_& operator=(const following_arfcns_c_& other); + ~following_arfcns_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 following_arfcns_c_& other) const; + bool operator!=(const following_arfcns_c_& other) const { return not(*this == other); } + // getters + explicit_list_of_arfcns_l& explicit_list_of_arfcns() + { + assert_choice_type(types::explicit_list_of_arfcns, type_, "followingARFCNs"); + return c.get<explicit_list_of_arfcns_l>(); + } + equally_spaced_arfcns_s_& equally_spaced_arfcns() + { + assert_choice_type(types::equally_spaced_arfcns, type_, "followingARFCNs"); + return c.get<equally_spaced_arfcns_s_>(); + } + bounded_octstring<1, 16>& variable_bit_map_of_arfcns() + { + assert_choice_type(types::variable_bit_map_of_arfcns, type_, "followingARFCNs"); + return c.get<bounded_octstring<1, 16> >(); + } + const explicit_list_of_arfcns_l& explicit_list_of_arfcns() const + { + assert_choice_type(types::explicit_list_of_arfcns, type_, "followingARFCNs"); + return c.get<explicit_list_of_arfcns_l>(); + } + const equally_spaced_arfcns_s_& equally_spaced_arfcns() const + { + assert_choice_type(types::equally_spaced_arfcns, type_, "followingARFCNs"); + return c.get<equally_spaced_arfcns_s_>(); + } + const bounded_octstring<1, 16>& variable_bit_map_of_arfcns() const + { + assert_choice_type(types::variable_bit_map_of_arfcns, type_, "followingARFCNs"); + return c.get<bounded_octstring<1, 16> >(); + } + explicit_list_of_arfcns_l& set_explicit_list_of_arfcns(); + equally_spaced_arfcns_s_& set_equally_spaced_arfcns(); + bounded_octstring<1, 16>& set_variable_bit_map_of_arfcns(); + + private: + types type_; + choice_buffer_t<bounded_octstring<1, 16>, equally_spaced_arfcns_s_, explicit_list_of_arfcns_l> c; + + void destroy_(); + }; + + // member variables + uint16_t start_arfcn = 0; + band_ind_geran_e band_ind; + following_arfcns_c_ following_arfcns; + + // 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 carrier_freqs_geran_s& other) const; + bool operator!=(const carrier_freqs_geran_s& other) const { return not(*this == other); } +}; + +// CellReselectionSubPriority-r13 ::= ENUMERATED +struct cell_resel_sub_prio_r13_opts { + enum options { odot2, odot4, odot6, odot8, nulltype } value; + typedef float number_type; + + const char* to_string() const; + float to_number() const; + const char* to_number_string() const; +}; +typedef enumerated<cell_resel_sub_prio_r13_opts> cell_resel_sub_prio_r13_e; + +// MultiBandInfoList-r11 ::= SEQUENCE (SIZE (1..8)) OF INTEGER (1..256) +using multi_band_info_list_r11_l = bounded_array<uint16_t, 8>; + +// RSS-ConfigCarrierInfo-r16 ::= SEQUENCE +struct rss_cfg_carrier_info_r16_s { + struct time_offset_granularity_r16_opts { + enum options { g1, g2, g4, g8, g16, g32, g64, g128, nulltype } value; + typedef uint8_t number_type; + + const char* to_string() const; + uint8_t to_number() const; + }; + typedef enumerated<time_offset_granularity_r16_opts> time_offset_granularity_r16_e_; + + // member variables + bounded_bitstring<1, 15> nb_idx_r16; + time_offset_granularity_r16_e_ time_offset_granularity_r16; + + // 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 rss_cfg_carrier_info_r16_s& other) const; + bool operator!=(const rss_cfg_carrier_info_r16_s& other) const { return not(*this == other); } +}; + +// SSB-PositionQCL-RelationNR-r16 ::= ENUMERATED +struct ssb_position_qcl_relation_nr_r16_opts { + enum options { n1, n2, n4, n8, nulltype } value; + typedef uint8_t number_type; + + const char* to_string() const; + uint8_t to_number() const; +}; +typedef enumerated<ssb_position_qcl_relation_nr_r16_opts> ssb_position_qcl_relation_nr_r16_e; + +// SSB-PositionQCL-RelationNR-r17 ::= ENUMERATED +struct ssb_position_qcl_relation_nr_r17_opts { + enum options { n32, n64, nulltype } value; + typedef uint8_t number_type; + + const char* to_string() const; + uint8_t to_number() const; +}; +typedef enumerated<ssb_position_qcl_relation_nr_r17_opts> ssb_position_qcl_relation_nr_r17_e; + // MobilityStateParameters ::= SEQUENCE struct mob_state_params_s { struct t_eval_opts { @@ -487,6 +540,18 @@ struct carrier_freq_cdma2000_s { bool operator!=(const carrier_freq_cdma2000_s& other) const { return not(*this == other); } }; +// CellsToAddMod-v1610 ::= SEQUENCE +struct cells_to_add_mod_v1610_s { + rss_meas_pwr_bias_r16_e rss_meas_pwr_bias_r16; + + // 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 cells_to_add_mod_v1610_s& other) const; + bool operator!=(const cells_to_add_mod_v1610_s& other) const { return not(*this == other); } +}; + // MeasCSI-RS-Config-r12 ::= SEQUENCE struct meas_csi_rs_cfg_r12_s { bool ext = false; @@ -520,6 +585,45 @@ struct pci_range_utra_fdd_r9_s { bool operator!=(const pci_range_utra_fdd_r9_s& other) const { return not(*this == other); } }; +// SSB-PositionQCL-CellsToAddNR-r16 ::= SEQUENCE +struct ssb_position_qcl_cells_to_add_nr_r16_s { + uint16_t pci_r16 = 0; + ssb_position_qcl_relation_nr_r16_e ssb_position_qcl_nr_r16; + + // 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 ssb_position_qcl_cells_to_add_nr_r16_s& other) const; + bool operator!=(const ssb_position_qcl_cells_to_add_nr_r16_s& other) const { return not(*this == other); } +}; + +// SSB-PositionQCL-CellsToAddNR-r17 ::= SEQUENCE +struct ssb_position_qcl_cells_to_add_nr_r17_s { + uint16_t pci_nr_r17 = 0; + ssb_position_qcl_relation_nr_r17_e ssb_position_qcl_nr_r17; + + // 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 ssb_position_qcl_cells_to_add_nr_r17_s& other) const; + bool operator!=(const ssb_position_qcl_cells_to_add_nr_r17_s& other) const { return not(*this == other); } +}; + +// AllowedCellsToAddMod-r13 ::= SEQUENCE +struct allowed_cells_to_add_mod_r13_s { + uint8_t cell_idx_r13 = 1; + pci_range_s pci_range_r13; + + // 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 allowed_cells_to_add_mod_r13_s& other) const; + bool operator!=(const allowed_cells_to_add_mod_r13_s& other) const { return not(*this == other); } +}; + // AltTTT-CellsToAddMod-r12 ::= SEQUENCE struct alt_ttt_cells_to_add_mod_r12_s { uint8_t cell_idx_r12 = 1; @@ -536,19 +640,6 @@ struct alt_ttt_cells_to_add_mod_r12_s { // BT-NameList-r15 ::= SEQUENCE (SIZE (1..4)) OF OCTET STRING (SIZE (1..248)) using bt_name_list_r15_l = bounded_array<bounded_octstring<1, 248>, 4>; -// BlackCellsToAddMod ::= SEQUENCE -struct black_cells_to_add_mod_s { - uint8_t cell_idx = 1; - pci_range_s pci_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 black_cells_to_add_mod_s& other) const; - bool operator!=(const black_cells_to_add_mod_s& other) const { return not(*this == other); } -}; - // CellsToAddMod ::= SEQUENCE struct cells_to_add_mod_s { uint8_t cell_idx = 1; @@ -576,6 +667,9 @@ struct cells_to_add_mod_cdma2000_s { bool operator!=(const cells_to_add_mod_cdma2000_s& other) const { return not(*this == other); } }; +// CellsToAddModList-v1610 ::= SEQUENCE (SIZE (1..32)) OF CellsToAddMod-v1610 +using cells_to_add_mod_list_v1610_l = dyn_array<cells_to_add_mod_v1610_s>; + // CellsToAddModNR-r15 ::= SEQUENCE struct cells_to_add_mod_nr_r15_s { uint8_t cell_idx_r15 = 1; @@ -589,6 +683,20 @@ struct cells_to_add_mod_nr_r15_s { bool operator!=(const cells_to_add_mod_nr_r15_s& other) const { return not(*this == other); } }; +// CellsToAddModNR-r16 ::= SEQUENCE +struct cells_to_add_mod_nr_r16_s { + uint8_t cell_idx_r16 = 1; + uint16_t pci_r16 = 0; + q_offset_range_e cell_individual_offset_r16; + + // 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 cells_to_add_mod_nr_r16_s& other) const; + bool operator!=(const cells_to_add_mod_nr_r16_s& other) const { return not(*this == other); } +}; + // CellsToAddModUTRA-FDD ::= SEQUENCE struct cells_to_add_mod_utra_fdd_s { uint8_t cell_idx = 1; @@ -615,6 +723,19 @@ struct cells_to_add_mod_utra_tdd_s { bool operator!=(const cells_to_add_mod_utra_tdd_s& other) const { return not(*this == other); } }; +// ExcludedCellsToAddMod ::= SEQUENCE +struct excluded_cells_to_add_mod_s { + uint8_t cell_idx = 1; + pci_range_s pci_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 excluded_cells_to_add_mod_s& other) const; + bool operator!=(const excluded_cells_to_add_mod_s& other) const { return not(*this == other); } +}; + // MeasCSI-RS-ToAddModList-r12 ::= SEQUENCE (SIZE (1..96)) OF MeasCSI-RS-Config-r12 using meas_csi_rs_to_add_mod_list_r12_l = dyn_array<meas_csi_rs_cfg_r12_s>; @@ -627,25 +748,164 @@ using meas_sf_cell_list_r10_l = dyn_array<pci_range_s>; // PhysCellIdRangeUTRA-FDDList-r9 ::= SEQUENCE (SIZE (1..4)) OF PhysCellIdRangeUTRA-FDD-r9 using pci_range_utra_fdd_list_r9_l = dyn_array<pci_range_utra_fdd_r9_s>; -// WLAN-ChannelList-r13 ::= SEQUENCE (SIZE (1..16)) OF INTEGER (0..255) -using wlan_ch_list_r13_l = bounded_array<uint16_t, 16>; +// SSB-PositionQCL-CellsToAddModListNR-r16 ::= SEQUENCE (SIZE (1..32)) OF SSB-PositionQCL-CellsToAddNR-r16 +using ssb_position_qcl_cells_to_add_mod_list_nr_r16_l = dyn_array<ssb_position_qcl_cells_to_add_nr_r16_s>; -// WLAN-NameList-r15 ::= SEQUENCE (SIZE (1..4)) OF OCTET STRING (SIZE (1..32)) -using wlan_name_list_r15_l = bounded_array<bounded_octstring<1, 32>, 4>; +// SSB-PositionQCL-CellsToAddModListNR-r17 ::= SEQUENCE (SIZE (1..32)) OF SSB-PositionQCL-CellsToAddNR-r17 +using ssb_position_qcl_cells_to_add_mod_list_nr_r17_l = dyn_array<ssb_position_qcl_cells_to_add_nr_r17_s>; -// WhiteCellsToAddMod-r13 ::= SEQUENCE -struct white_cells_to_add_mod_r13_s { - uint8_t cell_idx_r13 = 1; - pci_range_s pci_range_r13; +// ThresholdEUTRA ::= CHOICE +struct thres_eutra_c { + struct types_opts { + enum options { thres_rsrp, thres_rsrq, nulltype } value; - // sequence methods + const char* to_string() const; + }; + typedef enumerated<types_opts> types; + + // choice methods + thres_eutra_c() = default; + thres_eutra_c(const thres_eutra_c& other); + thres_eutra_c& operator=(const thres_eutra_c& other); + ~thres_eutra_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 white_cells_to_add_mod_r13_s& other) const; - bool operator!=(const white_cells_to_add_mod_r13_s& other) const { return not(*this == other); } + bool operator==(const thres_eutra_c& other) const; + bool operator!=(const thres_eutra_c& other) const { return not(*this == other); } + // getters + uint8_t& thres_rsrp() + { + assert_choice_type(types::thres_rsrp, type_, "ThresholdEUTRA"); + return c.get<uint8_t>(); + } + uint8_t& thres_rsrq() + { + assert_choice_type(types::thres_rsrq, type_, "ThresholdEUTRA"); + return c.get<uint8_t>(); + } + const uint8_t& thres_rsrp() const + { + assert_choice_type(types::thres_rsrp, type_, "ThresholdEUTRA"); + return c.get<uint8_t>(); + } + const uint8_t& thres_rsrq() const + { + assert_choice_type(types::thres_rsrq, type_, "ThresholdEUTRA"); + return c.get<uint8_t>(); + } + uint8_t& set_thres_rsrp(); + uint8_t& set_thres_rsrq(); + +private: + types type_; + pod_choice_buffer_t c; + + void destroy_(); +}; + +// ThresholdNR-r15 ::= CHOICE +struct thres_nr_r15_c { + struct types_opts { + enum options { nr_rsrp_r15, nr_rsrq_r15, nr_sinr_r15, nulltype } value; + + const char* to_string() const; + }; + typedef enumerated<types_opts> types; + + // choice methods + thres_nr_r15_c() = default; + thres_nr_r15_c(const thres_nr_r15_c& other); + thres_nr_r15_c& operator=(const thres_nr_r15_c& other); + ~thres_nr_r15_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 thres_nr_r15_c& other) const; + bool operator!=(const thres_nr_r15_c& other) const { return not(*this == other); } + // getters + uint8_t& nr_rsrp_r15() + { + assert_choice_type(types::nr_rsrp_r15, type_, "ThresholdNR-r15"); + return c.get<uint8_t>(); + } + uint8_t& nr_rsrq_r15() + { + assert_choice_type(types::nr_rsrq_r15, type_, "ThresholdNR-r15"); + return c.get<uint8_t>(); + } + uint8_t& nr_sinr_r15() + { + assert_choice_type(types::nr_sinr_r15, type_, "ThresholdNR-r15"); + return c.get<uint8_t>(); + } + const uint8_t& nr_rsrp_r15() const + { + assert_choice_type(types::nr_rsrp_r15, type_, "ThresholdNR-r15"); + return c.get<uint8_t>(); + } + const uint8_t& nr_rsrq_r15() const + { + assert_choice_type(types::nr_rsrq_r15, type_, "ThresholdNR-r15"); + return c.get<uint8_t>(); + } + const uint8_t& nr_sinr_r15() const + { + assert_choice_type(types::nr_sinr_r15, type_, "ThresholdNR-r15"); + return c.get<uint8_t>(); + } + uint8_t& set_nr_rsrp_r15(); + uint8_t& set_nr_rsrq_r15(); + uint8_t& set_nr_sinr_r15(); + +private: + types type_; + pod_choice_buffer_t c; + + void destroy_(); }; +// TimeToTrigger ::= ENUMERATED +struct time_to_trigger_opts { + enum options { + ms0, + ms40, + ms64, + ms80, + ms100, + ms128, + ms160, + ms256, + ms320, + ms480, + ms512, + ms640, + ms1024, + ms1280, + ms2560, + ms5120, + nulltype + } value; + typedef uint16_t number_type; + + const char* to_string() const; + uint16_t to_number() const; +}; +typedef enumerated<time_to_trigger_opts> time_to_trigger_e; + +// WLAN-ChannelList-r13 ::= SEQUENCE (SIZE (1..16)) OF INTEGER (0..255) +using wlan_ch_list_r13_l = bounded_array<uint16_t, 16>; + +// WLAN-NameList-r15 ::= SEQUENCE (SIZE (1..4)) OF OCTET STRING (SIZE (1..32)) +using wlan_name_list_r15_l = bounded_array<bounded_octstring<1, 32>, 4>; + +// AllowedCellsToAddModList-r13 ::= SEQUENCE (SIZE (1..32)) OF AllowedCellsToAddMod-r13 +using allowed_cells_to_add_mod_list_r13_l = dyn_array<allowed_cells_to_add_mod_r13_s>; + // AltTTT-CellsToAddModList-r12 ::= SEQUENCE (SIZE (1..32)) OF AltTTT-CellsToAddMod-r12 using alt_ttt_cells_to_add_mod_list_r12_l = dyn_array<alt_ttt_cells_to_add_mod_r12_s>; @@ -681,9 +941,6 @@ private: bt_name_list_r15_l c; }; -// BlackCellsToAddModList ::= SEQUENCE (SIZE (1..32)) OF BlackCellsToAddMod -using black_cells_to_add_mod_list_l = dyn_array<black_cells_to_add_mod_s>; - // CDMA2000-Type ::= ENUMERATED struct cdma2000_type_opts { enum options { type1_xrtt, type_hrpd, nulltype } value; @@ -719,12 +976,138 @@ using cells_to_add_mod_list_cdma2000_l = dyn_array<cells_to_add_mod_cdma2000_s>; // CellsToAddModListNR-r15 ::= SEQUENCE (SIZE (1..32)) OF CellsToAddModNR-r15 using cells_to_add_mod_list_nr_r15_l = dyn_array<cells_to_add_mod_nr_r15_s>; +// CellsToAddModListNR-r16 ::= SEQUENCE (SIZE (1..32)) OF CellsToAddModNR-r16 +using cells_to_add_mod_list_nr_r16_l = dyn_array<cells_to_add_mod_nr_r16_s>; + // CellsToAddModListUTRA-FDD ::= SEQUENCE (SIZE (1..32)) OF CellsToAddModUTRA-FDD using cells_to_add_mod_list_utra_fdd_l = dyn_array<cells_to_add_mod_utra_fdd_s>; // CellsToAddModListUTRA-TDD ::= SEQUENCE (SIZE (1..32)) OF CellsToAddModUTRA-TDD using cells_to_add_mod_list_utra_tdd_l = dyn_array<cells_to_add_mod_utra_tdd_s>; +// CondReconfigurationTriggerEUTRA-r16 ::= SEQUENCE +struct cond_recfg_trigger_eutra_r16_s { + struct cond_event_id_r16_c_ { + struct cond_event_a3_r16_s_ { + int8_t a3_offset_r16 = -30; + uint8_t hysteresis_r16 = 0; + time_to_trigger_e time_to_trigger_r16; + }; + struct cond_event_a5_r16_s_ { + thres_eutra_c a5_thres1_r16; + thres_eutra_c a5_thres2_r16; + uint8_t hysteresis_r16 = 0; + time_to_trigger_e time_to_trigger_r16; + }; + struct types_opts { + enum options { cond_event_a3_r16, cond_event_a5_r16, /*...*/ 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 + cond_event_id_r16_c_() = default; + cond_event_id_r16_c_(const cond_event_id_r16_c_& other); + cond_event_id_r16_c_& operator=(const cond_event_id_r16_c_& other); + ~cond_event_id_r16_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 cond_event_id_r16_c_& other) const; + bool operator!=(const cond_event_id_r16_c_& other) const { return not(*this == other); } + // getters + cond_event_a3_r16_s_& cond_event_a3_r16() + { + assert_choice_type(types::cond_event_a3_r16, type_, "condEventId-r16"); + return c.get<cond_event_a3_r16_s_>(); + } + cond_event_a5_r16_s_& cond_event_a5_r16() + { + assert_choice_type(types::cond_event_a5_r16, type_, "condEventId-r16"); + return c.get<cond_event_a5_r16_s_>(); + } + const cond_event_a3_r16_s_& cond_event_a3_r16() const + { + assert_choice_type(types::cond_event_a3_r16, type_, "condEventId-r16"); + return c.get<cond_event_a3_r16_s_>(); + } + const cond_event_a5_r16_s_& cond_event_a5_r16() const + { + assert_choice_type(types::cond_event_a5_r16, type_, "condEventId-r16"); + return c.get<cond_event_a5_r16_s_>(); + } + cond_event_a3_r16_s_& set_cond_event_a3_r16(); + cond_event_a5_r16_s_& set_cond_event_a5_r16(); + + private: + types type_; + choice_buffer_t<cond_event_a3_r16_s_, cond_event_a5_r16_s_> c; + + void destroy_(); + }; + + // member variables + cond_event_id_r16_c_ cond_event_id_r16; + + // 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 cond_recfg_trigger_eutra_r16_s& other) const; + bool operator!=(const cond_recfg_trigger_eutra_r16_s& other) const { return not(*this == other); } +}; + +// CondReconfigurationTriggerNR-r17 ::= SEQUENCE +struct cond_recfg_trigger_nr_r17_s { + struct cond_event_id_r17_c_ { + struct cond_event_b1_nr_r17_s_ { + thres_nr_r15_c b1_thres_nr_r17; + uint8_t hysteresis_r17 = 0; + time_to_trigger_e time_to_trigger_r17; + }; + struct types_opts { + enum options { cond_event_b1_nr_r17, /*...*/ 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 + types type() const { return types::cond_event_b1_nr_r17; } + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; + bool operator==(const cond_event_id_r17_c_& other) const; + bool operator!=(const cond_event_id_r17_c_& other) const { return not(*this == other); } + // getters + cond_event_b1_nr_r17_s_& cond_event_b1_nr_r17() { return c; } + const cond_event_b1_nr_r17_s_& cond_event_b1_nr_r17() const { return c; } + + private: + cond_event_b1_nr_r17_s_ c; + }; + + // member variables + cond_event_id_r17_c_ cond_event_id_r17; + + // 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 cond_recfg_trigger_nr_r17_s& other) const; + bool operator!=(const cond_recfg_trigger_nr_r17_s& other) const { return not(*this == other); } +}; + +// ExcludedCellsToAddModList ::= SEQUENCE (SIZE (1..32)) OF ExcludedCellsToAddMod +using excluded_cells_to_add_mod_list_l = dyn_array<excluded_cells_to_add_mod_s>; + // MeasCycleSCell-r10 ::= ENUMERATED struct meas_cycle_scell_r10_opts { enum options { sf160, sf256, sf320, sf512, sf640, sf1024, sf1280, spare1, nulltype } value; @@ -1196,6 +1579,21 @@ private: setup_s_ c; }; +// MeasRSS-DedicatedConfig-r16 ::= SEQUENCE +struct meas_rss_ded_cfg_r16_s { + bool rss_cfg_carrier_info_r16_present = false; + bool cells_to_add_mod_list_v1610_present = false; + rss_cfg_carrier_info_r16_s rss_cfg_carrier_info_r16; + cells_to_add_mod_list_v1610_l cells_to_add_mod_list_v1610; + + // 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 meas_rss_ded_cfg_r16_s& other) const; + bool operator!=(const meas_rss_ded_cfg_r16_s& other) const { return not(*this == other); } +}; + // MeasRSSI-ReportConfig-r13 ::= SEQUENCE struct meas_rssi_report_cfg_r13_s { bool ch_occupancy_thres_r13_present = false; @@ -1359,6 +1757,80 @@ private: setup_s_ c; }; +// RMTC-ConfigNR-r16 ::= SEQUENCE +struct rmtc_cfg_nr_r16_s { + struct rmtc_periodicity_nr_r16_opts { + enum options { ms40, ms80, ms160, ms320, ms640, nulltype } value; + typedef uint16_t number_type; + + const char* to_string() const; + uint16_t to_number() const; + }; + typedef enumerated<rmtc_periodicity_nr_r16_opts> rmtc_periodicity_nr_r16_e_; + struct meas_dur_nr_r16_opts { + enum options { sym1, sym14or12, sym28or24, sym42or36, sym70or60, nulltype } value; + typedef uint8_t number_type; + + const char* to_string() const; + uint8_t to_number() const; + }; + typedef enumerated<meas_dur_nr_r16_opts> meas_dur_nr_r16_e_; + struct ref_scs_cp_nr_r16_opts { + enum options { khz15, khz30, khz60_ncp, khz60_ecp, nulltype } value; + + const char* to_string() const; + }; + typedef enumerated<ref_scs_cp_nr_r16_opts> ref_scs_cp_nr_r16_e_; + struct rmtc_bw_nr_r17_opts { + enum options { mhz100, mhz400, mhz800, mhz1600, mhz2000, nulltype } value; + typedef uint16_t number_type; + + const char* to_string() const; + uint16_t to_number() const; + }; + typedef enumerated<rmtc_bw_nr_r17_opts> rmtc_bw_nr_r17_e_; + struct meas_dur_nr_r17_opts { + enum options { sym140, sym560, sym1120, nulltype } value; + typedef uint16_t number_type; + + const char* to_string() const; + uint16_t to_number() const; + }; + typedef enumerated<meas_dur_nr_r17_opts> meas_dur_nr_r17_e_; + struct ref_scs_cp_nr_r17_opts { + enum options { khz120, khz480, khz960, nulltype } value; + typedef uint16_t number_type; + + const char* to_string() const; + uint16_t to_number() const; + }; + typedef enumerated<ref_scs_cp_nr_r17_opts> ref_scs_cp_nr_r17_e_; + + // member variables + bool ext = false; + bool rmtc_sf_offset_nr_r16_present = false; + rmtc_periodicity_nr_r16_e_ rmtc_periodicity_nr_r16; + uint16_t rmtc_sf_offset_nr_r16 = 0; + meas_dur_nr_r16_e_ meas_dur_nr_r16; + uint32_t rmtc_freq_nr_r16 = 0; + ref_scs_cp_nr_r16_e_ ref_scs_cp_nr_r16; + // ... + // group 0 + bool rmtc_bw_nr_r17_present = false; + bool meas_dur_nr_r17_present = false; + bool ref_scs_cp_nr_r17_present = false; + rmtc_bw_nr_r17_e_ rmtc_bw_nr_r17; + meas_dur_nr_r17_e_ meas_dur_nr_r17; + ref_scs_cp_nr_r17_e_ ref_scs_cp_nr_r17; + + // 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 rmtc_cfg_nr_r16_s& other) const; + bool operator!=(const rmtc_cfg_nr_r16_s& other) const { return not(*this == other); } +}; + // RS-ConfigSSB-NR-r15 ::= SEQUENCE struct rs_cfg_ssb_nr_r15_s { struct subcarrier_spacing_ssb_r15_opts { @@ -1399,6 +1871,16 @@ struct rs_cfg_ssb_nr_r15_s { types type_; ssb_to_measure_r15_c c; }; + using ssb_position_qcl_cells_to_rem_list_nr_r16_l_ = bounded_array<uint16_t, 32>; + struct subcarrier_spacing_ssb_r17_opts { + enum options { khz480, khz960, nulltype } value; + typedef uint16_t number_type; + + const char* to_string() const; + uint16_t to_number() const; + }; + typedef enumerated<subcarrier_spacing_ssb_r17_opts> subcarrier_spacing_ssb_r17_e_; + using ssb_position_qcl_cells_to_rem_list_nr_r17_l_ = bounded_array<uint16_t, 32>; // member variables bool ext = false; @@ -1407,6 +1889,18 @@ struct rs_cfg_ssb_nr_r15_s { // ... // group 0 copy_ptr<ssb_to_measure_r15_c_> ssb_to_measure_r15; + // group 1 + bool ssb_position_qcl_common_nr_r16_present = false; + ssb_position_qcl_relation_nr_r16_e ssb_position_qcl_common_nr_r16; + copy_ptr<ssb_position_qcl_cells_to_add_mod_list_nr_r16_l> ssb_position_qcl_cells_to_add_mod_list_nr_r16; + copy_ptr<ssb_position_qcl_cells_to_rem_list_nr_r16_l_> ssb_position_qcl_cells_to_rem_list_nr_r16; + // group 2 + bool subcarrier_spacing_ssb_r17_present = false; + bool ssb_position_qcl_common_nr_r17_present = false; + subcarrier_spacing_ssb_r17_e_ subcarrier_spacing_ssb_r17; + ssb_position_qcl_relation_nr_r17_e ssb_position_qcl_common_nr_r17; + copy_ptr<ssb_position_qcl_cells_to_add_mod_list_nr_r17_l> ssb_position_qcl_cells_to_add_mod_list_nr_r17; + copy_ptr<ssb_position_qcl_cells_to_rem_list_nr_r17_l_> ssb_position_qcl_cells_to_rem_list_nr_r17; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -1510,121 +2004,6 @@ struct report_quant_wlan_r13_s { bool operator!=(const report_quant_wlan_r13_s& other) const { return not(*this == other); } }; -// ThresholdEUTRA ::= CHOICE -struct thres_eutra_c { - struct types_opts { - enum options { thres_rsrp, thres_rsrq, nulltype } value; - - const char* to_string() const; - }; - typedef enumerated<types_opts> types; - - // choice methods - thres_eutra_c() = default; - thres_eutra_c(const thres_eutra_c& other); - thres_eutra_c& operator=(const thres_eutra_c& other); - ~thres_eutra_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 thres_eutra_c& other) const; - bool operator!=(const thres_eutra_c& other) const { return not(*this == other); } - // getters - uint8_t& thres_rsrp() - { - assert_choice_type(types::thres_rsrp, type_, "ThresholdEUTRA"); - return c.get<uint8_t>(); - } - uint8_t& thres_rsrq() - { - assert_choice_type(types::thres_rsrq, type_, "ThresholdEUTRA"); - return c.get<uint8_t>(); - } - const uint8_t& thres_rsrp() const - { - assert_choice_type(types::thres_rsrp, type_, "ThresholdEUTRA"); - return c.get<uint8_t>(); - } - const uint8_t& thres_rsrq() const - { - assert_choice_type(types::thres_rsrq, type_, "ThresholdEUTRA"); - return c.get<uint8_t>(); - } - uint8_t& set_thres_rsrp(); - uint8_t& set_thres_rsrq(); - -private: - types type_; - pod_choice_buffer_t c; - - void destroy_(); -}; - -// ThresholdNR-r15 ::= CHOICE -struct thres_nr_r15_c { - struct types_opts { - enum options { nr_rsrp_r15, nr_rsrq_r15, nr_sinr_r15, nulltype } value; - - const char* to_string() const; - }; - typedef enumerated<types_opts> types; - - // choice methods - thres_nr_r15_c() = default; - thres_nr_r15_c(const thres_nr_r15_c& other); - thres_nr_r15_c& operator=(const thres_nr_r15_c& other); - ~thres_nr_r15_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 thres_nr_r15_c& other) const; - bool operator!=(const thres_nr_r15_c& other) const { return not(*this == other); } - // getters - uint8_t& nr_rsrp_r15() - { - assert_choice_type(types::nr_rsrp_r15, type_, "ThresholdNR-r15"); - return c.get<uint8_t>(); - } - uint8_t& nr_rsrq_r15() - { - assert_choice_type(types::nr_rsrq_r15, type_, "ThresholdNR-r15"); - return c.get<uint8_t>(); - } - uint8_t& nr_sinr_r15() - { - assert_choice_type(types::nr_sinr_r15, type_, "ThresholdNR-r15"); - return c.get<uint8_t>(); - } - const uint8_t& nr_rsrp_r15() const - { - assert_choice_type(types::nr_rsrp_r15, type_, "ThresholdNR-r15"); - return c.get<uint8_t>(); - } - const uint8_t& nr_rsrq_r15() const - { - assert_choice_type(types::nr_rsrq_r15, type_, "ThresholdNR-r15"); - return c.get<uint8_t>(); - } - const uint8_t& nr_sinr_r15() const - { - assert_choice_type(types::nr_sinr_r15, type_, "ThresholdNR-r15"); - return c.get<uint8_t>(); - } - uint8_t& set_nr_rsrp_r15(); - uint8_t& set_nr_rsrq_r15(); - uint8_t& set_nr_sinr_r15(); - -private: - types type_; - pod_choice_buffer_t c; - - void destroy_(); -}; - // ThresholdUTRA ::= CHOICE struct thres_utra_c { struct types_opts { @@ -1679,34 +2058,6 @@ private: void destroy_(); }; -// TimeToTrigger ::= ENUMERATED -struct time_to_trigger_opts { - enum options { - ms0, - ms40, - ms64, - ms80, - ms100, - ms128, - ms160, - ms256, - ms320, - ms480, - ms512, - ms640, - ms1024, - ms1280, - ms2560, - ms5120, - nulltype - } value; - typedef uint16_t number_type; - - const char* to_string() const; - uint16_t to_number() const; -}; -typedef enumerated<time_to_trigger_opts> time_to_trigger_e; - // Tx-ResourcePoolMeasList-r14 ::= SEQUENCE (SIZE (1..72)) OF INTEGER (1..72) using tx_res_pool_meas_list_r14_l = dyn_array<uint8_t>; @@ -1773,6 +2124,44 @@ private: setup_s_ c; }; +// UL-DelayValueConfig-r16 ::= CHOICE +struct ul_delay_value_cfg_r16_c { + struct setup_s_ { + using delay_dr_blist_r16_l_ = bounded_array<uint8_t, 11>; + + // member variables + delay_dr_blist_r16_l_ delay_dr_blist_r16; + }; + using types = setup_e; + + // choice methods + ul_delay_value_cfg_r16_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; + bool operator==(const ul_delay_value_cfg_r16_c& other) const; + bool operator!=(const ul_delay_value_cfg_r16_c& other) const { return not(*this == other); } + // getters + setup_s_& setup() + { + assert_choice_type(types::setup, type_, "UL-DelayValueConfig-r16"); + return c; + } + const setup_s_& setup() const + { + assert_choice_type(types::setup, type_, "UL-DelayValueConfig-r16"); + return c; + } + void set_release(); + setup_s_& set_setup(); + +private: + types type_; + setup_s_ c; +}; + // WLAN-CarrierInfo-r13 ::= SEQUENCE struct wlan_carrier_info_r13_s { struct country_code_r13_opts { @@ -1835,9 +2224,6 @@ private: wlan_name_list_r15_l c; }; -// WhiteCellsToAddModList-r13 ::= SEQUENCE (SIZE (1..32)) OF WhiteCellsToAddMod-r13 -using white_cells_to_add_mod_list_r13_l = dyn_array<white_cells_to_add_mod_r13_s>; - // MeasGapConfigPerCC-r14 ::= SEQUENCE struct meas_gap_cfg_per_cc_r14_s { uint8_t serv_cell_id_r14 = 0; @@ -1916,23 +2302,23 @@ struct meas_obj_eutra_s { }; // member variables - bool ext = false; - bool offset_freq_present = false; - bool cells_to_rem_list_present = false; - bool cells_to_add_mod_list_present = false; - bool black_cells_to_rem_list_present = false; - bool black_cells_to_add_mod_list_present = false; - bool cell_for_which_to_report_cgi_present = false; - uint32_t carrier_freq = 0; - allowed_meas_bw_e allowed_meas_bw; - bool presence_ant_port1 = false; - fixed_bitstring<2> neigh_cell_cfg; - q_offset_range_e offset_freq; - cell_idx_list_l cells_to_rem_list; - cells_to_add_mod_list_l cells_to_add_mod_list; - cell_idx_list_l black_cells_to_rem_list; - black_cells_to_add_mod_list_l black_cells_to_add_mod_list; - uint16_t cell_for_which_to_report_cgi = 0; + bool ext = false; + bool offset_freq_present = false; + bool cells_to_rem_list_present = false; + bool cells_to_add_mod_list_present = false; + bool excluded_cells_to_rem_list_present = false; + bool excluded_cells_to_add_mod_list_present = false; + bool cell_for_which_to_report_cgi_present = false; + uint32_t carrier_freq = 0; + allowed_meas_bw_e allowed_meas_bw; + bool presence_ant_port1 = false; + fixed_bitstring<2> neigh_cell_cfg; + q_offset_range_e offset_freq; + cell_idx_list_l cells_to_rem_list; + cells_to_add_mod_list_l cells_to_add_mod_list; + cell_idx_list_l excluded_cells_to_rem_list; + excluded_cells_to_add_mod_list_l excluded_cells_to_add_mod_list; + uint16_t cell_for_which_to_report_cgi = 0; // ... // group 0 bool meas_cycle_scell_r10_present = false; @@ -1949,11 +2335,11 @@ struct meas_obj_eutra_s { bool reduced_meas_performance_r12 = false; copy_ptr<meas_ds_cfg_r12_c> meas_ds_cfg_r12; // group 3 - bool carrier_freq_r13_present = false; - copy_ptr<cell_idx_list_l> white_cells_to_rem_list_r13; - copy_ptr<white_cells_to_add_mod_list_r13_l> white_cells_to_add_mod_list_r13; - copy_ptr<rmtc_cfg_r13_c> rmtc_cfg_r13; - uint32_t carrier_freq_r13 = 65536; + bool carrier_freq_r13_present = false; + copy_ptr<cell_idx_list_l> allowed_cells_to_rem_list_r13; + copy_ptr<allowed_cells_to_add_mod_list_r13_l> allowed_cells_to_add_mod_list_r13; + copy_ptr<rmtc_cfg_r13_c> rmtc_cfg_r13; + uint32_t carrier_freq_r13 = 65536; // group 4 bool fembms_mixed_carrier_r14_present = false; copy_ptr<tx_res_pool_meas_list_r14_l> tx_res_pool_to_rem_list_r14; @@ -1961,6 +2347,8 @@ struct meas_obj_eutra_s { bool fembms_mixed_carrier_r14 = false; // group 5 copy_ptr<meas_sensing_cfg_r15_s> meas_sensing_cfg_r15; + // group 6 + copy_ptr<setup_release_c<meas_rss_ded_cfg_r16_s> > meas_rss_ded_cfg_r16; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -2039,16 +2427,16 @@ struct meas_obj_nr_r15_s { bool thresh_rs_idx_r15_present = false; bool max_rs_idx_cell_qual_r15_present = false; bool offset_freq_r15_present = false; - bool black_cells_to_rem_list_r15_present = false; - bool black_cells_to_add_mod_list_r15_present = false; + bool excluded_cells_to_rem_list_r15_present = false; + bool excluded_cells_to_add_mod_list_r15_present = false; bool cells_for_which_to_report_sftd_r15_present = false; uint32_t carrier_freq_r15 = 0; rs_cfg_ssb_nr_r15_s rs_cfg_ssb_r15; thres_list_nr_r15_s thresh_rs_idx_r15; uint8_t max_rs_idx_cell_qual_r15 = 1; int8_t offset_freq_r15 = -15; - cell_idx_list_l black_cells_to_rem_list_r15; - cells_to_add_mod_list_nr_r15_l black_cells_to_add_mod_list_r15; + cell_idx_list_l excluded_cells_to_rem_list_r15; + cells_to_add_mod_list_nr_r15_l excluded_cells_to_add_mod_list_r15; uint8_t quant_cfg_set_r15 = 1; cells_for_which_to_report_sftd_r15_l_ cells_for_which_to_report_sftd_r15; // ... @@ -2059,6 +2447,11 @@ struct meas_obj_nr_r15_s { bool derive_ssb_idx_from_cell_r15 = false; copy_ptr<ss_rssi_meas_r15_s> ss_rssi_meas_r15; copy_ptr<band_nr_r15_c_> band_nr_r15; + // group 1 + copy_ptr<setup_release_c<rmtc_cfg_nr_r16_s> > rmtc_cfg_nr_r16; + // group 2 + copy_ptr<cell_idx_list_l> cells_to_rem_list_r16; + copy_ptr<cells_to_add_mod_list_nr_r16_l> cells_to_add_mod_list_r16; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -2728,11 +3121,11 @@ struct report_cfg_eutra_s { bool trigger_quant_csi_rs_r12 = false; // group 3 bool report_sstd_meas_r13_present = false; - bool use_white_cell_list_r13_present = false; + bool use_allowed_cell_list_r13_present = false; bool include_multi_band_info_r13_present = false; bool report_sstd_meas_r13 = false; copy_ptr<rs_sinr_cfg_r13_c_> rs_sinr_cfg_r13; - bool use_white_cell_list_r13 = false; + bool use_allowed_cell_list_r13 = false; copy_ptr<meas_rssi_report_cfg_r13_s> meas_rssi_report_cfg_r13; copy_ptr<ul_delay_cfg_r13_c> ul_delay_cfg_r13; // group 4 @@ -2752,6 +3145,13 @@ struct report_cfg_eutra_s { copy_ptr<wlan_name_list_cfg_r15_c> include_wlan_meas_r15; uint8_t nof_trigger_cells_r15 = 2; bool a4_a5_report_on_leave_r15 = false; + // group 8 + copy_ptr<cond_recfg_trigger_eutra_r16_s> cond_recfg_trigger_eutra_r16; + copy_ptr<ul_delay_value_cfg_r16_c> ul_delay_value_cfg_r16; + // group 9 + bool include_uncom_bar_pre_meas_r17_present = false; + bool coarse_location_req_r17_present = false; + bool include_uncom_bar_pre_meas_r17 = false; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -3180,6 +3580,11 @@ struct report_cfg_inter_rat_s { copy_ptr<report_quant_nr_r15_s> report_quant_rs_idx_nr_r15; bool report_rs_idx_results_nr = false; report_sftd_meas_r15_e_ report_sftd_meas_r15; + // group 7 + bool use_autonomous_gaps_nr_r16_present = false; + copy_ptr<meas_rssi_report_cfg_r13_s> meas_rssi_report_cfg_nr_r16; + // group 8 + copy_ptr<cond_recfg_trigger_nr_r17_s> cond_recfg_trigger_nr_r17; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -3491,6 +3896,170 @@ struct meas_obj_to_add_mod_ext_r13_s { void to_json(json_writer& j) const; }; +// PUR-PeriodicityAndOffset-r16 ::= CHOICE +struct pur_periodicity_and_offset_r16_c { + struct types_opts { + enum options { + periodicity8, + periodicity16, + periodicity32, + periodicity64, + periodicity128, + periodicity256, + periodicity512, + periodicity1024, + periodicity2048, + periodicity4096, + periodicity8192, + nulltype + } value; + typedef uint16_t number_type; + + const char* to_string() const; + uint16_t to_number() const; + }; + typedef enumerated<types_opts> types; + + // choice methods + pur_periodicity_and_offset_r16_c() = default; + pur_periodicity_and_offset_r16_c(const pur_periodicity_and_offset_r16_c& other); + pur_periodicity_and_offset_r16_c& operator=(const pur_periodicity_and_offset_r16_c& other); + ~pur_periodicity_and_offset_r16_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& periodicity8() + { + assert_choice_type(types::periodicity8, type_, "PUR-PeriodicityAndOffset-r16"); + return c.get<uint8_t>(); + } + uint8_t& periodicity16() + { + assert_choice_type(types::periodicity16, type_, "PUR-PeriodicityAndOffset-r16"); + return c.get<uint8_t>(); + } + uint8_t& periodicity32() + { + assert_choice_type(types::periodicity32, type_, "PUR-PeriodicityAndOffset-r16"); + return c.get<uint8_t>(); + } + uint8_t& periodicity64() + { + assert_choice_type(types::periodicity64, type_, "PUR-PeriodicityAndOffset-r16"); + return c.get<uint8_t>(); + } + uint8_t& periodicity128() + { + assert_choice_type(types::periodicity128, type_, "PUR-PeriodicityAndOffset-r16"); + return c.get<uint8_t>(); + } + uint16_t& periodicity256() + { + assert_choice_type(types::periodicity256, type_, "PUR-PeriodicityAndOffset-r16"); + return c.get<uint16_t>(); + } + uint16_t& periodicity512() + { + assert_choice_type(types::periodicity512, type_, "PUR-PeriodicityAndOffset-r16"); + return c.get<uint16_t>(); + } + uint16_t& periodicity1024() + { + assert_choice_type(types::periodicity1024, type_, "PUR-PeriodicityAndOffset-r16"); + return c.get<uint16_t>(); + } + uint16_t& periodicity2048() + { + assert_choice_type(types::periodicity2048, type_, "PUR-PeriodicityAndOffset-r16"); + return c.get<uint16_t>(); + } + uint16_t& periodicity4096() + { + assert_choice_type(types::periodicity4096, type_, "PUR-PeriodicityAndOffset-r16"); + return c.get<uint16_t>(); + } + uint16_t& periodicity8192() + { + assert_choice_type(types::periodicity8192, type_, "PUR-PeriodicityAndOffset-r16"); + return c.get<uint16_t>(); + } + const uint8_t& periodicity8() const + { + assert_choice_type(types::periodicity8, type_, "PUR-PeriodicityAndOffset-r16"); + return c.get<uint8_t>(); + } + const uint8_t& periodicity16() const + { + assert_choice_type(types::periodicity16, type_, "PUR-PeriodicityAndOffset-r16"); + return c.get<uint8_t>(); + } + const uint8_t& periodicity32() const + { + assert_choice_type(types::periodicity32, type_, "PUR-PeriodicityAndOffset-r16"); + return c.get<uint8_t>(); + } + const uint8_t& periodicity64() const + { + assert_choice_type(types::periodicity64, type_, "PUR-PeriodicityAndOffset-r16"); + return c.get<uint8_t>(); + } + const uint8_t& periodicity128() const + { + assert_choice_type(types::periodicity128, type_, "PUR-PeriodicityAndOffset-r16"); + return c.get<uint8_t>(); + } + const uint16_t& periodicity256() const + { + assert_choice_type(types::periodicity256, type_, "PUR-PeriodicityAndOffset-r16"); + return c.get<uint16_t>(); + } + const uint16_t& periodicity512() const + { + assert_choice_type(types::periodicity512, type_, "PUR-PeriodicityAndOffset-r16"); + return c.get<uint16_t>(); + } + const uint16_t& periodicity1024() const + { + assert_choice_type(types::periodicity1024, type_, "PUR-PeriodicityAndOffset-r16"); + return c.get<uint16_t>(); + } + const uint16_t& periodicity2048() const + { + assert_choice_type(types::periodicity2048, type_, "PUR-PeriodicityAndOffset-r16"); + return c.get<uint16_t>(); + } + const uint16_t& periodicity4096() const + { + assert_choice_type(types::periodicity4096, type_, "PUR-PeriodicityAndOffset-r16"); + return c.get<uint16_t>(); + } + const uint16_t& periodicity8192() const + { + assert_choice_type(types::periodicity8192, type_, "PUR-PeriodicityAndOffset-r16"); + return c.get<uint16_t>(); + } + uint8_t& set_periodicity8(); + uint8_t& set_periodicity16(); + uint8_t& set_periodicity32(); + uint8_t& set_periodicity64(); + uint8_t& set_periodicity128(); + uint16_t& set_periodicity256(); + uint16_t& set_periodicity512(); + uint16_t& set_periodicity1024(); + uint16_t& set_periodicity2048(); + uint16_t& set_periodicity4096(); + uint16_t& set_periodicity8192(); + +private: + types type_; + pod_choice_buffer_t c; + + void destroy_(); +}; + // QuantityConfigCDMA2000 ::= SEQUENCE struct quant_cfg_cdma2000_s { struct meas_quant_cdma2000_opts { @@ -4404,6 +4973,58 @@ struct meas_cfg_s { void to_json(json_writer& j) const; }; +// EventType-r17 ::= CHOICE +struct event_type_r17_c { + struct event_l1_s_ { + thres_eutra_c l1_thres_r17; + uint8_t hysteresis_r17 = 0; + time_to_trigger_e time_to_trigger_r17; + }; + struct types_opts { + enum options { out_of_coverage, event_l1, /*...*/ 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 + event_type_r17_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 + event_l1_s_& event_l1() + { + assert_choice_type(types::event_l1, type_, "EventType-r17"); + return c; + } + const event_l1_s_& event_l1() const + { + assert_choice_type(types::event_l1, type_, "EventType-r17"); + return c; + } + void set_out_of_coverage(); + event_l1_s_& set_event_l1(); + +private: + types type_; + event_l1_s_ c; +}; + +// LoggedEventTriggerConfig-r17 ::= SEQUENCE +struct logged_event_trigger_cfg_r17_s { + event_type_r17_c event_type_r17; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // CarrierFreqGERAN ::= SEQUENCE struct carrier_freq_geran_s { uint16_t arfcn = 0; @@ -4415,13 +5036,27 @@ struct carrier_freq_geran_s { void to_json(json_writer& j) const; }; +// LoggedMeasurementConfiguration-v1700-IEs ::= SEQUENCE +struct logged_meas_cfg_v1700_ies_s { + bool logged_event_trigger_cfg_r17_present = false; + bool meas_uncom_bar_pre_r17_present = false; + bool non_crit_ext_present = false; + logged_event_trigger_cfg_r17_s logged_event_trigger_cfg_r17; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // LoggedMeasurementConfiguration-v1530-IEs ::= SEQUENCE struct logged_meas_cfg_v1530_ies_s { - bool bt_name_list_r15_present = false; - bool wlan_name_list_r15_present = false; - bool non_crit_ext_present = false; - bt_name_list_r15_l bt_name_list_r15; - wlan_name_list_r15_l wlan_name_list_r15; + bool bt_name_list_r15_present = false; + bool wlan_name_list_r15_present = false; + bool non_crit_ext_present = false; + bt_name_list_r15_l bt_name_list_r15; + wlan_name_list_r15_l wlan_name_list_r15; + logged_meas_cfg_v1700_ies_s non_crit_ext; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -4440,6 +5075,18 @@ struct cell_global_id_eutra_s { void to_json(json_writer& j) const; }; +// DAPS-PowerCoordinationInfo-r16 ::= SEQUENCE +struct daps_pwr_coordination_info_r16_s { + uint8_t p_daps_source_r16 = 1; + uint8_t p_daps_target_r16 = 1; + uint8_t pwr_ctrl_mode_r16 = 1; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // CarrierBandwidthEUTRA ::= SEQUENCE struct carrier_bw_eutra_s { struct dl_bw_opts { @@ -4530,6 +5177,19 @@ struct carrier_freq_eutra_v9e0_s { void to_json(json_writer& j) const; }; +// DAPS-Config-r16 ::= SEQUENCE +struct daps_cfg_r16_s { + bool ext = false; + bool daps_pwr_coordination_info_r16_present = false; + daps_pwr_coordination_info_r16_s daps_pwr_coordination_info_r16; + // ... + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // MobilityControlInfoV2X-r14 ::= SEQUENCE struct mob_ctrl_info_v2x_r14_s { bool v2x_comm_tx_pool_exceptional_r14_present = false; @@ -4595,6 +5255,8 @@ struct mob_ctrl_info_s { bool sched_info_sib1_br_r14_present = false; bool mib_repeat_status_r14 = false; uint8_t sched_info_sib1_br_r14 = 0; + // group 4 + copy_ptr<daps_cfg_r16_s> daps_cfg_r16; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -4613,6 +5275,52 @@ struct trace_ref_r10_s { void to_json(json_writer& j) const; }; +// PLMN-IdentityListNR-r15 ::= SEQUENCE (SIZE (1..12)) OF PLMN-Identity +using plmn_id_list_nr_r15_l = dyn_array<plmn_id_s>; + +// MeasResultNR-r15 ::= SEQUENCE +struct meas_result_nr_r15_s { + bool ext = false; + bool rsrp_result_r15_present = false; + bool rsrq_result_r15_present = false; + bool rs_sinr_result_r15_present = false; + uint8_t rsrp_result_r15 = 0; + uint8_t rsrq_result_r15 = 0; + uint8_t rs_sinr_result_r15 = 0; + // ... + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// PLMN-IdentityInfoNR-r15 ::= SEQUENCE +struct plmn_id_info_nr_r15_s { + bool tac_r15_present = false; + bool ran_area_code_r15_present = false; + plmn_id_list_nr_r15_l plmn_id_list_r15; + fixed_bitstring<24> tac_r15; + uint16_t ran_area_code_r15 = 0; + fixed_bitstring<36> cell_id_r15; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// PLMN-IdentityInfoNR-v1710 ::= SEQUENCE +struct plmn_id_info_nr_v1710_s { + bool gnb_id_len_r17_present = false; + uint8_t gnb_id_len_r17 = 22; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // CellGlobalIdCDMA2000 ::= CHOICE struct cell_global_id_cdma2000_c { struct types_opts { @@ -4665,6 +5373,26 @@ private: void destroy_(); }; +// MeasResultSSB-Index-r15 ::= SEQUENCE +struct meas_result_ssb_idx_r15_s { + bool ext = false; + bool meas_result_ssb_idx_r15_present = false; + uint8_t ssb_idx_r15 = 0; + meas_result_nr_r15_s meas_result_ssb_idx_r15; + // ... + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// PLMN-IdentityInfoListNR-r15 ::= SEQUENCE (SIZE (1..12)) OF PLMN-IdentityInfoNR-r15 +using plmn_id_info_list_nr_r15_l = dyn_array<plmn_id_info_nr_r15_s>; + +// PLMN-IdentityInfoListNR-v1710 ::= SEQUENCE (SIZE (1..12)) OF PLMN-IdentityInfoNR-v1710 +using plmn_id_info_list_nr_v1710_l = dyn_array<plmn_id_info_nr_v1710_s>; + // AdditionalSI-Info-r9 ::= SEQUENCE struct add_si_info_r9_s { bool csg_member_status_r9_present = false; @@ -4694,6 +5422,31 @@ struct bler_result_r12_s { void to_json(json_writer& j) const; }; +// CGI-InfoNR-r15 ::= SEQUENCE +struct cgi_info_nr_r15_s { + struct no_sib1_r15_s_ { + uint8_t ssb_subcarrier_offset_r15 = 0; + uint16_t pdcch_cfg_sib1_r15 = 0; + }; + + // member variables + bool ext = false; + bool plmn_id_info_list_r15_present = false; + bool freq_band_list_r15_present = false; + bool no_sib1_r15_present = false; + plmn_id_info_list_nr_r15_l plmn_id_info_list_r15; + multi_freq_band_list_nr_r15_l freq_band_list_r15; + no_sib1_r15_s_ no_sib1_r15; + // ... + // group 0 + copy_ptr<plmn_id_info_list_nr_v1710_l> plmn_id_info_list_v1710; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // CellGlobalIdUTRA ::= SEQUENCE struct cell_global_id_utra_s { plmn_id_s plmn_id; @@ -4727,6 +5480,9 @@ struct meas_result_cdma2000_s { void to_json(json_writer& j) const; }; +// MeasResultSSB-IndexList-r15 ::= SEQUENCE (SIZE (1..32)) OF MeasResultSSB-Index-r15 +using meas_result_ssb_idx_list_r15_l = dyn_array<meas_result_ssb_idx_r15_s>; + // PLMN-IdentityList2 ::= SEQUENCE (SIZE (1..5)) OF PLMN-Identity using plmn_id_list2_l = dyn_array<plmn_id_s>; @@ -4753,6 +5509,23 @@ struct data_bler_mch_result_r12_s { void to_json(json_writer& j) const; }; +// MeasResultCellNR-r15 ::= SEQUENCE +struct meas_result_cell_nr_r15_s { + bool ext = false; + bool meas_result_rs_idx_list_r15_present = false; + uint16_t pci_r15 = 0; + meas_result_nr_r15_s meas_result_cell_r15; + meas_result_ssb_idx_list_r15_l meas_result_rs_idx_list_r15; + // ... + // group 0 + copy_ptr<cgi_info_nr_r15_s> cgi_info_r15; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // MeasResultEUTRA ::= SEQUENCE struct meas_result_eutra_s { struct cgi_info_s_ { @@ -4904,9 +5677,6 @@ struct meas_result_utra_s { void to_json(json_writer& j) const; }; -// PLMN-IdentityListNR-r15 ::= SEQUENCE (SIZE (1..12)) OF PLMN-Identity -using plmn_id_list_nr_r15_l = dyn_array<plmn_id_s>; - // DataBLER-MCH-ResultList-r12 ::= SEQUENCE (SIZE (1..15)) OF DataBLER-MCH-Result-r12 using data_bler_mch_result_list_r12_l = dyn_array<data_bler_mch_result_r12_s>; @@ -5093,6 +5863,9 @@ struct location_info_r10_s { void to_json(json_writer& j) const; }; +// MeasResultCellListNR-r15 ::= SEQUENCE (SIZE (1..8)) OF MeasResultCellNR-r15 +using meas_result_cell_list_nr_r15_l = dyn_array<meas_result_cell_nr_r15_s>; + // MeasResultGERAN ::= SEQUENCE struct meas_result_geran_s { struct cgi_info_s_ { @@ -5125,23 +5898,6 @@ using meas_result_list_eutra_l = dyn_array<meas_result_eutra_s>; // MeasResultListUTRA ::= SEQUENCE (SIZE (1..8)) OF MeasResultUTRA using meas_result_list_utra_l = dyn_array<meas_result_utra_s>; -// MeasResultNR-r15 ::= SEQUENCE -struct meas_result_nr_r15_s { - bool ext = false; - bool rsrp_result_r15_present = false; - bool rsrq_result_r15_present = false; - bool rs_sinr_result_r15_present = false; - uint8_t rsrp_result_r15 = 0; - uint8_t rsrq_result_r15 = 0; - uint8_t rs_sinr_result_r15 = 0; - // ... - - // sequence methods - SRSASN_CODE pack(bit_ref& bref) const; - SRSASN_CODE unpack(cbit_ref& bref); - void to_json(json_writer& j) const; -}; - // MeasResultsCDMA2000 ::= SEQUENCE struct meas_results_cdma2000_s { bool pre_regist_status_hrpd = false; @@ -5153,21 +5909,6 @@ struct meas_results_cdma2000_s { void to_json(json_writer& j) const; }; -// PLMN-IdentityInfoNR-r15 ::= SEQUENCE -struct plmn_id_info_nr_r15_s { - bool tac_r15_present = false; - bool ran_area_code_r15_present = false; - plmn_id_list_nr_r15_l plmn_id_list_r15; - fixed_bitstring<24> tac_r15; - uint16_t ran_area_code_r15 = 0; - fixed_bitstring<36> cell_id_r15; - - // sequence methods - SRSASN_CODE pack(bit_ref& bref) const; - SRSASN_CODE unpack(cbit_ref& bref); - void to_json(json_writer& j) const; -}; - // RSRQ-Type-r12 ::= SEQUENCE struct rsrq_type_r12_s { bool all_symbols_r12 = false; @@ -5294,6 +6035,20 @@ struct meas_result2_utra_r9_s { void to_json(json_writer& j) const; }; +// MeasResultFreqFailNR-r15 ::= SEQUENCE +struct meas_result_freq_fail_nr_r15_s { + bool ext = false; + bool meas_result_cell_list_r15_present = false; + uint32_t carrier_freq_r15 = 0; + meas_result_cell_list_nr_r15_l meas_result_cell_list_r15; + // ... + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // MeasResultListGERAN ::= SEQUENCE (SIZE (1..8)) OF MeasResultGERAN using meas_result_list_geran_l = dyn_array<meas_result_geran_s>; @@ -5321,52 +6076,15 @@ struct meas_result_mbsfn_r12_s { void to_json(json_writer& j) const; }; -// MeasResultSSB-Index-r15 ::= SEQUENCE -struct meas_result_ssb_idx_r15_s { - bool ext = false; - bool meas_result_ssb_idx_r15_present = false; - uint8_t ssb_idx_r15 = 0; - meas_result_nr_r15_s meas_result_ssb_idx_r15; - // ... - - // sequence methods - SRSASN_CODE pack(bit_ref& bref) const; - SRSASN_CODE unpack(cbit_ref& bref); - void to_json(json_writer& j) const; -}; - -// PLMN-IdentityInfoListNR-r15 ::= SEQUENCE (SIZE (1..12)) OF PLMN-IdentityInfoNR-r15 -using plmn_id_info_list_nr_r15_l = dyn_array<plmn_id_info_nr_r15_s>; - -// CGI-InfoNR-r15 ::= SEQUENCE -struct cgi_info_nr_r15_s { - struct no_sib1_r15_s_ { - uint8_t ssb_subcarrier_offset_r15 = 0; - uint16_t pdcch_cfg_sib1_r15 = 0; - }; - - // member variables - bool ext = false; - bool plmn_id_info_list_r15_present = false; - bool freq_band_list_r15_present = false; - bool no_sib1_r15_present = false; - plmn_id_info_list_nr_r15_l plmn_id_info_list_r15; - multi_freq_band_list_nr_r15_l freq_band_list_r15; - no_sib1_r15_s_ no_sib1_r15; - // ... - - // sequence methods - SRSASN_CODE pack(bit_ref& bref) const; - SRSASN_CODE unpack(cbit_ref& bref); - void to_json(json_writer& j) const; -}; - // LogMeasResultListBT-r15 ::= SEQUENCE (SIZE (1..32)) OF LogMeasResultBT-r15 using log_meas_result_list_bt_r15_l = dyn_array<log_meas_result_bt_r15_s>; // LogMeasResultListWLAN-r15 ::= SEQUENCE (SIZE (1..32)) OF LogMeasResultWLAN-r15 using log_meas_result_list_wlan_r15_l = dyn_array<log_meas_result_wlan_r15_s>; +// MeasResultFreqListNR-r16 ::= SEQUENCE (SIZE (1..7)) OF MeasResultFreqFailNR-r15 +using meas_result_freq_list_nr_r16_l = dyn_array<meas_result_freq_fail_nr_r15_s>; + // MeasResultList2CDMA2000-r9 ::= SEQUENCE (SIZE (1..8)) OF MeasResult2CDMA2000-r9 using meas_result_list2_cdma2000_r9_l = dyn_array<meas_result2_cdma2000_r9_s>; @@ -5388,9 +6106,6 @@ using meas_result_list2_utra_r9_l = dyn_array<meas_result2_utra_r9_s>; // MeasResultListMBSFN-r12 ::= SEQUENCE (SIZE (1..8)) OF MeasResultMBSFN-r12 using meas_result_list_mbsfn_r12_l = dyn_array<meas_result_mbsfn_r12_s>; -// MeasResultSSB-IndexList-r15 ::= SEQUENCE (SIZE (1..32)) OF MeasResultSSB-Index-r15 -using meas_result_ssb_idx_list_r15_l = dyn_array<meas_result_ssb_idx_r15_s>; - // LogMeasInfo-r10 ::= SEQUENCE struct log_meas_info_r10_s { struct meas_result_serv_cell_r10_s_ { @@ -5407,6 +6122,9 @@ struct log_meas_info_r10_s { meas_result_list2_geran_r10_l meas_result_list_geran_r10; meas_result_list2_cdma2000_r9_l meas_result_list_cdma2000_r10; }; + struct meas_result_list_nr_v1640_s_ { + uint32_t carrier_freq_nr_r16 = 0; + }; // member variables bool ext = false; @@ -5436,23 +6154,14 @@ struct log_meas_info_r10_s { copy_ptr<log_meas_result_list_wlan_r15_l> log_meas_result_list_wlan_r15; // group 5 bool any_cell_sel_detected_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; -}; - -// MeasResultCellNR-r15 ::= SEQUENCE -struct meas_result_cell_nr_r15_s { - bool ext = false; - bool meas_result_rs_idx_list_r15_present = false; - uint16_t pci_r15 = 0; - meas_result_nr_r15_s meas_result_cell_r15; - meas_result_ssb_idx_list_r15_l meas_result_rs_idx_list_r15; - // ... - // group 0 - copy_ptr<cgi_info_nr_r15_s> cgi_info_r15; + // group 6 + copy_ptr<meas_result_cell_list_nr_r15_l> meas_result_list_nr_r16; + // group 7 + copy_ptr<meas_result_list_nr_v1640_s_> meas_result_list_nr_v1640; + copy_ptr<meas_result_freq_list_nr_r16_l> meas_result_list_ext_nr_r16; + // group 8 + bool uncom_bar_pre_meas_result_r17_present = false; + dyn_octstring uncom_bar_pre_meas_result_r17; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -5463,9 +6172,6 @@ struct meas_result_cell_nr_r15_s { // LogMeasInfoList-r10 ::= SEQUENCE (SIZE (1..520)) OF LogMeasInfo-r10 using log_meas_info_list_r10_l = dyn_array<log_meas_info_r10_s>; -// MeasResultCellListNR-r15 ::= SEQUENCE (SIZE (1..8)) OF MeasResultCellNR-r15 -using meas_result_cell_list_nr_r15_l = dyn_array<meas_result_cell_nr_r15_s>; - // LogMeasReport-r10 ::= SEQUENCE struct log_meas_report_r10_s { bool ext = false; @@ -5680,6 +6386,19 @@ struct ul_pdcp_delay_result_r13_s { void to_json(json_writer& j) const; }; +// UL-PDCP-DelayValueResult-r16 ::= SEQUENCE +struct ul_pdcp_delay_value_result_r16_s { + bool ext = false; + uint8_t drb_id_r16 = 1; + uint16_t average_delay_r16 = 0; + // ... + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // MeasResultCSI-RS-List-r12 ::= SEQUENCE (SIZE (1..8)) OF MeasResultCSI-RS-r12 using meas_result_csi_rs_list_r12_l = dyn_array<meas_result_csi_rs_r12_s>; @@ -5697,6 +6416,19 @@ struct meas_result_for_ecid_r9_s { void to_json(json_writer& j) const; }; +// MeasResultForRSSI-NR-r16 ::= SEQUENCE +struct meas_result_for_rssi_nr_r16_s { + bool ext = false; + uint8_t rssi_result_nr_r16 = 0; + uint8_t ch_occupancy_nr_r16 = 0; + // ... + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // MeasResultForRSSI-r13 ::= SEQUENCE struct meas_result_for_rssi_r13_s { bool ext = false; @@ -5757,6 +6489,9 @@ using meas_result_serv_freq_list_nr_r15_l = dyn_array<meas_result_serv_freq_nr_r // UL-PDCP-DelayResultList-r13 ::= SEQUENCE (SIZE (1..6)) OF UL-PDCP-DelayResult-r13 using ul_pdcp_delay_result_list_r13_l = dyn_array<ul_pdcp_delay_result_r13_s>; +// UL-PDCP-DelayValueResultList-r16 ::= SEQUENCE (SIZE (1..11)) OF UL-PDCP-DelayValueResult-r16 +using ul_pdcp_delay_value_result_list_r16_l = dyn_array<ul_pdcp_delay_value_result_r16_s>; + // MeasResults ::= SEQUENCE struct meas_results_s { struct meas_result_pcell_s_ { @@ -5903,6 +6638,14 @@ struct meas_results_s { copy_ptr<log_meas_result_list_wlan_r15_l> log_meas_result_list_wlan_r15; copy_ptr<meas_result_sensing_r15_s> meas_result_sensing_r15; int16_t height_ue_r15 = -400; + // group 8 + copy_ptr<ul_pdcp_delay_value_result_list_r16_l> ul_pdcp_delay_value_result_list_r16; + copy_ptr<meas_result_for_rssi_nr_r16_s> meas_result_for_rssi_nr_r16; + // group 9 + bool uncom_bar_pre_meas_result_r17_present = false; + bool coarse_location_info_r17_present = false; + dyn_octstring uncom_bar_pre_meas_result_r17; + dyn_octstring coarse_location_info_r17; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; diff --git a/lib/include/srsran/asn1/rrc/paging.h b/lib/include/srsran/asn1/rrc/paging.h index 29ab78a73..101923f5a 100644 --- a/lib/include/srsran/asn1/rrc/paging.h +++ b/lib/include/srsran/asn1/rrc/paging.h @@ -12,7 +12,7 @@ /******************************************************************************* * - * 3GPP TS ASN1 RRC v15.11.0 (2020-09) + * 3GPP TS ASN1 RRC v17.4.0 (2023-03) * ******************************************************************************/ @@ -28,10 +28,64 @@ namespace rrc { * Struct Definitions ******************************************************************************/ +// PagingRecord-v1700 ::= SEQUENCE +struct paging_record_v1700_s { + bool paging_cause_r17_present = false; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// PagingRecord-v1610 ::= SEQUENCE +struct paging_record_v1610_s { + bool access_type_r16_present = false; + bool mt_edt_r16_present = false; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// PagingRecordList-v1700 ::= SEQUENCE (SIZE (1..16)) OF PagingRecord-v1700 +using paging_record_list_v1700_l = dyn_array<paging_record_v1700_s>; + +// Paging-v1700-IEs ::= SEQUENCE +struct paging_v1700_ies_s { + bool paging_record_list_v1700_present = false; + bool non_crit_ext_present = false; + paging_record_list_v1700_l paging_record_list_v1700; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// PagingRecordList-v1610 ::= SEQUENCE (SIZE (1..16)) OF PagingRecord-v1610 +using paging_record_list_v1610_l = dyn_array<paging_record_v1610_s>; + +// Paging-v1610-IEs ::= SEQUENCE +struct paging_v1610_ies_s { + bool paging_record_list_v1610_present = false; + bool uac_param_mod_r16_present = false; + bool non_crit_ext_present = false; + paging_record_list_v1610_l paging_record_list_v1610; + paging_v1700_ies_s non_crit_ext; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // Paging-v1530-IEs ::= SEQUENCE struct paging_v1530_ies_s { - bool access_type_present = false; - bool non_crit_ext_present = false; + bool access_type_present = false; + bool non_crit_ext_present = false; + paging_v1610_ies_s non_crit_ext; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -384,6 +438,17 @@ struct ue_paging_coverage_info_s { void to_json(json_writer& j) const; }; +// UERadioPagingInformation-v1610-IEs ::= SEQUENCE +struct ue_radio_paging_info_v1610_ies_s { + bool access_stratum_release_r16_present = false; + bool non_crit_ext_present = false; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // UERadioPagingInformation-v1310-IEs ::= SEQUENCE struct ue_radio_paging_info_v1310_ies_s { using supported_band_list_eutra_for_paging_r13_l_ = dyn_array<uint16_t>; @@ -392,6 +457,7 @@ struct ue_radio_paging_info_v1310_ies_s { bool supported_band_list_eutra_for_paging_r13_present = false; bool non_crit_ext_present = false; supported_band_list_eutra_for_paging_r13_l_ supported_band_list_eutra_for_paging_r13; + ue_radio_paging_info_v1610_ies_s non_crit_ext; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; diff --git a/lib/include/srsran/asn1/rrc/phy_ded.h b/lib/include/srsran/asn1/rrc/phy_ded.h index 40b273e9e..4f9f1fc50 100644 --- a/lib/include/srsran/asn1/rrc/phy_ded.h +++ b/lib/include/srsran/asn1/rrc/phy_ded.h @@ -12,14 +12,14 @@ /******************************************************************************* * - * 3GPP TS ASN1 RRC v15.11.0 (2020-09) + * 3GPP TS ASN1 RRC v17.4.0 (2023-03) * ******************************************************************************/ #ifndef SRSASN1_RRC_PHYCFG_H #define SRSASN1_RRC_PHYCFG_H -#include "common.h" +#include "rr_common.h" namespace asn1 { namespace rrc { @@ -28,6 +28,338 @@ namespace rrc { * Struct Definitions ******************************************************************************/ +// PeriodicityStartPos-r16 ::= CHOICE +struct periodicity_start_pos_r16_c { + struct types_opts { + enum options { + periodicity10ms, + periodicity20ms, + periodicity40ms, + periodicity80ms, + periodicity160ms, + spare3, + spare2, + spare1, + nulltype + } value; + typedef uint8_t number_type; + + const char* to_string() const; + uint8_t to_number() const; + }; + typedef enumerated<types_opts> types; + + // choice methods + periodicity_start_pos_r16_c() = default; + periodicity_start_pos_r16_c(const periodicity_start_pos_r16_c& other); + periodicity_start_pos_r16_c& operator=(const periodicity_start_pos_r16_c& other); + ~periodicity_start_pos_r16_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& periodicity20ms() + { + assert_choice_type(types::periodicity20ms, type_, "PeriodicityStartPos-r16"); + return c.get<uint8_t>(); + } + uint8_t& periodicity40ms() + { + assert_choice_type(types::periodicity40ms, type_, "PeriodicityStartPos-r16"); + return c.get<uint8_t>(); + } + uint8_t& periodicity80ms() + { + assert_choice_type(types::periodicity80ms, type_, "PeriodicityStartPos-r16"); + return c.get<uint8_t>(); + } + uint8_t& periodicity160ms() + { + assert_choice_type(types::periodicity160ms, type_, "PeriodicityStartPos-r16"); + return c.get<uint8_t>(); + } + const uint8_t& periodicity20ms() const + { + assert_choice_type(types::periodicity20ms, type_, "PeriodicityStartPos-r16"); + return c.get<uint8_t>(); + } + const uint8_t& periodicity40ms() const + { + assert_choice_type(types::periodicity40ms, type_, "PeriodicityStartPos-r16"); + return c.get<uint8_t>(); + } + const uint8_t& periodicity80ms() const + { + assert_choice_type(types::periodicity80ms, type_, "PeriodicityStartPos-r16"); + return c.get<uint8_t>(); + } + const uint8_t& periodicity160ms() const + { + assert_choice_type(types::periodicity160ms, type_, "PeriodicityStartPos-r16"); + return c.get<uint8_t>(); + } + void set_periodicity10ms(); + uint8_t& set_periodicity20ms(); + uint8_t& set_periodicity40ms(); + uint8_t& set_periodicity80ms(); + uint8_t& set_periodicity160ms(); + void set_spare3(); + void set_spare2(); + void set_spare1(); + +private: + types type_; + pod_choice_buffer_t c; + + void destroy_(); +}; + +// ResourceReservationConfigDL-r16 ::= SEQUENCE +struct res_reserv_cfg_dl_r16_s { + struct res_reserv_freq_r16_c_ { + struct types_opts { + enum options { + rbg_bitmap1dot4, + rbg_bitmap3, + rbg_bitmap5, + rbg_bitmap10, + rbg_bitmap15, + rbg_bitmap20, + nulltype + } value; + typedef float number_type; + + const char* to_string() const; + float to_number() const; + const char* to_number_string() const; + }; + typedef enumerated<types_opts> types; + + // choice methods + res_reserv_freq_r16_c_() = default; + res_reserv_freq_r16_c_(const res_reserv_freq_r16_c_& other); + res_reserv_freq_r16_c_& operator=(const res_reserv_freq_r16_c_& other); + ~res_reserv_freq_r16_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<6>& rbg_bitmap1dot4() + { + assert_choice_type(types::rbg_bitmap1dot4, type_, "resourceReservationFreq-r16"); + return c.get<fixed_bitstring<6> >(); + } + fixed_bitstring<8>& rbg_bitmap3() + { + assert_choice_type(types::rbg_bitmap3, type_, "resourceReservationFreq-r16"); + return c.get<fixed_bitstring<8> >(); + } + fixed_bitstring<13>& rbg_bitmap5() + { + assert_choice_type(types::rbg_bitmap5, type_, "resourceReservationFreq-r16"); + return c.get<fixed_bitstring<13> >(); + } + fixed_bitstring<17>& rbg_bitmap10() + { + assert_choice_type(types::rbg_bitmap10, type_, "resourceReservationFreq-r16"); + return c.get<fixed_bitstring<17> >(); + } + fixed_bitstring<19>& rbg_bitmap15() + { + assert_choice_type(types::rbg_bitmap15, type_, "resourceReservationFreq-r16"); + return c.get<fixed_bitstring<19> >(); + } + fixed_bitstring<25>& rbg_bitmap20() + { + assert_choice_type(types::rbg_bitmap20, type_, "resourceReservationFreq-r16"); + return c.get<fixed_bitstring<25> >(); + } + const fixed_bitstring<6>& rbg_bitmap1dot4() const + { + assert_choice_type(types::rbg_bitmap1dot4, type_, "resourceReservationFreq-r16"); + return c.get<fixed_bitstring<6> >(); + } + const fixed_bitstring<8>& rbg_bitmap3() const + { + assert_choice_type(types::rbg_bitmap3, type_, "resourceReservationFreq-r16"); + return c.get<fixed_bitstring<8> >(); + } + const fixed_bitstring<13>& rbg_bitmap5() const + { + assert_choice_type(types::rbg_bitmap5, type_, "resourceReservationFreq-r16"); + return c.get<fixed_bitstring<13> >(); + } + const fixed_bitstring<17>& rbg_bitmap10() const + { + assert_choice_type(types::rbg_bitmap10, type_, "resourceReservationFreq-r16"); + return c.get<fixed_bitstring<17> >(); + } + const fixed_bitstring<19>& rbg_bitmap15() const + { + assert_choice_type(types::rbg_bitmap15, type_, "resourceReservationFreq-r16"); + return c.get<fixed_bitstring<19> >(); + } + const fixed_bitstring<25>& rbg_bitmap20() const + { + assert_choice_type(types::rbg_bitmap20, type_, "resourceReservationFreq-r16"); + return c.get<fixed_bitstring<25> >(); + } + fixed_bitstring<6>& set_rbg_bitmap1dot4(); + fixed_bitstring<8>& set_rbg_bitmap3(); + fixed_bitstring<13>& set_rbg_bitmap5(); + fixed_bitstring<17>& set_rbg_bitmap10(); + fixed_bitstring<19>& set_rbg_bitmap15(); + fixed_bitstring<25>& set_rbg_bitmap20(); + + private: + types type_; + choice_buffer_t<fixed_bitstring<25> > c; + + void destroy_(); + }; + struct slot_bitmap_r16_c_ { + struct types_opts { + enum options { slot_pattern10ms, slot_pattern40ms, nulltype } value; + typedef uint8_t number_type; + + const char* to_string() const; + uint8_t to_number() const; + }; + typedef enumerated<types_opts> types; + + // choice methods + slot_bitmap_r16_c_() = default; + slot_bitmap_r16_c_(const slot_bitmap_r16_c_& other); + slot_bitmap_r16_c_& operator=(const slot_bitmap_r16_c_& other); + ~slot_bitmap_r16_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<20>& slot_pattern10ms() + { + assert_choice_type(types::slot_pattern10ms, type_, "slotBitmap-r16"); + return c.get<fixed_bitstring<20> >(); + } + fixed_bitstring<80>& slot_pattern40ms() + { + assert_choice_type(types::slot_pattern40ms, type_, "slotBitmap-r16"); + return c.get<fixed_bitstring<80> >(); + } + const fixed_bitstring<20>& slot_pattern10ms() const + { + assert_choice_type(types::slot_pattern10ms, type_, "slotBitmap-r16"); + return c.get<fixed_bitstring<20> >(); + } + const fixed_bitstring<80>& slot_pattern40ms() const + { + assert_choice_type(types::slot_pattern40ms, type_, "slotBitmap-r16"); + return c.get<fixed_bitstring<80> >(); + } + fixed_bitstring<20>& set_slot_pattern10ms(); + fixed_bitstring<80>& set_slot_pattern40ms(); + + private: + types type_; + choice_buffer_t<fixed_bitstring<80> > c; + + void destroy_(); + }; + + // member variables + bool ext = false; + bool res_reserv_freq_r16_present = false; + bool symbol_bitmap1_r16_present = false; + bool symbol_bitmap2_r16_present = false; + periodicity_start_pos_r16_c periodicity_start_pos_r16; + res_reserv_freq_r16_c_ res_reserv_freq_r16; + slot_bitmap_r16_c_ slot_bitmap_r16; + fixed_bitstring<7> symbol_bitmap1_r16; + fixed_bitstring<7> symbol_bitmap2_r16; + // ... + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// ResourceReservationConfigUL-r16 ::= SEQUENCE +struct res_reserv_cfg_ul_r16_s { + struct slot_bitmap_r16_c_ { + struct types_opts { + enum options { slot_pattern10ms, slot_pattern40ms, nulltype } value; + typedef uint8_t number_type; + + const char* to_string() const; + uint8_t to_number() const; + }; + typedef enumerated<types_opts> types; + + // choice methods + slot_bitmap_r16_c_() = default; + slot_bitmap_r16_c_(const slot_bitmap_r16_c_& other); + slot_bitmap_r16_c_& operator=(const slot_bitmap_r16_c_& other); + ~slot_bitmap_r16_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<20>& slot_pattern10ms() + { + assert_choice_type(types::slot_pattern10ms, type_, "slotBitmap-r16"); + return c.get<fixed_bitstring<20> >(); + } + fixed_bitstring<80>& slot_pattern40ms() + { + assert_choice_type(types::slot_pattern40ms, type_, "slotBitmap-r16"); + return c.get<fixed_bitstring<80> >(); + } + const fixed_bitstring<20>& slot_pattern10ms() const + { + assert_choice_type(types::slot_pattern10ms, type_, "slotBitmap-r16"); + return c.get<fixed_bitstring<20> >(); + } + const fixed_bitstring<80>& slot_pattern40ms() const + { + assert_choice_type(types::slot_pattern40ms, type_, "slotBitmap-r16"); + return c.get<fixed_bitstring<80> >(); + } + fixed_bitstring<20>& set_slot_pattern10ms(); + fixed_bitstring<80>& set_slot_pattern40ms(); + + private: + types type_; + choice_buffer_t<fixed_bitstring<80> > c; + + void destroy_(); + }; + + // member variables + bool ext = false; + bool slot_bitmap_r16_present = false; + bool symbol_bitmap1_r16_present = false; + bool symbol_bitmap2_r16_present = false; + periodicity_start_pos_r16_c periodicity_start_pos_r16; + slot_bitmap_r16_c_ slot_bitmap_r16; + fixed_bitstring<7> symbol_bitmap1_r16; + fixed_bitstring<7> symbol_bitmap2_r16; + // ... + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // NZP-FrequencyDensity-r14 ::= ENUMERATED struct nzp_freq_density_r14_opts { enum options { d1, d2, d3, nulltype } value; @@ -3493,6 +3825,47 @@ struct ant_info_ul_stti_r15_s { bool operator!=(const ant_info_ul_stti_r15_s& other) const { return not(*this == other); } }; +// CE-PDSCH-14HARQ-Config-r17 ::= SEQUENCE +struct ce_pdsch_minus14_harq_cfg_r17_s { + struct ce_harq_ack_delay_r17_opts { + enum options { alt_minus1, alt_minus2e, nulltype } value; + typedef int8_t number_type; + + const char* to_string() const; + int8_t to_number() const; + }; + typedef enumerated<ce_harq_ack_delay_r17_opts> ce_harq_ack_delay_r17_e_; + + // member variables + ce_harq_ack_delay_r17_e_ ce_harq_ack_delay_r17; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// CE-PDSCH-MultiTB-Config-r16 ::= SEQUENCE +struct ce_pdsch_multi_tb_cfg_r16_s { + bool interleaving_r16_present = false; + bool harq_ack_bundling_r16_present = false; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// CE-PUSCH-MultiTB-Config-r16 ::= SEQUENCE +struct ce_pusch_multi_tb_cfg_r16_s { + bool interleaving_r16_present = false; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // CQI-ReportConfig-r15 ::= CHOICE struct cqi_report_cfg_r15_c { struct setup_s_ { @@ -4197,6 +4570,71 @@ struct srs_cc_set_idx_r14_s { bool operator!=(const srs_cc_set_idx_r14_s& other) const { return not(*this == other); } }; +// SRS-ConfigAdd-r16 ::= SEQUENCE +struct srs_cfg_add_r16_s { + struct srs_rep_num_add_r16_opts { + enum options { n1, n2, n3, n4, n6, n7, n8, n9, n12, n13, nulltype } value; + typedef uint8_t number_type; + + const char* to_string() const; + uint8_t to_number() const; + }; + typedef enumerated<srs_rep_num_add_r16_opts> srs_rep_num_add_r16_e_; + struct srs_bw_add_r16_opts { + enum options { bw0, bw1, bw2, bw3, nulltype } value; + typedef uint8_t number_type; + + const char* to_string() const; + uint8_t to_number() const; + }; + typedef enumerated<srs_bw_add_r16_opts> srs_bw_add_r16_e_; + struct srs_hop_bw_add_r16_opts { + enum options { hbw0, hbw1, hbw2, hbw3, nulltype } value; + typedef uint8_t number_type; + + const char* to_string() const; + uint8_t to_number() const; + }; + typedef enumerated<srs_hop_bw_add_r16_opts> srs_hop_bw_add_r16_e_; + struct srs_cyclic_shift_add_r16_opts { + enum options { cs0, cs1, cs2, cs3, cs4, cs5, cs6, cs7, cs8, cs9, cs10, cs11, nulltype } value; + typedef uint8_t number_type; + + const char* to_string() const; + uint8_t to_number() const; + }; + typedef enumerated<srs_cyclic_shift_add_r16_opts> srs_cyclic_shift_add_r16_e_; + struct srs_tx_comb_num_add_r16_opts { + enum options { n2, n4, nulltype } value; + typedef uint8_t number_type; + + const char* to_string() const; + uint8_t to_number() const; + }; + typedef enumerated<srs_tx_comb_num_add_r16_opts> srs_tx_comb_num_add_r16_e_; + + // member variables + bool srs_guard_symbol_as_add_r16_present = false; + bool srs_guard_symbol_fh_add_r16_present = false; + srs_rep_num_add_r16_e_ srs_rep_num_add_r16; + srs_bw_add_r16_e_ srs_bw_add_r16; + srs_hop_bw_add_r16_e_ srs_hop_bw_add_r16; + uint8_t srs_freq_domain_pos_add_r16 = 0; + srs_ant_port_e srs_ant_port_add_r16; + srs_cyclic_shift_add_r16_e_ srs_cyclic_shift_add_r16; + srs_tx_comb_num_add_r16_e_ srs_tx_comb_num_add_r16; + uint8_t srs_tx_comb_add_r16 = 0; + uint8_t srs_start_pos_add_r16 = 1; + uint8_t srs_dur_add_r16 = 1; + + // 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 srs_cfg_add_r16_s& other) const; + bool operator!=(const srs_cfg_add_r16_s& other) const { return not(*this == other); } +}; + // SRS-ConfigAp-r10 ::= SEQUENCE struct srs_cfg_ap_r10_s { struct srs_bw_ap_r10_opts { @@ -5420,6 +5858,28 @@ struct pdsch_cfg_ded_v1530_s { bool operator!=(const pdsch_cfg_ded_v1530_s& other) const { return not(*this == other); } }; +// PDSCH-ConfigDedicated-v1610 ::= SEQUENCE +struct pdsch_cfg_ded_v1610_s { + setup_release_c<ce_pdsch_multi_tb_cfg_r16_s> ce_pdsch_multi_tb_cfg_r16; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// PDSCH-ConfigDedicated-v1700 ::= SEQUENCE +struct pdsch_cfg_ded_v1700_s { + bool ce_pdsch_minus14_harq_cfg_r17_present = false; + bool ce_pdsch_max_tbs_r17_present = false; + setup_release_c<ce_pdsch_minus14_harq_cfg_r17_s> ce_pdsch_minus14_harq_cfg_r17; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // PUCCH-ConfigDedicated ::= SEQUENCE struct pucch_cfg_ded_s { struct ack_nack_repeat_c_ { @@ -6542,6 +7002,16 @@ struct pusch_cfg_ded_v1530_s { void to_json(json_writer& j) const; }; +// PUSCH-ConfigDedicated-v1610 ::= SEQUENCE +struct pusch_cfg_ded_v1610_s { + setup_release_c<ce_pusch_multi_tb_cfg_r16_s> ce_pusch_multi_tb_cfg_r16; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // PUSCH-EnhancementsConfig-r14 ::= CHOICE struct pusch_enhance_cfg_r14_c { struct setup_s_ { @@ -6719,6 +7189,28 @@ private: setup_s_ c; }; +// ResourceReservationConfigDedicatedDL-r16 ::= SEQUENCE +struct res_reserv_cfg_ded_dl_r16_s { + bool res_reserv_ded_dl_r16_present = false; + res_reserv_cfg_dl_r16_s res_reserv_ded_dl_r16; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// ResourceReservationConfigDedicatedUL-r16 ::= SEQUENCE +struct res_reserv_cfg_ded_ul_r16_s { + bool res_reserv_ded_ul_r16_present = false; + res_reserv_cfg_ul_r16_s res_reserv_ded_ul_r16; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // SPUCCH-Config-v1550 ::= CHOICE struct spucch_cfg_v1550_c { struct setup_s_ { @@ -6997,6 +7489,59 @@ private: setup_s_ c; }; +// SoundingRS-UL-ConfigDedicatedAdd-r16 ::= SEQUENCE +struct srs_ul_cfg_ded_add_r16_s { + using srs_cfg_ap_dci_format4_r16_l_ = dyn_array<srs_cfg_add_r16_s>; + struct srs_activ_ap_r13_c_ { + struct setup_s_ { + srs_cfg_add_r16_s srs_cfg_ap_dci_format0_r16; + srs_cfg_add_r16_s srs_cfg_ap_dci_format1a2b2c_r16; + }; + using types = setup_e; + + // choice methods + srs_activ_ap_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; + bool operator==(const srs_activ_ap_r13_c_& other) const; + bool operator!=(const srs_activ_ap_r13_c_& other) const { return not(*this == other); } + // getters + setup_s_& setup() + { + assert_choice_type(types::setup, type_, "srs-ActivateAp-r13"); + return c; + } + const setup_s_& setup() const + { + assert_choice_type(types::setup, type_, "srs-ActivateAp-r13"); + return c; + } + void set_release(); + setup_s_& set_setup(); + + private: + types type_; + setup_s_ c; + }; + + // member variables + bool srs_cfg_ap_dci_format4_r16_present = false; + bool srs_activ_ap_r13_present = false; + uint8_t srs_cfg_idx_ap_r16 = 0; + srs_cfg_ap_dci_format4_r16_l_ srs_cfg_ap_dci_format4_r16; + srs_activ_ap_r13_c_ srs_activ_ap_r13; + + // 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 srs_ul_cfg_ded_add_r16_s& other) const; + bool operator!=(const srs_ul_cfg_ded_add_r16_s& other) const { return not(*this == other); } +}; + // SoundingRS-UL-ConfigDedicatedAperiodic-r10 ::= CHOICE struct srs_ul_cfg_ded_aperiodic_r10_c { struct setup_s_ { @@ -7323,6 +7868,39 @@ private: setup_s_ c; }; +// SoundingRS-VirtualCellID-r16 ::= SEQUENCE +struct srs_virtual_cell_id_r16_s { + uint16_t srs_virtual_cell_id_r16 = 0; + bool srs_virtual_cell_id_all_srs_r16 = false; + + // 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 srs_virtual_cell_id_r16_s& other) const; + bool operator!=(const srs_virtual_cell_id_r16_s& other) const { return not(*this == other); } +}; + +// UplinkPowerControlAddSRS-r16 ::= SEQUENCE +struct ul_pwr_ctrl_add_srs_r16_s { + bool tpc_idx_srs_add_r16_present = false; + bool start_bit_of_format3_b_srs_add_r16_present = false; + bool field_type_format3_b_srs_add_r16_present = false; + bool p0_ue_srs_add_r16_present = false; + tpc_idx_c tpc_idx_srs_add_r16; + uint8_t start_bit_of_format3_b_srs_add_r16 = 0; + uint8_t field_type_format3_b_srs_add_r16 = 1; + int8_t p0_ue_srs_add_r16 = -16; + bool accumulation_enabled_srs_add_r16 = false; + + // 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 ul_pwr_ctrl_add_srs_r16_s& other) const; + bool operator!=(const ul_pwr_ctrl_add_srs_r16_s& other) const { return not(*this == other); } +}; + // UplinkPowerControlDedicated ::= SEQUENCE struct ul_pwr_ctrl_ded_s { struct delta_mcs_enabled_opts { @@ -7444,6 +8022,19 @@ struct ul_pwr_ctrl_ded_v1530_s { bool operator!=(const ul_pwr_ctrl_ded_v1530_s& other) const { return not(*this == other); } }; +// WidebandPRG-r16 ::= SEQUENCE +struct wideband_prg_r16_s { + bool wideband_prg_sf_r16 = false; + bool wideband_prg_slot_subslot_r16 = false; + + // 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 wideband_prg_r16_s& other) const; + bool operator!=(const wideband_prg_r16_s& other) const { return not(*this == other); } +}; + // PhysicalConfigDedicated ::= SEQUENCE struct phys_cfg_ded_s { struct ant_info_c_ { @@ -7837,6 +8428,18 @@ struct phys_cfg_ded_s { types type_; setup_s_ c; }; + struct ntn_cfg_ded_r17_s_ { + bool pucch_tx_dur_r17_present = false; + bool pusch_tx_dur_r17_present = false; + setup_release_c<pucch_tx_dur_r17_s> pucch_tx_dur_r17; + setup_release_c<pusch_tx_dur_r17_s> pusch_tx_dur_r17; + }; + struct ul_segmented_precompensation_gap_r17_opts { + enum options { sym1, sl1, sf1, nulltype } value; + + const char* to_string() const; + }; + typedef enumerated<ul_segmented_precompensation_gap_r17_opts> ul_segmented_precompensation_gap_r17_e_; // member variables bool ext = false; @@ -7949,6 +8552,22 @@ struct phys_cfg_ded_s { copy_ptr<blind_pdsch_repeat_cfg_r15_c_> blind_pdsch_repeat_cfg_r15; // group 11 copy_ptr<spucch_cfg_v1550_c> spucch_cfg_v1550; + // group 12 + bool ce_csi_rs_feedback_r16_present = false; + copy_ptr<pdsch_cfg_ded_v1610_s> pdsch_cfg_ded_v1610; + copy_ptr<pusch_cfg_ded_v1610_s> pusch_cfg_ded_v1610; + copy_ptr<setup_release_c<res_reserv_cfg_ded_dl_r16_s> > res_reserv_cfg_ded_dl_r16; + copy_ptr<setup_release_c<res_reserv_cfg_ded_ul_r16_s> > res_reserv_cfg_ded_ul_r16; + copy_ptr<setup_release_c<srs_ul_cfg_ded_add_r16_s> > srs_ul_cfg_ded_add_r16; + copy_ptr<setup_release_c<ul_pwr_ctrl_add_srs_r16_s> > ul_pwr_ctrl_add_srs_r16; + copy_ptr<setup_release_c<srs_virtual_cell_id_r16_s> > srs_virtual_cell_id_r16; + copy_ptr<setup_release_c<wideband_prg_r16_s> > wideband_prg_r16; + // group 13 + copy_ptr<pdsch_cfg_ded_v1700_s> pdsch_cfg_ded_v1700; + copy_ptr<ntn_cfg_ded_r17_s_> ntn_cfg_ded_r17; + // group 14 + bool ul_segmented_precompensation_gap_r17_present = false; + ul_segmented_precompensation_gap_r17_e_ ul_segmented_precompensation_gap_r17; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; diff --git a/lib/include/srsran/asn1/rrc/rr_common.h b/lib/include/srsran/asn1/rrc/rr_common.h index c6b2b0f85..503f78408 100644 --- a/lib/include/srsran/asn1/rrc/rr_common.h +++ b/lib/include/srsran/asn1/rrc/rr_common.h @@ -12,7 +12,7 @@ /******************************************************************************* * - * 3GPP TS ASN1 RRC v15.11.0 (2020-09) + * 3GPP TS ASN1 RRC v17.4.0 (2023-03) * ******************************************************************************/ @@ -268,6 +268,32 @@ struct tdd_cfg_v1130_s { bool operator!=(const tdd_cfg_v1130_s& other) const { return not(*this == other); } }; +// GWUS-NumGroups-r16 ::= ENUMERATED +struct gwus_num_groups_r16_opts { + enum options { n1, n2, n4, n8, nulltype } value; + typedef uint8_t number_type; + + const char* to_string() const; + uint8_t to_number() const; +}; +typedef enumerated<gwus_num_groups_r16_opts> gwus_num_groups_r16_e; + +// GWUS-GroupsForServiceList-r16 ::= SEQUENCE (SIZE (1..3)) OF INTEGER (1..31) +using gwus_groups_for_service_list_r16_l = bounded_array<uint8_t, 3>; + +// GWUS-NumGroupsList-r16 ::= SEQUENCE (SIZE (1..4)) OF GWUS-NumGroups-r16 +using gwus_num_groups_list_r16_l = bounded_array<gwus_num_groups_r16_e, 4>; + +// GWUS-PagingProbThresh-r16 ::= ENUMERATED +struct gwus_paging_prob_thresh_r16_opts { + enum options { p20, p30, p40, p50, p60, p70, p80, p90, nulltype } value; + typedef uint8_t number_type; + + const char* to_string() const; + uint8_t to_number() const; +}; +typedef enumerated<gwus_paging_prob_thresh_r16_opts> gwus_paging_prob_thresh_r16_e; + // PRACH-ParametersCE-r13 ::= SEQUENCE struct prach_params_ce_r13_s { struct prach_start_sf_r13_opts { @@ -695,6 +721,173 @@ struct edt_prach_params_ce_r15_s { void to_json(json_writer& j) const; }; +// GWUS-GroupNarrowBandList-r16 ::= SEQUENCE (SIZE (1..16)) OF BOOLEAN +using gwus_group_narrow_band_list_r16_l = bounded_array<bool, 16>; + +// GWUS-ProbThreshList-r16 ::= SEQUENCE (SIZE (1..3)) OF GWUS-PagingProbThresh-r16 +using gwus_prob_thresh_list_r16_l = bounded_array<gwus_paging_prob_thresh_r16_e, 3>; + +// GWUS-ResourceConfig-r16 ::= SEQUENCE +struct gwus_res_cfg_r16_s { + struct res_map_pattern_r16_c_ { + struct res_location_with_wus_opts { + enum options { primary, secondary, primary3_fdm, nulltype } value; + typedef uint8_t number_type; + + const char* to_string() const; + uint8_t to_number() const; + }; + typedef enumerated<res_location_with_wus_opts> res_location_with_wus_e_; + struct res_location_without_wus_opts { + enum options { n0, n2, nulltype } value; + typedef uint8_t number_type; + + const char* to_string() const; + uint8_t to_number() const; + }; + typedef enumerated<res_location_without_wus_opts> res_location_without_wus_e_; + struct types_opts { + enum options { res_location_with_wus, res_location_without_wus, nulltype } value; + + const char* to_string() const; + }; + typedef enumerated<types_opts> types; + + // choice methods + res_map_pattern_r16_c_() = default; + res_map_pattern_r16_c_(const res_map_pattern_r16_c_& other); + res_map_pattern_r16_c_& operator=(const res_map_pattern_r16_c_& other); + ~res_map_pattern_r16_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 + res_location_with_wus_e_& res_location_with_wus() + { + assert_choice_type(types::res_location_with_wus, type_, "resourceMappingPattern-r16"); + return c.get<res_location_with_wus_e_>(); + } + res_location_without_wus_e_& res_location_without_wus() + { + assert_choice_type(types::res_location_without_wus, type_, "resourceMappingPattern-r16"); + return c.get<res_location_without_wus_e_>(); + } + const res_location_with_wus_e_& res_location_with_wus() const + { + assert_choice_type(types::res_location_with_wus, type_, "resourceMappingPattern-r16"); + return c.get<res_location_with_wus_e_>(); + } + const res_location_without_wus_e_& res_location_without_wus() const + { + assert_choice_type(types::res_location_without_wus, type_, "resourceMappingPattern-r16"); + return c.get<res_location_without_wus_e_>(); + } + res_location_with_wus_e_& set_res_location_with_wus(); + res_location_without_wus_e_& set_res_location_without_wus(); + + private: + types type_; + pod_choice_buffer_t c; + + void destroy_(); + }; + + // member variables + bool num_groups_list_r16_present = false; + bool groups_for_service_list_r16_present = false; + res_map_pattern_r16_c_ res_map_pattern_r16; + gwus_num_groups_list_r16_l num_groups_list_r16; + gwus_groups_for_service_list_r16_l groups_for_service_list_r16; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// GWUS-TimeParameters-r16 ::= SEQUENCE +struct gwus_time_params_r16_s { + struct max_dur_factor_r16_opts { + enum options { one32th, one16th, one8th, one4th, nulltype } value; + typedef uint8_t number_type; + + const char* to_string() const; + uint8_t to_number() const; + }; + typedef enumerated<max_dur_factor_r16_opts> max_dur_factor_r16_e_; + struct num_pos_r16_opts { + enum options { n1, n2, n4, spare1, nulltype } value; + typedef uint8_t number_type; + + const char* to_string() const; + uint8_t to_number() const; + }; + typedef enumerated<num_pos_r16_opts> num_pos_r16_e_; + struct time_offset_drx_r16_opts { + enum options { ms40, ms80, ms160, ms240, nulltype } value; + typedef uint8_t number_type; + + const char* to_string() const; + uint8_t to_number() const; + }; + typedef enumerated<time_offset_drx_r16_opts> time_offset_drx_r16_e_; + struct time_offset_e_drx_short_r16_opts { + enum options { ms40, ms80, ms160, ms240, nulltype } value; + typedef uint8_t number_type; + + const char* to_string() const; + uint8_t to_number() const; + }; + typedef enumerated<time_offset_e_drx_short_r16_opts> time_offset_e_drx_short_r16_e_; + struct time_offset_e_drx_long_r16_opts { + enum options { ms1000, ms2000, nulltype } value; + typedef uint16_t number_type; + + const char* to_string() const; + uint16_t to_number() const; + }; + typedef enumerated<time_offset_e_drx_long_r16_opts> time_offset_e_drx_long_r16_e_; + struct num_drx_cycles_relaxed_r16_opts { + enum options { n1, n2, n4, n8, nulltype } value; + typedef uint8_t number_type; + + const char* to_string() const; + uint8_t to_number() const; + }; + typedef enumerated<num_drx_cycles_relaxed_r16_opts> num_drx_cycles_relaxed_r16_e_; + struct pwr_boost_r16_opts { + enum options { db0, db1dot8, db3, db4dot8, nulltype } value; + typedef float number_type; + + const char* to_string() const; + float to_number() const; + const char* to_number_string() const; + }; + typedef enumerated<pwr_boost_r16_opts> pwr_boost_r16_e_; + + // member variables + bool ext = false; + bool num_pos_r16_present = false; + bool time_offset_e_drx_long_r16_present = false; + bool num_drx_cycles_relaxed_r16_present = false; + bool pwr_boost_r16_present = false; + max_dur_factor_r16_e_ max_dur_factor_r16; + num_pos_r16_e_ num_pos_r16; + time_offset_drx_r16_e_ time_offset_drx_r16; + time_offset_e_drx_short_r16_e_ time_offset_e_drx_short_r16; + time_offset_e_drx_long_r16_e_ time_offset_e_drx_long_r16; + num_drx_cycles_relaxed_r16_e_ num_drx_cycles_relaxed_r16; + pwr_boost_r16_e_ pwr_boost_r16; + // ... + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // N1PUCCH-AN-InfoList-r13 ::= SEQUENCE (SIZE (1..4)) OF INTEGER (0..2047) using n1_pucch_an_info_list_r13_l = bounded_array<uint16_t, 4>; @@ -824,6 +1017,27 @@ struct bcch_cfg_v1310_s { void to_json(json_writer& j) const; }; +// CRS-ChEstMPDCCH-ConfigCommon-r16 ::= SEQUENCE +struct crs_ch_est_mpdcch_cfg_common_r16_s { + struct pwr_ratio_r16_opts { + enum options { db_minus4dot77, db_minus3, db_minus1dot77, db0, db1, db2, db3, db4dot77, nulltype } value; + typedef float number_type; + + const char* to_string() const; + float to_number() const; + const char* to_number_string() const; + }; + typedef enumerated<pwr_ratio_r16_opts> pwr_ratio_r16_e_; + + // member variables + pwr_ratio_r16_e_ pwr_ratio_r16; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // FreqHoppingParameters-r13 ::= SEQUENCE struct freq_hop_params_r13_s { struct dummy_opts { @@ -1111,6 +1325,39 @@ struct freq_hop_params_r13_s { void to_json(json_writer& j) const; }; +// GWUS-Config-r16 ::= SEQUENCE +struct gwus_cfg_r16_s { + struct common_seq_r16_opts { + enum options { g0, g126, nulltype } value; + typedef uint8_t number_type; + + const char* to_string() const; + uint8_t to_number() const; + }; + typedef enumerated<common_seq_r16_opts> common_seq_r16_e_; + + // member variables + bool group_alternation_r16_present = false; + bool common_seq_r16_present = false; + bool time_params_r16_present = false; + bool res_cfg_e_drx_short_r16_present = false; + bool res_cfg_e_drx_long_r16_present = false; + bool prob_thresh_list_r16_present = false; + bool group_narrow_band_list_r16_present = false; + common_seq_r16_e_ common_seq_r16; + gwus_time_params_r16_s time_params_r16; + gwus_res_cfg_r16_s res_cfg_drx_r16; + gwus_res_cfg_r16_s res_cfg_e_drx_short_r16; + gwus_res_cfg_r16_s res_cfg_e_drx_long_r16; + gwus_prob_thresh_list_r16_l prob_thresh_list_r16; + gwus_group_narrow_band_list_r16_l group_narrow_band_list_r16; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // HighSpeedConfig-r14 ::= SEQUENCE struct high_speed_cfg_r14_s { bool high_speed_enhanced_meas_flag_r14_present = false; @@ -1130,6 +1377,17 @@ struct high_speed_cfg_v1530_s { void to_json(json_writer& j) const; }; +// HighSpeedConfig-v1610 ::= SEQUENCE +struct high_speed_cfg_v1610_s { + bool high_speed_enh_meas_flag2_r16_present = false; + bool high_speed_enh_demod_flag2_r16_present = false; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // PCCH-Config ::= SEQUENCE struct pcch_cfg_s { struct default_paging_cycle_opts { @@ -1201,6 +1459,14 @@ struct pcch_cfg_v1310_s { void to_json(json_writer& j) const; }; +// PCCH-Config-v1700 ::= SEQUENCE +struct pcch_cfg_v1700_s { + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // PDSCH-ConfigCommon ::= SEQUENCE struct pdsch_cfg_common_s { int8_t ref_sig_pwr = -60; @@ -1366,6 +1632,26 @@ struct prach_cfg_sib_v1530_s { void to_json(json_writer& j) const; }; +// PRACH-TxDuration-r17 ::= SEQUENCE +struct prach_tx_dur_r17_s { + struct prach_tx_dur_r17_opts { + enum options { n1, n2, n4, n8, n16, n32, n64, n128, nulltype } value; + typedef uint8_t number_type; + + const char* to_string() const; + uint8_t to_number() const; + }; + typedef enumerated<prach_tx_dur_r17_opts> prach_tx_dur_r17_e_; + + // member variables + prach_tx_dur_r17_e_ prach_tx_dur_r17; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // PUCCH-ConfigCommon ::= SEQUENCE struct pucch_cfg_common_s { struct delta_pucch_shift_opts { @@ -1465,6 +1751,26 @@ struct pucch_cfg_common_v1430_s { void to_json(json_writer& j) const; }; +// PUCCH-TxDuration-r17 ::= SEQUENCE +struct pucch_tx_dur_r17_s { + struct pucch_tx_dur_r17_opts { + enum options { sf2, sf4, sf8, sf16, sf32, sf64, sf128, nulltype } value; + typedef uint8_t number_type; + + const char* to_string() const; + uint8_t to_number() const; + }; + typedef enumerated<pucch_tx_dur_r17_opts> pucch_tx_dur_r17_e_; + + // member variables + pucch_tx_dur_r17_e_ pucch_tx_dur_r17; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // PUSCH-ConfigCommon ::= SEQUENCE struct pusch_cfg_common_s { struct pusch_cfg_basic_s_ { @@ -1537,6 +1843,26 @@ struct pusch_cfg_common_v1310_s { void to_json(json_writer& j) const; }; +// PUSCH-TxDuration-r17 ::= SEQUENCE +struct pusch_tx_dur_r17_s { + struct pusch_tx_dur_r17_opts { + enum options { n2, n4, n8, n16, n32, n64, n128, n256, nulltype } value; + typedef uint16_t number_type; + + const char* to_string() const; + uint16_t to_number() const; + }; + typedef enumerated<pusch_tx_dur_r17_opts> pusch_tx_dur_r17_e_; + + // member variables + pusch_tx_dur_r17_e_ pusch_tx_dur_r17; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // RACH-ConfigCommon ::= SEQUENCE struct rach_cfg_common_s { struct preamb_info_s_ { @@ -1857,6 +2183,17 @@ struct ul_pwr_ctrl_common_v1530_s { bool operator!=(const ul_pwr_ctrl_common_v1530_s& other) const { return not(*this == other); } }; +// UplinkPowerControlCommon-v1610 ::= SEQUENCE +struct ul_pwr_ctrl_common_v1610_s { + alpha_r12_e alpha_srs_add_r16; + int8_t p0_nominal_srs_add_r16 = -126; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // WUS-Config-r15 ::= SEQUENCE struct wus_cfg_r15_s { struct max_dur_factor_r15_opts { @@ -1945,8 +2282,50 @@ struct wus_cfg_v1560_s { void to_json(json_writer& j) const; }; +// WUS-Config-v1610 ::= SEQUENCE +struct wus_cfg_v1610_s { + struct num_drx_cycles_relaxed_r16_opts { + enum options { n1, n2, n4, n8, nulltype } value; + typedef uint8_t number_type; + + const char* to_string() const; + uint8_t to_number() const; + }; + typedef enumerated<num_drx_cycles_relaxed_r16_opts> num_drx_cycles_relaxed_r16_e_; + + // member variables + num_drx_cycles_relaxed_r16_e_ num_drx_cycles_relaxed_r16; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // RadioResourceConfigCommonSIB ::= SEQUENCE struct rr_cfg_common_sib_s { + struct ntn_cfg_common_r17_s_ { + struct t318_r17_opts { + enum options { ms0, ms50, ms100, ms200, ms500, ms1000, ms2000, ms4000, nulltype } value; + typedef uint16_t number_type; + + const char* to_string() const; + uint16_t to_number() const; + }; + typedef enumerated<t318_r17_opts> t318_r17_e_; + + // member variables + bool ta_report_r17_present = false; + bool prach_tx_dur_r17_present = false; + bool pucch_tx_dur_r17_present = false; + bool pusch_tx_dur_r17_present = false; + t318_r17_e_ t318_r17; + prach_tx_dur_r17_s prach_tx_dur_r17; + pucch_tx_dur_r17_s pucch_tx_dur_r17; + pusch_tx_dur_r17_s pusch_tx_dur_r17; + }; + + // member variables bool ext = false; rach_cfg_common_s rach_cfg_common; bcch_cfg_s bcch_cfg; @@ -1986,6 +2365,21 @@ struct rr_cfg_common_sib_s { copy_ptr<ul_pwr_ctrl_common_v1530_s> ul_pwr_ctrl_common_v1540; // group 7 copy_ptr<wus_cfg_v1560_s> wus_cfg_v1560; + // group 8 + bool rss_meas_cfg_r16_present = false; + bool rss_meas_non_ncl_r16_present = false; + bool punctured_subcarriers_dl_r16_present = false; + bool high_speed_inter_rat_nr_r16_present = false; + copy_ptr<wus_cfg_v1610_s> wus_cfg_v1610; + copy_ptr<high_speed_cfg_v1610_s> high_speed_cfg_v1610; + copy_ptr<crs_ch_est_mpdcch_cfg_common_r16_s> crs_ch_est_mpdcch_cfg_common_r16; + copy_ptr<gwus_cfg_r16_s> gwus_cfg_r16; + copy_ptr<ul_pwr_ctrl_common_v1610_s> ul_pwr_ctrl_common_v1610; + fixed_bitstring<2> punctured_subcarriers_dl_r16; + bool high_speed_inter_rat_nr_r16 = false; + // group 9 + copy_ptr<pcch_cfg_v1700_s> pcch_cfg_v1700; + copy_ptr<ntn_cfg_common_r17_s_> ntn_cfg_common_r17; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -2321,6 +2715,9 @@ struct rr_cfg_common_scell_r10_s { copy_ptr<mbsfn_sf_cfg_list_v1430_l> mbsfn_sf_cfg_list_v1430; // group 6 copy_ptr<ul_pwr_ctrl_common_v1530_s> ul_pwr_ctrl_common_scell_v1530; + // group 7 + bool high_speed_enh_meas_flag_scell_r16_present = false; + bool high_speed_enh_meas_flag_scell_r16 = false; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -2459,6 +2856,28 @@ struct prach_cfg_v1310_s { // RadioResourceConfigCommon ::= SEQUENCE struct rr_cfg_common_s { + struct ntn_cfg_common_r17_s_ { + struct t318_r17_opts { + enum options { ms0, ms50, ms100, ms200, ms500, ms1000, ms2000, ms4000, ms6000, nulltype } value; + typedef uint16_t number_type; + + const char* to_string() const; + uint16_t to_number() const; + }; + typedef enumerated<t318_r17_opts> t318_r17_e_; + + // member variables + bool ta_report_r17_present = false; + bool prach_tx_dur_r17_present = false; + bool pucch_tx_dur_r17_present = false; + bool pusch_tx_dur_r17_present = false; + t318_r17_e_ t318_r17; + prach_tx_dur_r17_s prach_tx_dur_r17; + pucch_tx_dur_r17_s pucch_tx_dur_r17; + pusch_tx_dur_r17_s pusch_tx_dur_r17; + }; + + // member variables bool ext = false; bool rach_cfg_common_present = false; bool pdsch_cfg_common_present = false; @@ -2505,6 +2924,13 @@ struct rr_cfg_common_s { // group 6 copy_ptr<ul_pwr_ctrl_common_v1530_s> ul_pwr_ctrl_common_v1530; copy_ptr<high_speed_cfg_v1530_s> high_speed_cfg_v1530; + // group 7 + bool high_speed_inter_rat_nr_r16_present = false; + copy_ptr<high_speed_cfg_v1610_s> high_speed_cfg_v1610; + copy_ptr<ul_pwr_ctrl_common_v1610_s> ul_pwr_ctrl_common_v1610; + bool high_speed_inter_rat_nr_r16 = false; + // group 8 + copy_ptr<ntn_cfg_common_r17_s_> ntn_cfg_common_r17; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; diff --git a/lib/include/srsran/asn1/rrc/rr_ded.h b/lib/include/srsran/asn1/rrc/rr_ded.h index 7664ae2cf..ab208a434 100644 --- a/lib/include/srsran/asn1/rrc/rr_ded.h +++ b/lib/include/srsran/asn1/rrc/rr_ded.h @@ -12,7 +12,7 @@ /******************************************************************************* * - * 3GPP TS ASN1 RRC v15.11.0 (2020-09) + * 3GPP TS ASN1 RRC v17.4.0 (2023-03) * ******************************************************************************/ @@ -446,6 +446,56 @@ struct dl_um_rlc_s { bool operator!=(const dl_um_rlc_s& other) const { return not(*this == other); } }; +// DiscardTimerExt-r17 ::= ENUMERATED +struct discard_timer_ext_r17_opts { + enum options { ms2000, spare, nulltype } value; + typedef uint16_t number_type; + + const char* to_string() const; + uint16_t to_number() const; +}; +typedef enumerated<discard_timer_ext_r17_opts> discard_timer_ext_r17_e; + +// EthernetHeaderCompression-r16 ::= SEQUENCE +struct ethernet_hdr_compress_r16_s { + struct ehc_common_r16_s_ { + struct ehc_cid_len_r16_opts { + enum options { bits7, bits15, nulltype } value; + typedef uint8_t number_type; + + const char* to_string() const; + uint8_t to_number() const; + }; + typedef enumerated<ehc_cid_len_r16_opts> ehc_cid_len_r16_e_; + + // member variables + ehc_cid_len_r16_e_ ehc_cid_len_r16; + }; + struct ehc_dl_r16_s_ { + bool drb_continue_ehc_dl_r16_present = false; + }; + struct ehc_ul_r16_s_ { + bool drb_continue_ehc_ul_r16_present = false; + uint16_t max_cid_ehc_ul_r16 = 1; + }; + + // member variables + bool ext = false; + bool ehc_dl_r16_present = false; + bool ehc_ul_r16_present = false; + ehc_common_r16_s_ ehc_common_r16; + ehc_dl_r16_s_ ehc_dl_r16; + ehc_ul_r16_s_ ehc_ul_r16; + // ... + + // 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 ethernet_hdr_compress_r16_s& other) const; + bool operator!=(const ethernet_hdr_compress_r16_s& other) const { return not(*this == other); } +}; + // LogicalChannelConfig ::= SEQUENCE struct lc_ch_cfg_s { struct ul_specific_params_s_ { @@ -600,6 +650,14 @@ struct lc_ch_cfg_s { types type_; uint8_t c; }; + struct bit_rate_multiplier_r16_opts { + enum options { x40, x70, x100, x200, nulltype } value; + typedef uint8_t number_type; + + const char* to_string() const; + uint8_t to_number() const; + }; + typedef enumerated<bit_rate_multiplier_r16_opts> bit_rate_multiplier_r16_e_; // member variables bool ext = false; @@ -622,6 +680,9 @@ struct lc_ch_cfg_s { copy_ptr<lc_ch_sr_restrict_r15_c_> lc_ch_sr_restrict_r15; copy_ptr<ch_access_prio_r15_c_> ch_access_prio_r15; fixed_bitstring<32> lch_cell_restrict_r15; + // group 4 + bool bit_rate_multiplier_r16_present = false; + bit_rate_multiplier_r16_e_ bit_rate_multiplier_r16; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -756,6 +817,16 @@ struct rlc_cfg_r15_s { bool operator!=(const rlc_cfg_r15_s& other) const { return not(*this == other); } }; +// T-ReorderingExt-r17 ::= ENUMERATED +struct t_reordering_ext_r17_opts { + enum options { ms2200, ms3200, nulltype } value; + typedef uint16_t number_type; + + const char* to_string() const; + uint16_t to_number() const; +}; +typedef enumerated<t_reordering_ext_r17_opts> t_reordering_ext_r17_e; + // UL-AM-RLC ::= SEQUENCE struct ul_am_rlc_s { struct max_retx_thres_opts { @@ -1389,6 +1460,10 @@ struct pdcp_cfg_s { // group 5 copy_ptr<ul_data_compress_r15_s_> ul_data_compress_r15; copy_ptr<pdcp_dupl_cfg_r15_c_> pdcp_dupl_cfg_r15; + // group 6 + copy_ptr<setup_release_c<ethernet_hdr_compress_r16_s> > ethernet_hdr_compress_r16; + // group 7 + copy_ptr<setup_release_c<discard_timer_ext_r17_e> > discard_timer_ext_r17; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -1672,6 +1747,18 @@ private: types type_; }; +// RLC-Config-v1700 ::= SEQUENCE +struct rlc_cfg_v1700_s { + setup_release_c<t_reordering_ext_r17_e> t_reordering_ext_r17; + + // 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 rlc_cfg_v1700_s& other) const; + bool operator!=(const rlc_cfg_v1700_s& other) const { return not(*this == other); } +}; + // SPS-ConfigSL-r14 ::= SEQUENCE struct sps_cfg_sl_r14_s { struct semi_persist_sched_interv_sl_r14_opts { @@ -2150,6 +2237,10 @@ struct drb_to_add_mod_s { copy_ptr<rlc_cfg_v1530_c> rlc_cfg_v1530; copy_ptr<rlc_bearer_cfg_r15_c> rlc_bearer_cfg_secondary_r15; uint8_t lc_ch_id_r15 = 32; + // group 5 + bool daps_ho_r16_present = false; + // group 6 + copy_ptr<rlc_cfg_v1700_s> rlc_cfg_v1700; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -2736,6 +2827,35 @@ using neigh_cells_to_add_mod_list_r12_l = dyn_array<neigh_cells_info_r12_s>; // NeighCellsToReleaseList-r12 ::= SEQUENCE (SIZE (1..8)) OF INTEGER (0..503) using neigh_cells_to_release_list_r12_l = bounded_array<uint16_t, 8>; +// OffsetThresholdTA-r17 ::= ENUMERATED +struct offset_thres_ta_r17_opts { + enum options { + ms0dot5, + ms1, + ms2, + ms3, + ms4, + ms5, + ms6, + ms7, + ms8, + ms9, + ms10, + ms11, + ms12, + ms13, + ms14, + ms15, + nulltype + } value; + typedef float number_type; + + const char* to_string() const; + float to_number() const; + const char* to_number_string() const; +}; +typedef enumerated<offset_thres_ta_r17_opts> offset_thres_ta_r17_e; + // PeriodicBSR-Timer-r12 ::= ENUMERATED struct periodic_bsr_timer_r12_opts { enum options { @@ -3007,6 +3127,16 @@ using sps_cfg_ul_to_release_list_r14_l = bounded_array<uint8_t, 8>; // SPS-ConfigUL-ToReleaseList-r15 ::= SEQUENCE (SIZE (1..6)) OF INTEGER (1..6) using sps_cfg_ul_to_release_list_r15_l = bounded_array<uint8_t, 6>; +// SR-ProhibitTimerOffset-r17 ::= ENUMERATED +struct sr_prohibit_timer_offset_r17_opts { + enum options { ms90, ms180, ms270, ms360, ms450, ms540, ms1080, spare, nulltype } value; + typedef uint16_t number_type; + + const char* to_string() const; + uint16_t to_number() const; +}; +typedef enumerated<sr_prohibit_timer_offset_r17_opts> sr_prohibit_timer_offset_r17_e; + // SRB-ToAddMod ::= SEQUENCE struct srb_to_add_mod_s { struct rlc_cfg_c_ { @@ -3096,6 +3226,8 @@ struct srb_to_add_mod_s { uint8_t srb_id_v1530 = 4; // group 1 copy_ptr<rlc_cfg_v1510_s> rlc_cfg_v1560; + // group 2 + copy_ptr<rlc_cfg_v1700_s> rlc_cfg_v1700; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -3111,6 +3243,36 @@ using stag_to_add_mod_list_r11_l = dyn_array<stag_to_add_mod_r11_s>; // STAG-ToReleaseList-r11 ::= SEQUENCE (SIZE (1..3)) OF INTEGER (1..3) using stag_to_release_list_r11_l = bounded_array<uint8_t, 3>; +// CRS-ChEstMPDCCH-ConfigDedicated-r16 ::= SEQUENCE +struct crs_ch_est_mpdcch_cfg_ded_r16_s { + struct pwr_ratio_r16_opts { + enum options { db_minus4dot77, db_minus3, db_minus1dot77, db0, db1, db2, db3, db4dot77, nulltype } value; + typedef float number_type; + + const char* to_string() const; + float to_number() const; + const char* to_number_string() const; + }; + typedef enumerated<pwr_ratio_r16_opts> pwr_ratio_r16_e_; + struct localized_map_type_r16_opts { + enum options { predefined, csi_based, reciprocity_based, nulltype } value; + + const char* to_string() const; + }; + typedef enumerated<localized_map_type_r16_opts> localized_map_type_r16_e_; + + // member variables + bool pwr_ratio_r16_present = false; + bool localized_map_type_r16_present = false; + pwr_ratio_r16_e_ pwr_ratio_r16; + localized_map_type_r16_e_ localized_map_type_r16; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // DRB-ToAddModList ::= SEQUENCE (SIZE (1..11)) OF DRB-ToAddMod using drb_to_add_mod_list_l = dyn_array<drb_to_add_mod_s>; @@ -3651,6 +3813,11 @@ struct mac_main_cfg_s { copy_ptr<short_tti_and_spt_r15_c_> short_tti_and_spt_r15; bool mpdcch_ul_harq_ack_feedback_cfg_r15 = false; copy_ptr<dormant_state_timers_r15_c_> dormant_state_timers_r15; + // group 9 + bool ce_etws_cmas_rx_in_conn_r16_present = false; + // group 10 + copy_ptr<setup_release_c<offset_thres_ta_r17_e> > offset_thres_ta_r17; + copy_ptr<setup_release_c<sr_prohibit_timer_offset_r17_e> > sr_prohibit_timer_offset_r17; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -3964,6 +4131,51 @@ private: setup_s_ c; }; +// RLF-TimersAndConstantsMCG-Failure-r16 ::= CHOICE +struct rlf_timers_and_consts_mcg_fail_r16_c { + struct setup_s_ { + struct t316_r16_opts { + enum options { ms50, ms100, ms200, ms300, ms400, ms500, ms600, ms1000, ms1500, ms2000, nulltype } value; + typedef uint16_t number_type; + + const char* to_string() const; + uint16_t to_number() const; + }; + typedef enumerated<t316_r16_opts> t316_r16_e_; + + // member variables + bool ext = false; + t316_r16_e_ t316_r16; + // ... + }; + using types = setup_e; + + // choice methods + rlf_timers_and_consts_mcg_fail_r16_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_, "RLF-TimersAndConstantsMCG-Failure-r16"); + return c; + } + const setup_s_& setup() const + { + assert_choice_type(types::setup, type_, "RLF-TimersAndConstantsMCG-Failure-r16"); + return c; + } + void set_release(); + setup_s_& set_setup(); + +private: + types type_; + setup_s_ c; +}; + // SPS-Config ::= SEQUENCE struct sps_cfg_s { bool semi_persist_sched_c_rnti_present = false; @@ -4186,6 +4398,11 @@ struct rr_cfg_ded_s { copy_ptr<dummy_l_> dummy; // group 7 copy_ptr<sps_cfg_v1540_s> sps_cfg_v1540; + // group 8 + bool new_ue_id_r16_present = false; + copy_ptr<rlf_timers_and_consts_mcg_fail_r16_c> rlf_timers_and_consts_mcg_fail_r16; + copy_ptr<setup_release_c<crs_ch_est_mpdcch_cfg_ded_r16_s> > crs_ch_est_mpdcch_cfg_ded_r16; + fixed_bitstring<16> new_ue_id_r16; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -4704,6 +4921,20 @@ struct cqi_report_cfg_scell_r15_s { bool operator!=(const cqi_report_cfg_scell_r15_s& other) const { return not(*this == other); } }; +// CQI-ReportPeriodicSCell-v1730 ::= SEQUENCE +struct cqi_report_periodic_scell_v1730_s { + bool ri_cfg_idx2_dormant_r17_present = false; + uint16_t cqi_pmi_cfg_idx2_dormant_r17 = 0; + uint16_t ri_cfg_idx2_dormant_r17 = 0; + + // 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 cqi_report_periodic_scell_v1730_s& other) const; + bool operator!=(const cqi_report_periodic_scell_v1730_s& other) const { return not(*this == other); } +}; + // CQI-ShortConfigSCell-r15 ::= CHOICE struct cqi_short_cfg_scell_r15_c { struct setup_s_ { @@ -5784,6 +6015,11 @@ struct phys_cfg_ded_scell_r10_s { copy_ptr<blind_pdsch_repeat_cfg_r15_c_> blind_pdsch_repeat_cfg_r15; // group 8 copy_ptr<spucch_cfg_v1550_c> spucch_cfg_v1550; + // group 9 + copy_ptr<setup_release_c<srs_ul_cfg_ded_add_r16_s> > srs_ul_cfg_ded_add_r16; + copy_ptr<setup_release_c<ul_pwr_ctrl_add_srs_r16_s> > ul_pwr_ctrl_add_srs_r16; + copy_ptr<setup_release_c<srs_virtual_cell_id_r16_s> > srs_virtual_cell_id_r16; + copy_ptr<setup_release_c<wideband_prg_r16_s> > wideband_prg_r16; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -5841,6 +6077,18 @@ struct phys_cfg_ded_scell_v1370_s { bool operator!=(const phys_cfg_ded_scell_v1370_s& other) const { return not(*this == other); } }; +// PhysicalConfigDedicatedSCell-v1730 ::= SEQUENCE +struct phys_cfg_ded_scell_v1730_s { + setup_release_c<cqi_report_periodic_scell_v1730_s> cqi_report_periodic_scell_v1730; + + // 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 phys_cfg_ded_scell_v1730_s& other) const; + bool operator!=(const phys_cfg_ded_scell_v1730_s& other) const { return not(*this == other); } +}; + // AntennaInfoDedicated-v10i0 ::= SEQUENCE struct ant_info_ded_v10i0_s { struct max_layers_mimo_r10_opts { @@ -5883,6 +6131,8 @@ struct rr_cfg_ded_scell_r10_s { bool crs_intf_mitig_enabled_r15 = false; copy_ptr<neigh_cells_crs_info_r15_c> neigh_cells_crs_info_r15; copy_ptr<sps_cfg_v1530_s> sps_cfg_v1530; + // group 5 + copy_ptr<phys_cfg_ded_scell_v1730_s> phys_cfg_ded_scell_v1730; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; diff --git a/lib/include/srsran/asn1/rrc/security.h b/lib/include/srsran/asn1/rrc/security.h index e57369d39..b4aed5dd2 100644 --- a/lib/include/srsran/asn1/rrc/security.h +++ b/lib/include/srsran/asn1/rrc/security.h @@ -12,7 +12,7 @@ /******************************************************************************* * - * 3GPP TS ASN1 RRC v15.11.0 (2020-09) + * 3GPP TS ASN1 RRC v17.4.0 (2023-03) * ******************************************************************************/ @@ -52,7 +52,7 @@ struct security_algorithm_cfg_s { // SecurityConfigHO-v1530 ::= SEQUENCE struct security_cfg_ho_v1530_s { struct handov_type_v1530_c_ { - struct intra5_gc_r15_s_ { + struct intra5_gc_s_ { bool security_algorithm_cfg_r15_present = false; bool nas_container_r15_present = false; security_algorithm_cfg_s security_algorithm_cfg_r15; @@ -60,16 +60,16 @@ struct security_cfg_ho_v1530_s { uint8_t next_hop_chaining_count_r15 = 0; dyn_octstring nas_container_r15; }; - struct fivegc_to_epc_r15_s_ { + struct fivegc_to_epc_s_ { security_algorithm_cfg_s security_algorithm_cfg_r15; uint8_t next_hop_chaining_count_r15 = 0; }; - struct epc_to5_gc_r15_s_ { + struct epc_to5_gc_s_ { security_algorithm_cfg_s security_algorithm_cfg_r15; dyn_octstring nas_container_r15; }; struct types_opts { - enum options { intra5_gc_r15, fivegc_to_epc_r15, epc_to5_gc_r15, nulltype } value; + enum options { intra5_gc, fivegc_to_epc, epc_to5_gc, nulltype } value; const char* to_string() const; }; @@ -86,43 +86,43 @@ struct security_cfg_ho_v1530_s { SRSASN_CODE unpack(cbit_ref& bref); void to_json(json_writer& j) const; // getters - intra5_gc_r15_s_& intra5_gc_r15() + intra5_gc_s_& intra5_gc() { - assert_choice_type(types::intra5_gc_r15, type_, "handoverType-v1530"); - return c.get<intra5_gc_r15_s_>(); + assert_choice_type(types::intra5_gc, type_, "handoverType-v1530"); + return c.get<intra5_gc_s_>(); } - fivegc_to_epc_r15_s_& fivegc_to_epc_r15() + fivegc_to_epc_s_& fivegc_to_epc() { - assert_choice_type(types::fivegc_to_epc_r15, type_, "handoverType-v1530"); - return c.get<fivegc_to_epc_r15_s_>(); + assert_choice_type(types::fivegc_to_epc, type_, "handoverType-v1530"); + return c.get<fivegc_to_epc_s_>(); } - epc_to5_gc_r15_s_& epc_to5_gc_r15() + epc_to5_gc_s_& epc_to5_gc() { - assert_choice_type(types::epc_to5_gc_r15, type_, "handoverType-v1530"); - return c.get<epc_to5_gc_r15_s_>(); + assert_choice_type(types::epc_to5_gc, type_, "handoverType-v1530"); + return c.get<epc_to5_gc_s_>(); } - const intra5_gc_r15_s_& intra5_gc_r15() const + const intra5_gc_s_& intra5_gc() const { - assert_choice_type(types::intra5_gc_r15, type_, "handoverType-v1530"); - return c.get<intra5_gc_r15_s_>(); + assert_choice_type(types::intra5_gc, type_, "handoverType-v1530"); + return c.get<intra5_gc_s_>(); } - const fivegc_to_epc_r15_s_& fivegc_to_epc_r15() const + const fivegc_to_epc_s_& fivegc_to_epc() const { - assert_choice_type(types::fivegc_to_epc_r15, type_, "handoverType-v1530"); - return c.get<fivegc_to_epc_r15_s_>(); + assert_choice_type(types::fivegc_to_epc, type_, "handoverType-v1530"); + return c.get<fivegc_to_epc_s_>(); } - const epc_to5_gc_r15_s_& epc_to5_gc_r15() const + const epc_to5_gc_s_& epc_to5_gc() const { - assert_choice_type(types::epc_to5_gc_r15, type_, "handoverType-v1530"); - return c.get<epc_to5_gc_r15_s_>(); + assert_choice_type(types::epc_to5_gc, type_, "handoverType-v1530"); + return c.get<epc_to5_gc_s_>(); } - intra5_gc_r15_s_& set_intra5_gc_r15(); - fivegc_to_epc_r15_s_& set_fivegc_to_epc_r15(); - epc_to5_gc_r15_s_& set_epc_to5_gc_r15(); + intra5_gc_s_& set_intra5_gc(); + fivegc_to_epc_s_& set_fivegc_to_epc(); + epc_to5_gc_s_& set_epc_to5_gc(); private: - types type_; - choice_buffer_t<epc_to5_gc_r15_s_, fivegc_to_epc_r15_s_, intra5_gc_r15_s_> c; + types type_; + choice_buffer_t<epc_to5_gc_s_, fivegc_to_epc_s_, intra5_gc_s_> c; void destroy_(); }; diff --git a/lib/include/srsran/asn1/rrc/si.h b/lib/include/srsran/asn1/rrc/si.h index 97aef2c8a..147a59d09 100644 --- a/lib/include/srsran/asn1/rrc/si.h +++ b/lib/include/srsran/asn1/rrc/si.h @@ -12,7 +12,7 @@ /******************************************************************************* * - * 3GPP TS ASN1 RRC v15.11.0 (2020-09) + * 3GPP TS ASN1 RRC v17.4.0 (2023-03) * ******************************************************************************/ @@ -38,14 +38,63 @@ struct mib_s { uint8_t to_number() const; }; typedef enumerated<dl_bw_opts> dl_bw_e_; + struct part_earfcn_minus17_c_ { + struct types_opts { + enum options { spare, earfcn_lsb, nulltype } value; + + const char* to_string() const; + }; + typedef enumerated<types_opts> types; + + // choice methods + part_earfcn_minus17_c_() = default; + part_earfcn_minus17_c_(const part_earfcn_minus17_c_& other); + part_earfcn_minus17_c_& operator=(const part_earfcn_minus17_c_& other); + ~part_earfcn_minus17_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<2>& spare() + { + assert_choice_type(types::spare, type_, "partEARFCN-17"); + return c.get<fixed_bitstring<2> >(); + } + fixed_bitstring<2>& earfcn_lsb() + { + assert_choice_type(types::earfcn_lsb, type_, "partEARFCN-17"); + return c.get<fixed_bitstring<2> >(); + } + const fixed_bitstring<2>& spare() const + { + assert_choice_type(types::spare, type_, "partEARFCN-17"); + return c.get<fixed_bitstring<2> >(); + } + const fixed_bitstring<2>& earfcn_lsb() const + { + assert_choice_type(types::earfcn_lsb, type_, "partEARFCN-17"); + return c.get<fixed_bitstring<2> >(); + } + fixed_bitstring<2>& set_spare(); + fixed_bitstring<2>& set_earfcn_lsb(); + + private: + types type_; + choice_buffer_t<fixed_bitstring<2> > c; + + void destroy_(); + }; // member variables - dl_bw_e_ dl_bw; - phich_cfg_s phich_cfg; - fixed_bitstring<8> sys_frame_num; - uint8_t sched_info_sib1_br_r13 = 0; - bool sys_info_unchanged_br_r15 = false; - fixed_bitstring<4> spare; + dl_bw_e_ dl_bw; + phich_cfg_s phich_cfg; + fixed_bitstring<8> sys_frame_num; + uint8_t sched_info_sib1_br_r13 = 0; + bool sys_info_unchanged_br_r15 = false; + part_earfcn_minus17_c_ part_earfcn_minus17; + fixed_bitstring<1> spare; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -53,14 +102,17 @@ struct mib_s { void to_json(json_writer& j) const; }; +// TrackingAreaList-r17 ::= SEQUENCE (SIZE (1..12)) OF BIT STRING (SIZE (16)) +using tracking_area_list_r17_l = bounded_array<fixed_bitstring<16>, 12>; + // GNSS-ID-r15 ::= SEQUENCE struct gnss_id_r15_s { struct gnss_id_r15_opts { - enum options { gps, sbas, qzss, galileo, glonass, bds, /*...*/ nulltype } value; + enum options { gps, sbas, qzss, galileo, glonass, bds, /*...*/ navic_v1610, nulltype } value; const char* to_string() const; }; - typedef enumerated<gnss_id_r15_opts, true> gnss_id_r15_e_; + typedef enumerated<gnss_id_r15_opts, true, 1> gnss_id_r15_e_; // member variables bool ext = false; @@ -73,6 +125,17 @@ struct gnss_id_r15_s { void to_json(json_writer& j) const; }; +// PLMN-IdentityInfo-v1700 ::= SEQUENCE +struct plmn_id_info_v1700_s { + bool tracking_area_list_r17_present = false; + tracking_area_list_r17_l tracking_area_list_r17; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // SBAS-ID-r15 ::= SEQUENCE struct sbas_id_r15_s { struct sbas_id_r15_opts { @@ -93,6 +156,21 @@ struct sbas_id_r15_s { void to_json(json_writer& j) const; }; +// PLMN-IdentityInfo-v1610 ::= SEQUENCE +struct plmn_id_info_v1610_s { + bool cp_cio_t_minus5_gs_optim_r16_present = false; + bool up_cio_t_minus5_gs_optim_r16_present = false; + bool iab_support_r16_present = false; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// PLMN-IdentityList-v1700 ::= SEQUENCE (SIZE (1..6)) OF PLMN-IdentityInfo-v1700 +using plmn_id_list_v1700_l = dyn_array<plmn_id_info_v1700_s>; + // PosSIB-Type-r15 ::= SEQUENCE struct pos_sib_type_r15_s { struct pos_sib_type_r15_opts { @@ -125,12 +203,23 @@ struct pos_sib_type_r15_s { pos_sib_type2_minus19, pos_sib_type3_minus1, // ... + pos_sib_type1_minus8_v1610, + pos_sib_type2_minus20_v1610, + pos_sib_type2_minus21_v1610, + pos_sib_type2_minus22_v1610, + pos_sib_type2_minus23_v1610, + pos_sib_type2_minus24_v1610, + pos_sib_type2_minus25_v1610, + pos_sib_type4_minus1_v1610, + pos_sib_type5_minus1_v1610, + pos_sib_type1_minus9_v1700, + pos_sib_type1_minus10_v1700, nulltype } value; const char* to_string() const; }; - typedef enumerated<pos_sib_type_r15_opts, true> pos_sib_type_r15_e_; + typedef enumerated<pos_sib_type_r15_opts, true, 11> pos_sib_type_r15_e_; // member variables bool ext = false; @@ -148,9 +237,39 @@ struct pos_sib_type_r15_s { void to_json(json_writer& j) const; }; +// PLMN-IdentityList-v1610 ::= SEQUENCE (SIZE (1..6)) OF PLMN-IdentityInfo-v1610 +using plmn_id_list_v1610_l = dyn_array<plmn_id_info_v1610_s>; + // PosSIB-MappingInfo-r15 ::= SEQUENCE (SIZE (1..32)) OF PosSIB-Type-r15 using pos_sib_map_info_r15_l = dyn_array<pos_sib_type_r15_s>; +// SystemInformationBlockType1-v1700-IEs ::= SEQUENCE +struct sib_type1_v1700_ies_s { + struct cell_access_related_info_ntn_r17_s_ { + struct cell_barred_ntn_r17_opts { + enum options { barred, not_barred, nulltype } value; + + const char* to_string() const; + }; + typedef enumerated<cell_barred_ntn_r17_opts> cell_barred_ntn_r17_e_; + + // member variables + bool plmn_id_list_v1700_present = false; + cell_barred_ntn_r17_e_ cell_barred_ntn_r17; + plmn_id_list_v1700_l plmn_id_list_v1700; + }; + + // member variables + bool cell_access_related_info_ntn_r17_present = false; + bool non_crit_ext_present = false; + cell_access_related_info_ntn_r17_s_ cell_access_related_info_ntn_r17; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // PLMN-IdentityInfo-v1530 ::= SEQUENCE struct plmn_id_info_v1530_s { struct cell_reserved_for_oper_crs_r15_opts { @@ -190,6 +309,22 @@ struct pos_sched_info_r15_s { void to_json(json_writer& j) const; }; +// SystemInformationBlockType1-v1610-IEs ::= SEQUENCE +struct sib_type1_v1610_ies_s { + bool edrx_allowed_minus5_gc_r16_present = false; + bool tx_in_ctrl_ch_region_r16_present = false; + bool camping_allowed_in_ce_r16_present = false; + bool plmn_id_list_v1610_present = false; + bool non_crit_ext_present = false; + plmn_id_list_v1610_l plmn_id_list_v1610; + sib_type1_v1700_ies_s non_crit_ext; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // CellSelectionInfoCE-v1530 ::= SEQUENCE struct cell_sel_info_ce_v1530_s { struct pwr_class14dbm_offset_r15_opts { @@ -218,8 +353,9 @@ using pos_sched_info_list_r15_l = dyn_array<pos_sched_info_r15_s>; // SystemInformationBlockType1-v1540-IEs ::= SEQUENCE struct sib_type1_v1540_ies_s { - bool si_pos_offset_r15_present = false; - bool non_crit_ext_present = false; + bool si_pos_offset_r15_present = false; + bool non_crit_ext_present = false; + sib_type1_v1610_ies_s non_crit_ext; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -927,14 +1063,16 @@ struct sib_type_opts { sib_type24_v1530, sib_type25_v1530, sib_type26_v1530, + sib_type26a_v1610, + sib_type27_v1610, + sib_type28_v1610, + sib_type29_v1610, nulltype } value; - typedef uint8_t number_type; const char* to_string() const; - uint8_t to_number() const; }; -typedef enumerated<sib_type_opts, true, 6> sib_type_e; +typedef enumerated<sib_type_opts, true, 10> sib_type_e; // SystemInformationBlockType1-v1250-IEs ::= SEQUENCE struct sib_type1_v1250_ies_s { @@ -1195,6 +1333,14 @@ struct sib_type2_s { ul_bw_e_ ul_bw; uint8_t add_spec_emission = 1; }; + struct mpdcch_cqi_report_r16_opts { + enum options { four_bits, both, nulltype } value; + typedef uint8_t number_type; + + const char* to_string() const; + uint8_t to_number() const; + }; + typedef enumerated<mpdcch_cqi_report_r16_opts> mpdcch_cqi_report_r16_e_; // member variables bool ext = false; @@ -1243,6 +1389,19 @@ struct sib_type2_s { bool reduced_cp_latency_enabled_r15_present = false; // group 10 bool mbms_rom_service_ind_r15_present = false; + // group 11 + bool rlos_enabled_r16_present = false; + bool early_security_reactivation_r16_present = false; + bool cp_edt_minus5_gc_r16_present = false; + bool up_edt_minus5_gc_r16_present = false; + bool cp_pur_epc_r16_present = false; + bool up_pur_epc_r16_present = false; + bool cp_pur_minus5_gc_r16_present = false; + bool up_pur_minus5_gc_r16_present = false; + bool mpdcch_cqi_report_r16_present = false; + bool rai_activation_enh_r16_present = false; + bool idle_mode_meass_nr_r16_present = false; + mpdcch_cqi_report_r16_e_ mpdcch_cqi_report_r16; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; diff --git a/lib/include/srsran/asn1/rrc/uecap.h b/lib/include/srsran/asn1/rrc/uecap.h index b520117bd..582cf75ac 100644 --- a/lib/include/srsran/asn1/rrc/uecap.h +++ b/lib/include/srsran/asn1/rrc/uecap.h @@ -12,7 +12,7 @@ /******************************************************************************* * - * 3GPP TS ASN1 RRC v15.11.0 (2020-09) + * 3GPP TS ASN1 RRC v17.4.0 (2023-03) * ******************************************************************************/ @@ -28,6 +28,29 @@ namespace rrc { * Struct Definitions ******************************************************************************/ +// UECapabilityEnquiry-v1710-IEs ::= SEQUENCE +struct ue_cap_enquiry_v1710_ies_s { + bool sidelink_request_r17_present = false; + bool non_crit_ext_present = false; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// UECapabilityEnquiry-v1610-IEs ::= SEQUENCE +struct ue_cap_enquiry_v1610_ies_s { + bool rrc_seg_allowed_r16_present = false; + bool non_crit_ext_present = false; + ue_cap_enquiry_v1710_ies_s non_crit_ext; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // CA-BandwidthClass-r10 ::= ENUMERATED struct ca_bw_class_r10_opts { enum options { a, b, c, d, e, f, /*...*/ nulltype } value; @@ -38,9 +61,10 @@ typedef enumerated<ca_bw_class_r10_opts, true> ca_bw_class_r10_e; // UECapabilityEnquiry-v1560-IEs ::= SEQUENCE struct ue_cap_enquiry_v1560_ies_s { - bool requested_cap_common_r15_present = false; - bool non_crit_ext_present = false; - dyn_octstring requested_cap_common_r15; + bool requested_cap_common_r15_present = false; + bool non_crit_ext_present = false; + dyn_octstring requested_cap_common_r15; + ue_cap_enquiry_v1610_ies_s non_crit_ext; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -302,6 +326,14 @@ struct ue_radio_paging_info_r12_s { bool wake_up_signal_min_gap_e_drx_tdd_r15_present = false; wake_up_signal_min_gap_e_drx_r15_e_ wake_up_signal_min_gap_e_drx_r15; wake_up_signal_min_gap_e_drx_tdd_r15_e_ wake_up_signal_min_gap_e_drx_tdd_r15; + // group 2 + bool ue_category_dl_v1610_present = false; + bool group_wake_up_signal_r16_present = false; + bool group_wake_up_signal_tdd_r16_present = false; + bool group_wake_up_signal_alternation_r16_present = false; + bool group_wake_up_signal_alternation_tdd_r16_present = false; + // group 3 + bool inactive_state_po_determination_r17_present = false; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -1520,6 +1552,125 @@ struct band_combination_params_v1530_s { void to_json(json_writer& j) const; }; +// InterRAT-BandInfoNR-r16 ::= SEQUENCE +struct inter_rat_band_info_nr_r16_s { + bool inter_rat_need_for_gaps_nr_r16 = false; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// InterRAT-BandListNR-r16 ::= SEQUENCE (SIZE (1..1024)) OF InterRAT-BandInfoNR-r16 +using inter_rat_band_list_nr_r16_l = dyn_array<inter_rat_band_info_nr_r16_s>; + +// SRS-CapabilityPerBandPair-v1610 ::= SEQUENCE +struct srs_cap_per_band_pair_v1610_s { + bool add_srs_carrier_switching_r16_present = false; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// BandParameters-v1610 ::= SEQUENCE +struct band_params_v1610_s { + struct intra_freq_daps_r16_s_ { + bool intra_freq_async_daps_r16_present = false; + bool dummy_present = false; + bool intra_freq_two_tags_daps_r16_present = false; + }; + struct add_srs_ant_switching_r16_s_ { + bool add_srs_minus1_t2_r_r16_present = false; + bool add_srs_minus1_t4_r_r16_present = false; + bool add_srs_minus2_t4_r_minus2pairs_r16_present = false; + bool add_srs_minus2_t4_r_minus3pairs_r16_present = false; + }; + using srs_cap_per_band_pair_list_v1610_l_ = dyn_array<srs_cap_per_band_pair_v1610_s>; + + // member variables + bool intra_freq_daps_r16_present = false; + bool add_srs_freq_hop_r16_present = false; + bool add_srs_ant_switching_r16_present = false; + bool srs_cap_per_band_pair_list_v1610_present = false; + intra_freq_daps_r16_s_ intra_freq_daps_r16; + add_srs_ant_switching_r16_s_ add_srs_ant_switching_r16; + srs_cap_per_band_pair_list_v1610_l_ srs_cap_per_band_pair_list_v1610; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// MeasGapInfoNR-r16 ::= SEQUENCE +struct meas_gap_info_nr_r16_s { + bool inter_rat_band_list_nr_en_dc_r16_present = false; + bool inter_rat_band_list_nr_sa_r16_present = false; + inter_rat_band_list_nr_r16_l inter_rat_band_list_nr_en_dc_r16; + inter_rat_band_list_nr_r16_l inter_rat_band_list_nr_sa_r16; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// BandCombinationParameters-v1610 ::= SEQUENCE +struct band_combination_params_v1610_s { + using band_param_list_v1610_l_ = dyn_array<band_params_v1610_s>; + struct inter_freq_daps_r16_s_ { + bool inter_freq_async_daps_r16_present = false; + bool inter_freq_multi_ul_tx_daps_r16_present = false; + }; + + // member variables + bool meas_gap_info_nr_r16_present = false; + bool band_param_list_v1610_present = false; + bool inter_freq_daps_r16_present = false; + meas_gap_info_nr_r16_s meas_gap_info_nr_r16; + band_param_list_v1610_l_ band_param_list_v1610; + inter_freq_daps_r16_s_ inter_freq_daps_r16; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// ScalingFactorSidelink-r16 ::= ENUMERATED +struct scaling_factor_sidelink_r16_opts { + enum options { f0p4, f0p75, f0p8, f1, nulltype } value; + + const char* to_string() const; +}; +typedef enumerated<scaling_factor_sidelink_r16_opts> scaling_factor_sidelink_r16_e; + +// BandCombinationParameters-v1630 ::= SEQUENCE +struct band_combination_params_v1630_s { + using scaling_factor_tx_sidelink_r16_l_ = dyn_array<scaling_factor_sidelink_r16_e>; + using scaling_factor_rx_sidelink_r16_l_ = dyn_array<scaling_factor_sidelink_r16_e>; + + // member variables + bool v2x_supported_tx_band_comb_list_per_bc_v1630_present = false; + bool v2x_supported_rx_band_comb_list_per_bc_v1630_present = false; + bool scaling_factor_tx_sidelink_r16_present = false; + bool scaling_factor_rx_sidelink_r16_present = false; + bool inter_band_pwr_sharing_sync_daps_r16_present = false; + bool inter_band_pwr_sharing_async_daps_r16_present = false; + bounded_bitstring<1, 512> v2x_supported_tx_band_comb_list_per_bc_v1630; + bounded_bitstring<1, 512> v2x_supported_rx_band_comb_list_per_bc_v1630; + scaling_factor_tx_sidelink_r16_l_ scaling_factor_tx_sidelink_r16; + scaling_factor_rx_sidelink_r16_l_ scaling_factor_rx_sidelink_r16; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // BandCombinationParametersExt-r10 ::= SEQUENCE struct band_combination_params_ext_r10_s { bool supported_bw_combination_set_r10_present = false; @@ -2033,6 +2184,83 @@ struct mac_params_v1530_s { void to_json(json_writer& j) const; }; +// MBMS-SupportedBandInfo-r16 ::= SEQUENCE +struct mbms_supported_band_info_r16_s { + struct subcarrier_spacing_mbms_khz0dot37_r16_s_ { + bool time_separation_slot2_r16_present = false; + bool time_separation_slot4_r16_present = false; + }; + + // member variables + bool subcarrier_spacing_mbms_khz2dot5_r16_present = false; + bool subcarrier_spacing_mbms_khz0dot37_r16_present = false; + subcarrier_spacing_mbms_khz0dot37_r16_s_ subcarrier_spacing_mbms_khz0dot37_r16; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// MBMS-Parameters-v1610 ::= SEQUENCE +struct mbms_params_v1610_s { + struct mbms_scaling_factor2dot5_r16_opts { + enum options { n2, n4, n6, n8, nulltype } value; + typedef uint8_t number_type; + + const char* to_string() const; + uint8_t to_number() const; + }; + typedef enumerated<mbms_scaling_factor2dot5_r16_opts> mbms_scaling_factor2dot5_r16_e_; + struct mbms_scaling_factor0dot37_r16_opts { + enum options { n12, n16, n20, n24, nulltype } value; + typedef uint8_t number_type; + + const char* to_string() const; + uint8_t to_number() const; + }; + typedef enumerated<mbms_scaling_factor0dot37_r16_opts> mbms_scaling_factor0dot37_r16_e_; + using mbms_supported_band_info_list_r16_l_ = dyn_array<mbms_supported_band_info_r16_s>; + + // member variables + bool mbms_scaling_factor2dot5_r16_present = false; + bool mbms_scaling_factor0dot37_r16_present = false; + mbms_scaling_factor2dot5_r16_e_ mbms_scaling_factor2dot5_r16; + mbms_scaling_factor0dot37_r16_e_ mbms_scaling_factor0dot37_r16; + mbms_supported_band_info_list_r16_l_ mbms_supported_band_info_list_r16; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// MBMS-SupportedBandInfo-v1700 ::= SEQUENCE +struct mbms_supported_band_info_v1700_s { + bool pmch_bw_n40_r17_present = false; + bool pmch_bw_n35_r17_present = false; + bool pmch_bw_n30_r17_present = false; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// MBMS-Parameters-v1700 ::= SEQUENCE +struct mbms_params_v1700_s { + using mbms_supported_band_info_list_v1700_l_ = dyn_array<mbms_supported_band_info_v1700_s>; + + // member variables + bool mbms_supported_band_info_list_v1700_present = false; + mbms_supported_band_info_list_v1700_l_ mbms_supported_band_info_list_v1700; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // MIMO-UE-BeamformedCapabilities-r13 ::= SEQUENCE struct mimo_ue_bf_cap_r13_s { bool alt_codebook_r13_present = false; @@ -2080,7 +2308,7 @@ struct mimo_ue_params_r13_s { struct mimo_ue_params_per_tm_v1430_s { struct nzp_csi_rs_aperiodic_info_r14_s_ { struct nmax_res_r14_opts { - enum options { ffs1, ffs2, ffs3, ffs4, nulltype } value; + enum options { n1, n2, n4, n8, nulltype } value; typedef uint8_t number_type; const char* to_string() const; @@ -2094,7 +2322,7 @@ struct mimo_ue_params_per_tm_v1430_s { }; struct nzp_csi_rs_periodic_info_r14_s_ { struct nmax_res_r14_opts { - enum options { ffs1, ffs2, ffs3, ffs4, nulltype } value; + enum options { n1, n2, n4, n8, nulltype } value; typedef uint8_t number_type; const char* to_string() const; @@ -2191,6 +2419,56 @@ struct meas_params_v1020_s { void to_json(json_writer& j) const; }; +// MeasParameters-v1610 ::= SEQUENCE +struct meas_params_v1610_s { + using band_info_nr_v1610_l_ = dyn_array<meas_gap_info_nr_r16_s>; + + // member variables + bool band_info_nr_v1610_present = false; + bool alt_freq_prio_r16_present = false; + bool ce_dl_ch_quality_report_r16_present = false; + bool ce_meas_rss_ded_r16_present = false; + bool eutra_idle_inactive_meass_r16_present = false; + bool nr_idle_inactive_meas_fr1_r16_present = false; + bool nr_idle_inactive_meas_fr2_r16_present = false; + bool idle_inactive_validity_area_list_r16_present = false; + bool meas_gap_patterns_nronly_r16_present = false; + bool meas_gap_patterns_nronly_endc_r16_present = false; + band_info_nr_v1610_l_ band_info_nr_v1610; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// SharedSpectrumMeasNR-r17 ::= SEQUENCE +struct shared_spec_meas_nr_r17_s { + bool nr_rssi_ch_occupancy_report_r17 = false; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// MeasParameters-v1700 ::= SEQUENCE +struct meas_params_v1700_s { + using shared_spec_meas_nr_en_dc_r17_l_ = dyn_array<shared_spec_meas_nr_r17_s>; + using shared_spec_meas_nr_sa_r17_l_ = dyn_array<shared_spec_meas_nr_r17_s>; + + // member variables + bool shared_spec_meas_nr_en_dc_r17_present = false; + bool shared_spec_meas_nr_sa_r17_present = false; + shared_spec_meas_nr_en_dc_r17_l_ shared_spec_meas_nr_en_dc_r17; + shared_spec_meas_nr_sa_r17_l_ shared_spec_meas_nr_sa_r17; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // NAICS-Capability-Entry-r12 ::= SEQUENCE struct naics_cap_entry_r12_s { struct nof_aggregated_prb_r12_opts { @@ -2650,6 +2928,87 @@ struct phy_layer_params_v1530_s { void to_json(json_writer& j) const; }; +// CE-MultiTB-Parameters-r16 ::= SEQUENCE +struct ce_multi_tb_params_r16_s { + bool pdsch_multi_tb_ce_mode_a_r16_present = false; + bool pdsch_multi_tb_ce_mode_b_r16_present = false; + bool pusch_multi_tb_ce_mode_a_r16_present = false; + bool pusch_multi_tb_ce_mode_b_r16_present = false; + bool ce_multi_tb_minus64_qam_r16_present = false; + bool ce_multi_tb_early_termination_r16_present = false; + bool ce_multi_tb_freq_hop_r16_present = false; + bool ce_multi_tb_harq_ack_bundling_r16_present = false; + bool ce_multi_tb_interleaving_r16_present = false; + bool ce_multi_tb_sub_prb_r16_present = false; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// CE-ResourceResvParameters-r16 ::= SEQUENCE +struct ce_res_resv_params_r16_s { + bool sf_res_resv_dl_ce_mode_a_r16_present = false; + bool sf_res_resv_dl_ce_mode_b_r16_present = false; + bool sf_res_resv_ul_ce_mode_a_r16_present = false; + bool sf_res_resv_ul_ce_mode_b_r16_present = false; + bool slot_symbol_res_resv_dl_ce_mode_a_r16_present = false; + bool slot_symbol_res_resv_dl_ce_mode_b_r16_present = false; + bool slot_symbol_res_resv_ul_ce_mode_a_r16_present = false; + bool slot_symbol_res_resv_ul_ce_mode_b_r16_present = false; + bool subcarrier_puncturing_ce_mode_a_r16_present = false; + bool subcarrier_puncturing_ce_mode_b_r16_present = false; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// PhyLayerParameters-v1610 ::= SEQUENCE +struct phy_layer_params_v1610_s { + struct ce_cap_v1610_s_ { + bool ce_csi_rs_feedback_r16_present = false; + bool ce_csi_rs_feedback_codebook_restrict_r16_present = false; + bool crs_ch_est_mpdcch_ce_mode_a_r16_present = false; + bool crs_ch_est_mpdcch_ce_mode_b_r16_present = false; + bool crs_ch_est_mpdcch_csi_r16_present = false; + bool crs_ch_est_mpdcch_reciprocity_tdd_r16_present = false; + bool etws_cmas_rx_in_conn_ce_mode_a_r16_present = false; + bool etws_cmas_rx_in_conn_ce_mode_b_r16_present = false; + bool mpdcch_in_lte_ctrl_region_ce_mode_a_r16_present = false; + bool mpdcch_in_lte_ctrl_region_ce_mode_b_r16_present = false; + bool pdsch_in_lte_ctrl_region_ce_mode_a_r16_present = false; + bool pdsch_in_lte_ctrl_region_ce_mode_b_r16_present = false; + bool multi_tb_params_r16_present = false; + bool res_resv_params_r16_present = false; + ce_multi_tb_params_r16_s multi_tb_params_r16; + ce_res_resv_params_r16_s res_resv_params_r16; + }; + struct add_srs_r16_s_ { + bool add_srs_freq_hop_r16_present = false; + bool add_srs_ant_switching_r16_present = false; + bool add_srs_carrier_switching_r16_present = false; + }; + + // member variables + bool ce_cap_v1610_present = false; + bool wideband_prg_slot_r16_present = false; + bool wideband_prg_subslot_r16_present = false; + bool wideband_prg_sf_r16_present = false; + bool add_srs_r16_present = false; + bool virtual_cell_id_basic_srs_r16_present = false; + bool virtual_cell_id_add_srs_r16_present = false; + ce_cap_v1610_s_ ce_cap_v1610; + add_srs_r16_s_ add_srs_r16; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // SupportedBandEUTRA ::= SEQUENCE struct supported_band_eutra_s { uint8_t band_eutra = 1; @@ -3114,6 +3473,54 @@ struct rf_params_v1530_s { void to_json(json_writer& j) const; }; +// SupportedBandCombination-v1610 ::= SEQUENCE (SIZE (1..128)) OF BandCombinationParameters-v1610 +using supported_band_combination_v1610_l = dyn_array<band_combination_params_v1610_s>; + +// SupportedBandCombinationAdd-v1610 ::= SEQUENCE (SIZE (1..256)) OF BandCombinationParameters-v1610 +using supported_band_combination_add_v1610_l = dyn_array<band_combination_params_v1610_s>; + +// SupportedBandCombinationReduced-v1610 ::= SEQUENCE (SIZE (1..384)) OF BandCombinationParameters-v1610 +using supported_band_combination_reduced_v1610_l = dyn_array<band_combination_params_v1610_s>; + +// RF-Parameters-v1610 ::= SEQUENCE +struct rf_params_v1610_s { + bool supported_band_combination_v1610_present = false; + bool supported_band_combination_add_v1610_present = false; + bool supported_band_combination_reduced_v1610_present = false; + supported_band_combination_v1610_l supported_band_combination_v1610; + supported_band_combination_add_v1610_l supported_band_combination_add_v1610; + supported_band_combination_reduced_v1610_l supported_band_combination_reduced_v1610; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// SupportedBandCombination-v1630 ::= SEQUENCE (SIZE (1..128)) OF BandCombinationParameters-v1630 +using supported_band_combination_v1630_l = dyn_array<band_combination_params_v1630_s>; + +// SupportedBandCombinationAdd-v1630 ::= SEQUENCE (SIZE (1..256)) OF BandCombinationParameters-v1630 +using supported_band_combination_add_v1630_l = dyn_array<band_combination_params_v1630_s>; + +// SupportedBandCombinationReduced-v1630 ::= SEQUENCE (SIZE (1..384)) OF BandCombinationParameters-v1630 +using supported_band_combination_reduced_v1630_l = dyn_array<band_combination_params_v1630_s>; + +// RF-Parameters-v1630 ::= SEQUENCE +struct rf_params_v1630_s { + bool supported_band_combination_v1630_present = false; + bool supported_band_combination_add_v1630_present = false; + bool supported_band_combination_reduced_v1630_present = false; + supported_band_combination_v1630_l supported_band_combination_v1630; + supported_band_combination_add_v1630_l supported_band_combination_add_v1630; + supported_band_combination_reduced_v1630_l supported_band_combination_reduced_v1630; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // SupportedBandEUTRA-v9e0 ::= SEQUENCE struct supported_band_eutra_v9e0_s { bool band_eutra_v9e0_present = false; @@ -3273,6 +3680,568 @@ struct sl_params_v1530_s { void to_json(json_writer& j) const; }; +// V2X-BandParametersEUTRA-NR-r16 ::= CHOICE +struct v2x_band_params_eutra_nr_r16_c { + struct eutra_s_ { + bool v2x_band_params1_r16_present = false; + bool v2x_band_params2_r16_present = false; + v2x_band_params_r14_s v2x_band_params1_r16; + v2x_band_params_v1530_s v2x_band_params2_r16; + }; + struct nr_s_ { + bool v2x_band_params_nr_r16_present = false; + dyn_octstring v2x_band_params_nr_r16; + }; + struct types_opts { + enum options { eutra, nr, nulltype } value; + + const char* to_string() const; + }; + typedef enumerated<types_opts> types; + + // choice methods + v2x_band_params_eutra_nr_r16_c() = default; + v2x_band_params_eutra_nr_r16_c(const v2x_band_params_eutra_nr_r16_c& other); + v2x_band_params_eutra_nr_r16_c& operator=(const v2x_band_params_eutra_nr_r16_c& other); + ~v2x_band_params_eutra_nr_r16_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 + eutra_s_& eutra() + { + assert_choice_type(types::eutra, type_, "V2X-BandParametersEUTRA-NR-r16"); + return c.get<eutra_s_>(); + } + nr_s_& nr() + { + assert_choice_type(types::nr, type_, "V2X-BandParametersEUTRA-NR-r16"); + return c.get<nr_s_>(); + } + const eutra_s_& eutra() const + { + assert_choice_type(types::eutra, type_, "V2X-BandParametersEUTRA-NR-r16"); + return c.get<eutra_s_>(); + } + const nr_s_& nr() const + { + assert_choice_type(types::nr, type_, "V2X-BandParametersEUTRA-NR-r16"); + return c.get<nr_s_>(); + } + eutra_s_& set_eutra(); + nr_s_& set_nr(); + +private: + types type_; + choice_buffer_t<eutra_s_, nr_s_> c; + + void destroy_(); +}; + +// V2X-SupportedBandCombinationEUTRA-NR-r16 ::= SEQUENCE (SIZE (1..512)) OF V2X-BandParametersEUTRA-NR-r16 +using v2x_supported_band_combination_eutra_nr_r16_l = dyn_array<v2x_band_params_eutra_nr_r16_c>; + +// SL-Parameters-v1610 ::= SEQUENCE +struct sl_params_v1610_s { + bool sl_param_nr_r16_present = false; + bool dummy_present = false; + dyn_octstring sl_param_nr_r16; + v2x_supported_band_combination_eutra_nr_r16_l dummy; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// V2X-BandParametersEUTRA-NR-v1630 ::= CHOICE +struct v2x_band_params_eutra_nr_v1630_c { + struct nr_s_ { + bool tx_sidelink_r16_present = false; + bool rx_sidelink_r16_present = false; + }; + struct types_opts { + enum options { eutra, nr, nulltype } value; + + const char* to_string() const; + }; + typedef enumerated<types_opts> types; + + // choice methods + v2x_band_params_eutra_nr_v1630_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 + nr_s_& nr() + { + assert_choice_type(types::nr, type_, "V2X-BandParametersEUTRA-NR-v1630"); + return c; + } + const nr_s_& nr() const + { + assert_choice_type(types::nr, type_, "V2X-BandParametersEUTRA-NR-v1630"); + return c; + } + void set_eutra(); + nr_s_& set_nr(); + +private: + types type_; + nr_s_ c; +}; + +// V2X-BandCombinationParametersEUTRA-NR-v1630 ::= SEQUENCE +struct v2x_band_combination_params_eutra_nr_v1630_s { + using band_list_sidelink_eutra_nr_r16_l_ = dyn_array<v2x_band_params_eutra_nr_r16_c>; + using band_list_sidelink_eutra_nr_v1630_l_ = dyn_array<v2x_band_params_eutra_nr_v1630_c>; + + // member variables + band_list_sidelink_eutra_nr_r16_l_ band_list_sidelink_eutra_nr_r16; + band_list_sidelink_eutra_nr_v1630_l_ band_list_sidelink_eutra_nr_v1630; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// V2X-SupportedBandCombinationEUTRA-NR-v1630 ::= SEQUENCE (SIZE (1..512)) OF +// V2X-BandCombinationParametersEUTRA-NR-v1630 +using v2x_supported_band_combination_eutra_nr_v1630_l = dyn_array<v2x_band_combination_params_eutra_nr_v1630_s>; + +// SL-Parameters-v1630 ::= SEQUENCE +struct sl_params_v1630_s { + bool v2x_supported_band_combination_list_eutra_nr_r16_present = false; + v2x_supported_band_combination_eutra_nr_v1630_l v2x_supported_band_combination_list_eutra_nr_r16; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// V2X-BandParametersEUTRA-NR-v1710 ::= SEQUENCE +struct v2x_band_params_eutra_nr_v1710_s { + bool v2x_band_params_eutra_nr_v1710_present = false; + dyn_octstring v2x_band_params_eutra_nr_v1710; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// V2X-BandCombinationParametersEUTRA-NR-v1710 ::= SEQUENCE (SIZE (1..64)) OF V2X-BandParametersEUTRA-NR-v1710 +using v2x_band_combination_params_eutra_nr_v1710_l = dyn_array<v2x_band_params_eutra_nr_v1710_s>; + +// V2X-SupportedBandCombinationEUTRA-NR-v1710 ::= SEQUENCE (SIZE (1..512)) OF +// V2X-BandCombinationParametersEUTRA-NR-v1710 +using v2x_supported_band_combination_eutra_nr_v1710_l = dyn_array<v2x_band_combination_params_eutra_nr_v1710_l>; + +// SL-Parameters-v1710 ::= SEQUENCE +struct sl_params_v1710_s { + bool v2x_supported_band_combination_list_eutra_nr_v1710_present = false; + v2x_supported_band_combination_eutra_nr_v1710_l v2x_supported_band_combination_list_eutra_nr_v1710; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// PhyLayerParameters-v1730 ::= SEQUENCE +struct phy_layer_params_v1730_s { + bool csi_sf_set2_for_dormant_scell_r17_present = false; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// NTN-Parameters-v1720 ::= SEQUENCE +struct ntn_params_v1720_s { + struct ntn_segmented_precompensation_gaps_r17_opts { + enum options { sym1, sl1, sf1, nulltype } value; + + const char* to_string() const; + }; + typedef enumerated<ntn_segmented_precompensation_gaps_r17_opts> ntn_segmented_precompensation_gaps_r17_e_; + + // member variables + bool ntn_segmented_precompensation_gaps_r17_present = false; + ntn_segmented_precompensation_gaps_r17_e_ ntn_segmented_precompensation_gaps_r17; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// UE-EUTRA-Capability-v1730-IEs ::= SEQUENCE +struct ue_eutra_cap_v1730_ies_s { + bool non_crit_ext_present = false; + phy_layer_params_v1730_s phy_layer_params_v1730; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// IRAT-ParametersNR-v1710 ::= SEQUENCE +struct irat_params_nr_v1710_s { + bool extended_band_n77_minus2_r17_present = false; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// NeighCellSI-AcquisitionParameters-v1710 ::= SEQUENCE +struct neigh_cell_si_acquisition_params_v1710_s { + bool gnb_id_len_report_nr_en_dc_r17_present = false; + bool gnb_id_len_report_nr_no_en_dc_r17_present = false; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// UE-EUTRA-Capability-v1720-IEs ::= SEQUENCE +struct ue_eutra_cap_v1720_ies_s { + bool non_crit_ext_present = false; + ntn_params_v1720_s ntn_params_v1720; + ue_eutra_cap_v1730_ies_s non_crit_ext; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// IRAT-ParametersNR-v1700 ::= SEQUENCE +struct irat_params_nr_v1700_s { + bool eutra_minus5_gc_ho_to_nr_tdd_fr2_minus2_r17_present = false; + bool eutra_epc_ho_to_nr_tdd_fr2_minus2_r17_present = false; + bool ce_eutra_minus5_gc_ho_to_nr_tdd_fr2_minus2_r17_present = false; + bool ims_voice_over_nr_fr2_minus2_r17_present = false; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// NTN-Parameters-r17 ::= SEQUENCE +struct ntn_params_r17_s { + struct ntn_scenario_support_r17_opts { + enum options { ngso, gso, nulltype } value; + + const char* to_string() const; + }; + typedef enumerated<ntn_scenario_support_r17_opts> ntn_scenario_support_r17_e_; + + // member variables + bool ntn_connect_epc_r17_present = false; + bool ntn_ta_report_r17_present = false; + bool ntn_pur_timer_delay_r17_present = false; + bool ntn_offset_timing_enh_r17_present = false; + bool ntn_scenario_support_r17_present = false; + ntn_scenario_support_r17_e_ ntn_scenario_support_r17; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// PhyLayerParameters-v1700 ::= SEQUENCE +struct phy_layer_params_v1700_s { + struct ce_cap_v1700_s_ { + bool ce_pdsch_minus14_harq_processes_r17_present = false; + bool ce_pdsch_minus14_harq_processes_alt2_r17_present = false; + bool ce_pdsch_max_tbs_r17_present = false; + }; + + // member variables + bool ce_cap_v1700_present = false; + ce_cap_v1700_s_ ce_cap_v1700; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// UE-BasedNetwPerfMeasParameters-v1700 ::= SEQUENCE +struct ue_based_netw_perf_meas_params_v1700_s { + bool logged_meas_idle_event_l1_r17_present = false; + bool logged_meas_idle_event_out_of_coverage_r17_present = false; + bool logged_meas_uncom_bar_pre_r17_present = false; + bool imm_meas_uncom_bar_pre_r17_present = false; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// UE-EUTRA-Capability-v1710-IEs ::= SEQUENCE +struct ue_eutra_cap_v1710_ies_s { + bool neigh_cell_si_acquisition_params_v1710_present = false; + bool sl_params_v1710_present = false; + bool sidelink_requested_r17_present = false; + bool non_crit_ext_present = false; + irat_params_nr_v1710_s irat_params_nr_v1710; + neigh_cell_si_acquisition_params_v1710_s neigh_cell_si_acquisition_params_v1710; + sl_params_v1710_s sl_params_v1710; + ue_eutra_cap_v1720_ies_s non_crit_ext; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// Other-Parameters-v1690 ::= SEQUENCE +struct other_params_v1690_s { + bool ul_rrc_segmentation_r16_present = false; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// UE-EUTRA-Capability-v1700-IEs ::= SEQUENCE +struct ue_eutra_cap_v1700_ies_s { + bool meas_params_v1700_present = false; + bool ue_based_netw_perf_meas_params_v1700_present = false; + bool ntn_params_r17_present = false; + bool irat_params_nr_v1700_present = false; + bool non_crit_ext_present = false; + meas_params_v1700_s meas_params_v1700; + ue_based_netw_perf_meas_params_v1700_s ue_based_netw_perf_meas_params_v1700; + phy_layer_params_v1700_s phy_layer_params_v1700; + ntn_params_r17_s ntn_params_r17; + irat_params_nr_v1700_s irat_params_nr_v1700; + mbms_params_v1700_s mbms_params_v1700; + ue_eutra_cap_v1710_ies_s non_crit_ext; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// IRAT-ParametersNR-v1660 ::= SEQUENCE +struct irat_params_nr_v1660_s { + bool extended_band_n77_r16_present = false; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// UE-EUTRA-Capability-v1690-IEs ::= SEQUENCE +struct ue_eutra_cap_v1690_ies_s { + bool non_crit_ext_present = false; + other_params_v1690_s other_params_v1690; + ue_eutra_cap_v1700_ies_s non_crit_ext; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// MeasParameters-v1630 ::= SEQUENCE +struct meas_params_v1630_s { + bool nr_idle_inactive_beam_meas_fr1_r16_present = false; + bool nr_idle_inactive_beam_meas_fr2_r16_present = false; + bool ce_meas_rss_ded_same_rbs_r16_present = false; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// Other-Parameters-v1650 ::= SEQUENCE +struct other_params_v1650_s { + bool mps_prio_ind_r16_present = false; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// UE-EUTRA-Capability-v1660-IEs ::= SEQUENCE +struct ue_eutra_cap_v1660_ies_s { + bool non_crit_ext_present = false; + irat_params_nr_v1660_s irat_params_nr_v1660; + ue_eutra_cap_v1690_ies_s non_crit_ext; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// EUTRA-5GC-Parameters-v1610 ::= SEQUENCE +struct eutra_minus5_gc_params_v1610_s { + bool ce_inactive_state_r16_present = false; + bool ce_eutra_minus5_gc_r16_present = false; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// IRAT-ParametersNR-v1610 ::= SEQUENCE +struct irat_params_nr_v1610_s { + bool nr_ho_to_en_dc_r16_present = false; + bool ce_eutra_minus5_gc_ho_to_nr_fdd_fr1_r16_present = false; + bool ce_eutra_minus5_gc_ho_to_nr_tdd_fr1_r16_present = false; + bool ce_eutra_minus5_gc_ho_to_nr_fdd_fr2_r16_present = false; + bool ce_eutra_minus5_gc_ho_to_nr_tdd_fr2_r16_present = false; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// MAC-Parameters-v1630 ::= SEQUENCE +struct mac_params_v1630_s { + bool direct_scg_scell_activation_nedc_r16_present = false; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// MobilityParameters-v1610 ::= SEQUENCE +struct mob_params_v1610_s { + bool cho_r16_present = false; + bool cho_fdd_tdd_r16_present = false; + bool cho_fail_r16_present = false; + bool cho_two_trigger_events_r16_present = false; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// NeighCellSI-AcquisitionParameters-v1610 ::= SEQUENCE +struct neigh_cell_si_acquisition_params_v1610_s { + bool eutra_si_acquisition_for_ho_endc_r16_present = false; + bool nr_autonomous_gaps_endc_fr1_r16_present = false; + bool nr_autonomous_gaps_endc_fr2_r16_present = false; + bool nr_autonomous_gaps_fr1_r16_present = false; + bool nr_autonomous_gaps_fr2_r16_present = false; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// PUR-Parameters-r16 ::= SEQUENCE +struct pur_params_r16_s { + bool pur_cp_minus5_gc_ce_mode_a_r16_present = false; + bool pur_cp_minus5_gc_ce_mode_b_r16_present = false; + bool pur_up_minus5_gc_ce_mode_a_r16_present = false; + bool pur_up_minus5_gc_ce_mode_b_r16_present = false; + bool pur_cp_epc_ce_mode_a_r16_present = false; + bool pur_cp_epc_ce_mode_b_r16_present = false; + bool pur_up_epc_ce_mode_a_r16_present = false; + bool pur_up_epc_ce_mode_b_r16_present = false; + bool pur_cp_l1_ack_r16_present = false; + bool pur_freq_hop_r16_present = false; + bool pur_pusch_nb_max_tbs_r16_present = false; + bool pur_rsrp_validation_r16_present = false; + bool pur_sub_prb_ce_mode_a_r16_present = false; + bool pur_sub_prb_ce_mode_b_r16_present = false; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// UE-EUTRA-Capability-v1650-IEs ::= SEQUENCE +struct ue_eutra_cap_v1650_ies_s { + bool other_params_v1650_present = false; + bool non_crit_ext_present = false; + other_params_v1650_s other_params_v1650; + ue_eutra_cap_v1660_ies_s non_crit_ext; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// UE-EUTRA-CapabilityAddXDD-Mode-v1630 ::= SEQUENCE +struct ue_eutra_cap_add_xdd_mode_v1630_s { + meas_params_v1630_s meas_params_v1630; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// HighSpeedEnhParameters-v1610 ::= SEQUENCE +struct high_speed_enh_params_v1610_s { + bool meas_enhance_scell_r16_present = false; + bool meas_enhance2_r16_present = false; + bool demod_enhance2_r16_present = false; + bool inter_rat_enhancement_nr_r16_present = false; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// MAC-Parameters-v1610 ::= SEQUENCE +struct mac_params_v1610_s { + bool direct_mcg_scell_activation_resume_r16_present = false; + bool direct_scg_scell_activation_resume_r16_present = false; + bool early_data_up_minus5_gc_r16_present = false; + bool rai_support_enh_r16_present = false; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// MMTEL-Parameters-v1610 ::= SEQUENCE +struct mmtel_params_v1610_s { + bool recommended_bit_rate_multiplier_r16_present = false; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // NeighCellSI-AcquisitionParameters-v15a0 ::= SEQUENCE struct neigh_cell_si_acquisition_params_v15a0_s { bool eutra_cgi_report_nedc_r15_present = false; @@ -3283,6 +4252,64 @@ struct neigh_cell_si_acquisition_params_v15a0_s { void to_json(json_writer& j) const; }; +// Other-Parameters-v1610 ::= SEQUENCE +struct other_params_v1610_s { + bool resume_with_stored_mcg_scells_r16_present = false; + bool resume_with_mcg_scell_cfg_r16_present = false; + bool resume_with_stored_scg_r16_present = false; + bool resume_with_scg_cfg_r16_present = false; + bool mcg_rlf_recovery_via_scg_r16_present = false; + bool overheat_ind_for_scg_r16_present = false; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// PDCP-Parameters-v1610 ::= SEQUENCE +struct pdcp_params_v1610_s { + struct max_num_ehc_contexts_r16_opts { + enum options { + cs2, + cs4, + cs8, + cs16, + cs32, + cs64, + cs128, + cs256, + cs512, + cs1024, + cs2048, + cs4096, + cs8192, + cs16384, + cs32768, + cs65536, + nulltype + } value; + typedef uint32_t number_type; + + const char* to_string() const; + uint32_t to_number() const; + }; + typedef enumerated<max_num_ehc_contexts_r16_opts> max_num_ehc_contexts_r16_e_; + + // member variables + bool pdcp_version_change_without_ho_r16_present = false; + bool ehc_r16_present = false; + bool continue_ehc_context_r16_present = false; + bool max_num_ehc_contexts_r16_present = false; + bool joint_ehc_rohc_cfg_r16_present = false; + max_num_ehc_contexts_r16_e_ max_num_ehc_contexts_r16; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // PhyLayerParameters-v1540 ::= SEQUENCE struct phy_layer_params_v1540_s { struct stti_spt_cap_v1540_s_ {}; @@ -3308,6 +4335,60 @@ struct phy_layer_params_v1550_s { void to_json(json_writer& j) const; }; +// UE-BasedNetwPerfMeasParameters-v1610 ::= SEQUENCE +struct ue_based_netw_perf_meas_params_v1610_s { + bool ul_pdcp_avg_delay_r16_present = false; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// UE-EUTRA-Capability-v1630-IEs ::= SEQUENCE +struct ue_eutra_cap_v1630_ies_s { + bool rf_params_v1630_present = false; + bool sl_params_v1630_present = false; + bool early_security_reactivation_r16_present = false; + bool meas_params_v1630_present = false; + bool non_crit_ext_present = false; + rf_params_v1630_s rf_params_v1630; + sl_params_v1630_s sl_params_v1630; + mac_params_v1630_s mac_params_v1630; + meas_params_v1630_s meas_params_v1630; + ue_eutra_cap_add_xdd_mode_v1630_s fdd_add_ue_eutra_cap_v1630; + ue_eutra_cap_add_xdd_mode_v1630_s tdd_add_ue_eutra_cap_v1630; + ue_eutra_cap_v1650_ies_s non_crit_ext; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// UE-EUTRA-CapabilityAddXDD-Mode-v1610 ::= SEQUENCE +struct ue_eutra_cap_add_xdd_mode_v1610_s { + bool phy_layer_params_v1610_present = false; + bool pur_params_r16_present = false; + bool meas_params_v1610_present = false; + bool eutra_minus5_gc_params_v1610_present = false; + bool irat_params_nr_v1610_present = false; + bool neigh_cell_si_acquisition_params_v1610_present = false; + bool mob_params_v1610_present = false; + phy_layer_params_v1610_s phy_layer_params_v1610; + pur_params_r16_s pur_params_r16; + meas_params_v1610_s meas_params_v1610; + eutra_minus5_gc_params_v1610_s eutra_minus5_gc_params_v1610; + irat_params_nr_v1610_s irat_params_nr_v1610; + neigh_cell_si_acquisition_params_v1610_s neigh_cell_si_acquisition_params_v1610; + mob_params_v1610_s mob_params_v1610; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // EUTRA-5GC-Parameters-r15 ::= SEQUENCE struct eutra_minus5_gc_params_r15_s { bool eutra_minus5_gc_r15_present = false; @@ -3324,6 +4405,52 @@ struct eutra_minus5_gc_params_r15_s { void to_json(json_writer& j) const; }; +// UE-EUTRA-Capability-v1610-IEs ::= SEQUENCE +struct ue_eutra_cap_v1610_ies_s { + bool high_speed_enh_params_v1610_present = false; + bool neigh_cell_si_acquisition_params_v1610_present = false; + bool mbms_params_v1610_present = false; + bool pdcp_params_v1610_present = false; + bool mac_params_v1610_present = false; + bool phy_layer_params_v1610_present = false; + bool meas_params_v1610_present = false; + bool pur_params_r16_present = false; + bool eutra_minus5_gc_params_v1610_present = false; + bool other_params_v1610_present = false; + bool dl_ded_msg_segmentation_r16_present = false; + bool irat_params_nr_v1610_present = false; + bool rf_params_v1610_present = false; + bool mob_params_v1610_present = false; + bool sl_params_v1610_present = false; + bool fdd_add_ue_eutra_cap_v1610_present = false; + bool tdd_add_ue_eutra_cap_v1610_present = false; + bool non_crit_ext_present = false; + high_speed_enh_params_v1610_s high_speed_enh_params_v1610; + neigh_cell_si_acquisition_params_v1610_s neigh_cell_si_acquisition_params_v1610; + mbms_params_v1610_s mbms_params_v1610; + pdcp_params_v1610_s pdcp_params_v1610; + mac_params_v1610_s mac_params_v1610; + phy_layer_params_v1610_s phy_layer_params_v1610; + meas_params_v1610_s meas_params_v1610; + pur_params_r16_s pur_params_r16; + eutra_minus5_gc_params_v1610_s eutra_minus5_gc_params_v1610; + other_params_v1610_s other_params_v1610; + mmtel_params_v1610_s mmtel_params_v1610; + irat_params_nr_v1610_s irat_params_nr_v1610; + rf_params_v1610_s rf_params_v1610; + mob_params_v1610_s mob_params_v1610; + ue_based_netw_perf_meas_params_v1610_s ue_based_netw_perf_meas_params_v1610; + sl_params_v1610_s sl_params_v1610; + ue_eutra_cap_add_xdd_mode_v1610_s fdd_add_ue_eutra_cap_v1610; + ue_eutra_cap_add_xdd_mode_v1610_s tdd_add_ue_eutra_cap_v1610; + ue_eutra_cap_v1630_ies_s non_crit_ext; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // UE-EUTRA-CapabilityAddXDD-Mode-v15a0 ::= SEQUENCE struct ue_eutra_cap_add_xdd_mode_v15a0_s { bool phy_layer_params_v1530_present = false; @@ -3393,6 +4520,7 @@ struct ue_eutra_cap_v15a0_ies_s { eutra_minus5_gc_params_r15_s eutra_minus5_gc_params_r15; ue_eutra_cap_add_xdd_mode_v15a0_s fdd_add_ue_eutra_cap_v15a0; ue_eutra_cap_add_xdd_mode_v15a0_s tdd_add_ue_eutra_cap_v15a0; + ue_eutra_cap_v1610_ies_s non_crit_ext; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -4352,7 +5480,7 @@ struct mac_params_v1310_s { // MeasParameters-v1310 ::= SEQUENCE struct meas_params_v1310_s { bool rs_sinr_meas_r13_present = false; - bool white_cell_list_r13_present = false; + bool allowed_cell_list_r13_present = false; bool extended_max_obj_id_r13_present = false; bool ul_pdcp_delay_r13_present = false; bool extended_freq_priorities_r13_present = false; @@ -5073,13 +6201,13 @@ struct ue_eutra_cap_v940_ies_s { // AccessStratumRelease ::= ENUMERATED struct access_stratum_release_opts { - enum options { rel8, rel9, rel10, rel11, rel12, rel13, rel14, rel15, /*...*/ nulltype } value; + enum options { rel8, rel9, rel10, rel11, rel12, rel13, rel14, rel15, /*...*/ rel16, rel17, nulltype } value; typedef uint8_t number_type; const char* to_string() const; uint8_t to_number() const; }; -typedef enumerated<access_stratum_release_opts, true> access_stratum_release_e; +typedef enumerated<access_stratum_release_opts, true, 2> access_stratum_release_e; // PhyLayerParameters ::= SEQUENCE struct phy_layer_params_s { @@ -5151,6 +6279,55 @@ struct ue_eutra_cap_s { void to_json(json_writer& j) const; }; +// MeasParameters-v16c0 ::= SEQUENCE +struct meas_params_v16c0_s { + bool nr_cell_individual_offset_r16_present = false; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// UE-EUTRA-Capability-v16c0-IEs ::= SEQUENCE +struct ue_eutra_cap_v16c0_ies_s { + bool late_non_crit_ext_present = false; + bool non_crit_ext_present = false; + meas_params_v16c0_s meas_params_v16c0; + dyn_octstring late_non_crit_ext; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// UE-EUTRA-Capability-v15x0-IEs ::= SEQUENCE +struct ue_eutra_cap_v15x0_ies_s { + bool late_non_crit_ext_present = false; + bool non_crit_ext_present = false; + dyn_octstring late_non_crit_ext; + ue_eutra_cap_v16c0_ies_s non_crit_ext; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// UE-EUTRA-Capability-v14x0-IEs ::= SEQUENCE +struct ue_eutra_cap_v14x0_ies_s { + bool late_non_crit_ext_present = false; + bool non_crit_ext_present = false; + dyn_octstring late_non_crit_ext; + ue_eutra_cap_v15x0_ies_s non_crit_ext; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // PhyLayerParameters-v14a0 ::= SEQUENCE struct phy_layer_params_v14a0_s { bool ssp10_tdd_only_r14_present = false; @@ -5163,9 +6340,10 @@ struct phy_layer_params_v14a0_s { // UE-EUTRA-Capability-v14b0-IEs ::= SEQUENCE struct ue_eutra_cap_v14b0_ies_s { - bool rf_params_v14b0_present = false; - bool non_crit_ext_present = false; - rf_params_v14b0_s rf_params_v14b0; + bool rf_params_v14b0_present = false; + bool non_crit_ext_present = false; + rf_params_v14b0_s rf_params_v14b0; + ue_eutra_cap_v14x0_ies_s non_crit_ext; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; diff --git a/lib/include/srsran/asn1/rrc/ul_ccch_msg.h b/lib/include/srsran/asn1/rrc/ul_ccch_msg.h index 18fe247cb..bdb7aff4e 100644 --- a/lib/include/srsran/asn1/rrc/ul_ccch_msg.h +++ b/lib/include/srsran/asn1/rrc/ul_ccch_msg.h @@ -12,7 +12,7 @@ /******************************************************************************* * - * 3GPP TS ASN1 RRC v15.11.0 (2020-09) + * 3GPP TS ASN1 RRC v17.4.0 (2023-03) * ******************************************************************************/ @@ -28,6 +28,25 @@ namespace rrc { * Struct Definitions ******************************************************************************/ +// RRCEarlyDataRequest-v1610-IEs ::= SEQUENCE +struct rrc_early_data_request_v1610_ies_s { + struct establishment_cause_v1610_opts { + enum options { mt_access, spare3, spare2, spare1, nulltype } value; + + const char* to_string() const; + }; + typedef enumerated<establishment_cause_v1610_opts> establishment_cause_v1610_e_; + + // member variables + bool non_crit_ext_present = false; + establishment_cause_v1610_e_ establishment_cause_v1610; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // EstablishmentCause ::= ENUMERATED struct establishment_cause_opts { enum options { @@ -46,8 +65,8 @@ struct establishment_cause_opts { }; typedef enumerated<establishment_cause_opts> establishment_cause_e; -// EstablishmentCause-5GC ::= ENUMERATED -struct establishment_cause_minus5_gc_opts { +// EstablishmentCause-5GC-r15 ::= ENUMERATED +struct establishment_cause_minus5_gc_r15_opts { enum options { emergency, high_prio_access, @@ -62,7 +81,7 @@ struct establishment_cause_minus5_gc_opts { const char* to_string() const; }; -typedef enumerated<establishment_cause_minus5_gc_opts> establishment_cause_minus5_gc_e; +typedef enumerated<establishment_cause_minus5_gc_r15_opts> establishment_cause_minus5_gc_r15_e; // InitialUE-Identity ::= CHOICE struct init_ue_id_c { @@ -114,8 +133,8 @@ private: void destroy_(); }; -// InitialUE-Identity-5GC ::= CHOICE -struct init_ue_id_minus5_gc_c { +// InitialUE-Identity-5GC-r15 ::= CHOICE +struct init_ue_id_minus5_gc_r15_c { struct types_opts { enum options { ng_minus5_g_s_tmsi_part1, random_value, nulltype } value; typedef int8_t number_type; @@ -126,10 +145,10 @@ struct init_ue_id_minus5_gc_c { typedef enumerated<types_opts> types; // choice methods - init_ue_id_minus5_gc_c() = default; - init_ue_id_minus5_gc_c(const init_ue_id_minus5_gc_c& other); - init_ue_id_minus5_gc_c& operator=(const init_ue_id_minus5_gc_c& other); - ~init_ue_id_minus5_gc_c() { destroy_(); } + init_ue_id_minus5_gc_r15_c() = default; + init_ue_id_minus5_gc_r15_c(const init_ue_id_minus5_gc_r15_c& other); + init_ue_id_minus5_gc_r15_c& operator=(const init_ue_id_minus5_gc_r15_c& other); + ~init_ue_id_minus5_gc_r15_c() { destroy_(); } void set(types::options e = types::nulltype); types type() const { return type_; } SRSASN_CODE pack(bit_ref& bref) const; @@ -138,22 +157,22 @@ struct init_ue_id_minus5_gc_c { // getters fixed_bitstring<40>& ng_minus5_g_s_tmsi_part1() { - assert_choice_type(types::ng_minus5_g_s_tmsi_part1, type_, "InitialUE-Identity-5GC"); + assert_choice_type(types::ng_minus5_g_s_tmsi_part1, type_, "InitialUE-Identity-5GC-r15"); return c.get<fixed_bitstring<40> >(); } fixed_bitstring<40>& random_value() { - assert_choice_type(types::random_value, type_, "InitialUE-Identity-5GC"); + assert_choice_type(types::random_value, type_, "InitialUE-Identity-5GC-r15"); return c.get<fixed_bitstring<40> >(); } const fixed_bitstring<40>& ng_minus5_g_s_tmsi_part1() const { - assert_choice_type(types::ng_minus5_g_s_tmsi_part1, type_, "InitialUE-Identity-5GC"); + assert_choice_type(types::ng_minus5_g_s_tmsi_part1, type_, "InitialUE-Identity-5GC-r15"); return c.get<fixed_bitstring<40> >(); } const fixed_bitstring<40>& random_value() const { - assert_choice_type(types::random_value, type_, "InitialUE-Identity-5GC"); + assert_choice_type(types::random_value, type_, "InitialUE-Identity-5GC-r15"); return c.get<fixed_bitstring<40> >(); } fixed_bitstring<40>& set_ng_minus5_g_s_tmsi_part1(); @@ -168,9 +187,10 @@ private: // RRCEarlyDataRequest-v1590-IEs ::= SEQUENCE struct rrc_early_data_request_v1590_ies_s { - bool late_non_crit_ext_present = false; - bool non_crit_ext_present = false; - dyn_octstring late_non_crit_ext; + bool late_non_crit_ext_present = false; + bool non_crit_ext_present = false; + dyn_octstring late_non_crit_ext; + rrc_early_data_request_v1610_ies_s non_crit_ext; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -208,7 +228,7 @@ struct resume_cause_opts { mo_data, delay_tolerant_access_v1020, mo_voice_call_v1280, - spare1, + mt_edt_v1610, nulltype } value; @@ -248,9 +268,9 @@ struct rrc_conn_reest_request_r8_ies_s { // RRCConnectionRequest-5GC-r15-IEs ::= SEQUENCE struct rrc_conn_request_minus5_gc_r15_ies_s { - init_ue_id_minus5_gc_c ue_id; - establishment_cause_minus5_gc_e establishment_cause; - fixed_bitstring<1> spare; + init_ue_id_minus5_gc_r15_c ue_id_r15; + establishment_cause_minus5_gc_r15_e establishment_cause_r15; + fixed_bitstring<1> spare; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -396,6 +416,29 @@ struct rrc_conn_resume_request_r13_ies_s { void to_json(json_writer& j) const; }; +// RRCEarlyDataRequest-5GC-r16-IEs ::= SEQUENCE +struct rrc_early_data_request_minus5_gc_r16_ies_s { + struct establishment_cause_r16_opts { + enum options { mo_data, spare3, spare2, spare1, nulltype } value; + + const char* to_string() const; + }; + typedef enumerated<establishment_cause_r16_opts> establishment_cause_r16_e_; + + // member variables + bool late_non_crit_ext_present = false; + bool non_crit_ext_present = false; + fixed_bitstring<48> ng_minus5_g_s_tmsi_r16; + establishment_cause_r16_e_ establishment_cause_r16; + dyn_octstring ded_info_nas_r16; + dyn_octstring late_non_crit_ext; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // RRCEarlyDataRequest-r15-IEs ::= SEQUENCE struct rrc_early_data_request_r15_ies_s { struct establishment_cause_r15_opts { @@ -586,6 +629,41 @@ struct rrc_conn_resume_request_r13_s { // RRCEarlyDataRequest-r15 ::= SEQUENCE struct rrc_early_data_request_r15_s { struct crit_exts_c_ { + struct crit_exts_future_c_ { + struct types_opts { + enum options { rrc_early_data_request_minus5_gc_r16, crit_exts_future_r16, nulltype } value; + typedef int8_t number_type; + + const char* to_string() const; + int8_t to_number() const; + }; + typedef enumerated<types_opts> types; + + // choice methods + crit_exts_future_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 + rrc_early_data_request_minus5_gc_r16_ies_s& rrc_early_data_request_minus5_gc_r16() + { + assert_choice_type(types::rrc_early_data_request_minus5_gc_r16, type_, "criticalExtensionsFuture"); + return c; + } + const rrc_early_data_request_minus5_gc_r16_ies_s& rrc_early_data_request_minus5_gc_r16() const + { + assert_choice_type(types::rrc_early_data_request_minus5_gc_r16, type_, "criticalExtensionsFuture"); + return c; + } + rrc_early_data_request_minus5_gc_r16_ies_s& set_rrc_early_data_request_minus5_gc_r16(); + void set_crit_exts_future_r16(); + + private: + types type_; + rrc_early_data_request_minus5_gc_r16_ies_s c; + }; struct types_opts { enum options { rrc_early_data_request_r15, crit_exts_future, nulltype } value; @@ -595,6 +673,9 @@ struct rrc_early_data_request_r15_s { // choice methods crit_exts_c_() = default; + crit_exts_c_(const crit_exts_c_& other); + crit_exts_c_& operator=(const crit_exts_c_& other); + ~crit_exts_c_() { destroy_(); } void set(types::options e = types::nulltype); types type() const { return type_; } SRSASN_CODE pack(bit_ref& bref) const; @@ -604,19 +685,31 @@ struct rrc_early_data_request_r15_s { rrc_early_data_request_r15_ies_s& rrc_early_data_request_r15() { assert_choice_type(types::rrc_early_data_request_r15, type_, "criticalExtensions"); - return c; + return c.get<rrc_early_data_request_r15_ies_s>(); + } + crit_exts_future_c_& crit_exts_future() + { + assert_choice_type(types::crit_exts_future, type_, "criticalExtensions"); + return c.get<crit_exts_future_c_>(); } const rrc_early_data_request_r15_ies_s& rrc_early_data_request_r15() const { assert_choice_type(types::rrc_early_data_request_r15, type_, "criticalExtensions"); - return c; + return c.get<rrc_early_data_request_r15_ies_s>(); + } + const crit_exts_future_c_& crit_exts_future() const + { + assert_choice_type(types::crit_exts_future, type_, "criticalExtensions"); + return c.get<crit_exts_future_c_>(); } rrc_early_data_request_r15_ies_s& set_rrc_early_data_request_r15(); - void set_crit_exts_future(); + crit_exts_future_c_& set_crit_exts_future(); private: - types type_; - rrc_early_data_request_r15_ies_s c; + types type_; + choice_buffer_t<crit_exts_future_c_, rrc_early_data_request_r15_ies_s> c; + + void destroy_(); }; // member variables diff --git a/lib/include/srsran/asn1/rrc/ul_dcch_msg.h b/lib/include/srsran/asn1/rrc/ul_dcch_msg.h index 88ba0cc98..9c15be9e6 100644 --- a/lib/include/srsran/asn1/rrc/ul_dcch_msg.h +++ b/lib/include/srsran/asn1/rrc/ul_dcch_msg.h @@ -12,7 +12,7 @@ /******************************************************************************* * - * 3GPP TS ASN1 RRC v15.11.0 (2020-09) + * 3GPP TS ASN1 RRC v17.4.0 (2023-03) * ******************************************************************************/ @@ -92,6 +92,97 @@ struct tmgi_r9_s { void to_json(json_writer& j) const; }; +// GNSS-ValidityDuration-r17 ::= ENUMERATED +struct gnss_validity_dur_r17_opts { + enum options { + s10, + s20, + s30, + s40, + s50, + s60, + min5, + min10, + min15, + min20, + min25, + min30, + min50, + min90, + min120, + infinity, + nulltype + } value; + + const char* to_string() const; +}; +typedef enumerated<gnss_validity_dur_r17_opts> gnss_validity_dur_r17_e; + +// RRCConnectionSetupComplete-v1710-IEs ::= SEQUENCE +struct rrc_conn_setup_complete_v1710_ies_s { + bool gnss_validity_dur_r17_present = false; + bool non_crit_ext_present = false; + gnss_validity_dur_r17_e gnss_validity_dur_r17; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// RRCConnectionSetupComplete-v1690-IEs ::= SEQUENCE +struct rrc_conn_setup_complete_v1690_ies_s { + bool ul_rrc_segmentation_r16_present = false; + bool non_crit_ext_present = false; + rrc_conn_setup_complete_v1710_ies_s non_crit_ext; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// ResultsPerSSB-IndexIdle-r16 ::= SEQUENCE +struct results_per_ssb_idx_idle_r16_s { + struct ssb_results_r16_s_ { + bool ssb_rsrp_result_r16_present = false; + bool ssb_rsrq_result_r16_present = false; + uint8_t ssb_rsrp_result_r16 = 0; + uint8_t ssb_rsrq_result_r16 = 0; + }; + + // member variables + bool ssb_results_r16_present = false; + uint8_t ssb_idx_r16 = 0; + ssb_results_r16_s_ ssb_results_r16; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// RRCConnectionSetupComplete-v1610-IEs ::= SEQUENCE +struct rrc_conn_setup_complete_v1610_ies_s { + bool rlos_request_r16_present = false; + bool cp_cio_t_minus5_gs_optim_r16_present = false; + bool up_cio_t_minus5_gs_optim_r16_present = false; + bool pur_cfg_id_r16_present = false; + bool lte_m_r16_present = false; + bool iab_node_ind_r16_present = false; + bool non_crit_ext_present = false; + fixed_bitstring<20> pur_cfg_id_r16; + rrc_conn_setup_complete_v1690_ies_s non_crit_ext; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// ResultsPerSSB-IndexList-r16 ::= SEQUENCE (SIZE (1..32)) OF ResultsPerSSB-IndexIdle-r16 +using results_per_ssb_idx_list_r16_l = dyn_array<results_per_ssb_idx_idle_r16_s>; + // MeasResultIdleEUTRA-r15 ::= SEQUENCE struct meas_result_idle_eutra_r15_s { struct meas_result_r15_s_ { @@ -112,6 +203,41 @@ struct meas_result_idle_eutra_r15_s { void to_json(json_writer& j) const; }; +// MeasResultsPerCellIdleNR-r16 ::= SEQUENCE +struct meas_results_per_cell_idle_nr_r16_s { + struct meas_idle_result_nr_r16_s_ { + bool rsrp_result_nr_r16_present = false; + bool rsrq_result_nr_r16_present = false; + bool result_rs_idx_list_r16_present = false; + uint8_t rsrp_result_nr_r16 = 0; + uint8_t rsrq_result_nr_r16 = 0; + results_per_ssb_idx_list_r16_l result_rs_idx_list_r16; + }; + + // member variables + bool ext = false; + uint16_t pci_nr_r16 = 0; + meas_idle_result_nr_r16_s_ meas_idle_result_nr_r16; + // ... + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// RRCConnectionReconfigurationComplete-v1710-IEs ::= SEQUENCE +struct rrc_conn_recfg_complete_v1710_ies_s { + bool gnss_validity_dur_r17_present = false; + bool non_crit_ext_present = false; + gnss_validity_dur_r17_e gnss_validity_dur_r17; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // RRCConnectionSetupComplete-v1540-IEs ::= SEQUENCE struct rrc_conn_setup_complete_v1540_ies_s { struct guami_type_r15_opts { @@ -122,10 +248,11 @@ struct rrc_conn_setup_complete_v1540_ies_s { typedef enumerated<guami_type_r15_opts> guami_type_r15_e_; // member variables - bool gummei_type_v1540_present = false; - bool guami_type_r15_present = false; - bool non_crit_ext_present = false; - guami_type_r15_e_ guami_type_r15; + bool gummei_type_v1540_present = false; + bool guami_type_r15_present = false; + bool non_crit_ext_present = false; + guami_type_r15_e_ guami_type_r15; + rrc_conn_setup_complete_v1610_ies_s non_crit_ext; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -198,6 +325,35 @@ private: // MeasResultIdleListEUTRA-r15 ::= SEQUENCE (SIZE (1..8)) OF MeasResultIdleEUTRA-r15 using meas_result_idle_list_eutra_r15_l = dyn_array<meas_result_idle_eutra_r15_s>; +// MeasResultIdleNR-r16 ::= SEQUENCE +struct meas_result_idle_nr_r16_s { + using meas_results_per_cell_list_idle_nr_r16_l_ = dyn_array<meas_results_per_cell_idle_nr_r16_s>; + + // member variables + bool ext = false; + uint32_t carrier_freq_nr_r16 = 0; + meas_results_per_cell_list_idle_nr_r16_l_ meas_results_per_cell_list_idle_nr_r16; + // ... + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// RRCConnectionReconfigurationComplete-v1700-IEs ::= SEQUENCE +struct rrc_conn_recfg_complete_v1700_ies_s { + bool sel_cond_recfg_to_apply_r17_present = false; + bool non_crit_ext_present = false; + uint8_t sel_cond_recfg_to_apply_r17 = 1; + rrc_conn_recfg_complete_v1710_ies_s non_crit_ext; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // RRCConnectionSetupComplete-v1530-IEs ::= SEQUENCE struct rrc_conn_setup_complete_v1530_ies_s { using s_nssai_list_r15_l_ = dyn_array<s_nssai_r15_c>; @@ -317,6 +473,22 @@ struct meas_result_idle_r15_s { void to_json(json_writer& j) const; }; +// MeasResultListExtIdle-r16 ::= SEQUENCE (SIZE (1..5)) OF MeasResultIdleListEUTRA-r15 +using meas_result_list_ext_idle_r16_l = dyn_array<meas_result_idle_list_eutra_r15_l>; + +// MeasResultListIdleNR-r16 ::= SEQUENCE (SIZE (1..8)) OF MeasResultIdleNR-r16 +using meas_result_list_idle_nr_r16_l = dyn_array<meas_result_idle_nr_r16_s>; + +// OverheatingAssistance-v1710 ::= SEQUENCE +struct overheat_assist_v1710_s { + dyn_octstring overheat_assist_for_scg_fr2_minus2_r17; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // PerCC-GapIndication-r14 ::= SEQUENCE struct per_cc_gap_ind_r14_s { struct gap_ind_r14_opts { @@ -336,12 +508,36 @@ struct per_cc_gap_ind_r14_s { void to_json(json_writer& j) const; }; +// RACH-Report-v1610 ::= SEQUENCE +struct rach_report_v1610_s { + uint8_t init_cel_r16 = 0; + bool edt_fallback_r16 = false; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // RRCConnectionReconfigurationComplete-v1530-IEs ::= SEQUENCE struct rrc_conn_recfg_complete_v1530_ies_s { - bool log_meas_available_bt_r15_present = false; - bool log_meas_available_wlan_r15_present = false; - bool flight_path_info_available_r15_present = false; - bool non_crit_ext_present = false; + bool log_meas_available_bt_r15_present = false; + bool log_meas_available_wlan_r15_present = false; + bool flight_path_info_available_r15_present = false; + bool non_crit_ext_present = false; + rrc_conn_recfg_complete_v1700_ies_s non_crit_ext; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// RRCConnectionReestablishmentComplete-v1710-IEs ::= SEQUENCE +struct rrc_conn_reest_complete_v1710_ies_s { + bool gnss_validity_dur_r17_present = false; + bool non_crit_ext_present = false; + gnss_validity_dur_r17_e gnss_validity_dur_r17; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -362,6 +558,18 @@ struct rrc_conn_setup_complete_v1430_ies_s { void to_json(json_writer& j) const; }; +// UEInformationResponse-v1710-IEs ::= SEQUENCE +struct ue_info_resp_v1710_ies_s { + bool coarse_location_info_r17_present = false; + bool non_crit_ext_present = false; + dyn_octstring coarse_location_info_r17; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // VictimSystemType-r11 ::= SEQUENCE struct victim_sys_type_r11_s { bool gps_r11_present = false; @@ -489,7 +697,7 @@ struct flight_path_info_report_r15_s { // member variables bool flight_path_r15_present = false; - bool non_crit_ext_present = false; + bool dummy_present = false; flight_path_r15_l_ flight_path_r15; // sequence methods @@ -519,10 +727,11 @@ struct rrc_conn_recfg_complete_v1510_ies_s { // RRCConnectionReestablishmentComplete-v1530-IEs ::= SEQUENCE struct rrc_conn_reest_complete_v1530_ies_s { - bool log_meas_available_bt_r15_present = false; - bool log_meas_available_wlan_r15_present = false; - bool flight_path_info_available_r15_present = false; - bool non_crit_ext_present = false; + bool log_meas_available_bt_r15_present = false; + bool log_meas_available_wlan_r15_present = false; + bool flight_path_info_available_r15_present = false; + bool non_crit_ext_present = false; + rrc_conn_reest_complete_v1710_ies_s non_crit_ext; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -542,17 +751,71 @@ struct rrc_conn_setup_complete_v1330_ies_s { void to_json(json_writer& j) const; }; +// UEAssistanceInformation-v1710-IEs ::= SEQUENCE +struct ueassist_info_v1710_ies_s { + bool overheat_assist_v1710_present = false; + bool non_crit_ext_present = false; + overheat_assist_v1710_s overheat_assist_v1710; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// UEInformationResponse-v1610-IEs ::= SEQUENCE +struct ue_info_resp_v1610_ies_s { + bool rach_report_v1610_present = false; + bool meas_result_list_ext_idle_r16_present = false; + bool meas_result_list_idle_nr_r16_present = false; + bool non_crit_ext_present = false; + rach_report_v1610_s rach_report_v1610; + meas_result_list_ext_idle_r16_l meas_result_list_ext_idle_r16; + meas_result_list_idle_nr_r16_l meas_result_list_idle_nr_r16; + ue_info_resp_v1710_ies_s non_crit_ext; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// VictimSystemType-v1610 ::= SEQUENCE +struct victim_sys_type_v1610_s { + bool navic_r16_present = false; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // VisitedCellInfoList-r12 ::= SEQUENCE (SIZE (1..16)) OF VisitedCellInfo-r12 using visited_cell_info_list_r12_l = dyn_array<visited_cell_info_r12_s>; +// InDeviceCoexIndication-v1610-IEs ::= SEQUENCE +struct in_dev_coex_ind_v1610_ies_s { + bool victim_sys_type_v1610_present = false; + bool non_crit_ext_present = false; + victim_sys_type_v1610_s victim_sys_type_v1610; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // MRDC-AssistanceInfo-r15 ::= SEQUENCE struct mrdc_assist_info_r15_s { - using affected_carrier_freq_comb_info_list_mrdc_r15_l_ = dyn_array<affected_carrier_freq_comb_info_mrdc_r15_s>; + using affected_carrier_freq_comb_info_list_mrdc_r15_l_ = dyn_array<affected_carrier_freq_comb_info_mrdc_r15_s>; + using affected_carrier_freq_comb_info_list_mrdc_v1610_l_ = dyn_array<victim_sys_type_v1610_s>; // member variables bool ext = false; affected_carrier_freq_comb_info_list_mrdc_r15_l_ affected_carrier_freq_comb_info_list_mrdc_r15; // ... + // group 0 + copy_ptr<affected_carrier_freq_comb_info_list_mrdc_v1610_l_> affected_carrier_freq_comb_info_list_mrdc_v1610; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -563,6 +826,16 @@ struct mrdc_assist_info_r15_s { // MobilityHistoryReport-r12 ::= VisitedCellInfoList-r12 using mob_history_report_r12_l = visited_cell_info_list_r12_l; +// OverheatingAssistance-v1610 ::= SEQUENCE +struct overheat_assist_v1610_s { + dyn_octstring overheat_assist_for_scg_r16; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // RRCConnectionReconfigurationComplete-v1430-IEs ::= SEQUENCE struct rrc_conn_recfg_complete_v1430_ies_s { bool per_cc_gap_ind_list_r14_present = false; @@ -622,6 +895,28 @@ struct traffic_pattern_info_v1530_s { void to_json(json_writer& j) const; }; +// UEAssistanceInformation-v1700-IEs ::= SEQUENCE +struct ueassist_info_v1700_ies_s { + struct scg_deactivation_pref_r17_opts { + enum options { scg_deactivation_preferred, no_pref, nulltype } value; + + const char* to_string() const; + }; + typedef enumerated<scg_deactivation_pref_r17_opts> scg_deactivation_pref_r17_e_; + + // member variables + bool ul_data_r17_present = false; + bool scg_deactivation_pref_r17_present = false; + bool non_crit_ext_present = false; + scg_deactivation_pref_r17_e_ scg_deactivation_pref_r17; + ueassist_info_v1710_ies_s non_crit_ext; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // UEInformationResponse-v1530-IEs ::= SEQUENCE struct ue_info_resp_v1530_ies_s { bool meas_result_list_idle_r15_present = false; @@ -629,6 +924,7 @@ struct ue_info_resp_v1530_ies_s { bool non_crit_ext_present = false; meas_result_list_idle_r15_l meas_result_list_idle_r15; flight_path_info_report_r15_s flight_path_info_report_r15; + ue_info_resp_v1610_ies_s non_crit_ext; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -667,6 +963,9 @@ struct conn_est_fail_report_r11_s { meas_result_list_geran_l meas_result_list_geran_r11; meas_result_list2_cdma2000_r9_l meas_results_cdma2000_r11; }; + struct meas_result_list_nr_v1640_s_ { + uint32_t carrier_freq_nr_r16 = 0; + }; // member variables bool ext = false; @@ -694,6 +993,11 @@ struct conn_est_fail_report_r11_s { // group 2 copy_ptr<log_meas_result_list_bt_r15_l> log_meas_result_list_bt_r15; copy_ptr<log_meas_result_list_wlan_r15_l> log_meas_result_list_wlan_r15; + // group 3 + copy_ptr<meas_result_cell_list_nr_r15_l> meas_result_list_nr_r16; + // group 4 + copy_ptr<meas_result_list_nr_v1640_s_> meas_result_list_nr_v1640; + copy_ptr<meas_result_freq_list_nr_r16_l> meas_result_list_ext_nr_r16; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -715,9 +1019,41 @@ struct drb_count_info_s { // InDeviceCoexIndication-v1530-IEs ::= SEQUENCE struct in_dev_coex_ind_v1530_ies_s { - bool mrdc_assist_info_r15_present = false; - bool non_crit_ext_present = false; - mrdc_assist_info_r15_s mrdc_assist_info_r15; + bool mrdc_assist_info_r15_present = false; + bool non_crit_ext_present = false; + mrdc_assist_info_r15_s mrdc_assist_info_r15; + in_dev_coex_ind_v1610_ies_s non_crit_ext; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// MBMS-ROM-Info-r16 ::= SEQUENCE +struct mbms_rom_info_r16_s { + struct mbms_rom_subcarrier_spacing_r16_opts { + enum options { khz2dot5, khz0dot37, nulltype } value; + typedef float number_type; + + const char* to_string() const; + float to_number() const; + const char* to_number_string() const; + }; + typedef enumerated<mbms_rom_subcarrier_spacing_r16_opts> mbms_rom_subcarrier_spacing_r16_e_; + struct mbms_bw_r16_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<mbms_bw_r16_opts> mbms_bw_r16_e_; + + // member variables + uint32_t mbms_rom_freq_r16 = 0; + mbms_rom_subcarrier_spacing_r16_e_ mbms_rom_subcarrier_spacing_r16; + mbms_bw_r16_e_ mbms_bw_r16; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -790,6 +1126,19 @@ struct sl_v2x_comm_tx_res_req_r14_s { // TrafficPatternInfoList-v1530 ::= SEQUENCE (SIZE (1..8)) OF TrafficPatternInfo-v1530 using traffic_pattern_info_list_v1530_l = dyn_array<traffic_pattern_info_v1530_s>; +// UEAssistanceInformation-v1610-IEs ::= SEQUENCE +struct ueassist_info_v1610_ies_s { + bool overheat_assist_v1610_present = false; + bool non_crit_ext_present = false; + overheat_assist_v1610_s overheat_assist_v1610; + ueassist_info_v1700_ies_s non_crit_ext; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // UEInformationResponse-v1250-IEs ::= SEQUENCE struct ue_info_resp_v1250_ies_s { bool mob_history_report_r12_present = false; @@ -979,12 +1328,29 @@ struct mbms_service_info_r13_s { void to_json(json_writer& j) const; }; -// MeasResultFreqFailNR-r15 ::= SEQUENCE -struct meas_result_freq_fail_nr_r15_s { - bool ext = false; - bool meas_result_cell_list_r15_present = false; - uint32_t carrier_freq_r15 = 0; - meas_result_cell_list_nr_r15_l meas_result_cell_list_r15; +// MBMSInterestIndication-v1610-IEs ::= SEQUENCE +struct mbms_interest_ind_v1610_ies_s { + using mbms_rom_info_list_r16_l_ = dyn_array<mbms_rom_info_r16_s>; + + // member variables + bool mbms_rom_info_list_r16_present = false; + bool non_crit_ext_present = false; + mbms_rom_info_list_r16_l_ mbms_rom_info_list_r16; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// MeasResult3EUTRA-r15 ::= SEQUENCE +struct meas_result3_eutra_r15_s { + bool ext = false; + bool meas_result_serving_cell_r15_present = false; + bool meas_result_neigh_cell_list_r15_present = false; + uint32_t carrier_freq_r15 = 0; + meas_result_eutra_s meas_result_serving_cell_r15; + meas_result_list_eutra_l meas_result_neigh_cell_list_r15; // ... // sequence methods @@ -1040,6 +1406,18 @@ struct rrc_conn_reest_complete_v1020_ies_s { void to_json(json_writer& j) const; }; +// RRCConnectionResumeComplete-v1710-IEs ::= SEQUENCE +struct rrc_conn_resume_complete_v1710_ies_s { + bool gnss_validity_dur_r17_present = false; + bool non_crit_ext_present = false; + gnss_validity_dur_r17_e gnss_validity_dur_r17; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // RRCConnectionSetupComplete-v1130-IEs ::= SEQUENCE struct rrc_conn_setup_complete_v1130_ies_s { bool conn_est_fail_info_available_r11_present = false; @@ -1227,9 +1605,10 @@ struct ueassist_info_v1530_ies_s { }; // member variables - bool sps_assist_info_v1530_present = false; - bool non_crit_ext_present = false; - sps_assist_info_v1530_s_ sps_assist_info_v1530; + bool sps_assist_info_v1530_present = false; + bool non_crit_ext_present = false; + sps_assist_info_v1530_s_ sps_assist_info_v1530; + ueassist_info_v1610_ies_s non_crit_ext; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -1305,6 +1684,19 @@ struct bw_pref_r14_s { void to_json(json_writer& j) const; }; +// CellGlobalIdNR-r16 ::= SEQUENCE +struct cell_global_id_nr_r16_s { + bool tac_r16_present = false; + plmn_id_s plmn_id_r16; + fixed_bitstring<36> cell_id_r16; + fixed_bitstring<24> tac_r16; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // CounterCheckResponse-v1530-IEs ::= SEQUENCE struct counter_check_resp_v1530_ies_s { bool drb_count_info_list_ext_r15_present = false; @@ -1461,9 +1853,10 @@ struct mbms_interest_ind_v1540_ies_s { using mbms_rom_info_list_r15_l_ = dyn_array<mbms_rom_info_r15_s>; // member variables - bool mbms_rom_info_list_r15_present = false; - bool non_crit_ext_present = false; - mbms_rom_info_list_r15_l_ mbms_rom_info_list_r15; + bool mbms_rom_info_list_r15_present = false; + bool non_crit_ext_present = false; + mbms_rom_info_list_r15_l_ mbms_rom_info_list_r15; + mbms_interest_ind_v1610_ies_s non_crit_ext; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -1474,6 +1867,9 @@ struct mbms_interest_ind_v1540_ies_s { // MeasResultFreqListFailNR-r15 ::= SEQUENCE (SIZE (1..5)) OF MeasResultFreqFailNR-r15 using meas_result_freq_list_fail_nr_r15_l = dyn_array<meas_result_freq_fail_nr_r15_s>; +// MeasResultList3EUTRA-r15 ::= SEQUENCE (SIZE (1..8)) OF MeasResult3EUTRA-r15 +using meas_result_list3_eutra_r15_l = dyn_array<meas_result3_eutra_r15_s>; + // RRCConnectionReconfigurationComplete-v1020-IEs ::= SEQUENCE struct rrc_conn_recfg_complete_v1020_ies_s { bool rlf_info_available_r10_present = false; @@ -1500,6 +1896,25 @@ struct rrc_conn_reest_complete_v8a0_ies_s { void to_json(json_writer& j) const; }; +// RRCConnectionResumeComplete-v1610-IEs ::= SEQUENCE +struct rrc_conn_resume_complete_v1610_ies_s { + bool meas_result_list_idle_r16_present = false; + bool meas_result_list_ext_idle_r16_present = false; + bool meas_result_list_idle_nr_r16_present = false; + bool scg_cfg_resp_nr_r16_present = false; + bool non_crit_ext_present = false; + meas_result_list_idle_r15_l meas_result_list_idle_r16; + meas_result_list_ext_idle_r16_l meas_result_list_ext_idle_r16; + meas_result_list_idle_nr_r16_l meas_result_list_idle_nr_r16; + dyn_octstring scg_cfg_resp_nr_r16; + rrc_conn_resume_complete_v1710_ies_s non_crit_ext; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // RRCConnectionSetupComplete-v1020-IEs ::= SEQUENCE struct rrc_conn_setup_complete_v1020_ies_s { struct gummei_type_r10_opts { @@ -1944,6 +2359,71 @@ using count_resp_list_r10_l = dyn_array<count_resp_info_r10_s>; // DRB-CountInfoList ::= SEQUENCE (SIZE (0..11)) OF DRB-CountInfo using drb_count_info_list_l = dyn_array<drb_count_info_s>; +// FailedLogicalChannelIdentity-r16 ::= SEQUENCE +struct failed_lc_ch_id_r16_s { + struct cell_group_ind_r16_opts { + enum options { mn, sn, nulltype } value; + + const char* to_string() const; + }; + typedef enumerated<cell_group_ind_r16_opts> cell_group_ind_r16_e_; + + // member variables + bool lc_ch_id_r16_present = false; + bool lc_ch_id_ext_r16_present = false; + cell_group_ind_r16_e_ cell_group_ind_r16; + uint8_t lc_ch_id_r16 = 1; + uint8_t lc_ch_id_ext_r16 = 32; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// FailureReportMCG-r16 ::= SEQUENCE +struct fail_report_mcg_r16_s { + struct fail_type_r16_opts { + enum options { + t310_expiry, + random_access_problem, + rlc_max_num_retx, + t312_expiry, + spare4, + spare3, + spare2, + spare1, + nulltype + } value; + typedef uint16_t number_type; + + const char* to_string() const; + uint16_t to_number() const; + }; + typedef enumerated<fail_type_r16_opts> fail_type_r16_e_; + + // member variables + bool ext = false; + bool fail_type_r16_present = false; + bool meas_result_freq_list_eutra_r16_present = false; + bool meas_result_freq_list_nr_r16_present = false; + bool meas_result_freq_list_geran_r16_present = false; + bool meas_result_freq_list_utra_r16_present = false; + bool meas_result_scg_r16_present = false; + fail_type_r16_e_ fail_type_r16; + meas_result_list3_eutra_r15_l meas_result_freq_list_eutra_r16; + meas_result_freq_list_fail_nr_r15_l meas_result_freq_list_nr_r16; + meas_result_list2_geran_r10_l meas_result_freq_list_geran_r16; + meas_result_list2_utra_r9_l meas_result_freq_list_utra_r16; + dyn_octstring meas_result_scg_r16; + // ... + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // FailureReportSCG-NR-r15 ::= SEQUENCE struct fail_report_scg_nr_r15_s { struct fail_type_r15_opts { @@ -1954,6 +2434,7 @@ struct fail_report_scg_nr_r15_s { synch_recfg_fail_scg, scg_recfg_fail, srb3_integrity_fail, + dummy, nulltype } value; typedef uint16_t number_type; @@ -1962,6 +2443,24 @@ struct fail_report_scg_nr_r15_s { uint16_t to_number() const; }; typedef enumerated<fail_type_r15_opts> fail_type_r15_e_; + struct fail_type_v1610_opts { + enum options { + t312_expiry, + scg_lbt_fail, + beam_fail_recovery_fail, + bh_rlf_r16, + beam_fail_r17, + spare3, + spare2, + spare1, + nulltype + } value; + typedef uint16_t number_type; + + const char* to_string() const; + uint16_t to_number() const; + }; + typedef enumerated<fail_type_v1610_opts> fail_type_v1610_e_; // member variables bool ext = false; @@ -1971,6 +2470,12 @@ struct fail_report_scg_nr_r15_s { meas_result_freq_list_fail_nr_r15_l meas_result_freq_list_nr_r15; dyn_octstring meas_result_scg_r15; // ... + // group 0 + bool fail_type_v1610_present = false; + copy_ptr<location_info_r10_s> location_info_r16; + copy_ptr<log_meas_result_list_bt_r15_l> log_meas_result_list_bt_r16; + copy_ptr<log_meas_result_list_wlan_r15_l> log_meas_result_list_wlan_r16; + fail_type_v1610_e_ fail_type_v1610; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -2065,6 +2570,17 @@ struct proximity_ind_v930_ies_s { void to_json(json_writer& j) const; }; +// RACH-Report-r16 ::= SEQUENCE +struct rach_report_r16_s { + uint8_t nof_preambs_sent_r16 = 1; + bool contention_detected_r16 = false; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // RLF-Report-r9 ::= SEQUENCE struct rlf_report_r9_s { struct meas_result_last_serv_cell_r9_s_ { @@ -2271,6 +2787,116 @@ struct rlf_report_r9_s { struct failed_pcell_id_v1250_s_ { fixed_bitstring<16> tac_failed_pcell_r12; }; + struct failed_nr_pcell_id_r16_c_ { + struct pci_arfcn_s_ { + uint16_t pci_r16 = 0; + uint32_t carrier_freq_r16 = 0; + }; + struct types_opts { + enum options { cell_global_id, pci_arfcn, nulltype } value; + + const char* to_string() const; + }; + typedef enumerated<types_opts> types; + + // choice methods + failed_nr_pcell_id_r16_c_() = default; + failed_nr_pcell_id_r16_c_(const failed_nr_pcell_id_r16_c_& other); + failed_nr_pcell_id_r16_c_& operator=(const failed_nr_pcell_id_r16_c_& other); + ~failed_nr_pcell_id_r16_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 + cell_global_id_nr_r16_s& cell_global_id() + { + assert_choice_type(types::cell_global_id, type_, "failedNR-PCellId-r16"); + return c.get<cell_global_id_nr_r16_s>(); + } + pci_arfcn_s_& pci_arfcn() + { + assert_choice_type(types::pci_arfcn, type_, "failedNR-PCellId-r16"); + return c.get<pci_arfcn_s_>(); + } + const cell_global_id_nr_r16_s& cell_global_id() const + { + assert_choice_type(types::cell_global_id, type_, "failedNR-PCellId-r16"); + return c.get<cell_global_id_nr_r16_s>(); + } + const pci_arfcn_s_& pci_arfcn() const + { + assert_choice_type(types::pci_arfcn, type_, "failedNR-PCellId-r16"); + return c.get<pci_arfcn_s_>(); + } + cell_global_id_nr_r16_s& set_cell_global_id(); + pci_arfcn_s_& set_pci_arfcn(); + + private: + types type_; + choice_buffer_t<cell_global_id_nr_r16_s, pci_arfcn_s_> c; + + void destroy_(); + }; + struct reconnect_cell_id_r16_c_ { + struct eutra_reconnect_cell_id_s_ { + bool tac_epc_r16_present = false; + bool tac_minus5_gc_r16_present = false; + cell_global_id_eutra_s cell_global_id_r16; + fixed_bitstring<16> tac_epc_r16; + fixed_bitstring<24> tac_minus5_gc_r16; + }; + struct types_opts { + enum options { nr_reconnect_cell_id, eutra_reconnect_cell_id, nulltype } value; + + const char* to_string() const; + }; + typedef enumerated<types_opts> types; + + // choice methods + reconnect_cell_id_r16_c_() = default; + reconnect_cell_id_r16_c_(const reconnect_cell_id_r16_c_& other); + reconnect_cell_id_r16_c_& operator=(const reconnect_cell_id_r16_c_& other); + ~reconnect_cell_id_r16_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 + cell_global_id_nr_r16_s& nr_reconnect_cell_id() + { + assert_choice_type(types::nr_reconnect_cell_id, type_, "reconnectCellId-r16"); + return c.get<cell_global_id_nr_r16_s>(); + } + eutra_reconnect_cell_id_s_& eutra_reconnect_cell_id() + { + assert_choice_type(types::eutra_reconnect_cell_id, type_, "reconnectCellId-r16"); + return c.get<eutra_reconnect_cell_id_s_>(); + } + const cell_global_id_nr_r16_s& nr_reconnect_cell_id() const + { + assert_choice_type(types::nr_reconnect_cell_id, type_, "reconnectCellId-r16"); + return c.get<cell_global_id_nr_r16_s>(); + } + const eutra_reconnect_cell_id_s_& eutra_reconnect_cell_id() const + { + assert_choice_type(types::eutra_reconnect_cell_id, type_, "reconnectCellId-r16"); + return c.get<eutra_reconnect_cell_id_s_>(); + } + cell_global_id_nr_r16_s& set_nr_reconnect_cell_id(); + eutra_reconnect_cell_id_s_& set_eutra_reconnect_cell_id(); + + private: + types type_; + choice_buffer_t<cell_global_id_nr_r16_s, eutra_reconnect_cell_id_s_> c; + + void destroy_(); + }; + struct meas_result_list_nr_v1640_s_ { + uint32_t carrier_freq_nr_r16 = 0; + }; // member variables bool ext = false; @@ -2307,6 +2933,16 @@ struct rlf_report_r9_s { // group 6 copy_ptr<log_meas_result_list_bt_r15_l> log_meas_result_list_bt_r15; copy_ptr<log_meas_result_list_wlan_r15_l> log_meas_result_list_wlan_r15; + // group 7 + bool time_until_reconn_r16_present = false; + copy_ptr<meas_result_cell_list_nr_r15_l> meas_result_list_nr_r16; + copy_ptr<cell_global_id_nr_r16_s> prev_nr_pcell_id_r16; + copy_ptr<failed_nr_pcell_id_r16_c_> failed_nr_pcell_id_r16; + copy_ptr<reconnect_cell_id_r16_c_> reconnect_cell_id_r16; + uint32_t time_until_reconn_r16 = 0; + // group 8 + copy_ptr<meas_result_list_nr_v1640_s_> meas_result_list_nr_v1640; + copy_ptr<meas_result_freq_list_nr_r16_l> meas_result_list_ext_nr_r16; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -2341,11 +2977,12 @@ struct rrc_conn_reest_complete_v920_ies_s { // RRCConnectionResumeComplete-v1530-IEs ::= SEQUENCE struct rrc_conn_resume_complete_v1530_ies_s { - bool log_meas_available_bt_r15_present = false; - bool log_meas_available_wlan_r15_present = false; - bool idle_meas_available_r15_present = false; - bool flight_path_info_available_r15_present = false; - bool non_crit_ext_present = false; + bool log_meas_available_bt_r15_present = false; + bool log_meas_available_wlan_r15_present = false; + bool idle_meas_available_r15_present = false; + bool flight_path_info_available_r15_present = false; + bool non_crit_ext_present = false; + rrc_conn_resume_complete_v1610_ies_s non_crit_ext; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -2689,6 +3326,28 @@ struct failed_lc_ch_info_r15_s { void to_json(json_writer& j) const; }; +// FailureInformation-r16-IEs ::= SEQUENCE +struct fail_info_r16_ies_s { + struct fail_type_r16_opts { + enum options { dupl, daps_ho_fail, spare2, spare1, nulltype } value; + + const char* to_string() const; + }; + typedef enumerated<fail_type_r16_opts> fail_type_r16_e_; + + // member variables + bool failed_lc_ch_id_r16_present = false; + bool fail_type_r16_present = false; + bool non_crit_ext_present = false; + failed_lc_ch_id_r16_s failed_lc_ch_id_r16; + fail_type_r16_e_ fail_type_r16; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // InDeviceCoexIndication-r11-IEs ::= SEQUENCE struct in_dev_coex_ind_r11_ies_s { bool affected_carrier_freq_list_r11_present = false; @@ -2789,6 +3448,20 @@ struct mbms_interest_ind_r11_ies_s { void to_json(json_writer& j) const; }; +// MCGFailureInformation-r16-IEs ::= SEQUENCE +struct mcg_fail_info_r16_ies_s { + bool fail_report_mcg_r16_present = false; + bool late_non_crit_ext_present = false; + bool non_crit_ext_present = false; + fail_report_mcg_r16_s fail_report_mcg_r16; + dyn_octstring late_non_crit_ext; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // MeasReportAppLayer-r15-IEs ::= SEQUENCE struct meas_report_app_layer_r15_ies_s { struct service_type_r15_opts { @@ -2812,6 +3485,146 @@ struct meas_report_app_layer_r15_ies_s { void to_json(json_writer& j) const; }; +// PURConfigurationRequest-r16-IEs ::= SEQUENCE +struct pur_cfg_request_r16_ies_s { + struct pur_cfg_request_r16_c_ { + struct pur_setup_request_s_ { + struct requested_num_occasions_r16_opts { + enum options { one, infinite, nulltype } value; + typedef uint8_t number_type; + + const char* to_string() const; + uint8_t to_number() const; + }; + typedef enumerated<requested_num_occasions_r16_opts> requested_num_occasions_r16_e_; + struct requested_tbs_r16_opts { + enum options { + b328, + b344, + b376, + b392, + b408, + b424, + b440, + b456, + b472, + b488, + b504, + b536, + b568, + b584, + b616, + b648, + b680, + b712, + b744, + b776, + b808, + b840, + b872, + b904, + b936, + b968, + b1000, + b1032, + b1064, + b1096, + b1128, + b1160, + b1192, + b1224, + b1256, + b1288, + b1320, + b1352, + b1384, + b1416, + b1480, + b1544, + b1608, + b1672, + b1736, + b1800, + b1864, + b1928, + b1992, + b2024, + b2088, + b2152, + b2216, + b2280, + b2344, + b2408, + b2472, + b2536, + b2600, + b2664, + b2728, + b2792, + b2856, + b2984, + nulltype + } value; + typedef uint16_t number_type; + + const char* to_string() const; + uint16_t to_number() const; + }; + typedef enumerated<requested_tbs_r16_opts> requested_tbs_r16_e_; + + // member variables + bool requested_periodicity_and_offset_r16_present = false; + bool rrc_ack_r16_present = false; + requested_num_occasions_r16_e_ requested_num_occasions_r16; + pur_periodicity_and_offset_r16_c requested_periodicity_and_offset_r16; + requested_tbs_r16_e_ requested_tbs_r16; + }; + struct types_opts { + enum options { pur_release_request, pur_setup_request, nulltype } value; + + const char* to_string() const; + }; + typedef enumerated<types_opts> types; + + // choice methods + pur_cfg_request_r16_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 + pur_setup_request_s_& pur_setup_request() + { + assert_choice_type(types::pur_setup_request, type_, "pur-ConfigRequest-r16"); + return c; + } + const pur_setup_request_s_& pur_setup_request() const + { + assert_choice_type(types::pur_setup_request, type_, "pur-ConfigRequest-r16"); + return c; + } + void set_pur_release_request(); + pur_setup_request_s_& set_pur_setup_request(); + + private: + types type_; + pur_setup_request_s_ c; + }; + + // member variables + bool pur_cfg_request_r16_present = false; + bool late_non_crit_ext_present = false; + bool non_crit_ext_present = false; + pur_cfg_request_r16_c_ pur_cfg_request_r16; + dyn_octstring late_non_crit_ext; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // ProximityIndication-r9-IEs ::= SEQUENCE struct proximity_ind_r9_ies_s { struct type_r9_opts { @@ -3046,16 +3859,10 @@ struct ueassist_info_r11_ies_s { // UEInformationResponse-r9-IEs ::= SEQUENCE struct ue_info_resp_r9_ies_s { - struct rach_report_r9_s_ { - uint8_t nof_preambs_sent_r9 = 1; - bool contention_detected_r9 = false; - }; - - // member variables bool rach_report_r9_present = false; bool rlf_report_r9_present = false; bool non_crit_ext_present = false; - rach_report_r9_s_ rach_report_r9; + rach_report_r16_s rach_report_r9; rlf_report_r9_s rlf_report_r9; ue_info_resp_v930_ies_s non_crit_ext; @@ -3065,6 +3872,29 @@ struct ue_info_resp_r9_ies_s { void to_json(json_writer& j) const; }; +// ULDedicatedMessageSegment-r16-IEs ::= SEQUENCE +struct ul_ded_msg_segment_r16_ies_s { + struct rrc_msg_segment_type_r16_opts { + enum options { not_last_segment, last_segment, nulltype } value; + + const char* to_string() const; + }; + typedef enumerated<rrc_msg_segment_type_r16_opts> rrc_msg_segment_type_r16_e_; + + // member variables + bool late_non_crit_ext_present = false; + bool non_crit_ext_present = false; + uint8_t segment_num_r16 = 0; + dyn_octstring rrc_msg_segment_container_r16; + rrc_msg_segment_type_r16_e_ rrc_msg_segment_type_r16; + dyn_octstring late_non_crit_ext; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // ULHandoverPreparationTransfer-r8-IEs ::= SEQUENCE struct ul_ho_prep_transfer_r8_ies_s { bool meid_present = false; @@ -3080,6 +3910,82 @@ struct ul_ho_prep_transfer_r8_ies_s { void to_json(json_writer& j) const; }; +// ULInformationTransfer-r16-IEs ::= SEQUENCE +struct ul_info_transfer_r16_ies_s { + struct ded_info_type_r16_c_ { + struct types_opts { + enum options { ded_info_nas_r16, ded_info_cdma2000_minus1_xrtt_r16, ded_info_cdma2000_hrpd_r16, nulltype } value; + + const char* to_string() const; + }; + typedef enumerated<types_opts> types; + + // choice methods + ded_info_type_r16_c_() = default; + ded_info_type_r16_c_(const ded_info_type_r16_c_& other); + ded_info_type_r16_c_& operator=(const ded_info_type_r16_c_& other); + ~ded_info_type_r16_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 + dyn_octstring& ded_info_nas_r16() + { + assert_choice_type(types::ded_info_nas_r16, type_, "dedicatedInfoType-r16"); + return c.get<dyn_octstring>(); + } + dyn_octstring& ded_info_cdma2000_minus1_xrtt_r16() + { + assert_choice_type(types::ded_info_cdma2000_minus1_xrtt_r16, type_, "dedicatedInfoType-r16"); + return c.get<dyn_octstring>(); + } + dyn_octstring& ded_info_cdma2000_hrpd_r16() + { + assert_choice_type(types::ded_info_cdma2000_hrpd_r16, type_, "dedicatedInfoType-r16"); + return c.get<dyn_octstring>(); + } + const dyn_octstring& ded_info_nas_r16() const + { + assert_choice_type(types::ded_info_nas_r16, type_, "dedicatedInfoType-r16"); + return c.get<dyn_octstring>(); + } + const dyn_octstring& ded_info_cdma2000_minus1_xrtt_r16() const + { + assert_choice_type(types::ded_info_cdma2000_minus1_xrtt_r16, type_, "dedicatedInfoType-r16"); + return c.get<dyn_octstring>(); + } + const dyn_octstring& ded_info_cdma2000_hrpd_r16() const + { + assert_choice_type(types::ded_info_cdma2000_hrpd_r16, type_, "dedicatedInfoType-r16"); + return c.get<dyn_octstring>(); + } + dyn_octstring& set_ded_info_nas_r16(); + dyn_octstring& set_ded_info_cdma2000_minus1_xrtt_r16(); + dyn_octstring& set_ded_info_cdma2000_hrpd_r16(); + + private: + types type_; + choice_buffer_t<dyn_octstring> c; + + void destroy_(); + }; + + // member variables + bool ded_info_type_r16_present = false; + bool ded_info_f1c_r16_present = false; + bool non_crit_ext_present = false; + ded_info_type_r16_c_ ded_info_type_r16; + dyn_octstring ded_info_f1c_r16; + ul_info_transfer_v8a0_ies_s non_crit_ext; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // ULInformationTransfer-r8-IEs ::= SEQUENCE struct ul_info_transfer_r8_ies_s { struct ded_info_type_c_ { @@ -3153,6 +4059,20 @@ struct ul_info_transfer_r8_ies_s { void to_json(json_writer& j) const; }; +// ULInformationTransferIRAT-r16-IEs ::= SEQUENCE +struct ul_info_transfer_irat_r16_ies_s { + bool ul_dcch_msg_nr_r16_present = false; + bool late_non_crit_ext_present = false; + bool non_crit_ext_present = false; + dyn_octstring ul_dcch_msg_nr_r16; + dyn_octstring late_non_crit_ext; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // ULInformationTransferMRDC-r15-IEs ::= SEQUENCE struct ul_info_transfer_mrdc_r15_ies_s { bool ul_dcch_msg_nr_r15_present = false; @@ -3285,6 +4205,51 @@ struct fail_info_r15_s { void to_json(json_writer& j) const; }; +// FailureInformation-r16 ::= SEQUENCE +struct fail_info_r16_s { + struct crit_exts_c_ { + struct types_opts { + enum options { fail_info_r16, crit_exts_future, nulltype } value; + + const char* to_string() const; + }; + typedef enumerated<types_opts> types; + + // choice methods + crit_exts_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 + fail_info_r16_ies_s& fail_info_r16() + { + assert_choice_type(types::fail_info_r16, type_, "criticalExtensions"); + return c; + } + const fail_info_r16_ies_s& fail_info_r16() const + { + assert_choice_type(types::fail_info_r16, type_, "criticalExtensions"); + return c; + } + fail_info_r16_ies_s& set_fail_info_r16(); + void set_crit_exts_future(); + + private: + types type_; + fail_info_r16_ies_s c; + }; + + // member variables + crit_exts_c_ crit_exts; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // InDeviceCoexIndication-r11 ::= SEQUENCE struct in_dev_coex_ind_r11_s { struct crit_exts_c_ { @@ -3585,6 +4550,51 @@ struct mbms_interest_ind_r11_s { void to_json(json_writer& j) const; }; +// MCGFailureInformation-r16 ::= SEQUENCE +struct mcg_fail_info_r16_s { + struct crit_exts_c_ { + struct types_opts { + enum options { mcg_fail_info, crit_exts_future, nulltype } value; + + const char* to_string() const; + }; + typedef enumerated<types_opts> types; + + // choice methods + crit_exts_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 + mcg_fail_info_r16_ies_s& mcg_fail_info() + { + assert_choice_type(types::mcg_fail_info, type_, "criticalExtensions"); + return c; + } + const mcg_fail_info_r16_ies_s& mcg_fail_info() const + { + assert_choice_type(types::mcg_fail_info, type_, "criticalExtensions"); + return c; + } + mcg_fail_info_r16_ies_s& set_mcg_fail_info(); + void set_crit_exts_future(); + + private: + types type_; + mcg_fail_info_r16_ies_s c; + }; + + // member variables + crit_exts_c_ crit_exts; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // MeasReportAppLayer-r15 ::= SEQUENCE struct meas_report_app_layer_r15_s { struct crit_exts_c_ { @@ -3630,6 +4640,51 @@ struct meas_report_app_layer_r15_s { void to_json(json_writer& j) const; }; +// PURConfigurationRequest-r16 ::= SEQUENCE +struct pur_cfg_request_r16_s { + struct crit_exts_c_ { + struct types_opts { + enum options { pur_cfg_request, crit_exts_future, nulltype } value; + + const char* to_string() const; + }; + typedef enumerated<types_opts> types; + + // choice methods + crit_exts_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 + pur_cfg_request_r16_ies_s& pur_cfg_request() + { + assert_choice_type(types::pur_cfg_request, type_, "criticalExtensions"); + return c; + } + const pur_cfg_request_r16_ies_s& pur_cfg_request() const + { + assert_choice_type(types::pur_cfg_request, type_, "criticalExtensions"); + return c; + } + pur_cfg_request_r16_ies_s& set_pur_cfg_request(); + void set_crit_exts_future(); + + private: + types type_; + pur_cfg_request_r16_ies_s c; + }; + + // member variables + crit_exts_c_ crit_exts; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // ProximityIndication-r9 ::= SEQUENCE struct proximity_ind_r9_s { struct crit_exts_c_ { @@ -4371,6 +5426,51 @@ struct ue_info_resp_r9_s { void to_json(json_writer& j) const; }; +// ULDedicatedMessageSegment-r16 ::= SEQUENCE +struct ul_ded_msg_segment_r16_s { + struct crit_exts_c_ { + struct types_opts { + enum options { ul_ded_msg_segment_r16, crit_exts_future, nulltype } value; + + const char* to_string() const; + }; + typedef enumerated<types_opts> types; + + // choice methods + crit_exts_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 + ul_ded_msg_segment_r16_ies_s& ul_ded_msg_segment_r16() + { + assert_choice_type(types::ul_ded_msg_segment_r16, type_, "criticalExtensions"); + return c; + } + const ul_ded_msg_segment_r16_ies_s& ul_ded_msg_segment_r16() const + { + assert_choice_type(types::ul_ded_msg_segment_r16, type_, "criticalExtensions"); + return c; + } + ul_ded_msg_segment_r16_ies_s& set_ul_ded_msg_segment_r16(); + void set_crit_exts_future(); + + private: + types type_; + ul_ded_msg_segment_r16_ies_s c; + }; + + // member variables + crit_exts_c_ crit_exts; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // ULHandoverPreparationTransfer ::= SEQUENCE struct ul_ho_prep_transfer_s { struct crit_exts_c_ { @@ -4451,7 +5551,7 @@ struct ul_info_transfer_s { struct crit_exts_c_ { struct c1_c_ { struct types_opts { - enum options { ul_info_transfer_r8, spare3, spare2, spare1, nulltype } value; + enum options { ul_info_transfer_r8, ul_info_transfer_r16, spare2, spare1, nulltype } value; const char* to_string() const; }; @@ -4459,6 +5559,9 @@ struct ul_info_transfer_s { // choice methods c1_c_() = default; + c1_c_(const c1_c_& other); + c1_c_& operator=(const c1_c_& other); + ~c1_c_() { destroy_(); } void set(types::options e = types::nulltype); types type() const { return type_; } SRSASN_CODE pack(bit_ref& bref) const; @@ -4468,21 +5571,108 @@ struct ul_info_transfer_s { ul_info_transfer_r8_ies_s& ul_info_transfer_r8() { assert_choice_type(types::ul_info_transfer_r8, type_, "c1"); - return c; + return c.get<ul_info_transfer_r8_ies_s>(); + } + ul_info_transfer_r16_ies_s& ul_info_transfer_r16() + { + assert_choice_type(types::ul_info_transfer_r16, type_, "c1"); + return c.get<ul_info_transfer_r16_ies_s>(); } const ul_info_transfer_r8_ies_s& ul_info_transfer_r8() const { assert_choice_type(types::ul_info_transfer_r8, type_, "c1"); + return c.get<ul_info_transfer_r8_ies_s>(); + } + const ul_info_transfer_r16_ies_s& ul_info_transfer_r16() const + { + assert_choice_type(types::ul_info_transfer_r16, type_, "c1"); + return c.get<ul_info_transfer_r16_ies_s>(); + } + ul_info_transfer_r8_ies_s& set_ul_info_transfer_r8(); + ul_info_transfer_r16_ies_s& set_ul_info_transfer_r16(); + void set_spare2(); + void set_spare1(); + + private: + types type_; + choice_buffer_t<ul_info_transfer_r16_ies_s, ul_info_transfer_r8_ies_s> c; + + void destroy_(); + }; + using types = c1_or_crit_ext_e; + + // choice methods + crit_exts_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 + c1_c_& c1() + { + assert_choice_type(types::c1, type_, "criticalExtensions"); + return c; + } + const c1_c_& c1() const + { + assert_choice_type(types::c1, type_, "criticalExtensions"); + return c; + } + c1_c_& set_c1(); + void set_crit_exts_future(); + + private: + types type_; + c1_c_ c; + }; + + // member variables + crit_exts_c_ crit_exts; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// ULInformationTransferIRAT-r16 ::= SEQUENCE +struct ul_info_transfer_irat_r16_s { + struct crit_exts_c_ { + struct c1_c_ { + struct types_opts { + enum options { ul_info_transfer_irat_r16, spare3, spare2, spare1, nulltype } value; + + const char* to_string() const; + }; + typedef enumerated<types_opts> types; + + // choice methods + c1_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 + ul_info_transfer_irat_r16_ies_s& ul_info_transfer_irat_r16() + { + assert_choice_type(types::ul_info_transfer_irat_r16, type_, "c1"); return c; } - ul_info_transfer_r8_ies_s& set_ul_info_transfer_r8(); - void set_spare3(); - void set_spare2(); - void set_spare1(); + const ul_info_transfer_irat_r16_ies_s& ul_info_transfer_irat_r16() const + { + assert_choice_type(types::ul_info_transfer_irat_r16, type_, "c1"); + return c; + } + ul_info_transfer_irat_r16_ies_s& set_ul_info_transfer_irat_r16(); + void set_spare3(); + void set_spare2(); + void set_spare1(); private: - types type_; - ul_info_transfer_r8_ies_s c; + types type_; + ul_info_transfer_irat_r16_ies_s c; }; using types = c1_or_crit_ext_e; @@ -4926,11 +6116,11 @@ struct ul_dcch_msg_type_c { scg_fail_info_nr_r15, meas_report_app_layer_r15, fail_info_r15, - spare5, - spare4, - spare3, - spare2, - spare1, + ul_ded_msg_segment_r16, + pur_cfg_request_r16, + fail_info_r16, + mcg_fail_info_r16, + ul_info_transfer_irat_r16, nulltype } value; @@ -5004,6 +6194,31 @@ struct ul_dcch_msg_type_c { assert_choice_type(types::fail_info_r15, type_, "c2"); return c.get<fail_info_r15_s>(); } + ul_ded_msg_segment_r16_s& ul_ded_msg_segment_r16() + { + assert_choice_type(types::ul_ded_msg_segment_r16, type_, "c2"); + return c.get<ul_ded_msg_segment_r16_s>(); + } + pur_cfg_request_r16_s& pur_cfg_request_r16() + { + assert_choice_type(types::pur_cfg_request_r16, type_, "c2"); + return c.get<pur_cfg_request_r16_s>(); + } + fail_info_r16_s& fail_info_r16() + { + assert_choice_type(types::fail_info_r16, type_, "c2"); + return c.get<fail_info_r16_s>(); + } + mcg_fail_info_r16_s& mcg_fail_info_r16() + { + assert_choice_type(types::mcg_fail_info_r16, type_, "c2"); + return c.get<mcg_fail_info_r16_s>(); + } + ul_info_transfer_irat_r16_s& ul_info_transfer_irat_r16() + { + assert_choice_type(types::ul_info_transfer_irat_r16, type_, "c2"); + return c.get<ul_info_transfer_irat_r16_s>(); + } const ueassist_info_r11_s& ue_assist_info_r11() const { assert_choice_type(types::ue_assist_info_r11, type_, "c2"); @@ -5059,6 +6274,31 @@ struct ul_dcch_msg_type_c { assert_choice_type(types::fail_info_r15, type_, "c2"); return c.get<fail_info_r15_s>(); } + const ul_ded_msg_segment_r16_s& ul_ded_msg_segment_r16() const + { + assert_choice_type(types::ul_ded_msg_segment_r16, type_, "c2"); + return c.get<ul_ded_msg_segment_r16_s>(); + } + const pur_cfg_request_r16_s& pur_cfg_request_r16() const + { + assert_choice_type(types::pur_cfg_request_r16, type_, "c2"); + return c.get<pur_cfg_request_r16_s>(); + } + const fail_info_r16_s& fail_info_r16() const + { + assert_choice_type(types::fail_info_r16, type_, "c2"); + return c.get<fail_info_r16_s>(); + } + const mcg_fail_info_r16_s& mcg_fail_info_r16() const + { + assert_choice_type(types::mcg_fail_info_r16, type_, "c2"); + return c.get<mcg_fail_info_r16_s>(); + } + const ul_info_transfer_irat_r16_s& ul_info_transfer_irat_r16() const + { + assert_choice_type(types::ul_info_transfer_irat_r16, type_, "c2"); + return c.get<ul_info_transfer_irat_r16_s>(); + } ueassist_info_r11_s& set_ue_assist_info_r11(); in_dev_coex_ind_r11_s& set_in_dev_coex_ind_r11(); mbms_interest_ind_r11_s& set_mbms_interest_ind_r11(); @@ -5070,23 +6310,28 @@ struct ul_dcch_msg_type_c { scg_fail_info_nr_r15_s& set_scg_fail_info_nr_r15(); meas_report_app_layer_r15_s& set_meas_report_app_layer_r15(); fail_info_r15_s& set_fail_info_r15(); - void set_spare5(); - void set_spare4(); - void set_spare3(); - void set_spare2(); - void set_spare1(); + ul_ded_msg_segment_r16_s& set_ul_ded_msg_segment_r16(); + pur_cfg_request_r16_s& set_pur_cfg_request_r16(); + fail_info_r16_s& set_fail_info_r16(); + mcg_fail_info_r16_s& set_mcg_fail_info_r16(); + ul_info_transfer_irat_r16_s& set_ul_info_transfer_irat_r16(); private: types type_; choice_buffer_t<fail_info_r15_s, + fail_info_r16_s, in_dev_coex_ind_r11_s, mbms_interest_ind_r11_s, + mcg_fail_info_r16_s, meas_report_app_layer_r15_s, + pur_cfg_request_r16_s, rrc_conn_resume_complete_r13_s, scg_fail_info_nr_r15_s, scg_fail_info_r12_s, sidelink_ue_info_r12_s, ueassist_info_r11_s, + ul_ded_msg_segment_r16_s, + ul_info_transfer_irat_r16_s, ul_info_transfer_mrdc_r15_s, wlan_conn_status_report_r13_s> c; diff --git a/lib/include/srsran/asn1/rrc_nbiot.h b/lib/include/srsran/asn1/rrc_nbiot.h index d87d0da41..9ea1d65e5 100644 --- a/lib/include/srsran/asn1/rrc_nbiot.h +++ b/lib/include/srsran/asn1/rrc_nbiot.h @@ -12,7 +12,7 @@ /******************************************************************************* * - * 3GPP TS ASN1 RRC v15.11.0 (2020-09) + * 3GPP TS ASN1 RRC v17.4.0 (2023-03) * ******************************************************************************/ @@ -60,33 +60,38 @@ struct ab_cfg_plmn_nb_r13_s { void to_json(json_writer& j) const; }; -// T-PollRetransmit-NB-r13 ::= ENUMERATED -struct t_poll_retx_nb_r13_opts { - enum options { - ms250, - ms500, - ms1000, - ms2000, - ms3000, - ms4000, - ms6000, - ms10000, - ms15000, - ms25000, - ms40000, - ms60000, - ms90000, - ms120000, - ms180000, - ms300000_v1530, - nulltype - } value; - typedef uint32_t number_type; +// ANR-ExcludedCellList-NB-r16 ::= SEQUENCE (SIZE (1..16)) OF INTEGER (0..503) +using anr_excluded_cell_list_nb_r16_l = bounded_array<uint16_t, 16>; - const char* to_string() const; - uint32_t to_number() const; +// ANR-Carrier-NB-r16 ::= SEQUENCE +struct anr_carrier_nb_r16_s { + bool ext = false; + bool excluded_cell_list_r16_present = false; + uint8_t carrier_freq_idx_r16 = 1; + anr_excluded_cell_list_nb_r16_l excluded_cell_list_r16; + // ... + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// ANR-CarrierList-NB-r16 ::= SEQUENCE (SIZE (1..2)) OF ANR-Carrier-NB-r16 +using anr_carrier_list_nb_r16_l = dyn_array<anr_carrier_nb_r16_s>; + +// ANR-MeasConfig-NB-r16 ::= SEQUENCE +struct anr_meas_cfg_nb_r16_s { + bool ext = false; + uint8_t anr_quality_thres_r16 = 0; + anr_carrier_list_nb_r16_l anr_carrier_list_r16; + // ... + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; }; -typedef enumerated<t_poll_retx_nb_r13_opts> t_poll_retx_nb_r13_e; // CarrierFreq-NB-r13 ::= SEQUENCE struct carrier_freq_nb_r13_s { @@ -134,6 +139,89 @@ struct carrier_freq_nb_r13_s { void to_json(json_writer& j) const; }; +// MeasResultServCell-NB-r14 ::= SEQUENCE +struct meas_result_serv_cell_nb_r14_s { + uint8_t nrsrp_result_r14 = 0; + int8_t nrsrq_result_r14 = -30; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// ANR-MeasResult-NB-r16 ::= SEQUENCE +struct anr_meas_result_nb_r16_s { + struct cgi_info_r16_s_ { + bool plmn_id_list_r16_present = false; + cell_global_id_eutra_s cell_global_id_r16; + fixed_bitstring<16> tac_r16; + plmn_id_list2_l plmn_id_list_r16; + }; + + // member variables + bool pci_r16_present = false; + bool meas_result_r16_present = false; + bool cgi_info_r16_present = false; + carrier_freq_nb_r13_s carrier_freq_r16; + uint16_t pci_r16 = 0; + meas_result_serv_cell_nb_r14_s meas_result_last_serv_cell_r16; + uint8_t meas_result_r16 = 0; + cgi_info_r16_s_ cgi_info_r16; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// ANR-MeasReport-NB-r16 ::= SEQUENCE +struct anr_meas_report_nb_r16_s { + using meas_result_list_r16_l_ = dyn_array<anr_meas_result_nb_r16_s>; + + // member variables + bool ext = false; + bool serv_cell_id_r16_present = false; + cell_global_id_eutra_s serv_cell_id_r16; + meas_result_serv_cell_nb_r14_s meas_result_serv_cell_r16; + uint8_t relative_time_stamp_r16 = 0; + meas_result_list_r16_l_ meas_result_list_r16; + // ... + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// T-PollRetransmit-NB-r13 ::= ENUMERATED +struct t_poll_retx_nb_r13_opts { + enum options { + ms250, + ms500, + ms1000, + ms2000, + ms3000, + ms4000, + ms6000, + ms10000, + ms15000, + ms25000, + ms40000, + ms60000, + ms90000, + ms120000, + ms180000, + ms300000_v1530, + nulltype + } value; + typedef uint32_t number_type; + + const char* to_string() const; + uint32_t to_number() const; +}; +typedef enumerated<t_poll_retx_nb_r13_opts> t_poll_retx_nb_r13_e; + // CarrierFreq-NB-v1550 ::= SEQUENCE struct carrier_freq_nb_v1550_s { struct carrier_freq_offset_v1550_opts { @@ -505,6 +593,58 @@ struct lc_ch_cfg_nb_r13_s { void to_json(json_writer& j) const; }; +// NPDSCH-16QAM-Config-NB-r17 ::= SEQUENCE +struct npdsch_minus16_qam_cfg_nb_r17_s { + struct nrs_pwr_ratio_r17_opts { + enum options { db_minus6, db_minus4dot77, db_minus3, db_minus1dot77, db0, db1, db2, db3, nulltype } value; + typedef float number_type; + + const char* to_string() const; + float to_number() const; + const char* to_number_string() const; + }; + typedef enumerated<nrs_pwr_ratio_r17_opts> nrs_pwr_ratio_r17_e_; + struct nrs_pwr_ratio_with_crs_r17_opts { + enum options { db_minus6, db_minus4dot77, db_minus3, db_minus1dot77, db0, db1, db2, db3, nulltype } value; + typedef float number_type; + + const char* to_string() const; + float to_number() const; + const char* to_number_string() const; + }; + typedef enumerated<nrs_pwr_ratio_with_crs_r17_opts> nrs_pwr_ratio_with_crs_r17_e_; + + // member variables + bool nrs_pwr_ratio_r17_present = false; + bool nrs_pwr_ratio_with_crs_r17_present = false; + nrs_pwr_ratio_r17_e_ nrs_pwr_ratio_r17; + nrs_pwr_ratio_with_crs_r17_e_ nrs_pwr_ratio_with_crs_r17; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// NPDSCH-MultiTB-Config-NB-r16 ::= SEQUENCE +struct npdsch_multi_tb_cfg_nb_r16_s { + struct multi_tb_cfg_r16_opts { + enum options { interleaved, non_interleaved, nulltype } value; + + const char* to_string() const; + }; + typedef enumerated<multi_tb_cfg_r16_opts> multi_tb_cfg_r16_e_; + + // member variables + bool harq_ack_bundling_r16_present = false; + multi_tb_cfg_r16_e_ multi_tb_cfg_r16; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // PDCP-Config-NB-r13 ::= SEQUENCE struct pdcp_cfg_nb_r13_s { struct discard_timer_r13_opts { @@ -573,6 +713,8 @@ struct pdcp_cfg_nb_r13_s { discard_timer_r13_e_ discard_timer_r13; hdr_compress_r13_c_ hdr_compress_r13; // ... + // group 0 + bool ciphering_disabled_r16_present = false; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -632,6 +774,16 @@ struct rlc_cfg_nb_v1430_s { void to_json(json_writer& j) const; }; +// RLC-Config-NB-v1700 ::= SEQUENCE +struct rlc_cfg_nb_v1700_s { + setup_release_c<t_reordering_ext_r17_e> t_reordering_ext_r17; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // SR-NPRACH-Resource-NB-r15 ::= SEQUENCE struct sr_nprach_res_nb_r15_s { struct nprach_sub_carrier_idx_r15_c_ { @@ -707,6 +859,16 @@ struct sr_nprach_res_nb_r15_s { void to_json(json_writer& j) const; }; +// SR-ProhibitTimerOffset-NB-r17 ::= ENUMERATED +struct sr_prohibit_timer_offset_nb_r17_opts { + enum options { ms90, ms180, ms270, ms360, ms450, ms540, ms1080, spare, nulltype } value; + typedef uint16_t number_type; + + const char* to_string() const; + uint16_t to_number() const; +}; +typedef enumerated<sr_prohibit_timer_offset_nb_r17_opts> sr_prohibit_timer_offset_nb_r17_e; + // UL-CarrierConfigDedicated-NB-r13 ::= SEQUENCE struct ul_carrier_cfg_ded_nb_r13_s { bool ext = false; @@ -751,6 +913,11 @@ struct drb_to_add_mod_nb_r13_s { // ... // group 0 copy_ptr<rlc_cfg_nb_v1430_s> rlc_cfg_v1430; + // group 1 + bool pdu_session_r16_present = false; + uint16_t pdu_session_r16 = 0; + // group 2 + copy_ptr<rlc_cfg_nb_v1700_s> rlc_cfg_v1700; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -971,6 +1138,27 @@ struct npdcch_cfg_ded_nb_v1530_s { void to_json(json_writer& j) const; }; +// NPDSCH-ConfigDedicated-NB-r16 ::= SEQUENCE +struct npdsch_cfg_ded_nb_r16_s { + bool npdsch_multi_tb_cfg_r16_present = false; + npdsch_multi_tb_cfg_nb_r16_s npdsch_multi_tb_cfg_r16; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// NPDSCH-ConfigDedicated-NB-v1710 ::= SEQUENCE +struct npdsch_cfg_ded_nb_v1710_s { + setup_release_c<npdsch_minus16_qam_cfg_nb_r17_s> npdsch_minus16_qam_cfg_r17; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // NPUSCH-ConfigDedicated-NB-r13 ::= SEQUENCE struct npusch_cfg_ded_nb_r13_s { bool ack_nack_num_repeats_r13_present = false; @@ -985,6 +1173,83 @@ struct npusch_cfg_ded_nb_r13_s { void to_json(json_writer& j) const; }; +// NPUSCH-ConfigDedicated-NB-v1610 ::= SEQUENCE +struct npusch_cfg_ded_nb_v1610_s { + struct npusch_multi_tb_cfg_r16_opts { + enum options { interleaved, non_interleaved, nulltype } value; + + const char* to_string() const; + }; + typedef enumerated<npusch_multi_tb_cfg_r16_opts> npusch_multi_tb_cfg_r16_e_; + + // member variables + npusch_multi_tb_cfg_r16_e_ npusch_multi_tb_cfg_r16; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// NPUSCH-ConfigDedicated-NB-v1700 ::= SEQUENCE +struct npusch_cfg_ded_nb_v1700_s { + bool npusch_minus16_qam_cfg_r17_present = false; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// NPUSCH-TxDuration-NB-r17 ::= SEQUENCE +struct npusch_tx_dur_nb_r17_s { + struct npusch_tx_dur_r17_opts { + enum options { ms2, ms4, ms8, ms16, ms32, ms64, ms128, ms256, nulltype } value; + typedef uint16_t number_type; + + const char* to_string() const; + uint16_t to_number() const; + }; + typedef enumerated<npusch_tx_dur_r17_opts> npusch_tx_dur_r17_e_; + + // member variables + npusch_tx_dur_r17_e_ npusch_tx_dur_r17; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// OffsetThresholdTA-NB-r17 ::= ENUMERATED +struct offset_thres_ta_nb_r17_opts { + enum options { + ms0dot5, + ms1, + ms2, + ms3, + ms4, + ms5, + ms6, + ms7, + ms8, + ms9, + ms10, + ms11, + ms12, + ms13, + ms14, + ms15, + nulltype + } value; + typedef float number_type; + + const char* to_string() const; + float to_number() const; + const char* to_number_string() const; +}; +typedef enumerated<offset_thres_ta_nb_r17_opts> offset_thres_ta_nb_r17_e; + // PeriodicBSR-Timer-NB-r13 ::= ENUMERATED struct periodic_bsr_timer_nb_r13_opts { enum options { pp2, pp4, pp8, pp16, pp64, pp128, infinity, spare, nulltype } value; @@ -995,6 +1260,244 @@ struct periodic_bsr_timer_nb_r13_opts { }; typedef enumerated<periodic_bsr_timer_nb_r13_opts> periodic_bsr_timer_nb_r13_e; +// ResourceReservationConfig-NB-r16 ::= SEQUENCE +struct res_reserv_cfg_nb_r16_s { + struct periodicity_r16_opts { + enum options { ms10, ms20, ms40, ms80, ms160, spare3, spare2, spare1, nulltype } value; + typedef uint8_t number_type; + + const char* to_string() const; + uint8_t to_number() const; + }; + typedef enumerated<periodicity_r16_opts> periodicity_r16_e_; + struct res_reserv_r16_c_ { + struct sf_bitmap_r16_c_ { + struct types_opts { + enum options { sf_pattern10ms, sf_pattern40ms, 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_bitmap_r16_c_() = default; + sf_bitmap_r16_c_(const sf_bitmap_r16_c_& other); + sf_bitmap_r16_c_& operator=(const sf_bitmap_r16_c_& other); + ~sf_bitmap_r16_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>& sf_pattern10ms() + { + assert_choice_type(types::sf_pattern10ms, type_, "subframeBitmap-r16"); + return c.get<fixed_bitstring<10> >(); + } + fixed_bitstring<40>& sf_pattern40ms() + { + assert_choice_type(types::sf_pattern40ms, type_, "subframeBitmap-r16"); + return c.get<fixed_bitstring<40> >(); + } + const fixed_bitstring<10>& sf_pattern10ms() const + { + assert_choice_type(types::sf_pattern10ms, type_, "subframeBitmap-r16"); + return c.get<fixed_bitstring<10> >(); + } + const fixed_bitstring<40>& sf_pattern40ms() const + { + assert_choice_type(types::sf_pattern40ms, type_, "subframeBitmap-r16"); + return c.get<fixed_bitstring<40> >(); + } + fixed_bitstring<10>& set_sf_pattern10ms(); + fixed_bitstring<40>& set_sf_pattern40ms(); + + private: + types type_; + choice_buffer_t<fixed_bitstring<40> > c; + + void destroy_(); + }; + struct slot_cfg_r16_s_ { + struct slot_bitmap_r16_c_ { + struct types_opts { + enum options { slot_pattern10ms, slot_pattern40ms, nulltype } value; + typedef uint8_t number_type; + + const char* to_string() const; + uint8_t to_number() const; + }; + typedef enumerated<types_opts> types; + + // choice methods + slot_bitmap_r16_c_() = default; + slot_bitmap_r16_c_(const slot_bitmap_r16_c_& other); + slot_bitmap_r16_c_& operator=(const slot_bitmap_r16_c_& other); + ~slot_bitmap_r16_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<20>& slot_pattern10ms() + { + assert_choice_type(types::slot_pattern10ms, type_, "slotBitmap-r16"); + return c.get<fixed_bitstring<20> >(); + } + fixed_bitstring<80>& slot_pattern40ms() + { + assert_choice_type(types::slot_pattern40ms, type_, "slotBitmap-r16"); + return c.get<fixed_bitstring<80> >(); + } + const fixed_bitstring<20>& slot_pattern10ms() const + { + assert_choice_type(types::slot_pattern10ms, type_, "slotBitmap-r16"); + return c.get<fixed_bitstring<20> >(); + } + const fixed_bitstring<80>& slot_pattern40ms() const + { + assert_choice_type(types::slot_pattern40ms, type_, "slotBitmap-r16"); + return c.get<fixed_bitstring<80> >(); + } + fixed_bitstring<20>& set_slot_pattern10ms(); + fixed_bitstring<80>& set_slot_pattern40ms(); + + private: + types type_; + choice_buffer_t<fixed_bitstring<80> > c; + + void destroy_(); + }; + struct symbol_bitmap_r16_c_ { + struct symbol_bitmap_fdd_dl_s_ { + bool symbol_bitmap1_r16_present = false; + bool symbol_bitmap2_r16_present = false; + fixed_bitstring<5> symbol_bitmap1_r16; + fixed_bitstring<5> symbol_bitmap2_r16; + }; + struct symbol_bitmap_fdd_ul_or_tdd_s_ { + bool symbol_bitmap1_r16_present = false; + bool symbol_bitmap2_r16_present = false; + fixed_bitstring<7> symbol_bitmap1_r16; + fixed_bitstring<7> symbol_bitmap2_r16; + }; + struct types_opts { + enum options { symbol_bitmap_fdd_dl, symbol_bitmap_fdd_ul_or_tdd, nulltype } value; + + const char* to_string() const; + }; + typedef enumerated<types_opts> types; + + // choice methods + symbol_bitmap_r16_c_() = default; + symbol_bitmap_r16_c_(const symbol_bitmap_r16_c_& other); + symbol_bitmap_r16_c_& operator=(const symbol_bitmap_r16_c_& other); + ~symbol_bitmap_r16_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 + symbol_bitmap_fdd_dl_s_& symbol_bitmap_fdd_dl() + { + assert_choice_type(types::symbol_bitmap_fdd_dl, type_, "symbolBitmap-r16"); + return c.get<symbol_bitmap_fdd_dl_s_>(); + } + symbol_bitmap_fdd_ul_or_tdd_s_& symbol_bitmap_fdd_ul_or_tdd() + { + assert_choice_type(types::symbol_bitmap_fdd_ul_or_tdd, type_, "symbolBitmap-r16"); + return c.get<symbol_bitmap_fdd_ul_or_tdd_s_>(); + } + const symbol_bitmap_fdd_dl_s_& symbol_bitmap_fdd_dl() const + { + assert_choice_type(types::symbol_bitmap_fdd_dl, type_, "symbolBitmap-r16"); + return c.get<symbol_bitmap_fdd_dl_s_>(); + } + const symbol_bitmap_fdd_ul_or_tdd_s_& symbol_bitmap_fdd_ul_or_tdd() const + { + assert_choice_type(types::symbol_bitmap_fdd_ul_or_tdd, type_, "symbolBitmap-r16"); + return c.get<symbol_bitmap_fdd_ul_or_tdd_s_>(); + } + symbol_bitmap_fdd_dl_s_& set_symbol_bitmap_fdd_dl(); + symbol_bitmap_fdd_ul_or_tdd_s_& set_symbol_bitmap_fdd_ul_or_tdd(); + + private: + types type_; + choice_buffer_t<symbol_bitmap_fdd_dl_s_, symbol_bitmap_fdd_ul_or_tdd_s_> c; + + void destroy_(); + }; + + // member variables + slot_bitmap_r16_c_ slot_bitmap_r16; + symbol_bitmap_r16_c_ symbol_bitmap_r16; + }; + struct types_opts { + enum options { sf_bitmap_r16, slot_cfg_r16, nulltype } value; + + const char* to_string() const; + }; + typedef enumerated<types_opts> types; + + // choice methods + res_reserv_r16_c_() = default; + res_reserv_r16_c_(const res_reserv_r16_c_& other); + res_reserv_r16_c_& operator=(const res_reserv_r16_c_& other); + ~res_reserv_r16_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 + sf_bitmap_r16_c_& sf_bitmap_r16() + { + assert_choice_type(types::sf_bitmap_r16, type_, "resourceReservation-r16"); + return c.get<sf_bitmap_r16_c_>(); + } + slot_cfg_r16_s_& slot_cfg_r16() + { + assert_choice_type(types::slot_cfg_r16, type_, "resourceReservation-r16"); + return c.get<slot_cfg_r16_s_>(); + } + const sf_bitmap_r16_c_& sf_bitmap_r16() const + { + assert_choice_type(types::sf_bitmap_r16, type_, "resourceReservation-r16"); + return c.get<sf_bitmap_r16_c_>(); + } + const slot_cfg_r16_s_& slot_cfg_r16() const + { + assert_choice_type(types::slot_cfg_r16, type_, "resourceReservation-r16"); + return c.get<slot_cfg_r16_s_>(); + } + sf_bitmap_r16_c_& set_sf_bitmap_r16(); + slot_cfg_r16_s_& set_slot_cfg_r16(); + + private: + types type_; + choice_buffer_t<sf_bitmap_r16_c_, slot_cfg_r16_s_> c; + + void destroy_(); + }; + + // member variables + bool ext = false; + periodicity_r16_e_ periodicity_r16; + uint8_t start_position_r16 = 0; + res_reserv_r16_c_ res_reserv_r16; + // ... + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // RetxBSR-Timer-NB-r13 ::= ENUMERATED struct retx_bsr_timer_nb_r13_opts { enum options { pp4, pp16, pp64, pp128, pp256, pp512, infinity, spare, nulltype } value; @@ -1085,6 +1588,17 @@ private: setup_s_ c; }; +// SR-WithoutHARQ-ACK-Config-NB-v1700 ::= SEQUENCE +struct sr_without_harq_ack_cfg_nb_v1700_s { + bool sr_prohibit_timer_offset_r17_present = false; + setup_release_c<sr_prohibit_timer_offset_nb_r17_e> sr_prohibit_timer_offset_r17; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // SRB-ToAddMod-NB-r13 ::= SEQUENCE struct srb_to_add_mod_nb_r13_s { struct rlc_cfg_r13_c_ { @@ -1163,6 +1677,8 @@ struct srb_to_add_mod_nb_r13_s { // ... // group 0 copy_ptr<rlc_cfg_nb_v1430_s> rlc_cfg_v1430; + // group 1 + copy_ptr<rlc_cfg_nb_v1700_s> rlc_cfg_v1700; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -1180,6 +1696,26 @@ struct ul_pwr_ctrl_ded_nb_r13_s { void to_json(json_writer& j) const; }; +// UplinkPowerControlDedicated-NB-v1700 ::= SEQUENCE +struct ul_pwr_ctrl_ded_nb_v1700_s { + struct delta_mcs_enabled_r17_opts { + enum options { en0, en1, nulltype } value; + typedef uint8_t number_type; + + const char* to_string() const; + uint8_t to_number() const; + }; + typedef enumerated<delta_mcs_enabled_r17_opts> delta_mcs_enabled_r17_e_; + + // member variables + delta_mcs_enabled_r17_e_ delta_mcs_enabled_r17; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // DRB-ToAddModList-NB-r13 ::= SEQUENCE (SIZE (1..2)) OF DRB-ToAddMod-NB-r13 using drb_to_add_mod_list_nb_r13_l = dyn_array<drb_to_add_mod_nb_r13_s>; @@ -1292,6 +1828,8 @@ struct mac_main_cfg_nb_r13_s { drx_cycle_v1430_e_ drx_cycle_v1430; // group 2 bool ra_cfra_cfg_r14_present = false; + // group 3 + copy_ptr<setup_release_c<offset_thres_ta_nb_r17_e> > offset_thres_ta_r17; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -1301,6 +1839,17 @@ struct mac_main_cfg_nb_r13_s { // PhysicalConfigDedicated-NB-r13 ::= SEQUENCE struct phys_cfg_ded_nb_r13_s { + struct ntn_cfg_ded_r17_s_ { + setup_release_c<npusch_tx_dur_nb_r17_s> npusch_tx_dur_r17; + }; + struct ul_segmented_precompensation_gap_r17_opts { + enum options { sym1, sl1, sl2, nulltype } value; + + const char* to_string() const; + }; + typedef enumerated<ul_segmented_precompensation_gap_r17_opts> ul_segmented_precompensation_gap_r17_e_; + + // member variables bool ext = false; bool carrier_cfg_ded_r13_present = false; bool npdcch_cfg_ded_r13_present = false; @@ -1319,6 +1868,20 @@ struct phys_cfg_ded_nb_r13_s { copy_ptr<npdcch_cfg_ded_nb_v1530_s> npdcch_cfg_ded_v1530; // group 3 bool add_tx_sib1_cfg_v1540_present = false; + // group 4 + copy_ptr<npusch_cfg_ded_nb_v1610_s> npusch_cfg_ded_v1610; + copy_ptr<npdsch_cfg_ded_nb_r16_s> npdsch_cfg_ded_r16; + copy_ptr<setup_release_c<res_reserv_cfg_nb_r16_s> > res_reserv_cfg_dl_r16; + copy_ptr<setup_release_c<res_reserv_cfg_nb_r16_s> > res_reserv_cfg_ul_r16; + // group 5 + copy_ptr<ntn_cfg_ded_r17_s_> ntn_cfg_ded_r17; + copy_ptr<npdsch_cfg_ded_nb_v1710_s> npdsch_cfg_ded_v1700; + copy_ptr<ul_pwr_ctrl_ded_nb_v1700_s> ul_pwr_ctrl_ded_v1700; + // group 6 + bool ul_segmented_precompensation_gap_r17_present = false; + ul_segmented_precompensation_gap_r17_e_ ul_segmented_precompensation_gap_r17; + // group 7 + copy_ptr<npusch_cfg_ded_nb_v1700_s> npusch_cfg_ded_v1740; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -1456,6 +2019,8 @@ struct sched_request_cfg_nb_r15_s { sr_without_harq_ack_cfg_nb_r15_c sr_without_harq_ack_cfg_r15; sr_sps_bsr_cfg_nb_r15_c sr_sps_bsr_cfg_r15; // ... + // group 0 + copy_ptr<sr_without_harq_ack_cfg_nb_v1700_s> sr_without_harq_ack_cfg_v1700; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -1516,6 +2081,9 @@ struct rr_cfg_ded_nb_r13_s { // ... // group 0 copy_ptr<sched_request_cfg_nb_r15_s> sched_request_cfg_r15; + // group 1 + bool new_ue_id_r16_present = false; + fixed_bitstring<16> new_ue_id_r16; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -1709,6 +2277,54 @@ struct mib_nb_s { void destroy_(); }; + struct part_earfcn_minus17_c_ { + struct types_opts { + enum options { spare, earfcn_lsb, nulltype } value; + + const char* to_string() const; + }; + typedef enumerated<types_opts> types; + + // choice methods + part_earfcn_minus17_c_() = default; + part_earfcn_minus17_c_(const part_earfcn_minus17_c_& other); + part_earfcn_minus17_c_& operator=(const part_earfcn_minus17_c_& other); + ~part_earfcn_minus17_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<2>& spare() + { + assert_choice_type(types::spare, type_, "partEARFCN-17"); + return c.get<fixed_bitstring<2> >(); + } + fixed_bitstring<2>& earfcn_lsb() + { + assert_choice_type(types::earfcn_lsb, type_, "partEARFCN-17"); + return c.get<fixed_bitstring<2> >(); + } + const fixed_bitstring<2>& spare() const + { + assert_choice_type(types::spare, type_, "partEARFCN-17"); + return c.get<fixed_bitstring<2> >(); + } + const fixed_bitstring<2>& earfcn_lsb() const + { + assert_choice_type(types::earfcn_lsb, type_, "partEARFCN-17"); + return c.get<fixed_bitstring<2> >(); + } + fixed_bitstring<2>& set_spare(); + fixed_bitstring<2>& set_earfcn_lsb(); + + private: + types type_; + choice_buffer_t<fixed_bitstring<2> > c; + + void destroy_(); + }; // member variables fixed_bitstring<4> sys_frame_num_msb_r13; @@ -1717,8 +2333,10 @@ struct mib_nb_s { uint8_t sys_info_value_tag_r13 = 0; bool ab_enabled_r13 = false; operation_mode_info_r13_c_ operation_mode_info_r13; - bool add_tx_sib1_r15 = false; - fixed_bitstring<10> spare; + bool add_tx_sib1_r15 = false; + bool ab_enabled_minus5_gc_r16 = false; + part_earfcn_minus17_c_ part_earfcn_minus17; + fixed_bitstring<6> spare; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -2059,7 +2677,8 @@ struct mib_tdd_nb_r15_s { bool ab_enabled_r15 = false; operation_mode_info_r15_c_ operation_mode_info_r15; sib1_carrier_info_r15_e_ sib1_carrier_info_r15; - fixed_bitstring<9> spare; + bool ab_enabled_minus5_gc_r16 = false; + fixed_bitstring<8> spare; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -2080,6 +2699,9 @@ struct bcch_bch_msg_tdd_nb_s { void to_json(json_writer& j) const; }; +// TrackingAreaList-NB-r17 ::= SEQUENCE (SIZE (1..12)) OF BIT STRING (SIZE (16)) +using tracking_area_list_nb_r17_l = bounded_array<fixed_bitstring<16>, 12>; + // NS-PmaxValue-NB-r13 ::= SEQUENCE struct ns_pmax_value_nb_r13_s { bool add_pmax_r13_present = false; @@ -2092,9 +2714,30 @@ struct ns_pmax_value_nb_r13_s { void to_json(json_writer& j) const; }; +// PLMN-IdentityInfo-NB-v1700 ::= SEQUENCE +struct plmn_id_info_nb_v1700_s { + bool tracking_area_list_r17_present = false; + tracking_area_list_nb_r17_l tracking_area_list_r17; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // SIB-Type-NB-v1530 ::= ENUMERATED struct sib_type_nb_v1530_opts { - enum options { sib_type23_nb_r15, spare7, spare6, spare5, spare4, spare3, spare2, spare1, nulltype } value; + enum options { + sib_type23_nb_r15, + sib_type27_nb_r16, + sib_type31_nb_r17, + sib_type32_nb_r17, + spare4, + spare3, + spare2, + spare1, + nulltype + } value; typedef uint8_t number_type; const char* to_string() const; @@ -2102,6 +2745,16 @@ struct sib_type_nb_v1530_opts { }; typedef enumerated<sib_type_nb_v1530_opts> sib_type_nb_v1530_e; +// GWUS-NumGroups-NB-r16 ::= ENUMERATED +struct gwus_num_groups_nb_r16_opts { + enum options { n1, n2, n4, n8, nulltype } value; + typedef uint8_t number_type; + + const char* to_string() const; + uint8_t to_number() const; +}; +typedef enumerated<gwus_num_groups_nb_r16_opts> gwus_num_groups_nb_r16_e; + // NS-PmaxList-NB-r13 ::= SEQUENCE (SIZE (1..4)) OF NS-PmaxValue-NB-r13 using ns_pmax_list_nb_r13_l = dyn_array<ns_pmax_value_nb_r13_s>; @@ -2135,6 +2788,78 @@ struct nsss_rrm_cfg_nb_r15_s { void to_json(json_writer& j) const; }; +// PLMN-IdentityInfo-5GC-NB-r16 ::= SEQUENCE +struct plmn_id_info_minus5_gc_nb_r16_s { + struct plmn_id_minus5_gc_r16_c_ { + struct types_opts { + enum options { plmn_id_r16, plmn_idx_r16, nulltype } value; + + const char* to_string() const; + }; + typedef enumerated<types_opts> types; + + // choice methods + plmn_id_minus5_gc_r16_c_() = default; + plmn_id_minus5_gc_r16_c_(const plmn_id_minus5_gc_r16_c_& other); + plmn_id_minus5_gc_r16_c_& operator=(const plmn_id_minus5_gc_r16_c_& other); + ~plmn_id_minus5_gc_r16_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 + plmn_id_s& plmn_id_r16() + { + assert_choice_type(types::plmn_id_r16, type_, "plmn-Identity-5GC-r16"); + return c.get<plmn_id_s>(); + } + uint8_t& plmn_idx_r16() + { + assert_choice_type(types::plmn_idx_r16, type_, "plmn-Identity-5GC-r16"); + return c.get<uint8_t>(); + } + const plmn_id_s& plmn_id_r16() const + { + assert_choice_type(types::plmn_id_r16, type_, "plmn-Identity-5GC-r16"); + return c.get<plmn_id_s>(); + } + const uint8_t& plmn_idx_r16() const + { + assert_choice_type(types::plmn_idx_r16, type_, "plmn-Identity-5GC-r16"); + return c.get<uint8_t>(); + } + plmn_id_s& set_plmn_id_r16(); + uint8_t& set_plmn_idx_r16(); + + private: + types type_; + choice_buffer_t<plmn_id_s> c; + + void destroy_(); + }; + struct cell_reserved_for_oper_r16_opts { + enum options { reserved, not_reserved, nulltype } value; + + const char* to_string() const; + }; + typedef enumerated<cell_reserved_for_oper_r16_opts> cell_reserved_for_oper_r16_e_; + + // member variables + bool ng_u_data_transfer_r16_present = false; + bool up_cio_t_minus5_gs_optim_r16_present = false; + plmn_id_minus5_gc_r16_c_ plmn_id_minus5_gc_r16; + cell_reserved_for_oper_r16_e_ cell_reserved_for_oper_r16; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// PLMN-IdentityList-NB-v1700 ::= SEQUENCE (SIZE (1..6)) OF PLMN-IdentityInfo-NB-v1700 +using plmn_id_list_nb_v1700_l = dyn_array<plmn_id_info_nb_v1700_s>; + // SIB-MappingInfo-NB-v1530 ::= SEQUENCE (SIZE (1..8)) OF SIB-Type-NB-v1530 using sib_map_info_nb_v1530_l = bounded_array<sib_type_nb_v1530_e, 8>; @@ -2159,6 +2884,22 @@ struct edt_tbs_nb_r15_s { void to_json(json_writer& j) const; }; +// GWUS-GroupsForServiceList-NB-r16 ::= SEQUENCE (SIZE (1..3)) OF INTEGER (1..15) +using gwus_groups_for_service_list_nb_r16_l = bounded_array<uint8_t, 3>; + +// GWUS-NumGroupsList-NB-r16 ::= SEQUENCE (SIZE (1..2)) OF GWUS-NumGroups-NB-r16 +using gwus_num_groups_list_nb_r16_l = bounded_array<gwus_num_groups_nb_r16_e, 2>; + +// GWUS-Paging-ProbThresh-NB-r16 ::= ENUMERATED +struct gwus_paging_prob_thresh_nb_r16_opts { + enum options { p20, p30, p40, p50, p60, p70, p80, p90, nulltype } value; + typedef uint8_t number_type; + + const char* to_string() const; + uint8_t to_number() const; +}; +typedef enumerated<gwus_paging_prob_thresh_nb_r16_opts> gwus_paging_prob_thresh_nb_r16_e; + // InterFreqNeighCellInfo-NB-v1530 ::= SEQUENCE struct inter_freq_neigh_cell_info_nb_v1530_s { bool nsss_rrm_cfg_r15_present = false; @@ -2783,6 +3524,9 @@ struct nprach_params_tdd_nb_v1550_s { void to_json(json_writer& j) const; }; +// PLMN-IdentityList-5GC-NB-r16 ::= SEQUENCE (SIZE (1..6)) OF PLMN-IdentityInfo-5GC-NB-r16 +using plmn_id_list_minus5_gc_nb_r16_l = dyn_array<plmn_id_info_minus5_gc_nb_r16_s>; + // PagingWeight-NB-r14 ::= ENUMERATED struct paging_weight_nb_r14_opts { enum options { w1, w2, w3, w4, w5, w6, w7, w8, w9, w10, w11, w12, w13, w14, w15, w16, nulltype } value; @@ -2853,6 +3597,64 @@ struct sched_info_nb_v1530_s { void to_json(json_writer& j) const; }; +// SystemInformationBlockType1-NB-v1700 ::= SEQUENCE +struct sib_type1_nb_v1700_s { + struct cell_access_related_info_ntn_r17_s_ { + struct cell_barred_ntn_r17_opts { + enum options { barred, not_barred, nulltype } value; + + const char* to_string() const; + }; + typedef enumerated<cell_barred_ntn_r17_opts> cell_barred_ntn_r17_e_; + + // member variables + bool plmn_id_list_v1700_present = false; + cell_barred_ntn_r17_e_ cell_barred_ntn_r17; + plmn_id_list_nb_v1700_l plmn_id_list_v1700; + }; + + // member variables + bool cell_access_related_info_ntn_r17_present = false; + bool non_crit_ext_present = false; + cell_access_related_info_ntn_r17_s_ cell_access_related_info_ntn_r17; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// UAC-BarringPerCat-NB-r16 ::= SEQUENCE +struct uac_barr_per_cat_nb_r16_s { + struct uac_barr_factor_r16_opts { + enum options { p00, p05, p10, p15, p20, p25, p30, p40, p50, p60, p70, p75, p80, p85, p90, p95, nulltype } value; + typedef float number_type; + + const char* to_string() const; + float to_number() const; + const char* to_number_string() const; + }; + typedef enumerated<uac_barr_factor_r16_opts> uac_barr_factor_r16_e_; + struct uac_barr_time_r16_opts { + enum options { s4, s8, s16, s32, s64, s128, s256, s512, nulltype } value; + typedef uint16_t number_type; + + const char* to_string() const; + uint16_t to_number() const; + }; + typedef enumerated<uac_barr_time_r16_opts> uac_barr_time_r16_e_; + + // member variables + uint8_t uac_access_category_r16 = 1; + uac_barr_factor_r16_e_ uac_barr_factor_r16; + uac_barr_time_r16_e_ uac_barr_time_r16; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // WUS-MaxDurationFactor-NB-r15 ::= ENUMERATED struct wus_max_dur_factor_nb_r15_opts { enum options { one128th, one64th, one32th, one16th, one_eighth, one_quarter, one_half, nulltype } value; @@ -3046,8 +3848,33 @@ struct dl_carrier_cfg_common_nb_r14_s { // EDT-TBS-InfoList-NB-r15 ::= SEQUENCE (SIZE (1..3)) OF EDT-TBS-NB-r15 using edt_tbs_info_list_nb_r15_l = dyn_array<edt_tbs_nb_r15_s>; -// InterFreqBlackCellList-NB-r13 ::= SEQUENCE (SIZE (1..16)) OF INTEGER (0..503) -using inter_freq_black_cell_list_nb_r13_l = bounded_array<uint16_t, 16>; +// GWUS-ProbThreshList-NB-r16 ::= SEQUENCE (SIZE (1..3)) OF GWUS-Paging-ProbThresh-NB-r16 +using gwus_prob_thresh_list_nb_r16_l = bounded_array<gwus_paging_prob_thresh_nb_r16_e, 3>; + +// GWUS-ResourceConfig-NB-r16 ::= SEQUENCE +struct gwus_res_cfg_nb_r16_s { + struct res_position_r16_opts { + enum options { primary, secondary, nulltype } value; + + const char* to_string() const; + }; + typedef enumerated<res_position_r16_opts> res_position_r16_e_; + + // member variables + bool num_groups_list_r16_present = false; + bool groups_for_service_list_r16_present = false; + res_position_r16_e_ res_position_r16; + gwus_num_groups_list_nb_r16_l num_groups_list_r16; + gwus_groups_for_service_list_nb_r16_l groups_for_service_list_r16; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// InterFreqExcludedCellList-NB-r13 ::= SEQUENCE (SIZE (1..16)) OF INTEGER (0..503) +using inter_freq_excluded_cell_list_nb_r13_l = bounded_array<uint16_t, 16>; // InterFreqNeighCellList-NB-r13 ::= SEQUENCE (SIZE (1..16)) OF INTEGER (0..503) using inter_freq_neigh_cell_list_nb_r13_l = bounded_array<uint16_t, 16>; @@ -3119,6 +3946,31 @@ struct pcch_cfg_nb_r14_s { void to_json(json_writer& j) const; }; +// PCCH-Config-NB-r17 ::= SEQUENCE +struct pcch_cfg_nb_r17_s { + struct npdcch_num_repeat_paging_r17_opts { + enum options { r1, r2, r4, r8, r16, r32, r64, r128, nulltype } value; + typedef uint8_t number_type; + + const char* to_string() const; + uint8_t to_number() const; + }; + typedef enumerated<npdcch_num_repeat_paging_r17_opts> npdcch_num_repeat_paging_r17_e_; + + // member variables + bool ext = false; + bool paging_weight_r17_present = false; + uint8_t cbp_idx_r17 = 1; + npdcch_num_repeat_paging_r17_e_ npdcch_num_repeat_paging_r17; + paging_weight_nb_r14_e paging_weight_r17; + // ... + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // PowerRampingParameters-NB-v1450 ::= SEQUENCE struct pwr_ramp_params_nb_v1450_s { struct preamb_init_rx_target_pwr_v1450_opts { @@ -3216,6 +4068,36 @@ using rsrp_thress_nprach_info_list_nb_r13_l = bounded_array<uint8_t, 2>; // SchedulingInfoList-NB-v1530 ::= SEQUENCE (SIZE (1..8)) OF SchedulingInfo-NB-v1530 using sched_info_list_nb_v1530_l = dyn_array<sched_info_nb_v1530_s>; +// SystemInformationBlockType1-NB-v1610 ::= SEQUENCE +struct sib_type1_nb_v1610_s { + struct cell_access_related_info_minus5_gc_r16_s_ { + struct cell_barred_minus5_gc_r16_opts { + enum options { barred, not_barred, nulltype } value; + + const char* to_string() const; + }; + typedef enumerated<cell_barred_minus5_gc_r16_opts> cell_barred_minus5_gc_r16_e_; + + // member variables + bool cell_id_r16_present = false; + plmn_id_list_minus5_gc_nb_r16_l plmn_id_list_r16; + fixed_bitstring<24> tac_minus5_gc_r16; + fixed_bitstring<28> cell_id_r16; + cell_barred_minus5_gc_r16_e_ cell_barred_minus5_gc_r16; + }; + + // member variables + bool cell_access_related_info_minus5_gc_r16_present = false; + bool non_crit_ext_present = false; + cell_access_related_info_minus5_gc_r16_s_ cell_access_related_info_minus5_gc_r16; + sib_type1_nb_v1700_s non_crit_ext; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // TDD-Config-NB-r15 ::= SEQUENCE struct tdd_cfg_nb_r15_s { struct sf_assign_r15_opts { @@ -3257,6 +4139,9 @@ struct tdd_cfg_nb_r15_s { void to_json(json_writer& j) const; }; +// UAC-BarringPerCatList-NB-r16 ::= SEQUENCE (SIZE (1..63)) OF UAC-BarringPerCat-NB-r16 +using uac_barr_per_cat_list_nb_r16_l = dyn_array<uac_barr_per_cat_nb_r16_s>; + // UL-ReferenceSignalsNPUSCH-NB-r13 ::= SEQUENCE struct ul_ref_sigs_npusch_nb_r13_s { bool group_hop_enabled_r13 = false; @@ -3268,6 +4153,67 @@ struct ul_ref_sigs_npusch_nb_r13_s { void to_json(json_writer& j) const; }; +// WUS-Config-NB-r15 ::= SEQUENCE +struct wus_cfg_nb_r15_s { + struct num_pos_r15_opts { + enum options { n1, n2, n4, nulltype } value; + typedef uint8_t number_type; + + const char* to_string() const; + uint8_t to_number() const; + }; + typedef enumerated<num_pos_r15_opts> num_pos_r15_e_; + struct num_drx_cycles_relaxed_r15_opts { + enum options { n1, n2, n4, n8, nulltype } value; + typedef uint8_t number_type; + + const char* to_string() const; + uint8_t to_number() const; + }; + typedef enumerated<num_drx_cycles_relaxed_r15_opts> num_drx_cycles_relaxed_r15_e_; + struct time_offset_drx_r15_opts { + enum options { ms40, ms80, ms160, ms240, nulltype } value; + typedef uint8_t number_type; + + const char* to_string() const; + uint8_t to_number() const; + }; + typedef enumerated<time_offset_drx_r15_opts> time_offset_drx_r15_e_; + struct time_offset_e_drx_short_r15_opts { + enum options { ms40, ms80, ms160, ms240, nulltype } value; + typedef uint8_t number_type; + + const char* to_string() const; + uint8_t to_number() const; + }; + typedef enumerated<time_offset_e_drx_short_r15_opts> time_offset_e_drx_short_r15_e_; + struct time_offset_e_drx_long_r15_opts { + enum options { ms1000, ms2000, nulltype } value; + typedef uint16_t number_type; + + const char* to_string() const; + uint16_t to_number() const; + }; + typedef enumerated<time_offset_e_drx_long_r15_opts> time_offset_e_drx_long_r15_e_; + + // member variables + bool ext = false; + bool num_pos_r15_present = false; + bool time_offset_e_drx_long_r15_present = false; + wus_max_dur_factor_nb_r15_e max_dur_factor_r15; + num_pos_r15_e_ num_pos_r15; + num_drx_cycles_relaxed_r15_e_ num_drx_cycles_relaxed_r15; + time_offset_drx_r15_e_ time_offset_drx_r15; + time_offset_e_drx_short_r15_e_ time_offset_e_drx_short_r15; + time_offset_e_drx_long_r15_e_ time_offset_e_drx_long_r15; + // ... + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // WUS-ConfigPerCarrier-NB-r15 ::= SEQUENCE struct wus_cfg_per_carrier_nb_r15_s { wus_max_dur_factor_nb_r15_e max_dur_factor_r15; @@ -3298,6 +4244,85 @@ struct bcch_cfg_nb_r13_s { void to_json(json_writer& j) const; }; +// CBP-Config-NB-r17 ::= SEQUENCE +struct cbp_cfg_nb_r17_s { + struct nb_r17_opts { + enum options { + four_t, + two_t, + one_t, + half_t, + quarter_t, + one8th_t, + one16th_t, + one32nd_t, + one64th_t, + one128th_t, + one256th_t, + one512th_t, + one1024th_t, + 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<nb_r17_opts> nb_r17_e_; + struct ue_specific_drx_cycle_min_r17_opts { + enum options { rf32, rf64, rf128, rf256, nulltype } value; + typedef uint16_t number_type; + + const char* to_string() const; + uint16_t to_number() const; + }; + typedef enumerated<ue_specific_drx_cycle_min_r17_opts> ue_specific_drx_cycle_min_r17_e_; + + // member variables + bool nb_r17_present = false; + bool ue_specific_drx_cycle_min_r17_present = false; + uint8_t nrsrp_min_r17 = 0; + nb_r17_e_ nb_r17; + ue_specific_drx_cycle_min_r17_e_ ue_specific_drx_cycle_min_r17; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// CarrierFreqEUTRA-NB-r16 ::= SEQUENCE +struct carrier_freq_eutra_nb_r16_s { + bool ext = false; + bool sib1_r16_present = false; + bool sib1_br_r16_present = false; + uint32_t carrier_freq_r16 = 0; + // ... + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// CarrierFreqsGERAN-NB-r16 ::= SEQUENCE +struct carrier_freqs_geran_nb_r16_s { + bool ext = false; + bool ec_gsm_iot_r16_present = false; + bool peo_r16_present = false; + carrier_freqs_geran_s carrier_freqs_r16; + // ... + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // DL-ConfigCommon-NB-r14 ::= SEQUENCE struct dl_cfg_common_nb_r14_s { bool ext = false; @@ -3307,6 +4332,43 @@ struct dl_cfg_common_nb_r14_s { // ... // group 0 copy_ptr<wus_cfg_per_carrier_nb_r15_s> wus_cfg_r15; + // group 1 + copy_ptr<wus_cfg_per_carrier_nb_r15_s> gwus_cfg_r16; + // group 2 + copy_ptr<pcch_cfg_nb_r17_s> pcch_cfg_r17; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// GWUS-Config-NB-r16 ::= SEQUENCE +struct gwus_cfg_nb_r16_s { + struct common_seq_r16_opts { + enum options { g0, g126, nulltype } value; + typedef uint8_t number_type; + + const char* to_string() const; + uint8_t to_number() const; + }; + typedef enumerated<common_seq_r16_opts> common_seq_r16_e_; + + // member variables + bool ext = false; + bool group_alternation_r16_present = false; + bool common_seq_r16_present = false; + bool time_params_r16_present = false; + bool res_cfg_e_drx_short_r16_present = false; + bool res_cfg_e_drx_long_r16_present = false; + bool prob_thresh_list_r16_present = false; + common_seq_r16_e_ common_seq_r16; + wus_cfg_nb_r15_s time_params_r16; + gwus_res_cfg_nb_r16_s res_cfg_drx_r16; + gwus_res_cfg_nb_r16_s res_cfg_e_drx_short_r16; + gwus_res_cfg_nb_r16_s res_cfg_e_drx_long_r16; + gwus_prob_thresh_list_nb_r16_l prob_thresh_list_r16; + // ... // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -3334,21 +4396,21 @@ struct inter_freq_carrier_freq_info_nb_r13_s { typedef enumerated<ce_authorisation_offset_r14_opts> ce_authorisation_offset_r14_e_; // member variables - bool ext = false; - bool q_qual_min_r13_present = false; - bool p_max_r13_present = false; - bool q_offset_freq_r13_present = false; - bool inter_freq_neigh_cell_list_r13_present = false; - bool inter_freq_black_cell_list_r13_present = false; - bool multi_band_info_list_r13_present = false; - carrier_freq_nb_r13_s dl_carrier_freq_r13; - int8_t q_rx_lev_min_r13 = -70; - int8_t q_qual_min_r13 = -34; - int8_t p_max_r13 = -30; - q_offset_range_e q_offset_freq_r13; - inter_freq_neigh_cell_list_nb_r13_l inter_freq_neigh_cell_list_r13; - inter_freq_black_cell_list_nb_r13_l inter_freq_black_cell_list_r13; - multi_band_info_list_nb_r13_l multi_band_info_list_r13; + bool ext = false; + bool q_qual_min_r13_present = false; + bool p_max_r13_present = false; + bool q_offset_freq_r13_present = false; + bool inter_freq_neigh_cell_list_r13_present = false; + bool inter_freq_excluded_cell_list_r13_present = false; + bool multi_band_info_list_r13_present = false; + carrier_freq_nb_r13_s dl_carrier_freq_r13; + int8_t q_rx_lev_min_r13 = -70; + int8_t q_qual_min_r13 = -34; + int8_t p_max_r13 = -30; + q_offset_range_e q_offset_freq_r13; + inter_freq_neigh_cell_list_nb_r13_l inter_freq_neigh_cell_list_r13; + inter_freq_excluded_cell_list_nb_r13_l inter_freq_excluded_cell_list_r13; + multi_band_info_list_nb_r13_l multi_band_info_list_r13; // ... // group 0 bool delta_rx_lev_min_v1350_present = false; @@ -3563,6 +4625,46 @@ struct nprach_probability_anchor_nb_r14_s { void to_json(json_writer& j) const; }; +// NPRACH-TxDurationFmt01-NB-r17 ::= SEQUENCE +struct nprach_tx_dur_fmt01_nb_r17_s { + struct nprach_tx_dur_fmt01_r17_opts { + enum options { n2, n4, n8, n16, n32, n64, nulltype } value; + typedef uint8_t number_type; + + const char* to_string() const; + uint8_t to_number() const; + }; + typedef enumerated<nprach_tx_dur_fmt01_r17_opts> nprach_tx_dur_fmt01_r17_e_; + + // member variables + nprach_tx_dur_fmt01_r17_e_ nprach_tx_dur_fmt01_r17; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// NPRACH-TxDurationFmt2-NB-r17 ::= SEQUENCE +struct nprach_tx_dur_fmt2_nb_r17_s { + struct nprach_tx_dur_fmt2_r17_opts { + enum options { n1, n2, n4, n8, n16, nulltype } value; + typedef uint8_t number_type; + + const char* to_string() const; + uint8_t to_number() const; + }; + typedef enumerated<nprach_tx_dur_fmt2_r17_opts> nprach_tx_dur_fmt2_r17_e_; + + // member variables + nprach_tx_dur_fmt2_r17_e_ nprach_tx_dur_fmt2_r17; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // NPUSCH-ConfigCommon-NB-r13 ::= SEQUENCE struct npusch_cfg_common_nb_r13_s { using ack_nack_num_repeats_msg4_r13_l_ = bounded_array<ack_nack_num_repeats_nb_r13_e, 3>; @@ -3755,6 +4857,21 @@ struct sib_type1_nb_v1530_s { bool non_crit_ext_present = false; tdd_params_r15_s_ tdd_params_r15; sched_info_list_nb_v1530_l sched_info_list_v1530; + sib_type1_nb_v1610_s non_crit_ext; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// UAC-Barring-NB-r16 ::= SEQUENCE +struct uac_barr_nb_r16_s { + bool uac_barr_per_cat_list_r16_present = false; + bool uac_ac1_select_assist_info_r16_present = false; + uac_barr_per_cat_list_nb_r16_l uac_barr_per_cat_list_r16; + uac_ac1_select_assist_info_r15_e uac_ac1_select_assist_info_r16; + fixed_bitstring<7> uac_barr_for_access_id_r16; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -3771,6 +4888,8 @@ struct ul_cfg_common_nb_r14_s { // ... // group 0 copy_ptr<nprach_params_list_nb_r14_l> nprach_params_list_edt_r15; + // group 1 + copy_ptr<rsrp_thress_nprach_info_list_nb_r13_l> rsrp_thress_prach_info_list_r16; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -3830,66 +4949,11 @@ struct ul_pwr_ctrl_common_nb_r13_s { void to_json(json_writer& j) const; }; -// WUS-Config-NB-r15 ::= SEQUENCE -struct wus_cfg_nb_r15_s { - struct num_pos_r15_opts { - enum options { n1, n2, n4, nulltype } value; - typedef uint8_t number_type; - - const char* to_string() const; - uint8_t to_number() const; - }; - typedef enumerated<num_pos_r15_opts> num_pos_r15_e_; - struct num_drx_cycles_relaxed_r15_opts { - enum options { n1, n2, n4, n8, nulltype } value; - typedef uint8_t number_type; - - const char* to_string() const; - uint8_t to_number() const; - }; - typedef enumerated<num_drx_cycles_relaxed_r15_opts> num_drx_cycles_relaxed_r15_e_; - struct time_offset_drx_r15_opts { - enum options { ms40, ms80, ms160, ms240, nulltype } value; - typedef uint8_t number_type; - - const char* to_string() const; - uint8_t to_number() const; - }; - typedef enumerated<time_offset_drx_r15_opts> time_offset_drx_r15_e_; - struct time_offset_e_drx_short_r15_opts { - enum options { ms40, ms80, ms160, ms240, nulltype } value; - typedef uint8_t number_type; - - const char* to_string() const; - uint8_t to_number() const; - }; - typedef enumerated<time_offset_e_drx_short_r15_opts> time_offset_e_drx_short_r15_e_; - struct time_offset_e_drx_long_r15_opts { - enum options { ms1000, ms2000, nulltype } value; - typedef uint16_t number_type; - - const char* to_string() const; - uint16_t to_number() const; - }; - typedef enumerated<time_offset_e_drx_long_r15_opts> time_offset_e_drx_long_r15_e_; +// CarrierFreqListEUTRA-NB-r16 ::= SEQUENCE (SIZE (1..8)) OF CarrierFreqEUTRA-NB-r16 +using carrier_freq_list_eutra_nb_r16_l = dyn_array<carrier_freq_eutra_nb_r16_s>; - // member variables - bool ext = false; - bool num_pos_r15_present = false; - bool time_offset_e_drx_long_r15_present = false; - wus_max_dur_factor_nb_r15_e max_dur_factor_r15; - num_pos_r15_e_ num_pos_r15; - num_drx_cycles_relaxed_r15_e_ num_drx_cycles_relaxed_r15; - time_offset_drx_r15_e_ time_offset_drx_r15; - time_offset_e_drx_short_r15_e_ time_offset_e_drx_short_r15; - time_offset_e_drx_long_r15_e_ time_offset_e_drx_long_r15; - // ... - - // sequence methods - SRSASN_CODE pack(bit_ref& bref) const; - SRSASN_CODE unpack(cbit_ref& bref); - void to_json(json_writer& j) const; -}; +// CarrierFreqsListGERAN-NB-r16 ::= SEQUENCE (SIZE (1..8)) OF CarrierFreqsGERAN-NB-r16 +using carrier_freqs_list_geran_nb_r16_l = dyn_array<carrier_freqs_geran_nb_r16_s>; // CellReselectionInfoCommon-NB-v1450 ::= SEQUENCE struct cell_resel_info_common_nb_v1450_s { @@ -3942,6 +5006,66 @@ struct cell_sel_info_nb_v1430_s { void to_json(json_writer& j) const; }; +// ConnMeasConfig-NB-r17 ::= SEQUENCE +struct conn_meas_cfg_nb_r17_s { + struct neigh_cell_meas_criteria_r17_s_ { + struct s_measure_delta_p_r17_opts { + enum options { db6, db9, db12, db15, nulltype } value; + typedef uint8_t number_type; + + const char* to_string() const; + uint8_t to_number() const; + }; + typedef enumerated<s_measure_delta_p_r17_opts> s_measure_delta_p_r17_e_; + struct t_measure_delta_p_r17_opts { + enum options { s15, s30, s45, s60, nulltype } value; + typedef uint8_t number_type; + + const char* to_string() const; + uint8_t to_number() const; + }; + typedef enumerated<t_measure_delta_p_r17_opts> t_measure_delta_p_r17_e_; + + // member variables + s_measure_delta_p_r17_e_ s_measure_delta_p_r17; + t_measure_delta_p_r17_e_ t_measure_delta_p_r17; + }; + + // member variables + bool s_measure_inter_r17_present = false; + bool neigh_cell_meas_criteria_r17_present = false; + uint8_t s_measure_intra_r17 = 0; + uint8_t s_measure_inter_r17 = 0; + neigh_cell_meas_criteria_r17_s_ neigh_cell_meas_criteria_r17; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// CoverageBasedPagingConfig-NB-r17 ::= SEQUENCE +struct coverage_based_paging_cfg_nb_r17_s { + struct cbp_hyst_timer_r17_opts { + enum options { ms2560, ms7680, ms12800, ms17920, ms23040, ms28160, ms33280, ms40960, nulltype } value; + typedef uint16_t number_type; + + const char* to_string() const; + uint16_t to_number() const; + }; + typedef enumerated<cbp_hyst_timer_r17_opts> cbp_hyst_timer_r17_e_; + using cbp_cfg_list_r17_l_ = dyn_array<cbp_cfg_nb_r17_s>; + + // member variables + cbp_hyst_timer_r17_e_ cbp_hyst_timer_r17; + cbp_cfg_list_r17_l_ cbp_cfg_list_r17; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // DL-ConfigCommonList-NB-r14 ::= SEQUENCE (SIZE (1..15)) OF DL-ConfigCommon-NB-r14 using dl_cfg_common_list_nb_r14_l = dyn_array<dl_cfg_common_nb_r14_s>; @@ -4060,6 +5184,36 @@ using nprach_probability_anchor_list_nb_r14_l = dyn_array<nprach_probability_anc // RadioResourceConfigCommonSIB-NB-r13 ::= SEQUENCE struct rr_cfg_common_sib_nb_r13_s { + struct ue_specific_drx_cycle_min_r16_opts { + enum options { rf32, rf64, rf128, rf256, rf512, rf1024, nulltype } value; + typedef uint16_t number_type; + + const char* to_string() const; + uint16_t to_number() const; + }; + typedef enumerated<ue_specific_drx_cycle_min_r16_opts> ue_specific_drx_cycle_min_r16_e_; + struct ntn_cfg_common_r17_s_ { + struct t318_r17_opts { + enum options { ms0, ms200, ms500, ms1000, ms2000, ms4000, ms8000, nulltype } value; + typedef uint16_t number_type; + + const char* to_string() const; + uint16_t to_number() const; + }; + typedef enumerated<t318_r17_opts> t318_r17_e_; + + // member variables + bool ta_report_r17_present = false; + bool nprach_tx_dur_fmt01_r17_present = false; + bool nprach_tx_dur_fmt2_r17_present = false; + bool npusch_tx_dur_r17_present = false; + t318_r17_e_ t318_r17; + nprach_tx_dur_fmt01_nb_r17_s nprach_tx_dur_fmt01_r17; + nprach_tx_dur_fmt2_nb_r17_s nprach_tx_dur_fmt2_r17; + npusch_tx_dur_nb_r17_s npusch_tx_dur_r17; + }; + + // member variables bool ext = false; bool dl_gap_r13_present = false; rach_cfg_common_nb_r13_s rach_cfg_common_r13; @@ -4081,6 +5235,13 @@ struct rr_cfg_common_sib_nb_r13_s { copy_ptr<wus_cfg_nb_r15_s> wus_cfg_r15; // group 3 copy_ptr<nprach_cfg_sib_nb_v1550_s> nprach_cfg_v1550; + // group 4 + bool nrs_non_anchor_cfg_r16_present = false; + bool ue_specific_drx_cycle_min_r16_present = false; + copy_ptr<gwus_cfg_nb_r16_s> gwus_cfg_r16; + ue_specific_drx_cycle_min_r16_e_ ue_specific_drx_cycle_min_r16; + // group 5 + copy_ptr<ntn_cfg_common_r17_s_> ntn_cfg_common_r17; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -4397,6 +5558,57 @@ struct t_resel_nb_r13_opts { }; typedef enumerated<t_resel_nb_r13_opts> t_resel_nb_r13_e; +// UAC-Param-NB-r16 ::= CHOICE +struct uac_param_nb_r16_c { + using uac_barr_per_plmn_list_l_ = dyn_array<uac_barr_nb_r16_s>; + struct types_opts { + enum options { uac_barr_common, uac_barr_per_plmn_list, nulltype } value; + + const char* to_string() const; + }; + typedef enumerated<types_opts> types; + + // choice methods + uac_param_nb_r16_c() = default; + uac_param_nb_r16_c(const uac_param_nb_r16_c& other); + uac_param_nb_r16_c& operator=(const uac_param_nb_r16_c& other); + ~uac_param_nb_r16_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 + uac_barr_nb_r16_s& uac_barr_common() + { + assert_choice_type(types::uac_barr_common, type_, "UAC-Param-NB-r16"); + return c.get<uac_barr_nb_r16_s>(); + } + uac_barr_per_plmn_list_l_& uac_barr_per_plmn_list() + { + assert_choice_type(types::uac_barr_per_plmn_list, type_, "UAC-Param-NB-r16"); + return c.get<uac_barr_per_plmn_list_l_>(); + } + const uac_barr_nb_r16_s& uac_barr_common() const + { + assert_choice_type(types::uac_barr_common, type_, "UAC-Param-NB-r16"); + return c.get<uac_barr_nb_r16_s>(); + } + const uac_barr_per_plmn_list_l_& uac_barr_per_plmn_list() const + { + assert_choice_type(types::uac_barr_per_plmn_list, type_, "UAC-Param-NB-r16"); + return c.get<uac_barr_per_plmn_list_l_>(); + } + uac_barr_nb_r16_s& set_uac_barr_common(); + uac_barr_per_plmn_list_l_& set_uac_barr_per_plmn_list(); + +private: + types type_; + choice_buffer_t<uac_barr_nb_r16_s, uac_barr_per_plmn_list_l_> c; + + void destroy_(); +}; + // UE-TimersAndConstants-NB-r13 ::= SEQUENCE struct ue_timers_and_consts_nb_r13_s { struct t300_r13_opts { @@ -4677,6 +5889,8 @@ struct sib_type14_nb_r13_s { // group 0 bool ab_per_nrsrp_r15_present = false; ab_per_nrsrp_r15_e_ ab_per_nrsrp_r15; + // group 1 + copy_ptr<uac_param_nb_r16_c> uac_param_r16; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -4734,6 +5948,15 @@ struct sib_type2_nb_r13_s { bool cp_edt_r15_present = false; bool up_edt_r15_present = false; copy_ptr<freq_info_v1530_s_> freq_info_v1530; + // group 3 + bool early_security_reactivation_r16_present = false; + bool cp_edt_minus5_gc_r16_present = false; + bool up_edt_minus5_gc_r16_present = false; + bool cp_pur_epc_r16_present = false; + bool up_pur_epc_r16_present = false; + bool cp_pur_minus5_gc_r16_present = false; + bool up_pur_minus5_gc_r16_present = false; + bool rai_activation_enh_r16_present = false; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -4872,6 +6095,8 @@ struct sib_type22_nb_r14_s { // group 0 copy_ptr<mixed_operation_mode_cfg_r15_s_> mixed_operation_mode_cfg_r15; copy_ptr<ul_cfg_common_list_tdd_nb_r15_l> ul_cfg_list_r15; + // group 1 + copy_ptr<coverage_based_paging_cfg_nb_r17_s> coverage_based_paging_cfg_r17; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -4896,6 +6121,23 @@ struct sib_type23_nb_r15_s { void to_json(json_writer& j) const; }; +// SystemInformationBlockType27-NB-r16 ::= SEQUENCE +struct sib_type27_nb_r16_s { + bool ext = false; + bool carrier_freq_list_eutra_r16_present = false; + bool carrier_freqs_list_geran_r16_present = false; + bool late_non_crit_ext_present = false; + carrier_freq_list_eutra_nb_r16_l carrier_freq_list_eutra_r16; + carrier_freqs_list_geran_nb_r16_l carrier_freqs_list_geran_r16; + dyn_octstring late_non_crit_ext; + // ... + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // SystemInformationBlockType3-NB-r13 ::= SEQUENCE struct sib_type3_nb_r13_s { struct cell_resel_info_common_r13_s_ { @@ -4966,6 +6208,39 @@ struct sib_type3_nb_r13_s { // group 4 bool npbch_rrm_cfg_r15_present = false; copy_ptr<nsss_rrm_cfg_nb_r15_s> nsss_rrm_cfg_r15; + // group 5 + bool t_service_r17_present = false; + copy_ptr<conn_meas_cfg_nb_r17_s> conn_meas_cfg_r17; + uint32_t t_service_r17 = 0; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// SystemInformationBlockType31-NB-r17 ::= SEQUENCE +struct sib_type31_nb_r17_s { + bool ext = false; + bool late_non_crit_ext_present = false; + serving_satellite_info_r17_s serving_satellite_info_r17; + dyn_octstring late_non_crit_ext; + // ... + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// SystemInformationBlockType32-NB-r17 ::= SEQUENCE +struct sib_type32_nb_r17_s { + bool ext = false; + bool satellite_info_list_r17_present = false; + bool late_non_crit_ext_present = false; + satellite_info_list_r17_l satellite_info_list_r17; + dyn_octstring late_non_crit_ext; + // ... // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -4975,13 +6250,13 @@ struct sib_type3_nb_r13_s { // SystemInformationBlockType4-NB-r13 ::= SEQUENCE struct sib_type4_nb_r13_s { - bool ext = false; - bool intra_freq_neigh_cell_list_r13_present = false; - bool intra_freq_black_cell_list_r13_present = false; - bool late_non_crit_ext_present = false; - intra_freq_neigh_cell_list_l intra_freq_neigh_cell_list_r13; - intra_freq_black_cell_list_l intra_freq_black_cell_list_r13; - dyn_octstring late_non_crit_ext; + bool ext = false; + bool intra_freq_neigh_cell_list_r13_present = false; + bool intra_freq_excluded_cell_list_r13_present = false; + bool late_non_crit_ext_present = false; + intra_freq_neigh_cell_list_l intra_freq_neigh_cell_list_r13; + intra_freq_excluded_cell_list_l intra_freq_excluded_cell_list_r13; + dyn_octstring late_non_crit_ext; // ... // group 0 copy_ptr<nsss_rrm_cfg_nb_r15_s> nsss_rrm_cfg_r15; @@ -5036,6 +6311,9 @@ struct sys_info_nb_r13_ies_s { sib20_v1430, sib22_v1430, sib23_v1530, + sib27_v1610, + sib31_v1700, + sib32_v1700, nulltype } value; typedef uint8_t number_type; @@ -5043,7 +6321,7 @@ struct sys_info_nb_r13_ies_s { const char* to_string() const; uint8_t to_number() const; }; - typedef enumerated<types_opts, true, 4> types; + typedef enumerated<types_opts, true, 7> types; // choice methods sib_type_and_info_r13_item_c_() = default; @@ -5106,6 +6384,21 @@ struct sys_info_nb_r13_ies_s { assert_choice_type(types::sib23_v1530, type_, "sib-TypeAndInfo-r13-item"); return c.get<sib_type23_nb_r15_s>(); } + sib_type27_nb_r16_s& sib27_v1610() + { + assert_choice_type(types::sib27_v1610, type_, "sib-TypeAndInfo-r13-item"); + return c.get<sib_type27_nb_r16_s>(); + } + sib_type31_nb_r17_s& sib31_v1700() + { + assert_choice_type(types::sib31_v1700, type_, "sib-TypeAndInfo-r13-item"); + return c.get<sib_type31_nb_r17_s>(); + } + sib_type32_nb_r17_s& sib32_v1700() + { + assert_choice_type(types::sib32_v1700, type_, "sib-TypeAndInfo-r13-item"); + return c.get<sib_type32_nb_r17_s>(); + } const sib_type2_nb_r13_s& sib2_r13() const { assert_choice_type(types::sib2_r13, type_, "sib-TypeAndInfo-r13-item"); @@ -5156,6 +6449,21 @@ struct sys_info_nb_r13_ies_s { assert_choice_type(types::sib23_v1530, type_, "sib-TypeAndInfo-r13-item"); return c.get<sib_type23_nb_r15_s>(); } + const sib_type27_nb_r16_s& sib27_v1610() const + { + assert_choice_type(types::sib27_v1610, type_, "sib-TypeAndInfo-r13-item"); + return c.get<sib_type27_nb_r16_s>(); + } + const sib_type31_nb_r17_s& sib31_v1700() const + { + assert_choice_type(types::sib31_v1700, type_, "sib-TypeAndInfo-r13-item"); + return c.get<sib_type31_nb_r17_s>(); + } + const sib_type32_nb_r17_s& sib32_v1700() const + { + assert_choice_type(types::sib32_v1700, type_, "sib-TypeAndInfo-r13-item"); + return c.get<sib_type32_nb_r17_s>(); + } sib_type2_nb_r13_s& set_sib2_r13(); sib_type3_nb_r13_s& set_sib3_r13(); sib_type4_nb_r13_s& set_sib4_r13(); @@ -5166,6 +6474,9 @@ struct sys_info_nb_r13_ies_s { sib_type20_nb_r14_s& set_sib20_v1430(); sib_type22_nb_r14_s& set_sib22_v1430(); sib_type23_nb_r15_s& set_sib23_v1530(); + sib_type27_nb_r16_s& set_sib27_v1610(); + sib_type31_nb_r17_s& set_sib31_v1700(); + sib_type32_nb_r17_s& set_sib32_v1700(); private: types type_; @@ -5175,7 +6486,10 @@ struct sys_info_nb_r13_ies_s { sib_type20_nb_r14_s, sib_type22_nb_r14_s, sib_type23_nb_r15_s, + sib_type27_nb_r16_s, sib_type2_nb_r13_s, + sib_type31_nb_r17_s, + sib_type32_nb_r17_s, sib_type3_nb_r13_s, sib_type4_nb_r13_s, sib_type5_nb_r13_s> @@ -5457,6 +6771,18 @@ struct bcch_dl_sch_msg_nb_s { void to_json(json_writer& j) const; }; +// RRCEarlyDataComplete-NB-v1700-IEs ::= SEQUENCE +struct rrc_early_data_complete_nb_v1700_ies_s { + bool cbp_idx_r17_present = false; + bool non_crit_ext_present = false; + uint8_t cbp_idx_r17 = 1; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // RRCConnectionReestablishment-NB-v1430-IEs ::= SEQUENCE struct rrc_conn_reest_nb_v1430_ies_s { bool dl_nas_mac_present = false; @@ -5469,11 +6795,24 @@ struct rrc_conn_reest_nb_v1430_ies_s { void to_json(json_writer& j) const; }; +// RRCConnectionSetup-NB-v1610-IEs ::= SEQUENCE +struct rrc_conn_setup_nb_v1610_ies_s { + bool ded_info_nas_r16_present = false; + bool non_crit_ext_present = false; + dyn_octstring ded_info_nas_r16; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // RRCEarlyDataComplete-NB-v1590-IEs ::= SEQUENCE struct rrc_early_data_complete_nb_v1590_ies_s { - bool late_non_crit_ext_present = false; - bool non_crit_ext_present = false; - dyn_octstring late_non_crit_ext; + bool late_non_crit_ext_present = false; + bool non_crit_ext_present = false; + dyn_octstring late_non_crit_ext; + rrc_early_data_complete_nb_v1700_ies_s non_crit_ext; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -5562,10 +6901,11 @@ struct rrc_conn_reject_nb_r13_ies_s { // RRCConnectionSetup-NB-r13-IEs ::= SEQUENCE struct rrc_conn_setup_nb_r13_ies_s { - bool late_non_crit_ext_present = false; - bool non_crit_ext_present = false; - rr_cfg_ded_nb_r13_s rr_cfg_ded_r13; - dyn_octstring late_non_crit_ext; + bool late_non_crit_ext_present = false; + bool non_crit_ext_present = false; + rr_cfg_ded_nb_r13_s rr_cfg_ded_r13; + dyn_octstring late_non_crit_ext; + rrc_conn_setup_nb_v1610_ies_s non_crit_ext; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -6004,10 +7344,456 @@ struct dl_ccch_msg_nb_s { void to_json(json_writer& j) const; }; +// NRSRP-ChangeThresh-NB-r16 ::= ENUMERATED +struct nrsrp_change_thresh_nb_r16_opts { + enum options { + db4, + db6, + db8, + db10, + db14, + db18, + db22, + db26, + db30, + db34, + 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<nrsrp_change_thresh_nb_r16_opts> nrsrp_change_thresh_nb_r16_e; + +// PUR-NRSRP-ChangeThreshold-NB-r16 ::= SEQUENCE +struct pur_nrsrp_change_thres_nb_r16_s { + bool decrease_thresh_r16_present = false; + nrsrp_change_thresh_nb_r16_e increase_thresh_r16; + nrsrp_change_thresh_nb_r16_e decrease_thresh_r16; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// PUR-PeriodicityAndOffset-NB-r16 ::= CHOICE +struct pur_periodicity_and_offset_nb_r16_c { + struct types_opts { + enum options { + periodicity8, + periodicity16, + periodicity32, + periodicity64, + periodicity128, + periodicity256, + periodicity512, + periodicity1024, + periodicity2048, + periodicity4096, + periodicity8192, + nulltype + } value; + typedef uint16_t number_type; + + const char* to_string() const; + uint16_t to_number() const; + }; + typedef enumerated<types_opts> types; + + // choice methods + pur_periodicity_and_offset_nb_r16_c() = default; + pur_periodicity_and_offset_nb_r16_c(const pur_periodicity_and_offset_nb_r16_c& other); + pur_periodicity_and_offset_nb_r16_c& operator=(const pur_periodicity_and_offset_nb_r16_c& other); + ~pur_periodicity_and_offset_nb_r16_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& periodicity8() + { + assert_choice_type(types::periodicity8, type_, "PUR-PeriodicityAndOffset-NB-r16"); + return c.get<uint8_t>(); + } + uint8_t& periodicity16() + { + assert_choice_type(types::periodicity16, type_, "PUR-PeriodicityAndOffset-NB-r16"); + return c.get<uint8_t>(); + } + uint8_t& periodicity32() + { + assert_choice_type(types::periodicity32, type_, "PUR-PeriodicityAndOffset-NB-r16"); + return c.get<uint8_t>(); + } + uint8_t& periodicity64() + { + assert_choice_type(types::periodicity64, type_, "PUR-PeriodicityAndOffset-NB-r16"); + return c.get<uint8_t>(); + } + uint8_t& periodicity128() + { + assert_choice_type(types::periodicity128, type_, "PUR-PeriodicityAndOffset-NB-r16"); + return c.get<uint8_t>(); + } + uint16_t& periodicity256() + { + assert_choice_type(types::periodicity256, type_, "PUR-PeriodicityAndOffset-NB-r16"); + return c.get<uint16_t>(); + } + uint16_t& periodicity512() + { + assert_choice_type(types::periodicity512, type_, "PUR-PeriodicityAndOffset-NB-r16"); + return c.get<uint16_t>(); + } + uint16_t& periodicity1024() + { + assert_choice_type(types::periodicity1024, type_, "PUR-PeriodicityAndOffset-NB-r16"); + return c.get<uint16_t>(); + } + uint16_t& periodicity2048() + { + assert_choice_type(types::periodicity2048, type_, "PUR-PeriodicityAndOffset-NB-r16"); + return c.get<uint16_t>(); + } + uint16_t& periodicity4096() + { + assert_choice_type(types::periodicity4096, type_, "PUR-PeriodicityAndOffset-NB-r16"); + return c.get<uint16_t>(); + } + uint16_t& periodicity8192() + { + assert_choice_type(types::periodicity8192, type_, "PUR-PeriodicityAndOffset-NB-r16"); + return c.get<uint16_t>(); + } + const uint8_t& periodicity8() const + { + assert_choice_type(types::periodicity8, type_, "PUR-PeriodicityAndOffset-NB-r16"); + return c.get<uint8_t>(); + } + const uint8_t& periodicity16() const + { + assert_choice_type(types::periodicity16, type_, "PUR-PeriodicityAndOffset-NB-r16"); + return c.get<uint8_t>(); + } + const uint8_t& periodicity32() const + { + assert_choice_type(types::periodicity32, type_, "PUR-PeriodicityAndOffset-NB-r16"); + return c.get<uint8_t>(); + } + const uint8_t& periodicity64() const + { + assert_choice_type(types::periodicity64, type_, "PUR-PeriodicityAndOffset-NB-r16"); + return c.get<uint8_t>(); + } + const uint8_t& periodicity128() const + { + assert_choice_type(types::periodicity128, type_, "PUR-PeriodicityAndOffset-NB-r16"); + return c.get<uint8_t>(); + } + const uint16_t& periodicity256() const + { + assert_choice_type(types::periodicity256, type_, "PUR-PeriodicityAndOffset-NB-r16"); + return c.get<uint16_t>(); + } + const uint16_t& periodicity512() const + { + assert_choice_type(types::periodicity512, type_, "PUR-PeriodicityAndOffset-NB-r16"); + return c.get<uint16_t>(); + } + const uint16_t& periodicity1024() const + { + assert_choice_type(types::periodicity1024, type_, "PUR-PeriodicityAndOffset-NB-r16"); + return c.get<uint16_t>(); + } + const uint16_t& periodicity2048() const + { + assert_choice_type(types::periodicity2048, type_, "PUR-PeriodicityAndOffset-NB-r16"); + return c.get<uint16_t>(); + } + const uint16_t& periodicity4096() const + { + assert_choice_type(types::periodicity4096, type_, "PUR-PeriodicityAndOffset-NB-r16"); + return c.get<uint16_t>(); + } + const uint16_t& periodicity8192() const + { + assert_choice_type(types::periodicity8192, type_, "PUR-PeriodicityAndOffset-NB-r16"); + return c.get<uint16_t>(); + } + uint8_t& set_periodicity8(); + uint8_t& set_periodicity16(); + uint8_t& set_periodicity32(); + uint8_t& set_periodicity64(); + uint8_t& set_periodicity128(); + uint16_t& set_periodicity256(); + uint16_t& set_periodicity512(); + uint16_t& set_periodicity1024(); + uint16_t& set_periodicity2048(); + uint16_t& set_periodicity4096(); + uint16_t& set_periodicity8192(); + +private: + types type_; + pod_choice_buffer_t c; + + void destroy_(); +}; + +// PUR-UL-16QAM-Config-NB-r17 ::= SEQUENCE +struct pur_ul_minus16_qam_cfg_nb_r17_s { + ul_pwr_ctrl_ded_nb_v1700_s ul_pwr_ctrl_ded_r17; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// PUR-Config-NB-r16 ::= SEQUENCE +struct pur_cfg_nb_r16_s { + struct pur_implicit_release_after_r16_opts { + enum options { n2, n4, n8, spare, nulltype } value; + typedef uint8_t number_type; + + const char* to_string() const; + uint8_t to_number() const; + }; + typedef enumerated<pur_implicit_release_after_r16_opts> pur_implicit_release_after_r16_e_; + struct pur_resp_win_timer_r16_opts { + enum options { pp1, pp2, pp3, pp4, pp8, pp16, pp32, pp64, nulltype } value; + typedef uint8_t number_type; + + const char* to_string() const; + uint8_t to_number() const; + }; + typedef enumerated<pur_resp_win_timer_r16_opts> pur_resp_win_timer_r16_e_; + struct pur_start_time_params_r16_s_ { + pur_periodicity_and_offset_nb_r16_c periodicity_and_offset_r16; + uint16_t start_sfn_r16 = 0; + uint8_t start_sf_r16 = 0; + fixed_bitstring<1> hsfn_lsb_info_r16; + }; + struct pur_num_occasions_r16_opts { + enum options { one, infinite, nulltype } value; + typedef uint8_t number_type; + + const char* to_string() const; + uint8_t to_number() const; + }; + typedef enumerated<pur_num_occasions_r16_opts> pur_num_occasions_r16_e_; + struct pur_phys_cfg_r16_s_ { + struct npusch_sub_carrier_set_idx_r16_c_ { + struct types_opts { + enum options { khz15, khz3dot75, nulltype } value; + typedef float number_type; + + const char* to_string() const; + float to_number() const; + const char* to_number_string() const; + }; + typedef enumerated<types_opts> types; + + // choice methods + npusch_sub_carrier_set_idx_r16_c_() = default; + npusch_sub_carrier_set_idx_r16_c_(const npusch_sub_carrier_set_idx_r16_c_& other); + npusch_sub_carrier_set_idx_r16_c_& operator=(const npusch_sub_carrier_set_idx_r16_c_& other); + ~npusch_sub_carrier_set_idx_r16_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& khz15() + { + assert_choice_type(types::khz15, type_, "npusch-SubCarrierSetIndex-r16"); + return c.get<uint8_t>(); + } + uint8_t& khz3dot75() + { + assert_choice_type(types::khz3dot75, type_, "npusch-SubCarrierSetIndex-r16"); + return c.get<uint8_t>(); + } + const uint8_t& khz15() const + { + assert_choice_type(types::khz15, type_, "npusch-SubCarrierSetIndex-r16"); + return c.get<uint8_t>(); + } + const uint8_t& khz3dot75() const + { + assert_choice_type(types::khz3dot75, type_, "npusch-SubCarrierSetIndex-r16"); + return c.get<uint8_t>(); + } + uint8_t& set_khz15(); + uint8_t& set_khz3dot75(); + + private: + types type_; + pod_choice_buffer_t c; + + void destroy_(); + }; + struct npusch_mcs_r16_c_ { + struct types_opts { + enum options { single_tone, multi_tone, nulltype } value; + + const char* to_string() const; + }; + typedef enumerated<types_opts> types; + + // choice methods + npusch_mcs_r16_c_() = default; + npusch_mcs_r16_c_(const npusch_mcs_r16_c_& other); + npusch_mcs_r16_c_& operator=(const npusch_mcs_r16_c_& other); + ~npusch_mcs_r16_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& single_tone() + { + assert_choice_type(types::single_tone, type_, "npusch-MCS-r16"); + return c.get<uint8_t>(); + } + uint8_t& multi_tone() + { + assert_choice_type(types::multi_tone, type_, "npusch-MCS-r16"); + return c.get<uint8_t>(); + } + const uint8_t& single_tone() const + { + assert_choice_type(types::single_tone, type_, "npusch-MCS-r16"); + return c.get<uint8_t>(); + } + const uint8_t& multi_tone() const + { + assert_choice_type(types::multi_tone, type_, "npusch-MCS-r16"); + return c.get<uint8_t>(); + } + uint8_t& set_single_tone(); + uint8_t& set_multi_tone(); + + private: + types type_; + pod_choice_buffer_t c; + + void destroy_(); + }; + struct alpha_r16_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_r16_opts> alpha_r16_e_; + struct npusch_cyclic_shift_r16_opts { + enum options { n0, n6, nulltype } value; + typedef uint8_t number_type; + + const char* to_string() const; + uint8_t to_number() const; + }; + typedef enumerated<npusch_cyclic_shift_r16_opts> npusch_cyclic_shift_r16_e_; + + // member variables + carrier_cfg_ded_nb_r13_s carrier_cfg_r16; + uint8_t npusch_num_rus_idx_r16 = 0; + uint8_t npusch_num_repeats_idx_r16 = 0; + npusch_sub_carrier_set_idx_r16_c_ npusch_sub_carrier_set_idx_r16; + npusch_mcs_r16_c_ npusch_mcs_r16; + int8_t p0_ue_npusch_r16 = -8; + alpha_r16_e_ alpha_r16; + npusch_cyclic_shift_r16_e_ npusch_cyclic_shift_r16; + npdcch_cfg_ded_nb_r13_s npdcch_cfg_r16; + }; + struct pur_phys_cfg_v1650_s_ { + ack_nack_num_repeats_nb_r13_e ack_nack_num_repeats_r16; + }; + struct pur_phys_cfg_v1700_s_ { + bool pur_ul_minus16_qam_cfg_r17_present = false; + bool pur_dl_minus16_qam_cfg_r17_present = false; + setup_release_c<pur_ul_minus16_qam_cfg_nb_r17_s> pur_ul_minus16_qam_cfg_r17; + setup_release_c<npdsch_minus16_qam_cfg_nb_r17_s> pur_dl_minus16_qam_cfg_r17; + }; + + // member variables + bool ext = false; + bool pur_cfg_id_r16_present = false; + bool pur_time_align_timer_r16_present = false; + bool pur_nrsrp_change_thres_r16_present = false; + bool pur_implicit_release_after_r16_present = false; + bool pur_rnti_r16_present = false; + bool pur_resp_win_timer_r16_present = false; + bool pur_start_time_params_r16_present = false; + bool pur_phys_cfg_r16_present = false; + fixed_bitstring<20> pur_cfg_id_r16; + uint8_t pur_time_align_timer_r16 = 1; + setup_release_c<pur_nrsrp_change_thres_nb_r16_s> pur_nrsrp_change_thres_r16; + pur_implicit_release_after_r16_e_ pur_implicit_release_after_r16; + fixed_bitstring<16> pur_rnti_r16; + pur_resp_win_timer_r16_e_ pur_resp_win_timer_r16; + pur_start_time_params_r16_s_ pur_start_time_params_r16; + pur_num_occasions_r16_e_ pur_num_occasions_r16; + pur_phys_cfg_r16_s_ pur_phys_cfg_r16; + // ... + // group 0 + copy_ptr<pur_phys_cfg_v1650_s_> pur_phys_cfg_v1650; + // group 1 + copy_ptr<pur_phys_cfg_v1700_s_> pur_phys_cfg_v1700; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// RRCConnectionRelease-NB-v1700-IEs ::= SEQUENCE +struct rrc_conn_release_nb_v1700_ies_s { + bool cbp_idx_r17_present = false; + bool non_crit_ext_present = false; + uint8_t cbp_idx_r17 = 1; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// RRCConnectionRelease-NB-v1610-IEs ::= SEQUENCE +struct rrc_conn_release_nb_v1610_ies_s { + bool resume_id_r16_present = false; + bool anr_meas_cfg_r16_present = false; + bool pur_cfg_r16_present = false; + bool non_crit_ext_present = false; + fixed_bitstring<40> resume_id_r16; + anr_meas_cfg_nb_r16_s anr_meas_cfg_r16; + setup_release_c<pur_cfg_nb_r16_s> pur_cfg_r16; + rrc_conn_release_nb_v1700_ies_s non_crit_ext; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // RRCConnectionRelease-NB-v15b0-IEs ::= SEQUENCE struct rrc_conn_release_nb_v15b0_ies_s { - bool no_last_cell_upd_r15_present = false; - bool non_crit_ext_present = false; + bool no_last_cell_upd_r15_present = false; + bool non_crit_ext_present = false; + rrc_conn_release_nb_v1610_ies_s non_crit_ext; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -6060,6 +7846,17 @@ struct rrc_conn_release_nb_v1430_ies_s { void to_json(json_writer& j) const; }; +// RRCConnectionResume-NB-v1610-IEs ::= SEQUENCE +struct rrc_conn_resume_nb_v1610_ies_s { + bool full_cfg_r16_present = false; + bool non_crit_ext_present = false; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // ReleaseCause-NB-r13 ::= ENUMERATED struct release_cause_nb_r13_opts { enum options { load_balancing_ta_urequired, other, rrc_suspend, spare1, nulltype } value; @@ -6123,13 +7920,14 @@ struct rrc_conn_release_nb_r13_ies_s { // RRCConnectionResume-NB-r13-IEs ::= SEQUENCE struct rrc_conn_resume_nb_r13_ies_s { - bool rr_cfg_ded_r13_present = false; - bool drb_continue_rohc_r13_present = false; - bool late_non_crit_ext_present = false; - bool non_crit_ext_present = false; - rr_cfg_ded_nb_r13_s rr_cfg_ded_r13; - uint8_t next_hop_chaining_count_r13 = 0; - dyn_octstring late_non_crit_ext; + bool rr_cfg_ded_r13_present = false; + bool drb_continue_rohc_r13_present = false; + bool late_non_crit_ext_present = false; + bool non_crit_ext_present = false; + rr_cfg_ded_nb_r13_s rr_cfg_ded_r13; + uint8_t next_hop_chaining_count_r13 = 0; + dyn_octstring late_non_crit_ext; + rrc_conn_resume_nb_v1610_ies_s non_crit_ext; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -6149,6 +7947,21 @@ struct ue_cap_enquiry_nb_r13_ies_s { void to_json(json_writer& j) const; }; +// UEInformationRequest-NB-r16-IEs ::= SEQUENCE +struct ue_info_request_nb_r16_ies_s { + bool late_non_crit_ext_present = false; + bool non_crit_ext_present = false; + bool rach_report_req_r16 = false; + bool rlf_report_req_r16 = false; + bool anr_report_req_r16 = false; + dyn_octstring late_non_crit_ext; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // DLInformationTransfer-NB ::= SEQUENCE struct dl_info_transfer_nb_s { struct crit_exts_c_ { @@ -6519,6 +8332,52 @@ struct ue_cap_enquiry_nb_s { void to_json(json_writer& j) const; }; +// UEInformationRequest-NB-r16 ::= SEQUENCE +struct ue_info_request_nb_r16_s { + struct crit_exts_c_ { + struct types_opts { + enum options { ue_info_request_r16, crit_exts_future, nulltype } value; + + const char* to_string() const; + }; + typedef enumerated<types_opts> types; + + // choice methods + crit_exts_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 + ue_info_request_nb_r16_ies_s& ue_info_request_r16() + { + assert_choice_type(types::ue_info_request_r16, type_, "criticalExtensions"); + return c; + } + const ue_info_request_nb_r16_ies_s& ue_info_request_r16() const + { + assert_choice_type(types::ue_info_request_r16, type_, "criticalExtensions"); + return c; + } + ue_info_request_nb_r16_ies_s& set_ue_info_request_r16(); + void set_crit_exts_future(); + + private: + types type_; + ue_info_request_nb_r16_ies_s c; + }; + + // member variables + uint8_t rrc_transaction_id = 0; + crit_exts_c_ crit_exts; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // DL-DCCH-MessageType-NB ::= CHOICE struct dl_dcch_msg_type_nb_c { struct c1_c_ { @@ -6530,7 +8389,7 @@ struct dl_dcch_msg_type_nb_c { security_mode_cmd_r13, ue_cap_enquiry_r13, rrc_conn_resume_r13, - spare2, + ue_info_request_r16, spare1, nulltype } value; @@ -6580,6 +8439,11 @@ struct dl_dcch_msg_type_nb_c { assert_choice_type(types::rrc_conn_resume_r13, type_, "c1"); return c.get<rrc_conn_resume_nb_s>(); } + ue_info_request_nb_r16_s& ue_info_request_r16() + { + assert_choice_type(types::ue_info_request_r16, type_, "c1"); + return c.get<ue_info_request_nb_r16_s>(); + } const dl_info_transfer_nb_s& dl_info_transfer_r13() const { assert_choice_type(types::dl_info_transfer_r13, type_, "c1"); @@ -6610,14 +8474,19 @@ struct dl_dcch_msg_type_nb_c { assert_choice_type(types::rrc_conn_resume_r13, type_, "c1"); return c.get<rrc_conn_resume_nb_s>(); } - dl_info_transfer_nb_s& set_dl_info_transfer_r13(); - rrc_conn_recfg_nb_s& set_rrc_conn_recfg_r13(); - rrc_conn_release_nb_s& set_rrc_conn_release_r13(); - security_mode_cmd_s& set_security_mode_cmd_r13(); - ue_cap_enquiry_nb_s& set_ue_cap_enquiry_r13(); - rrc_conn_resume_nb_s& set_rrc_conn_resume_r13(); - void set_spare2(); - void set_spare1(); + const ue_info_request_nb_r16_s& ue_info_request_r16() const + { + assert_choice_type(types::ue_info_request_r16, type_, "c1"); + return c.get<ue_info_request_nb_r16_s>(); + } + dl_info_transfer_nb_s& set_dl_info_transfer_r13(); + rrc_conn_recfg_nb_s& set_rrc_conn_recfg_r13(); + rrc_conn_release_nb_s& set_rrc_conn_release_r13(); + security_mode_cmd_s& set_security_mode_cmd_r13(); + ue_cap_enquiry_nb_s& set_ue_cap_enquiry_r13(); + rrc_conn_resume_nb_s& set_rrc_conn_resume_r13(); + ue_info_request_nb_r16_s& set_ue_info_request_r16(); + void set_spare1(); private: types type_; @@ -6626,7 +8495,8 @@ struct dl_dcch_msg_type_nb_c { rrc_conn_release_nb_s, rrc_conn_resume_nb_s, security_mode_cmd_s, - ue_cap_enquiry_nb_s> + ue_cap_enquiry_nb_s, + ue_info_request_nb_r16_s> c; void destroy_(); @@ -6692,7 +8562,7 @@ using supported_band_list_nb_r13_l = dyn_array<supported_band_nb_r13_s>; // AccessStratumRelease-NB-r13 ::= ENUMERATED struct access_stratum_release_nb_r13_opts { - enum options { rel13, rel14, rel15, spare5, spare4, spare3, spare2, spare1, /*...*/ nulltype } value; + enum options { rel13, rel14, rel15, rel16, rel17, spare3, spare2, spare1, /*...*/ nulltype } value; typedef uint8_t number_type; const char* to_string() const; @@ -6976,10 +8846,61 @@ struct ho_prep_info_nb_s { void to_json(json_writer& j) const; }; -// MeasResultServCell-NB-r14 ::= SEQUENCE -struct meas_result_serv_cell_nb_r14_s { - uint8_t nrsrp_result_r14 = 0; - int8_t nrsrq_result_r14 = -30; +// InitialUE-Identity-5GC-NB-r16 ::= CHOICE +struct init_ue_id_minus5_gc_nb_r16_c { + struct types_opts { + enum options { ng_minus5_g_s_tmsi_r16, random_value, nulltype } value; + typedef int8_t number_type; + + const char* to_string() const; + int8_t to_number() const; + }; + typedef enumerated<types_opts> types; + + // choice methods + init_ue_id_minus5_gc_nb_r16_c() = default; + init_ue_id_minus5_gc_nb_r16_c(const init_ue_id_minus5_gc_nb_r16_c& other); + init_ue_id_minus5_gc_nb_r16_c& operator=(const init_ue_id_minus5_gc_nb_r16_c& other); + ~init_ue_id_minus5_gc_nb_r16_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<48>& ng_minus5_g_s_tmsi_r16() + { + assert_choice_type(types::ng_minus5_g_s_tmsi_r16, type_, "InitialUE-Identity-5GC-NB-r16"); + return c.get<fixed_bitstring<48> >(); + } + fixed_bitstring<48>& random_value() + { + assert_choice_type(types::random_value, type_, "InitialUE-Identity-5GC-NB-r16"); + return c.get<fixed_bitstring<48> >(); + } + const fixed_bitstring<48>& ng_minus5_g_s_tmsi_r16() const + { + assert_choice_type(types::ng_minus5_g_s_tmsi_r16, type_, "InitialUE-Identity-5GC-NB-r16"); + return c.get<fixed_bitstring<48> >(); + } + const fixed_bitstring<48>& random_value() const + { + assert_choice_type(types::random_value, type_, "InitialUE-Identity-5GC-NB-r16"); + return c.get<fixed_bitstring<48> >(); + } + fixed_bitstring<48>& set_ng_minus5_g_s_tmsi_r16(); + fixed_bitstring<48>& set_random_value(); + +private: + types type_; + choice_buffer_t<fixed_bitstring<48> > c; + + void destroy_(); +}; + +// PagingRecord-NB-v1610 ::= SEQUENCE +struct paging_record_nb_v1610_s { + bool mt_edt_r16_present = false; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -6999,6 +8920,21 @@ struct paging_record_nb_r13_s { void to_json(json_writer& j) const; }; +// PagingRecordList-NB-v1610 ::= SEQUENCE (SIZE (1..16)) OF PagingRecord-NB-v1610 +using paging_record_list_nb_v1610_l = dyn_array<paging_record_nb_v1610_s>; + +// Paging-NB-v1610-IEs ::= SEQUENCE +struct paging_nb_v1610_ies_s { + bool paging_record_list_v1610_present = false; + bool non_crit_ext_present = false; + paging_record_list_nb_v1610_l paging_record_list_v1610; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // PagingRecordList-NB-r13 ::= SEQUENCE (SIZE (1..16)) OF PagingRecord-NB-r13 using paging_record_list_nb_r13_l = dyn_array<paging_record_nb_r13_s>; @@ -7009,6 +8945,7 @@ struct paging_nb_s { bool sys_info_mod_e_drx_r13_present = false; bool non_crit_ext_present = false; paging_record_list_nb_r13_l paging_record_list_r13; + paging_nb_v1610_ies_s non_crit_ext; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -7095,6 +9032,182 @@ struct pci_arfcn_nb_r14_s { void to_json(json_writer& j) const; }; +// PUR-ConfigRequest-NB-r16 ::= CHOICE +struct pur_cfg_request_nb_r16_c { + struct pur_setup_request_s_ { + struct requested_num_occasions_r16_opts { + enum options { one, infinite, nulltype } value; + typedef uint8_t number_type; + + const char* to_string() const; + uint8_t to_number() const; + }; + typedef enumerated<requested_num_occasions_r16_opts> requested_num_occasions_r16_e_; + struct requested_tbs_r16_opts { + enum options { + b328, + b376, + b424, + b472, + b504, + b552, + b584, + b616, + b680, + b744, + b776, + b808, + b872, + b904, + b936, + b968, + b1000, + b1032, + b1096, + b1128, + b1192, + b1224, + b1256, + b1352, + b1384, + b1544, + b1608, + b1736, + b1800, + b2024, + b2280, + b2536, + nulltype + } value; + typedef uint16_t number_type; + + const char* to_string() const; + uint16_t to_number() const; + }; + typedef enumerated<requested_tbs_r16_opts> requested_tbs_r16_e_; + + // member variables + bool rrc_ack_r16_present = false; + requested_num_occasions_r16_e_ requested_num_occasions_r16; + pur_periodicity_and_offset_nb_r16_c requested_periodicity_and_offset_r16; + requested_tbs_r16_e_ requested_tbs_r16; + }; + struct types_opts { + enum options { pur_release_request, pur_setup_request, nulltype } value; + + const char* to_string() const; + }; + typedef enumerated<types_opts> types; + + // choice methods + pur_cfg_request_nb_r16_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 + pur_setup_request_s_& pur_setup_request() + { + assert_choice_type(types::pur_setup_request, type_, "PUR-ConfigRequest-NB-r16"); + return c; + } + const pur_setup_request_s_& pur_setup_request() const + { + assert_choice_type(types::pur_setup_request, type_, "PUR-ConfigRequest-NB-r16"); + return c; + } + void set_pur_release_request(); + pur_setup_request_s_& set_pur_setup_request(); + +private: + types type_; + pur_setup_request_s_ c; +}; + +// PURConfigurationRequest-NB-r16-IEs ::= SEQUENCE +struct pur_cfg_request_nb_r16_ies_s { + bool pur_cfg_request_r16_present = false; + bool late_non_crit_ext_present = false; + bool non_crit_ext_present = false; + pur_cfg_request_nb_r16_c pur_cfg_request_r16; + dyn_octstring late_non_crit_ext; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// PURConfigurationRequest-NB-r16 ::= SEQUENCE +struct pur_cfg_request_nb_r16_s { + struct crit_exts_c_ { + struct types_opts { + enum options { pur_cfg_request_r16, crit_exts_future, nulltype } value; + + const char* to_string() const; + }; + typedef enumerated<types_opts> types; + + // choice methods + crit_exts_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 + pur_cfg_request_nb_r16_ies_s& pur_cfg_request_r16() + { + assert_choice_type(types::pur_cfg_request_r16, type_, "criticalExtensions"); + return c; + } + const pur_cfg_request_nb_r16_ies_s& pur_cfg_request_r16() const + { + assert_choice_type(types::pur_cfg_request_r16, type_, "criticalExtensions"); + return c; + } + pur_cfg_request_nb_r16_ies_s& set_pur_cfg_request_r16(); + void set_crit_exts_future(); + + private: + types type_; + pur_cfg_request_nb_r16_ies_s c; + }; + + // member variables + crit_exts_c_ crit_exts; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// SupportedBand-NB-v1710 ::= SEQUENCE +struct supported_band_nb_v1710_s { + bool npusch_minus16_qam_r17_present = false; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// SupportedBandList-NB-v1710 ::= SEQUENCE (SIZE (1..64)) OF SupportedBand-NB-v1710 +using supported_band_list_nb_v1710_l = dyn_array<supported_band_nb_v1710_s>; + +// RF-Parameters-NB-v1710 ::= SEQUENCE +struct rf_params_nb_v1710_s { + bool supported_band_list_v1710_present = false; + supported_band_list_nb_v1710_l supported_band_list_v1710; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // RRCConnectionReconfigurationComplete-NB-r13-IEs ::= SEQUENCE struct rrc_conn_recfg_complete_nb_r13_ies_s { bool late_non_crit_ext_present = false; @@ -7153,11 +9266,37 @@ struct rrc_conn_recfg_complete_nb_s { void to_json(json_writer& j) const; }; +// RRCConnectionReestablishmentComplete-NB-v1710-IEs ::= SEQUENCE +struct rrc_conn_reest_complete_nb_v1710_ies_s { + bool gnss_validity_dur_r17_present = false; + bool non_crit_ext_present = false; + gnss_validity_dur_r17_e gnss_validity_dur_r17; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// RRCConnectionReestablishmentComplete-NB-v1610-IEs ::= SEQUENCE +struct rrc_conn_reest_complete_nb_v1610_ies_s { + bool rlf_info_available_r16_present = false; + bool anr_info_available_r16_present = false; + bool non_crit_ext_present = false; + rrc_conn_reest_complete_nb_v1710_ies_s non_crit_ext; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // RRCConnectionReestablishmentComplete-NB-v1470-IEs ::= SEQUENCE struct rrc_conn_reest_complete_nb_v1470_ies_s { - bool meas_result_serv_cell_r14_present = false; - bool non_crit_ext_present = false; - meas_result_serv_cell_nb_r14_s meas_result_serv_cell_r14; + bool meas_result_serv_cell_r14_present = false; + bool non_crit_ext_present = false; + meas_result_serv_cell_nb_r14_s meas_result_serv_cell_r14; + rrc_conn_reest_complete_nb_v1610_ies_s non_crit_ext; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -7224,6 +9363,49 @@ struct rrc_conn_reest_complete_nb_s { void to_json(json_writer& j) const; }; +// CQI-NPDCCH-Short-NB-r14 ::= ENUMERATED +struct cqi_npdcch_short_nb_r14_opts { + enum options { no_meass, candidate_rep_minus1, candidate_rep_minus2, candidate_rep_minus3, nulltype } value; + typedef int8_t number_type; + + const char* to_string() const; + int8_t to_number() const; +}; +typedef enumerated<cqi_npdcch_short_nb_r14_opts> cqi_npdcch_short_nb_r14_e; + +// ReestabUE-Identity-CP-5GC-NB-r16 ::= SEQUENCE +struct reestab_ue_id_cp_minus5_gc_nb_r16_s { + fixed_bitstring<40> truncated5_g_s_tmsi_r16; + fixed_bitstring<16> ul_nas_mac_r16; + fixed_bitstring<5> ul_nas_count_r16; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// ReestablishmentCause-NB-r13 ::= ENUMERATED +struct reest_cause_nb_r13_opts { + enum options { recfg_fail, other_fail, spare2, spare1, nulltype } value; + + const char* to_string() const; +}; +typedef enumerated<reest_cause_nb_r13_opts> reest_cause_nb_r13_e; + +// RRCConnectionReestablishmentRequest-5GC-NB-r16-IEs ::= SEQUENCE +struct rrc_conn_reest_request_minus5_gc_nb_r16_ies_s { + reestab_ue_id_cp_minus5_gc_nb_r16_s ue_id_r16; + reest_cause_nb_r13_e reest_cause_r16; + cqi_npdcch_short_nb_r14_e cqi_npdcch_r16; + fixed_bitstring<1> spare; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // CQI-NPDCCH-NB-r14 ::= ENUMERATED struct cqi_npdcch_nb_r14_opts { enum options { @@ -7247,16 +9429,6 @@ struct cqi_npdcch_nb_r14_opts { }; typedef enumerated<cqi_npdcch_nb_r14_opts> cqi_npdcch_nb_r14_e; -// CQI-NPDCCH-Short-NB-r14 ::= ENUMERATED -struct cqi_npdcch_short_nb_r14_opts { - enum options { no_meass, candidate_rep_minus1, candidate_rep_minus2, candidate_rep_minus3, nulltype } value; - typedef int8_t number_type; - - const char* to_string() const; - int8_t to_number() const; -}; -typedef enumerated<cqi_npdcch_short_nb_r14_opts> cqi_npdcch_short_nb_r14_e; - // ReestabUE-Identity-CP-NB-r14 ::= SEQUENCE struct reestab_ue_id_cp_nb_r14_s { s_tmsi_s s_tmsi_r14; @@ -7269,14 +9441,6 @@ struct reestab_ue_id_cp_nb_r14_s { void to_json(json_writer& j) const; }; -// ReestablishmentCause-NB-r13 ::= ENUMERATED -struct reest_cause_nb_r13_opts { - enum options { recfg_fail, other_fail, spare2, spare1, nulltype } value; - - const char* to_string() const; -}; -typedef enumerated<reest_cause_nb_r13_opts> reest_cause_nb_r13_e; - // RRCConnectionReestablishmentRequest-NB-r13-IEs ::= SEQUENCE struct rrc_conn_reest_request_nb_r13_ies_s { reestab_ue_id_s ue_id_r13; @@ -7309,8 +9473,41 @@ struct rrc_conn_reest_request_nb_r14_ies_s { struct rrc_conn_reest_request_nb_s { struct crit_exts_c_ { struct later_c_ { + struct later_c__ { + struct types_opts { + enum options { rrc_conn_reest_request_r16, crit_exts_future, nulltype } value; + + const char* to_string() const; + }; + typedef enumerated<types_opts> types; + + // choice methods + later_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 + rrc_conn_reest_request_minus5_gc_nb_r16_ies_s& rrc_conn_reest_request_r16() + { + assert_choice_type(types::rrc_conn_reest_request_r16, type_, "later"); + return c; + } + const rrc_conn_reest_request_minus5_gc_nb_r16_ies_s& rrc_conn_reest_request_r16() const + { + assert_choice_type(types::rrc_conn_reest_request_r16, type_, "later"); + return c; + } + rrc_conn_reest_request_minus5_gc_nb_r16_ies_s& set_rrc_conn_reest_request_r16(); + void set_crit_exts_future(); + + private: + types type_; + rrc_conn_reest_request_minus5_gc_nb_r16_ies_s c; + }; struct types_opts { - enum options { rrc_conn_reest_request_r14, crit_exts_future, nulltype } value; + enum options { rrc_conn_reest_request_r14, later, nulltype } value; const char* to_string() const; }; @@ -7318,6 +9515,9 @@ struct rrc_conn_reest_request_nb_s { // choice methods later_c_() = default; + later_c_(const later_c_& other); + later_c_& operator=(const later_c_& other); + ~later_c_() { destroy_(); } void set(types::options e = types::nulltype); types type() const { return type_; } SRSASN_CODE pack(bit_ref& bref) const; @@ -7327,19 +9527,31 @@ struct rrc_conn_reest_request_nb_s { rrc_conn_reest_request_nb_r14_ies_s& rrc_conn_reest_request_r14() { assert_choice_type(types::rrc_conn_reest_request_r14, type_, "later"); - return c; + return c.get<rrc_conn_reest_request_nb_r14_ies_s>(); + } + later_c__& later() + { + assert_choice_type(types::later, type_, "later"); + return c.get<later_c__>(); } const rrc_conn_reest_request_nb_r14_ies_s& rrc_conn_reest_request_r14() const { assert_choice_type(types::rrc_conn_reest_request_r14, type_, "later"); - return c; + return c.get<rrc_conn_reest_request_nb_r14_ies_s>(); + } + const later_c__& later() const + { + assert_choice_type(types::later, type_, "later"); + return c.get<later_c__>(); } rrc_conn_reest_request_nb_r14_ies_s& set_rrc_conn_reest_request_r14(); - void set_crit_exts_future(); + later_c__& set_later(); private: - types type_; - rrc_conn_reest_request_nb_r14_ies_s c; + types type_; + choice_buffer_t<later_c__, rrc_conn_reest_request_nb_r14_ies_s> c; + + void destroy_(); }; struct types_opts { enum options { rrc_conn_reest_request_r13, later, nulltype } value; @@ -7398,6 +9610,27 @@ struct rrc_conn_reest_request_nb_s { void to_json(json_writer& j) const; }; +// RRCConnectionRequest-5GC-NB-r16-IEs ::= SEQUENCE +struct rrc_conn_request_minus5_gc_nb_r16_ies_s { + struct establishment_cause_r16_opts { + enum options { mt_access, mo_sig, mo_data, mo_exception_data, spare4, spare3, spare2, spare1, nulltype } value; + + const char* to_string() const; + }; + typedef enumerated<establishment_cause_r16_opts> establishment_cause_r16_e_; + + // member variables + init_ue_id_minus5_gc_nb_r16_c ue_id_r16; + establishment_cause_r16_e_ establishment_cause_r16; + cqi_npdcch_nb_r14_e cqi_npdcch_r16; + fixed_bitstring<11> spare; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // EstablishmentCause-NB-r13 ::= ENUMERATED struct establishment_cause_nb_r13_opts { enum options { @@ -7406,7 +9639,7 @@ struct establishment_cause_nb_r13_opts { mo_data, mo_exception_data, delay_tolerant_access_v1330, - spare3, + mt_edt_v1610, spare2, spare1, nulltype @@ -7435,8 +9668,41 @@ struct rrc_conn_request_nb_r13_ies_s { // RRCConnectionRequest-NB ::= SEQUENCE struct rrc_conn_request_nb_s { struct crit_exts_c_ { + struct later_c_ { + struct types_opts { + enum options { rrc_conn_request_r16, crit_exts_future, nulltype } value; + + const char* to_string() const; + }; + typedef enumerated<types_opts> types; + + // choice methods + later_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 + rrc_conn_request_minus5_gc_nb_r16_ies_s& rrc_conn_request_r16() + { + assert_choice_type(types::rrc_conn_request_r16, type_, "later"); + return c; + } + const rrc_conn_request_minus5_gc_nb_r16_ies_s& rrc_conn_request_r16() const + { + assert_choice_type(types::rrc_conn_request_r16, type_, "later"); + return c; + } + rrc_conn_request_minus5_gc_nb_r16_ies_s& set_rrc_conn_request_r16(); + void set_crit_exts_future(); + + private: + types type_; + rrc_conn_request_minus5_gc_nb_r16_ies_s c; + }; struct types_opts { - enum options { rrc_conn_request_r13, crit_exts_future, nulltype } value; + enum options { rrc_conn_request_r13, later, nulltype } value; const char* to_string() const; }; @@ -7444,6 +9710,9 @@ struct rrc_conn_request_nb_s { // choice methods crit_exts_c_() = default; + crit_exts_c_(const crit_exts_c_& other); + crit_exts_c_& operator=(const crit_exts_c_& other); + ~crit_exts_c_() { destroy_(); } void set(types::options e = types::nulltype); types type() const { return type_; } SRSASN_CODE pack(bit_ref& bref) const; @@ -7453,19 +9722,31 @@ struct rrc_conn_request_nb_s { rrc_conn_request_nb_r13_ies_s& rrc_conn_request_r13() { assert_choice_type(types::rrc_conn_request_r13, type_, "criticalExtensions"); - return c; + return c.get<rrc_conn_request_nb_r13_ies_s>(); + } + later_c_& later() + { + assert_choice_type(types::later, type_, "criticalExtensions"); + return c.get<later_c_>(); } const rrc_conn_request_nb_r13_ies_s& rrc_conn_request_r13() const { assert_choice_type(types::rrc_conn_request_r13, type_, "criticalExtensions"); - return c; + return c.get<rrc_conn_request_nb_r13_ies_s>(); + } + const later_c_& later() const + { + assert_choice_type(types::later, type_, "criticalExtensions"); + return c.get<later_c_>(); } rrc_conn_request_nb_r13_ies_s& set_rrc_conn_request_r13(); - void set_crit_exts_future(); + later_c_& set_later(); private: - types type_; - rrc_conn_request_nb_r13_ies_s c; + types type_; + choice_buffer_t<later_c_, rrc_conn_request_nb_r13_ies_s> c; + + void destroy_(); }; // member variables @@ -7477,11 +9758,37 @@ struct rrc_conn_request_nb_s { void to_json(json_writer& j) const; }; +// RRCConnectionResumeComplete-NB-v1710-IEs ::= SEQUENCE +struct rrc_conn_resume_complete_nb_v1710_ies_s { + bool gnss_validity_dur_r17_present = false; + bool non_crit_ext_present = false; + gnss_validity_dur_r17_e gnss_validity_dur_r17; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// RRCConnectionResumeComplete-NB-v1610-IEs ::= SEQUENCE +struct rrc_conn_resume_complete_nb_v1610_ies_s { + bool rlf_info_available_r16_present = false; + bool anr_info_available_r16_present = false; + bool non_crit_ext_present = false; + rrc_conn_resume_complete_nb_v1710_ies_s non_crit_ext; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // RRCConnectionResumeComplete-NB-v1470-IEs ::= SEQUENCE struct rrc_conn_resume_complete_nb_v1470_ies_s { - bool meas_result_serv_cell_r14_present = false; - bool non_crit_ext_present = false; - meas_result_serv_cell_nb_r14_s meas_result_serv_cell_r14; + bool meas_result_serv_cell_r14_present = false; + bool non_crit_ext_present = false; + meas_result_serv_cell_nb_r14_s meas_result_serv_cell_r14; + rrc_conn_resume_complete_nb_v1610_ies_s non_crit_ext; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -7552,6 +9859,20 @@ struct rrc_conn_resume_complete_nb_s { void to_json(json_writer& j) const; }; +// RRCConnectionResumeRequest-5GC-NB-r16-IEs ::= SEQUENCE +struct rrc_conn_resume_request_minus5_gc_nb_r16_ies_s { + fixed_bitstring<40> resume_id_r16; + fixed_bitstring<16> short_resume_mac_i_r16; + establishment_cause_nb_r13_e resume_cause_r16; + cqi_npdcch_nb_r14_e cqi_npdcch_r16; + fixed_bitstring<4> spare; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // RRCConnectionResumeRequest-NB-r13-IEs ::= SEQUENCE struct rrc_conn_resume_request_nb_r13_ies_s { fixed_bitstring<40> resume_id_r13; @@ -7559,7 +9880,8 @@ struct rrc_conn_resume_request_nb_r13_ies_s { establishment_cause_nb_r13_e resume_cause_r13; bool early_contention_resolution_r14 = false; cqi_npdcch_nb_r14_e cqi_npdcch_r14; - fixed_bitstring<4> spare; + bool anr_info_available_r16 = false; + fixed_bitstring<3> spare; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -7570,8 +9892,41 @@ struct rrc_conn_resume_request_nb_r13_ies_s { // RRCConnectionResumeRequest-NB ::= SEQUENCE struct rrc_conn_resume_request_nb_s { struct crit_exts_c_ { + struct later_c_ { + struct types_opts { + enum options { rrc_conn_resume_request_r16, crit_exts_future, nulltype } value; + + const char* to_string() const; + }; + typedef enumerated<types_opts> types; + + // choice methods + later_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 + rrc_conn_resume_request_minus5_gc_nb_r16_ies_s& rrc_conn_resume_request_r16() + { + assert_choice_type(types::rrc_conn_resume_request_r16, type_, "later"); + return c; + } + const rrc_conn_resume_request_minus5_gc_nb_r16_ies_s& rrc_conn_resume_request_r16() const + { + assert_choice_type(types::rrc_conn_resume_request_r16, type_, "later"); + return c; + } + rrc_conn_resume_request_minus5_gc_nb_r16_ies_s& set_rrc_conn_resume_request_r16(); + void set_crit_exts_future(); + + private: + types type_; + rrc_conn_resume_request_minus5_gc_nb_r16_ies_s c; + }; struct types_opts { - enum options { rrc_conn_resume_request_r13, crit_exts_future, nulltype } value; + enum options { rrc_conn_resume_request_r13, later, nulltype } value; const char* to_string() const; }; @@ -7579,6 +9934,9 @@ struct rrc_conn_resume_request_nb_s { // choice methods crit_exts_c_() = default; + crit_exts_c_(const crit_exts_c_& other); + crit_exts_c_& operator=(const crit_exts_c_& other); + ~crit_exts_c_() { destroy_(); } void set(types::options e = types::nulltype); types type() const { return type_; } SRSASN_CODE pack(bit_ref& bref) const; @@ -7588,19 +9946,31 @@ struct rrc_conn_resume_request_nb_s { rrc_conn_resume_request_nb_r13_ies_s& rrc_conn_resume_request_r13() { assert_choice_type(types::rrc_conn_resume_request_r13, type_, "criticalExtensions"); - return c; + return c.get<rrc_conn_resume_request_nb_r13_ies_s>(); + } + later_c_& later() + { + assert_choice_type(types::later, type_, "criticalExtensions"); + return c.get<later_c_>(); } const rrc_conn_resume_request_nb_r13_ies_s& rrc_conn_resume_request_r13() const { assert_choice_type(types::rrc_conn_resume_request_r13, type_, "criticalExtensions"); - return c; + return c.get<rrc_conn_resume_request_nb_r13_ies_s>(); + } + const later_c_& later() const + { + assert_choice_type(types::later, type_, "criticalExtensions"); + return c.get<later_c_>(); } rrc_conn_resume_request_nb_r13_ies_s& set_rrc_conn_resume_request_r13(); - void set_crit_exts_future(); + later_c_& set_later(); private: - types type_; - rrc_conn_resume_request_nb_r13_ies_s c; + types type_; + choice_buffer_t<later_c_, rrc_conn_resume_request_nb_r13_ies_s> c; + + void destroy_(); }; // member variables @@ -7612,11 +9982,59 @@ struct rrc_conn_resume_request_nb_s { void to_json(json_writer& j) const; }; +// RRCConnectionSetupComplete-NB-v1710-IEs ::= SEQUENCE +struct rrc_conn_setup_complete_nb_v1710_ies_s { + bool gnss_validity_dur_r17_present = false; + bool non_crit_ext_present = false; + gnss_validity_dur_r17_e gnss_validity_dur_r17; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// RRCConnectionSetupComplete-NB-v1610-IEs ::= SEQUENCE +struct rrc_conn_setup_complete_nb_v1610_ies_s { + struct guami_type_r16_opts { + enum options { native, mapped, nulltype } value; + + const char* to_string() const; + }; + typedef enumerated<guami_type_r16_opts> guami_type_r16_e_; + using s_nssai_list_r16_l_ = dyn_array<s_nssai_r15_c>; + + // member variables + bool ng_minus5_g_s_tmsi_r16_present = false; + bool registered_amf_r16_present = false; + bool gummei_type_v1610_present = false; + bool guami_type_r16_present = false; + bool s_nssai_list_r16_present = false; + bool ng_u_data_transfer_r16_present = false; + bool up_cio_t_minus5_gs_optim_r16_present = false; + bool rlf_info_available_r16_present = false; + bool anr_info_available_r16_present = false; + bool pur_cfg_id_r16_present = false; + bool non_crit_ext_present = false; + fixed_bitstring<48> ng_minus5_g_s_tmsi_r16; + registered_amf_r15_s registered_amf_r16; + guami_type_r16_e_ guami_type_r16; + s_nssai_list_r16_l_ s_nssai_list_r16; + fixed_bitstring<20> pur_cfg_id_r16; + rrc_conn_setup_complete_nb_v1710_ies_s non_crit_ext; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // RRCConnectionSetupComplete-NB-v1470-IEs ::= SEQUENCE struct rrc_conn_setup_complete_nb_v1470_ies_s { - bool meas_result_serv_cell_r14_present = false; - bool non_crit_ext_present = false; - meas_result_serv_cell_nb_r14_s meas_result_serv_cell_r14; + bool meas_result_serv_cell_r14_present = false; + bool non_crit_ext_present = false; + meas_result_serv_cell_nb_r14_s meas_result_serv_cell_r14; + rrc_conn_setup_complete_nb_v1610_ies_s non_crit_ext; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -7705,6 +10123,31 @@ struct rrc_conn_setup_complete_nb_s { void to_json(json_writer& j) const; }; +// RRCEarlyDataRequest-5GC-NB-r16-IEs ::= SEQUENCE +struct rrc_early_data_request_minus5_gc_nb_r16_ies_s { + struct establishment_cause_r16_opts { + enum options { mo_data, mo_exception_data, mt_access, spare1, nulltype } value; + + const char* to_string() const; + }; + typedef enumerated<establishment_cause_r16_opts> establishment_cause_r16_e_; + + // member variables + bool cqi_npdcch_r16_present = false; + bool late_non_crit_ext_present = false; + bool non_crit_ext_present = false; + fixed_bitstring<48> ng_minus5_g_s_tmsi_r16; + establishment_cause_r16_e_ establishment_cause_r16; + cqi_npdcch_nb_r14_e cqi_npdcch_r16; + dyn_octstring ded_info_nas_r16; + dyn_octstring late_non_crit_ext; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // RRCEarlyDataRequest-NB-v1590-IEs ::= SEQUENCE struct rrc_early_data_request_nb_v1590_ies_s { bool late_non_crit_ext_present = false; @@ -7720,7 +10163,7 @@ struct rrc_early_data_request_nb_v1590_ies_s { // RRCEarlyDataRequest-NB-r15-IEs ::= SEQUENCE struct rrc_early_data_request_nb_r15_ies_s { struct establishment_cause_r15_opts { - enum options { mo_data, mo_exception_data, delay_tolerant_access, spare1, nulltype } value; + enum options { mo_data, mo_exception_data, delay_tolerant_access, mt_access_v1610, nulltype } value; const char* to_string() const; }; @@ -7744,8 +10187,41 @@ struct rrc_early_data_request_nb_r15_ies_s { // RRCEarlyDataRequest-NB-r15 ::= SEQUENCE struct rrc_early_data_request_nb_r15_s { struct crit_exts_c_ { + struct later_c_ { + struct types_opts { + enum options { rrc_early_data_request_r16, crit_exts_future, nulltype } value; + + const char* to_string() const; + }; + typedef enumerated<types_opts> types; + + // choice methods + later_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 + rrc_early_data_request_minus5_gc_nb_r16_ies_s& rrc_early_data_request_r16() + { + assert_choice_type(types::rrc_early_data_request_r16, type_, "later"); + return c; + } + const rrc_early_data_request_minus5_gc_nb_r16_ies_s& rrc_early_data_request_r16() const + { + assert_choice_type(types::rrc_early_data_request_r16, type_, "later"); + return c; + } + rrc_early_data_request_minus5_gc_nb_r16_ies_s& set_rrc_early_data_request_r16(); + void set_crit_exts_future(); + + private: + types type_; + rrc_early_data_request_minus5_gc_nb_r16_ies_s c; + }; struct types_opts { - enum options { rrc_early_data_request_r15, crit_exts_future, nulltype } value; + enum options { rrc_early_data_request_r15, later, nulltype } value; const char* to_string() const; }; @@ -7753,6 +10229,9 @@ struct rrc_early_data_request_nb_r15_s { // choice methods crit_exts_c_() = default; + crit_exts_c_(const crit_exts_c_& other); + crit_exts_c_& operator=(const crit_exts_c_& other); + ~crit_exts_c_() { destroy_(); } void set(types::options e = types::nulltype); types type() const { return type_; } SRSASN_CODE pack(bit_ref& bref) const; @@ -7762,19 +10241,31 @@ struct rrc_early_data_request_nb_r15_s { rrc_early_data_request_nb_r15_ies_s& rrc_early_data_request_r15() { assert_choice_type(types::rrc_early_data_request_r15, type_, "criticalExtensions"); - return c; + return c.get<rrc_early_data_request_nb_r15_ies_s>(); + } + later_c_& later() + { + assert_choice_type(types::later, type_, "criticalExtensions"); + return c.get<later_c_>(); } const rrc_early_data_request_nb_r15_ies_s& rrc_early_data_request_r15() const { assert_choice_type(types::rrc_early_data_request_r15, type_, "criticalExtensions"); - return c; + return c.get<rrc_early_data_request_nb_r15_ies_s>(); + } + const later_c_& later() const + { + assert_choice_type(types::later, type_, "criticalExtensions"); + return c.get<later_c_>(); } rrc_early_data_request_nb_r15_ies_s& set_rrc_early_data_request_r15(); - void set_crit_exts_future(); + later_c_& set_later(); private: - types type_; - rrc_early_data_request_nb_r15_ies_s c; + types type_; + choice_buffer_t<later_c_, rrc_early_data_request_nb_r15_ies_s> c; + + void destroy_(); }; // member variables @@ -8180,6 +10671,29 @@ using sc_mtch_info_list_nb_r14_l = dyn_array<sc_mtch_info_nb_r14_s>; // SCPTM-NeighbourCellList-NB-r14 ::= SEQUENCE (SIZE (1..8)) OF PCI-ARFCN-NB-r14 using scptm_neighbour_cell_list_nb_r14_l = dyn_array<pci_arfcn_nb_r14_s>; +// SCPTMConfiguration-NB-v1610 ::= SEQUENCE +struct scptm_cfg_nb_v1610_s { + struct multi_tb_gap_r16_opts { + enum options { sf16, sf32, sf64, sf128, nulltype } value; + typedef uint8_t number_type; + + const char* to_string() const; + uint8_t to_number() const; + }; + typedef enumerated<multi_tb_gap_r16_opts> multi_tb_gap_r16_e_; + + // member variables + bool multi_tb_gap_r16_present = false; + bool non_crit_ext_present = false; + sc_mtch_info_list_nb_r14_l sc_mtch_info_list_multi_tb_r16; + multi_tb_gap_r16_e_ multi_tb_gap_r16; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // SCPTMConfiguration-NB-r14 ::= SEQUENCE struct scptm_cfg_nb_r14_s { bool scptm_neighbour_cell_list_r14_present = false; @@ -8188,6 +10702,7 @@ struct scptm_cfg_nb_r14_s { sc_mtch_info_list_nb_r14_l sc_mtch_info_list_r14; scptm_neighbour_cell_list_nb_r14_l scptm_neighbour_cell_list_r14; dyn_octstring late_non_crit_ext; + scptm_cfg_nb_v1610_s non_crit_ext; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -8306,6 +10821,234 @@ struct tdd_ue_cap_nb_r15_s { void to_json(json_writer& j) const; }; +// PhyLayerParameters-NB-v1700 ::= SEQUENCE +struct phy_layer_params_nb_v1700_s { + bool npdsch_minus16_qam_r17_present = false; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// TDD-UE-Capability-NB-v1710 ::= SEQUENCE +struct tdd_ue_cap_nb_v1710_s { + bool phy_layer_params_v1710_present = false; + phy_layer_params_nb_v1700_s phy_layer_params_v1710; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// NTN-Parameters-NB-v1720 ::= SEQUENCE +struct ntn_params_nb_v1720_s { + struct ntn_segmented_precompensation_gaps_r17_opts { + enum options { sym1, sl1, sl2, nulltype } value; + + const char* to_string() const; + }; + typedef enumerated<ntn_segmented_precompensation_gaps_r17_opts> ntn_segmented_precompensation_gaps_r17_e_; + + // member variables + bool ntn_segmented_precompensation_gaps_r17_present = false; + ntn_segmented_precompensation_gaps_r17_e_ ntn_segmented_precompensation_gaps_r17; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// MeasParameters-NB-v1710 ::= SEQUENCE +struct meas_params_nb_v1710_s { + bool conn_mode_meas_intra_freq_r17_present = false; + bool conn_mode_meas_inter_freq_r17_present = false; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// UE-Capability-NB-v1720-IEs ::= SEQUENCE +struct ue_cap_nb_v1720_ies_s { + bool non_crit_ext_present = false; + ntn_params_nb_v1720_s ntn_params_v1720; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// NTN-Parameters-NB-r17 ::= SEQUENCE +struct ntn_params_nb_r17_s { + struct ntn_scenario_support_r17_opts { + enum options { ngso, gso, nulltype } value; + + const char* to_string() const; + }; + typedef enumerated<ntn_scenario_support_r17_opts> ntn_scenario_support_r17_e_; + + // member variables + bool ntn_connect_epc_r17_present = false; + bool ntn_ta_report_r17_present = false; + bool ntn_pur_timer_delay_r17_present = false; + bool ntn_offset_timing_enh_r17_present = false; + bool ntn_scenario_support_r17_present = false; + ntn_scenario_support_r17_e_ ntn_scenario_support_r17; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// UE-Capability-NB-v1710-IEs ::= SEQUENCE +struct ue_cap_nb_v1710_ies_s { + bool meas_params_v1710_present = false; + bool non_crit_ext_present = false; + meas_params_nb_v1710_s meas_params_v1710; + rf_params_nb_v1710_s rf_params_v1710; + tdd_ue_cap_nb_v1710_s tdd_ue_cap_v1710; + ue_cap_nb_v1720_ies_s non_crit_ext; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// UE-Capability-NB-v1700-IEs ::= SEQUENCE +struct ue_cap_nb_v1700_ies_s { + bool coverage_based_paging_r17_present = false; + bool ntn_params_r17_present = false; + bool non_crit_ext_present = false; + phy_layer_params_nb_v1700_s phy_layer_params_v1700; + ntn_params_nb_r17_s ntn_params_r17; + ue_cap_nb_v1710_ies_s non_crit_ext; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// MAC-Parameters-NB-v1610 ::= SEQUENCE +struct mac_params_nb_v1610_s { + bool rai_support_enh_r16_present = false; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// MeasParameters-NB-r16 ::= SEQUENCE +struct meas_params_nb_r16_s { + bool dl_ch_quality_report_r16_present = false; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// PUR-Parameters-NB-r16 ::= SEQUENCE +struct pur_params_nb_r16_s { + bool pur_cp_epc_r16_present = false; + bool pur_cp_minus5_gc_r16_present = false; + bool pur_up_epc_r16_present = false; + bool pur_up_minus5_gc_r16_present = false; + bool pur_nrsrp_validation_r16_present = false; + bool pur_cp_l1_ack_r16_present = false; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// PhyLayerParameters-NB-v1610 ::= SEQUENCE +struct phy_layer_params_nb_v1610_s { + bool npdsch_multi_tb_r16_present = false; + bool npdsch_multi_tb_interleaving_r16_present = false; + bool npusch_multi_tb_r16_present = false; + bool npusch_multi_tb_interleaving_r16_present = false; + bool multi_tb_harq_ack_bundling_r16_present = false; + bool slot_symbol_res_resv_dl_r16_present = false; + bool slot_symbol_res_resv_ul_r16_present = false; + bool sf_res_resv_dl_r16_present = false; + bool sf_res_resv_ul_r16_present = false; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// SON-Parameters-NB-r16 ::= SEQUENCE +struct son_params_nb_r16_s { + bool anr_report_r16_present = false; + bool rach_report_r16_present = false; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// TDD-UE-Capability-NB-v1610 ::= SEQUENCE +struct tdd_ue_cap_nb_v1610_s { + bool slot_symbol_res_resv_dl_r16_present = false; + bool slot_symbol_res_resv_ul_r16_present = false; + bool sf_res_resv_dl_r16_present = false; + bool sf_res_resv_ul_r16_present = false; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// UE-Capability-NB-v16x0-IEs ::= SEQUENCE +struct ue_cap_nb_v16x0_ies_s { + bool late_non_crit_ext_present = false; + bool non_crit_ext_present = false; + dyn_octstring late_non_crit_ext; + ue_cap_nb_v1700_ies_s non_crit_ext; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// UE-Capability-NB-v1610-IEs ::= SEQUENCE +struct ue_cap_nb_v1610_ies_s { + bool early_security_reactivation_r16_present = false; + bool early_data_up_minus5_gc_r16_present = false; + bool pur_params_r16_present = false; + bool phy_layer_params_v1610_present = false; + bool son_params_r16_present = false; + bool tdd_ue_cap_v1610_present = false; + bool non_crit_ext_present = false; + pur_params_nb_r16_s pur_params_r16; + mac_params_nb_v1610_s mac_params_v1610; + phy_layer_params_nb_v1610_s phy_layer_params_v1610; + son_params_nb_r16_s son_params_r16; + meas_params_nb_r16_s meas_params_r16; + tdd_ue_cap_nb_v1610_s tdd_ue_cap_v1610; + ue_cap_nb_v16x0_ies_s non_crit_ext; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // MAC-Parameters-NB-v1530 ::= SEQUENCE struct mac_params_nb_v1530_s { bool sr_sps_bsr_r15_present = false; @@ -8326,6 +11069,19 @@ struct rlc_params_nb_r15_s { void to_json(json_writer& j) const; }; +// UE-Capability-NB-v15x0-IEs ::= SEQUENCE +struct ue_cap_nb_v15x0_ies_s { + bool late_non_crit_ext_present = false; + bool non_crit_ext_present = false; + dyn_octstring late_non_crit_ext; + ue_cap_nb_v1610_ies_s non_crit_ext; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // UE-Capability-NB-v1530-IEs ::= SEQUENCE struct ue_cap_nb_v1530_ies_s { bool early_data_up_r15_present = false; @@ -8336,6 +11092,7 @@ struct ue_cap_nb_v1530_ies_s { mac_params_nb_v1530_s mac_params_v1530; phy_layer_params_nb_v1530_s phy_layer_params_v1530; tdd_ue_cap_nb_r15_s tdd_ue_cap_r15; + ue_cap_nb_v15x0_ies_s non_crit_ext; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -8440,6 +11197,10 @@ struct ue_radio_paging_info_nb_r13_s { bool wake_up_signal_min_gap_e_drx_r15_present = false; bool multi_carrier_paging_tdd_r15_present = false; wake_up_signal_min_gap_e_drx_r15_e_ wake_up_signal_min_gap_e_drx_r15; + // group 2 + bool ue_category_nb_r16_present = false; + bool group_wake_up_signal_r16_present = false; + bool group_wake_up_signal_alternation_r16_present = false; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -8519,11 +11280,101 @@ struct ue_cap_info_nb_s { void to_json(json_writer& j) const; }; +// RACH-Report-NB-r16 ::= SEQUENCE +struct rach_report_nb_r16_s { + uint8_t nof_preambs_sent_r16 = 1; + bool contention_detected_r16 = false; + uint8_t init_nrsrp_level_r16 = 0; + bool edt_fallback_r16 = false; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// UEInformationResponse-NB-r16-IEs ::= SEQUENCE +struct ue_info_resp_nb_r16_ies_s { + bool rach_report_r16_present = false; + bool rlf_report_r16_present = false; + bool anr_meas_report_r16_present = false; + bool late_non_crit_ext_present = false; + bool non_crit_ext_present = false; + rach_report_nb_r16_s rach_report_r16; + rlf_report_nb_r16_s rlf_report_r16; + anr_meas_report_nb_r16_s anr_meas_report_r16; + dyn_octstring late_non_crit_ext; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// UEInformationResponse-NB-r16 ::= SEQUENCE +struct ue_info_resp_nb_r16_s { + struct crit_exts_c_ { + struct types_opts { + enum options { ue_info_resp_r16, crit_exts_future, nulltype } value; + + const char* to_string() const; + }; + typedef enumerated<types_opts> types; + + // choice methods + crit_exts_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 + ue_info_resp_nb_r16_ies_s& ue_info_resp_r16() + { + assert_choice_type(types::ue_info_resp_r16, type_, "criticalExtensions"); + return c; + } + const ue_info_resp_nb_r16_ies_s& ue_info_resp_r16() const + { + assert_choice_type(types::ue_info_resp_r16, type_, "criticalExtensions"); + return c; + } + ue_info_resp_nb_r16_ies_s& set_ue_info_resp_r16(); + void set_crit_exts_future(); + + private: + types type_; + ue_info_resp_nb_r16_ies_s c; + }; + + // member variables + uint8_t rrc_transaction_id = 0; + crit_exts_c_ crit_exts; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// UEPagingCoverageInformation-NB-v1700-IEs ::= SEQUENCE +struct ue_paging_coverage_info_nb_v1700_ies_s { + bool cbp_idx_r17_present = false; + bool non_crit_ext_present = false; + uint8_t cbp_idx_r17 = 1; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + // UEPagingCoverageInformation-NB-IEs ::= SEQUENCE struct ue_paging_coverage_info_nb_ies_s { - bool npdcch_num_repeat_paging_r13_present = false; - bool non_crit_ext_present = false; - uint16_t npdcch_num_repeat_paging_r13 = 1; + bool npdcch_num_repeat_paging_r13_present = false; + bool non_crit_ext_present = false; + uint16_t npdcch_num_repeat_paging_r13 = 1; + ue_paging_coverage_info_nb_v1700_ies_s non_crit_ext; // sequence methods SRSASN_CODE pack(bit_ref& bref) const; @@ -9002,8 +11853,8 @@ struct ul_dcch_msg_type_nb_c { ue_cap_info_r13, ul_info_transfer_r13, rrc_conn_resume_complete_r13, - spare8, - spare7, + ue_info_resp_r16, + pur_cfg_request_r16, spare6, spare5, spare4, @@ -9068,6 +11919,16 @@ struct ul_dcch_msg_type_nb_c { assert_choice_type(types::rrc_conn_resume_complete_r13, type_, "c1"); return c.get<rrc_conn_resume_complete_nb_s>(); } + ue_info_resp_nb_r16_s& ue_info_resp_r16() + { + assert_choice_type(types::ue_info_resp_r16, type_, "c1"); + return c.get<ue_info_resp_nb_r16_s>(); + } + pur_cfg_request_nb_r16_s& pur_cfg_request_r16() + { + assert_choice_type(types::pur_cfg_request_r16, type_, "c1"); + return c.get<pur_cfg_request_nb_r16_s>(); + } const rrc_conn_recfg_complete_nb_s& rrc_conn_recfg_complete_r13() const { assert_choice_type(types::rrc_conn_recfg_complete_r13, type_, "c1"); @@ -9108,6 +11969,16 @@ struct ul_dcch_msg_type_nb_c { assert_choice_type(types::rrc_conn_resume_complete_r13, type_, "c1"); return c.get<rrc_conn_resume_complete_nb_s>(); } + const ue_info_resp_nb_r16_s& ue_info_resp_r16() const + { + assert_choice_type(types::ue_info_resp_r16, type_, "c1"); + return c.get<ue_info_resp_nb_r16_s>(); + } + const pur_cfg_request_nb_r16_s& pur_cfg_request_r16() const + { + assert_choice_type(types::pur_cfg_request_r16, type_, "c1"); + return c.get<pur_cfg_request_nb_r16_s>(); + } rrc_conn_recfg_complete_nb_s& set_rrc_conn_recfg_complete_r13(); rrc_conn_reest_complete_nb_s& set_rrc_conn_reest_complete_r13(); rrc_conn_setup_complete_nb_s& set_rrc_conn_setup_complete_r13(); @@ -9116,8 +11987,8 @@ struct ul_dcch_msg_type_nb_c { ue_cap_info_nb_s& set_ue_cap_info_r13(); ul_info_transfer_nb_s& set_ul_info_transfer_r13(); rrc_conn_resume_complete_nb_s& set_rrc_conn_resume_complete_r13(); - void set_spare8(); - void set_spare7(); + ue_info_resp_nb_r16_s& set_ue_info_resp_r16(); + pur_cfg_request_nb_r16_s& set_pur_cfg_request_r16(); void set_spare6(); void set_spare5(); void set_spare4(); @@ -9127,13 +11998,15 @@ struct ul_dcch_msg_type_nb_c { private: types type_; - choice_buffer_t<rrc_conn_recfg_complete_nb_s, + choice_buffer_t<pur_cfg_request_nb_r16_s, + rrc_conn_recfg_complete_nb_s, rrc_conn_reest_complete_nb_s, rrc_conn_resume_complete_nb_s, rrc_conn_setup_complete_nb_s, security_mode_complete_s, security_mode_fail_s, ue_cap_info_nb_s, + ue_info_resp_nb_r16_s, ul_info_transfer_nb_s> c; @@ -9184,6 +12057,34 @@ struct ul_dcch_msg_nb_s { void to_json(json_writer& j) const; }; +// VarANR-MeasConfig-NB-r16 ::= SEQUENCE +struct var_anr_meas_cfg_nb_r16_s { + uint8_t anr_quality_thres_r16 = 0; + anr_carrier_list_nb_r16_l anr_carrier_list_r16; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + +// VarANR-MeasReport-NB-r16 ::= SEQUENCE +struct var_anr_meas_report_nb_r16_s { + using meas_result_list_r16_l_ = dyn_array<anr_meas_result_nb_r16_s>; + + // member variables + plmn_id_list3_r11_l plmn_id_list_r16; + cell_global_id_eutra_s serv_cell_id_r16; + meas_result_serv_cell_nb_r14_s meas_result_serv_cell_r16; + uint8_t relative_time_stamp_r16 = 0; + meas_result_list_r16_l_ meas_result_list_r16; + + // sequence methods + SRSASN_CODE pack(bit_ref& bref) const; + SRSASN_CODE unpack(cbit_ref& bref); + void to_json(json_writer& j) const; +}; + } // namespace rrc } // namespace asn1 diff --git a/lib/include/srsran/asn1/rrc_utils.h b/lib/include/srsran/asn1/rrc_utils.h index ecae50bda..0eb77b368 100644 --- a/lib/include/srsran/asn1/rrc_utils.h +++ b/lib/include/srsran/asn1/rrc_utils.h @@ -58,7 +58,7 @@ struct sib_type13_r9_s; // MeasConfig struct cells_to_add_mod_s; struct cells_to_add_mod_nr_r15_s; -struct black_cells_to_add_mod_s; +struct excluded_cells_to_add_mod_s; struct report_cfg_eutra_s; struct meas_obj_to_add_mod_s; struct report_cfg_to_add_mod_s; diff --git a/lib/src/asn1/rrc.cc b/lib/src/asn1/rrc.cc index f8fa6a91d..3c71f1524 100644 --- a/lib/src/asn1/rrc.cc +++ b/lib/src/asn1/rrc.cc @@ -20,12 +20,19 @@ using namespace asn1::rrc; * Struct Methods ******************************************************************************/ +const char* mib_s::part_earfcn_minus17_c_::types_opts::to_string() const +{ + static const char* options[] = {"spare", "earfcn-LSB"}; + return convert_enum_idx(options, 2, value, "mib_s::part_earfcn_minus17_c_::types"); +} + // MasterInformationBlock-MBMS-r14 ::= SEQUENCE SRSASN_CODE mib_mbms_r14_s::pack(bit_ref& bref) const { HANDLE_CODE(dl_bw_mbms_r14.pack(bref)); HANDLE_CODE(sys_frame_num_r14.pack(bref)); HANDLE_CODE(pack_integer(bref, add_non_mbsfn_sfs_r14, (uint8_t)0u, (uint8_t)3u)); + HANDLE_CODE(pack_integer(bref, semi_static_cfi_mbms_r16, (uint8_t)0u, (uint8_t)3u)); HANDLE_CODE(spare.pack(bref)); return SRSASN_SUCCESS; @@ -35,6 +42,7 @@ SRSASN_CODE mib_mbms_r14_s::unpack(cbit_ref& bref) HANDLE_CODE(dl_bw_mbms_r14.unpack(bref)); HANDLE_CODE(sys_frame_num_r14.unpack(bref)); HANDLE_CODE(unpack_integer(add_non_mbsfn_sfs_r14, bref, (uint8_t)0u, (uint8_t)3u)); + HANDLE_CODE(unpack_integer(semi_static_cfi_mbms_r16, bref, (uint8_t)0u, (uint8_t)3u)); HANDLE_CODE(spare.unpack(bref)); return SRSASN_SUCCESS; @@ -45,6 +53,7 @@ void mib_mbms_r14_s::to_json(json_writer& j) const j.write_str("dl-Bandwidth-MBMS-r14", dl_bw_mbms_r14.to_string()); j.write_str("systemFrameNumber-r14", sys_frame_num_r14.to_string()); j.write_int("additionalNonMBSFNSubframes-r14", add_non_mbsfn_sfs_r14); + j.write_int("semiStaticCFI-MBMS-r16", semi_static_cfi_mbms_r16); j.write_str("spare", spare.to_string()); j.end_obj(); } @@ -161,6 +170,17 @@ sl_disc_res_pool_r12_s::tx_params_r12_s_::ue_sel_res_cfg_r12_s_::pool_sel_r12_c_ options, 2, value, "sl_disc_res_pool_r12_s::tx_params_r12_s_::ue_sel_res_cfg_r12_s_::pool_sel_r12_c_::types"); } +const char* mtc_ssb_nr_r15_s::periodicity_and_offset_r15_c_::types_opts::to_string() const +{ + static const char* options[] = {"sf5-r15", "sf10-r15", "sf20-r15", "sf40-r15", "sf80-r15", "sf160-r15"}; + return convert_enum_idx(options, 6, value, "mtc_ssb_nr_r15_s::periodicity_and_offset_r15_c_::types"); +} +uint8_t mtc_ssb_nr_r15_s::periodicity_and_offset_r15_c_::types_opts::to_number() const +{ + static const uint8_t options[] = {5, 10, 20, 40, 80, 160}; + return map_enum_number(options, 6, value, "mtc_ssb_nr_r15_s::periodicity_and_offset_r15_c_::types"); +} + const char* plmn_id_info2_r12_c::types_opts::to_string() const { static const char* options[] = {"plmn-Index-r12", "plmnIdentity-r12"}; @@ -174,6 +194,12 @@ const char* sl_disc_tx_res_inter_freq_r13_c::types_opts::to_string() const return convert_enum_idx(options, 4, value, "sl_disc_tx_res_inter_freq_r13_c::types"); } +const char* ssb_to_measure_r15_c::types_opts::to_string() const +{ + static const char* options[] = {"shortBitmap-r15", "mediumBitmap-r15", "longBitmap-r15"}; + return convert_enum_idx(options, 3, value, "ssb_to_measure_r15_c::types"); +} + const char* sib_type1_v1320_ies_s::freq_hop_params_dl_r13_s_::interv_dl_hop_cfg_common_mode_a_r13_c_::types_opts::to_string() const { @@ -208,15 +234,10 @@ const char* carrier_freqs_geran_s::following_arfcns_c_::types_opts::to_string() return convert_enum_idx(options, 3, value, "carrier_freqs_geran_s::following_arfcns_c_::types"); } -const char* mtc_ssb_nr_r15_s::periodicity_and_offset_r15_c_::types_opts::to_string() const -{ - static const char* options[] = {"sf5-r15", "sf10-r15", "sf20-r15", "sf40-r15", "sf80-r15", "sf160-r15"}; - return convert_enum_idx(options, 6, value, "mtc_ssb_nr_r15_s::periodicity_and_offset_r15_c_::types"); -} -uint8_t mtc_ssb_nr_r15_s::periodicity_and_offset_r15_c_::types_opts::to_number() const +const char* gwus_res_cfg_r16_s::res_map_pattern_r16_c_::types_opts::to_string() const { - static const uint8_t options[] = {5, 10, 20, 40, 80, 160}; - return map_enum_number(options, 6, value, "mtc_ssb_nr_r15_s::periodicity_and_offset_r15_c_::types"); + static const char* options[] = {"resourceLocationWithWUS", "resourceLocationWithoutWUS"}; + return convert_enum_idx(options, 2, value, "gwus_res_cfg_r16_s::res_map_pattern_r16_c_::types"); } const char* params_cdma2000_r11_s::sys_time_info_r11_c_::types_opts::to_string() const @@ -231,12 +252,6 @@ const char* sl_inter_freq_info_v2x_r14_s::add_spec_emission_v2x_r14_c_::types_op return convert_enum_idx(options, 2, value, "sl_inter_freq_info_v2x_r14_s::add_spec_emission_v2x_r14_c_::types"); } -const char* ssb_to_measure_r15_c::types_opts::to_string() const -{ - static const char* options[] = {"shortBitmap-r15", "mediumBitmap-r15", "longBitmap-r15"}; - return convert_enum_idx(options, 3, value, "ssb_to_measure_r15_c::types"); -} - const char* sib_type1_v1310_ies_s::bw_reduced_access_related_info_r13_s_::fdd_dl_or_tdd_sf_bitmap_br_r13_c_::types_opts::to_string() const @@ -312,6 +327,24 @@ const char* prach_cfg_sib_v1310_s::mpdcch_start_sf_css_ra_r13_c_::types_opts::to return convert_enum_idx(options, 2, value, "prach_cfg_sib_v1310_s::mpdcch_start_sf_css_ra_r13_c_::types"); } +const char* periodicity_start_pos_r16_c::types_opts::to_string() const +{ + static const char* options[] = {"periodicity10ms", + "periodicity20ms", + "periodicity40ms", + "periodicity80ms", + "periodicity160ms", + "spare3", + "spare2", + "spare1"}; + return convert_enum_idx(options, 8, value, "periodicity_start_pos_r16_c::types"); +} +uint8_t periodicity_start_pos_r16_c::types_opts::to_number() const +{ + static const uint8_t options[] = {10, 20, 40, 80, 160}; + return map_enum_number(options, 5, value, "periodicity_start_pos_r16_c::types"); +} + const char* sib8_per_plmn_r11_s::params_cdma2000_r11_c_::types_opts::to_string() const { static const char* options[] = {"explicitValue", "defaultValue"}; @@ -324,6 +357,52 @@ const char* uac_barr_per_plmn_r15_s::uac_ac_barr_list_type_r15_c_::types_opts::t return convert_enum_idx(options, 2, value, "uac_barr_per_plmn_r15_s::uac_ac_barr_list_type_r15_c_::types"); } +const char* applicable_disaster_info_r17_c::types_opts::to_string() const +{ + static const char* options[] = { + "noDisasterRoaming-r17", "disasterRelatedIndication-r17", "commonPLMNs-r17", "dedicatedPLMNs-r17"}; + return convert_enum_idx(options, 4, value, "applicable_disaster_info_r17_c::types"); +} + +const char* res_reserv_cfg_dl_r16_s::res_reserv_freq_r16_c_::types_opts::to_string() const +{ + static const char* options[] = { + "rbg-Bitmap1dot4", "rbg-Bitmap3", "rbg-Bitmap5", "rbg-Bitmap10", "rbg-Bitmap15", "rbg-Bitmap20"}; + return convert_enum_idx(options, 6, value, "res_reserv_cfg_dl_r16_s::res_reserv_freq_r16_c_::types"); +} +float res_reserv_cfg_dl_r16_s::res_reserv_freq_r16_c_::types_opts::to_number() const +{ + static const float options[] = {1.4, 3.0, 5.0, 10.0, 15.0, 20.0}; + return map_enum_number(options, 6, value, "res_reserv_cfg_dl_r16_s::res_reserv_freq_r16_c_::types"); +} +const char* res_reserv_cfg_dl_r16_s::res_reserv_freq_r16_c_::types_opts::to_number_string() const +{ + static const char* options[] = {"1.4", "3", "5", "10", "15", "20"}; + return convert_enum_idx(options, 6, value, "res_reserv_cfg_dl_r16_s::res_reserv_freq_r16_c_::types"); +} + +const char* res_reserv_cfg_dl_r16_s::slot_bitmap_r16_c_::types_opts::to_string() const +{ + static const char* options[] = {"slotPattern10ms", "slotPattern40ms"}; + return convert_enum_idx(options, 2, value, "res_reserv_cfg_dl_r16_s::slot_bitmap_r16_c_::types"); +} +uint8_t res_reserv_cfg_dl_r16_s::slot_bitmap_r16_c_::types_opts::to_number() const +{ + static const uint8_t options[] = {10, 40}; + return map_enum_number(options, 2, value, "res_reserv_cfg_dl_r16_s::slot_bitmap_r16_c_::types"); +} + +const char* res_reserv_cfg_ul_r16_s::slot_bitmap_r16_c_::types_opts::to_string() const +{ + static const char* options[] = {"slotPattern10ms", "slotPattern40ms"}; + return convert_enum_idx(options, 2, value, "res_reserv_cfg_ul_r16_s::slot_bitmap_r16_c_::types"); +} +uint8_t res_reserv_cfg_ul_r16_s::slot_bitmap_r16_c_::types_opts::to_number() const +{ + static const uint8_t options[] = {10, 40}; + return map_enum_number(options, 2, value, "res_reserv_cfg_ul_r16_s::slot_bitmap_r16_c_::types"); +} + const char* sc_mcch_sched_info_r14_s::sched_period_start_offset_scptm_r14_c_::types_opts::to_string() const { static const char* options[] = {"sf10", @@ -351,6 +430,12 @@ uint16_t sc_mcch_sched_info_r14_s::sched_period_start_offset_scptm_r14_c_::types return map_enum_number(options, 16, value, "sc_mcch_sched_info_r14_s::sched_period_start_offset_scptm_r14_c_::types"); } +const char* serving_satellite_info_r17_s::ephemeris_info_r17_c_::types_opts::to_string() const +{ + static const char* options[] = {"stateVectors", "orbitalParameters"}; + return convert_enum_idx(options, 2, value, "serving_satellite_info_r17_s::ephemeris_info_r17_c_::types"); +} + const char* sib_type14_r11_s::eab_param_r11_c_::types_opts::to_string() const { static const char* options[] = {"eab-Common-r11", "eab-PerPLMN-List-r11"}; @@ -373,27 +458,26 @@ const char* sib_type25_r15_s::uac_ac1_select_assist_info_r15_c_::types_opts::to_ const char* pos_sys_info_r15_ies_s::pos_sib_type_and_info_r15_item_c_::types_opts::to_string() const { static const char* options[] = { - "posSib1-1-r15", "posSib1-2-r15", "posSib1-3-r15", "posSib1-4-r15", "posSib1-5-r15", "posSib1-6-r15", - "posSib1-7-r15", "posSib2-1-r15", "posSib2-2-r15", "posSib2-3-r15", "posSib2-4-r15", "posSib2-5-r15", - "posSib2-6-r15", "posSib2-7-r15", "posSib2-8-r15", "posSib2-9-r15", "posSib2-10-r15", "posSib2-11-r15", - "posSib2-12-r15", "posSib2-13-r15", "posSib2-14-r15", "posSib2-15-r15", "posSib2-16-r15", "posSib2-17-r15", - "posSib2-18-r15", "posSib2-19-r15", "posSib3-1-r15"}; - return convert_enum_idx(options, 27, value, "pos_sys_info_r15_ies_s::pos_sib_type_and_info_r15_item_c_::types"); + "posSib1-1-r15", "posSib1-2-r15", "posSib1-3-r15", "posSib1-4-r15", "posSib1-5-r15", + "posSib1-6-r15", "posSib1-7-r15", "posSib2-1-r15", "posSib2-2-r15", "posSib2-3-r15", + "posSib2-4-r15", "posSib2-5-r15", "posSib2-6-r15", "posSib2-7-r15", "posSib2-8-r15", + "posSib2-9-r15", "posSib2-10-r15", "posSib2-11-r15", "posSib2-12-r15", "posSib2-13-r15", + "posSib2-14-r15", "posSib2-15-r15", "posSib2-16-r15", "posSib2-17-r15", "posSib2-18-r15", + "posSib2-19-r15", "posSib3-1-r15", "posSib1-8-v1610", "posSib2-20-v1610", "posSib2-21-v1610", + "posSib2-22-v1610", "posSib2-23-v1610", "posSib2-24-v1610", "posSib2-25-v1610", "posSib4-1-v1610", + "posSib5-1-v1610", "posSib1-9-v1700", "posSib1-10-v1700"}; + return convert_enum_idx(options, 38, value, "pos_sys_info_r15_ies_s::pos_sib_type_and_info_r15_item_c_::types"); } const char* sys_info_r8_ies_s::sib_type_and_info_item_c_::types_opts::to_string() const { - static const char* options[] = {"sib2", "sib3", "sib4", "sib5", "sib6", - "sib7", "sib8", "sib9", "sib10", "sib11", - "sib12-v920", "sib13-v920", "sib14-v1130", "sib15-v1130", "sib16-v1130", - "sib17-v1250", "sib18-v1250", "sib19-v1250", "sib20-v1310", "sib21-v1430", - "sib24-v1530", "sib25-v1530", "sib26-v1530"}; - return convert_enum_idx(options, 23, value, "sib_info_item_c::types"); -} -uint8_t sib_info_item_c::types_opts::to_number() const -{ - static const uint8_t options[] = {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 24, 25, 26}; - return map_enum_number(options, 23, value, "sib_info_item_c::types"); + static const char* options[] = {"sib2", "sib3", "sib4", "sib5", "sib6", + "sib7", "sib8", "sib9", "sib10", "sib11", + "sib12-v920", "sib13-v920", "sib14-v1130", "sib15-v1130", "sib16-v1130", + "sib17-v1250", "sib18-v1250", "sib19-v1250", "sib20-v1310", "sib21-v1430", + "sib24-v1530", "sib25-v1530", "sib26-v1530", "sib26a-v1610", "sib27-v1610", + "sib28-v1610", "sib29-v1610", "sib30-v1700", "sib31-v1700", "sib32-v1700"}; + return convert_enum_idx(options, 30, value, "sib_info_item_c::types"); } const char* sys_info_s::crit_exts_c_::crit_exts_future_r15_c_::types_opts::to_string() const @@ -1031,8 +1115,7 @@ const char* rr_cfg_ded_s::crs_intf_mitig_cfg_r15_c_::setup_c_::types_opts::to_st const char* redirected_carrier_info_r15_ies_c::types_opts::to_string() const { - static const char* options[] = { - "eutra-r15", "geran-r15", "utra-FDD-r15", "cdma2000-HRPD-r15", "cdma2000-1xRTT-r15", "utra-TDD-r15"}; + static const char* options[] = {"eutra", "geran", "utra-FDD", "cdma2000-HRPD", "cdma2000-1xRTT", "utra-TDD"}; return convert_enum_idx(options, 6, value, "redirected_carrier_info_r15_ies_c::types"); } @@ -1153,6 +1236,40 @@ const char* phys_cfg_ded_scell_r10_s::semi_static_cfi_cfg_r15_c_::setup_c_::type return convert_enum_idx(options, 2, value, "phys_cfg_ded_scell_r10_s::semi_static_cfi_cfg_r15_c_::setup_c_::types"); } +const char* thres_eutra_c::types_opts::to_string() const +{ + static const char* options[] = {"threshold-RSRP", "threshold-RSRQ"}; + return convert_enum_idx(options, 2, value, "thres_eutra_c::types"); +} + +const char* thres_nr_r15_c::types_opts::to_string() const +{ + static const char* options[] = {"nr-RSRP-r15", "nr-RSRQ-r15", "nr-SINR-r15"}; + return convert_enum_idx(options, 3, value, "thres_nr_r15_c::types"); +} + +const char* cond_recfg_trigger_eutra_r16_s::cond_event_id_r16_c_::types_opts::to_string() const +{ + static const char* options[] = {"condEventA3-r16", "condEventA5-r16"}; + return convert_enum_idx(options, 2, value, "cond_recfg_trigger_eutra_r16_s::cond_event_id_r16_c_::types"); +} +uint8_t cond_recfg_trigger_eutra_r16_s::cond_event_id_r16_c_::types_opts::to_number() const +{ + static const uint8_t options[] = {3, 5}; + return map_enum_number(options, 2, value, "cond_recfg_trigger_eutra_r16_s::cond_event_id_r16_c_::types"); +} + +const char* cond_recfg_trigger_nr_r17_s::cond_event_id_r17_c_::types_opts::to_string() const +{ + static const char* options[] = {"condEventB1-NR-r17"}; + return convert_enum_idx(options, 1, value, "cond_recfg_trigger_nr_r17_s::cond_event_id_r17_c_::types"); +} +uint8_t cond_recfg_trigger_nr_r17_s::cond_event_id_r17_c_::types_opts::to_number() const +{ + static const uint8_t options[] = {1}; + return map_enum_number(options, 1, value, "cond_recfg_trigger_nr_r17_s::cond_event_id_r17_c_::types"); +} + const char* meas_ds_cfg_r12_c::setup_s_::dmtc_period_offset_r12_c_::types_opts::to_string() const { static const char* options[] = {"ms40-r12", "ms80-r12", "ms160-r12"}; @@ -1195,18 +1312,6 @@ const char* meas_gap_cfg_c::setup_s_::gap_offset_c_::types_opts::to_string() con return convert_enum_idx(options, 20, value, "meas_gap_cfg_c::setup_s_::gap_offset_c_::types"); } -const char* thres_eutra_c::types_opts::to_string() const -{ - static const char* options[] = {"threshold-RSRP", "threshold-RSRQ"}; - return convert_enum_idx(options, 2, value, "thres_eutra_c::types"); -} - -const char* thres_nr_r15_c::types_opts::to_string() const -{ - static const char* options[] = {"nr-RSRP-r15", "nr-RSRQ-r15", "nr-SINR-r15"}; - return convert_enum_idx(options, 3, value, "thres_nr_r15_c::types"); -} - const char* thres_utra_c::types_opts::to_string() const { static const char* options[] = {"utra-RSCP", "utra-EcN0"}; @@ -1352,6 +1457,39 @@ uint16_t meas_obj_to_add_mod_ext_r13_s::meas_obj_r13_c_::types_opts::to_number() return 0; } +const char* pur_mpdcch_cfg_r16_s::mpdcch_start_sf_uess_r16_c_::types_opts::to_string() const +{ + static const char* options[] = {"fdd", "tdd"}; + return convert_enum_idx(options, 2, value, "pur_mpdcch_cfg_r16_s::mpdcch_start_sf_uess_r16_c_::types"); +} + +const char* pur_pusch_cfg_r16_s::pur_grant_info_r16_c_::types_opts::to_string() const +{ + static const char* options[] = {"ce-ModeA", "ce-ModeB"}; + return convert_enum_idx(options, 2, value, "pur_pusch_cfg_r16_s::pur_grant_info_r16_c_::types"); +} + +const char* pur_periodicity_and_offset_r16_c::types_opts::to_string() const +{ + static const char* options[] = {"periodicity8", + "periodicity16", + "periodicity32", + "periodicity64", + "periodicity128", + "periodicity256", + "periodicity512", + "periodicity1024", + "periodicity2048", + "periodicity4096", + "periodicity8192"}; + return convert_enum_idx(options, 11, value, "pur_periodicity_and_offset_r16_c::types"); +} +uint16_t pur_periodicity_and_offset_r16_c::types_opts::to_number() const +{ + static const uint16_t options[] = {8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192}; + return map_enum_number(options, 11, value, "pur_periodicity_and_offset_r16_c::types"); +} + const char* report_cfg_to_add_mod_s::report_cfg_c_::types_opts::to_string() const { static const char* options[] = {"reportConfigEUTRA", "reportConfigInterRAT"}; @@ -1360,7 +1498,7 @@ const char* report_cfg_to_add_mod_s::report_cfg_c_::types_opts::to_string() cons const char* security_cfg_ho_v1530_s::handov_type_v1530_c_::types_opts::to_string() const { - static const char* options[] = {"intra5GC-r15", "fivegc-ToEPC-r15", "epc-To5GC-r15"}; + static const char* options[] = {"intra5GC", "fivegc-ToEPC", "epc-To5GC"}; return convert_enum_idx(options, 3, value, "security_cfg_ho_v1530_s::handov_type_v1530_c_::types"); } @@ -1421,9 +1559,23 @@ const char* sl_v2x_cfg_ded_r14_s::comm_tx_res_v1530_c_::setup_c_::types_opts::to return convert_enum_idx(options, 2, value, "sl_v2x_cfg_ded_r14_s::comm_tx_res_v1530_c_::setup_c_::types"); } +const char* event_type_r17_c::types_opts::to_string() const +{ + static const char* options[] = {"outOfCoverage", "eventL1"}; + return convert_enum_idx(options, 2, value, "event_type_r17_c::types"); +} +uint8_t event_type_r17_c::types_opts::to_number() const +{ + if (value == event_l1) { + return 1; + } + invalid_enum_number(value, "event_type_r17_c::types"); + return 0; +} + const char* ran_notif_area_info_r15_c::types_opts::to_string() const { - static const char* options[] = {"cellList-r15", "ran-AreaConfigList-r15"}; + static const char* options[] = {"cellList", "ran-AreaConfigList"}; return convert_enum_idx(options, 2, value, "ran_notif_area_info_r15_c::types"); } @@ -1558,8 +1710,8 @@ const char* rn_sf_cfg_r10_s::rpdcch_cfg_r10_s_::pucch_cfg_r10_c_::types_opts::to const char* redirected_carrier_info_c::types_opts::to_string() const { static const char* options[] = { - "eutra", "geran", "utra-FDD", "utra-TDD", "cdma2000-HRPD", "cdma2000-1xRTT", "utra-TDD-r10", "nr-r15"}; - return convert_enum_idx(options, 8, value, "redirected_carrier_info_c::types"); + "eutra", "geran", "utra-FDD", "utra-TDD", "cdma2000-HRPD", "cdma2000-1xRTT", "utra-TDD-r10", "nr-r15", "nr-r17"}; + return convert_enum_idx(options, 9, value, "redirected_carrier_info_c::types"); } const char* security_cfg_ho_s::handov_type_c_::types_opts::to_string() const @@ -1570,8 +1722,7 @@ const char* security_cfg_ho_s::handov_type_c_::types_opts::to_string() const const char* dl_info_transfer_r15_ies_s::ded_info_type_r15_c_::types_opts::to_string() const { - static const char* options[] = { - "dedicatedInfoNAS-r15", "dedicatedInfoCDMA2000-1XRTT-r15", "dedicatedInfoCDMA2000-HRPD-r15"}; + static const char* options[] = {"dedicatedInfoNAS", "dedicatedInfoCDMA2000-1XRTT", "dedicatedInfoCDMA2000-HRPD"}; return convert_enum_idx(options, 3, value, "dl_info_transfer_r15_ies_s::ded_info_type_r15_c_::types"); } @@ -1610,6 +1761,12 @@ const char* counter_check_s::crit_exts_c_::c1_c_::types_opts::to_string() const return convert_enum_idx(options, 4, value, "counter_check_s::crit_exts_c_::c1_c_::types"); } +const char* dl_ded_msg_segment_r16_s::crit_exts_c_::types_opts::to_string() const +{ + static const char* options[] = {"dlDedicatedMessageSegment-r16", "criticalExtensionsFuture"}; + return convert_enum_idx(options, 2, value, "dl_ded_msg_segment_r16_s::crit_exts_c_::types"); +} + const char* dl_info_transfer_s::crit_exts_c_::c1_c_::types_opts::to_string() const { static const char* options[] = {"dlInformationTransfer-r8", "dlInformationTransfer-r15", "spare2", "spare1"}; @@ -1692,7 +1849,7 @@ const char* dl_dcch_msg_type_c::c1_c_::types_opts::to_string() const "loggedMeasurementConfiguration-r10", "rnReconfiguration-r10", "rrcConnectionResume-r13", - "spare3", + "dlDedicatedMessageSegment-r16", "spare2", "spare1"}; return convert_enum_idx(options, 16, value, "dl_dcch_msg_type_c::c1_c_::types"); @@ -1759,6 +1916,166 @@ void mbms_session_info_r9_s::to_json(json_writer& j) const j.end_obj(); } +// MBSFN-SubframeConfig-v1610 ::= SEQUENCE +SRSASN_CODE mbsfn_sf_cfg_v1610_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(sf_alloc_v1610.pack(bref)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE mbsfn_sf_cfg_v1610_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(sf_alloc_v1610.unpack(bref)); + + return SRSASN_SUCCESS; +} +void mbsfn_sf_cfg_v1610_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_fieldname("subframeAllocation-v1610"); + sf_alloc_v1610.to_json(j); + j.end_obj(); +} + +void mbsfn_sf_cfg_v1610_s::sf_alloc_v1610_c_::destroy_() +{ + switch (type_) { + case types::one_frame_v1610: + c.destroy<fixed_bitstring<2> >(); + break; + case types::four_frames_v1610: + c.destroy<fixed_bitstring<8> >(); + break; + default: + break; + } +} +void mbsfn_sf_cfg_v1610_s::sf_alloc_v1610_c_::set(types::options e) +{ + destroy_(); + type_ = e; + switch (type_) { + case types::one_frame_v1610: + c.init<fixed_bitstring<2> >(); + break; + case types::four_frames_v1610: + c.init<fixed_bitstring<8> >(); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "mbsfn_sf_cfg_v1610_s::sf_alloc_v1610_c_"); + } +} +mbsfn_sf_cfg_v1610_s::sf_alloc_v1610_c_::sf_alloc_v1610_c_(const mbsfn_sf_cfg_v1610_s::sf_alloc_v1610_c_& other) +{ + type_ = other.type(); + switch (type_) { + case types::one_frame_v1610: + c.init(other.c.get<fixed_bitstring<2> >()); + break; + case types::four_frames_v1610: + c.init(other.c.get<fixed_bitstring<8> >()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "mbsfn_sf_cfg_v1610_s::sf_alloc_v1610_c_"); + } +} +mbsfn_sf_cfg_v1610_s::sf_alloc_v1610_c_& +mbsfn_sf_cfg_v1610_s::sf_alloc_v1610_c_::operator=(const mbsfn_sf_cfg_v1610_s::sf_alloc_v1610_c_& other) +{ + if (this == &other) { + return *this; + } + set(other.type()); + switch (type_) { + case types::one_frame_v1610: + c.set(other.c.get<fixed_bitstring<2> >()); + break; + case types::four_frames_v1610: + c.set(other.c.get<fixed_bitstring<8> >()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "mbsfn_sf_cfg_v1610_s::sf_alloc_v1610_c_"); + } + + return *this; +} +fixed_bitstring<2>& mbsfn_sf_cfg_v1610_s::sf_alloc_v1610_c_::set_one_frame_v1610() +{ + set(types::one_frame_v1610); + return c.get<fixed_bitstring<2> >(); +} +fixed_bitstring<8>& mbsfn_sf_cfg_v1610_s::sf_alloc_v1610_c_::set_four_frames_v1610() +{ + set(types::four_frames_v1610); + return c.get<fixed_bitstring<8> >(); +} +void mbsfn_sf_cfg_v1610_s::sf_alloc_v1610_c_::to_json(json_writer& j) const +{ + j.start_obj(); + switch (type_) { + case types::one_frame_v1610: + j.write_str("oneFrame-v1610", c.get<fixed_bitstring<2> >().to_string()); + break; + case types::four_frames_v1610: + j.write_str("fourFrames-v1610", c.get<fixed_bitstring<8> >().to_string()); + break; + default: + log_invalid_choice_id(type_, "mbsfn_sf_cfg_v1610_s::sf_alloc_v1610_c_"); + } + j.end_obj(); +} +SRSASN_CODE mbsfn_sf_cfg_v1610_s::sf_alloc_v1610_c_::pack(bit_ref& bref) const +{ + type_.pack(bref); + switch (type_) { + case types::one_frame_v1610: + HANDLE_CODE(c.get<fixed_bitstring<2> >().pack(bref)); + break; + case types::four_frames_v1610: + HANDLE_CODE(c.get<fixed_bitstring<8> >().pack(bref)); + break; + default: + log_invalid_choice_id(type_, "mbsfn_sf_cfg_v1610_s::sf_alloc_v1610_c_"); + return SRSASN_ERROR_ENCODE_FAIL; + } + return SRSASN_SUCCESS; +} +SRSASN_CODE mbsfn_sf_cfg_v1610_s::sf_alloc_v1610_c_::unpack(cbit_ref& bref) +{ + types e; + e.unpack(bref); + set(e); + switch (type_) { + case types::one_frame_v1610: + HANDLE_CODE(c.get<fixed_bitstring<2> >().unpack(bref)); + break; + case types::four_frames_v1610: + HANDLE_CODE(c.get<fixed_bitstring<8> >().unpack(bref)); + break; + default: + log_invalid_choice_id(type_, "mbsfn_sf_cfg_v1610_s::sf_alloc_v1610_c_"); + return SRSASN_ERROR_DECODE_FAIL; + } + return SRSASN_SUCCESS; +} + +const char* mbsfn_sf_cfg_v1610_s::sf_alloc_v1610_c_::types_opts::to_string() const +{ + static const char* options[] = {"oneFrame-v1610", "fourFrames-v1610"}; + return convert_enum_idx(options, 2, value, "mbsfn_sf_cfg_v1610_s::sf_alloc_v1610_c_::types"); +} +uint8_t mbsfn_sf_cfg_v1610_s::sf_alloc_v1610_c_::types_opts::to_number() const +{ + static const uint8_t options[] = {1, 4}; + return map_enum_number(options, 2, value, "mbsfn_sf_cfg_v1610_s::sf_alloc_v1610_c_::types"); +} + // PMCH-Config-r12 ::= SEQUENCE SRSASN_CODE pmch_cfg_r12_s::pack(bit_ref& bref) const { @@ -1952,6 +2269,47 @@ uint8_t pmch_cfg_r12_s::mch_sched_period_v1430_opts::to_number() const return map_enum_number(options, 2, value, "pmch_cfg_r12_s::mch_sched_period_v1430_e_"); } +// MBSFNAreaConfiguration-v1610-IEs ::= SEQUENCE +SRSASN_CODE mbsfn_area_cfg_v1610_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(common_sf_alloc_v1610_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + if (common_sf_alloc_v1610_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, common_sf_alloc_v1610, 1, 8)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE mbsfn_area_cfg_v1610_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(common_sf_alloc_v1610_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + if (common_sf_alloc_v1610_present) { + HANDLE_CODE(unpack_dyn_seq_of(common_sf_alloc_v1610, bref, 1, 8)); + } + + return SRSASN_SUCCESS; +} +void mbsfn_area_cfg_v1610_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (common_sf_alloc_v1610_present) { + j.start_array("commonSF-Alloc-v1610"); + for (const auto& e1 : common_sf_alloc_v1610) { + e1.to_json(j); + } + j.end_array(); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + j.start_obj(); + j.end_obj(); + } + j.end_obj(); +} + // PMCH-InfoExt-r12 ::= SEQUENCE SRSASN_CODE pmch_info_ext_r12_s::pack(bit_ref& bref) const { @@ -1987,7 +2345,10 @@ SRSASN_CODE mbsfn_area_cfg_v1430_ies_s::pack(bit_ref& bref) const { HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); - HANDLE_CODE(pack_dyn_seq_of(bref, common_sf_alloc_r14, 1, 8)); + HANDLE_CODE(pack_dyn_seq_of(bref, common_sf_alloc_v1430, 1, 8)); + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } return SRSASN_SUCCESS; } @@ -1995,22 +2356,24 @@ SRSASN_CODE mbsfn_area_cfg_v1430_ies_s::unpack(cbit_ref& bref) { HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); - HANDLE_CODE(unpack_dyn_seq_of(common_sf_alloc_r14, bref, 1, 8)); + HANDLE_CODE(unpack_dyn_seq_of(common_sf_alloc_v1430, bref, 1, 8)); + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } return SRSASN_SUCCESS; } void mbsfn_area_cfg_v1430_ies_s::to_json(json_writer& j) const { j.start_obj(); - j.start_array("commonSF-Alloc-r14"); - for (const auto& e1 : common_sf_alloc_r14) { + j.start_array("commonSF-Alloc-v1430"); + for (const auto& e1 : common_sf_alloc_v1430) { e1.to_json(j); } j.end_array(); if (non_crit_ext_present) { j.write_fieldname("nonCriticalExtension"); - j.start_obj(); - j.end_obj(); + non_crit_ext.to_json(j); } j.end_obj(); } @@ -3133,6 +3496,305 @@ uint16_t sc_mtch_sched_info_br_r14_s::sched_period_start_offset_scptm_r14_c_::ty options, 16, value, "sc_mtch_sched_info_br_r14_s::sched_period_start_offset_scptm_r14_c_::types"); } +// SC-MTCH-Info-BR-r14 ::= SEQUENCE +SRSASN_CODE sc_mtch_info_br_r14_s::pack(bit_ref& bref) const +{ + bref.pack(ext, 1); + HANDLE_CODE(bref.pack(sc_mtch_sched_info_r14_present, 1)); + HANDLE_CODE(bref.pack(sc_mtch_neighbour_cell_r14_present, 1)); + HANDLE_CODE(bref.pack(p_a_r14_present, 1)); + + HANDLE_CODE(pack_integer(bref, sc_mtch_carrier_freq_r14, (uint32_t)0u, (uint32_t)262143u)); + HANDLE_CODE(mbms_session_info_r14.pack(bref)); + HANDLE_CODE(g_rnti_r14.pack(bref)); + if (sc_mtch_sched_info_r14_present) { + HANDLE_CODE(sc_mtch_sched_info_r14.pack(bref)); + } + if (sc_mtch_neighbour_cell_r14_present) { + HANDLE_CODE(sc_mtch_neighbour_cell_r14.pack(bref)); + } + HANDLE_CODE(pack_integer(bref, mpdcch_nb_sc_mtch_r14, (uint8_t)1u, (uint8_t)16u)); + HANDLE_CODE(mpdcch_num_repeat_sc_mtch_r14.pack(bref)); + HANDLE_CODE(mpdcch_start_sf_sc_mtch_r14.pack(bref)); + HANDLE_CODE(mpdcch_pdsch_hop_cfg_sc_mtch_r14.pack(bref)); + HANDLE_CODE(mpdcch_pdsch_cemode_cfg_sc_mtch_r14.pack(bref)); + HANDLE_CODE(mpdcch_pdsch_max_bw_sc_mtch_r14.pack(bref)); + HANDLE_CODE(mpdcch_offset_sc_mtch_r14.pack(bref)); + if (p_a_r14_present) { + HANDLE_CODE(p_a_r14.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE sc_mtch_info_br_r14_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(bref.unpack(sc_mtch_sched_info_r14_present, 1)); + HANDLE_CODE(bref.unpack(sc_mtch_neighbour_cell_r14_present, 1)); + HANDLE_CODE(bref.unpack(p_a_r14_present, 1)); + + HANDLE_CODE(unpack_integer(sc_mtch_carrier_freq_r14, bref, (uint32_t)0u, (uint32_t)262143u)); + HANDLE_CODE(mbms_session_info_r14.unpack(bref)); + HANDLE_CODE(g_rnti_r14.unpack(bref)); + if (sc_mtch_sched_info_r14_present) { + HANDLE_CODE(sc_mtch_sched_info_r14.unpack(bref)); + } + if (sc_mtch_neighbour_cell_r14_present) { + HANDLE_CODE(sc_mtch_neighbour_cell_r14.unpack(bref)); + } + HANDLE_CODE(unpack_integer(mpdcch_nb_sc_mtch_r14, bref, (uint8_t)1u, (uint8_t)16u)); + HANDLE_CODE(mpdcch_num_repeat_sc_mtch_r14.unpack(bref)); + HANDLE_CODE(mpdcch_start_sf_sc_mtch_r14.unpack(bref)); + HANDLE_CODE(mpdcch_pdsch_hop_cfg_sc_mtch_r14.unpack(bref)); + HANDLE_CODE(mpdcch_pdsch_cemode_cfg_sc_mtch_r14.unpack(bref)); + HANDLE_CODE(mpdcch_pdsch_max_bw_sc_mtch_r14.unpack(bref)); + HANDLE_CODE(mpdcch_offset_sc_mtch_r14.unpack(bref)); + if (p_a_r14_present) { + HANDLE_CODE(p_a_r14.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void sc_mtch_info_br_r14_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_int("sc-mtch-CarrierFreq-r14", sc_mtch_carrier_freq_r14); + j.write_fieldname("mbmsSessionInfo-r14"); + mbms_session_info_r14.to_json(j); + j.write_str("g-RNTI-r14", g_rnti_r14.to_string()); + if (sc_mtch_sched_info_r14_present) { + j.write_fieldname("sc-mtch-schedulingInfo-r14"); + sc_mtch_sched_info_r14.to_json(j); + } + if (sc_mtch_neighbour_cell_r14_present) { + j.write_str("sc-mtch-neighbourCell-r14", sc_mtch_neighbour_cell_r14.to_string()); + } + j.write_int("mpdcch-Narrowband-SC-MTCH-r14", mpdcch_nb_sc_mtch_r14); + j.write_str("mpdcch-NumRepetition-SC-MTCH-r14", mpdcch_num_repeat_sc_mtch_r14.to_string()); + j.write_fieldname("mpdcch-StartSF-SC-MTCH-r14"); + mpdcch_start_sf_sc_mtch_r14.to_json(j); + j.write_str("mpdcch-PDSCH-HoppingConfig-SC-MTCH-r14", mpdcch_pdsch_hop_cfg_sc_mtch_r14.to_string()); + j.write_str("mpdcch-PDSCH-CEmodeConfig-SC-MTCH-r14", mpdcch_pdsch_cemode_cfg_sc_mtch_r14.to_string()); + j.write_str("mpdcch-PDSCH-MaxBandwidth-SC-MTCH-r14", mpdcch_pdsch_max_bw_sc_mtch_r14.to_string()); + j.write_str("mpdcch-Offset-SC-MTCH-r14", mpdcch_offset_sc_mtch_r14.to_string()); + if (p_a_r14_present) { + j.write_str("p-a-r14", p_a_r14.to_string()); + } + j.end_obj(); +} + +const char* sc_mtch_info_br_r14_s::mpdcch_num_repeat_sc_mtch_r14_opts::to_string() const +{ + static const char* options[] = {"r1", "r2", "r4", "r8", "r16", "r32", "r64", "r128", "r256"}; + return convert_enum_idx(options, 9, value, "sc_mtch_info_br_r14_s::mpdcch_num_repeat_sc_mtch_r14_e_"); +} +uint16_t sc_mtch_info_br_r14_s::mpdcch_num_repeat_sc_mtch_r14_opts::to_number() const +{ + static const uint16_t options[] = {1, 2, 4, 8, 16, 32, 64, 128, 256}; + return map_enum_number(options, 9, value, "sc_mtch_info_br_r14_s::mpdcch_num_repeat_sc_mtch_r14_e_"); +} + +void sc_mtch_info_br_r14_s::mpdcch_start_sf_sc_mtch_r14_c_::destroy_() {} +void sc_mtch_info_br_r14_s::mpdcch_start_sf_sc_mtch_r14_c_::set(types::options e) +{ + destroy_(); + type_ = e; +} +sc_mtch_info_br_r14_s::mpdcch_start_sf_sc_mtch_r14_c_::mpdcch_start_sf_sc_mtch_r14_c_( + const sc_mtch_info_br_r14_s::mpdcch_start_sf_sc_mtch_r14_c_& other) +{ + type_ = other.type(); + switch (type_) { + case types::fdd_r14: + c.init(other.c.get<fdd_r14_e_>()); + break; + case types::tdd_r14: + c.init(other.c.get<tdd_r14_e_>()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "sc_mtch_info_br_r14_s::mpdcch_start_sf_sc_mtch_r14_c_"); + } +} +sc_mtch_info_br_r14_s::mpdcch_start_sf_sc_mtch_r14_c_& sc_mtch_info_br_r14_s::mpdcch_start_sf_sc_mtch_r14_c_::operator=( + const sc_mtch_info_br_r14_s::mpdcch_start_sf_sc_mtch_r14_c_& other) +{ + if (this == &other) { + return *this; + } + set(other.type()); + switch (type_) { + case types::fdd_r14: + c.set(other.c.get<fdd_r14_e_>()); + break; + case types::tdd_r14: + c.set(other.c.get<tdd_r14_e_>()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "sc_mtch_info_br_r14_s::mpdcch_start_sf_sc_mtch_r14_c_"); + } + + return *this; +} +sc_mtch_info_br_r14_s::mpdcch_start_sf_sc_mtch_r14_c_::fdd_r14_e_& +sc_mtch_info_br_r14_s::mpdcch_start_sf_sc_mtch_r14_c_::set_fdd_r14() +{ + set(types::fdd_r14); + return c.get<fdd_r14_e_>(); +} +sc_mtch_info_br_r14_s::mpdcch_start_sf_sc_mtch_r14_c_::tdd_r14_e_& +sc_mtch_info_br_r14_s::mpdcch_start_sf_sc_mtch_r14_c_::set_tdd_r14() +{ + set(types::tdd_r14); + return c.get<tdd_r14_e_>(); +} +void sc_mtch_info_br_r14_s::mpdcch_start_sf_sc_mtch_r14_c_::to_json(json_writer& j) const +{ + j.start_obj(); + switch (type_) { + case types::fdd_r14: + j.write_str("fdd-r14", c.get<fdd_r14_e_>().to_string()); + break; + case types::tdd_r14: + j.write_str("tdd-r14", c.get<tdd_r14_e_>().to_string()); + break; + default: + log_invalid_choice_id(type_, "sc_mtch_info_br_r14_s::mpdcch_start_sf_sc_mtch_r14_c_"); + } + j.end_obj(); +} +SRSASN_CODE sc_mtch_info_br_r14_s::mpdcch_start_sf_sc_mtch_r14_c_::pack(bit_ref& bref) const +{ + type_.pack(bref); + switch (type_) { + case types::fdd_r14: + HANDLE_CODE(c.get<fdd_r14_e_>().pack(bref)); + break; + case types::tdd_r14: + HANDLE_CODE(c.get<tdd_r14_e_>().pack(bref)); + break; + default: + log_invalid_choice_id(type_, "sc_mtch_info_br_r14_s::mpdcch_start_sf_sc_mtch_r14_c_"); + return SRSASN_ERROR_ENCODE_FAIL; + } + return SRSASN_SUCCESS; +} +SRSASN_CODE sc_mtch_info_br_r14_s::mpdcch_start_sf_sc_mtch_r14_c_::unpack(cbit_ref& bref) +{ + types e; + e.unpack(bref); + set(e); + switch (type_) { + case types::fdd_r14: + HANDLE_CODE(c.get<fdd_r14_e_>().unpack(bref)); + break; + case types::tdd_r14: + HANDLE_CODE(c.get<tdd_r14_e_>().unpack(bref)); + break; + default: + log_invalid_choice_id(type_, "sc_mtch_info_br_r14_s::mpdcch_start_sf_sc_mtch_r14_c_"); + return SRSASN_ERROR_DECODE_FAIL; + } + return SRSASN_SUCCESS; +} + +const char* sc_mtch_info_br_r14_s::mpdcch_start_sf_sc_mtch_r14_c_::fdd_r14_opts::to_string() const +{ + static const char* options[] = {"v1", "v1dot5", "v2", "v2dot5", "v4", "v5", "v8", "v10"}; + return convert_enum_idx(options, 8, value, "sc_mtch_info_br_r14_s::mpdcch_start_sf_sc_mtch_r14_c_::fdd_r14_e_"); +} +float sc_mtch_info_br_r14_s::mpdcch_start_sf_sc_mtch_r14_c_::fdd_r14_opts::to_number() const +{ + static const float options[] = {1.0, 1.5, 2.0, 2.5, 4.0, 5.0, 8.0, 10.0}; + return map_enum_number(options, 8, value, "sc_mtch_info_br_r14_s::mpdcch_start_sf_sc_mtch_r14_c_::fdd_r14_e_"); +} +const char* sc_mtch_info_br_r14_s::mpdcch_start_sf_sc_mtch_r14_c_::fdd_r14_opts::to_number_string() const +{ + static const char* options[] = {"1", "1.5", "2", "2.5", "4", "5", "8", "10"}; + return convert_enum_idx(options, 8, value, "sc_mtch_info_br_r14_s::mpdcch_start_sf_sc_mtch_r14_c_::fdd_r14_e_"); +} + +const char* sc_mtch_info_br_r14_s::mpdcch_start_sf_sc_mtch_r14_c_::tdd_r14_opts::to_string() const +{ + static const char* options[] = {"v1", "v2", "v4", "v5", "v8", "v10", "v20"}; + return convert_enum_idx(options, 7, value, "sc_mtch_info_br_r14_s::mpdcch_start_sf_sc_mtch_r14_c_::tdd_r14_e_"); +} +uint8_t sc_mtch_info_br_r14_s::mpdcch_start_sf_sc_mtch_r14_c_::tdd_r14_opts::to_number() const +{ + static const uint8_t options[] = {1, 2, 4, 5, 8, 10, 20}; + return map_enum_number(options, 7, value, "sc_mtch_info_br_r14_s::mpdcch_start_sf_sc_mtch_r14_c_::tdd_r14_e_"); +} + +const char* sc_mtch_info_br_r14_s::mpdcch_start_sf_sc_mtch_r14_c_::types_opts::to_string() const +{ + static const char* options[] = {"fdd-r14", "tdd-r14"}; + return convert_enum_idx(options, 2, value, "sc_mtch_info_br_r14_s::mpdcch_start_sf_sc_mtch_r14_c_::types"); +} + +const char* sc_mtch_info_br_r14_s::mpdcch_pdsch_hop_cfg_sc_mtch_r14_opts::to_string() const +{ + static const char* options[] = {"on", "off"}; + return convert_enum_idx(options, 2, value, "sc_mtch_info_br_r14_s::mpdcch_pdsch_hop_cfg_sc_mtch_r14_e_"); +} + +const char* sc_mtch_info_br_r14_s::mpdcch_pdsch_cemode_cfg_sc_mtch_r14_opts::to_string() const +{ + static const char* options[] = {"ce-ModeA", "ce-ModeB"}; + return convert_enum_idx(options, 2, value, "sc_mtch_info_br_r14_s::mpdcch_pdsch_cemode_cfg_sc_mtch_r14_e_"); +} + +const char* sc_mtch_info_br_r14_s::mpdcch_pdsch_max_bw_sc_mtch_r14_opts::to_string() const +{ + static const char* options[] = {"bw1dot4", "bw5"}; + return convert_enum_idx(options, 2, value, "sc_mtch_info_br_r14_s::mpdcch_pdsch_max_bw_sc_mtch_r14_e_"); +} +float sc_mtch_info_br_r14_s::mpdcch_pdsch_max_bw_sc_mtch_r14_opts::to_number() const +{ + static const float options[] = {1.4, 5.0}; + return map_enum_number(options, 2, value, "sc_mtch_info_br_r14_s::mpdcch_pdsch_max_bw_sc_mtch_r14_e_"); +} +const char* sc_mtch_info_br_r14_s::mpdcch_pdsch_max_bw_sc_mtch_r14_opts::to_number_string() const +{ + static const char* options[] = {"1.4", "5"}; + return convert_enum_idx(options, 2, value, "sc_mtch_info_br_r14_s::mpdcch_pdsch_max_bw_sc_mtch_r14_e_"); +} + +const char* sc_mtch_info_br_r14_s::mpdcch_offset_sc_mtch_r14_opts::to_string() const +{ + static const char* options[] = { + "zero", "oneEighth", "oneQuarter", "threeEighth", "oneHalf", "fiveEighth", "threeQuarter", "sevenEighth"}; + return convert_enum_idx(options, 8, value, "sc_mtch_info_br_r14_s::mpdcch_offset_sc_mtch_r14_e_"); +} +float sc_mtch_info_br_r14_s::mpdcch_offset_sc_mtch_r14_opts::to_number() const +{ + static const float options[] = {0.0, 0.125, 0.25, 0.375, 0.5, 0.625, 0.75, 0.875}; + return map_enum_number(options, 8, value, "sc_mtch_info_br_r14_s::mpdcch_offset_sc_mtch_r14_e_"); +} +const char* sc_mtch_info_br_r14_s::mpdcch_offset_sc_mtch_r14_opts::to_number_string() const +{ + static const char* options[] = {"0", "1/8", "1/4", "3/8", "1/2", "5/8", "3/4", "7/8"}; + return convert_enum_idx(options, 8, value, "sc_mtch_info_br_r14_s::mpdcch_offset_sc_mtch_r14_e_"); +} + +const char* sc_mtch_info_br_r14_s::p_a_r14_opts::to_string() const +{ + static const char* options[] = {"dB-6", "dB-4dot77", "dB-3", "dB-1dot77", "dB0", "dB1", "dB2", "dB3"}; + return convert_enum_idx(options, 8, value, "sc_mtch_info_br_r14_s::p_a_r14_e_"); +} +float sc_mtch_info_br_r14_s::p_a_r14_opts::to_number() const +{ + static const float options[] = {-6.0, -4.77, -3.0, -1.77, 0.0, 1.0, 2.0, 3.0}; + return map_enum_number(options, 8, value, "sc_mtch_info_br_r14_s::p_a_r14_e_"); +} +const char* sc_mtch_info_br_r14_s::p_a_r14_opts::to_number_string() const +{ + static const char* options[] = {"-6", "-4.77", "-3", "-1.77", "0", "1", "2", "3"}; + return convert_enum_idx(options, 8, value, "sc_mtch_info_br_r14_s::p_a_r14_e_"); +} + // SC-MTCH-SchedulingInfo-r13 ::= SEQUENCE SRSASN_CODE sc_mtch_sched_info_r13_s::pack(bit_ref& bref) const { @@ -3660,305 +4322,6 @@ void pci_arfcn_r13_s::to_json(json_writer& j) const j.end_obj(); } -// SC-MTCH-Info-BR-r14 ::= SEQUENCE -SRSASN_CODE sc_mtch_info_br_r14_s::pack(bit_ref& bref) const -{ - bref.pack(ext, 1); - HANDLE_CODE(bref.pack(sc_mtch_sched_info_r14_present, 1)); - HANDLE_CODE(bref.pack(sc_mtch_neighbour_cell_r14_present, 1)); - HANDLE_CODE(bref.pack(p_a_r14_present, 1)); - - HANDLE_CODE(pack_integer(bref, sc_mtch_carrier_freq_r14, (uint32_t)0u, (uint32_t)262143u)); - HANDLE_CODE(mbms_session_info_r14.pack(bref)); - HANDLE_CODE(g_rnti_r14.pack(bref)); - if (sc_mtch_sched_info_r14_present) { - HANDLE_CODE(sc_mtch_sched_info_r14.pack(bref)); - } - if (sc_mtch_neighbour_cell_r14_present) { - HANDLE_CODE(sc_mtch_neighbour_cell_r14.pack(bref)); - } - HANDLE_CODE(pack_integer(bref, mpdcch_nb_sc_mtch_r14, (uint8_t)1u, (uint8_t)16u)); - HANDLE_CODE(mpdcch_num_repeat_sc_mtch_r14.pack(bref)); - HANDLE_CODE(mpdcch_start_sf_sc_mtch_r14.pack(bref)); - HANDLE_CODE(mpdcch_pdsch_hop_cfg_sc_mtch_r14.pack(bref)); - HANDLE_CODE(mpdcch_pdsch_cemode_cfg_sc_mtch_r14.pack(bref)); - HANDLE_CODE(mpdcch_pdsch_max_bw_sc_mtch_r14.pack(bref)); - HANDLE_CODE(mpdcch_offset_sc_mtch_r14.pack(bref)); - if (p_a_r14_present) { - HANDLE_CODE(p_a_r14.pack(bref)); - } - - return SRSASN_SUCCESS; -} -SRSASN_CODE sc_mtch_info_br_r14_s::unpack(cbit_ref& bref) -{ - bref.unpack(ext, 1); - HANDLE_CODE(bref.unpack(sc_mtch_sched_info_r14_present, 1)); - HANDLE_CODE(bref.unpack(sc_mtch_neighbour_cell_r14_present, 1)); - HANDLE_CODE(bref.unpack(p_a_r14_present, 1)); - - HANDLE_CODE(unpack_integer(sc_mtch_carrier_freq_r14, bref, (uint32_t)0u, (uint32_t)262143u)); - HANDLE_CODE(mbms_session_info_r14.unpack(bref)); - HANDLE_CODE(g_rnti_r14.unpack(bref)); - if (sc_mtch_sched_info_r14_present) { - HANDLE_CODE(sc_mtch_sched_info_r14.unpack(bref)); - } - if (sc_mtch_neighbour_cell_r14_present) { - HANDLE_CODE(sc_mtch_neighbour_cell_r14.unpack(bref)); - } - HANDLE_CODE(unpack_integer(mpdcch_nb_sc_mtch_r14, bref, (uint8_t)1u, (uint8_t)16u)); - HANDLE_CODE(mpdcch_num_repeat_sc_mtch_r14.unpack(bref)); - HANDLE_CODE(mpdcch_start_sf_sc_mtch_r14.unpack(bref)); - HANDLE_CODE(mpdcch_pdsch_hop_cfg_sc_mtch_r14.unpack(bref)); - HANDLE_CODE(mpdcch_pdsch_cemode_cfg_sc_mtch_r14.unpack(bref)); - HANDLE_CODE(mpdcch_pdsch_max_bw_sc_mtch_r14.unpack(bref)); - HANDLE_CODE(mpdcch_offset_sc_mtch_r14.unpack(bref)); - if (p_a_r14_present) { - HANDLE_CODE(p_a_r14.unpack(bref)); - } - - return SRSASN_SUCCESS; -} -void sc_mtch_info_br_r14_s::to_json(json_writer& j) const -{ - j.start_obj(); - j.write_int("sc-mtch-CarrierFreq-r14", sc_mtch_carrier_freq_r14); - j.write_fieldname("mbmsSessionInfo-r14"); - mbms_session_info_r14.to_json(j); - j.write_str("g-RNTI-r14", g_rnti_r14.to_string()); - if (sc_mtch_sched_info_r14_present) { - j.write_fieldname("sc-mtch-schedulingInfo-r14"); - sc_mtch_sched_info_r14.to_json(j); - } - if (sc_mtch_neighbour_cell_r14_present) { - j.write_str("sc-mtch-neighbourCell-r14", sc_mtch_neighbour_cell_r14.to_string()); - } - j.write_int("mpdcch-Narrowband-SC-MTCH-r14", mpdcch_nb_sc_mtch_r14); - j.write_str("mpdcch-NumRepetition-SC-MTCH-r14", mpdcch_num_repeat_sc_mtch_r14.to_string()); - j.write_fieldname("mpdcch-StartSF-SC-MTCH-r14"); - mpdcch_start_sf_sc_mtch_r14.to_json(j); - j.write_str("mpdcch-PDSCH-HoppingConfig-SC-MTCH-r14", mpdcch_pdsch_hop_cfg_sc_mtch_r14.to_string()); - j.write_str("mpdcch-PDSCH-CEmodeConfig-SC-MTCH-r14", mpdcch_pdsch_cemode_cfg_sc_mtch_r14.to_string()); - j.write_str("mpdcch-PDSCH-MaxBandwidth-SC-MTCH-r14", mpdcch_pdsch_max_bw_sc_mtch_r14.to_string()); - j.write_str("mpdcch-Offset-SC-MTCH-r14", mpdcch_offset_sc_mtch_r14.to_string()); - if (p_a_r14_present) { - j.write_str("p-a-r14", p_a_r14.to_string()); - } - j.end_obj(); -} - -const char* sc_mtch_info_br_r14_s::mpdcch_num_repeat_sc_mtch_r14_opts::to_string() const -{ - static const char* options[] = {"r1", "r2", "r4", "r8", "r16", "r32", "r64", "r128", "r256"}; - return convert_enum_idx(options, 9, value, "sc_mtch_info_br_r14_s::mpdcch_num_repeat_sc_mtch_r14_e_"); -} -uint16_t sc_mtch_info_br_r14_s::mpdcch_num_repeat_sc_mtch_r14_opts::to_number() const -{ - static const uint16_t options[] = {1, 2, 4, 8, 16, 32, 64, 128, 256}; - return map_enum_number(options, 9, value, "sc_mtch_info_br_r14_s::mpdcch_num_repeat_sc_mtch_r14_e_"); -} - -void sc_mtch_info_br_r14_s::mpdcch_start_sf_sc_mtch_r14_c_::destroy_() {} -void sc_mtch_info_br_r14_s::mpdcch_start_sf_sc_mtch_r14_c_::set(types::options e) -{ - destroy_(); - type_ = e; -} -sc_mtch_info_br_r14_s::mpdcch_start_sf_sc_mtch_r14_c_::mpdcch_start_sf_sc_mtch_r14_c_( - const sc_mtch_info_br_r14_s::mpdcch_start_sf_sc_mtch_r14_c_& other) -{ - type_ = other.type(); - switch (type_) { - case types::fdd_r14: - c.init(other.c.get<fdd_r14_e_>()); - break; - case types::tdd_r14: - c.init(other.c.get<tdd_r14_e_>()); - break; - case types::nulltype: - break; - default: - log_invalid_choice_id(type_, "sc_mtch_info_br_r14_s::mpdcch_start_sf_sc_mtch_r14_c_"); - } -} -sc_mtch_info_br_r14_s::mpdcch_start_sf_sc_mtch_r14_c_& sc_mtch_info_br_r14_s::mpdcch_start_sf_sc_mtch_r14_c_::operator=( - const sc_mtch_info_br_r14_s::mpdcch_start_sf_sc_mtch_r14_c_& other) -{ - if (this == &other) { - return *this; - } - set(other.type()); - switch (type_) { - case types::fdd_r14: - c.set(other.c.get<fdd_r14_e_>()); - break; - case types::tdd_r14: - c.set(other.c.get<tdd_r14_e_>()); - break; - case types::nulltype: - break; - default: - log_invalid_choice_id(type_, "sc_mtch_info_br_r14_s::mpdcch_start_sf_sc_mtch_r14_c_"); - } - - return *this; -} -sc_mtch_info_br_r14_s::mpdcch_start_sf_sc_mtch_r14_c_::fdd_r14_e_& -sc_mtch_info_br_r14_s::mpdcch_start_sf_sc_mtch_r14_c_::set_fdd_r14() -{ - set(types::fdd_r14); - return c.get<fdd_r14_e_>(); -} -sc_mtch_info_br_r14_s::mpdcch_start_sf_sc_mtch_r14_c_::tdd_r14_e_& -sc_mtch_info_br_r14_s::mpdcch_start_sf_sc_mtch_r14_c_::set_tdd_r14() -{ - set(types::tdd_r14); - return c.get<tdd_r14_e_>(); -} -void sc_mtch_info_br_r14_s::mpdcch_start_sf_sc_mtch_r14_c_::to_json(json_writer& j) const -{ - j.start_obj(); - switch (type_) { - case types::fdd_r14: - j.write_str("fdd-r14", c.get<fdd_r14_e_>().to_string()); - break; - case types::tdd_r14: - j.write_str("tdd-r14", c.get<tdd_r14_e_>().to_string()); - break; - default: - log_invalid_choice_id(type_, "sc_mtch_info_br_r14_s::mpdcch_start_sf_sc_mtch_r14_c_"); - } - j.end_obj(); -} -SRSASN_CODE sc_mtch_info_br_r14_s::mpdcch_start_sf_sc_mtch_r14_c_::pack(bit_ref& bref) const -{ - type_.pack(bref); - switch (type_) { - case types::fdd_r14: - HANDLE_CODE(c.get<fdd_r14_e_>().pack(bref)); - break; - case types::tdd_r14: - HANDLE_CODE(c.get<tdd_r14_e_>().pack(bref)); - break; - default: - log_invalid_choice_id(type_, "sc_mtch_info_br_r14_s::mpdcch_start_sf_sc_mtch_r14_c_"); - return SRSASN_ERROR_ENCODE_FAIL; - } - return SRSASN_SUCCESS; -} -SRSASN_CODE sc_mtch_info_br_r14_s::mpdcch_start_sf_sc_mtch_r14_c_::unpack(cbit_ref& bref) -{ - types e; - e.unpack(bref); - set(e); - switch (type_) { - case types::fdd_r14: - HANDLE_CODE(c.get<fdd_r14_e_>().unpack(bref)); - break; - case types::tdd_r14: - HANDLE_CODE(c.get<tdd_r14_e_>().unpack(bref)); - break; - default: - log_invalid_choice_id(type_, "sc_mtch_info_br_r14_s::mpdcch_start_sf_sc_mtch_r14_c_"); - return SRSASN_ERROR_DECODE_FAIL; - } - return SRSASN_SUCCESS; -} - -const char* sc_mtch_info_br_r14_s::mpdcch_start_sf_sc_mtch_r14_c_::fdd_r14_opts::to_string() const -{ - static const char* options[] = {"v1", "v1dot5", "v2", "v2dot5", "v4", "v5", "v8", "v10"}; - return convert_enum_idx(options, 8, value, "sc_mtch_info_br_r14_s::mpdcch_start_sf_sc_mtch_r14_c_::fdd_r14_e_"); -} -float sc_mtch_info_br_r14_s::mpdcch_start_sf_sc_mtch_r14_c_::fdd_r14_opts::to_number() const -{ - static const float options[] = {1.0, 1.5, 2.0, 2.5, 4.0, 5.0, 8.0, 10.0}; - return map_enum_number(options, 8, value, "sc_mtch_info_br_r14_s::mpdcch_start_sf_sc_mtch_r14_c_::fdd_r14_e_"); -} -const char* sc_mtch_info_br_r14_s::mpdcch_start_sf_sc_mtch_r14_c_::fdd_r14_opts::to_number_string() const -{ - static const char* options[] = {"1", "1.5", "2", "2.5", "4", "5", "8", "10"}; - return convert_enum_idx(options, 8, value, "sc_mtch_info_br_r14_s::mpdcch_start_sf_sc_mtch_r14_c_::fdd_r14_e_"); -} - -const char* sc_mtch_info_br_r14_s::mpdcch_start_sf_sc_mtch_r14_c_::tdd_r14_opts::to_string() const -{ - static const char* options[] = {"v1", "v2", "v4", "v5", "v8", "v10", "v20"}; - return convert_enum_idx(options, 7, value, "sc_mtch_info_br_r14_s::mpdcch_start_sf_sc_mtch_r14_c_::tdd_r14_e_"); -} -uint8_t sc_mtch_info_br_r14_s::mpdcch_start_sf_sc_mtch_r14_c_::tdd_r14_opts::to_number() const -{ - static const uint8_t options[] = {1, 2, 4, 5, 8, 10, 20}; - return map_enum_number(options, 7, value, "sc_mtch_info_br_r14_s::mpdcch_start_sf_sc_mtch_r14_c_::tdd_r14_e_"); -} - -const char* sc_mtch_info_br_r14_s::mpdcch_start_sf_sc_mtch_r14_c_::types_opts::to_string() const -{ - static const char* options[] = {"fdd-r14", "tdd-r14"}; - return convert_enum_idx(options, 2, value, "sc_mtch_info_br_r14_s::mpdcch_start_sf_sc_mtch_r14_c_::types"); -} - -const char* sc_mtch_info_br_r14_s::mpdcch_pdsch_hop_cfg_sc_mtch_r14_opts::to_string() const -{ - static const char* options[] = {"on", "off"}; - return convert_enum_idx(options, 2, value, "sc_mtch_info_br_r14_s::mpdcch_pdsch_hop_cfg_sc_mtch_r14_e_"); -} - -const char* sc_mtch_info_br_r14_s::mpdcch_pdsch_cemode_cfg_sc_mtch_r14_opts::to_string() const -{ - static const char* options[] = {"ce-ModeA", "ce-ModeB"}; - return convert_enum_idx(options, 2, value, "sc_mtch_info_br_r14_s::mpdcch_pdsch_cemode_cfg_sc_mtch_r14_e_"); -} - -const char* sc_mtch_info_br_r14_s::mpdcch_pdsch_max_bw_sc_mtch_r14_opts::to_string() const -{ - static const char* options[] = {"bw1dot4", "bw5"}; - return convert_enum_idx(options, 2, value, "sc_mtch_info_br_r14_s::mpdcch_pdsch_max_bw_sc_mtch_r14_e_"); -} -float sc_mtch_info_br_r14_s::mpdcch_pdsch_max_bw_sc_mtch_r14_opts::to_number() const -{ - static const float options[] = {1.4, 5.0}; - return map_enum_number(options, 2, value, "sc_mtch_info_br_r14_s::mpdcch_pdsch_max_bw_sc_mtch_r14_e_"); -} -const char* sc_mtch_info_br_r14_s::mpdcch_pdsch_max_bw_sc_mtch_r14_opts::to_number_string() const -{ - static const char* options[] = {"1.4", "5"}; - return convert_enum_idx(options, 2, value, "sc_mtch_info_br_r14_s::mpdcch_pdsch_max_bw_sc_mtch_r14_e_"); -} - -const char* sc_mtch_info_br_r14_s::mpdcch_offset_sc_mtch_r14_opts::to_string() const -{ - static const char* options[] = { - "zero", "oneEighth", "oneQuarter", "threeEighth", "oneHalf", "fiveEighth", "threeQuarter", "sevenEighth"}; - return convert_enum_idx(options, 8, value, "sc_mtch_info_br_r14_s::mpdcch_offset_sc_mtch_r14_e_"); -} -float sc_mtch_info_br_r14_s::mpdcch_offset_sc_mtch_r14_opts::to_number() const -{ - static const float options[] = {0.0, 0.125, 0.25, 0.375, 0.5, 0.625, 0.75, 0.875}; - return map_enum_number(options, 8, value, "sc_mtch_info_br_r14_s::mpdcch_offset_sc_mtch_r14_e_"); -} -const char* sc_mtch_info_br_r14_s::mpdcch_offset_sc_mtch_r14_opts::to_number_string() const -{ - static const char* options[] = {"0", "1/8", "1/4", "3/8", "1/2", "5/8", "3/4", "7/8"}; - return convert_enum_idx(options, 8, value, "sc_mtch_info_br_r14_s::mpdcch_offset_sc_mtch_r14_e_"); -} - -const char* sc_mtch_info_br_r14_s::p_a_r14_opts::to_string() const -{ - static const char* options[] = {"dB-6", "dB-4dot77", "dB-3", "dB-1dot77", "dB0", "dB1", "dB2", "dB3"}; - return convert_enum_idx(options, 8, value, "sc_mtch_info_br_r14_s::p_a_r14_e_"); -} -float sc_mtch_info_br_r14_s::p_a_r14_opts::to_number() const -{ - static const float options[] = {-6.0, -4.77, -3.0, -1.77, 0.0, 1.0, 2.0, 3.0}; - return map_enum_number(options, 8, value, "sc_mtch_info_br_r14_s::p_a_r14_e_"); -} -const char* sc_mtch_info_br_r14_s::p_a_r14_opts::to_number_string() const -{ - static const char* options[] = {"-6", "-4.77", "-3", "-1.77", "0", "1", "2", "3"}; - return convert_enum_idx(options, 8, value, "sc_mtch_info_br_r14_s::p_a_r14_e_"); -} - // SC-MTCH-Info-r13 ::= SEQUENCE SRSASN_CODE sc_mtch_info_r13_s::pack(bit_ref& bref) const { @@ -4058,6 +4421,61 @@ const char* sc_mtch_info_r13_s::p_a_r13_opts::to_number_string() const return convert_enum_idx(options, 8, value, "sc_mtch_info_r13_s::p_a_r13_e_"); } +// SCPTMConfiguration-BR-v1610 ::= SEQUENCE +SRSASN_CODE scptm_cfg_br_v1610_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(multi_tb_gap_r16_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + HANDLE_CODE(pack_dyn_seq_of(bref, sc_mtch_info_list_multi_tb_r16, 0, 128)); + if (multi_tb_gap_r16_present) { + HANDLE_CODE(multi_tb_gap_r16.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE scptm_cfg_br_v1610_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(multi_tb_gap_r16_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + HANDLE_CODE(unpack_dyn_seq_of(sc_mtch_info_list_multi_tb_r16, bref, 0, 128)); + if (multi_tb_gap_r16_present) { + HANDLE_CODE(multi_tb_gap_r16.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void scptm_cfg_br_v1610_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.start_array("sc-MTCH-InfoList-MultiTB-r16"); + for (const auto& e1 : sc_mtch_info_list_multi_tb_r16) { + e1.to_json(j); + } + j.end_array(); + if (multi_tb_gap_r16_present) { + j.write_str("multiTB-Gap-r16", multi_tb_gap_r16.to_string()); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + j.start_obj(); + j.end_obj(); + } + j.end_obj(); +} + +const char* scptm_cfg_br_v1610_s::multi_tb_gap_r16_opts::to_string() const +{ + static const char* options[] = {"sf2", "sf4", "sf8", "sf16", "sf32", "sf64", "sf128", "spare"}; + return convert_enum_idx(options, 8, value, "scptm_cfg_br_v1610_s::multi_tb_gap_r16_e_"); +} +uint8_t scptm_cfg_br_v1610_s::multi_tb_gap_r16_opts::to_number() const +{ + static const uint8_t options[] = {2, 4, 8, 16, 32, 64, 128}; + return map_enum_number(options, 7, value, "scptm_cfg_br_v1610_s::multi_tb_gap_r16_e_"); +} + // SCPTMConfiguration-v1340 ::= SEQUENCE SRSASN_CODE scptm_cfg_v1340_s::pack(bit_ref& bref) const { @@ -4113,6 +4531,9 @@ SRSASN_CODE scptm_cfg_br_r14_s::pack(bit_ref& bref) const if (late_non_crit_ext_present) { HANDLE_CODE(late_non_crit_ext.pack(bref)); } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } return SRSASN_SUCCESS; } @@ -4133,6 +4554,9 @@ SRSASN_CODE scptm_cfg_br_r14_s::unpack(cbit_ref& bref) if (late_non_crit_ext_present) { HANDLE_CODE(late_non_crit_ext.unpack(bref)); } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } return SRSASN_SUCCESS; } @@ -4159,8 +4583,7 @@ void scptm_cfg_br_r14_s::to_json(json_writer& j) const } if (non_crit_ext_present) { j.write_fieldname("nonCriticalExtension"); - j.start_obj(); - j.end_obj(); + non_crit_ext.to_json(j); } j.end_obj(); } @@ -4568,15 +4991,15 @@ const char* init_ue_id_c::types_opts::to_string() const return convert_enum_idx(options, 2, value, "init_ue_id_c::types"); } -const char* init_ue_id_minus5_gc_c::types_opts::to_string() const +const char* init_ue_id_minus5_gc_r15_c::types_opts::to_string() const { static const char* options[] = {"ng-5G-S-TMSI-Part1", "randomValue"}; - return convert_enum_idx(options, 2, value, "init_ue_id_minus5_gc_c::types"); + return convert_enum_idx(options, 2, value, "init_ue_id_minus5_gc_r15_c::types"); } -int8_t init_ue_id_minus5_gc_c::types_opts::to_number() const +int8_t init_ue_id_minus5_gc_r15_c::types_opts::to_number() const { static const int8_t options[] = {-5}; - return map_enum_number(options, 1, value, "init_ue_id_minus5_gc_c::types"); + return map_enum_number(options, 1, value, "init_ue_id_minus5_gc_r15_c::types"); } const char* rrc_conn_resume_request_minus5_gc_r15_ies_s::resume_id_r15_c_::types_opts::to_string() const @@ -4609,6 +5032,17 @@ const char* rrc_conn_resume_request_r13_s::crit_exts_c_::types_opts::to_string() return convert_enum_idx(options, 2, value, "rrc_conn_resume_request_r13_s::crit_exts_c_::types"); } +const char* rrc_early_data_request_r15_s::crit_exts_c_::crit_exts_future_c_::types_opts::to_string() const +{ + static const char* options[] = {"rrcEarlyDataRequest-5GC-r16", "criticalExtensionsFuture-r16"}; + return convert_enum_idx(options, 2, value, "rrc_early_data_request_r15_s::crit_exts_c_::crit_exts_future_c_::types"); +} +int8_t rrc_early_data_request_r15_s::crit_exts_c_::crit_exts_future_c_::types_opts::to_number() const +{ + static const int8_t options[] = {-5}; + return map_enum_number(options, 1, value, "rrc_early_data_request_r15_s::crit_exts_c_::crit_exts_future_c_::types"); +} + const char* rrc_early_data_request_r15_s::crit_exts_c_::types_opts::to_string() const { static const char* options[] = {"rrcEarlyDataRequest-r15", "criticalExtensionsFuture"}; @@ -4806,6 +5240,18 @@ const char* rlf_report_r9_s::sel_utra_cell_id_r11_s_::pci_r11_c_::types_opts::to return convert_enum_idx(options, 2, value, "rlf_report_r9_s::sel_utra_cell_id_r11_s_::pci_r11_c_::types"); } +const char* rlf_report_r9_s::failed_nr_pcell_id_r16_c_::types_opts::to_string() const +{ + static const char* options[] = {"cellGlobalId", "pci-arfcn"}; + return convert_enum_idx(options, 2, value, "rlf_report_r9_s::failed_nr_pcell_id_r16_c_::types"); +} + +const char* rlf_report_r9_s::reconnect_cell_id_r16_c_::types_opts::to_string() const +{ + static const char* options[] = {"nrReconnectCellId", "eutraReconnectCellId"}; + return convert_enum_idx(options, 2, value, "rlf_report_r9_s::reconnect_cell_id_r16_c_::types"); +} + const char* tdm_assist_info_r11_c::types_opts::to_string() const { static const char* options[] = {"drx-AssistanceInfo-r11", "idc-SubframePatternList-r11"}; @@ -4818,6 +5264,12 @@ const char* inter_freq_rstd_meas_ind_r10_ies_s::rstd_inter_freq_ind_r10_c_::type return convert_enum_idx(options, 2, value, "inter_freq_rstd_meas_ind_r10_ies_s::rstd_inter_freq_ind_r10_c_::types"); } +const char* pur_cfg_request_r16_ies_s::pur_cfg_request_r16_c_::types_opts::to_string() const +{ + static const char* options[] = {"pur-ReleaseRequest", "pur-SetupRequest"}; + return convert_enum_idx(options, 2, value, "pur_cfg_request_r16_ies_s::pur_cfg_request_r16_c_::types"); +} + const char* proximity_ind_r9_ies_s::carrier_freq_r9_c_::types_opts::to_string() const { static const char* options[] = {"eutra-r9", "utra-r9", "eutra2-v9e0"}; @@ -4832,6 +5284,13 @@ uint8_t proximity_ind_r9_ies_s::carrier_freq_r9_c_::types_opts::to_number() cons return 0; } +const char* ul_info_transfer_r16_ies_s::ded_info_type_r16_c_::types_opts::to_string() const +{ + static const char* options[] = { + "dedicatedInfoNAS-r16", "dedicatedInfoCDMA2000-1XRTT-r16", "dedicatedInfoCDMA2000-HRPD-r16"}; + return convert_enum_idx(options, 3, value, "ul_info_transfer_r16_ies_s::ded_info_type_r16_c_::types"); +} + const char* ul_info_transfer_r8_ies_s::ded_info_type_c_::types_opts::to_string() const { static const char* options[] = {"dedicatedInfoNAS", "dedicatedInfoCDMA2000-1XRTT", "dedicatedInfoCDMA2000-HRPD"}; @@ -4855,6 +5314,12 @@ const char* counter_check_resp_s::crit_exts_c_::types_opts::to_string() const return convert_enum_idx(options, 2, value, "counter_check_resp_s::crit_exts_c_::types"); } +const char* fail_info_r16_s::crit_exts_c_::types_opts::to_string() const +{ + static const char* options[] = {"failureInformation-r16", "criticalExtensionsFuture"}; + return convert_enum_idx(options, 2, value, "fail_info_r16_s::crit_exts_c_::types"); +} + const char* in_dev_coex_ind_r11_s::crit_exts_c_::c1_c_::types_opts::to_string() const { static const char* options[] = {"inDeviceCoexIndication-r11", "spare3", "spare2", "spare1"}; @@ -4879,6 +5344,12 @@ const char* mbms_interest_ind_r11_s::crit_exts_c_::c1_c_::types_opts::to_string( return convert_enum_idx(options, 4, value, "mbms_interest_ind_r11_s::crit_exts_c_::c1_c_::types"); } +const char* mcg_fail_info_r16_s::crit_exts_c_::types_opts::to_string() const +{ + static const char* options[] = {"mcgFailureInformation", "criticalExtensionsFuture"}; + return convert_enum_idx(options, 2, value, "mcg_fail_info_r16_s::crit_exts_c_::types"); +} + const char* meas_report_app_layer_r15_s::crit_exts_c_::types_opts::to_string() const { static const char* options[] = {"measReportAppLayer-r15", "criticalExtensionsFuture"}; @@ -4892,6 +5363,12 @@ const char* meas_report_s::crit_exts_c_::c1_c_::types_opts::to_string() const return convert_enum_idx(options, 8, value, "meas_report_s::crit_exts_c_::c1_c_::types"); } +const char* pur_cfg_request_r16_s::crit_exts_c_::types_opts::to_string() const +{ + static const char* options[] = {"purConfigurationRequest", "criticalExtensionsFuture"}; + return convert_enum_idx(options, 2, value, "pur_cfg_request_r16_s::crit_exts_c_::types"); +} + const char* proximity_ind_r9_s::crit_exts_c_::c1_c_::types_opts::to_string() const { static const char* options[] = {"proximityIndication-r9", "spare3", "spare2", "spare1"}; @@ -4977,6 +5454,12 @@ const char* ue_info_resp_r9_s::crit_exts_c_::c1_c_::types_opts::to_string() cons return convert_enum_idx(options, 4, value, "ue_info_resp_r9_s::crit_exts_c_::c1_c_::types"); } +const char* ul_ded_msg_segment_r16_s::crit_exts_c_::types_opts::to_string() const +{ + static const char* options[] = {"ulDedicatedMessageSegment-r16", "criticalExtensionsFuture"}; + return convert_enum_idx(options, 2, value, "ul_ded_msg_segment_r16_s::crit_exts_c_::types"); +} + const char* ul_ho_prep_transfer_s::crit_exts_c_::c1_c_::types_opts::to_string() const { static const char* options[] = {"ulHandoverPreparationTransfer-r8", "spare3", "spare2", "spare1"}; @@ -4985,10 +5468,16 @@ const char* ul_ho_prep_transfer_s::crit_exts_c_::c1_c_::types_opts::to_string() const char* ul_info_transfer_s::crit_exts_c_::c1_c_::types_opts::to_string() const { - static const char* options[] = {"ulInformationTransfer-r8", "spare3", "spare2", "spare1"}; + static const char* options[] = {"ulInformationTransfer-r8", "ulInformationTransfer-r16", "spare2", "spare1"}; return convert_enum_idx(options, 4, value, "ul_info_transfer_s::crit_exts_c_::c1_c_::types"); } +const char* ul_info_transfer_irat_r16_s::crit_exts_c_::c1_c_::types_opts::to_string() const +{ + static const char* options[] = {"ulInformationTransferIRAT-r16", "spare3", "spare2", "spare1"}; + return convert_enum_idx(options, 4, value, "ul_info_transfer_irat_r16_s::crit_exts_c_::c1_c_::types"); +} + const char* ul_info_transfer_mrdc_r15_s::crit_exts_c_::c1_c_::types_opts::to_string() const { static const char* options[] = {"ulInformationTransferMRDC-r15", "spare3", "spare2", "spare1"}; @@ -5040,11 +5529,11 @@ const char* ul_dcch_msg_type_c::msg_class_ext_c_::c2_c_::types_opts::to_string() "scgFailureInformationNR-r15", "measReportAppLayer-r15", "failureInformation-r15", - "spare5", - "spare4", - "spare3", - "spare2", - "spare1"}; + "ulDedicatedMessageSegment-r16", + "purConfigurationRequest-r16", + "failureInformation-r16", + "mcgFailureInformation-r16", + "ulInformationTransferIRAT-r16"}; return convert_enum_idx(options, 16, value, "ul_dcch_msg_type_c::msg_class_ext_c_::c2_c_::types"); } @@ -5259,63 +5748,36 @@ void mimo_ue_params_v13e0_s::to_json(json_writer& j) const j.end_obj(); } -// MeasResult3EUTRA-r15 ::= SEQUENCE -SRSASN_CODE meas_result3_eutra_r15_s::pack(bit_ref& bref) const +// MeasResultSCG-FailureMRDC-r15 ::= SEQUENCE +SRSASN_CODE meas_result_scg_fail_mrdc_r15_s::pack(bit_ref& bref) const { bref.pack(ext, 1); - HANDLE_CODE(bref.pack(meas_result_serving_cell_r15_present, 1)); - HANDLE_CODE(bref.pack(meas_result_neigh_cell_list_r15_present, 1)); - - HANDLE_CODE(pack_integer(bref, carrier_freq_r15, (uint32_t)0u, (uint32_t)262143u)); - if (meas_result_serving_cell_r15_present) { - HANDLE_CODE(meas_result_serving_cell_r15.pack(bref)); - } - if (meas_result_neigh_cell_list_r15_present) { - HANDLE_CODE(pack_dyn_seq_of(bref, meas_result_neigh_cell_list_r15, 1, 8)); - } + HANDLE_CODE(pack_dyn_seq_of(bref, meas_result_freq_list_eutra_r15, 1, 8)); - return SRSASN_SUCCESS; -} -SRSASN_CODE meas_result3_eutra_r15_s::unpack(cbit_ref& bref) -{ - bref.unpack(ext, 1); - HANDLE_CODE(bref.unpack(meas_result_serving_cell_r15_present, 1)); - HANDLE_CODE(bref.unpack(meas_result_neigh_cell_list_r15_present, 1)); + if (ext) { + ext_groups_packer_guard group_flags; + group_flags[0] |= location_info_r16.is_present(); + group_flags[0] |= log_meas_result_list_bt_r16.is_present(); + group_flags[0] |= log_meas_result_list_wlan_r16.is_present(); + group_flags.pack(bref); - HANDLE_CODE(unpack_integer(carrier_freq_r15, bref, (uint32_t)0u, (uint32_t)262143u)); - if (meas_result_serving_cell_r15_present) { - HANDLE_CODE(meas_result_serving_cell_r15.unpack(bref)); - } - if (meas_result_neigh_cell_list_r15_present) { - HANDLE_CODE(unpack_dyn_seq_of(meas_result_neigh_cell_list_r15, bref, 1, 8)); - } + if (group_flags[0]) { + varlength_field_pack_guard varlen_scope(bref, false); - return SRSASN_SUCCESS; -} -void meas_result3_eutra_r15_s::to_json(json_writer& j) const -{ - j.start_obj(); - j.write_int("carrierFreq-r15", carrier_freq_r15); - if (meas_result_serving_cell_r15_present) { - j.write_fieldname("measResultServingCell-r15"); - meas_result_serving_cell_r15.to_json(j); - } - if (meas_result_neigh_cell_list_r15_present) { - j.start_array("measResultNeighCellList-r15"); - for (const auto& e1 : meas_result_neigh_cell_list_r15) { - e1.to_json(j); + HANDLE_CODE(bref.pack(location_info_r16.is_present(), 1)); + HANDLE_CODE(bref.pack(log_meas_result_list_bt_r16.is_present(), 1)); + HANDLE_CODE(bref.pack(log_meas_result_list_wlan_r16.is_present(), 1)); + if (location_info_r16.is_present()) { + HANDLE_CODE(location_info_r16->pack(bref)); + } + if (log_meas_result_list_bt_r16.is_present()) { + HANDLE_CODE(pack_dyn_seq_of(bref, *log_meas_result_list_bt_r16, 1, 32)); + } + if (log_meas_result_list_wlan_r16.is_present()) { + HANDLE_CODE(pack_dyn_seq_of(bref, *log_meas_result_list_wlan_r16, 1, 32)); + } } - j.end_array(); } - j.end_obj(); -} - -// MeasResultSCG-FailureMRDC-r15 ::= SEQUENCE -SRSASN_CODE meas_result_scg_fail_mrdc_r15_s::pack(bit_ref& bref) const -{ - bref.pack(ext, 1); - HANDLE_CODE(pack_dyn_seq_of(bref, meas_result_freq_list_eutra_r15, 1, 8)); - return SRSASN_SUCCESS; } SRSASN_CODE meas_result_scg_fail_mrdc_r15_s::unpack(cbit_ref& bref) @@ -5323,6 +5785,33 @@ SRSASN_CODE meas_result_scg_fail_mrdc_r15_s::unpack(cbit_ref& bref) bref.unpack(ext, 1); HANDLE_CODE(unpack_dyn_seq_of(meas_result_freq_list_eutra_r15, bref, 1, 8)); + if (ext) { + ext_groups_unpacker_guard group_flags(1); + group_flags.unpack(bref); + + if (group_flags[0]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + bool location_info_r16_present; + HANDLE_CODE(bref.unpack(location_info_r16_present, 1)); + location_info_r16.set_present(location_info_r16_present); + bool log_meas_result_list_bt_r16_present; + HANDLE_CODE(bref.unpack(log_meas_result_list_bt_r16_present, 1)); + log_meas_result_list_bt_r16.set_present(log_meas_result_list_bt_r16_present); + bool log_meas_result_list_wlan_r16_present; + HANDLE_CODE(bref.unpack(log_meas_result_list_wlan_r16_present, 1)); + log_meas_result_list_wlan_r16.set_present(log_meas_result_list_wlan_r16_present); + if (location_info_r16.is_present()) { + HANDLE_CODE(location_info_r16->unpack(bref)); + } + if (log_meas_result_list_bt_r16.is_present()) { + HANDLE_CODE(unpack_dyn_seq_of(*log_meas_result_list_bt_r16, bref, 1, 32)); + } + if (log_meas_result_list_wlan_r16.is_present()) { + HANDLE_CODE(unpack_dyn_seq_of(*log_meas_result_list_wlan_r16, bref, 1, 32)); + } + } + } return SRSASN_SUCCESS; } void meas_result_scg_fail_mrdc_r15_s::to_json(json_writer& j) const @@ -5333,6 +5822,26 @@ void meas_result_scg_fail_mrdc_r15_s::to_json(json_writer& j) const e1.to_json(j); } j.end_array(); + if (ext) { + if (location_info_r16.is_present()) { + j.write_fieldname("locationInfo-r16"); + location_info_r16->to_json(j); + } + if (log_meas_result_list_bt_r16.is_present()) { + j.start_array("logMeasResultListBT-r16"); + for (const auto& e1 : *log_meas_result_list_bt_r16) { + e1.to_json(j); + } + j.end_array(); + } + if (log_meas_result_list_wlan_r16.is_present()) { + j.start_array("logMeasResultListWLAN-r16"); + for (const auto& e1 : *log_meas_result_list_wlan_r16) { + e1.to_json(j); + } + j.end_array(); + } + } j.end_obj(); } @@ -5395,6 +5904,18 @@ void scg_fail_info_v12d0b_ies_s::to_json(json_writer& j) const j.end_obj(); } +const char* v2x_band_params_eutra_nr_r16_c::types_opts::to_string() const +{ + static const char* options[] = {"eutra", "nr"}; + return convert_enum_idx(options, 2, value, "v2x_band_params_eutra_nr_r16_c::types"); +} + +const char* v2x_band_params_eutra_nr_v1630_c::types_opts::to_string() const +{ + static const char* options[] = {"eutra", "nr"}; + return convert_enum_idx(options, 2, value, "v2x_band_params_eutra_nr_v1630_c::types"); +} + const char* mbms_params_v1470_s::mbms_max_bw_r14_c_::types_opts::to_string() const { static const char* options[] = {"implicitValue", "explicitValue"}; @@ -6114,6 +6635,81 @@ void meas_result_serv_cell_scg_r12_s::to_json(json_writer& j) const j.end_obj(); } +// RLF-Report-NB-r16 ::= SEQUENCE +SRSASN_CODE rlf_report_nb_r16_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(reest_cell_id_r16_present, 1)); + HANDLE_CODE(bref.pack(location_info_r16_present, 1)); + HANDLE_CODE(bref.pack(time_since_fail_r16_present, 1)); + + HANDLE_CODE(failed_pcell_id_r16.pack(bref)); + if (reest_cell_id_r16_present) { + HANDLE_CODE(reest_cell_id_r16.pack(bref)); + } + if (location_info_r16_present) { + HANDLE_CODE(location_info_r16.pack(bref)); + } + HANDLE_CODE(bref.pack(meas_result_last_serv_cell_r16.nrsrq_result_r16_present, 1)); + HANDLE_CODE(pack_integer(bref, meas_result_last_serv_cell_r16.nrsrp_result_r16, (uint8_t)0u, (uint8_t)113u)); + if (meas_result_last_serv_cell_r16.nrsrq_result_r16_present) { + HANDLE_CODE(pack_integer(bref, meas_result_last_serv_cell_r16.nrsrq_result_r16, (int8_t)-30, (int8_t)46)); + } + if (time_since_fail_r16_present) { + HANDLE_CODE(pack_integer(bref, time_since_fail_r16, (uint32_t)0u, (uint32_t)172800u)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE rlf_report_nb_r16_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(reest_cell_id_r16_present, 1)); + HANDLE_CODE(bref.unpack(location_info_r16_present, 1)); + HANDLE_CODE(bref.unpack(time_since_fail_r16_present, 1)); + + HANDLE_CODE(failed_pcell_id_r16.unpack(bref)); + if (reest_cell_id_r16_present) { + HANDLE_CODE(reest_cell_id_r16.unpack(bref)); + } + if (location_info_r16_present) { + HANDLE_CODE(location_info_r16.unpack(bref)); + } + HANDLE_CODE(bref.unpack(meas_result_last_serv_cell_r16.nrsrq_result_r16_present, 1)); + HANDLE_CODE(unpack_integer(meas_result_last_serv_cell_r16.nrsrp_result_r16, bref, (uint8_t)0u, (uint8_t)113u)); + if (meas_result_last_serv_cell_r16.nrsrq_result_r16_present) { + HANDLE_CODE(unpack_integer(meas_result_last_serv_cell_r16.nrsrq_result_r16, bref, (int8_t)-30, (int8_t)46)); + } + if (time_since_fail_r16_present) { + HANDLE_CODE(unpack_integer(time_since_fail_r16, bref, (uint32_t)0u, (uint32_t)172800u)); + } + + return SRSASN_SUCCESS; +} +void rlf_report_nb_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_fieldname("failedPCellId-r16"); + failed_pcell_id_r16.to_json(j); + if (reest_cell_id_r16_present) { + j.write_fieldname("reestablishmentCellId-r16"); + reest_cell_id_r16.to_json(j); + } + if (location_info_r16_present) { + j.write_fieldname("locationInfo-r16"); + location_info_r16.to_json(j); + } + j.write_fieldname("measResultLastServCell-r16"); + j.start_obj(); + j.write_int("nrsrpResult-r16", meas_result_last_serv_cell_r16.nrsrp_result_r16); + if (meas_result_last_serv_cell_r16.nrsrq_result_r16_present) { + j.write_int("nrsrqResult-r16", meas_result_last_serv_cell_r16.nrsrq_result_r16); + } + j.end_obj(); + if (time_since_fail_r16_present) { + j.write_int("timeSinceFailure-r16", time_since_fail_r16); + } + j.end_obj(); +} + // SBCCH-SL-BCH-Message ::= SEQUENCE SRSASN_CODE sbcch_sl_bch_msg_s::pack(bit_ref& bref) const { @@ -8082,6 +8678,7 @@ SRSASN_CODE sl_v2x_precfg_r14_s::pack(bit_ref& bref) const group_flags[0] |= sync_freq_list_r15.is_present(); group_flags[0] |= slss_tx_multi_freq_r15_present; group_flags[0] |= v2x_tx_profile_list_r15.is_present(); + group_flags[1] |= anchor_carrier_freq_list_nr_r16.is_present(); group_flags.pack(bref); if (group_flags[0]) { @@ -8101,6 +8698,15 @@ SRSASN_CODE sl_v2x_precfg_r14_s::pack(bit_ref& bref) const HANDLE_CODE(pack_dyn_seq_of(bref, *v2x_tx_profile_list_r15, 1, 256)); } } + if (group_flags[1]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(anchor_carrier_freq_list_nr_r16.is_present(), 1)); + if (anchor_carrier_freq_list_nr_r16.is_present()) { + HANDLE_CODE( + pack_dyn_seq_of(bref, *anchor_carrier_freq_list_nr_r16, 1, 8, integer_packer<uint32_t>(0, 3279165))); + } + } } return SRSASN_SUCCESS; } @@ -8119,7 +8725,7 @@ SRSASN_CODE sl_v2x_precfg_r14_s::unpack(cbit_ref& bref) } if (ext) { - ext_groups_unpacker_guard group_flags(1); + ext_groups_unpacker_guard group_flags(2); group_flags.unpack(bref); if (group_flags[0]) { @@ -8145,6 +8751,17 @@ SRSASN_CODE sl_v2x_precfg_r14_s::unpack(cbit_ref& bref) HANDLE_CODE(unpack_dyn_seq_of(*v2x_tx_profile_list_r15, bref, 1, 256)); } } + if (group_flags[1]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + bool anchor_carrier_freq_list_nr_r16_present; + HANDLE_CODE(bref.unpack(anchor_carrier_freq_list_nr_r16_present, 1)); + anchor_carrier_freq_list_nr_r16.set_present(anchor_carrier_freq_list_nr_r16_present); + if (anchor_carrier_freq_list_nr_r16.is_present()) { + HANDLE_CODE( + unpack_dyn_seq_of(*anchor_carrier_freq_list_nr_r16, bref, 1, 8, integer_packer<uint32_t>(0, 3279165))); + } + } } return SRSASN_SUCCESS; } @@ -8189,6 +8806,13 @@ void sl_v2x_precfg_r14_s::to_json(json_writer& j) const } j.end_array(); } + if (anchor_carrier_freq_list_nr_r16.is_present()) { + j.start_array("anchorCarrierFreqListNR-r16"); + for (const auto& e1 : *anchor_carrier_freq_list_nr_r16) { + j.write_int(e1); + } + j.end_array(); + } } j.end_obj(); } @@ -8214,6 +8838,40 @@ const char* ue_radio_paging_info_s::crit_exts_c_::c1_c_::types_opts::to_string() return convert_enum_idx(options, 8, value, "ue_radio_paging_info_s::crit_exts_c_::c1_c_::types"); } +// VarConditionalReconfiguration ::= SEQUENCE +SRSASN_CODE var_conditional_recfg_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(cond_recfg_list_r16_present, 1)); + + if (cond_recfg_list_r16_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, cond_recfg_list_r16, 1, 8)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE var_conditional_recfg_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(cond_recfg_list_r16_present, 1)); + + if (cond_recfg_list_r16_present) { + HANDLE_CODE(unpack_dyn_seq_of(cond_recfg_list_r16, bref, 1, 8)); + } + + return SRSASN_SUCCESS; +} +void var_conditional_recfg_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (cond_recfg_list_r16_present) { + j.start_array("condReconfigurationList-r16"); + for (const auto& e1 : cond_recfg_list_r16) { + e1.to_json(j); + } + j.end_array(); + } + j.end_obj(); +} + // VarConnEstFailReport-r11 ::= SEQUENCE SRSASN_CODE var_conn_est_fail_report_r11_s::pack(bit_ref& bref) const { @@ -8483,6 +9141,117 @@ void var_log_meas_cfg_r15_s::to_json(json_writer& j) const j.end_obj(); } +// VarLogMeasConfig-r17 ::= SEQUENCE +SRSASN_CODE var_log_meas_cfg_r17_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(area_cfg_r10_present, 1)); + HANDLE_CODE(bref.pack(area_cfg_v1130_present, 1)); + HANDLE_CODE(bref.pack(target_mbsfn_area_list_r12_present, 1)); + HANDLE_CODE(bref.pack(bt_name_list_r15_present, 1)); + HANDLE_CODE(bref.pack(wlan_name_list_r15_present, 1)); + HANDLE_CODE(bref.pack(logged_event_trigger_cfg_r17_present, 1)); + HANDLE_CODE(bref.pack(meas_uncom_bar_pre_r17_present, 1)); + + if (area_cfg_r10_present) { + HANDLE_CODE(area_cfg_r10.pack(bref)); + } + if (area_cfg_v1130_present) { + HANDLE_CODE(area_cfg_v1130.pack(bref)); + } + HANDLE_CODE(logging_dur_r10.pack(bref)); + HANDLE_CODE(logging_interv_r10.pack(bref)); + if (target_mbsfn_area_list_r12_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, target_mbsfn_area_list_r12, 0, 8)); + } + if (bt_name_list_r15_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, bt_name_list_r15, 1, 4)); + } + if (wlan_name_list_r15_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, wlan_name_list_r15, 1, 4)); + } + if (logged_event_trigger_cfg_r17_present) { + HANDLE_CODE(logged_event_trigger_cfg_r17.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE var_log_meas_cfg_r17_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(area_cfg_r10_present, 1)); + HANDLE_CODE(bref.unpack(area_cfg_v1130_present, 1)); + HANDLE_CODE(bref.unpack(target_mbsfn_area_list_r12_present, 1)); + HANDLE_CODE(bref.unpack(bt_name_list_r15_present, 1)); + HANDLE_CODE(bref.unpack(wlan_name_list_r15_present, 1)); + HANDLE_CODE(bref.unpack(logged_event_trigger_cfg_r17_present, 1)); + HANDLE_CODE(bref.unpack(meas_uncom_bar_pre_r17_present, 1)); + + if (area_cfg_r10_present) { + HANDLE_CODE(area_cfg_r10.unpack(bref)); + } + if (area_cfg_v1130_present) { + HANDLE_CODE(area_cfg_v1130.unpack(bref)); + } + HANDLE_CODE(logging_dur_r10.unpack(bref)); + HANDLE_CODE(logging_interv_r10.unpack(bref)); + if (target_mbsfn_area_list_r12_present) { + HANDLE_CODE(unpack_dyn_seq_of(target_mbsfn_area_list_r12, bref, 0, 8)); + } + if (bt_name_list_r15_present) { + HANDLE_CODE(unpack_dyn_seq_of(bt_name_list_r15, bref, 1, 4)); + } + if (wlan_name_list_r15_present) { + HANDLE_CODE(unpack_dyn_seq_of(wlan_name_list_r15, bref, 1, 4)); + } + if (logged_event_trigger_cfg_r17_present) { + HANDLE_CODE(logged_event_trigger_cfg_r17.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void var_log_meas_cfg_r17_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (area_cfg_r10_present) { + j.write_fieldname("areaConfiguration-r10"); + area_cfg_r10.to_json(j); + } + if (area_cfg_v1130_present) { + j.write_fieldname("areaConfiguration-v1130"); + area_cfg_v1130.to_json(j); + } + j.write_str("loggingDuration-r10", logging_dur_r10.to_string()); + j.write_str("loggingInterval-r10", logging_interv_r10.to_string()); + if (target_mbsfn_area_list_r12_present) { + j.start_array("targetMBSFN-AreaList-r12"); + for (const auto& e1 : target_mbsfn_area_list_r12) { + e1.to_json(j); + } + j.end_array(); + } + if (bt_name_list_r15_present) { + j.start_array("bt-NameList-r15"); + for (const auto& e1 : bt_name_list_r15) { + j.write_str(e1.to_string()); + } + j.end_array(); + } + if (wlan_name_list_r15_present) { + j.start_array("wlan-NameList-r15"); + for (const auto& e1 : wlan_name_list_r15) { + j.write_str(e1.to_string()); + } + j.end_array(); + } + if (logged_event_trigger_cfg_r17_present) { + j.write_fieldname("loggedEventTriggerConfig-r17"); + logged_event_trigger_cfg_r17.to_json(j); + } + if (meas_uncom_bar_pre_r17_present) { + j.write_str("measUncomBarPre-r17", "true"); + } + j.end_obj(); +} + // VarLogMeasReport-r10 ::= SEQUENCE SRSASN_CODE var_log_meas_report_r10_s::pack(bit_ref& bref) const { @@ -8616,6 +9385,55 @@ uint16_t var_meas_idle_cfg_r15_s::meas_idle_dur_r15_opts::to_number() const return map_enum_number(options, 7, value, "var_meas_idle_cfg_r15_s::meas_idle_dur_r15_e_"); } +// VarMeasIdleConfig-r16 ::= SEQUENCE +SRSASN_CODE var_meas_idle_cfg_r16_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(meas_idle_carrier_list_nr_r16_present, 1)); + HANDLE_CODE(bref.pack(validity_area_list_r16_present, 1)); + + if (meas_idle_carrier_list_nr_r16_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, meas_idle_carrier_list_nr_r16, 1, 8)); + } + if (validity_area_list_r16_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, validity_area_list_r16, 1, 8)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE var_meas_idle_cfg_r16_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(meas_idle_carrier_list_nr_r16_present, 1)); + HANDLE_CODE(bref.unpack(validity_area_list_r16_present, 1)); + + if (meas_idle_carrier_list_nr_r16_present) { + HANDLE_CODE(unpack_dyn_seq_of(meas_idle_carrier_list_nr_r16, bref, 1, 8)); + } + if (validity_area_list_r16_present) { + HANDLE_CODE(unpack_dyn_seq_of(validity_area_list_r16, bref, 1, 8)); + } + + return SRSASN_SUCCESS; +} +void var_meas_idle_cfg_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (meas_idle_carrier_list_nr_r16_present) { + j.start_array("measIdleCarrierListNR-r16"); + for (const auto& e1 : meas_idle_carrier_list_nr_r16) { + e1.to_json(j); + } + j.end_array(); + } + if (validity_area_list_r16_present) { + j.start_array("validityAreaList-r16"); + for (const auto& e1 : validity_area_list_r16) { + e1.to_json(j); + } + j.end_array(); + } + j.end_obj(); +} + // VarMeasIdleReport-r15 ::= SEQUENCE SRSASN_CODE var_meas_idle_report_r15_s::pack(bit_ref& bref) const { @@ -8640,6 +9458,59 @@ void var_meas_idle_report_r15_s::to_json(json_writer& j) const j.end_obj(); } +// VarMeasIdleReport-r16 ::= SEQUENCE +SRSASN_CODE var_meas_idle_report_r16_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(meas_report_idle_r16_present, 1)); + HANDLE_CODE(bref.pack(meas_report_idle_nr_r16_present, 1)); + + if (meas_report_idle_r16_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, meas_report_idle_r16, 1, 5, SeqOfPacker<Packer>(1, 8, Packer()))); + } + if (meas_report_idle_nr_r16_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, meas_report_idle_nr_r16, 1, 8)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE var_meas_idle_report_r16_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(meas_report_idle_r16_present, 1)); + HANDLE_CODE(bref.unpack(meas_report_idle_nr_r16_present, 1)); + + if (meas_report_idle_r16_present) { + HANDLE_CODE(unpack_dyn_seq_of(meas_report_idle_r16, bref, 1, 5, SeqOfPacker<Packer>(1, 8, Packer()))); + } + if (meas_report_idle_nr_r16_present) { + HANDLE_CODE(unpack_dyn_seq_of(meas_report_idle_nr_r16, bref, 1, 8)); + } + + return SRSASN_SUCCESS; +} +void var_meas_idle_report_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (meas_report_idle_r16_present) { + j.start_array("measReportIdle-r16"); + for (const auto& e1 : meas_report_idle_r16) { + j.start_array(); + for (const auto& e2 : e1) { + e2.to_json(j); + } + j.end_array(); + } + j.end_array(); + } + if (meas_report_idle_nr_r16_present) { + j.start_array("measReportIdleNR-r16"); + for (const auto& e1 : meas_report_idle_nr_r16) { + e1.to_json(j); + } + j.end_array(); + } + j.end_obj(); +} + // VarMeasReport ::= SEQUENCE SRSASN_CODE var_meas_report_s::pack(bit_ref& bref) const { @@ -8721,6 +9592,34 @@ void var_meas_report_s::to_json(json_writer& j) const j.end_obj(); } +// VarRLF-Report-NB-r16 ::= SEQUENCE +SRSASN_CODE var_rlf_report_nb_r16_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(rlf_report_r16.pack(bref)); + HANDLE_CODE(pack_dyn_seq_of(bref, plmn_id_list_r16, 1, 16)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE var_rlf_report_nb_r16_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(rlf_report_r16.unpack(bref)); + HANDLE_CODE(unpack_dyn_seq_of(plmn_id_list_r16, bref, 1, 16)); + + return SRSASN_SUCCESS; +} +void var_rlf_report_nb_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_fieldname("rlf-Report-r16"); + rlf_report_r16.to_json(j); + j.start_array("plmn-IdentityList-r16"); + for (const auto& e1 : plmn_id_list_r16) { + e1.to_json(j); + } + j.end_array(); + j.end_obj(); +} + // VarRLF-Report-r10 ::= SEQUENCE SRSASN_CODE var_rlf_report_r10_s::pack(bit_ref& bref) const { diff --git a/lib/src/asn1/rrc/bcch_msg.cc b/lib/src/asn1/rrc/bcch_msg.cc index 02211a57d..08f81e4a6 100644 --- a/lib/src/asn1/rrc/bcch_msg.cc +++ b/lib/src/asn1/rrc/bcch_msg.cc @@ -261,6 +261,65 @@ void neigh_cells_per_bandclass_cdma2000_v920_s::to_json(json_writer& j) const j.end_obj(); } +// PhysCellIdRangeNR-r16 ::= SEQUENCE +SRSASN_CODE pci_range_nr_r16_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(range_present, 1)); + + HANDLE_CODE(pack_integer(bref, start, (uint16_t)0u, (uint16_t)1007u)); + if (range_present) { + HANDLE_CODE(range.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE pci_range_nr_r16_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(range_present, 1)); + + HANDLE_CODE(unpack_integer(start, bref, (uint16_t)0u, (uint16_t)1007u)); + if (range_present) { + HANDLE_CODE(range.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void pci_range_nr_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_int("start", start); + if (range_present) { + j.write_str("range", range.to_string()); + } + j.end_obj(); +} + +const char* pci_range_nr_r16_s::range_opts::to_string() const +{ + static const char* options[] = {"n4", + "n8", + "n12", + "n16", + "n24", + "n32", + "n48", + "n64", + "n84", + "n96", + "n128", + "n168", + "n252", + "n504", + "n1008", + "spare1"}; + return convert_enum_idx(options, 16, value, "pci_range_nr_r16_s::range_e_"); +} +uint16_t pci_range_nr_r16_s::range_opts::to_number() const +{ + static const uint16_t options[] = {4, 8, 12, 16, 24, 32, 48, 64, 84, 96, 128, 168, 252, 504, 1008}; + return map_enum_number(options, 15, value, "pci_range_nr_r16_s::range_e_"); +} + // RedistributionNeighCell-r13 ::= SEQUENCE SRSASN_CODE redist_neigh_cell_r13_s::pack(bit_ref& bref) const { @@ -331,6 +390,38 @@ void ac_barr_cfg1_xrtt_r9_s::to_json(json_writer& j) const j.end_obj(); } +// BeamMeasConfigIdleNR-r16 ::= SEQUENCE +SRSASN_CODE beam_meas_cfg_idle_nr_r16_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(report_quant_rs_idx_nr_r16.pack(bref)); + HANDLE_CODE(pack_integer(bref, max_report_rs_idx_r16, (uint8_t)0u, (uint8_t)32u)); + HANDLE_CODE(bref.pack(report_rs_idx_results_nr_r16, 1)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE beam_meas_cfg_idle_nr_r16_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(report_quant_rs_idx_nr_r16.unpack(bref)); + HANDLE_CODE(unpack_integer(max_report_rs_idx_r16, bref, (uint8_t)0u, (uint8_t)32u)); + HANDLE_CODE(bref.unpack(report_rs_idx_results_nr_r16, 1)); + + return SRSASN_SUCCESS; +} +void beam_meas_cfg_idle_nr_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_str("reportQuantityRS-IndexNR-r16", report_quant_rs_idx_nr_r16.to_string()); + j.write_int("maxReportRS-Index-r16", max_report_rs_idx_r16); + j.write_bool("reportRS-IndexResultsNR-r16", report_rs_idx_results_nr_r16); + j.end_obj(); +} + +const char* beam_meas_cfg_idle_nr_r16_s::report_quant_rs_idx_nr_r16_opts::to_string() const +{ + static const char* options[] = {"rsrp", "rsrq", "both"}; + return convert_enum_idx(options, 3, value, "beam_meas_cfg_idle_nr_r16_s::report_quant_rs_idx_nr_r16_e_"); +} + // CSFB-RegistrationParam1XRTT ::= SEQUENCE SRSASN_CODE csfb_regist_param1_xrtt_s::pack(bit_ref& bref) const { @@ -474,6 +565,26 @@ void inter_freq_neigh_cell_info_s::to_json(json_writer& j) const j.end_obj(); } +// InterFreqNeighCellInfo-v1610 ::= SEQUENCE +SRSASN_CODE inter_freq_neigh_cell_info_v1610_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(rss_meas_pwr_bias_r16.pack(bref)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE inter_freq_neigh_cell_info_v1610_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(rss_meas_pwr_bias_r16.unpack(bref)); + + return SRSASN_SUCCESS; +} +void inter_freq_neigh_cell_info_v1610_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_str("rss-MeasPowerBias-r16", rss_meas_pwr_bias_r16.to_string()); + j.end_obj(); +} + // PLMN-IdentityInfo2-r12 ::= CHOICE void plmn_id_info2_r12_c::destroy_() { @@ -774,6 +885,442 @@ void uac_barr_per_cat_r15_s::to_json(json_writer& j) const j.end_obj(); } +// MBSFN-AreaInfo-r16 ::= SEQUENCE +SRSASN_CODE mbsfn_area_info_r16_s::pack(bit_ref& bref) const +{ + bref.pack(ext, 1); + HANDLE_CODE(bref.pack(time_separation_r16_present, 1)); + + HANDLE_CODE(pack_integer(bref, mbsfn_area_id_r16, (uint16_t)0u, (uint16_t)255u)); + HANDLE_CODE(pack_integer(bref, notif_ind_r16, (uint8_t)0u, (uint8_t)7u)); + HANDLE_CODE(mcch_cfg_r16.mcch_repeat_period_r16.pack(bref)); + HANDLE_CODE(mcch_cfg_r16.mcch_mod_period_r16.pack(bref)); + HANDLE_CODE(pack_integer(bref, mcch_cfg_r16.mcch_offset_r16, (uint8_t)0u, (uint8_t)10u)); + HANDLE_CODE(mcch_cfg_r16.sf_alloc_info_r16.pack(bref)); + HANDLE_CODE(mcch_cfg_r16.sig_mcs_r16.pack(bref)); + HANDLE_CODE(subcarrier_spacing_mbms_r16.pack(bref)); + if (time_separation_r16_present) { + HANDLE_CODE(time_separation_r16.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE mbsfn_area_info_r16_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(bref.unpack(time_separation_r16_present, 1)); + + HANDLE_CODE(unpack_integer(mbsfn_area_id_r16, bref, (uint16_t)0u, (uint16_t)255u)); + HANDLE_CODE(unpack_integer(notif_ind_r16, bref, (uint8_t)0u, (uint8_t)7u)); + HANDLE_CODE(mcch_cfg_r16.mcch_repeat_period_r16.unpack(bref)); + HANDLE_CODE(mcch_cfg_r16.mcch_mod_period_r16.unpack(bref)); + HANDLE_CODE(unpack_integer(mcch_cfg_r16.mcch_offset_r16, bref, (uint8_t)0u, (uint8_t)10u)); + HANDLE_CODE(mcch_cfg_r16.sf_alloc_info_r16.unpack(bref)); + HANDLE_CODE(mcch_cfg_r16.sig_mcs_r16.unpack(bref)); + HANDLE_CODE(subcarrier_spacing_mbms_r16.unpack(bref)); + if (time_separation_r16_present) { + HANDLE_CODE(time_separation_r16.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void mbsfn_area_info_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_int("mbsfn-AreaId-r16", mbsfn_area_id_r16); + j.write_int("notificationIndicator-r16", notif_ind_r16); + j.write_fieldname("mcch-Config-r16"); + j.start_obj(); + j.write_str("mcch-RepetitionPeriod-r16", mcch_cfg_r16.mcch_repeat_period_r16.to_string()); + j.write_str("mcch-ModificationPeriod-r16", mcch_cfg_r16.mcch_mod_period_r16.to_string()); + j.write_int("mcch-Offset-r16", mcch_cfg_r16.mcch_offset_r16); + j.write_str("sf-AllocInfo-r16", mcch_cfg_r16.sf_alloc_info_r16.to_string()); + j.write_str("signallingMCS-r16", mcch_cfg_r16.sig_mcs_r16.to_string()); + j.end_obj(); + j.write_str("subcarrierSpacingMBMS-r16", subcarrier_spacing_mbms_r16.to_string()); + if (time_separation_r16_present) { + j.write_str("timeSeparation-r16", time_separation_r16.to_string()); + } + j.end_obj(); +} + +const char* mbsfn_area_info_r16_s::mcch_cfg_r16_s_::mcch_repeat_period_r16_opts::to_string() const +{ + static const char* options[] = {"rf1", + "rf2", + "rf4", + "rf8", + "rf16", + "rf32", + "rf64", + "rf128", + "rf256", + "spare7", + "spare6", + "spare5", + "spare4", + "spare3", + "spare2", + "spare1"}; + return convert_enum_idx(options, 16, value, "mbsfn_area_info_r16_s::mcch_cfg_r16_s_::mcch_repeat_period_r16_e_"); +} +uint16_t mbsfn_area_info_r16_s::mcch_cfg_r16_s_::mcch_repeat_period_r16_opts::to_number() const +{ + static const uint16_t options[] = {1, 2, 4, 8, 16, 32, 64, 128, 256}; + return map_enum_number(options, 9, value, "mbsfn_area_info_r16_s::mcch_cfg_r16_s_::mcch_repeat_period_r16_e_"); +} + +const char* mbsfn_area_info_r16_s::mcch_cfg_r16_s_::mcch_mod_period_r16_opts::to_string() const +{ + static const char* options[] = {"rf1", + "rf2", + "rf4", + "rf8", + "rf16", + "rf32", + "rf64", + "rf128", + "rf256", + "rf512", + "rf1024", + "spare5", + "spare4", + "spare3", + "spare2", + "spare1"}; + return convert_enum_idx(options, 16, value, "mbsfn_area_info_r16_s::mcch_cfg_r16_s_::mcch_mod_period_r16_e_"); +} +uint16_t mbsfn_area_info_r16_s::mcch_cfg_r16_s_::mcch_mod_period_r16_opts::to_number() const +{ + static const uint16_t options[] = {1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024}; + return map_enum_number(options, 11, value, "mbsfn_area_info_r16_s::mcch_cfg_r16_s_::mcch_mod_period_r16_e_"); +} + +const char* mbsfn_area_info_r16_s::mcch_cfg_r16_s_::sig_mcs_r16_opts::to_string() const +{ + static const char* options[] = {"n2", "n7", "n13", "n19"}; + return convert_enum_idx(options, 4, value, "mbsfn_area_info_r16_s::mcch_cfg_r16_s_::sig_mcs_r16_e_"); +} +uint8_t mbsfn_area_info_r16_s::mcch_cfg_r16_s_::sig_mcs_r16_opts::to_number() const +{ + static const uint8_t options[] = {2, 7, 13, 19}; + return map_enum_number(options, 4, value, "mbsfn_area_info_r16_s::mcch_cfg_r16_s_::sig_mcs_r16_e_"); +} + +const char* mbsfn_area_info_r16_s::subcarrier_spacing_mbms_r16_opts::to_string() const +{ + static const char* options[] = { + "kHz7dot5", "kHz2dot5", "kHz1dot25", "kHz0dot37", "kHz15-v1710", "spare3", "spare2", "spare1"}; + return convert_enum_idx(options, 8, value, "mbsfn_area_info_r16_s::subcarrier_spacing_mbms_r16_e_"); +} +float mbsfn_area_info_r16_s::subcarrier_spacing_mbms_r16_opts::to_number() const +{ + static const float options[] = {7.5, 2.5, 1.25, 0.37, 15.0}; + return map_enum_number(options, 5, value, "mbsfn_area_info_r16_s::subcarrier_spacing_mbms_r16_e_"); +} +const char* mbsfn_area_info_r16_s::subcarrier_spacing_mbms_r16_opts::to_number_string() const +{ + static const char* options[] = {"7.5", "2.5", "1.25", "0.37", "15"}; + return convert_enum_idx(options, 8, value, "mbsfn_area_info_r16_s::subcarrier_spacing_mbms_r16_e_"); +} + +const char* mbsfn_area_info_r16_s::time_separation_r16_opts::to_string() const +{ + static const char* options[] = {"sl2", "sl4"}; + return convert_enum_idx(options, 2, value, "mbsfn_area_info_r16_s::time_separation_r16_e_"); +} +uint8_t mbsfn_area_info_r16_s::time_separation_r16_opts::to_number() const +{ + static const uint8_t options[] = {2, 4}; + return map_enum_number(options, 2, value, "mbsfn_area_info_r16_s::time_separation_r16_e_"); +} + +// MTC-SSB2-LP-NR-r16 ::= SEQUENCE +SRSASN_CODE mtc_ssb2_lp_nr_r16_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(pci_list_r16_present, 1)); + + if (pci_list_r16_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, pci_list_r16, 1, 64, integer_packer<uint16_t>(0, 1007))); + } + HANDLE_CODE(periodicity_r16.pack(bref)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE mtc_ssb2_lp_nr_r16_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(pci_list_r16_present, 1)); + + if (pci_list_r16_present) { + HANDLE_CODE(unpack_dyn_seq_of(pci_list_r16, bref, 1, 64, integer_packer<uint16_t>(0, 1007))); + } + HANDLE_CODE(periodicity_r16.unpack(bref)); + + return SRSASN_SUCCESS; +} +void mtc_ssb2_lp_nr_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (pci_list_r16_present) { + j.start_array("pci-List-r16"); + for (const auto& e1 : pci_list_r16) { + j.write_int(e1); + } + j.end_array(); + } + j.write_str("periodicity-r16", periodicity_r16.to_string()); + j.end_obj(); +} + +const char* mtc_ssb2_lp_nr_r16_s::periodicity_r16_opts::to_string() const +{ + static const char* options[] = {"sf10", "sf20", "sf40", "sf80", "sf160", "spare3", "spare2", "spare1"}; + return convert_enum_idx(options, 8, value, "mtc_ssb2_lp_nr_r16_s::periodicity_r16_e_"); +} +uint8_t mtc_ssb2_lp_nr_r16_s::periodicity_r16_opts::to_number() const +{ + static const uint8_t options[] = {10, 20, 40, 80, 160}; + return map_enum_number(options, 5, value, "mtc_ssb2_lp_nr_r16_s::periodicity_r16_e_"); +} + +// MeasIdleCarrierNR-r16 ::= SEQUENCE +SRSASN_CODE meas_idle_carrier_nr_r16_s::pack(bit_ref& bref) const +{ + bref.pack(ext, 1); + HANDLE_CODE(bref.pack(freq_band_list_present, 1)); + HANDLE_CODE(bref.pack(meas_cell_list_nr_r16_present, 1)); + HANDLE_CODE(bref.pack(quality_thres_nr_r16_present, 1)); + HANDLE_CODE(bref.pack(ssb_meas_cfg_r16_present, 1)); + HANDLE_CODE(bref.pack(beam_meas_cfg_idle_r16_present, 1)); + + HANDLE_CODE(pack_integer(bref, carrier_freq_nr_r16, (uint32_t)0u, (uint32_t)3279165u)); + HANDLE_CODE(subcarrier_spacing_ssb_r16.pack(bref)); + if (freq_band_list_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, freq_band_list, 1, 32, integer_packer<uint16_t>(1, 1024))); + } + if (meas_cell_list_nr_r16_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, meas_cell_list_nr_r16, 1, 8)); + } + HANDLE_CODE(report_quantities_nr_r16.pack(bref)); + if (quality_thres_nr_r16_present) { + HANDLE_CODE(bref.pack(quality_thres_nr_r16.idle_rsrp_thres_nr_r16_present, 1)); + HANDLE_CODE(bref.pack(quality_thres_nr_r16.idle_rsrq_thres_nr_r16_present, 1)); + if (quality_thres_nr_r16.idle_rsrp_thres_nr_r16_present) { + HANDLE_CODE(pack_integer(bref, quality_thres_nr_r16.idle_rsrp_thres_nr_r16, (uint8_t)0u, (uint8_t)127u)); + } + if (quality_thres_nr_r16.idle_rsrq_thres_nr_r16_present) { + HANDLE_CODE(pack_integer(bref, quality_thres_nr_r16.idle_rsrq_thres_nr_r16, (uint8_t)0u, (uint8_t)127u)); + } + } + if (ssb_meas_cfg_r16_present) { + HANDLE_CODE(bref.pack(ssb_meas_cfg_r16.max_rs_idx_cell_qual_r16_present, 1)); + HANDLE_CODE(bref.pack(ssb_meas_cfg_r16.thresh_rs_idx_r16_present, 1)); + HANDLE_CODE(bref.pack(ssb_meas_cfg_r16.meas_timing_cfg_r16_present, 1)); + HANDLE_CODE(bref.pack(ssb_meas_cfg_r16.ssb_to_measure_r16_present, 1)); + HANDLE_CODE(bref.pack(ssb_meas_cfg_r16.ss_rssi_meas_r16_present, 1)); + if (ssb_meas_cfg_r16.max_rs_idx_cell_qual_r16_present) { + HANDLE_CODE(pack_integer(bref, ssb_meas_cfg_r16.max_rs_idx_cell_qual_r16, (uint8_t)1u, (uint8_t)16u)); + } + if (ssb_meas_cfg_r16.thresh_rs_idx_r16_present) { + HANDLE_CODE(ssb_meas_cfg_r16.thresh_rs_idx_r16.pack(bref)); + } + if (ssb_meas_cfg_r16.meas_timing_cfg_r16_present) { + HANDLE_CODE(ssb_meas_cfg_r16.meas_timing_cfg_r16.pack(bref)); + } + if (ssb_meas_cfg_r16.ssb_to_measure_r16_present) { + HANDLE_CODE(ssb_meas_cfg_r16.ssb_to_measure_r16.pack(bref)); + } + HANDLE_CODE(bref.pack(ssb_meas_cfg_r16.derive_ssb_idx_from_cell_r16, 1)); + if (ssb_meas_cfg_r16.ss_rssi_meas_r16_present) { + HANDLE_CODE(ssb_meas_cfg_r16.ss_rssi_meas_r16.pack(bref)); + } + } + if (beam_meas_cfg_idle_r16_present) { + HANDLE_CODE(beam_meas_cfg_idle_r16.pack(bref)); + } + + if (ext) { + ext_groups_packer_guard group_flags; + group_flags[0] |= subcarrier_spacing_ssb_r17_present; + group_flags.pack(bref); + + if (group_flags[0]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(subcarrier_spacing_ssb_r17_present, 1)); + if (subcarrier_spacing_ssb_r17_present) { + HANDLE_CODE(subcarrier_spacing_ssb_r17.pack(bref)); + } + } + } + return SRSASN_SUCCESS; +} +SRSASN_CODE meas_idle_carrier_nr_r16_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(bref.unpack(freq_band_list_present, 1)); + HANDLE_CODE(bref.unpack(meas_cell_list_nr_r16_present, 1)); + HANDLE_CODE(bref.unpack(quality_thres_nr_r16_present, 1)); + HANDLE_CODE(bref.unpack(ssb_meas_cfg_r16_present, 1)); + HANDLE_CODE(bref.unpack(beam_meas_cfg_idle_r16_present, 1)); + + HANDLE_CODE(unpack_integer(carrier_freq_nr_r16, bref, (uint32_t)0u, (uint32_t)3279165u)); + HANDLE_CODE(subcarrier_spacing_ssb_r16.unpack(bref)); + if (freq_band_list_present) { + HANDLE_CODE(unpack_dyn_seq_of(freq_band_list, bref, 1, 32, integer_packer<uint16_t>(1, 1024))); + } + if (meas_cell_list_nr_r16_present) { + HANDLE_CODE(unpack_dyn_seq_of(meas_cell_list_nr_r16, bref, 1, 8)); + } + HANDLE_CODE(report_quantities_nr_r16.unpack(bref)); + if (quality_thres_nr_r16_present) { + HANDLE_CODE(bref.unpack(quality_thres_nr_r16.idle_rsrp_thres_nr_r16_present, 1)); + HANDLE_CODE(bref.unpack(quality_thres_nr_r16.idle_rsrq_thres_nr_r16_present, 1)); + if (quality_thres_nr_r16.idle_rsrp_thres_nr_r16_present) { + HANDLE_CODE(unpack_integer(quality_thres_nr_r16.idle_rsrp_thres_nr_r16, bref, (uint8_t)0u, (uint8_t)127u)); + } + if (quality_thres_nr_r16.idle_rsrq_thres_nr_r16_present) { + HANDLE_CODE(unpack_integer(quality_thres_nr_r16.idle_rsrq_thres_nr_r16, bref, (uint8_t)0u, (uint8_t)127u)); + } + } + if (ssb_meas_cfg_r16_present) { + HANDLE_CODE(bref.unpack(ssb_meas_cfg_r16.max_rs_idx_cell_qual_r16_present, 1)); + HANDLE_CODE(bref.unpack(ssb_meas_cfg_r16.thresh_rs_idx_r16_present, 1)); + HANDLE_CODE(bref.unpack(ssb_meas_cfg_r16.meas_timing_cfg_r16_present, 1)); + HANDLE_CODE(bref.unpack(ssb_meas_cfg_r16.ssb_to_measure_r16_present, 1)); + HANDLE_CODE(bref.unpack(ssb_meas_cfg_r16.ss_rssi_meas_r16_present, 1)); + if (ssb_meas_cfg_r16.max_rs_idx_cell_qual_r16_present) { + HANDLE_CODE(unpack_integer(ssb_meas_cfg_r16.max_rs_idx_cell_qual_r16, bref, (uint8_t)1u, (uint8_t)16u)); + } + if (ssb_meas_cfg_r16.thresh_rs_idx_r16_present) { + HANDLE_CODE(ssb_meas_cfg_r16.thresh_rs_idx_r16.unpack(bref)); + } + if (ssb_meas_cfg_r16.meas_timing_cfg_r16_present) { + HANDLE_CODE(ssb_meas_cfg_r16.meas_timing_cfg_r16.unpack(bref)); + } + if (ssb_meas_cfg_r16.ssb_to_measure_r16_present) { + HANDLE_CODE(ssb_meas_cfg_r16.ssb_to_measure_r16.unpack(bref)); + } + HANDLE_CODE(bref.unpack(ssb_meas_cfg_r16.derive_ssb_idx_from_cell_r16, 1)); + if (ssb_meas_cfg_r16.ss_rssi_meas_r16_present) { + HANDLE_CODE(ssb_meas_cfg_r16.ss_rssi_meas_r16.unpack(bref)); + } + } + if (beam_meas_cfg_idle_r16_present) { + HANDLE_CODE(beam_meas_cfg_idle_r16.unpack(bref)); + } + + if (ext) { + ext_groups_unpacker_guard group_flags(1); + group_flags.unpack(bref); + + if (group_flags[0]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.unpack(subcarrier_spacing_ssb_r17_present, 1)); + if (subcarrier_spacing_ssb_r17_present) { + HANDLE_CODE(subcarrier_spacing_ssb_r17.unpack(bref)); + } + } + } + return SRSASN_SUCCESS; +} +void meas_idle_carrier_nr_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_int("carrierFreqNR-r16", carrier_freq_nr_r16); + j.write_str("subcarrierSpacingSSB-r16", subcarrier_spacing_ssb_r16.to_string()); + if (freq_band_list_present) { + j.start_array("frequencyBandList"); + for (const auto& e1 : freq_band_list) { + j.write_int(e1); + } + j.end_array(); + } + if (meas_cell_list_nr_r16_present) { + j.start_array("measCellListNR-r16"); + for (const auto& e1 : meas_cell_list_nr_r16) { + e1.to_json(j); + } + j.end_array(); + } + j.write_str("reportQuantitiesNR-r16", report_quantities_nr_r16.to_string()); + if (quality_thres_nr_r16_present) { + j.write_fieldname("qualityThresholdNR-r16"); + j.start_obj(); + if (quality_thres_nr_r16.idle_rsrp_thres_nr_r16_present) { + j.write_int("idleRSRP-ThresholdNR-r16", quality_thres_nr_r16.idle_rsrp_thres_nr_r16); + } + if (quality_thres_nr_r16.idle_rsrq_thres_nr_r16_present) { + j.write_int("idleRSRQ-ThresholdNR-r16", quality_thres_nr_r16.idle_rsrq_thres_nr_r16); + } + j.end_obj(); + } + if (ssb_meas_cfg_r16_present) { + j.write_fieldname("ssb-MeasConfig-r16"); + j.start_obj(); + if (ssb_meas_cfg_r16.max_rs_idx_cell_qual_r16_present) { + j.write_int("maxRS-IndexCellQual-r16", ssb_meas_cfg_r16.max_rs_idx_cell_qual_r16); + } + if (ssb_meas_cfg_r16.thresh_rs_idx_r16_present) { + j.write_fieldname("threshRS-Index-r16"); + ssb_meas_cfg_r16.thresh_rs_idx_r16.to_json(j); + } + if (ssb_meas_cfg_r16.meas_timing_cfg_r16_present) { + j.write_fieldname("measTimingConfig-r16"); + ssb_meas_cfg_r16.meas_timing_cfg_r16.to_json(j); + } + if (ssb_meas_cfg_r16.ssb_to_measure_r16_present) { + j.write_fieldname("ssb-ToMeasure-r16"); + ssb_meas_cfg_r16.ssb_to_measure_r16.to_json(j); + } + j.write_bool("deriveSSB-IndexFromCell-r16", ssb_meas_cfg_r16.derive_ssb_idx_from_cell_r16); + if (ssb_meas_cfg_r16.ss_rssi_meas_r16_present) { + j.write_fieldname("ss-RSSI-Measurement-r16"); + ssb_meas_cfg_r16.ss_rssi_meas_r16.to_json(j); + } + j.end_obj(); + } + if (beam_meas_cfg_idle_r16_present) { + j.write_fieldname("beamMeasConfigIdle-r16"); + beam_meas_cfg_idle_r16.to_json(j); + } + if (ext) { + if (subcarrier_spacing_ssb_r17_present) { + j.write_str("subcarrierSpacingSSB-r17", subcarrier_spacing_ssb_r17.to_string()); + } + } + j.end_obj(); +} + +const char* meas_idle_carrier_nr_r16_s::subcarrier_spacing_ssb_r16_opts::to_string() const +{ + static const char* options[] = {"kHz15", "kHz30", "kHz120", "kHz240"}; + return convert_enum_idx(options, 4, value, "meas_idle_carrier_nr_r16_s::subcarrier_spacing_ssb_r16_e_"); +} +uint8_t meas_idle_carrier_nr_r16_s::subcarrier_spacing_ssb_r16_opts::to_number() const +{ + static const uint8_t options[] = {15, 30, 120, 240}; + return map_enum_number(options, 4, value, "meas_idle_carrier_nr_r16_s::subcarrier_spacing_ssb_r16_e_"); +} + +const char* meas_idle_carrier_nr_r16_s::report_quantities_nr_r16_opts::to_string() const +{ + static const char* options[] = {"rsrp", "rsrq", "both"}; + return convert_enum_idx(options, 3, value, "meas_idle_carrier_nr_r16_s::report_quantities_nr_r16_e_"); +} + +const char* meas_idle_carrier_nr_r16_s::subcarrier_spacing_ssb_r17_opts::to_string() const +{ + static const char* options[] = {"kHz480", "spare1"}; + return convert_enum_idx(options, 2, value, "meas_idle_carrier_nr_r16_s::subcarrier_spacing_ssb_r17_e_"); +} +uint16_t meas_idle_carrier_nr_r16_s::subcarrier_spacing_ssb_r17_opts::to_number() const +{ + static const uint16_t options[] = {480}; + return map_enum_number(options, 1, value, "meas_idle_carrier_nr_r16_s::subcarrier_spacing_ssb_r17_e_"); +} + // NeighCellCDMA2000 ::= SEQUENCE SRSASN_CODE neigh_cell_cdma2000_s::pack(bit_ref& bref) const { @@ -1146,6 +1693,93 @@ void sl_disc_cfg_other_inter_freq_r13_s::to_json(json_writer& j) const j.end_obj(); } +// TLE-EphemerisParameters-r17 ::= SEQUENCE +SRSASN_CODE tle_ephemeris_params_r17_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(pack_integer(bref, inclination_r17, (uint32_t)0u, (uint32_t)2097151u)); + HANDLE_CODE(pack_integer(bref, argument_perigee_r17, (uint32_t)0u, (uint32_t)4194303u)); + HANDLE_CODE(pack_integer(bref, right_ascension_r17, (uint32_t)0u, (uint32_t)4194303u)); + HANDLE_CODE(pack_integer(bref, mean_anomaly_r17, (uint32_t)0u, (uint32_t)4194303u)); + HANDLE_CODE(pack_integer(bref, eccentricity_r17, (uint32_t)0u, (uint32_t)16777215u)); + HANDLE_CODE(pack_integer(bref, mean_motion_r17, (uint64_t)0u, (uint64_t)17179869183u)); + HANDLE_CODE(pack_integer(bref, bstar_decimal_r17, (int32_t)-99999, (int32_t)99999)); + HANDLE_CODE(pack_integer(bref, bstar_exponent_r17, (int8_t)-9, (int8_t)9)); + HANDLE_CODE(pack_integer(bref, epoch_star_r17, (int32_t)-1048575, (int32_t)1048575)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE tle_ephemeris_params_r17_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(unpack_integer(inclination_r17, bref, (uint32_t)0u, (uint32_t)2097151u)); + HANDLE_CODE(unpack_integer(argument_perigee_r17, bref, (uint32_t)0u, (uint32_t)4194303u)); + HANDLE_CODE(unpack_integer(right_ascension_r17, bref, (uint32_t)0u, (uint32_t)4194303u)); + HANDLE_CODE(unpack_integer(mean_anomaly_r17, bref, (uint32_t)0u, (uint32_t)4194303u)); + HANDLE_CODE(unpack_integer(eccentricity_r17, bref, (uint32_t)0u, (uint32_t)16777215u)); + HANDLE_CODE(unpack_integer(mean_motion_r17, bref, (uint64_t)0u, (uint64_t)17179869183u)); + HANDLE_CODE(unpack_integer(bstar_decimal_r17, bref, (int32_t)-99999, (int32_t)99999)); + HANDLE_CODE(unpack_integer(bstar_exponent_r17, bref, (int8_t)-9, (int8_t)9)); + HANDLE_CODE(unpack_integer(epoch_star_r17, bref, (int32_t)-1048575, (int32_t)1048575)); + + return SRSASN_SUCCESS; +} +void tle_ephemeris_params_r17_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_int("inclination-r17", inclination_r17); + j.write_int("argumentPerigee-r17", argument_perigee_r17); + j.write_int("rightAscension-r17", right_ascension_r17); + j.write_int("meanAnomaly-r17", mean_anomaly_r17); + j.write_int("eccentricity-r17", eccentricity_r17); + j.write_int("meanMotion-r17", mean_motion_r17); + j.write_int("bStarDecimal-r17", bstar_decimal_r17); + j.write_int("bStarExponent-r17", bstar_exponent_r17); + j.write_int("epochStar-r17", epoch_star_r17); + j.end_obj(); +} + +// CarrierFreqNBIOT-r16 ::= SEQUENCE +SRSASN_CODE carrier_freq_nbiot_r16_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(pack_integer(bref, carrier_freq_r16, (uint32_t)0u, (uint32_t)262143u)); + HANDLE_CODE(carrier_freq_offset_r16.pack(bref)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE carrier_freq_nbiot_r16_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(unpack_integer(carrier_freq_r16, bref, (uint32_t)0u, (uint32_t)262143u)); + HANDLE_CODE(carrier_freq_offset_r16.unpack(bref)); + + return SRSASN_SUCCESS; +} +void carrier_freq_nbiot_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_int("carrierFreq-r16", carrier_freq_r16); + j.write_str("carrierFreqOffset-r16", carrier_freq_offset_r16.to_string()); + j.end_obj(); +} + +const char* carrier_freq_nbiot_r16_s::carrier_freq_offset_r16_opts::to_string() const +{ + static const char* options[] = {"v-10", "v-9", "v-8dot5", "v-8", "v-7", "v-6", "v-5", "v-4dot5", "v-4", + "v-3", "v-2", "v-1", "v-0dot5", "v0", "v1", "v2", "v3", "v3dot5", + "v4", "v5", "v6", "v7", "v7dot5", "v8", "v9"}; + return convert_enum_idx(options, 25, value, "carrier_freq_nbiot_r16_s::carrier_freq_offset_r16_e_"); +} +float carrier_freq_nbiot_r16_s::carrier_freq_offset_r16_opts::to_number() const +{ + static const float options[] = {-10.0, -9.0, -8.5, -8.0, -7.0, -6.0, -5.0, -4.5, -4.0, -3.0, -2.0, -1.0, -0.5, + 0.0, 1.0, 2.0, 3.0, 3.5, 4.0, 5.0, 6.0, 7.0, 7.5, 8.0, 9.0}; + return map_enum_number(options, 25, value, "carrier_freq_nbiot_r16_s::carrier_freq_offset_r16_e_"); +} +const char* carrier_freq_nbiot_r16_s::carrier_freq_offset_r16_opts::to_number_string() const +{ + static const char* options[] = {"-10", "-9", "-8.5", "-8", "-7", "-6", "-5", "-4.5", "-4", "-3", "-2", "-1", "-0.5", + "0", "1", "2", "3", "3.5", "4", "5", "6", "7", "7.5", "8", "9"}; + return convert_enum_idx(options, 25, value, "carrier_freq_nbiot_r16_s::carrier_freq_offset_r16_e_"); +} + // CarrierFreqNR-r15 ::= SEQUENCE SRSASN_CODE carrier_freq_nr_r15_s::pack(bit_ref& bref) const { @@ -1435,6 +2069,154 @@ uint8_t carrier_freq_nr_r15_s::subcarrier_spacing_ssb_r15_opts::to_number() cons return map_enum_number(options, 4, value, "carrier_freq_nr_r15_s::subcarrier_spacing_ssb_r15_e_"); } +// CarrierFreqNR-v1610 ::= SEQUENCE +SRSASN_CODE carrier_freq_nr_v1610_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(smtc2_lp_r16_present, 1)); + HANDLE_CODE(bref.pack(ssb_position_qcl_common_nr_r16_present, 1)); + HANDLE_CODE(bref.pack(allowed_cell_list_nr_r16_present, 1)); + HANDLE_CODE(bref.pack(high_speed_carrier_nr_r16_present, 1)); + + if (smtc2_lp_r16_present) { + HANDLE_CODE(smtc2_lp_r16.pack(bref)); + } + if (ssb_position_qcl_common_nr_r16_present) { + HANDLE_CODE(ssb_position_qcl_common_nr_r16.pack(bref)); + } + if (allowed_cell_list_nr_r16_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, allowed_cell_list_nr_r16, 1, 16, integer_packer<uint16_t>(0, 1007))); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE carrier_freq_nr_v1610_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(smtc2_lp_r16_present, 1)); + HANDLE_CODE(bref.unpack(ssb_position_qcl_common_nr_r16_present, 1)); + HANDLE_CODE(bref.unpack(allowed_cell_list_nr_r16_present, 1)); + HANDLE_CODE(bref.unpack(high_speed_carrier_nr_r16_present, 1)); + + if (smtc2_lp_r16_present) { + HANDLE_CODE(smtc2_lp_r16.unpack(bref)); + } + if (ssb_position_qcl_common_nr_r16_present) { + HANDLE_CODE(ssb_position_qcl_common_nr_r16.unpack(bref)); + } + if (allowed_cell_list_nr_r16_present) { + HANDLE_CODE(unpack_dyn_seq_of(allowed_cell_list_nr_r16, bref, 1, 16, integer_packer<uint16_t>(0, 1007))); + } + + return SRSASN_SUCCESS; +} +void carrier_freq_nr_v1610_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (smtc2_lp_r16_present) { + j.write_fieldname("smtc2-LP-r16"); + smtc2_lp_r16.to_json(j); + } + if (ssb_position_qcl_common_nr_r16_present) { + j.write_str("ssb-PositionQCL-CommonNR-r16", ssb_position_qcl_common_nr_r16.to_string()); + } + if (allowed_cell_list_nr_r16_present) { + j.start_array("allowedCellListNR-r16"); + for (const auto& e1 : allowed_cell_list_nr_r16) { + j.write_int(e1); + } + j.end_array(); + } + if (high_speed_carrier_nr_r16_present) { + j.write_str("highSpeedCarrierNR-r16", "true"); + } + j.end_obj(); +} + +// CarrierFreqNR-v1700 ::= SEQUENCE +SRSASN_CODE carrier_freq_nr_v1700_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(nr_freq_neigh_hsdn_cell_list_r17_present, 1)); + + if (nr_freq_neigh_hsdn_cell_list_r17_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, nr_freq_neigh_hsdn_cell_list_r17, 1, 8)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE carrier_freq_nr_v1700_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(nr_freq_neigh_hsdn_cell_list_r17_present, 1)); + + if (nr_freq_neigh_hsdn_cell_list_r17_present) { + HANDLE_CODE(unpack_dyn_seq_of(nr_freq_neigh_hsdn_cell_list_r17, bref, 1, 8)); + } + + return SRSASN_SUCCESS; +} +void carrier_freq_nr_v1700_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (nr_freq_neigh_hsdn_cell_list_r17_present) { + j.start_array("nr-FreqNeighHSDN-CellList-r17"); + for (const auto& e1 : nr_freq_neigh_hsdn_cell_list_r17) { + e1.to_json(j); + } + j.end_array(); + } + j.end_obj(); +} + +// CarrierFreqNR-v1720 ::= SEQUENCE +SRSASN_CODE carrier_freq_nr_v1720_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(subcarrier_spacing_ssb_r17_present, 1)); + HANDLE_CODE(bref.pack(ssb_position_qcl_common_nr_r17_present, 1)); + + if (subcarrier_spacing_ssb_r17_present) { + HANDLE_CODE(subcarrier_spacing_ssb_r17.pack(bref)); + } + if (ssb_position_qcl_common_nr_r17_present) { + HANDLE_CODE(ssb_position_qcl_common_nr_r17.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE carrier_freq_nr_v1720_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(subcarrier_spacing_ssb_r17_present, 1)); + HANDLE_CODE(bref.unpack(ssb_position_qcl_common_nr_r17_present, 1)); + + if (subcarrier_spacing_ssb_r17_present) { + HANDLE_CODE(subcarrier_spacing_ssb_r17.unpack(bref)); + } + if (ssb_position_qcl_common_nr_r17_present) { + HANDLE_CODE(ssb_position_qcl_common_nr_r17.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void carrier_freq_nr_v1720_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (subcarrier_spacing_ssb_r17_present) { + j.write_str("subcarrierSpacingSSB-r17", subcarrier_spacing_ssb_r17.to_string()); + } + if (ssb_position_qcl_common_nr_r17_present) { + j.write_str("ssb-PositionQCL-CommonNR-r17", ssb_position_qcl_common_nr_r17.to_string()); + } + j.end_obj(); +} + +const char* carrier_freq_nr_v1720_s::subcarrier_spacing_ssb_r17_opts::to_string() const +{ + static const char* options[] = {"kHz480", "spare1"}; + return convert_enum_idx(options, 2, value, "carrier_freq_nr_v1720_s::subcarrier_spacing_ssb_r17_e_"); +} +uint16_t carrier_freq_nr_v1720_s::subcarrier_spacing_ssb_r17_opts::to_number() const +{ + static const uint16_t options[] = {480}; + return map_enum_number(options, 1, value, "carrier_freq_nr_v1720_s::subcarrier_spacing_ssb_r17_e_"); +} + // CarrierFreqUTRA-FDD ::= SEQUENCE SRSASN_CODE carrier_freq_utra_fdd_s::pack(bit_ref& bref) const { @@ -1800,6 +2582,76 @@ const char* eab_cfg_r11_s::eab_category_r11_opts::to_string() const return convert_enum_idx(options, 3, value, "eab_cfg_r11_s::eab_category_r11_e_"); } +// EphemerisOrbitalParameters-r17 ::= SEQUENCE +SRSASN_CODE ephemeris_orbital_params_r17_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(pack_integer(bref, semi_major_axis_r17, (uint64_t)0u, (uint64_t)8589934591u)); + HANDLE_CODE(pack_integer(bref, eccentricity_r17, (uint32_t)0u, (uint32_t)1048575u)); + HANDLE_CODE(pack_integer(bref, periapsis_r17, (uint32_t)0u, (uint32_t)268435455u)); + HANDLE_CODE(pack_integer(bref, longitude_r17, (uint32_t)0u, (uint32_t)268435455u)); + HANDLE_CODE(pack_integer(bref, inclination_r17, (int32_t)-67108864, (int32_t)67108863)); + HANDLE_CODE(pack_integer(bref, anomaly_r17, (uint32_t)0u, (uint32_t)268435455u)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE ephemeris_orbital_params_r17_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(unpack_integer(semi_major_axis_r17, bref, (uint64_t)0u, (uint64_t)8589934591u)); + HANDLE_CODE(unpack_integer(eccentricity_r17, bref, (uint32_t)0u, (uint32_t)1048575u)); + HANDLE_CODE(unpack_integer(periapsis_r17, bref, (uint32_t)0u, (uint32_t)268435455u)); + HANDLE_CODE(unpack_integer(longitude_r17, bref, (uint32_t)0u, (uint32_t)268435455u)); + HANDLE_CODE(unpack_integer(inclination_r17, bref, (int32_t)-67108864, (int32_t)67108863)); + HANDLE_CODE(unpack_integer(anomaly_r17, bref, (uint32_t)0u, (uint32_t)268435455u)); + + return SRSASN_SUCCESS; +} +void ephemeris_orbital_params_r17_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_int("semiMajorAxis-r17", semi_major_axis_r17); + j.write_int("eccentricity-r17", eccentricity_r17); + j.write_int("periapsis-r17", periapsis_r17); + j.write_int("longitude-r17", longitude_r17); + j.write_int("inclination-r17", inclination_r17); + j.write_int("anomaly-r17", anomaly_r17); + j.end_obj(); +} + +// EphemerisStateVectors-r17 ::= SEQUENCE +SRSASN_CODE ephemeris_state_vectors_r17_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(pack_integer(bref, position_x_r17, (int32_t)-33554432, (int32_t)33554431)); + HANDLE_CODE(pack_integer(bref, position_y_r17, (int32_t)-33554432, (int32_t)33554431)); + HANDLE_CODE(pack_integer(bref, position_z_r17, (int32_t)-33554432, (int32_t)33554431)); + HANDLE_CODE(pack_integer(bref, velocity_vx_r17, (int32_t)-131072, (int32_t)131071)); + HANDLE_CODE(pack_integer(bref, velocity_vy_r17, (int32_t)-131072, (int32_t)131071)); + HANDLE_CODE(pack_integer(bref, velocity_vz_r17, (int32_t)-131072, (int32_t)131071)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE ephemeris_state_vectors_r17_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(unpack_integer(position_x_r17, bref, (int32_t)-33554432, (int32_t)33554431)); + HANDLE_CODE(unpack_integer(position_y_r17, bref, (int32_t)-33554432, (int32_t)33554431)); + HANDLE_CODE(unpack_integer(position_z_r17, bref, (int32_t)-33554432, (int32_t)33554431)); + HANDLE_CODE(unpack_integer(velocity_vx_r17, bref, (int32_t)-131072, (int32_t)131071)); + HANDLE_CODE(unpack_integer(velocity_vy_r17, bref, (int32_t)-131072, (int32_t)131071)); + HANDLE_CODE(unpack_integer(velocity_vz_r17, bref, (int32_t)-131072, (int32_t)131071)); + + return SRSASN_SUCCESS; +} +void ephemeris_state_vectors_r17_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_int("positionX-r17", position_x_r17); + j.write_int("positionY-r17", position_y_r17); + j.write_int("positionZ-r17", position_z_r17); + j.write_int("velocityVX-r17", velocity_vx_r17); + j.write_int("velocityVY-r17", velocity_vy_r17); + j.write_int("velocityVZ-r17", velocity_vz_r17); + j.end_obj(); +} + // InterFreqCarrierFreqInfo ::= SEQUENCE SRSASN_CODE inter_freq_carrier_freq_info_s::pack(bit_ref& bref) const { @@ -1809,7 +2661,7 @@ SRSASN_CODE inter_freq_carrier_freq_info_s::pack(bit_ref& bref) const HANDLE_CODE(bref.pack(cell_resel_prio_present, 1)); HANDLE_CODE(bref.pack(q_offset_freq_present, 1)); HANDLE_CODE(bref.pack(inter_freq_neigh_cell_list_present, 1)); - HANDLE_CODE(bref.pack(inter_freq_black_cell_list_present, 1)); + HANDLE_CODE(bref.pack(inter_freq_excluded_cell_list_present, 1)); HANDLE_CODE(pack_integer(bref, dl_carrier_freq, (uint32_t)0u, (uint32_t)65535u)); HANDLE_CODE(pack_integer(bref, q_rx_lev_min, (int8_t)-70, (int8_t)-22)); @@ -1834,8 +2686,8 @@ SRSASN_CODE inter_freq_carrier_freq_info_s::pack(bit_ref& bref) const if (inter_freq_neigh_cell_list_present) { HANDLE_CODE(pack_dyn_seq_of(bref, inter_freq_neigh_cell_list, 1, 16)); } - if (inter_freq_black_cell_list_present) { - HANDLE_CODE(pack_dyn_seq_of(bref, inter_freq_black_cell_list, 1, 16)); + if (inter_freq_excluded_cell_list_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, inter_freq_excluded_cell_list, 1, 16)); } if (ext) { @@ -1877,7 +2729,7 @@ SRSASN_CODE inter_freq_carrier_freq_info_s::unpack(cbit_ref& bref) HANDLE_CODE(bref.unpack(cell_resel_prio_present, 1)); HANDLE_CODE(bref.unpack(q_offset_freq_present, 1)); HANDLE_CODE(bref.unpack(inter_freq_neigh_cell_list_present, 1)); - HANDLE_CODE(bref.unpack(inter_freq_black_cell_list_present, 1)); + HANDLE_CODE(bref.unpack(inter_freq_excluded_cell_list_present, 1)); HANDLE_CODE(unpack_integer(dl_carrier_freq, bref, (uint32_t)0u, (uint32_t)65535u)); HANDLE_CODE(unpack_integer(q_rx_lev_min, bref, (int8_t)-70, (int8_t)-22)); @@ -1902,8 +2754,8 @@ SRSASN_CODE inter_freq_carrier_freq_info_s::unpack(cbit_ref& bref) if (inter_freq_neigh_cell_list_present) { HANDLE_CODE(unpack_dyn_seq_of(inter_freq_neigh_cell_list, bref, 1, 16)); } - if (inter_freq_black_cell_list_present) { - HANDLE_CODE(unpack_dyn_seq_of(inter_freq_black_cell_list, bref, 1, 16)); + if (inter_freq_excluded_cell_list_present) { + HANDLE_CODE(unpack_dyn_seq_of(inter_freq_excluded_cell_list, bref, 1, 16)); } if (ext) { @@ -1967,9 +2819,9 @@ void inter_freq_carrier_freq_info_s::to_json(json_writer& j) const } j.end_array(); } - if (inter_freq_black_cell_list_present) { - j.start_array("interFreqBlackCellList"); - for (const auto& e1 : inter_freq_black_cell_list) { + if (inter_freq_excluded_cell_list_present) { + j.start_array("interFreqExcludedCellList"); + for (const auto& e1 : inter_freq_excluded_cell_list) { e1.to_json(j); } j.end_array(); @@ -2001,7 +2853,7 @@ SRSASN_CODE inter_freq_carrier_freq_info_r12_s::pack(bit_ref& bref) const HANDLE_CODE(bref.pack(cell_resel_prio_r12_present, 1)); HANDLE_CODE(bref.pack(q_offset_freq_r12_present, 1)); HANDLE_CODE(bref.pack(inter_freq_neigh_cell_list_r12_present, 1)); - HANDLE_CODE(bref.pack(inter_freq_black_cell_list_r12_present, 1)); + HANDLE_CODE(bref.pack(inter_freq_excluded_cell_list_r12_present, 1)); HANDLE_CODE(bref.pack(q_qual_min_r12_present, 1)); HANDLE_CODE(bref.pack(thresh_x_q_r12_present, 1)); HANDLE_CODE(bref.pack(q_qual_min_wb_r12_present, 1)); @@ -2032,8 +2884,8 @@ SRSASN_CODE inter_freq_carrier_freq_info_r12_s::pack(bit_ref& bref) const if (inter_freq_neigh_cell_list_r12_present) { HANDLE_CODE(pack_dyn_seq_of(bref, inter_freq_neigh_cell_list_r12, 1, 16)); } - if (inter_freq_black_cell_list_r12_present) { - HANDLE_CODE(pack_dyn_seq_of(bref, inter_freq_black_cell_list_r12, 1, 16)); + if (inter_freq_excluded_cell_list_r12_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, inter_freq_excluded_cell_list_r12, 1, 16)); } if (q_qual_min_r12_present) { HANDLE_CODE(pack_integer(bref, q_qual_min_r12, (int8_t)-34, (int8_t)-3)); @@ -2062,7 +2914,7 @@ SRSASN_CODE inter_freq_carrier_freq_info_r12_s::unpack(cbit_ref& bref) HANDLE_CODE(bref.unpack(cell_resel_prio_r12_present, 1)); HANDLE_CODE(bref.unpack(q_offset_freq_r12_present, 1)); HANDLE_CODE(bref.unpack(inter_freq_neigh_cell_list_r12_present, 1)); - HANDLE_CODE(bref.unpack(inter_freq_black_cell_list_r12_present, 1)); + HANDLE_CODE(bref.unpack(inter_freq_excluded_cell_list_r12_present, 1)); HANDLE_CODE(bref.unpack(q_qual_min_r12_present, 1)); HANDLE_CODE(bref.unpack(thresh_x_q_r12_present, 1)); HANDLE_CODE(bref.unpack(q_qual_min_wb_r12_present, 1)); @@ -2093,8 +2945,8 @@ SRSASN_CODE inter_freq_carrier_freq_info_r12_s::unpack(cbit_ref& bref) if (inter_freq_neigh_cell_list_r12_present) { HANDLE_CODE(unpack_dyn_seq_of(inter_freq_neigh_cell_list_r12, bref, 1, 16)); } - if (inter_freq_black_cell_list_r12_present) { - HANDLE_CODE(unpack_dyn_seq_of(inter_freq_black_cell_list_r12, bref, 1, 16)); + if (inter_freq_excluded_cell_list_r12_present) { + HANDLE_CODE(unpack_dyn_seq_of(inter_freq_excluded_cell_list_r12, bref, 1, 16)); } if (q_qual_min_r12_present) { HANDLE_CODE(unpack_integer(q_qual_min_r12, bref, (int8_t)-34, (int8_t)-3)); @@ -2146,9 +2998,9 @@ void inter_freq_carrier_freq_info_r12_s::to_json(json_writer& j) const } j.end_array(); } - if (inter_freq_black_cell_list_r12_present) { - j.start_array("interFreqBlackCellList-r12"); - for (const auto& e1 : inter_freq_black_cell_list_r12) { + if (inter_freq_excluded_cell_list_r12_present) { + j.start_array("interFreqExcludedCellList-r12"); + for (const auto& e1 : inter_freq_excluded_cell_list_r12) { e1.to_json(j); } j.end_array(); @@ -2446,6 +3298,74 @@ void inter_freq_carrier_freq_info_v1530_s::to_json(json_writer& j) const j.end_obj(); } +// InterFreqCarrierFreqInfo-v1610 ::= SEQUENCE +SRSASN_CODE inter_freq_carrier_freq_info_v1610_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(alt_cell_resel_prio_r16_present, 1)); + HANDLE_CODE(bref.pack(alt_cell_resel_sub_prio_r16_present, 1)); + HANDLE_CODE(bref.pack(rss_cfg_carrier_info_r16_present, 1)); + HANDLE_CODE(bref.pack(inter_freq_neigh_cell_list_v1610_present, 1)); + + if (alt_cell_resel_prio_r16_present) { + HANDLE_CODE(pack_integer(bref, alt_cell_resel_prio_r16, (uint8_t)0u, (uint8_t)7u)); + } + if (alt_cell_resel_sub_prio_r16_present) { + HANDLE_CODE(alt_cell_resel_sub_prio_r16.pack(bref)); + } + if (rss_cfg_carrier_info_r16_present) { + HANDLE_CODE(rss_cfg_carrier_info_r16.pack(bref)); + } + if (inter_freq_neigh_cell_list_v1610_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, inter_freq_neigh_cell_list_v1610, 1, 16)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE inter_freq_carrier_freq_info_v1610_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(alt_cell_resel_prio_r16_present, 1)); + HANDLE_CODE(bref.unpack(alt_cell_resel_sub_prio_r16_present, 1)); + HANDLE_CODE(bref.unpack(rss_cfg_carrier_info_r16_present, 1)); + HANDLE_CODE(bref.unpack(inter_freq_neigh_cell_list_v1610_present, 1)); + + if (alt_cell_resel_prio_r16_present) { + HANDLE_CODE(unpack_integer(alt_cell_resel_prio_r16, bref, (uint8_t)0u, (uint8_t)7u)); + } + if (alt_cell_resel_sub_prio_r16_present) { + HANDLE_CODE(alt_cell_resel_sub_prio_r16.unpack(bref)); + } + if (rss_cfg_carrier_info_r16_present) { + HANDLE_CODE(rss_cfg_carrier_info_r16.unpack(bref)); + } + if (inter_freq_neigh_cell_list_v1610_present) { + HANDLE_CODE(unpack_dyn_seq_of(inter_freq_neigh_cell_list_v1610, bref, 1, 16)); + } + + return SRSASN_SUCCESS; +} +void inter_freq_carrier_freq_info_v1610_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (alt_cell_resel_prio_r16_present) { + j.write_int("altCellReselectionPriority-r16", alt_cell_resel_prio_r16); + } + if (alt_cell_resel_sub_prio_r16_present) { + j.write_str("altCellReselectionSubPriority-r16", alt_cell_resel_sub_prio_r16.to_string()); + } + if (rss_cfg_carrier_info_r16_present) { + j.write_fieldname("rss-ConfigCarrierInfo-r16"); + rss_cfg_carrier_info_r16.to_json(j); + } + if (inter_freq_neigh_cell_list_v1610_present) { + j.start_array("interFreqNeighCellList-v1610"); + for (const auto& e1 : inter_freq_neigh_cell_list_v1610) { + e1.to_json(j); + } + j.end_array(); + } + j.end_obj(); +} + // IntraFreqNeighCellInfo ::= SEQUENCE SRSASN_CODE intra_freq_neigh_cell_info_s::pack(bit_ref& bref) const { @@ -2471,6 +3391,26 @@ void intra_freq_neigh_cell_info_s::to_json(json_writer& j) const j.end_obj(); } +// IntraFreqNeighCellInfo-v1610 ::= SEQUENCE +SRSASN_CODE intra_freq_neigh_cell_info_v1610_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(rss_meas_pwr_bias_r16.pack(bref)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE intra_freq_neigh_cell_info_v1610_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(rss_meas_pwr_bias_r16.unpack(bref)); + + return SRSASN_SUCCESS; +} +void intra_freq_neigh_cell_info_v1610_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_str("rss-MeasPowerBias-r16", rss_meas_pwr_bias_r16.to_string()); + j.end_obj(); +} + // MBMS-CarrierType-r14 ::= SEQUENCE SRSASN_CODE mbms_carrier_type_r14_s::pack(bit_ref& bref) const { @@ -2571,6 +3511,43 @@ void mbms_sai_inter_freq_v1140_s::to_json(json_writer& j) const j.end_obj(); } +// MBSFN-AreaInfo-r17 ::= SEQUENCE +SRSASN_CODE mbsfn_area_info_r17_s::pack(bit_ref& bref) const +{ + bref.pack(ext, 1); + HANDLE_CODE(mbsfn_area_info_r17.pack(bref)); + HANDLE_CODE(pmch_bw_r17.pack(bref)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE mbsfn_area_info_r17_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(mbsfn_area_info_r17.unpack(bref)); + HANDLE_CODE(pmch_bw_r17.unpack(bref)); + + return SRSASN_SUCCESS; +} +void mbsfn_area_info_r17_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_fieldname("mbsfn-AreaInfo-r17"); + mbsfn_area_info_r17.to_json(j); + j.write_str("pmch-Bandwidth-r17", pmch_bw_r17.to_string()); + j.end_obj(); +} + +const char* mbsfn_area_info_r17_s::pmch_bw_r17_opts::to_string() const +{ + static const char* options[] = {"n40", "n35", "n30", "spare1"}; + return convert_enum_idx(options, 4, value, "mbsfn_area_info_r17_s::pmch_bw_r17_e_"); +} +uint8_t mbsfn_area_info_r17_s::pmch_bw_r17_opts::to_number() const +{ + static const uint8_t options[] = {40, 35, 30}; + return map_enum_number(options, 3, value, "mbsfn_area_info_r17_s::pmch_bw_r17_e_"); +} + // MBSFN-AreaInfo-r9 ::= SEQUENCE SRSASN_CODE mbsfn_area_info_r9_s::pack(bit_ref& bref) const { @@ -2767,6 +3744,36 @@ const char* mbsfn_area_info_r9_s::subcarrier_spacing_mbms_r14_opts::to_number_st return convert_enum_idx(options, 2, value, "mbsfn_area_info_r9_s::subcarrier_spacing_mbms_r14_e_"); } +// PLMN-Info-r16 ::= SEQUENCE +SRSASN_CODE plmn_info_r16_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(nr_band_list_r16_present, 1)); + + if (nr_band_list_r16_present) { + HANDLE_CODE(nr_band_list_r16.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE plmn_info_r16_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(nr_band_list_r16_present, 1)); + + if (nr_band_list_r16_present) { + HANDLE_CODE(nr_band_list_r16.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void plmn_info_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (nr_band_list_r16_present) { + j.write_str("nr-BandList-r16", nr_band_list_r16.to_string()); + } + j.end_obj(); +} + // ReselectionInfoRelay-r13 ::= SEQUENCE SRSASN_CODE resel_info_relay_r13_s::pack(bit_ref& bref) const { @@ -3033,6 +4040,113 @@ void sl_pppp_tx_cfg_idx_r15_s::to_json(json_writer& j) const j.end_obj(); } +// SatelliteInfo-r17 ::= SEQUENCE +SRSASN_CODE satellite_info_r17_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(pack_integer(bref, satellite_id_r17, (uint16_t)0u, (uint16_t)255u)); + HANDLE_CODE(bref.pack(service_info_r17.tle_ephemeris_params_r17_present, 1)); + HANDLE_CODE(bref.pack(service_info_r17.t_service_start_r17_present, 1)); + if (service_info_r17.tle_ephemeris_params_r17_present) { + HANDLE_CODE(service_info_r17.tle_ephemeris_params_r17.pack(bref)); + } + if (service_info_r17.t_service_start_r17_present) { + HANDLE_CODE(pack_integer(bref, service_info_r17.t_service_start_r17, (uint32_t)0u, (uint32_t)1048575u)); + } + HANDLE_CODE(bref.pack(footprint_info_r17.ref_point_r17_present, 1)); + HANDLE_CODE(bref.pack(footprint_info_r17.elevation_angles_r17_present, 1)); + HANDLE_CODE(bref.pack(footprint_info_r17.radius_r17_present, 1)); + if (footprint_info_r17.ref_point_r17_present) { + HANDLE_CODE(pack_integer(bref, footprint_info_r17.ref_point_r17.longitude_r17, (int32_t)-131072, (int32_t)131071)); + HANDLE_CODE(pack_integer(bref, footprint_info_r17.ref_point_r17.latitude_r17, (int32_t)-131072, (int32_t)131071)); + } + if (footprint_info_r17.elevation_angles_r17_present) { + HANDLE_CODE(bref.pack(footprint_info_r17.elevation_angles_r17.elevation_angle_left_r17_present, 1)); + HANDLE_CODE( + pack_integer(bref, footprint_info_r17.elevation_angles_r17.elevation_angle_right_r17, (int8_t)-14, (int8_t)14)); + if (footprint_info_r17.elevation_angles_r17.elevation_angle_left_r17_present) { + HANDLE_CODE(pack_integer( + bref, footprint_info_r17.elevation_angles_r17.elevation_angle_left_r17, (int8_t)-14, (int8_t)14)); + } + } + if (footprint_info_r17.radius_r17_present) { + HANDLE_CODE(pack_integer(bref, footprint_info_r17.radius_r17, (uint16_t)1u, (uint16_t)256u)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE satellite_info_r17_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(unpack_integer(satellite_id_r17, bref, (uint16_t)0u, (uint16_t)255u)); + HANDLE_CODE(bref.unpack(service_info_r17.tle_ephemeris_params_r17_present, 1)); + HANDLE_CODE(bref.unpack(service_info_r17.t_service_start_r17_present, 1)); + if (service_info_r17.tle_ephemeris_params_r17_present) { + HANDLE_CODE(service_info_r17.tle_ephemeris_params_r17.unpack(bref)); + } + if (service_info_r17.t_service_start_r17_present) { + HANDLE_CODE(unpack_integer(service_info_r17.t_service_start_r17, bref, (uint32_t)0u, (uint32_t)1048575u)); + } + HANDLE_CODE(bref.unpack(footprint_info_r17.ref_point_r17_present, 1)); + HANDLE_CODE(bref.unpack(footprint_info_r17.elevation_angles_r17_present, 1)); + HANDLE_CODE(bref.unpack(footprint_info_r17.radius_r17_present, 1)); + if (footprint_info_r17.ref_point_r17_present) { + HANDLE_CODE( + unpack_integer(footprint_info_r17.ref_point_r17.longitude_r17, bref, (int32_t)-131072, (int32_t)131071)); + HANDLE_CODE(unpack_integer(footprint_info_r17.ref_point_r17.latitude_r17, bref, (int32_t)-131072, (int32_t)131071)); + } + if (footprint_info_r17.elevation_angles_r17_present) { + HANDLE_CODE(bref.unpack(footprint_info_r17.elevation_angles_r17.elevation_angle_left_r17_present, 1)); + HANDLE_CODE(unpack_integer( + footprint_info_r17.elevation_angles_r17.elevation_angle_right_r17, bref, (int8_t)-14, (int8_t)14)); + if (footprint_info_r17.elevation_angles_r17.elevation_angle_left_r17_present) { + HANDLE_CODE(unpack_integer( + footprint_info_r17.elevation_angles_r17.elevation_angle_left_r17, bref, (int8_t)-14, (int8_t)14)); + } + } + if (footprint_info_r17.radius_r17_present) { + HANDLE_CODE(unpack_integer(footprint_info_r17.radius_r17, bref, (uint16_t)1u, (uint16_t)256u)); + } + + return SRSASN_SUCCESS; +} +void satellite_info_r17_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_int("satelliteId-r17", satellite_id_r17); + j.write_fieldname("serviceInfo-r17"); + j.start_obj(); + if (service_info_r17.tle_ephemeris_params_r17_present) { + j.write_fieldname("tle-EphemerisParameters-r17"); + service_info_r17.tle_ephemeris_params_r17.to_json(j); + } + if (service_info_r17.t_service_start_r17_present) { + j.write_int("t-ServiceStart-r17", service_info_r17.t_service_start_r17); + } + j.end_obj(); + j.write_fieldname("footprintInfo-r17"); + j.start_obj(); + if (footprint_info_r17.ref_point_r17_present) { + j.write_fieldname("referencePoint-r17"); + j.start_obj(); + j.write_int("longitude-r17", footprint_info_r17.ref_point_r17.longitude_r17); + j.write_int("latitude-r17", footprint_info_r17.ref_point_r17.latitude_r17); + j.end_obj(); + } + if (footprint_info_r17.elevation_angles_r17_present) { + j.write_fieldname("elevationAngles-r17"); + j.start_obj(); + j.write_int("elevationAngleRight-r17", footprint_info_r17.elevation_angles_r17.elevation_angle_right_r17); + if (footprint_info_r17.elevation_angles_r17.elevation_angle_left_r17_present) { + j.write_int("elevationAngleLeft-r17", footprint_info_r17.elevation_angles_r17.elevation_angle_left_r17); + } + j.end_obj(); + } + if (footprint_info_r17.radius_r17_present) { + j.write_int("radius-r17", footprint_info_r17.radius_r17); + } + j.end_obj(); + j.end_obj(); +} + // UAC-BarringInfoSet-r15 ::= SEQUENCE SRSASN_CODE uac_barr_info_set_r15_s::pack(bit_ref& bref) const { @@ -3088,6 +4202,54 @@ uint16_t uac_barr_info_set_r15_s::uac_barr_time_r15_opts::to_number() const return map_enum_number(options, 8, value, "uac_barr_info_set_r15_s::uac_barr_time_r15_e_"); } +// UAC-BarringInfoSet-v1700 ::= SEQUENCE +SRSASN_CODE uac_barr_info_set_v1700_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(uac_barr_factor_for_ai3_r17_present, 1)); + + if (uac_barr_factor_for_ai3_r17_present) { + HANDLE_CODE(uac_barr_factor_for_ai3_r17.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE uac_barr_info_set_v1700_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(uac_barr_factor_for_ai3_r17_present, 1)); + + if (uac_barr_factor_for_ai3_r17_present) { + HANDLE_CODE(uac_barr_factor_for_ai3_r17.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void uac_barr_info_set_v1700_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (uac_barr_factor_for_ai3_r17_present) { + j.write_str("uac-BarringFactorForAI3-r17", uac_barr_factor_for_ai3_r17.to_string()); + } + j.end_obj(); +} + +const char* uac_barr_info_set_v1700_s::uac_barr_factor_for_ai3_r17_opts::to_string() const +{ + static const char* options[] = { + "p00", "p05", "p10", "p15", "p20", "p25", "p30", "p40", "p50", "p60", "p70", "p75", "p80", "p85", "p90", "p95"}; + return convert_enum_idx(options, 16, value, "uac_barr_info_set_v1700_s::uac_barr_factor_for_ai3_r17_e_"); +} +float uac_barr_info_set_v1700_s::uac_barr_factor_for_ai3_r17_opts::to_number() const +{ + static const float options[] = {0.0, 0.5, 1.0, 1.5, 2.0, 2.5, 3.0, 4.0, 5.0, 6.0, 7.0, 7.5, 8.0, 8.5, 9.0, 9.5}; + return map_enum_number(options, 16, value, "uac_barr_info_set_v1700_s::uac_barr_factor_for_ai3_r17_e_"); +} +const char* uac_barr_info_set_v1700_s::uac_barr_factor_for_ai3_r17_opts::to_number_string() const +{ + static const char* options[] = { + "0.0", "0.5", "1.0", "1.5", "2.0", "2.5", "3.0", "4.0", "5.0", "6.0", "7.0", "7.5", "8.0", "8.5", "9.0", "9.5"}; + return convert_enum_idx(options, 16, value, "uac_barr_info_set_v1700_s::uac_barr_factor_for_ai3_r17_e_"); +} + // UAC-BarringPerPLMN-r15 ::= SEQUENCE SRSASN_CODE uac_barr_per_plmn_r15_s::pack(bit_ref& bref) const { @@ -3266,6 +4428,91 @@ SRSASN_CODE uac_barr_per_plmn_r15_s::uac_ac_barr_list_type_r15_c_::unpack(cbit_r return SRSASN_SUCCESS; } +// ApplicableDisasterInfo-r17 ::= CHOICE +void applicable_disaster_info_r17_c::set(types::options e) +{ + type_ = e; +} +void applicable_disaster_info_r17_c::set_no_disaster_roaming_r17() +{ + set(types::no_disaster_roaming_r17); +} +void applicable_disaster_info_r17_c::set_disaster_related_ind_r17() +{ + set(types::disaster_related_ind_r17); +} +void applicable_disaster_info_r17_c::set_common_plmns_r17() +{ + set(types::common_plmns_r17); +} +applicable_disaster_info_r17_c::ded_plmns_r17_l_& applicable_disaster_info_r17_c::set_ded_plmns_r17() +{ + set(types::ded_plmns_r17); + return c; +} +void applicable_disaster_info_r17_c::to_json(json_writer& j) const +{ + j.start_obj(); + switch (type_) { + case types::no_disaster_roaming_r17: + break; + case types::disaster_related_ind_r17: + break; + case types::common_plmns_r17: + break; + case types::ded_plmns_r17: + j.start_array("dedicatedPLMNs-r17"); + for (const auto& e1 : c) { + e1.to_json(j); + } + j.end_array(); + break; + default: + log_invalid_choice_id(type_, "applicable_disaster_info_r17_c"); + } + j.end_obj(); +} +SRSASN_CODE applicable_disaster_info_r17_c::pack(bit_ref& bref) const +{ + type_.pack(bref); + switch (type_) { + case types::no_disaster_roaming_r17: + break; + case types::disaster_related_ind_r17: + break; + case types::common_plmns_r17: + break; + case types::ded_plmns_r17: + HANDLE_CODE(pack_dyn_seq_of(bref, c, 1, 6)); + break; + default: + log_invalid_choice_id(type_, "applicable_disaster_info_r17_c"); + return SRSASN_ERROR_ENCODE_FAIL; + } + return SRSASN_SUCCESS; +} +SRSASN_CODE applicable_disaster_info_r17_c::unpack(cbit_ref& bref) +{ + types e; + e.unpack(bref); + set(e); + switch (type_) { + case types::no_disaster_roaming_r17: + break; + case types::disaster_related_ind_r17: + break; + case types::common_plmns_r17: + break; + case types::ded_plmns_r17: + HANDLE_CODE(unpack_dyn_seq_of(c, bref, 1, 6)); + break; + default: + log_invalid_choice_id(type_, "applicable_disaster_info_r17_c"); + return SRSASN_ERROR_DECODE_FAIL; + } + return SRSASN_SUCCESS; +} + // CarrierFreqInfoUTRA-v1250 ::= SEQUENCE SRSASN_CODE carrier_freq_info_utra_v1250_s::pack(bit_ref& bref) const { @@ -3431,6 +4678,47 @@ void cell_resel_serving_freq_info_v1310_s::to_json(json_writer& j) const j.end_obj(); } +// CellReselectionServingFreqInfo-v1610 ::= SEQUENCE +SRSASN_CODE cell_resel_serving_freq_info_v1610_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(alt_cell_resel_prio_r16_present, 1)); + HANDLE_CODE(bref.pack(alt_cell_resel_sub_prio_r16_present, 1)); + + if (alt_cell_resel_prio_r16_present) { + HANDLE_CODE(pack_integer(bref, alt_cell_resel_prio_r16, (uint8_t)0u, (uint8_t)7u)); + } + if (alt_cell_resel_sub_prio_r16_present) { + HANDLE_CODE(alt_cell_resel_sub_prio_r16.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE cell_resel_serving_freq_info_v1610_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(alt_cell_resel_prio_r16_present, 1)); + HANDLE_CODE(bref.unpack(alt_cell_resel_sub_prio_r16_present, 1)); + + if (alt_cell_resel_prio_r16_present) { + HANDLE_CODE(unpack_integer(alt_cell_resel_prio_r16, bref, (uint8_t)0u, (uint8_t)7u)); + } + if (alt_cell_resel_sub_prio_r16_present) { + HANDLE_CODE(alt_cell_resel_sub_prio_r16.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void cell_resel_serving_freq_info_v1610_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (alt_cell_resel_prio_r16_present) { + j.write_int("altCellReselectionPriority-r16", alt_cell_resel_prio_r16); + } + if (alt_cell_resel_sub_prio_r16_present) { + j.write_str("altCellReselectionSubPriority-r16", alt_cell_resel_sub_prio_r16.to_string()); + } + j.end_obj(); +} + // EAB-ConfigPLMN-r11 ::= SEQUENCE SRSASN_CODE eab_cfg_plmn_r11_s::pack(bit_ref& bref) const { @@ -3519,6 +4807,32 @@ void mbms_notif_cfg_v1430_s::to_json(json_writer& j) const j.end_obj(); } +// MeasIdleConfigSIB-NR-r16 ::= SEQUENCE +SRSASN_CODE meas_idle_cfg_sib_nr_r16_s::pack(bit_ref& bref) const +{ + bref.pack(ext, 1); + HANDLE_CODE(pack_dyn_seq_of(bref, meas_idle_carrier_list_nr_r16, 1, 8)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE meas_idle_cfg_sib_nr_r16_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(unpack_dyn_seq_of(meas_idle_carrier_list_nr_r16, bref, 1, 8)); + + return SRSASN_SUCCESS; +} +void meas_idle_cfg_sib_nr_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.start_array("measIdleCarrierListNR-r16"); + for (const auto& e1 : meas_idle_carrier_list_nr_r16) { + e1.to_json(j); + } + j.end_array(); + j.end_obj(); +} + // MeasIdleConfigSIB-r15 ::= SEQUENCE SRSASN_CODE meas_idle_cfg_sib_r15_s::pack(bit_ref& bref) const { @@ -4184,6 +5498,261 @@ uint8_t sl_disc_cfg_remote_ue_r13_s::hyst_max_r13_opts::to_number() const return map_enum_number(options, 5, value, "sl_disc_cfg_remote_ue_r13_s::hyst_max_r13_e_"); } +// ServingSatelliteInfo-r17 ::= SEQUENCE +SRSASN_CODE serving_satellite_info_r17_s::pack(bit_ref& bref) const +{ + bref.pack(ext, 1); + HANDLE_CODE(bref.pack(epoch_time_r17_present, 1)); + HANDLE_CODE(bref.pack(k_mac_r17_present, 1)); + + HANDLE_CODE(ephemeris_info_r17.pack(bref)); + HANDLE_CODE(bref.pack(nta_common_params_minus17.nta_common_r17_present, 1)); + HANDLE_CODE(bref.pack(nta_common_params_minus17.nta_common_drift_r17_present, 1)); + HANDLE_CODE(bref.pack(nta_common_params_minus17.nta_common_drift_variation_r17_present, 1)); + if (nta_common_params_minus17.nta_common_r17_present) { + HANDLE_CODE(pack_integer(bref, nta_common_params_minus17.nta_common_r17, (uint32_t)0u, (uint32_t)8316827u)); + } + if (nta_common_params_minus17.nta_common_drift_r17_present) { + HANDLE_CODE(pack_integer(bref, nta_common_params_minus17.nta_common_drift_r17, (int32_t)-261935, (int32_t)261935)); + } + if (nta_common_params_minus17.nta_common_drift_variation_r17_present) { + HANDLE_CODE( + pack_integer(bref, nta_common_params_minus17.nta_common_drift_variation_r17, (uint16_t)0u, (uint16_t)29479u)); + } + HANDLE_CODE(ul_sync_validity_dur_r17.pack(bref)); + if (epoch_time_r17_present) { + HANDLE_CODE(pack_integer(bref, epoch_time_r17.start_sfn_r17, (uint16_t)0u, (uint16_t)1023u)); + HANDLE_CODE(pack_integer(bref, epoch_time_r17.start_sub_frame_r17, (uint8_t)0u, (uint8_t)9u)); + } + HANDLE_CODE(pack_integer(bref, k_offset_r17, (uint16_t)0u, (uint16_t)1023u)); + if (k_mac_r17_present) { + HANDLE_CODE(pack_integer(bref, k_mac_r17, (uint16_t)1u, (uint16_t)512u)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE serving_satellite_info_r17_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(bref.unpack(epoch_time_r17_present, 1)); + HANDLE_CODE(bref.unpack(k_mac_r17_present, 1)); + + HANDLE_CODE(ephemeris_info_r17.unpack(bref)); + HANDLE_CODE(bref.unpack(nta_common_params_minus17.nta_common_r17_present, 1)); + HANDLE_CODE(bref.unpack(nta_common_params_minus17.nta_common_drift_r17_present, 1)); + HANDLE_CODE(bref.unpack(nta_common_params_minus17.nta_common_drift_variation_r17_present, 1)); + if (nta_common_params_minus17.nta_common_r17_present) { + HANDLE_CODE(unpack_integer(nta_common_params_minus17.nta_common_r17, bref, (uint32_t)0u, (uint32_t)8316827u)); + } + if (nta_common_params_minus17.nta_common_drift_r17_present) { + HANDLE_CODE( + unpack_integer(nta_common_params_minus17.nta_common_drift_r17, bref, (int32_t)-261935, (int32_t)261935)); + } + if (nta_common_params_minus17.nta_common_drift_variation_r17_present) { + HANDLE_CODE( + unpack_integer(nta_common_params_minus17.nta_common_drift_variation_r17, bref, (uint16_t)0u, (uint16_t)29479u)); + } + HANDLE_CODE(ul_sync_validity_dur_r17.unpack(bref)); + if (epoch_time_r17_present) { + HANDLE_CODE(unpack_integer(epoch_time_r17.start_sfn_r17, bref, (uint16_t)0u, (uint16_t)1023u)); + HANDLE_CODE(unpack_integer(epoch_time_r17.start_sub_frame_r17, bref, (uint8_t)0u, (uint8_t)9u)); + } + HANDLE_CODE(unpack_integer(k_offset_r17, bref, (uint16_t)0u, (uint16_t)1023u)); + if (k_mac_r17_present) { + HANDLE_CODE(unpack_integer(k_mac_r17, bref, (uint16_t)1u, (uint16_t)512u)); + } + + return SRSASN_SUCCESS; +} +void serving_satellite_info_r17_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_fieldname("ephemerisInfo-r17"); + ephemeris_info_r17.to_json(j); + j.write_fieldname("nta-CommonParameters-17"); + j.start_obj(); + if (nta_common_params_minus17.nta_common_r17_present) { + j.write_int("nta-Common-r17", nta_common_params_minus17.nta_common_r17); + } + if (nta_common_params_minus17.nta_common_drift_r17_present) { + j.write_int("nta-CommonDrift-r17", nta_common_params_minus17.nta_common_drift_r17); + } + if (nta_common_params_minus17.nta_common_drift_variation_r17_present) { + j.write_int("nta-CommonDriftVariation-r17", nta_common_params_minus17.nta_common_drift_variation_r17); + } + j.end_obj(); + j.write_str("ul-SyncValidityDuration-r17", ul_sync_validity_dur_r17.to_string()); + if (epoch_time_r17_present) { + j.write_fieldname("epochTime-r17"); + j.start_obj(); + j.write_int("startSFN-r17", epoch_time_r17.start_sfn_r17); + j.write_int("startSubFrame-r17", epoch_time_r17.start_sub_frame_r17); + j.end_obj(); + } + j.write_int("k-Offset-r17", k_offset_r17); + if (k_mac_r17_present) { + j.write_int("k-Mac-r17", k_mac_r17); + } + j.end_obj(); +} + +void serving_satellite_info_r17_s::ephemeris_info_r17_c_::destroy_() +{ + switch (type_) { + case types::state_vectors: + c.destroy<ephemeris_state_vectors_r17_s>(); + break; + case types::orbital_params: + c.destroy<ephemeris_orbital_params_r17_s>(); + break; + default: + break; + } +} +void serving_satellite_info_r17_s::ephemeris_info_r17_c_::set(types::options e) +{ + destroy_(); + type_ = e; + switch (type_) { + case types::state_vectors: + c.init<ephemeris_state_vectors_r17_s>(); + break; + case types::orbital_params: + c.init<ephemeris_orbital_params_r17_s>(); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "serving_satellite_info_r17_s::ephemeris_info_r17_c_"); + } +} +serving_satellite_info_r17_s::ephemeris_info_r17_c_::ephemeris_info_r17_c_( + const serving_satellite_info_r17_s::ephemeris_info_r17_c_& other) +{ + type_ = other.type(); + switch (type_) { + case types::state_vectors: + c.init(other.c.get<ephemeris_state_vectors_r17_s>()); + break; + case types::orbital_params: + c.init(other.c.get<ephemeris_orbital_params_r17_s>()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "serving_satellite_info_r17_s::ephemeris_info_r17_c_"); + } +} +serving_satellite_info_r17_s::ephemeris_info_r17_c_& serving_satellite_info_r17_s::ephemeris_info_r17_c_::operator=( + const serving_satellite_info_r17_s::ephemeris_info_r17_c_& other) +{ + if (this == &other) { + return *this; + } + set(other.type()); + switch (type_) { + case types::state_vectors: + c.set(other.c.get<ephemeris_state_vectors_r17_s>()); + break; + case types::orbital_params: + c.set(other.c.get<ephemeris_orbital_params_r17_s>()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "serving_satellite_info_r17_s::ephemeris_info_r17_c_"); + } + + return *this; +} +ephemeris_state_vectors_r17_s& serving_satellite_info_r17_s::ephemeris_info_r17_c_::set_state_vectors() +{ + set(types::state_vectors); + return c.get<ephemeris_state_vectors_r17_s>(); +} +ephemeris_orbital_params_r17_s& serving_satellite_info_r17_s::ephemeris_info_r17_c_::set_orbital_params() +{ + set(types::orbital_params); + return c.get<ephemeris_orbital_params_r17_s>(); +} +void serving_satellite_info_r17_s::ephemeris_info_r17_c_::to_json(json_writer& j) const +{ + j.start_obj(); + switch (type_) { + case types::state_vectors: + j.write_fieldname("stateVectors"); + c.get<ephemeris_state_vectors_r17_s>().to_json(j); + break; + case types::orbital_params: + j.write_fieldname("orbitalParameters"); + c.get<ephemeris_orbital_params_r17_s>().to_json(j); + break; + default: + log_invalid_choice_id(type_, "serving_satellite_info_r17_s::ephemeris_info_r17_c_"); + } + j.end_obj(); +} +SRSASN_CODE serving_satellite_info_r17_s::ephemeris_info_r17_c_::pack(bit_ref& bref) const +{ + type_.pack(bref); + switch (type_) { + case types::state_vectors: + HANDLE_CODE(c.get<ephemeris_state_vectors_r17_s>().pack(bref)); + break; + case types::orbital_params: + HANDLE_CODE(c.get<ephemeris_orbital_params_r17_s>().pack(bref)); + break; + default: + log_invalid_choice_id(type_, "serving_satellite_info_r17_s::ephemeris_info_r17_c_"); + return SRSASN_ERROR_ENCODE_FAIL; + } + return SRSASN_SUCCESS; +} +SRSASN_CODE serving_satellite_info_r17_s::ephemeris_info_r17_c_::unpack(cbit_ref& bref) +{ + types e; + e.unpack(bref); + set(e); + switch (type_) { + case types::state_vectors: + HANDLE_CODE(c.get<ephemeris_state_vectors_r17_s>().unpack(bref)); + break; + case types::orbital_params: + HANDLE_CODE(c.get<ephemeris_orbital_params_r17_s>().unpack(bref)); + break; + default: + log_invalid_choice_id(type_, "serving_satellite_info_r17_s::ephemeris_info_r17_c_"); + return SRSASN_ERROR_DECODE_FAIL; + } + return SRSASN_SUCCESS; +} + +const char* serving_satellite_info_r17_s::ul_sync_validity_dur_r17_opts::to_string() const +{ + static const char* options[] = {"s5", + "s10", + "s15", + "s20", + "s25", + "s30", + "s35", + "s40", + "s45", + "s50", + "s55", + "s60", + "s120", + "s180", + "s240", + "s900"}; + return convert_enum_idx(options, 16, value, "serving_satellite_info_r17_s::ul_sync_validity_dur_r17_e_"); +} +uint16_t serving_satellite_info_r17_s::ul_sync_validity_dur_r17_opts::to_number() const +{ + static const uint16_t options[] = {5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 120, 180, 240, 900}; + return map_enum_number(options, 16, value, "serving_satellite_info_r17_s::ul_sync_validity_dur_r17_e_"); +} + // UAC-AC1-SelectAssistInfo-r15 ::= ENUMERATED const char* uac_ac1_select_assist_info_r15_opts::to_string() const { @@ -4191,6 +5760,13 @@ const char* uac_ac1_select_assist_info_r15_opts::to_string() const return convert_enum_idx(options, 3, value, "uac_ac1_select_assist_info_r15_e"); } +// UAC-AC1-SelectAssistInfo-r16 ::= ENUMERATED +const char* uac_ac1_select_assist_info_r16_opts::to_string() const +{ + static const char* options[] = {"a", "b", "c", "notConfigured"}; + return convert_enum_idx(options, 4, value, "uac_ac1_select_assist_info_r16_e"); +} + // SystemInformation-v8a0-IEs ::= SEQUENCE SRSASN_CODE sys_info_v8a0_ies_s::pack(bit_ref& bref) const { @@ -4506,6 +6082,8 @@ SRSASN_CODE sib_type13_r9_s::pack(bit_ref& bref) const if (ext) { ext_groups_packer_guard group_flags; group_flags[0] |= notif_cfg_v1430.is_present(); + group_flags[1] |= mbsfn_area_info_list_r16.is_present(); + group_flags[2] |= mbsfn_area_info_list_r17.is_present(); group_flags.pack(bref); if (group_flags[0]) { @@ -4516,6 +6094,22 @@ SRSASN_CODE sib_type13_r9_s::pack(bit_ref& bref) const HANDLE_CODE(notif_cfg_v1430->pack(bref)); } } + if (group_flags[1]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(mbsfn_area_info_list_r16.is_present(), 1)); + if (mbsfn_area_info_list_r16.is_present()) { + HANDLE_CODE(pack_dyn_seq_of(bref, *mbsfn_area_info_list_r16, 1, 8)); + } + } + if (group_flags[2]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(mbsfn_area_info_list_r17.is_present(), 1)); + if (mbsfn_area_info_list_r17.is_present()) { + HANDLE_CODE(pack_dyn_seq_of(bref, *mbsfn_area_info_list_r17, 1, 8)); + } + } } return SRSASN_SUCCESS; } @@ -4531,7 +6125,7 @@ SRSASN_CODE sib_type13_r9_s::unpack(cbit_ref& bref) } if (ext) { - ext_groups_unpacker_guard group_flags(1); + ext_groups_unpacker_guard group_flags(3); group_flags.unpack(bref); if (group_flags[0]) { @@ -4544,6 +6138,26 @@ SRSASN_CODE sib_type13_r9_s::unpack(cbit_ref& bref) HANDLE_CODE(notif_cfg_v1430->unpack(bref)); } } + if (group_flags[1]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + bool mbsfn_area_info_list_r16_present; + HANDLE_CODE(bref.unpack(mbsfn_area_info_list_r16_present, 1)); + mbsfn_area_info_list_r16.set_present(mbsfn_area_info_list_r16_present); + if (mbsfn_area_info_list_r16.is_present()) { + HANDLE_CODE(unpack_dyn_seq_of(*mbsfn_area_info_list_r16, bref, 1, 8)); + } + } + if (group_flags[2]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + bool mbsfn_area_info_list_r17_present; + HANDLE_CODE(bref.unpack(mbsfn_area_info_list_r17_present, 1)); + mbsfn_area_info_list_r17.set_present(mbsfn_area_info_list_r17_present); + if (mbsfn_area_info_list_r17.is_present()) { + HANDLE_CODE(unpack_dyn_seq_of(*mbsfn_area_info_list_r17, bref, 1, 8)); + } + } } return SRSASN_SUCCESS; } @@ -4565,6 +6179,20 @@ void sib_type13_r9_s::to_json(json_writer& j) const j.write_fieldname("notificationConfig-v1430"); notif_cfg_v1430->to_json(j); } + if (mbsfn_area_info_list_r16.is_present()) { + j.start_array("mbsfn-AreaInfoList-r16"); + for (const auto& e1 : *mbsfn_area_info_list_r16) { + e1.to_json(j); + } + j.end_array(); + } + if (mbsfn_area_info_list_r17.is_present()) { + j.start_array("mbsfn-AreaInfoList-r17"); + for (const auto& e1 : *mbsfn_area_info_list_r17) { + e1.to_json(j); + } + j.end_array(); + } } j.end_obj(); } @@ -5905,6 +7533,21 @@ SRSASN_CODE sib_type21_r14_s::pack(bit_ref& bref) const HANDLE_CODE(late_non_crit_ext.pack(bref)); } + if (ext) { + ext_groups_packer_guard group_flags; + group_flags[0] |= anchor_carrier_freq_list_nr_r16.is_present(); + group_flags.pack(bref); + + if (group_flags[0]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(anchor_carrier_freq_list_nr_r16.is_present(), 1)); + if (anchor_carrier_freq_list_nr_r16.is_present()) { + HANDLE_CODE( + pack_dyn_seq_of(bref, *anchor_carrier_freq_list_nr_r16, 1, 8, integer_packer<uint32_t>(0, 3279165))); + } + } + } return SRSASN_SUCCESS; } SRSASN_CODE sib_type21_r14_s::unpack(cbit_ref& bref) @@ -5920,6 +7563,22 @@ SRSASN_CODE sib_type21_r14_s::unpack(cbit_ref& bref) HANDLE_CODE(late_non_crit_ext.unpack(bref)); } + if (ext) { + ext_groups_unpacker_guard group_flags(1); + group_flags.unpack(bref); + + if (group_flags[0]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + bool anchor_carrier_freq_list_nr_r16_present; + HANDLE_CODE(bref.unpack(anchor_carrier_freq_list_nr_r16_present, 1)); + anchor_carrier_freq_list_nr_r16.set_present(anchor_carrier_freq_list_nr_r16_present); + if (anchor_carrier_freq_list_nr_r16.is_present()) { + HANDLE_CODE( + unpack_dyn_seq_of(*anchor_carrier_freq_list_nr_r16, bref, 1, 8, integer_packer<uint32_t>(0, 3279165))); + } + } + } return SRSASN_SUCCESS; } void sib_type21_r14_s::to_json(json_writer& j) const @@ -5932,6 +7591,15 @@ void sib_type21_r14_s::to_json(json_writer& j) const if (late_non_crit_ext_present) { j.write_str("lateNonCriticalExtension", late_non_crit_ext.to_string()); } + if (ext) { + if (anchor_carrier_freq_list_nr_r16.is_present()) { + j.start_array("anchorCarrierFreqListNR-r16"); + for (const auto& e1 : *anchor_carrier_freq_list_nr_r16) { + j.write_int(e1); + } + j.end_array(); + } + } j.end_obj(); } @@ -5954,6 +7622,38 @@ SRSASN_CODE sib_type24_r15_s::pack(bit_ref& bref) const HANDLE_CODE(late_non_crit_ext.pack(bref)); } + if (ext) { + ext_groups_packer_guard group_flags; + group_flags[0] |= carrier_freq_list_nr_v1610.is_present(); + group_flags[1] |= carrier_freq_list_nr_v1700.is_present(); + group_flags[2] |= carrier_freq_list_nr_v1720.is_present(); + group_flags.pack(bref); + + if (group_flags[0]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(carrier_freq_list_nr_v1610.is_present(), 1)); + if (carrier_freq_list_nr_v1610.is_present()) { + HANDLE_CODE(pack_dyn_seq_of(bref, *carrier_freq_list_nr_v1610, 1, 8)); + } + } + if (group_flags[1]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(carrier_freq_list_nr_v1700.is_present(), 1)); + if (carrier_freq_list_nr_v1700.is_present()) { + HANDLE_CODE(pack_dyn_seq_of(bref, *carrier_freq_list_nr_v1700, 1, 8)); + } + } + if (group_flags[2]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(carrier_freq_list_nr_v1720.is_present(), 1)); + if (carrier_freq_list_nr_v1720.is_present()) { + HANDLE_CODE(pack_dyn_seq_of(bref, *carrier_freq_list_nr_v1720, 1, 8)); + } + } + } return SRSASN_SUCCESS; } SRSASN_CODE sib_type24_r15_s::unpack(cbit_ref& bref) @@ -5974,6 +7674,41 @@ SRSASN_CODE sib_type24_r15_s::unpack(cbit_ref& bref) HANDLE_CODE(late_non_crit_ext.unpack(bref)); } + if (ext) { + ext_groups_unpacker_guard group_flags(3); + group_flags.unpack(bref); + + if (group_flags[0]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + bool carrier_freq_list_nr_v1610_present; + HANDLE_CODE(bref.unpack(carrier_freq_list_nr_v1610_present, 1)); + carrier_freq_list_nr_v1610.set_present(carrier_freq_list_nr_v1610_present); + if (carrier_freq_list_nr_v1610.is_present()) { + HANDLE_CODE(unpack_dyn_seq_of(*carrier_freq_list_nr_v1610, bref, 1, 8)); + } + } + if (group_flags[1]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + bool carrier_freq_list_nr_v1700_present; + HANDLE_CODE(bref.unpack(carrier_freq_list_nr_v1700_present, 1)); + carrier_freq_list_nr_v1700.set_present(carrier_freq_list_nr_v1700_present); + if (carrier_freq_list_nr_v1700.is_present()) { + HANDLE_CODE(unpack_dyn_seq_of(*carrier_freq_list_nr_v1700, bref, 1, 8)); + } + } + if (group_flags[2]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + bool carrier_freq_list_nr_v1720_present; + HANDLE_CODE(bref.unpack(carrier_freq_list_nr_v1720_present, 1)); + carrier_freq_list_nr_v1720.set_present(carrier_freq_list_nr_v1720_present); + if (carrier_freq_list_nr_v1720.is_present()) { + HANDLE_CODE(unpack_dyn_seq_of(*carrier_freq_list_nr_v1720, bref, 1, 8)); + } + } + } return SRSASN_SUCCESS; } void sib_type24_r15_s::to_json(json_writer& j) const @@ -5994,6 +7729,29 @@ void sib_type24_r15_s::to_json(json_writer& j) const if (late_non_crit_ext_present) { j.write_str("lateNonCriticalExtension", late_non_crit_ext.to_string()); } + if (ext) { + if (carrier_freq_list_nr_v1610.is_present()) { + j.start_array("carrierFreqListNR-v1610"); + for (const auto& e1 : *carrier_freq_list_nr_v1610) { + e1.to_json(j); + } + j.end_array(); + } + if (carrier_freq_list_nr_v1700.is_present()) { + j.start_array("carrierFreqListNR-v1700"); + for (const auto& e1 : *carrier_freq_list_nr_v1700) { + e1.to_json(j); + } + j.end_array(); + } + if (carrier_freq_list_nr_v1720.is_present()) { + j.start_array("carrierFreqListNR-v1720"); + for (const auto& e1 : *carrier_freq_list_nr_v1720) { + e1.to_json(j); + } + j.end_array(); + } + } j.end_obj(); } @@ -6020,6 +7778,38 @@ SRSASN_CODE sib_type25_r15_s::pack(bit_ref& bref) const HANDLE_CODE(late_non_crit_ext.pack(bref)); } + if (ext) { + ext_groups_packer_guard group_flags; + group_flags[0] |= ab_per_rsrp_r16_present; + group_flags[1] |= uac_ac1_select_assist_info_r16.is_present(); + group_flags[2] |= uac_barr_info_set_list_v1700.is_present(); + group_flags.pack(bref); + + if (group_flags[0]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(ab_per_rsrp_r16_present, 1)); + if (ab_per_rsrp_r16_present) { + HANDLE_CODE(ab_per_rsrp_r16.pack(bref)); + } + } + if (group_flags[1]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(uac_ac1_select_assist_info_r16.is_present(), 1)); + if (uac_ac1_select_assist_info_r16.is_present()) { + HANDLE_CODE(pack_dyn_seq_of(bref, *uac_ac1_select_assist_info_r16, 2, 6)); + } + } + if (group_flags[2]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(uac_barr_info_set_list_v1700.is_present(), 1)); + if (uac_barr_info_set_list_v1700.is_present()) { + HANDLE_CODE(pack_dyn_seq_of(bref, *uac_barr_info_set_list_v1700, 1, 8)); + } + } + } return SRSASN_SUCCESS; } SRSASN_CODE sib_type25_r15_s::unpack(cbit_ref& bref) @@ -6044,6 +7834,39 @@ SRSASN_CODE sib_type25_r15_s::unpack(cbit_ref& bref) HANDLE_CODE(late_non_crit_ext.unpack(bref)); } + if (ext) { + ext_groups_unpacker_guard group_flags(3); + group_flags.unpack(bref); + + if (group_flags[0]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.unpack(ab_per_rsrp_r16_present, 1)); + if (ab_per_rsrp_r16_present) { + HANDLE_CODE(ab_per_rsrp_r16.unpack(bref)); + } + } + if (group_flags[1]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + bool uac_ac1_select_assist_info_r16_present; + HANDLE_CODE(bref.unpack(uac_ac1_select_assist_info_r16_present, 1)); + uac_ac1_select_assist_info_r16.set_present(uac_ac1_select_assist_info_r16_present); + if (uac_ac1_select_assist_info_r16.is_present()) { + HANDLE_CODE(unpack_dyn_seq_of(*uac_ac1_select_assist_info_r16, bref, 2, 6)); + } + } + if (group_flags[2]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + bool uac_barr_info_set_list_v1700_present; + HANDLE_CODE(bref.unpack(uac_barr_info_set_list_v1700_present, 1)); + uac_barr_info_set_list_v1700.set_present(uac_barr_info_set_list_v1700_present); + if (uac_barr_info_set_list_v1700.is_present()) { + HANDLE_CODE(unpack_dyn_seq_of(*uac_barr_info_set_list_v1700, bref, 1, 8)); + } + } + } return SRSASN_SUCCESS; } void sib_type25_r15_s::to_json(json_writer& j) const @@ -6075,6 +7898,25 @@ void sib_type25_r15_s::to_json(json_writer& j) const if (late_non_crit_ext_present) { j.write_str("lateNonCriticalExtension", late_non_crit_ext.to_string()); } + if (ext) { + if (ab_per_rsrp_r16_present) { + j.write_str("ab-PerRSRP-r16", ab_per_rsrp_r16.to_string()); + } + if (uac_ac1_select_assist_info_r16.is_present()) { + j.start_array("uac-AC1-SelectAssistInfo-r16"); + for (const auto& e1 : *uac_ac1_select_assist_info_r16) { + j.write_str(e1.to_string()); + } + j.end_array(); + } + if (uac_barr_info_set_list_v1700.is_present()) { + j.start_array("uac-BarringInfoSetList-v1700"); + for (const auto& e1 : *uac_barr_info_set_list_v1700) { + e1.to_json(j); + } + j.end_array(); + } + } j.end_obj(); } @@ -6208,6 +8050,17 @@ SRSASN_CODE sib_type25_r15_s::uac_ac1_select_assist_info_r15_c_::unpack(cbit_ref return SRSASN_SUCCESS; } +const char* sib_type25_r15_s::ab_per_rsrp_r16_opts::to_string() const +{ + static const char* options[] = {"thresh0", "thresh1", "thresh2", "thresh3"}; + return convert_enum_idx(options, 4, value, "sib_type25_r15_s::ab_per_rsrp_r16_e_"); +} +uint8_t sib_type25_r15_s::ab_per_rsrp_r16_opts::to_number() const +{ + static const uint8_t options[] = {0, 1, 2, 3}; + return map_enum_number(options, 4, value, "sib_type25_r15_s::ab_per_rsrp_r16_e_"); +} + // SystemInformationBlockType26-r15 ::= SEQUENCE SRSASN_CODE sib_type26_r15_s::pack(bit_ref& bref) const { @@ -6336,6 +8189,202 @@ void sib_type26_r15_s::to_json(json_writer& j) const j.end_obj(); } +// SystemInformationBlockType26a-r16 ::= SEQUENCE +SRSASN_CODE sib_type26a_r16_s::pack(bit_ref& bref) const +{ + bref.pack(ext, 1); + HANDLE_CODE(bref.pack(late_non_crit_ext_present, 1)); + + HANDLE_CODE(pack_dyn_seq_of(bref, plmn_info_list_r16, 0, 6)); + HANDLE_CODE(pack_dyn_seq_of(bref, band_list_endc_r16, 1, 10, integer_packer<uint16_t>(1, 1024))); + if (late_non_crit_ext_present) { + HANDLE_CODE(late_non_crit_ext.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE sib_type26a_r16_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(bref.unpack(late_non_crit_ext_present, 1)); + + HANDLE_CODE(unpack_dyn_seq_of(plmn_info_list_r16, bref, 0, 6)); + HANDLE_CODE(unpack_dyn_seq_of(band_list_endc_r16, bref, 1, 10, integer_packer<uint16_t>(1, 1024))); + if (late_non_crit_ext_present) { + HANDLE_CODE(late_non_crit_ext.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void sib_type26a_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.start_array("plmn-InfoList-r16"); + for (const auto& e1 : plmn_info_list_r16) { + e1.to_json(j); + } + j.end_array(); + j.start_array("bandListENDC-r16"); + for (const auto& e1 : band_list_endc_r16) { + j.write_int(e1); + } + j.end_array(); + if (late_non_crit_ext_present) { + j.write_str("lateNonCriticalExtension", late_non_crit_ext.to_string()); + } + j.end_obj(); +} + +// SystemInformationBlockType27-r16 ::= SEQUENCE +SRSASN_CODE sib_type27_r16_s::pack(bit_ref& bref) const +{ + bref.pack(ext, 1); + HANDLE_CODE(bref.pack(carrier_freq_list_nbiot_r16_present, 1)); + HANDLE_CODE(bref.pack(late_non_crit_ext_present, 1)); + + if (carrier_freq_list_nbiot_r16_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, carrier_freq_list_nbiot_r16, 1, 8)); + } + if (late_non_crit_ext_present) { + HANDLE_CODE(late_non_crit_ext.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE sib_type27_r16_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(bref.unpack(carrier_freq_list_nbiot_r16_present, 1)); + HANDLE_CODE(bref.unpack(late_non_crit_ext_present, 1)); + + if (carrier_freq_list_nbiot_r16_present) { + HANDLE_CODE(unpack_dyn_seq_of(carrier_freq_list_nbiot_r16, bref, 1, 8)); + } + if (late_non_crit_ext_present) { + HANDLE_CODE(late_non_crit_ext.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void sib_type27_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (carrier_freq_list_nbiot_r16_present) { + j.start_array("carrierFreqListNBIOT-r16"); + for (const auto& e1 : carrier_freq_list_nbiot_r16) { + e1.to_json(j); + } + j.end_array(); + } + if (late_non_crit_ext_present) { + j.write_str("lateNonCriticalExtension", late_non_crit_ext.to_string()); + } + j.end_obj(); +} + +// SystemInformationBlockType28-r16 ::= SEQUENCE +SRSASN_CODE sib_type28_r16_s::pack(bit_ref& bref) const +{ + bref.pack(ext, 1); + HANDLE_CODE(bref.pack(late_non_crit_ext_present, 1)); + + HANDLE_CODE(pack_integer(bref, segment_num_r16, (uint8_t)0u, (uint8_t)63u)); + HANDLE_CODE(segment_type_r16.pack(bref)); + HANDLE_CODE(segment_container_r16.pack(bref)); + if (late_non_crit_ext_present) { + HANDLE_CODE(late_non_crit_ext.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE sib_type28_r16_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(bref.unpack(late_non_crit_ext_present, 1)); + + HANDLE_CODE(unpack_integer(segment_num_r16, bref, (uint8_t)0u, (uint8_t)63u)); + HANDLE_CODE(segment_type_r16.unpack(bref)); + HANDLE_CODE(segment_container_r16.unpack(bref)); + if (late_non_crit_ext_present) { + HANDLE_CODE(late_non_crit_ext.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void sib_type28_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_int("segmentNumber-r16", segment_num_r16); + j.write_str("segmentType-r16", segment_type_r16.to_string()); + j.write_str("segmentContainer-r16", segment_container_r16.to_string()); + if (late_non_crit_ext_present) { + j.write_str("lateNonCriticalExtension", late_non_crit_ext.to_string()); + } + j.end_obj(); +} + +const char* sib_type28_r16_s::segment_type_r16_opts::to_string() const +{ + static const char* options[] = {"notLastSegment", "lastSegment"}; + return convert_enum_idx(options, 2, value, "sib_type28_r16_s::segment_type_r16_e_"); +} + +// SystemInformationBlockType29-r16 ::= SEQUENCE +SRSASN_CODE sib_type29_r16_s::pack(bit_ref& bref) const +{ + bref.pack(ext, 1); + HANDLE_CODE(bref.pack(res_reserv_cfg_common_dl_r16_present, 1)); + HANDLE_CODE(bref.pack(res_reserv_cfg_common_ul_r16_present, 1)); + HANDLE_CODE(bref.pack(late_non_crit_ext_present, 1)); + + if (res_reserv_cfg_common_dl_r16_present) { + HANDLE_CODE(res_reserv_cfg_common_dl_r16.pack(bref)); + } + if (res_reserv_cfg_common_ul_r16_present) { + HANDLE_CODE(res_reserv_cfg_common_ul_r16.pack(bref)); + } + if (late_non_crit_ext_present) { + HANDLE_CODE(late_non_crit_ext.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE sib_type29_r16_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(bref.unpack(res_reserv_cfg_common_dl_r16_present, 1)); + HANDLE_CODE(bref.unpack(res_reserv_cfg_common_ul_r16_present, 1)); + HANDLE_CODE(bref.unpack(late_non_crit_ext_present, 1)); + + if (res_reserv_cfg_common_dl_r16_present) { + HANDLE_CODE(res_reserv_cfg_common_dl_r16.unpack(bref)); + } + if (res_reserv_cfg_common_ul_r16_present) { + HANDLE_CODE(res_reserv_cfg_common_ul_r16.unpack(bref)); + } + if (late_non_crit_ext_present) { + HANDLE_CODE(late_non_crit_ext.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void sib_type29_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (res_reserv_cfg_common_dl_r16_present) { + j.write_fieldname("resourceReservationConfigCommonDL-r16"); + res_reserv_cfg_common_dl_r16.to_json(j); + } + if (res_reserv_cfg_common_ul_r16_present) { + j.write_fieldname("resourceReservationConfigCommonUL-r16"); + res_reserv_cfg_common_ul_r16.to_json(j); + } + if (late_non_crit_ext_present) { + j.write_str("lateNonCriticalExtension", late_non_crit_ext.to_string()); + } + j.end_obj(); +} + // SystemInformationBlockType3 ::= SEQUENCE SRSASN_CODE sib_type3_s::pack(bit_ref& bref) const { @@ -6393,6 +8442,8 @@ SRSASN_CODE sib_type3_s::pack(bit_ref& bref) const group_flags[8] |= cell_resel_info_hsdn_r15.is_present(); group_flags[8] |= cell_sel_info_ce_v1530.is_present(); group_flags[8] |= crs_intf_mitig_neigh_cells_ce_r15_present; + group_flags[9] |= cell_resel_serving_freq_info_v1610.is_present(); + group_flags[10] |= t_service_r17_present; group_flags.pack(bref); if (group_flags[0]) { @@ -6495,6 +8546,22 @@ SRSASN_CODE sib_type3_s::pack(bit_ref& bref) const HANDLE_CODE(cell_sel_info_ce_v1530->pack(bref)); } } + if (group_flags[9]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(cell_resel_serving_freq_info_v1610.is_present(), 1)); + if (cell_resel_serving_freq_info_v1610.is_present()) { + HANDLE_CODE(cell_resel_serving_freq_info_v1610->pack(bref)); + } + } + if (group_flags[10]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(t_service_r17_present, 1)); + if (t_service_r17_present) { + HANDLE_CODE(pack_integer(bref, t_service_r17, (uint32_t)0u, (uint32_t)1048575u)); + } + } } return SRSASN_SUCCESS; } @@ -6536,7 +8603,7 @@ SRSASN_CODE sib_type3_s::unpack(cbit_ref& bref) } if (ext) { - ext_groups_unpacker_guard group_flags(9); + ext_groups_unpacker_guard group_flags(11); group_flags.unpack(bref); if (group_flags[0]) { @@ -6659,6 +8726,24 @@ SRSASN_CODE sib_type3_s::unpack(cbit_ref& bref) HANDLE_CODE(cell_sel_info_ce_v1530->unpack(bref)); } } + if (group_flags[9]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + bool cell_resel_serving_freq_info_v1610_present; + HANDLE_CODE(bref.unpack(cell_resel_serving_freq_info_v1610_present, 1)); + cell_resel_serving_freq_info_v1610.set_present(cell_resel_serving_freq_info_v1610_present); + if (cell_resel_serving_freq_info_v1610.is_present()) { + HANDLE_CODE(cell_resel_serving_freq_info_v1610->unpack(bref)); + } + } + if (group_flags[10]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.unpack(t_service_r17_present, 1)); + if (t_service_r17_present) { + HANDLE_CODE(unpack_integer(t_service_r17, bref, (uint32_t)0u, (uint32_t)1048575u)); + } + } } return SRSASN_SUCCESS; } @@ -6777,6 +8862,13 @@ void sib_type3_s::to_json(json_writer& j) const if (crs_intf_mitig_neigh_cells_ce_r15_present) { j.write_str("crs-IntfMitigNeighCellsCE-r15", "enabled"); } + if (cell_resel_serving_freq_info_v1610.is_present()) { + j.write_fieldname("cellReselectionServingFreqInfo-v1610"); + cell_resel_serving_freq_info_v1610->to_json(j); + } + if (t_service_r17_present) { + j.write_int("t-Service-r17", t_service_r17); + } } j.end_obj(); } @@ -6842,19 +8934,164 @@ int8_t sib_type3_s::cell_resel_info_common_s_::speed_state_resel_pars_s_::q_hyst options, 4, value, "sib_type3_s::cell_resel_info_common_s_::speed_state_resel_pars_s_::q_hyst_sf_s_::sf_high_e_"); } +// SystemInformationBlockType30-r17 ::= SEQUENCE +SRSASN_CODE sib_type30_r17_s::pack(bit_ref& bref) const +{ + bref.pack(ext, 1); + HANDLE_CODE(bref.pack(common_plmns_with_disaster_condition_r17_present, 1)); + HANDLE_CODE(bref.pack(applicable_disaster_info_list_r17_present, 1)); + HANDLE_CODE(bref.pack(late_non_crit_ext_present, 1)); + + if (common_plmns_with_disaster_condition_r17_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, common_plmns_with_disaster_condition_r17, 1, 6)); + } + if (applicable_disaster_info_list_r17_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, applicable_disaster_info_list_r17, 1, 6)); + } + if (late_non_crit_ext_present) { + HANDLE_CODE(late_non_crit_ext.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE sib_type30_r17_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(bref.unpack(common_plmns_with_disaster_condition_r17_present, 1)); + HANDLE_CODE(bref.unpack(applicable_disaster_info_list_r17_present, 1)); + HANDLE_CODE(bref.unpack(late_non_crit_ext_present, 1)); + + if (common_plmns_with_disaster_condition_r17_present) { + HANDLE_CODE(unpack_dyn_seq_of(common_plmns_with_disaster_condition_r17, bref, 1, 6)); + } + if (applicable_disaster_info_list_r17_present) { + HANDLE_CODE(unpack_dyn_seq_of(applicable_disaster_info_list_r17, bref, 1, 6)); + } + if (late_non_crit_ext_present) { + HANDLE_CODE(late_non_crit_ext.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void sib_type30_r17_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (common_plmns_with_disaster_condition_r17_present) { + j.start_array("commonPLMNsWithDisasterCondition-r17"); + for (const auto& e1 : common_plmns_with_disaster_condition_r17) { + e1.to_json(j); + } + j.end_array(); + } + if (applicable_disaster_info_list_r17_present) { + j.start_array("applicableDisasterInfoList-r17"); + for (const auto& e1 : applicable_disaster_info_list_r17) { + e1.to_json(j); + } + j.end_array(); + } + if (late_non_crit_ext_present) { + j.write_str("lateNonCriticalExtension", late_non_crit_ext.to_string()); + } + j.end_obj(); +} + +// SystemInformationBlockType31-r17 ::= SEQUENCE +SRSASN_CODE sib_type31_r17_s::pack(bit_ref& bref) const +{ + bref.pack(ext, 1); + HANDLE_CODE(bref.pack(late_non_crit_ext_present, 1)); + + HANDLE_CODE(serving_satellite_info_r17.pack(bref)); + if (late_non_crit_ext_present) { + HANDLE_CODE(late_non_crit_ext.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE sib_type31_r17_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(bref.unpack(late_non_crit_ext_present, 1)); + + HANDLE_CODE(serving_satellite_info_r17.unpack(bref)); + if (late_non_crit_ext_present) { + HANDLE_CODE(late_non_crit_ext.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void sib_type31_r17_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_fieldname("servingSatelliteInfo-r17"); + serving_satellite_info_r17.to_json(j); + if (late_non_crit_ext_present) { + j.write_str("lateNonCriticalExtension", late_non_crit_ext.to_string()); + } + j.end_obj(); +} + +// SystemInformationBlockType32-r17 ::= SEQUENCE +SRSASN_CODE sib_type32_r17_s::pack(bit_ref& bref) const +{ + bref.pack(ext, 1); + HANDLE_CODE(bref.pack(satellite_info_list_r17_present, 1)); + HANDLE_CODE(bref.pack(late_non_crit_ext_present, 1)); + + if (satellite_info_list_r17_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, satellite_info_list_r17, 1, 4)); + } + if (late_non_crit_ext_present) { + HANDLE_CODE(late_non_crit_ext.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE sib_type32_r17_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(bref.unpack(satellite_info_list_r17_present, 1)); + HANDLE_CODE(bref.unpack(late_non_crit_ext_present, 1)); + + if (satellite_info_list_r17_present) { + HANDLE_CODE(unpack_dyn_seq_of(satellite_info_list_r17, bref, 1, 4)); + } + if (late_non_crit_ext_present) { + HANDLE_CODE(late_non_crit_ext.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void sib_type32_r17_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (satellite_info_list_r17_present) { + j.start_array("satelliteInfoList-r17"); + for (const auto& e1 : satellite_info_list_r17) { + e1.to_json(j); + } + j.end_array(); + } + if (late_non_crit_ext_present) { + j.write_str("lateNonCriticalExtension", late_non_crit_ext.to_string()); + } + j.end_obj(); +} + // SystemInformationBlockType4 ::= SEQUENCE SRSASN_CODE sib_type4_s::pack(bit_ref& bref) const { bref.pack(ext, 1); HANDLE_CODE(bref.pack(intra_freq_neigh_cell_list_present, 1)); - HANDLE_CODE(bref.pack(intra_freq_black_cell_list_present, 1)); + HANDLE_CODE(bref.pack(intra_freq_excluded_cell_list_present, 1)); HANDLE_CODE(bref.pack(csg_pci_range_present, 1)); if (intra_freq_neigh_cell_list_present) { HANDLE_CODE(pack_dyn_seq_of(bref, intra_freq_neigh_cell_list, 1, 16)); } - if (intra_freq_black_cell_list_present) { - HANDLE_CODE(pack_dyn_seq_of(bref, intra_freq_black_cell_list, 1, 16)); + if (intra_freq_excluded_cell_list_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, intra_freq_excluded_cell_list, 1, 16)); } if (csg_pci_range_present) { HANDLE_CODE(csg_pci_range.pack(bref)); @@ -6864,6 +9101,8 @@ SRSASN_CODE sib_type4_s::pack(bit_ref& bref) const ext_groups_packer_guard group_flags; group_flags[0] |= late_non_crit_ext_present; group_flags[1] |= intra_freq_neigh_hsdn_cell_list_r15.is_present(); + group_flags[2] |= rss_cfg_carrier_info_r16.is_present(); + group_flags[2] |= intra_freq_neigh_cell_list_v1610.is_present(); group_flags.pack(bref); if (group_flags[0]) { @@ -6879,6 +9118,18 @@ SRSASN_CODE sib_type4_s::pack(bit_ref& bref) const HANDLE_CODE(pack_dyn_seq_of(bref, *intra_freq_neigh_hsdn_cell_list_r15, 1, 16)); } } + if (group_flags[2]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(rss_cfg_carrier_info_r16.is_present(), 1)); + HANDLE_CODE(bref.pack(intra_freq_neigh_cell_list_v1610.is_present(), 1)); + if (rss_cfg_carrier_info_r16.is_present()) { + HANDLE_CODE(rss_cfg_carrier_info_r16->pack(bref)); + } + if (intra_freq_neigh_cell_list_v1610.is_present()) { + HANDLE_CODE(pack_dyn_seq_of(bref, *intra_freq_neigh_cell_list_v1610, 1, 16)); + } + } } return SRSASN_SUCCESS; } @@ -6886,21 +9137,21 @@ SRSASN_CODE sib_type4_s::unpack(cbit_ref& bref) { bref.unpack(ext, 1); HANDLE_CODE(bref.unpack(intra_freq_neigh_cell_list_present, 1)); - HANDLE_CODE(bref.unpack(intra_freq_black_cell_list_present, 1)); + HANDLE_CODE(bref.unpack(intra_freq_excluded_cell_list_present, 1)); HANDLE_CODE(bref.unpack(csg_pci_range_present, 1)); if (intra_freq_neigh_cell_list_present) { HANDLE_CODE(unpack_dyn_seq_of(intra_freq_neigh_cell_list, bref, 1, 16)); } - if (intra_freq_black_cell_list_present) { - HANDLE_CODE(unpack_dyn_seq_of(intra_freq_black_cell_list, bref, 1, 16)); + if (intra_freq_excluded_cell_list_present) { + HANDLE_CODE(unpack_dyn_seq_of(intra_freq_excluded_cell_list, bref, 1, 16)); } if (csg_pci_range_present) { HANDLE_CODE(csg_pci_range.unpack(bref)); } if (ext) { - ext_groups_unpacker_guard group_flags(2); + ext_groups_unpacker_guard group_flags(3); group_flags.unpack(bref); if (group_flags[0]) { @@ -6918,6 +9169,22 @@ SRSASN_CODE sib_type4_s::unpack(cbit_ref& bref) HANDLE_CODE(unpack_dyn_seq_of(*intra_freq_neigh_hsdn_cell_list_r15, bref, 1, 16)); } } + if (group_flags[2]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + bool rss_cfg_carrier_info_r16_present; + HANDLE_CODE(bref.unpack(rss_cfg_carrier_info_r16_present, 1)); + rss_cfg_carrier_info_r16.set_present(rss_cfg_carrier_info_r16_present); + bool intra_freq_neigh_cell_list_v1610_present; + HANDLE_CODE(bref.unpack(intra_freq_neigh_cell_list_v1610_present, 1)); + intra_freq_neigh_cell_list_v1610.set_present(intra_freq_neigh_cell_list_v1610_present); + if (rss_cfg_carrier_info_r16.is_present()) { + HANDLE_CODE(rss_cfg_carrier_info_r16->unpack(bref)); + } + if (intra_freq_neigh_cell_list_v1610.is_present()) { + HANDLE_CODE(unpack_dyn_seq_of(*intra_freq_neigh_cell_list_v1610, bref, 1, 16)); + } + } } return SRSASN_SUCCESS; } @@ -6931,9 +9198,9 @@ void sib_type4_s::to_json(json_writer& j) const } j.end_array(); } - if (intra_freq_black_cell_list_present) { - j.start_array("intraFreqBlackCellList"); - for (const auto& e1 : intra_freq_black_cell_list) { + if (intra_freq_excluded_cell_list_present) { + j.start_array("intraFreqExcludedCellList"); + for (const auto& e1 : intra_freq_excluded_cell_list) { e1.to_json(j); } j.end_array(); @@ -6953,6 +9220,17 @@ void sib_type4_s::to_json(json_writer& j) const } j.end_array(); } + if (rss_cfg_carrier_info_r16.is_present()) { + j.write_fieldname("rss-ConfigCarrierInfo-r16"); + rss_cfg_carrier_info_r16->to_json(j); + } + if (intra_freq_neigh_cell_list_v1610.is_present()) { + j.start_array("intraFreqNeighCellList-v1610"); + for (const auto& e1 : *intra_freq_neigh_cell_list_v1610) { + e1.to_json(j); + } + j.end_array(); + } } j.end_obj(); } @@ -6978,6 +9256,9 @@ SRSASN_CODE sib_type5_s::pack(bit_ref& bref) const group_flags[7] |= inter_freq_carrier_freq_list_v1530.is_present(); group_flags[7] |= inter_freq_carrier_freq_list_ext_v1530.is_present(); group_flags[7] |= meas_idle_cfg_sib_r15.is_present(); + group_flags[8] |= inter_freq_carrier_freq_list_v1610.is_present(); + group_flags[8] |= inter_freq_carrier_freq_list_ext_v1610.is_present(); + group_flags[8] |= meas_idle_cfg_sib_nr_r16.is_present(); group_flags.pack(bref); if (group_flags[0]) { @@ -7061,6 +9342,22 @@ SRSASN_CODE sib_type5_s::pack(bit_ref& bref) const HANDLE_CODE(meas_idle_cfg_sib_r15->pack(bref)); } } + if (group_flags[8]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(inter_freq_carrier_freq_list_v1610.is_present(), 1)); + HANDLE_CODE(bref.pack(inter_freq_carrier_freq_list_ext_v1610.is_present(), 1)); + HANDLE_CODE(bref.pack(meas_idle_cfg_sib_nr_r16.is_present(), 1)); + if (inter_freq_carrier_freq_list_v1610.is_present()) { + HANDLE_CODE(pack_dyn_seq_of(bref, *inter_freq_carrier_freq_list_v1610, 1, 8)); + } + if (inter_freq_carrier_freq_list_ext_v1610.is_present()) { + HANDLE_CODE(pack_dyn_seq_of(bref, *inter_freq_carrier_freq_list_ext_v1610, 1, 8)); + } + if (meas_idle_cfg_sib_nr_r16.is_present()) { + HANDLE_CODE(meas_idle_cfg_sib_nr_r16->pack(bref)); + } + } } return SRSASN_SUCCESS; } @@ -7070,7 +9367,7 @@ SRSASN_CODE sib_type5_s::unpack(cbit_ref& bref) HANDLE_CODE(unpack_dyn_seq_of(inter_freq_carrier_freq_list, bref, 1, 8)); if (ext) { - ext_groups_unpacker_guard group_flags(8); + ext_groups_unpacker_guard group_flags(9); group_flags.unpack(bref); if (group_flags[0]) { @@ -7176,6 +9473,28 @@ SRSASN_CODE sib_type5_s::unpack(cbit_ref& bref) HANDLE_CODE(meas_idle_cfg_sib_r15->unpack(bref)); } } + if (group_flags[8]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + bool inter_freq_carrier_freq_list_v1610_present; + HANDLE_CODE(bref.unpack(inter_freq_carrier_freq_list_v1610_present, 1)); + inter_freq_carrier_freq_list_v1610.set_present(inter_freq_carrier_freq_list_v1610_present); + bool inter_freq_carrier_freq_list_ext_v1610_present; + HANDLE_CODE(bref.unpack(inter_freq_carrier_freq_list_ext_v1610_present, 1)); + inter_freq_carrier_freq_list_ext_v1610.set_present(inter_freq_carrier_freq_list_ext_v1610_present); + bool meas_idle_cfg_sib_nr_r16_present; + HANDLE_CODE(bref.unpack(meas_idle_cfg_sib_nr_r16_present, 1)); + meas_idle_cfg_sib_nr_r16.set_present(meas_idle_cfg_sib_nr_r16_present); + if (inter_freq_carrier_freq_list_v1610.is_present()) { + HANDLE_CODE(unpack_dyn_seq_of(*inter_freq_carrier_freq_list_v1610, bref, 1, 8)); + } + if (inter_freq_carrier_freq_list_ext_v1610.is_present()) { + HANDLE_CODE(unpack_dyn_seq_of(*inter_freq_carrier_freq_list_ext_v1610, bref, 1, 8)); + } + if (meas_idle_cfg_sib_nr_r16.is_present()) { + HANDLE_CODE(meas_idle_cfg_sib_nr_r16->unpack(bref)); + } + } } return SRSASN_SUCCESS; } @@ -7268,6 +9587,24 @@ void sib_type5_s::to_json(json_writer& j) const j.write_fieldname("measIdleConfigSIB-r15"); meas_idle_cfg_sib_r15->to_json(j); } + if (inter_freq_carrier_freq_list_v1610.is_present()) { + j.start_array("interFreqCarrierFreqList-v1610"); + for (const auto& e1 : *inter_freq_carrier_freq_list_v1610) { + e1.to_json(j); + } + j.end_array(); + } + if (inter_freq_carrier_freq_list_ext_v1610.is_present()) { + j.start_array("interFreqCarrierFreqListExt-v1610"); + for (const auto& e1 : *inter_freq_carrier_freq_list_ext_v1610) { + e1.to_json(j); + } + j.end_array(); + } + if (meas_idle_cfg_sib_nr_r16.is_present()) { + j.write_fieldname("measIdleConfigSIB-NR-r16"); + meas_idle_cfg_sib_nr_r16->to_json(j); + } } j.end_obj(); } @@ -7956,6 +10293,39 @@ void pos_sys_info_r15_ies_s::pos_sib_type_and_info_r15_item_c_::destroy_() case types::pos_sib3_minus1_r15: c.destroy<sib_pos_r15_s>(); break; + case types::pos_sib1_minus8_v1610: + c.destroy<sib_pos_r15_s>(); + break; + case types::pos_sib2_minus20_v1610: + c.destroy<sib_pos_r15_s>(); + break; + case types::pos_sib2_minus21_v1610: + c.destroy<sib_pos_r15_s>(); + break; + case types::pos_sib2_minus22_v1610: + c.destroy<sib_pos_r15_s>(); + break; + case types::pos_sib2_minus23_v1610: + c.destroy<sib_pos_r15_s>(); + break; + case types::pos_sib2_minus24_v1610: + c.destroy<sib_pos_r15_s>(); + break; + case types::pos_sib2_minus25_v1610: + c.destroy<sib_pos_r15_s>(); + break; + case types::pos_sib4_minus1_v1610: + c.destroy<sib_pos_r15_s>(); + break; + case types::pos_sib5_minus1_v1610: + c.destroy<sib_pos_r15_s>(); + break; + case types::pos_sib1_minus9_v1700: + c.destroy<sib_pos_r15_s>(); + break; + case types::pos_sib1_minus10_v1700: + c.destroy<sib_pos_r15_s>(); + break; default: break; } @@ -8046,6 +10416,39 @@ void pos_sys_info_r15_ies_s::pos_sib_type_and_info_r15_item_c_::set(types::optio case types::pos_sib3_minus1_r15: c.init<sib_pos_r15_s>(); break; + case types::pos_sib1_minus8_v1610: + c.init<sib_pos_r15_s>(); + break; + case types::pos_sib2_minus20_v1610: + c.init<sib_pos_r15_s>(); + break; + case types::pos_sib2_minus21_v1610: + c.init<sib_pos_r15_s>(); + break; + case types::pos_sib2_minus22_v1610: + c.init<sib_pos_r15_s>(); + break; + case types::pos_sib2_minus23_v1610: + c.init<sib_pos_r15_s>(); + break; + case types::pos_sib2_minus24_v1610: + c.init<sib_pos_r15_s>(); + break; + case types::pos_sib2_minus25_v1610: + c.init<sib_pos_r15_s>(); + break; + case types::pos_sib4_minus1_v1610: + c.init<sib_pos_r15_s>(); + break; + case types::pos_sib5_minus1_v1610: + c.init<sib_pos_r15_s>(); + break; + case types::pos_sib1_minus9_v1700: + c.init<sib_pos_r15_s>(); + break; + case types::pos_sib1_minus10_v1700: + c.init<sib_pos_r15_s>(); + break; case types::nulltype: break; default: @@ -8138,6 +10541,39 @@ pos_sys_info_r15_ies_s::pos_sib_type_and_info_r15_item_c_::pos_sib_type_and_info case types::pos_sib3_minus1_r15: c.init(other.c.get<sib_pos_r15_s>()); break; + case types::pos_sib1_minus8_v1610: + c.init(other.c.get<sib_pos_r15_s>()); + break; + case types::pos_sib2_minus20_v1610: + c.init(other.c.get<sib_pos_r15_s>()); + break; + case types::pos_sib2_minus21_v1610: + c.init(other.c.get<sib_pos_r15_s>()); + break; + case types::pos_sib2_minus22_v1610: + c.init(other.c.get<sib_pos_r15_s>()); + break; + case types::pos_sib2_minus23_v1610: + c.init(other.c.get<sib_pos_r15_s>()); + break; + case types::pos_sib2_minus24_v1610: + c.init(other.c.get<sib_pos_r15_s>()); + break; + case types::pos_sib2_minus25_v1610: + c.init(other.c.get<sib_pos_r15_s>()); + break; + case types::pos_sib4_minus1_v1610: + c.init(other.c.get<sib_pos_r15_s>()); + break; + case types::pos_sib5_minus1_v1610: + c.init(other.c.get<sib_pos_r15_s>()); + break; + case types::pos_sib1_minus9_v1700: + c.init(other.c.get<sib_pos_r15_s>()); + break; + case types::pos_sib1_minus10_v1700: + c.init(other.c.get<sib_pos_r15_s>()); + break; case types::nulltype: break; default: @@ -8234,6 +10670,39 @@ pos_sys_info_r15_ies_s::pos_sib_type_and_info_r15_item_c_::operator=( case types::pos_sib3_minus1_r15: c.set(other.c.get<sib_pos_r15_s>()); break; + case types::pos_sib1_minus8_v1610: + c.set(other.c.get<sib_pos_r15_s>()); + break; + case types::pos_sib2_minus20_v1610: + c.set(other.c.get<sib_pos_r15_s>()); + break; + case types::pos_sib2_minus21_v1610: + c.set(other.c.get<sib_pos_r15_s>()); + break; + case types::pos_sib2_minus22_v1610: + c.set(other.c.get<sib_pos_r15_s>()); + break; + case types::pos_sib2_minus23_v1610: + c.set(other.c.get<sib_pos_r15_s>()); + break; + case types::pos_sib2_minus24_v1610: + c.set(other.c.get<sib_pos_r15_s>()); + break; + case types::pos_sib2_minus25_v1610: + c.set(other.c.get<sib_pos_r15_s>()); + break; + case types::pos_sib4_minus1_v1610: + c.set(other.c.get<sib_pos_r15_s>()); + break; + case types::pos_sib5_minus1_v1610: + c.set(other.c.get<sib_pos_r15_s>()); + break; + case types::pos_sib1_minus9_v1700: + c.set(other.c.get<sib_pos_r15_s>()); + break; + case types::pos_sib1_minus10_v1700: + c.set(other.c.get<sib_pos_r15_s>()); + break; case types::nulltype: break; default: @@ -8377,6 +10846,61 @@ sib_pos_r15_s& pos_sys_info_r15_ies_s::pos_sib_type_and_info_r15_item_c_::set_po set(types::pos_sib3_minus1_r15); return c.get<sib_pos_r15_s>(); } +sib_pos_r15_s& pos_sys_info_r15_ies_s::pos_sib_type_and_info_r15_item_c_::set_pos_sib1_minus8_v1610() +{ + set(types::pos_sib1_minus8_v1610); + return c.get<sib_pos_r15_s>(); +} +sib_pos_r15_s& pos_sys_info_r15_ies_s::pos_sib_type_and_info_r15_item_c_::set_pos_sib2_minus20_v1610() +{ + set(types::pos_sib2_minus20_v1610); + return c.get<sib_pos_r15_s>(); +} +sib_pos_r15_s& pos_sys_info_r15_ies_s::pos_sib_type_and_info_r15_item_c_::set_pos_sib2_minus21_v1610() +{ + set(types::pos_sib2_minus21_v1610); + return c.get<sib_pos_r15_s>(); +} +sib_pos_r15_s& pos_sys_info_r15_ies_s::pos_sib_type_and_info_r15_item_c_::set_pos_sib2_minus22_v1610() +{ + set(types::pos_sib2_minus22_v1610); + return c.get<sib_pos_r15_s>(); +} +sib_pos_r15_s& pos_sys_info_r15_ies_s::pos_sib_type_and_info_r15_item_c_::set_pos_sib2_minus23_v1610() +{ + set(types::pos_sib2_minus23_v1610); + return c.get<sib_pos_r15_s>(); +} +sib_pos_r15_s& pos_sys_info_r15_ies_s::pos_sib_type_and_info_r15_item_c_::set_pos_sib2_minus24_v1610() +{ + set(types::pos_sib2_minus24_v1610); + return c.get<sib_pos_r15_s>(); +} +sib_pos_r15_s& pos_sys_info_r15_ies_s::pos_sib_type_and_info_r15_item_c_::set_pos_sib2_minus25_v1610() +{ + set(types::pos_sib2_minus25_v1610); + return c.get<sib_pos_r15_s>(); +} +sib_pos_r15_s& pos_sys_info_r15_ies_s::pos_sib_type_and_info_r15_item_c_::set_pos_sib4_minus1_v1610() +{ + set(types::pos_sib4_minus1_v1610); + return c.get<sib_pos_r15_s>(); +} +sib_pos_r15_s& pos_sys_info_r15_ies_s::pos_sib_type_and_info_r15_item_c_::set_pos_sib5_minus1_v1610() +{ + set(types::pos_sib5_minus1_v1610); + return c.get<sib_pos_r15_s>(); +} +sib_pos_r15_s& pos_sys_info_r15_ies_s::pos_sib_type_and_info_r15_item_c_::set_pos_sib1_minus9_v1700() +{ + set(types::pos_sib1_minus9_v1700); + return c.get<sib_pos_r15_s>(); +} +sib_pos_r15_s& pos_sys_info_r15_ies_s::pos_sib_type_and_info_r15_item_c_::set_pos_sib1_minus10_v1700() +{ + set(types::pos_sib1_minus10_v1700); + return c.get<sib_pos_r15_s>(); +} void pos_sys_info_r15_ies_s::pos_sib_type_and_info_r15_item_c_::to_json(json_writer& j) const { j.start_obj(); @@ -8489,6 +11013,50 @@ void pos_sys_info_r15_ies_s::pos_sib_type_and_info_r15_item_c_::to_json(json_wri j.write_fieldname("posSib3-1-r15"); c.get<sib_pos_r15_s>().to_json(j); break; + case types::pos_sib1_minus8_v1610: + j.write_fieldname("posSib1-8-v1610"); + c.get<sib_pos_r15_s>().to_json(j); + break; + case types::pos_sib2_minus20_v1610: + j.write_fieldname("posSib2-20-v1610"); + c.get<sib_pos_r15_s>().to_json(j); + break; + case types::pos_sib2_minus21_v1610: + j.write_fieldname("posSib2-21-v1610"); + c.get<sib_pos_r15_s>().to_json(j); + break; + case types::pos_sib2_minus22_v1610: + j.write_fieldname("posSib2-22-v1610"); + c.get<sib_pos_r15_s>().to_json(j); + break; + case types::pos_sib2_minus23_v1610: + j.write_fieldname("posSib2-23-v1610"); + c.get<sib_pos_r15_s>().to_json(j); + break; + case types::pos_sib2_minus24_v1610: + j.write_fieldname("posSib2-24-v1610"); + c.get<sib_pos_r15_s>().to_json(j); + break; + case types::pos_sib2_minus25_v1610: + j.write_fieldname("posSib2-25-v1610"); + c.get<sib_pos_r15_s>().to_json(j); + break; + case types::pos_sib4_minus1_v1610: + j.write_fieldname("posSib4-1-v1610"); + c.get<sib_pos_r15_s>().to_json(j); + break; + case types::pos_sib5_minus1_v1610: + j.write_fieldname("posSib5-1-v1610"); + c.get<sib_pos_r15_s>().to_json(j); + break; + case types::pos_sib1_minus9_v1700: + j.write_fieldname("posSib1-9-v1700"); + c.get<sib_pos_r15_s>().to_json(j); + break; + case types::pos_sib1_minus10_v1700: + j.write_fieldname("posSib1-10-v1700"); + c.get<sib_pos_r15_s>().to_json(j); + break; default: log_invalid_choice_id(type_, "pos_sys_info_r15_ies_s::pos_sib_type_and_info_r15_item_c_"); } @@ -8579,6 +11147,50 @@ SRSASN_CODE pos_sys_info_r15_ies_s::pos_sib_type_and_info_r15_item_c_::pack(bit_ case types::pos_sib3_minus1_r15: HANDLE_CODE(c.get<sib_pos_r15_s>().pack(bref)); break; + case types::pos_sib1_minus8_v1610: { + varlength_field_pack_guard varlen_scope(bref, false); + HANDLE_CODE(c.get<sib_pos_r15_s>().pack(bref)); + } break; + case types::pos_sib2_minus20_v1610: { + varlength_field_pack_guard varlen_scope(bref, false); + HANDLE_CODE(c.get<sib_pos_r15_s>().pack(bref)); + } break; + case types::pos_sib2_minus21_v1610: { + varlength_field_pack_guard varlen_scope(bref, false); + HANDLE_CODE(c.get<sib_pos_r15_s>().pack(bref)); + } break; + case types::pos_sib2_minus22_v1610: { + varlength_field_pack_guard varlen_scope(bref, false); + HANDLE_CODE(c.get<sib_pos_r15_s>().pack(bref)); + } break; + case types::pos_sib2_minus23_v1610: { + varlength_field_pack_guard varlen_scope(bref, false); + HANDLE_CODE(c.get<sib_pos_r15_s>().pack(bref)); + } break; + case types::pos_sib2_minus24_v1610: { + varlength_field_pack_guard varlen_scope(bref, false); + HANDLE_CODE(c.get<sib_pos_r15_s>().pack(bref)); + } break; + case types::pos_sib2_minus25_v1610: { + varlength_field_pack_guard varlen_scope(bref, false); + HANDLE_CODE(c.get<sib_pos_r15_s>().pack(bref)); + } break; + case types::pos_sib4_minus1_v1610: { + varlength_field_pack_guard varlen_scope(bref, false); + HANDLE_CODE(c.get<sib_pos_r15_s>().pack(bref)); + } break; + case types::pos_sib5_minus1_v1610: { + varlength_field_pack_guard varlen_scope(bref, false); + HANDLE_CODE(c.get<sib_pos_r15_s>().pack(bref)); + } break; + case types::pos_sib1_minus9_v1700: { + varlength_field_pack_guard varlen_scope(bref, false); + HANDLE_CODE(c.get<sib_pos_r15_s>().pack(bref)); + } break; + case types::pos_sib1_minus10_v1700: { + varlength_field_pack_guard varlen_scope(bref, false); + HANDLE_CODE(c.get<sib_pos_r15_s>().pack(bref)); + } break; default: log_invalid_choice_id(type_, "pos_sys_info_r15_ies_s::pos_sib_type_and_info_r15_item_c_"); return SRSASN_ERROR_ENCODE_FAIL; @@ -8672,6 +11284,50 @@ SRSASN_CODE pos_sys_info_r15_ies_s::pos_sib_type_and_info_r15_item_c_::unpack(cb case types::pos_sib3_minus1_r15: HANDLE_CODE(c.get<sib_pos_r15_s>().unpack(bref)); break; + case types::pos_sib1_minus8_v1610: { + varlength_field_unpack_guard varlen_scope(bref, false); + HANDLE_CODE(c.get<sib_pos_r15_s>().unpack(bref)); + } break; + case types::pos_sib2_minus20_v1610: { + varlength_field_unpack_guard varlen_scope(bref, false); + HANDLE_CODE(c.get<sib_pos_r15_s>().unpack(bref)); + } break; + case types::pos_sib2_minus21_v1610: { + varlength_field_unpack_guard varlen_scope(bref, false); + HANDLE_CODE(c.get<sib_pos_r15_s>().unpack(bref)); + } break; + case types::pos_sib2_minus22_v1610: { + varlength_field_unpack_guard varlen_scope(bref, false); + HANDLE_CODE(c.get<sib_pos_r15_s>().unpack(bref)); + } break; + case types::pos_sib2_minus23_v1610: { + varlength_field_unpack_guard varlen_scope(bref, false); + HANDLE_CODE(c.get<sib_pos_r15_s>().unpack(bref)); + } break; + case types::pos_sib2_minus24_v1610: { + varlength_field_unpack_guard varlen_scope(bref, false); + HANDLE_CODE(c.get<sib_pos_r15_s>().unpack(bref)); + } break; + case types::pos_sib2_minus25_v1610: { + varlength_field_unpack_guard varlen_scope(bref, false); + HANDLE_CODE(c.get<sib_pos_r15_s>().unpack(bref)); + } break; + case types::pos_sib4_minus1_v1610: { + varlength_field_unpack_guard varlen_scope(bref, false); + HANDLE_CODE(c.get<sib_pos_r15_s>().unpack(bref)); + } break; + case types::pos_sib5_minus1_v1610: { + varlength_field_unpack_guard varlen_scope(bref, false); + HANDLE_CODE(c.get<sib_pos_r15_s>().unpack(bref)); + } break; + case types::pos_sib1_minus9_v1700: { + varlength_field_unpack_guard varlen_scope(bref, false); + HANDLE_CODE(c.get<sib_pos_r15_s>().unpack(bref)); + } break; + case types::pos_sib1_minus10_v1700: { + varlength_field_unpack_guard varlen_scope(bref, false); + HANDLE_CODE(c.get<sib_pos_r15_s>().unpack(bref)); + } break; default: log_invalid_choice_id(type_, "pos_sys_info_r15_ies_s::pos_sib_type_and_info_r15_item_c_"); return SRSASN_ERROR_DECODE_FAIL; @@ -8751,6 +11407,27 @@ void sib_info_item_c::destroy_() case types::sib26_v1530: c.destroy<sib_type26_r15_s>(); break; + case types::sib26a_v1610: + c.destroy<sib_type26a_r16_s>(); + break; + case types::sib27_v1610: + c.destroy<sib_type27_r16_s>(); + break; + case types::sib28_v1610: + c.destroy<sib_type28_r16_s>(); + break; + case types::sib29_v1610: + c.destroy<sib_type29_r16_s>(); + break; + case types::sib30_v1700: + c.destroy<sib_type30_r17_s>(); + break; + case types::sib31_v1700: + c.destroy<sib_type31_r17_s>(); + break; + case types::sib32_v1700: + c.destroy<sib_type32_r17_s>(); + break; default: break; } @@ -8829,6 +11506,27 @@ void sib_info_item_c::set(types::options e) case types::sib26_v1530: c.init<sib_type26_r15_s>(); break; + case types::sib26a_v1610: + c.init<sib_type26a_r16_s>(); + break; + case types::sib27_v1610: + c.init<sib_type27_r16_s>(); + break; + case types::sib28_v1610: + c.init<sib_type28_r16_s>(); + break; + case types::sib29_v1610: + c.init<sib_type29_r16_s>(); + break; + case types::sib30_v1700: + c.init<sib_type30_r17_s>(); + break; + case types::sib31_v1700: + c.init<sib_type31_r17_s>(); + break; + case types::sib32_v1700: + c.init<sib_type32_r17_s>(); + break; case types::nulltype: break; default: @@ -8908,6 +11606,27 @@ sib_info_item_c::sib_info_item_c(const sib_info_item_c& other) case types::sib26_v1530: c.init(other.c.get<sib_type26_r15_s>()); break; + case types::sib26a_v1610: + c.init(other.c.get<sib_type26a_r16_s>()); + break; + case types::sib27_v1610: + c.init(other.c.get<sib_type27_r16_s>()); + break; + case types::sib28_v1610: + c.init(other.c.get<sib_type28_r16_s>()); + break; + case types::sib29_v1610: + c.init(other.c.get<sib_type29_r16_s>()); + break; + case types::sib30_v1700: + c.init(other.c.get<sib_type30_r17_s>()); + break; + case types::sib31_v1700: + c.init(other.c.get<sib_type31_r17_s>()); + break; + case types::sib32_v1700: + c.init(other.c.get<sib_type32_r17_s>()); + break; case types::nulltype: break; default: @@ -8990,6 +11709,27 @@ sib_info_item_c& sib_info_item_c::operator=(const sib_info_item_c& other) case types::sib26_v1530: c.set(other.c.get<sib_type26_r15_s>()); break; + case types::sib26a_v1610: + c.set(other.c.get<sib_type26a_r16_s>()); + break; + case types::sib27_v1610: + c.set(other.c.get<sib_type27_r16_s>()); + break; + case types::sib28_v1610: + c.set(other.c.get<sib_type28_r16_s>()); + break; + case types::sib29_v1610: + c.set(other.c.get<sib_type29_r16_s>()); + break; + case types::sib30_v1700: + c.set(other.c.get<sib_type30_r17_s>()); + break; + case types::sib31_v1700: + c.set(other.c.get<sib_type31_r17_s>()); + break; + case types::sib32_v1700: + c.set(other.c.get<sib_type32_r17_s>()); + break; case types::nulltype: break; default: @@ -9113,6 +11853,41 @@ sib_type26_r15_s& sib_info_item_c::set_sib26_v1530() set(types::sib26_v1530); return c.get<sib_type26_r15_s>(); } +sib_type26a_r16_s& sib_info_item_c::set_sib26a_v1610() +{ + set(types::sib26a_v1610); + return c.get<sib_type26a_r16_s>(); +} +sib_type27_r16_s& sib_info_item_c::set_sib27_v1610() +{ + set(types::sib27_v1610); + return c.get<sib_type27_r16_s>(); +} +sib_type28_r16_s& sib_info_item_c::set_sib28_v1610() +{ + set(types::sib28_v1610); + return c.get<sib_type28_r16_s>(); +} +sib_type29_r16_s& sib_info_item_c::set_sib29_v1610() +{ + set(types::sib29_v1610); + return c.get<sib_type29_r16_s>(); +} +sib_type30_r17_s& sib_info_item_c::set_sib30_v1700() +{ + set(types::sib30_v1700); + return c.get<sib_type30_r17_s>(); +} +sib_type31_r17_s& sib_info_item_c::set_sib31_v1700() +{ + set(types::sib31_v1700); + return c.get<sib_type31_r17_s>(); +} +sib_type32_r17_s& sib_info_item_c::set_sib32_v1700() +{ + set(types::sib32_v1700); + return c.get<sib_type32_r17_s>(); +} void sib_info_item_c::to_json(json_writer& j) const { j.start_obj(); @@ -9209,6 +11984,34 @@ void sib_info_item_c::to_json(json_writer& j) const j.write_fieldname("sib26-v1530"); c.get<sib_type26_r15_s>().to_json(j); break; + case types::sib26a_v1610: + j.write_fieldname("sib26a-v1610"); + c.get<sib_type26a_r16_s>().to_json(j); + break; + case types::sib27_v1610: + j.write_fieldname("sib27-v1610"); + c.get<sib_type27_r16_s>().to_json(j); + break; + case types::sib28_v1610: + j.write_fieldname("sib28-v1610"); + c.get<sib_type28_r16_s>().to_json(j); + break; + case types::sib29_v1610: + j.write_fieldname("sib29-v1610"); + c.get<sib_type29_r16_s>().to_json(j); + break; + case types::sib30_v1700: + j.write_fieldname("sib30-v1700"); + c.get<sib_type30_r17_s>().to_json(j); + break; + case types::sib31_v1700: + j.write_fieldname("sib31-v1700"); + c.get<sib_type31_r17_s>().to_json(j); + break; + case types::sib32_v1700: + j.write_fieldname("sib32-v1700"); + c.get<sib_type32_r17_s>().to_json(j); + break; default: log_invalid_choice_id(type_, "sib_info_item_c"); } @@ -9300,6 +12103,34 @@ SRSASN_CODE sib_info_item_c::pack(bit_ref& bref) const varlength_field_pack_guard varlen_scope(bref, false); HANDLE_CODE(c.get<sib_type26_r15_s>().pack(bref)); } break; + case types::sib26a_v1610: { + varlength_field_pack_guard varlen_scope(bref, false); + HANDLE_CODE(c.get<sib_type26a_r16_s>().pack(bref)); + } break; + case types::sib27_v1610: { + varlength_field_pack_guard varlen_scope(bref, false); + HANDLE_CODE(c.get<sib_type27_r16_s>().pack(bref)); + } break; + case types::sib28_v1610: { + varlength_field_pack_guard varlen_scope(bref, false); + HANDLE_CODE(c.get<sib_type28_r16_s>().pack(bref)); + } break; + case types::sib29_v1610: { + varlength_field_pack_guard varlen_scope(bref, false); + HANDLE_CODE(c.get<sib_type29_r16_s>().pack(bref)); + } break; + case types::sib30_v1700: { + varlength_field_pack_guard varlen_scope(bref, false); + HANDLE_CODE(c.get<sib_type30_r17_s>().pack(bref)); + } break; + case types::sib31_v1700: { + varlength_field_pack_guard varlen_scope(bref, false); + HANDLE_CODE(c.get<sib_type31_r17_s>().pack(bref)); + } break; + case types::sib32_v1700: { + varlength_field_pack_guard varlen_scope(bref, false); + HANDLE_CODE(c.get<sib_type32_r17_s>().pack(bref)); + } break; default: log_invalid_choice_id(type_, "sib_info_item_c"); return SRSASN_ERROR_ENCODE_FAIL; @@ -9394,6 +12225,34 @@ SRSASN_CODE sib_info_item_c::unpack(cbit_ref& bref) varlength_field_unpack_guard varlen_scope(bref, false); HANDLE_CODE(c.get<sib_type26_r15_s>().unpack(bref)); } break; + case types::sib26a_v1610: { + varlength_field_unpack_guard varlen_scope(bref, false); + HANDLE_CODE(c.get<sib_type26a_r16_s>().unpack(bref)); + } break; + case types::sib27_v1610: { + varlength_field_unpack_guard varlen_scope(bref, false); + HANDLE_CODE(c.get<sib_type27_r16_s>().unpack(bref)); + } break; + case types::sib28_v1610: { + varlength_field_unpack_guard varlen_scope(bref, false); + HANDLE_CODE(c.get<sib_type28_r16_s>().unpack(bref)); + } break; + case types::sib29_v1610: { + varlength_field_unpack_guard varlen_scope(bref, false); + HANDLE_CODE(c.get<sib_type29_r16_s>().unpack(bref)); + } break; + case types::sib30_v1700: { + varlength_field_unpack_guard varlen_scope(bref, false); + HANDLE_CODE(c.get<sib_type30_r17_s>().unpack(bref)); + } break; + case types::sib31_v1700: { + varlength_field_unpack_guard varlen_scope(bref, false); + HANDLE_CODE(c.get<sib_type31_r17_s>().unpack(bref)); + } break; + case types::sib32_v1700: { + varlength_field_unpack_guard varlen_scope(bref, false); + HANDLE_CODE(c.get<sib_type32_r17_s>().unpack(bref)); + } break; default: log_invalid_choice_id(type_, "sib_info_item_c"); return SRSASN_ERROR_DECODE_FAIL; @@ -10541,23 +13400,18 @@ const char* sib_type_v12j0_opts::to_string() const "sibType24-v1530", "sibType25-v1530", "sibType26-v1530", - "spare10", - "spare9", - "spare8", - "spare7", - "spare6", - "spare5", - "spare4", + "sibType26a-v1610", + "sibType27-v1610", + "sibType28-v1610", + "sibType29-v1610", + "sibType30-v1700", + "sibType31-v1700", + "sibType32-v1700", "spare3", "spare2", "spare1"}; return convert_enum_idx(options, 16, value, "sib_type_v12j0_e"); } -uint8_t sib_type_v12j0_opts::to_number() const -{ - static const uint8_t options[] = {19, 20, 21, 24, 25, 26}; - return map_enum_number(options, 6, value, "sib_type_v12j0_e"); -} // SchedulingInfo-v12j0 ::= SEQUENCE SRSASN_CODE sched_info_v12j0_s::pack(bit_ref& bref) const @@ -10620,6 +13474,50 @@ void sched_info_ext_r12_s::to_json(json_writer& j) const j.end_obj(); } +// SystemInformationBlockType1-v15g0-IEs ::= SEQUENCE +SRSASN_CODE sib_type1_v15g0_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(bw_reduced_access_related_info_v15g0_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + if (bw_reduced_access_related_info_v15g0_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, bw_reduced_access_related_info_v15g0.pos_sched_info_list_br_r15, 1, 32)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE sib_type1_v15g0_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(bw_reduced_access_related_info_v15g0_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + if (bw_reduced_access_related_info_v15g0_present) { + HANDLE_CODE(unpack_dyn_seq_of(bw_reduced_access_related_info_v15g0.pos_sched_info_list_br_r15, bref, 1, 32)); + } + + return SRSASN_SUCCESS; +} +void sib_type1_v15g0_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (bw_reduced_access_related_info_v15g0_present) { + j.write_fieldname("bandwidthReducedAccessRelatedInfo-v15g0"); + j.start_obj(); + j.start_array("posSchedulingInfoList-BR-r15"); + for (const auto& e1 : bw_reduced_access_related_info_v15g0.pos_sched_info_list_br_r15) { + e1.to_json(j); + } + j.end_array(); + j.end_obj(); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + j.start_obj(); + j.end_obj(); + } + j.end_obj(); +} + // SystemInformationBlockType1-v12j0-IEs ::= SEQUENCE SRSASN_CODE sib_type1_v12j0_ies_s::pack(bit_ref& bref) const { @@ -10633,6 +13531,9 @@ SRSASN_CODE sib_type1_v12j0_ies_s::pack(bit_ref& bref) const if (sched_info_list_ext_r12_present) { HANDLE_CODE(pack_dyn_seq_of(bref, sched_info_list_ext_r12, 1, 32)); } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } return SRSASN_SUCCESS; } @@ -10648,6 +13549,9 @@ SRSASN_CODE sib_type1_v12j0_ies_s::unpack(cbit_ref& bref) if (sched_info_list_ext_r12_present) { HANDLE_CODE(unpack_dyn_seq_of(sched_info_list_ext_r12, bref, 1, 32)); } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } return SRSASN_SUCCESS; } @@ -10670,8 +13574,7 @@ void sib_type1_v12j0_ies_s::to_json(json_writer& j) const } if (non_crit_ext_present) { j.write_fieldname("nonCriticalExtension"); - j.start_obj(); - j.end_obj(); + non_crit_ext.to_json(j); } j.end_obj(); } diff --git a/lib/src/asn1/rrc/dl_ccch_msg.cc b/lib/src/asn1/rrc/dl_ccch_msg.cc index 4cfb8588a..2579b738c 100644 --- a/lib/src/asn1/rrc/dl_ccch_msg.cc +++ b/lib/src/asn1/rrc/dl_ccch_msg.cc @@ -417,6 +417,43 @@ void rrc_conn_reject_v1020_ies_s::to_json(json_writer& j) const j.end_obj(); } +// RRCConnectionSetup-v1610-IEs ::= SEQUENCE +SRSASN_CODE rrc_conn_setup_v1610_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(ded_info_nas_r16_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + if (ded_info_nas_r16_present) { + HANDLE_CODE(ded_info_nas_r16.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE rrc_conn_setup_v1610_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(ded_info_nas_r16_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + if (ded_info_nas_r16_present) { + HANDLE_CODE(ded_info_nas_r16.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void rrc_conn_setup_v1610_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (ded_info_nas_r16_present) { + j.write_str("dedicatedInfoNAS-r16", ded_info_nas_r16.to_string()); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + j.start_obj(); + j.end_obj(); + } + j.end_obj(); +} + // IdleModeMobilityControlInfo ::= SEQUENCE SRSASN_CODE idle_mode_mob_ctrl_info_s::pack(bit_ref& bref) const { @@ -807,6 +844,9 @@ SRSASN_CODE rrc_conn_setup_v8a0_ies_s::pack(bit_ref& bref) const if (late_non_crit_ext_present) { HANDLE_CODE(late_non_crit_ext.pack(bref)); } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } return SRSASN_SUCCESS; } @@ -818,6 +858,9 @@ SRSASN_CODE rrc_conn_setup_v8a0_ies_s::unpack(cbit_ref& bref) if (late_non_crit_ext_present) { HANDLE_CODE(late_non_crit_ext.unpack(bref)); } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } return SRSASN_SUCCESS; } @@ -829,8 +872,7 @@ void rrc_conn_setup_v8a0_ies_s::to_json(json_writer& j) const } if (non_crit_ext_present) { j.write_fieldname("nonCriticalExtension"); - j.start_obj(); - j.end_obj(); + non_crit_ext.to_json(j); } j.end_obj(); } @@ -876,16 +918,16 @@ void rrc_early_data_complete_v1590_ies_s::to_json(json_writer& j) const void redirected_carrier_info_r15_ies_c::destroy_() { switch (type_) { - case types::geran_r15: + case types::geran: c.destroy<carrier_freqs_geran_s>(); break; - case types::cdma2000_hrpd_r15: + case types::cdma2000_hrpd: c.destroy<carrier_freq_cdma2000_s>(); break; - case types::cdma2000_minus1x_rtt_r15: + case types::cdma2000_minus1x_rtt: c.destroy<carrier_freq_cdma2000_s>(); break; - case types::utra_tdd_r15: + case types::utra_tdd: c.destroy<carrier_freq_list_utra_tdd_r10_l>(); break; default: @@ -897,20 +939,20 @@ void redirected_carrier_info_r15_ies_c::set(types::options e) destroy_(); type_ = e; switch (type_) { - case types::eutra_r15: + case types::eutra: break; - case types::geran_r15: + case types::geran: c.init<carrier_freqs_geran_s>(); break; - case types::utra_fdd_r15: + case types::utra_fdd: break; - case types::cdma2000_hrpd_r15: + case types::cdma2000_hrpd: c.init<carrier_freq_cdma2000_s>(); break; - case types::cdma2000_minus1x_rtt_r15: + case types::cdma2000_minus1x_rtt: c.init<carrier_freq_cdma2000_s>(); break; - case types::utra_tdd_r15: + case types::utra_tdd: c.init<carrier_freq_list_utra_tdd_r10_l>(); break; case types::nulltype: @@ -923,22 +965,22 @@ redirected_carrier_info_r15_ies_c::redirected_carrier_info_r15_ies_c(const redir { type_ = other.type(); switch (type_) { - case types::eutra_r15: + case types::eutra: c.init(other.c.get<uint32_t>()); break; - case types::geran_r15: + case types::geran: c.init(other.c.get<carrier_freqs_geran_s>()); break; - case types::utra_fdd_r15: + case types::utra_fdd: c.init(other.c.get<uint16_t>()); break; - case types::cdma2000_hrpd_r15: + case types::cdma2000_hrpd: c.init(other.c.get<carrier_freq_cdma2000_s>()); break; - case types::cdma2000_minus1x_rtt_r15: + case types::cdma2000_minus1x_rtt: c.init(other.c.get<carrier_freq_cdma2000_s>()); break; - case types::utra_tdd_r15: + case types::utra_tdd: c.init(other.c.get<carrier_freq_list_utra_tdd_r10_l>()); break; case types::nulltype: @@ -955,22 +997,22 @@ redirected_carrier_info_r15_ies_c::operator=(const redirected_carrier_info_r15_i } set(other.type()); switch (type_) { - case types::eutra_r15: + case types::eutra: c.set(other.c.get<uint32_t>()); break; - case types::geran_r15: + case types::geran: c.set(other.c.get<carrier_freqs_geran_s>()); break; - case types::utra_fdd_r15: + case types::utra_fdd: c.set(other.c.get<uint16_t>()); break; - case types::cdma2000_hrpd_r15: + case types::cdma2000_hrpd: c.set(other.c.get<carrier_freq_cdma2000_s>()); break; - case types::cdma2000_minus1x_rtt_r15: + case types::cdma2000_minus1x_rtt: c.set(other.c.get<carrier_freq_cdma2000_s>()); break; - case types::utra_tdd_r15: + case types::utra_tdd: c.set(other.c.get<carrier_freq_list_utra_tdd_r10_l>()); break; case types::nulltype: @@ -981,60 +1023,60 @@ redirected_carrier_info_r15_ies_c::operator=(const redirected_carrier_info_r15_i return *this; } -uint32_t& redirected_carrier_info_r15_ies_c::set_eutra_r15() +uint32_t& redirected_carrier_info_r15_ies_c::set_eutra() { - set(types::eutra_r15); + set(types::eutra); return c.get<uint32_t>(); } -carrier_freqs_geran_s& redirected_carrier_info_r15_ies_c::set_geran_r15() +carrier_freqs_geran_s& redirected_carrier_info_r15_ies_c::set_geran() { - set(types::geran_r15); + set(types::geran); return c.get<carrier_freqs_geran_s>(); } -uint16_t& redirected_carrier_info_r15_ies_c::set_utra_fdd_r15() +uint16_t& redirected_carrier_info_r15_ies_c::set_utra_fdd() { - set(types::utra_fdd_r15); + set(types::utra_fdd); return c.get<uint16_t>(); } -carrier_freq_cdma2000_s& redirected_carrier_info_r15_ies_c::set_cdma2000_hrpd_r15() +carrier_freq_cdma2000_s& redirected_carrier_info_r15_ies_c::set_cdma2000_hrpd() { - set(types::cdma2000_hrpd_r15); + set(types::cdma2000_hrpd); return c.get<carrier_freq_cdma2000_s>(); } -carrier_freq_cdma2000_s& redirected_carrier_info_r15_ies_c::set_cdma2000_minus1x_rtt_r15() +carrier_freq_cdma2000_s& redirected_carrier_info_r15_ies_c::set_cdma2000_minus1x_rtt() { - set(types::cdma2000_minus1x_rtt_r15); + set(types::cdma2000_minus1x_rtt); return c.get<carrier_freq_cdma2000_s>(); } -carrier_freq_list_utra_tdd_r10_l& redirected_carrier_info_r15_ies_c::set_utra_tdd_r15() +carrier_freq_list_utra_tdd_r10_l& redirected_carrier_info_r15_ies_c::set_utra_tdd() { - set(types::utra_tdd_r15); + set(types::utra_tdd); return c.get<carrier_freq_list_utra_tdd_r10_l>(); } void redirected_carrier_info_r15_ies_c::to_json(json_writer& j) const { j.start_obj(); switch (type_) { - case types::eutra_r15: - j.write_int("eutra-r15", c.get<uint32_t>()); + case types::eutra: + j.write_int("eutra", c.get<uint32_t>()); break; - case types::geran_r15: - j.write_fieldname("geran-r15"); + case types::geran: + j.write_fieldname("geran"); c.get<carrier_freqs_geran_s>().to_json(j); break; - case types::utra_fdd_r15: - j.write_int("utra-FDD-r15", c.get<uint16_t>()); + case types::utra_fdd: + j.write_int("utra-FDD", c.get<uint16_t>()); break; - case types::cdma2000_hrpd_r15: - j.write_fieldname("cdma2000-HRPD-r15"); + case types::cdma2000_hrpd: + j.write_fieldname("cdma2000-HRPD"); c.get<carrier_freq_cdma2000_s>().to_json(j); break; - case types::cdma2000_minus1x_rtt_r15: - j.write_fieldname("cdma2000-1xRTT-r15"); + case types::cdma2000_minus1x_rtt: + j.write_fieldname("cdma2000-1xRTT"); c.get<carrier_freq_cdma2000_s>().to_json(j); break; - case types::utra_tdd_r15: - j.start_array("utra-TDD-r15"); + case types::utra_tdd: + j.start_array("utra-TDD"); for (const auto& e1 : c.get<carrier_freq_list_utra_tdd_r10_l>()) { j.write_int(e1); } @@ -1049,22 +1091,22 @@ SRSASN_CODE redirected_carrier_info_r15_ies_c::pack(bit_ref& bref) const { type_.pack(bref); switch (type_) { - case types::eutra_r15: + case types::eutra: HANDLE_CODE(pack_integer(bref, c.get<uint32_t>(), (uint32_t)0u, (uint32_t)262143u)); break; - case types::geran_r15: + case types::geran: HANDLE_CODE(c.get<carrier_freqs_geran_s>().pack(bref)); break; - case types::utra_fdd_r15: + case types::utra_fdd: HANDLE_CODE(pack_integer(bref, c.get<uint16_t>(), (uint16_t)0u, (uint16_t)16383u)); break; - case types::cdma2000_hrpd_r15: + case types::cdma2000_hrpd: HANDLE_CODE(c.get<carrier_freq_cdma2000_s>().pack(bref)); break; - case types::cdma2000_minus1x_rtt_r15: + case types::cdma2000_minus1x_rtt: HANDLE_CODE(c.get<carrier_freq_cdma2000_s>().pack(bref)); break; - case types::utra_tdd_r15: + case types::utra_tdd: HANDLE_CODE( pack_dyn_seq_of(bref, c.get<carrier_freq_list_utra_tdd_r10_l>(), 1, 6, integer_packer<uint16_t>(0, 16383))); break; @@ -1080,22 +1122,22 @@ SRSASN_CODE redirected_carrier_info_r15_ies_c::unpack(cbit_ref& bref) e.unpack(bref); set(e); switch (type_) { - case types::eutra_r15: + case types::eutra: HANDLE_CODE(unpack_integer(c.get<uint32_t>(), bref, (uint32_t)0u, (uint32_t)262143u)); break; - case types::geran_r15: + case types::geran: HANDLE_CODE(c.get<carrier_freqs_geran_s>().unpack(bref)); break; - case types::utra_fdd_r15: + case types::utra_fdd: HANDLE_CODE(unpack_integer(c.get<uint16_t>(), bref, (uint16_t)0u, (uint16_t)16383u)); break; - case types::cdma2000_hrpd_r15: + case types::cdma2000_hrpd: HANDLE_CODE(c.get<carrier_freq_cdma2000_s>().unpack(bref)); break; - case types::cdma2000_minus1x_rtt_r15: + case types::cdma2000_minus1x_rtt: HANDLE_CODE(c.get<carrier_freq_cdma2000_s>().unpack(bref)); break; - case types::utra_tdd_r15: + case types::utra_tdd: HANDLE_CODE( unpack_dyn_seq_of(c.get<carrier_freq_list_utra_tdd_r10_l>(), bref, 1, 6, integer_packer<uint16_t>(0, 16383))); break; diff --git a/lib/src/asn1/rrc/dl_dcch_msg.cc b/lib/src/asn1/rrc/dl_dcch_msg.cc index 3c512982c..243d15147 100644 --- a/lib/src/asn1/rrc/dl_dcch_msg.cc +++ b/lib/src/asn1/rrc/dl_dcch_msg.cc @@ -20,6 +20,88 @@ using namespace asn1::rrc; * Struct Methods ******************************************************************************/ +// CondReconfigurationAddMod-r16 ::= SEQUENCE +SRSASN_CODE cond_recfg_add_mod_r16_s::pack(bit_ref& bref) const +{ + bref.pack(ext, 1); + HANDLE_CODE(bref.pack(trigger_condition_r16_present, 1)); + HANDLE_CODE(bref.pack(cond_recfg_to_apply_r16_present, 1)); + + HANDLE_CODE(pack_integer(bref, cond_recfg_id_r16, (uint8_t)1u, (uint8_t)8u)); + if (trigger_condition_r16_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, trigger_condition_r16, 1, 2, integer_packer<uint8_t>(1, 32))); + } + if (cond_recfg_to_apply_r16_present) { + HANDLE_CODE(cond_recfg_to_apply_r16.pack(bref)); + } + + if (ext) { + ext_groups_packer_guard group_flags; + group_flags[0] |= trigger_condition_sn_r17_present; + group_flags.pack(bref); + + if (group_flags[0]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(trigger_condition_sn_r17_present, 1)); + if (trigger_condition_sn_r17_present) { + HANDLE_CODE(trigger_condition_sn_r17.pack(bref)); + } + } + } + return SRSASN_SUCCESS; +} +SRSASN_CODE cond_recfg_add_mod_r16_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(bref.unpack(trigger_condition_r16_present, 1)); + HANDLE_CODE(bref.unpack(cond_recfg_to_apply_r16_present, 1)); + + HANDLE_CODE(unpack_integer(cond_recfg_id_r16, bref, (uint8_t)1u, (uint8_t)8u)); + if (trigger_condition_r16_present) { + HANDLE_CODE(unpack_dyn_seq_of(trigger_condition_r16, bref, 1, 2, integer_packer<uint8_t>(1, 32))); + } + if (cond_recfg_to_apply_r16_present) { + HANDLE_CODE(cond_recfg_to_apply_r16.unpack(bref)); + } + + if (ext) { + ext_groups_unpacker_guard group_flags(1); + group_flags.unpack(bref); + + if (group_flags[0]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.unpack(trigger_condition_sn_r17_present, 1)); + if (trigger_condition_sn_r17_present) { + HANDLE_CODE(trigger_condition_sn_r17.unpack(bref)); + } + } + } + return SRSASN_SUCCESS; +} +void cond_recfg_add_mod_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_int("condReconfigurationId-r16", cond_recfg_id_r16); + if (trigger_condition_r16_present) { + j.start_array("triggerCondition-r16"); + for (const auto& e1 : trigger_condition_r16) { + j.write_int(e1); + } + j.end_array(); + } + if (cond_recfg_to_apply_r16_present) { + j.write_str("condReconfigurationToApply-r16", cond_recfg_to_apply_r16.to_string()); + } + if (ext) { + if (trigger_condition_sn_r17_present) { + j.write_str("triggerConditionSN-r17", trigger_condition_sn_r17.to_string()); + } + } + j.end_obj(); +} + // SCellConfigCommon-r15 ::= SEQUENCE SRSASN_CODE scell_cfg_common_r15_s::pack(bit_ref& bref) const { @@ -140,6 +222,143 @@ void sl_tf_idx_pair_r12b_s::to_json(json_writer& j) const j.end_obj(); } +// SubframeAssignment-r15 ::= ENUMERATED +const char* sf_assign_r15_opts::to_string() const +{ + static const char* options[] = {"sa0", "sa1", "sa2", "sa3", "sa4", "sa5", "sa6"}; + return convert_enum_idx(options, 7, value, "sf_assign_r15_e"); +} +uint8_t sf_assign_r15_opts::to_number() const +{ + static const uint8_t options[] = {0, 1, 2, 3, 4, 5, 6}; + return map_enum_number(options, 7, value, "sf_assign_r15_e"); +} + +// ConditionalReconfiguration-r16 ::= SEQUENCE +SRSASN_CODE conditional_recfg_r16_s::pack(bit_ref& bref) const +{ + bref.pack(ext, 1); + HANDLE_CODE(bref.pack(cond_recfg_to_add_mod_list_r16_present, 1)); + HANDLE_CODE(bref.pack(cond_recfg_to_rem_list_r16_present, 1)); + HANDLE_CODE(bref.pack(attempt_cond_reconf_r16_present, 1)); + + if (cond_recfg_to_add_mod_list_r16_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, cond_recfg_to_add_mod_list_r16, 1, 8)); + } + if (cond_recfg_to_rem_list_r16_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, cond_recfg_to_rem_list_r16, 1, 8, integer_packer<uint8_t>(1, 8))); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE conditional_recfg_r16_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(bref.unpack(cond_recfg_to_add_mod_list_r16_present, 1)); + HANDLE_CODE(bref.unpack(cond_recfg_to_rem_list_r16_present, 1)); + HANDLE_CODE(bref.unpack(attempt_cond_reconf_r16_present, 1)); + + if (cond_recfg_to_add_mod_list_r16_present) { + HANDLE_CODE(unpack_dyn_seq_of(cond_recfg_to_add_mod_list_r16, bref, 1, 8)); + } + if (cond_recfg_to_rem_list_r16_present) { + HANDLE_CODE(unpack_dyn_seq_of(cond_recfg_to_rem_list_r16, bref, 1, 8, integer_packer<uint8_t>(1, 8))); + } + + return SRSASN_SUCCESS; +} +void conditional_recfg_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (cond_recfg_to_add_mod_list_r16_present) { + j.start_array("condReconfigurationToAddModList-r16"); + for (const auto& e1 : cond_recfg_to_add_mod_list_r16) { + e1.to_json(j); + } + j.end_array(); + } + if (cond_recfg_to_rem_list_r16_present) { + j.start_array("condReconfigurationToRemoveList-r16"); + for (const auto& e1 : cond_recfg_to_rem_list_r16) { + j.write_int(e1); + } + j.end_array(); + } + if (attempt_cond_reconf_r16_present) { + j.write_str("attemptCondReconf-r16", "true"); + } + j.end_obj(); +} + +// RRCConnectionReconfiguration-v1700-IEs ::= SEQUENCE +SRSASN_CODE rrc_conn_recfg_v1700_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(sib_type31_ded_r17_present, 1)); + HANDLE_CODE(bref.pack(scg_state_r17_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + if (sib_type31_ded_r17_present) { + HANDLE_CODE(sib_type31_ded_r17.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE rrc_conn_recfg_v1700_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(sib_type31_ded_r17_present, 1)); + HANDLE_CODE(bref.unpack(scg_state_r17_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + if (sib_type31_ded_r17_present) { + HANDLE_CODE(sib_type31_ded_r17.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void rrc_conn_recfg_v1700_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (sib_type31_ded_r17_present) { + j.write_str("systemInformationBlockType31Dedicated-r17", sib_type31_ded_r17.to_string()); + } + if (scg_state_r17_present) { + j.write_str("scg-State-r17", "deactivated"); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + j.start_obj(); + j.end_obj(); + } + j.end_obj(); +} + +// RSRP-ChangeThresh-r16 ::= ENUMERATED +const char* rsrp_change_thresh_r16_opts::to_string() const +{ + static const char* options[] = {"dB4", + "dB6", + "dB8", + "dB10", + "dB14", + "dB18", + "dB22", + "dB26", + "dB30", + "dB34", + "spare6", + "spare5", + "spare4", + "spare3", + "spare2", + "spare1"}; + return convert_enum_idx(options, 16, value, "rsrp_change_thresh_r16_e"); +} +uint8_t rsrp_change_thresh_r16_opts::to_number() const +{ + static const uint8_t options[] = {4, 6, 8, 10, 14, 18, 22, 26, 30, 34}; + return map_enum_number(options, 10, value, "rsrp_change_thresh_r16_e"); +} + // SCellGroupToAddMod-r15 ::= SEQUENCE SRSASN_CODE scell_group_to_add_mod_r15_s::pack(bit_ref& bref) const { @@ -241,6 +460,73 @@ uint8_t sl_hop_cfg_disc_r12_s::c_r12_opts::to_number() const return map_enum_number(options, 2, value, "sl_hop_cfg_disc_r12_s::c_r12_e_"); } +// TDM-PatternConfig-r15 ::= CHOICE +void tdm_pattern_cfg_r15_c::set(types::options e) +{ + type_ = e; +} +void tdm_pattern_cfg_r15_c::set_release() +{ + set(types::release); +} +tdm_pattern_cfg_r15_c::setup_s_& tdm_pattern_cfg_r15_c::set_setup() +{ + set(types::setup); + return c; +} +void tdm_pattern_cfg_r15_c::to_json(json_writer& j) const +{ + j.start_obj(); + switch (type_) { + case types::release: + break; + case types::setup: + j.write_fieldname("setup"); + j.start_obj(); + j.write_str("subframeAssignment-r15", c.sf_assign_r15.to_string()); + j.write_int("harq-Offset-r15", c.harq_offset_r15); + j.end_obj(); + break; + default: + log_invalid_choice_id(type_, "tdm_pattern_cfg_r15_c"); + } + j.end_obj(); +} +SRSASN_CODE tdm_pattern_cfg_r15_c::pack(bit_ref& bref) const +{ + type_.pack(bref); + switch (type_) { + case types::release: + break; + case types::setup: + HANDLE_CODE(c.sf_assign_r15.pack(bref)); + HANDLE_CODE(pack_integer(bref, c.harq_offset_r15, (uint8_t)0u, (uint8_t)9u)); + break; + default: + log_invalid_choice_id(type_, "tdm_pattern_cfg_r15_c"); + return SRSASN_ERROR_ENCODE_FAIL; + } + return SRSASN_SUCCESS; +} +SRSASN_CODE tdm_pattern_cfg_r15_c::unpack(cbit_ref& bref) +{ + types e; + e.unpack(bref); + set(e); + switch (type_) { + case types::release: + break; + case types::setup: + HANDLE_CODE(c.sf_assign_r15.unpack(bref)); + HANDLE_CODE(unpack_integer(c.harq_offset_r15, bref, (uint8_t)0u, (uint8_t)9u)); + break; + default: + log_invalid_choice_id(type_, "tdm_pattern_cfg_r15_c"); + return SRSASN_ERROR_DECODE_FAIL; + } + return SRSASN_SUCCESS; +} + // IKE-Identity-r13 ::= SEQUENCE SRSASN_CODE ike_id_r13_s::pack(bit_ref& bref) const { @@ -389,6 +675,528 @@ SRSASN_CODE ip_address_r13_c::unpack(cbit_ref& bref) return SRSASN_SUCCESS; } +// PUR-MPDCCH-Config-r16 ::= SEQUENCE +SRSASN_CODE pur_mpdcch_cfg_r16_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(mpdcch_freq_hop_r16, 1)); + HANDLE_CODE(pack_integer(bref, mpdcch_nb_r16, (uint8_t)1u, (uint8_t)16u)); + HANDLE_CODE(mpdcch_prb_pairs_cfg_r16.num_prb_pairs_r16.pack(bref)); + HANDLE_CODE(mpdcch_prb_pairs_cfg_r16.res_block_assign_r16.pack(bref)); + HANDLE_CODE(mpdcch_num_repeat_r16.pack(bref)); + HANDLE_CODE(mpdcch_start_sf_uess_r16.pack(bref)); + HANDLE_CODE(mpdcch_offset_pur_ss_r16.pack(bref)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE pur_mpdcch_cfg_r16_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(mpdcch_freq_hop_r16, 1)); + HANDLE_CODE(unpack_integer(mpdcch_nb_r16, bref, (uint8_t)1u, (uint8_t)16u)); + HANDLE_CODE(mpdcch_prb_pairs_cfg_r16.num_prb_pairs_r16.unpack(bref)); + HANDLE_CODE(mpdcch_prb_pairs_cfg_r16.res_block_assign_r16.unpack(bref)); + HANDLE_CODE(mpdcch_num_repeat_r16.unpack(bref)); + HANDLE_CODE(mpdcch_start_sf_uess_r16.unpack(bref)); + HANDLE_CODE(mpdcch_offset_pur_ss_r16.unpack(bref)); + + return SRSASN_SUCCESS; +} +void pur_mpdcch_cfg_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_bool("mpdcch-FreqHopping-r16", mpdcch_freq_hop_r16); + j.write_int("mpdcch-Narrowband-r16", mpdcch_nb_r16); + j.write_fieldname("mpdcch-PRB-PairsConfig-r16"); + j.start_obj(); + j.write_str("numberPRB-Pairs-r16", mpdcch_prb_pairs_cfg_r16.num_prb_pairs_r16.to_string()); + j.write_str("resourceBlockAssignment-r16", mpdcch_prb_pairs_cfg_r16.res_block_assign_r16.to_string()); + j.end_obj(); + j.write_str("mpdcch-NumRepetition-r16", mpdcch_num_repeat_r16.to_string()); + j.write_fieldname("mpdcch-StartSF-UESS-r16"); + mpdcch_start_sf_uess_r16.to_json(j); + j.write_str("mpdcch-Offset-PUR-SS-r16", mpdcch_offset_pur_ss_r16.to_string()); + j.end_obj(); +} + +const char* pur_mpdcch_cfg_r16_s::mpdcch_prb_pairs_cfg_r16_s_::num_prb_pairs_r16_opts::to_string() const +{ + static const char* options[] = {"n2", "n4", "n6", "spare1"}; + return convert_enum_idx(options, 4, value, "pur_mpdcch_cfg_r16_s::mpdcch_prb_pairs_cfg_r16_s_::num_prb_pairs_r16_e_"); +} +uint8_t pur_mpdcch_cfg_r16_s::mpdcch_prb_pairs_cfg_r16_s_::num_prb_pairs_r16_opts::to_number() const +{ + static const uint8_t options[] = {2, 4, 6}; + return map_enum_number(options, 3, value, "pur_mpdcch_cfg_r16_s::mpdcch_prb_pairs_cfg_r16_s_::num_prb_pairs_r16_e_"); +} + +const char* pur_mpdcch_cfg_r16_s::mpdcch_num_repeat_r16_opts::to_string() const +{ + static const char* options[] = {"r1", "r2", "r4", "r8", "r16", "r32", "r64", "r128", "r256"}; + return convert_enum_idx(options, 9, value, "pur_mpdcch_cfg_r16_s::mpdcch_num_repeat_r16_e_"); +} +uint16_t pur_mpdcch_cfg_r16_s::mpdcch_num_repeat_r16_opts::to_number() const +{ + static const uint16_t options[] = {1, 2, 4, 8, 16, 32, 64, 128, 256}; + return map_enum_number(options, 9, value, "pur_mpdcch_cfg_r16_s::mpdcch_num_repeat_r16_e_"); +} + +void pur_mpdcch_cfg_r16_s::mpdcch_start_sf_uess_r16_c_::destroy_() {} +void pur_mpdcch_cfg_r16_s::mpdcch_start_sf_uess_r16_c_::set(types::options e) +{ + destroy_(); + type_ = e; +} +pur_mpdcch_cfg_r16_s::mpdcch_start_sf_uess_r16_c_::mpdcch_start_sf_uess_r16_c_( + const pur_mpdcch_cfg_r16_s::mpdcch_start_sf_uess_r16_c_& other) +{ + type_ = other.type(); + switch (type_) { + case types::fdd: + c.init(other.c.get<fdd_e_>()); + break; + case types::tdd: + c.init(other.c.get<tdd_e_>()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "pur_mpdcch_cfg_r16_s::mpdcch_start_sf_uess_r16_c_"); + } +} +pur_mpdcch_cfg_r16_s::mpdcch_start_sf_uess_r16_c_& pur_mpdcch_cfg_r16_s::mpdcch_start_sf_uess_r16_c_::operator=( + const pur_mpdcch_cfg_r16_s::mpdcch_start_sf_uess_r16_c_& other) +{ + if (this == &other) { + return *this; + } + set(other.type()); + switch (type_) { + case types::fdd: + c.set(other.c.get<fdd_e_>()); + break; + case types::tdd: + c.set(other.c.get<tdd_e_>()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "pur_mpdcch_cfg_r16_s::mpdcch_start_sf_uess_r16_c_"); + } + + return *this; +} +pur_mpdcch_cfg_r16_s::mpdcch_start_sf_uess_r16_c_::fdd_e_& pur_mpdcch_cfg_r16_s::mpdcch_start_sf_uess_r16_c_::set_fdd() +{ + set(types::fdd); + return c.get<fdd_e_>(); +} +pur_mpdcch_cfg_r16_s::mpdcch_start_sf_uess_r16_c_::tdd_e_& pur_mpdcch_cfg_r16_s::mpdcch_start_sf_uess_r16_c_::set_tdd() +{ + set(types::tdd); + return c.get<tdd_e_>(); +} +void pur_mpdcch_cfg_r16_s::mpdcch_start_sf_uess_r16_c_::to_json(json_writer& j) const +{ + j.start_obj(); + switch (type_) { + case types::fdd: + j.write_str("fdd", c.get<fdd_e_>().to_string()); + break; + case types::tdd: + j.write_str("tdd", c.get<tdd_e_>().to_string()); + break; + default: + log_invalid_choice_id(type_, "pur_mpdcch_cfg_r16_s::mpdcch_start_sf_uess_r16_c_"); + } + j.end_obj(); +} +SRSASN_CODE pur_mpdcch_cfg_r16_s::mpdcch_start_sf_uess_r16_c_::pack(bit_ref& bref) const +{ + type_.pack(bref); + switch (type_) { + case types::fdd: + HANDLE_CODE(c.get<fdd_e_>().pack(bref)); + break; + case types::tdd: + HANDLE_CODE(c.get<tdd_e_>().pack(bref)); + break; + default: + log_invalid_choice_id(type_, "pur_mpdcch_cfg_r16_s::mpdcch_start_sf_uess_r16_c_"); + return SRSASN_ERROR_ENCODE_FAIL; + } + return SRSASN_SUCCESS; +} +SRSASN_CODE pur_mpdcch_cfg_r16_s::mpdcch_start_sf_uess_r16_c_::unpack(cbit_ref& bref) +{ + types e; + e.unpack(bref); + set(e); + switch (type_) { + case types::fdd: + HANDLE_CODE(c.get<fdd_e_>().unpack(bref)); + break; + case types::tdd: + HANDLE_CODE(c.get<tdd_e_>().unpack(bref)); + break; + default: + log_invalid_choice_id(type_, "pur_mpdcch_cfg_r16_s::mpdcch_start_sf_uess_r16_c_"); + return SRSASN_ERROR_DECODE_FAIL; + } + return SRSASN_SUCCESS; +} + +const char* pur_mpdcch_cfg_r16_s::mpdcch_start_sf_uess_r16_c_::fdd_opts::to_string() const +{ + static const char* options[] = {"v1", "v1dot5", "v2", "v2dot5", "v4", "v5", "v8", "v10"}; + return convert_enum_idx(options, 8, value, "pur_mpdcch_cfg_r16_s::mpdcch_start_sf_uess_r16_c_::fdd_e_"); +} +float pur_mpdcch_cfg_r16_s::mpdcch_start_sf_uess_r16_c_::fdd_opts::to_number() const +{ + static const float options[] = {1.0, 1.5, 2.0, 2.5, 4.0, 5.0, 8.0, 10.0}; + return map_enum_number(options, 8, value, "pur_mpdcch_cfg_r16_s::mpdcch_start_sf_uess_r16_c_::fdd_e_"); +} +const char* pur_mpdcch_cfg_r16_s::mpdcch_start_sf_uess_r16_c_::fdd_opts::to_number_string() const +{ + static const char* options[] = {"1", "1.5", "2", "2.5", "4", "5", "8", "10"}; + return convert_enum_idx(options, 8, value, "pur_mpdcch_cfg_r16_s::mpdcch_start_sf_uess_r16_c_::fdd_e_"); +} + +const char* pur_mpdcch_cfg_r16_s::mpdcch_start_sf_uess_r16_c_::tdd_opts::to_string() const +{ + static const char* options[] = {"v1", "v2", "v4", "v5", "v8", "v10", "v20", "spare1"}; + return convert_enum_idx(options, 8, value, "pur_mpdcch_cfg_r16_s::mpdcch_start_sf_uess_r16_c_::tdd_e_"); +} +uint8_t pur_mpdcch_cfg_r16_s::mpdcch_start_sf_uess_r16_c_::tdd_opts::to_number() const +{ + static const uint8_t options[] = {1, 2, 4, 5, 8, 10, 20}; + return map_enum_number(options, 7, value, "pur_mpdcch_cfg_r16_s::mpdcch_start_sf_uess_r16_c_::tdd_e_"); +} + +const char* pur_mpdcch_cfg_r16_s::mpdcch_offset_pur_ss_r16_opts::to_string() const +{ + static const char* options[] = { + "zero", "oneEighth", "oneQuarter", "threeEighth", "oneHalf", "fiveEighth", "threeQuarter", "sevenEighth"}; + return convert_enum_idx(options, 8, value, "pur_mpdcch_cfg_r16_s::mpdcch_offset_pur_ss_r16_e_"); +} +float pur_mpdcch_cfg_r16_s::mpdcch_offset_pur_ss_r16_opts::to_number() const +{ + static const float options[] = {0.0, 0.125, 0.25, 0.375, 0.5, 0.625, 0.75, 0.875}; + return map_enum_number(options, 8, value, "pur_mpdcch_cfg_r16_s::mpdcch_offset_pur_ss_r16_e_"); +} +const char* pur_mpdcch_cfg_r16_s::mpdcch_offset_pur_ss_r16_opts::to_number_string() const +{ + static const char* options[] = {"0", "1/8", "1/4", "3/8", "1/2", "5/8", "3/4", "7/8"}; + return convert_enum_idx(options, 8, value, "pur_mpdcch_cfg_r16_s::mpdcch_offset_pur_ss_r16_e_"); +} + +// PUR-PUCCH-Config-r16 ::= SEQUENCE +SRSASN_CODE pur_pucch_cfg_r16_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(n1_pucch_an_r16_present, 1)); + HANDLE_CODE(bref.pack(pucch_num_repeat_ce_format1_r16_present, 1)); + + if (n1_pucch_an_r16_present) { + HANDLE_CODE(pack_integer(bref, n1_pucch_an_r16, (uint16_t)0u, (uint16_t)2047u)); + } + if (pucch_num_repeat_ce_format1_r16_present) { + HANDLE_CODE(pucch_num_repeat_ce_format1_r16.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE pur_pucch_cfg_r16_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(n1_pucch_an_r16_present, 1)); + HANDLE_CODE(bref.unpack(pucch_num_repeat_ce_format1_r16_present, 1)); + + if (n1_pucch_an_r16_present) { + HANDLE_CODE(unpack_integer(n1_pucch_an_r16, bref, (uint16_t)0u, (uint16_t)2047u)); + } + if (pucch_num_repeat_ce_format1_r16_present) { + HANDLE_CODE(pucch_num_repeat_ce_format1_r16.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void pur_pucch_cfg_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (n1_pucch_an_r16_present) { + j.write_int("n1PUCCH-AN-r16", n1_pucch_an_r16); + } + if (pucch_num_repeat_ce_format1_r16_present) { + j.write_str("pucch-NumRepetitionCE-Format1-r16", pucch_num_repeat_ce_format1_r16.to_string()); + } + j.end_obj(); +} + +const char* pur_pucch_cfg_r16_s::pucch_num_repeat_ce_format1_r16_opts::to_string() const +{ + static const char* options[] = {"n1", "n2", "n4", "n8"}; + return convert_enum_idx(options, 4, value, "pur_pucch_cfg_r16_s::pucch_num_repeat_ce_format1_r16_e_"); +} +uint8_t pur_pucch_cfg_r16_s::pucch_num_repeat_ce_format1_r16_opts::to_number() const +{ + static const uint8_t options[] = {1, 2, 4, 8}; + return map_enum_number(options, 4, value, "pur_pucch_cfg_r16_s::pucch_num_repeat_ce_format1_r16_e_"); +} + +// PUR-PUSCH-Config-r16 ::= SEQUENCE +SRSASN_CODE pur_pusch_cfg_r16_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(pur_grant_info_r16_present, 1)); + HANDLE_CODE(bref.pack(location_ce_mode_b_r16_present, 1)); + + if (pur_grant_info_r16_present) { + HANDLE_CODE(pur_grant_info_r16.pack(bref)); + } + HANDLE_CODE(bref.pack(pur_pusch_freq_hop_r16, 1)); + HANDLE_CODE(pack_integer(bref, p0_ue_pusch_r16, (int8_t)-8, (int8_t)7)); + HANDLE_CODE(alpha_r16.pack(bref)); + HANDLE_CODE(pusch_cyclic_shift_r16.pack(bref)); + HANDLE_CODE(bref.pack(pusch_nb_max_tbs_r16, 1)); + if (location_ce_mode_b_r16_present) { + HANDLE_CODE(pack_integer(bref, location_ce_mode_b_r16, (uint8_t)0u, (uint8_t)5u)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE pur_pusch_cfg_r16_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(pur_grant_info_r16_present, 1)); + HANDLE_CODE(bref.unpack(location_ce_mode_b_r16_present, 1)); + + if (pur_grant_info_r16_present) { + HANDLE_CODE(pur_grant_info_r16.unpack(bref)); + } + HANDLE_CODE(bref.unpack(pur_pusch_freq_hop_r16, 1)); + HANDLE_CODE(unpack_integer(p0_ue_pusch_r16, bref, (int8_t)-8, (int8_t)7)); + HANDLE_CODE(alpha_r16.unpack(bref)); + HANDLE_CODE(pusch_cyclic_shift_r16.unpack(bref)); + HANDLE_CODE(bref.unpack(pusch_nb_max_tbs_r16, 1)); + if (location_ce_mode_b_r16_present) { + HANDLE_CODE(unpack_integer(location_ce_mode_b_r16, bref, (uint8_t)0u, (uint8_t)5u)); + } + + return SRSASN_SUCCESS; +} +void pur_pusch_cfg_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (pur_grant_info_r16_present) { + j.write_fieldname("pur-GrantInfo-r16"); + pur_grant_info_r16.to_json(j); + } + j.write_bool("pur-PUSCH-FreqHopping-r16", pur_pusch_freq_hop_r16); + j.write_int("p0-UE-PUSCH-r16", p0_ue_pusch_r16); + j.write_str("alpha-r16", alpha_r16.to_string()); + j.write_str("pusch-CyclicShift-r16", pusch_cyclic_shift_r16.to_string()); + j.write_bool("pusch-NB-MaxTBS-r16", pusch_nb_max_tbs_r16); + if (location_ce_mode_b_r16_present) { + j.write_int("locationCE-ModeB-r16", location_ce_mode_b_r16); + } + j.end_obj(); +} + +void pur_pusch_cfg_r16_s::pur_grant_info_r16_c_::destroy_() +{ + switch (type_) { + case types::ce_mode_a: + c.destroy<ce_mode_a_s_>(); + break; + case types::ce_mode_b: + c.destroy<ce_mode_b_s_>(); + break; + default: + break; + } +} +void pur_pusch_cfg_r16_s::pur_grant_info_r16_c_::set(types::options e) +{ + destroy_(); + type_ = e; + switch (type_) { + case types::ce_mode_a: + c.init<ce_mode_a_s_>(); + break; + case types::ce_mode_b: + c.init<ce_mode_b_s_>(); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "pur_pusch_cfg_r16_s::pur_grant_info_r16_c_"); + } +} +pur_pusch_cfg_r16_s::pur_grant_info_r16_c_::pur_grant_info_r16_c_( + const pur_pusch_cfg_r16_s::pur_grant_info_r16_c_& other) +{ + type_ = other.type(); + switch (type_) { + case types::ce_mode_a: + c.init(other.c.get<ce_mode_a_s_>()); + break; + case types::ce_mode_b: + c.init(other.c.get<ce_mode_b_s_>()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "pur_pusch_cfg_r16_s::pur_grant_info_r16_c_"); + } +} +pur_pusch_cfg_r16_s::pur_grant_info_r16_c_& +pur_pusch_cfg_r16_s::pur_grant_info_r16_c_::operator=(const pur_pusch_cfg_r16_s::pur_grant_info_r16_c_& other) +{ + if (this == &other) { + return *this; + } + set(other.type()); + switch (type_) { + case types::ce_mode_a: + c.set(other.c.get<ce_mode_a_s_>()); + break; + case types::ce_mode_b: + c.set(other.c.get<ce_mode_b_s_>()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "pur_pusch_cfg_r16_s::pur_grant_info_r16_c_"); + } + + return *this; +} +pur_pusch_cfg_r16_s::pur_grant_info_r16_c_::ce_mode_a_s_& pur_pusch_cfg_r16_s::pur_grant_info_r16_c_::set_ce_mode_a() +{ + set(types::ce_mode_a); + return c.get<ce_mode_a_s_>(); +} +pur_pusch_cfg_r16_s::pur_grant_info_r16_c_::ce_mode_b_s_& pur_pusch_cfg_r16_s::pur_grant_info_r16_c_::set_ce_mode_b() +{ + set(types::ce_mode_b); + return c.get<ce_mode_b_s_>(); +} +void pur_pusch_cfg_r16_s::pur_grant_info_r16_c_::to_json(json_writer& j) const +{ + j.start_obj(); + switch (type_) { + case types::ce_mode_a: + j.write_fieldname("ce-ModeA"); + j.start_obj(); + j.write_str("numRUs-r16", c.get<ce_mode_a_s_>().num_rus_r16.to_string()); + j.write_str("prb-AllocationInfo-r16", c.get<ce_mode_a_s_>().prb_alloc_info_r16.to_string()); + j.write_str("mcs-r16", c.get<ce_mode_a_s_>().mcs_r16.to_string()); + j.write_str("numRepetitions-r16", c.get<ce_mode_a_s_>().num_repeats_r16.to_string()); + j.end_obj(); + break; + case types::ce_mode_b: + j.write_fieldname("ce-ModeB"); + j.start_obj(); + j.write_bool("subPRB-Allocation-r16", c.get<ce_mode_b_s_>().sub_prb_alloc_r16); + j.write_bool("numRUs-r16", c.get<ce_mode_b_s_>().num_rus_r16); + j.write_str("prb-AllocationInfo-r16", c.get<ce_mode_b_s_>().prb_alloc_info_r16.to_string()); + j.write_str("mcs-r16", c.get<ce_mode_b_s_>().mcs_r16.to_string()); + j.write_str("numRepetitions-r16", c.get<ce_mode_b_s_>().num_repeats_r16.to_string()); + j.end_obj(); + break; + default: + log_invalid_choice_id(type_, "pur_pusch_cfg_r16_s::pur_grant_info_r16_c_"); + } + j.end_obj(); +} +SRSASN_CODE pur_pusch_cfg_r16_s::pur_grant_info_r16_c_::pack(bit_ref& bref) const +{ + type_.pack(bref); + switch (type_) { + case types::ce_mode_a: + HANDLE_CODE(c.get<ce_mode_a_s_>().num_rus_r16.pack(bref)); + HANDLE_CODE(c.get<ce_mode_a_s_>().prb_alloc_info_r16.pack(bref)); + HANDLE_CODE(c.get<ce_mode_a_s_>().mcs_r16.pack(bref)); + HANDLE_CODE(c.get<ce_mode_a_s_>().num_repeats_r16.pack(bref)); + break; + case types::ce_mode_b: + HANDLE_CODE(bref.pack(c.get<ce_mode_b_s_>().sub_prb_alloc_r16, 1)); + HANDLE_CODE(bref.pack(c.get<ce_mode_b_s_>().num_rus_r16, 1)); + HANDLE_CODE(c.get<ce_mode_b_s_>().prb_alloc_info_r16.pack(bref)); + HANDLE_CODE(c.get<ce_mode_b_s_>().mcs_r16.pack(bref)); + HANDLE_CODE(c.get<ce_mode_b_s_>().num_repeats_r16.pack(bref)); + break; + default: + log_invalid_choice_id(type_, "pur_pusch_cfg_r16_s::pur_grant_info_r16_c_"); + return SRSASN_ERROR_ENCODE_FAIL; + } + return SRSASN_SUCCESS; +} +SRSASN_CODE pur_pusch_cfg_r16_s::pur_grant_info_r16_c_::unpack(cbit_ref& bref) +{ + types e; + e.unpack(bref); + set(e); + switch (type_) { + case types::ce_mode_a: + HANDLE_CODE(c.get<ce_mode_a_s_>().num_rus_r16.unpack(bref)); + HANDLE_CODE(c.get<ce_mode_a_s_>().prb_alloc_info_r16.unpack(bref)); + HANDLE_CODE(c.get<ce_mode_a_s_>().mcs_r16.unpack(bref)); + HANDLE_CODE(c.get<ce_mode_a_s_>().num_repeats_r16.unpack(bref)); + break; + case types::ce_mode_b: + HANDLE_CODE(bref.unpack(c.get<ce_mode_b_s_>().sub_prb_alloc_r16, 1)); + HANDLE_CODE(bref.unpack(c.get<ce_mode_b_s_>().num_rus_r16, 1)); + HANDLE_CODE(c.get<ce_mode_b_s_>().prb_alloc_info_r16.unpack(bref)); + HANDLE_CODE(c.get<ce_mode_b_s_>().mcs_r16.unpack(bref)); + HANDLE_CODE(c.get<ce_mode_b_s_>().num_repeats_r16.unpack(bref)); + break; + default: + log_invalid_choice_id(type_, "pur_pusch_cfg_r16_s::pur_grant_info_r16_c_"); + return SRSASN_ERROR_DECODE_FAIL; + } + return SRSASN_SUCCESS; +} + +const char* pur_pusch_cfg_r16_s::pusch_cyclic_shift_r16_opts::to_string() const +{ + static const char* options[] = {"n0", "n6"}; + return convert_enum_idx(options, 2, value, "pur_pusch_cfg_r16_s::pusch_cyclic_shift_r16_e_"); +} +uint8_t pur_pusch_cfg_r16_s::pusch_cyclic_shift_r16_opts::to_number() const +{ + static const uint8_t options[] = {0, 6}; + return map_enum_number(options, 2, value, "pur_pusch_cfg_r16_s::pusch_cyclic_shift_r16_e_"); +} + +// PUR-RSRP-ChangeThreshold-r16 ::= SEQUENCE +SRSASN_CODE pur_rsrp_change_thres_r16_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(decrease_thresh_r16_present, 1)); + + HANDLE_CODE(increase_thresh_r16.pack(bref)); + if (decrease_thresh_r16_present) { + HANDLE_CODE(decrease_thresh_r16.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE pur_rsrp_change_thres_r16_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(decrease_thresh_r16_present, 1)); + + HANDLE_CODE(increase_thresh_r16.unpack(bref)); + if (decrease_thresh_r16_present) { + HANDLE_CODE(decrease_thresh_r16.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void pur_rsrp_change_thres_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_str("increaseThresh-r16", increase_thresh_r16.to_string()); + if (decrease_thresh_r16_present) { + j.write_str("decreaseThresh-r16", decrease_thresh_r16.to_string()); + } + j.end_obj(); +} + // PhysicalConfigDedicated-v1370 ::= SEQUENCE SRSASN_CODE phys_cfg_ded_v1370_s::pack(bit_ref& bref) const { @@ -457,6 +1265,88 @@ void ran_area_cfg_r15_s::to_json(json_writer& j) const j.end_obj(); } +// RRCConnectionReconfiguration-v1610-IEs ::= SEQUENCE +SRSASN_CODE rrc_conn_recfg_v1610_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(conditional_recfg_r16_present, 1)); + HANDLE_CODE(bref.pack(daps_source_release_r16_present, 1)); + HANDLE_CODE(bref.pack(tdm_pattern_cfg2_r16_present, 1)); + HANDLE_CODE(bref.pack(sl_cfg_ded_for_nr_r16_present, 1)); + HANDLE_CODE(bref.pack(sl_ssb_prio_eutra_r16_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + if (conditional_recfg_r16_present) { + HANDLE_CODE(conditional_recfg_r16.pack(bref)); + } + if (tdm_pattern_cfg2_r16_present) { + HANDLE_CODE(tdm_pattern_cfg2_r16.pack(bref)); + } + if (sl_cfg_ded_for_nr_r16_present) { + HANDLE_CODE(sl_cfg_ded_for_nr_r16.pack(bref)); + } + if (sl_ssb_prio_eutra_r16_present) { + HANDLE_CODE(pack_integer(bref, sl_ssb_prio_eutra_r16, (uint8_t)1u, (uint8_t)8u)); + } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE rrc_conn_recfg_v1610_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(conditional_recfg_r16_present, 1)); + HANDLE_CODE(bref.unpack(daps_source_release_r16_present, 1)); + HANDLE_CODE(bref.unpack(tdm_pattern_cfg2_r16_present, 1)); + HANDLE_CODE(bref.unpack(sl_cfg_ded_for_nr_r16_present, 1)); + HANDLE_CODE(bref.unpack(sl_ssb_prio_eutra_r16_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + if (conditional_recfg_r16_present) { + HANDLE_CODE(conditional_recfg_r16.unpack(bref)); + } + if (tdm_pattern_cfg2_r16_present) { + HANDLE_CODE(tdm_pattern_cfg2_r16.unpack(bref)); + } + if (sl_cfg_ded_for_nr_r16_present) { + HANDLE_CODE(sl_cfg_ded_for_nr_r16.unpack(bref)); + } + if (sl_ssb_prio_eutra_r16_present) { + HANDLE_CODE(unpack_integer(sl_ssb_prio_eutra_r16, bref, (uint8_t)1u, (uint8_t)8u)); + } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void rrc_conn_recfg_v1610_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (conditional_recfg_r16_present) { + j.write_fieldname("conditionalReconfiguration-r16"); + conditional_recfg_r16.to_json(j); + } + if (daps_source_release_r16_present) { + j.write_str("daps-SourceRelease-r16", "true"); + } + if (tdm_pattern_cfg2_r16_present) { + j.write_fieldname("tdm-PatternConfig2-r16"); + tdm_pattern_cfg2_r16.to_json(j); + } + if (sl_cfg_ded_for_nr_r16_present) { + j.write_str("sl-ConfigDedicatedForNR-r16", sl_cfg_ded_for_nr_r16.to_string()); + } + if (sl_ssb_prio_eutra_r16_present) { + j.write_int("sl-SSB-PriorityEUTRA-r16", sl_ssb_prio_eutra_r16); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + non_crit_ext.to_json(j); + } + j.end_obj(); +} + // RadioResourceConfigCommonSCell-v1440 ::= SEQUENCE SRSASN_CODE rr_cfg_common_scell_v1440_s::pack(bit_ref& bref) const { @@ -618,18 +1508,6 @@ void sl_tx_pool_to_add_mod_r14_s::to_json(json_writer& j) const j.end_obj(); } -// SubframeAssignment-r15 ::= ENUMERATED -const char* sf_assign_r15_opts::to_string() const -{ - static const char* options[] = {"sa0", "sa1", "sa2", "sa3", "sa4", "sa5", "sa6"}; - return convert_enum_idx(options, 7, value, "sf_assign_r15_e"); -} -uint8_t sf_assign_r15_opts::to_number() const -{ - static const uint8_t options[] = {0, 1, 2, 3, 4, 5, 6}; - return map_enum_number(options, 7, value, "sf_assign_r15_e"); -} - // UplinkPowerControlCommonPSCell-r12 ::= SEQUENCE SRSASN_CODE ul_pwr_ctrl_common_ps_cell_r12_s::pack(bit_ref& bref) const { @@ -833,6 +1711,256 @@ void plmn_ran_area_cfg_r15_s::to_json(json_writer& j) const j.end_obj(); } +// PUR-Config-r16 ::= SEQUENCE +SRSASN_CODE pur_cfg_r16_s::pack(bit_ref& bref) const +{ + bref.pack(ext, 1); + HANDLE_CODE(bref.pack(pur_cfg_id_r16_present, 1)); + HANDLE_CODE(bref.pack(pur_implicit_release_after_r16_present, 1)); + HANDLE_CODE(bref.pack(pur_start_time_params_r16_present, 1)); + HANDLE_CODE(bref.pack(pur_rnti_r16_present, 1)); + HANDLE_CODE(bref.pack(pur_time_align_timer_r16_present, 1)); + HANDLE_CODE(bref.pack(pur_rsrp_change_thres_r16_present, 1)); + HANDLE_CODE(bref.pack(pur_resp_win_timer_r16_present, 1)); + HANDLE_CODE(bref.pack(pur_mpdcch_cfg_r16_present, 1)); + HANDLE_CODE(bref.pack(pur_pucch_cfg_r16_present, 1)); + HANDLE_CODE(bref.pack(pur_pusch_cfg_r16_present, 1)); + + if (pur_cfg_id_r16_present) { + HANDLE_CODE(pur_cfg_id_r16.pack(bref)); + } + if (pur_implicit_release_after_r16_present) { + HANDLE_CODE(pur_implicit_release_after_r16.pack(bref)); + } + if (pur_start_time_params_r16_present) { + HANDLE_CODE(pur_start_time_params_r16.periodicity_and_offset_r16.pack(bref)); + HANDLE_CODE(pack_integer(bref, pur_start_time_params_r16.start_sfn_r16, (uint16_t)0u, (uint16_t)1023u)); + HANDLE_CODE(pack_integer(bref, pur_start_time_params_r16.start_sub_frame_r16, (uint8_t)0u, (uint8_t)9u)); + HANDLE_CODE(pur_start_time_params_r16.hsfn_lsb_info_r16.pack(bref)); + } + HANDLE_CODE(pur_num_occasions_r16.pack(bref)); + if (pur_rnti_r16_present) { + HANDLE_CODE(pur_rnti_r16.pack(bref)); + } + if (pur_time_align_timer_r16_present) { + HANDLE_CODE(pack_integer(bref, pur_time_align_timer_r16, (uint8_t)1u, (uint8_t)8u)); + } + if (pur_rsrp_change_thres_r16_present) { + HANDLE_CODE(pur_rsrp_change_thres_r16.pack(bref)); + } + if (pur_resp_win_timer_r16_present) { + HANDLE_CODE(pur_resp_win_timer_r16.pack(bref)); + } + if (pur_mpdcch_cfg_r16_present) { + HANDLE_CODE(pur_mpdcch_cfg_r16.pack(bref)); + } + HANDLE_CODE(bref.pack(pur_pdsch_freq_hop_r16, 1)); + if (pur_pucch_cfg_r16_present) { + HANDLE_CODE(pur_pucch_cfg_r16.pack(bref)); + } + if (pur_pusch_cfg_r16_present) { + HANDLE_CODE(pur_pusch_cfg_r16.pack(bref)); + } + + if (ext) { + ext_groups_packer_guard group_flags; + group_flags[0] |= pur_pdsch_max_tbs_r17_present; + group_flags.pack(bref); + + if (group_flags[0]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(pur_pdsch_max_tbs_r17_present, 1)); + if (pur_pdsch_max_tbs_r17_present) { + HANDLE_CODE(bref.pack(pur_pdsch_max_tbs_r17, 1)); + } + } + } + return SRSASN_SUCCESS; +} +SRSASN_CODE pur_cfg_r16_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(bref.unpack(pur_cfg_id_r16_present, 1)); + HANDLE_CODE(bref.unpack(pur_implicit_release_after_r16_present, 1)); + HANDLE_CODE(bref.unpack(pur_start_time_params_r16_present, 1)); + HANDLE_CODE(bref.unpack(pur_rnti_r16_present, 1)); + HANDLE_CODE(bref.unpack(pur_time_align_timer_r16_present, 1)); + HANDLE_CODE(bref.unpack(pur_rsrp_change_thres_r16_present, 1)); + HANDLE_CODE(bref.unpack(pur_resp_win_timer_r16_present, 1)); + HANDLE_CODE(bref.unpack(pur_mpdcch_cfg_r16_present, 1)); + HANDLE_CODE(bref.unpack(pur_pucch_cfg_r16_present, 1)); + HANDLE_CODE(bref.unpack(pur_pusch_cfg_r16_present, 1)); + + if (pur_cfg_id_r16_present) { + HANDLE_CODE(pur_cfg_id_r16.unpack(bref)); + } + if (pur_implicit_release_after_r16_present) { + HANDLE_CODE(pur_implicit_release_after_r16.unpack(bref)); + } + if (pur_start_time_params_r16_present) { + HANDLE_CODE(pur_start_time_params_r16.periodicity_and_offset_r16.unpack(bref)); + HANDLE_CODE(unpack_integer(pur_start_time_params_r16.start_sfn_r16, bref, (uint16_t)0u, (uint16_t)1023u)); + HANDLE_CODE(unpack_integer(pur_start_time_params_r16.start_sub_frame_r16, bref, (uint8_t)0u, (uint8_t)9u)); + HANDLE_CODE(pur_start_time_params_r16.hsfn_lsb_info_r16.unpack(bref)); + } + HANDLE_CODE(pur_num_occasions_r16.unpack(bref)); + if (pur_rnti_r16_present) { + HANDLE_CODE(pur_rnti_r16.unpack(bref)); + } + if (pur_time_align_timer_r16_present) { + HANDLE_CODE(unpack_integer(pur_time_align_timer_r16, bref, (uint8_t)1u, (uint8_t)8u)); + } + if (pur_rsrp_change_thres_r16_present) { + HANDLE_CODE(pur_rsrp_change_thres_r16.unpack(bref)); + } + if (pur_resp_win_timer_r16_present) { + HANDLE_CODE(pur_resp_win_timer_r16.unpack(bref)); + } + if (pur_mpdcch_cfg_r16_present) { + HANDLE_CODE(pur_mpdcch_cfg_r16.unpack(bref)); + } + HANDLE_CODE(bref.unpack(pur_pdsch_freq_hop_r16, 1)); + if (pur_pucch_cfg_r16_present) { + HANDLE_CODE(pur_pucch_cfg_r16.unpack(bref)); + } + if (pur_pusch_cfg_r16_present) { + HANDLE_CODE(pur_pusch_cfg_r16.unpack(bref)); + } + + if (ext) { + ext_groups_unpacker_guard group_flags(1); + group_flags.unpack(bref); + + if (group_flags[0]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.unpack(pur_pdsch_max_tbs_r17_present, 1)); + if (pur_pdsch_max_tbs_r17_present) { + HANDLE_CODE(bref.unpack(pur_pdsch_max_tbs_r17, 1)); + } + } + } + return SRSASN_SUCCESS; +} +void pur_cfg_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (pur_cfg_id_r16_present) { + j.write_str("pur-ConfigID-r16", pur_cfg_id_r16.to_string()); + } + if (pur_implicit_release_after_r16_present) { + j.write_str("pur-ImplicitReleaseAfter-r16", pur_implicit_release_after_r16.to_string()); + } + if (pur_start_time_params_r16_present) { + j.write_fieldname("pur-StartTimeParameters-r16"); + j.start_obj(); + j.write_fieldname("periodicityAndOffset-r16"); + pur_start_time_params_r16.periodicity_and_offset_r16.to_json(j); + j.write_int("startSFN-r16", pur_start_time_params_r16.start_sfn_r16); + j.write_int("startSubFrame-r16", pur_start_time_params_r16.start_sub_frame_r16); + j.write_str("hsfn-LSB-Info-r16", pur_start_time_params_r16.hsfn_lsb_info_r16.to_string()); + j.end_obj(); + } + j.write_str("pur-NumOccasions-r16", pur_num_occasions_r16.to_string()); + if (pur_rnti_r16_present) { + j.write_str("pur-RNTI-r16", pur_rnti_r16.to_string()); + } + if (pur_time_align_timer_r16_present) { + j.write_int("pur-TimeAlignmentTimer-r16", pur_time_align_timer_r16); + } + if (pur_rsrp_change_thres_r16_present) { + j.write_fieldname("pur-RSRP-ChangeThreshold-r16"); + pur_rsrp_change_thres_r16.to_json(j); + } + if (pur_resp_win_timer_r16_present) { + j.write_str("pur-ResponseWindowTimer-r16", pur_resp_win_timer_r16.to_string()); + } + if (pur_mpdcch_cfg_r16_present) { + j.write_fieldname("pur-MPDCCH-Config-r16"); + pur_mpdcch_cfg_r16.to_json(j); + } + j.write_bool("pur-PDSCH-FreqHopping-r16", pur_pdsch_freq_hop_r16); + if (pur_pucch_cfg_r16_present) { + j.write_fieldname("pur-PUCCH-Config-r16"); + pur_pucch_cfg_r16.to_json(j); + } + if (pur_pusch_cfg_r16_present) { + j.write_fieldname("pur-PUSCH-Config-r16"); + pur_pusch_cfg_r16.to_json(j); + } + if (ext) { + if (pur_pdsch_max_tbs_r17_present) { + j.write_bool("pur-PDSCH-maxTBS-r17", pur_pdsch_max_tbs_r17); + } + } + j.end_obj(); +} + +const char* pur_cfg_r16_s::pur_implicit_release_after_r16_opts::to_string() const +{ + static const char* options[] = {"n2", "n4", "n8", "spare"}; + return convert_enum_idx(options, 4, value, "pur_cfg_r16_s::pur_implicit_release_after_r16_e_"); +} +uint8_t pur_cfg_r16_s::pur_implicit_release_after_r16_opts::to_number() const +{ + static const uint8_t options[] = {2, 4, 8}; + return map_enum_number(options, 3, value, "pur_cfg_r16_s::pur_implicit_release_after_r16_e_"); +} + +const char* pur_cfg_r16_s::pur_num_occasions_r16_opts::to_string() const +{ + static const char* options[] = {"one", "infinite"}; + return convert_enum_idx(options, 2, value, "pur_cfg_r16_s::pur_num_occasions_r16_e_"); +} +uint8_t pur_cfg_r16_s::pur_num_occasions_r16_opts::to_number() const +{ + static const uint8_t options[] = {1}; + return map_enum_number(options, 1, value, "pur_cfg_r16_s::pur_num_occasions_r16_e_"); +} + +const char* pur_cfg_r16_s::pur_resp_win_timer_r16_opts::to_string() const +{ + static const char* options[] = {"sf240", "sf480", "sf960", "sf1920", "sf3840", "sf5760", "sf7680", "sf10240"}; + return convert_enum_idx(options, 8, value, "pur_cfg_r16_s::pur_resp_win_timer_r16_e_"); +} +uint16_t pur_cfg_r16_s::pur_resp_win_timer_r16_opts::to_number() const +{ + static const uint16_t options[] = {240, 480, 960, 1920, 3840, 5760, 7680, 10240}; + return map_enum_number(options, 8, value, "pur_cfg_r16_s::pur_resp_win_timer_r16_e_"); +} + +// RRC-InactiveConfig-v1610 ::= SEQUENCE +SRSASN_CODE rrc_inactive_cfg_v1610_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(ran_paging_cycle_v1610.pack(bref)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE rrc_inactive_cfg_v1610_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(ran_paging_cycle_v1610.unpack(bref)); + + return SRSASN_SUCCESS; +} +void rrc_inactive_cfg_v1610_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_str("ran-PagingCycle-v1610", ran_paging_cycle_v1610.to_string()); + j.end_obj(); +} + +const char* rrc_inactive_cfg_v1610_s::ran_paging_cycle_v1610_opts::to_string() const +{ + static const char* options[] = {"rf512", "rf1024"}; + return convert_enum_idx(options, 2, value, "rrc_inactive_cfg_v1610_s::ran_paging_cycle_v1610_e_"); +} +uint16_t rrc_inactive_cfg_v1610_s::ran_paging_cycle_v1610_opts::to_number() const +{ + static const uint16_t options[] = {512, 1024}; + return map_enum_number(options, 2, value, "rrc_inactive_cfg_v1610_s::ran_paging_cycle_v1610_e_"); +} + // RRCConnectionReconfiguration-v1530-IEs ::= SEQUENCE SRSASN_CODE rrc_conn_recfg_v1530_ies_s::pack(bit_ref& bref) const { @@ -862,6 +1990,9 @@ SRSASN_CODE rrc_conn_recfg_v1530_ies_s::pack(bit_ref& bref) const if (smtc_r15_present) { HANDLE_CODE(smtc_r15.pack(bref)); } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } return SRSASN_SUCCESS; } @@ -893,6 +2024,9 @@ SRSASN_CODE rrc_conn_recfg_v1530_ies_s::unpack(cbit_ref& bref) if (smtc_r15_present) { HANDLE_CODE(smtc_r15.unpack(bref)); } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } return SRSASN_SUCCESS; } @@ -933,6 +2067,34 @@ void rrc_conn_recfg_v1530_ies_s::to_json(json_writer& j) const } if (non_crit_ext_present) { j.write_fieldname("nonCriticalExtension"); + non_crit_ext.to_json(j); + } + j.end_obj(); +} + +// RRCConnectionRelease-v1650-IEs ::= SEQUENCE +SRSASN_CODE rrc_conn_release_v1650_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(mps_prio_ind_r16_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE rrc_conn_release_v1650_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(mps_prio_ind_r16_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + return SRSASN_SUCCESS; +} +void rrc_conn_release_v1650_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (mps_prio_ind_r16_present) { + j.write_str("mpsPriorityIndication-r16", "true"); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); j.start_obj(); j.end_obj(); } @@ -1545,73 +2707,6 @@ SRSASN_CODE sl_disc_tx_res_r13_c::setup_c_::unpack(cbit_ref& bref) return SRSASN_SUCCESS; } -// TDM-PatternConfig-r15 ::= CHOICE -void tdm_pattern_cfg_r15_c::set(types::options e) -{ - type_ = e; -} -void tdm_pattern_cfg_r15_c::set_release() -{ - set(types::release); -} -tdm_pattern_cfg_r15_c::setup_s_& tdm_pattern_cfg_r15_c::set_setup() -{ - set(types::setup); - return c; -} -void tdm_pattern_cfg_r15_c::to_json(json_writer& j) const -{ - j.start_obj(); - switch (type_) { - case types::release: - break; - case types::setup: - j.write_fieldname("setup"); - j.start_obj(); - j.write_str("subframeAssignment-r15", c.sf_assign_r15.to_string()); - j.write_int("harq-Offset-r15", c.harq_offset_r15); - j.end_obj(); - break; - default: - log_invalid_choice_id(type_, "tdm_pattern_cfg_r15_c"); - } - j.end_obj(); -} -SRSASN_CODE tdm_pattern_cfg_r15_c::pack(bit_ref& bref) const -{ - type_.pack(bref); - switch (type_) { - case types::release: - break; - case types::setup: - HANDLE_CODE(c.sf_assign_r15.pack(bref)); - HANDLE_CODE(pack_integer(bref, c.harq_offset_r15, (uint8_t)0u, (uint8_t)9u)); - break; - default: - log_invalid_choice_id(type_, "tdm_pattern_cfg_r15_c"); - return SRSASN_ERROR_ENCODE_FAIL; - } - return SRSASN_SUCCESS; -} -SRSASN_CODE tdm_pattern_cfg_r15_c::unpack(cbit_ref& bref) -{ - types e; - e.unpack(bref); - set(e); - switch (type_) { - case types::release: - break; - case types::setup: - HANDLE_CODE(c.sf_assign_r15.unpack(bref)); - HANDLE_CODE(unpack_integer(c.harq_offset_r15, bref, (uint8_t)0u, (uint8_t)9u)); - break; - default: - log_invalid_choice_id(type_, "tdm_pattern_cfg_r15_c"); - return SRSASN_ERROR_DECODE_FAIL; - } - return SRSASN_SUCCESS; -} - // TunnelConfigLWIP-r13 ::= SEQUENCE SRSASN_CODE tunnel_cfg_lwip_r13_s::pack(bit_ref& bref) const { @@ -2475,6 +3570,115 @@ SRSASN_CODE rrc_conn_recfg_v1510_ies_s::nr_cfg_r15_c_::unpack(cbit_ref& bref) return SRSASN_SUCCESS; } +// RRCConnectionRelease-v1610-IEs ::= SEQUENCE +SRSASN_CODE rrc_conn_release_v1610_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(full_i_rnti_r16_present, 1)); + HANDLE_CODE(bref.pack(short_i_rnti_r16_present, 1)); + HANDLE_CODE(bref.pack(pur_cfg_r16_present, 1)); + HANDLE_CODE(bref.pack(rrc_inactive_cfg_v1610_present, 1)); + HANDLE_CODE(bref.pack(release_idle_meas_cfg_r16_present, 1)); + HANDLE_CODE(bref.pack(alt_freq_priorities_r16_present, 1)); + HANDLE_CODE(bref.pack(t323_r16_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + if (full_i_rnti_r16_present) { + HANDLE_CODE(full_i_rnti_r16.pack(bref)); + } + if (short_i_rnti_r16_present) { + HANDLE_CODE(short_i_rnti_r16.pack(bref)); + } + if (pur_cfg_r16_present) { + HANDLE_CODE(pur_cfg_r16.pack(bref)); + } + if (rrc_inactive_cfg_v1610_present) { + HANDLE_CODE(rrc_inactive_cfg_v1610.pack(bref)); + } + if (t323_r16_present) { + HANDLE_CODE(t323_r16.pack(bref)); + } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE rrc_conn_release_v1610_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(full_i_rnti_r16_present, 1)); + HANDLE_CODE(bref.unpack(short_i_rnti_r16_present, 1)); + HANDLE_CODE(bref.unpack(pur_cfg_r16_present, 1)); + HANDLE_CODE(bref.unpack(rrc_inactive_cfg_v1610_present, 1)); + HANDLE_CODE(bref.unpack(release_idle_meas_cfg_r16_present, 1)); + HANDLE_CODE(bref.unpack(alt_freq_priorities_r16_present, 1)); + HANDLE_CODE(bref.unpack(t323_r16_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + if (full_i_rnti_r16_present) { + HANDLE_CODE(full_i_rnti_r16.unpack(bref)); + } + if (short_i_rnti_r16_present) { + HANDLE_CODE(short_i_rnti_r16.unpack(bref)); + } + if (pur_cfg_r16_present) { + HANDLE_CODE(pur_cfg_r16.unpack(bref)); + } + if (rrc_inactive_cfg_v1610_present) { + HANDLE_CODE(rrc_inactive_cfg_v1610.unpack(bref)); + } + if (t323_r16_present) { + HANDLE_CODE(t323_r16.unpack(bref)); + } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void rrc_conn_release_v1610_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (full_i_rnti_r16_present) { + j.write_str("fullI-RNTI-r16", full_i_rnti_r16.to_string()); + } + if (short_i_rnti_r16_present) { + j.write_str("shortI-RNTI-r16", short_i_rnti_r16.to_string()); + } + if (pur_cfg_r16_present) { + j.write_fieldname("pur-Config-r16"); + pur_cfg_r16.to_json(j); + } + if (rrc_inactive_cfg_v1610_present) { + j.write_fieldname("rrc-InactiveConfig-v1610"); + rrc_inactive_cfg_v1610.to_json(j); + } + if (release_idle_meas_cfg_r16_present) { + j.write_str("releaseIdleMeasConfig-r16", "true"); + } + if (alt_freq_priorities_r16_present) { + j.write_str("altFreqPriorities-r16", "true"); + } + if (t323_r16_present) { + j.write_str("t323-r16", t323_r16.to_string()); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + non_crit_ext.to_json(j); + } + j.end_obj(); +} + +const char* rrc_conn_release_v1610_ies_s::t323_r16_opts::to_string() const +{ + static const char* options[] = {"min5", "min10", "min20", "min30", "min60", "min120", "min180", "min720"}; + return convert_enum_idx(options, 8, value, "rrc_conn_release_v1610_ies_s::t323_r16_e_"); +} +uint16_t rrc_conn_release_v1610_ies_s::t323_r16_opts::to_number() const +{ + static const uint16_t options[] = {5, 10, 20, 30, 60, 120, 180, 720}; + return map_enum_number(options, 8, value, "rrc_conn_release_v1610_ies_s::t323_r16_e_"); +} + // SL-CommTxPoolToAddMod-r12 ::= SEQUENCE SRSASN_CODE sl_comm_tx_pool_to_add_mod_r12_s::pack(bit_ref& bref) const { @@ -3354,6 +4558,43 @@ SRSASN_CODE sl_v2x_cfg_ded_r14_s::comm_tx_res_v1530_c_::setup_c_::unpack(cbit_re return SRSASN_SUCCESS; } +// ValidityArea-r16 ::= SEQUENCE +SRSASN_CODE validity_area_r16_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(validity_cell_list_r16_present, 1)); + + HANDLE_CODE(pack_integer(bref, carrier_freq_r16, (uint32_t)0u, (uint32_t)262143u)); + if (validity_cell_list_r16_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, validity_cell_list_r16, 1, 8)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE validity_area_r16_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(validity_cell_list_r16_present, 1)); + + HANDLE_CODE(unpack_integer(carrier_freq_r16, bref, (uint32_t)0u, (uint32_t)262143u)); + if (validity_cell_list_r16_present) { + HANDLE_CODE(unpack_dyn_seq_of(validity_cell_list_r16, bref, 1, 8)); + } + + return SRSASN_SUCCESS; +} +void validity_area_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_int("carrierFreq-r16", carrier_freq_r16); + if (validity_cell_list_r16_present) { + j.start_array("validityCellList-r16"); + for (const auto& e1 : validity_cell_list_r16) { + e1.to_json(j); + } + j.end_array(); + } + j.end_obj(); +} + // LWA-Configuration-r13 ::= CHOICE void lwa_cfg_r13_c::set(types::options e) { @@ -3514,10 +4755,10 @@ void pwr_coordination_info_r12_s::to_json(json_writer& j) const void ran_notif_area_info_r15_c::destroy_() { switch (type_) { - case types::cell_list_r15: + case types::cell_list: c.destroy<plmn_ran_area_cell_list_r15_l>(); break; - case types::ran_area_cfg_list_r15: + case types::ran_area_cfg_list: c.destroy<plmn_ran_area_cfg_list_r15_l>(); break; default: @@ -3529,10 +4770,10 @@ void ran_notif_area_info_r15_c::set(types::options e) destroy_(); type_ = e; switch (type_) { - case types::cell_list_r15: + case types::cell_list: c.init<plmn_ran_area_cell_list_r15_l>(); break; - case types::ran_area_cfg_list_r15: + case types::ran_area_cfg_list: c.init<plmn_ran_area_cfg_list_r15_l>(); break; case types::nulltype: @@ -3545,10 +4786,10 @@ ran_notif_area_info_r15_c::ran_notif_area_info_r15_c(const ran_notif_area_info_r { type_ = other.type(); switch (type_) { - case types::cell_list_r15: + case types::cell_list: c.init(other.c.get<plmn_ran_area_cell_list_r15_l>()); break; - case types::ran_area_cfg_list_r15: + case types::ran_area_cfg_list: c.init(other.c.get<plmn_ran_area_cfg_list_r15_l>()); break; case types::nulltype: @@ -3564,10 +4805,10 @@ ran_notif_area_info_r15_c& ran_notif_area_info_r15_c::operator=(const ran_notif_ } set(other.type()); switch (type_) { - case types::cell_list_r15: + case types::cell_list: c.set(other.c.get<plmn_ran_area_cell_list_r15_l>()); break; - case types::ran_area_cfg_list_r15: + case types::ran_area_cfg_list: c.set(other.c.get<plmn_ran_area_cfg_list_r15_l>()); break; case types::nulltype: @@ -3578,29 +4819,29 @@ ran_notif_area_info_r15_c& ran_notif_area_info_r15_c::operator=(const ran_notif_ return *this; } -plmn_ran_area_cell_list_r15_l& ran_notif_area_info_r15_c::set_cell_list_r15() +plmn_ran_area_cell_list_r15_l& ran_notif_area_info_r15_c::set_cell_list() { - set(types::cell_list_r15); + set(types::cell_list); return c.get<plmn_ran_area_cell_list_r15_l>(); } -plmn_ran_area_cfg_list_r15_l& ran_notif_area_info_r15_c::set_ran_area_cfg_list_r15() +plmn_ran_area_cfg_list_r15_l& ran_notif_area_info_r15_c::set_ran_area_cfg_list() { - set(types::ran_area_cfg_list_r15); + set(types::ran_area_cfg_list); return c.get<plmn_ran_area_cfg_list_r15_l>(); } void ran_notif_area_info_r15_c::to_json(json_writer& j) const { j.start_obj(); switch (type_) { - case types::cell_list_r15: - j.start_array("cellList-r15"); + case types::cell_list: + j.start_array("cellList"); for (const auto& e1 : c.get<plmn_ran_area_cell_list_r15_l>()) { e1.to_json(j); } j.end_array(); break; - case types::ran_area_cfg_list_r15: - j.start_array("ran-AreaConfigList-r15"); + case types::ran_area_cfg_list: + j.start_array("ran-AreaConfigList"); for (const auto& e1 : c.get<plmn_ran_area_cfg_list_r15_l>()) { e1.to_json(j); } @@ -3615,10 +4856,10 @@ SRSASN_CODE ran_notif_area_info_r15_c::pack(bit_ref& bref) const { type_.pack(bref); switch (type_) { - case types::cell_list_r15: + case types::cell_list: HANDLE_CODE(pack_dyn_seq_of(bref, c.get<plmn_ran_area_cell_list_r15_l>(), 1, 8)); break; - case types::ran_area_cfg_list_r15: + case types::ran_area_cfg_list: HANDLE_CODE(pack_dyn_seq_of(bref, c.get<plmn_ran_area_cfg_list_r15_l>(), 1, 8)); break; default: @@ -3633,10 +4874,10 @@ SRSASN_CODE ran_notif_area_info_r15_c::unpack(cbit_ref& bref) e.unpack(bref); set(e); switch (type_) { - case types::cell_list_r15: + case types::cell_list: HANDLE_CODE(unpack_dyn_seq_of(c.get<plmn_ran_area_cell_list_r15_l>(), bref, 1, 8)); break; - case types::ran_area_cfg_list_r15: + case types::ran_area_cfg_list: HANDLE_CODE(unpack_dyn_seq_of(c.get<plmn_ran_area_cfg_list_r15_l>(), bref, 1, 8)); break; default: @@ -3791,6 +5032,10 @@ SRSASN_CODE rrc_conn_release_v15b0_ies_s::pack(bit_ref& bref) const HANDLE_CODE(bref.pack(no_last_cell_upd_r15_present, 1)); HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } + return SRSASN_SUCCESS; } SRSASN_CODE rrc_conn_release_v15b0_ies_s::unpack(cbit_ref& bref) @@ -3798,6 +5043,10 @@ SRSASN_CODE rrc_conn_release_v15b0_ies_s::unpack(cbit_ref& bref) HANDLE_CODE(bref.unpack(no_last_cell_upd_r15_present, 1)); HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } + return SRSASN_SUCCESS; } void rrc_conn_release_v15b0_ies_s::to_json(json_writer& j) const @@ -3808,8 +5057,7 @@ void rrc_conn_release_v15b0_ies_s::to_json(json_writer& j) const } if (non_crit_ext_present) { j.write_fieldname("nonCriticalExtension"); - j.start_obj(); - j.end_obj(); + non_crit_ext.to_json(j); } j.end_obj(); } @@ -4221,6 +5469,25 @@ SRSASN_CODE meas_idle_cfg_ded_r15_s::pack(bit_ref& bref) const } HANDLE_CODE(meas_idle_dur_r15.pack(bref)); + if (ext) { + ext_groups_packer_guard group_flags; + group_flags[0] |= meas_idle_carrier_list_nr_r16.is_present(); + group_flags[0] |= validity_area_list_r16.is_present(); + group_flags.pack(bref); + + if (group_flags[0]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(meas_idle_carrier_list_nr_r16.is_present(), 1)); + HANDLE_CODE(bref.pack(validity_area_list_r16.is_present(), 1)); + if (meas_idle_carrier_list_nr_r16.is_present()) { + HANDLE_CODE(pack_dyn_seq_of(bref, *meas_idle_carrier_list_nr_r16, 1, 8)); + } + if (validity_area_list_r16.is_present()) { + HANDLE_CODE(pack_dyn_seq_of(bref, *validity_area_list_r16, 1, 8)); + } + } + } return SRSASN_SUCCESS; } SRSASN_CODE meas_idle_cfg_ded_r15_s::unpack(cbit_ref& bref) @@ -4233,6 +5500,27 @@ SRSASN_CODE meas_idle_cfg_ded_r15_s::unpack(cbit_ref& bref) } HANDLE_CODE(meas_idle_dur_r15.unpack(bref)); + if (ext) { + ext_groups_unpacker_guard group_flags(1); + group_flags.unpack(bref); + + if (group_flags[0]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + bool meas_idle_carrier_list_nr_r16_present; + HANDLE_CODE(bref.unpack(meas_idle_carrier_list_nr_r16_present, 1)); + meas_idle_carrier_list_nr_r16.set_present(meas_idle_carrier_list_nr_r16_present); + bool validity_area_list_r16_present; + HANDLE_CODE(bref.unpack(validity_area_list_r16_present, 1)); + validity_area_list_r16.set_present(validity_area_list_r16_present); + if (meas_idle_carrier_list_nr_r16.is_present()) { + HANDLE_CODE(unpack_dyn_seq_of(*meas_idle_carrier_list_nr_r16, bref, 1, 8)); + } + if (validity_area_list_r16.is_present()) { + HANDLE_CODE(unpack_dyn_seq_of(*validity_area_list_r16, bref, 1, 8)); + } + } + } return SRSASN_SUCCESS; } void meas_idle_cfg_ded_r15_s::to_json(json_writer& j) const @@ -4246,6 +5534,22 @@ void meas_idle_cfg_ded_r15_s::to_json(json_writer& j) const j.end_array(); } j.write_str("measIdleDuration-r15", meas_idle_dur_r15.to_string()); + if (ext) { + if (meas_idle_carrier_list_nr_r16.is_present()) { + j.start_array("measIdleCarrierListNR-r16"); + for (const auto& e1 : *meas_idle_carrier_list_nr_r16) { + e1.to_json(j); + } + j.end_array(); + } + if (validity_area_list_r16.is_present()) { + j.start_array("validityAreaList-r16"); + for (const auto& e1 : *validity_area_list_r16) { + e1.to_json(j); + } + j.end_array(); + } + } j.end_obj(); } @@ -4607,6 +5911,111 @@ SRSASN_CODE scg_cfg_r12_c::unpack(cbit_ref& bref) return SRSASN_SUCCESS; } +// SCellToAddMod-r16 ::= SEQUENCE +SRSASN_CODE scell_to_add_mod_r16_s::pack(bit_ref& bref) const +{ + bref.pack(ext, 1); + HANDLE_CODE(bref.pack(cell_identif_r16_present, 1)); + HANDLE_CODE(bref.pack(rr_cfg_common_scell_r16_present, 1)); + HANDLE_CODE(bref.pack(rr_cfg_ded_scell_r16_present, 1)); + HANDLE_CODE(bref.pack(ant_info_ded_scell_r16_present, 1)); + HANDLE_CODE(bref.pack(srs_switch_from_serv_cell_idx_r16_present, 1)); + HANDLE_CODE(bref.pack(scell_state_r16_present, 1)); + + HANDLE_CODE(pack_integer(bref, scell_idx_r16, (uint8_t)1u, (uint8_t)31u)); + if (cell_identif_r16_present) { + HANDLE_CODE(pack_integer(bref, cell_identif_r16.pci_r16, (uint16_t)0u, (uint16_t)503u)); + HANDLE_CODE(pack_integer(bref, cell_identif_r16.dl_carrier_freq_r16, (uint32_t)0u, (uint32_t)262143u)); + } + if (rr_cfg_common_scell_r16_present) { + HANDLE_CODE(rr_cfg_common_scell_r16.pack(bref)); + } + if (rr_cfg_ded_scell_r16_present) { + HANDLE_CODE(rr_cfg_ded_scell_r16.pack(bref)); + } + if (ant_info_ded_scell_r16_present) { + HANDLE_CODE(ant_info_ded_scell_r16.pack(bref)); + } + if (srs_switch_from_serv_cell_idx_r16_present) { + HANDLE_CODE(pack_integer(bref, srs_switch_from_serv_cell_idx_r16, (uint8_t)0u, (uint8_t)31u)); + } + if (scell_state_r16_present) { + HANDLE_CODE(scell_state_r16.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE scell_to_add_mod_r16_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(bref.unpack(cell_identif_r16_present, 1)); + HANDLE_CODE(bref.unpack(rr_cfg_common_scell_r16_present, 1)); + HANDLE_CODE(bref.unpack(rr_cfg_ded_scell_r16_present, 1)); + HANDLE_CODE(bref.unpack(ant_info_ded_scell_r16_present, 1)); + HANDLE_CODE(bref.unpack(srs_switch_from_serv_cell_idx_r16_present, 1)); + HANDLE_CODE(bref.unpack(scell_state_r16_present, 1)); + + HANDLE_CODE(unpack_integer(scell_idx_r16, bref, (uint8_t)1u, (uint8_t)31u)); + if (cell_identif_r16_present) { + HANDLE_CODE(unpack_integer(cell_identif_r16.pci_r16, bref, (uint16_t)0u, (uint16_t)503u)); + HANDLE_CODE(unpack_integer(cell_identif_r16.dl_carrier_freq_r16, bref, (uint32_t)0u, (uint32_t)262143u)); + } + if (rr_cfg_common_scell_r16_present) { + HANDLE_CODE(rr_cfg_common_scell_r16.unpack(bref)); + } + if (rr_cfg_ded_scell_r16_present) { + HANDLE_CODE(rr_cfg_ded_scell_r16.unpack(bref)); + } + if (ant_info_ded_scell_r16_present) { + HANDLE_CODE(ant_info_ded_scell_r16.unpack(bref)); + } + if (srs_switch_from_serv_cell_idx_r16_present) { + HANDLE_CODE(unpack_integer(srs_switch_from_serv_cell_idx_r16, bref, (uint8_t)0u, (uint8_t)31u)); + } + if (scell_state_r16_present) { + HANDLE_CODE(scell_state_r16.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void scell_to_add_mod_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_int("sCellIndex-r16", scell_idx_r16); + if (cell_identif_r16_present) { + j.write_fieldname("cellIdentification-r16"); + j.start_obj(); + j.write_int("physCellId-r16", cell_identif_r16.pci_r16); + j.write_int("dl-CarrierFreq-r16", cell_identif_r16.dl_carrier_freq_r16); + j.end_obj(); + } + if (rr_cfg_common_scell_r16_present) { + j.write_fieldname("radioResourceConfigCommonSCell-r16"); + rr_cfg_common_scell_r16.to_json(j); + } + if (rr_cfg_ded_scell_r16_present) { + j.write_fieldname("radioResourceConfigDedicatedSCell-r16"); + rr_cfg_ded_scell_r16.to_json(j); + } + if (ant_info_ded_scell_r16_present) { + j.write_fieldname("antennaInfoDedicatedSCell-r16"); + ant_info_ded_scell_r16.to_json(j); + } + if (srs_switch_from_serv_cell_idx_r16_present) { + j.write_int("srs-SwitchFromServCellIndex-r16", srs_switch_from_serv_cell_idx_r16); + } + if (scell_state_r16_present) { + j.write_str("sCellState-r16", scell_state_r16.to_string()); + } + j.end_obj(); +} + +const char* scell_to_add_mod_r16_s::scell_state_r16_opts::to_string() const +{ + static const char* options[] = {"activated", "dormant"}; + return convert_enum_idx(options, 2, value, "scell_to_add_mod_r16_s::scell_state_r16_e_"); +} + // SL-CommConfig-r12 ::= SEQUENCE SRSASN_CODE sl_comm_cfg_r12_s::pack(bit_ref& bref) const { @@ -6231,6 +7640,35 @@ const char* sl_sync_tx_ctrl_r12_s::network_ctrl_sync_tx_r12_opts::to_string() co return convert_enum_idx(options, 2, value, "sl_sync_tx_ctrl_r12_s::network_ctrl_sync_tx_r12_e_"); } +// UEInformationRequest-v1710-IEs ::= SEQUENCE +SRSASN_CODE ue_info_request_v1710_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(coarse_location_req_r17_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE ue_info_request_v1710_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(coarse_location_req_r17_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + return SRSASN_SUCCESS; +} +void ue_info_request_v1710_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (coarse_location_req_r17_present) { + j.write_str("coarseLocationReq-r17", "true"); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + j.start_obj(); + j.end_obj(); + } + j.end_obj(); +} + // RRCConnectionReconfiguration-v1250-IEs ::= SEQUENCE SRSASN_CODE rrc_conn_recfg_v1250_ies_s::pack(bit_ref& bref) const { @@ -6507,6 +7945,35 @@ uint8_t rrc_conn_release_v1530_ies_s::cn_type_r15_opts::to_number() const return 0; } +// RRCConnectionResume-v1700-IEs ::= SEQUENCE +SRSASN_CODE rrc_conn_resume_v1700_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(scg_state_r17_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE rrc_conn_resume_v1700_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(scg_state_r17_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + return SRSASN_SUCCESS; +} +void rrc_conn_resume_v1700_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (scg_state_r17_present) { + j.write_str("scg-State-r17", "deactivated"); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + j.start_obj(); + j.end_obj(); + } + j.end_obj(); +} + // TargetMBSFN-Area-r12 ::= SEQUENCE SRSASN_CODE target_mbsfn_area_r12_s::pack(bit_ref& bref) const { @@ -6552,6 +8019,9 @@ SRSASN_CODE ue_info_request_v1530_ies_s::pack(bit_ref& bref) const if (flight_path_info_req_r15_present) { HANDLE_CODE(flight_path_info_req_r15.pack(bref)); } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } return SRSASN_SUCCESS; } @@ -6564,6 +8034,9 @@ SRSASN_CODE ue_info_request_v1530_ies_s::unpack(cbit_ref& bref) if (flight_path_info_req_r15_present) { HANDLE_CODE(flight_path_info_req_r15.unpack(bref)); } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } return SRSASN_SUCCESS; } @@ -6579,8 +8052,7 @@ void ue_info_request_v1530_ies_s::to_json(json_writer& j) const } if (non_crit_ext_present) { j.write_fieldname("nonCriticalExtension"); - j.start_obj(); - j.end_obj(); + non_crit_ext.to_json(j); } j.end_obj(); } @@ -7113,6 +8585,169 @@ void rrc_conn_release_v1320_ies_s::to_json(json_writer& j) const j.end_obj(); } +// RRCConnectionResume-v1610-IEs ::= SEQUENCE +SRSASN_CODE rrc_conn_resume_v1610_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(idle_mode_meas_req_r16_present, 1)); + HANDLE_CODE(bref.pack(restore_mcg_scells_r16_present, 1)); + HANDLE_CODE(bref.pack(restore_scg_r16_present, 1)); + HANDLE_CODE(bref.pack(scell_to_add_mod_list_r16_present, 1)); + HANDLE_CODE(bref.pack(scell_to_release_list_r16_present, 1)); + HANDLE_CODE(bref.pack(scell_group_to_release_list_r16_present, 1)); + HANDLE_CODE(bref.pack(scell_group_to_add_mod_list_r16_present, 1)); + HANDLE_CODE(bref.pack(nr_secondary_cell_group_cfg_r16_present, 1)); + HANDLE_CODE(bref.pack(p_max_eutra_r16_present, 1)); + HANDLE_CODE(bref.pack(p_max_ue_fr1_r16_present, 1)); + HANDLE_CODE(bref.pack(tdm_pattern_cfg_r16_present, 1)); + HANDLE_CODE(bref.pack(tdm_pattern_cfg2_r16_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + if (scell_to_add_mod_list_r16_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, scell_to_add_mod_list_r16, 1, 31)); + } + if (scell_to_release_list_r16_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, scell_to_release_list_r16, 1, 31, integer_packer<uint8_t>(1, 31))); + } + if (scell_group_to_release_list_r16_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, scell_group_to_release_list_r16, 1, 4, integer_packer<uint8_t>(1, 4))); + } + if (scell_group_to_add_mod_list_r16_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, scell_group_to_add_mod_list_r16, 1, 4)); + } + if (nr_secondary_cell_group_cfg_r16_present) { + HANDLE_CODE(nr_secondary_cell_group_cfg_r16.pack(bref)); + } + if (p_max_eutra_r16_present) { + HANDLE_CODE(pack_integer(bref, p_max_eutra_r16, (int8_t)-30, (int8_t)33)); + } + if (p_max_ue_fr1_r16_present) { + HANDLE_CODE(pack_integer(bref, p_max_ue_fr1_r16, (int8_t)-30, (int8_t)33)); + } + if (tdm_pattern_cfg_r16_present) { + HANDLE_CODE(tdm_pattern_cfg_r16.pack(bref)); + } + if (tdm_pattern_cfg2_r16_present) { + HANDLE_CODE(tdm_pattern_cfg2_r16.pack(bref)); + } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE rrc_conn_resume_v1610_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(idle_mode_meas_req_r16_present, 1)); + HANDLE_CODE(bref.unpack(restore_mcg_scells_r16_present, 1)); + HANDLE_CODE(bref.unpack(restore_scg_r16_present, 1)); + HANDLE_CODE(bref.unpack(scell_to_add_mod_list_r16_present, 1)); + HANDLE_CODE(bref.unpack(scell_to_release_list_r16_present, 1)); + HANDLE_CODE(bref.unpack(scell_group_to_release_list_r16_present, 1)); + HANDLE_CODE(bref.unpack(scell_group_to_add_mod_list_r16_present, 1)); + HANDLE_CODE(bref.unpack(nr_secondary_cell_group_cfg_r16_present, 1)); + HANDLE_CODE(bref.unpack(p_max_eutra_r16_present, 1)); + HANDLE_CODE(bref.unpack(p_max_ue_fr1_r16_present, 1)); + HANDLE_CODE(bref.unpack(tdm_pattern_cfg_r16_present, 1)); + HANDLE_CODE(bref.unpack(tdm_pattern_cfg2_r16_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + if (scell_to_add_mod_list_r16_present) { + HANDLE_CODE(unpack_dyn_seq_of(scell_to_add_mod_list_r16, bref, 1, 31)); + } + if (scell_to_release_list_r16_present) { + HANDLE_CODE(unpack_dyn_seq_of(scell_to_release_list_r16, bref, 1, 31, integer_packer<uint8_t>(1, 31))); + } + if (scell_group_to_release_list_r16_present) { + HANDLE_CODE(unpack_dyn_seq_of(scell_group_to_release_list_r16, bref, 1, 4, integer_packer<uint8_t>(1, 4))); + } + if (scell_group_to_add_mod_list_r16_present) { + HANDLE_CODE(unpack_dyn_seq_of(scell_group_to_add_mod_list_r16, bref, 1, 4)); + } + if (nr_secondary_cell_group_cfg_r16_present) { + HANDLE_CODE(nr_secondary_cell_group_cfg_r16.unpack(bref)); + } + if (p_max_eutra_r16_present) { + HANDLE_CODE(unpack_integer(p_max_eutra_r16, bref, (int8_t)-30, (int8_t)33)); + } + if (p_max_ue_fr1_r16_present) { + HANDLE_CODE(unpack_integer(p_max_ue_fr1_r16, bref, (int8_t)-30, (int8_t)33)); + } + if (tdm_pattern_cfg_r16_present) { + HANDLE_CODE(tdm_pattern_cfg_r16.unpack(bref)); + } + if (tdm_pattern_cfg2_r16_present) { + HANDLE_CODE(tdm_pattern_cfg2_r16.unpack(bref)); + } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void rrc_conn_resume_v1610_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (idle_mode_meas_req_r16_present) { + j.write_str("idleModeMeasurementReq-r16", "true"); + } + if (restore_mcg_scells_r16_present) { + j.write_str("restoreMCG-SCells-r16", "true"); + } + if (restore_scg_r16_present) { + j.write_str("restoreSCG-r16", "true"); + } + if (scell_to_add_mod_list_r16_present) { + j.start_array("sCellToAddModList-r16"); + for (const auto& e1 : scell_to_add_mod_list_r16) { + e1.to_json(j); + } + j.end_array(); + } + if (scell_to_release_list_r16_present) { + j.start_array("sCellToReleaseList-r16"); + for (const auto& e1 : scell_to_release_list_r16) { + j.write_int(e1); + } + j.end_array(); + } + if (scell_group_to_release_list_r16_present) { + j.start_array("sCellGroupToReleaseList-r16"); + for (const auto& e1 : scell_group_to_release_list_r16) { + j.write_int(e1); + } + j.end_array(); + } + if (scell_group_to_add_mod_list_r16_present) { + j.start_array("sCellGroupToAddModList-r16"); + for (const auto& e1 : scell_group_to_add_mod_list_r16) { + e1.to_json(j); + } + j.end_array(); + } + if (nr_secondary_cell_group_cfg_r16_present) { + j.write_str("nr-SecondaryCellGroupConfig-r16", nr_secondary_cell_group_cfg_r16.to_string()); + } + if (p_max_eutra_r16_present) { + j.write_int("p-MaxEUTRA-r16", p_max_eutra_r16); + } + if (p_max_ue_fr1_r16_present) { + j.write_int("p-MaxUE-FR1-r16", p_max_ue_fr1_r16); + } + if (tdm_pattern_cfg_r16_present) { + j.write_fieldname("tdm-PatternConfig-r16"); + tdm_pattern_cfg_r16.to_json(j); + } + if (tdm_pattern_cfg2_r16_present) { + j.write_fieldname("tdm-PatternConfig2-r16"); + tdm_pattern_cfg2_r16.to_json(j); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + non_crit_ext.to_json(j); + } + j.end_obj(); +} + // ReportProximityConfig-r9 ::= SEQUENCE SRSASN_CODE report_proximity_cfg_r9_s::pack(bit_ref& bref) const { @@ -7140,6 +8775,54 @@ void report_proximity_cfg_r9_s::to_json(json_writer& j) const j.end_obj(); } +// SCG-DeactivationPreferenceConfig-r17 ::= SEQUENCE +SRSASN_CODE scg_deactivation_pref_cfg_r17_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(scg_deactivation_pref_prohibit_timer_r17.pack(bref)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE scg_deactivation_pref_cfg_r17_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(scg_deactivation_pref_prohibit_timer_r17.unpack(bref)); + + return SRSASN_SUCCESS; +} +void scg_deactivation_pref_cfg_r17_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_str("scg-DeactivationPreferenceProhibitTimer-r17", scg_deactivation_pref_prohibit_timer_r17.to_string()); + j.end_obj(); +} + +const char* scg_deactivation_pref_cfg_r17_s::scg_deactivation_pref_prohibit_timer_r17_opts::to_string() const +{ + static const char* options[] = {"s0", + "s1", + "s2", + "s4", + "s8", + "s10", + "s20", + "s30", + "s60", + "s120", + "s180", + "s240", + "s300", + "s600", + "s900", + "s1800"}; + return convert_enum_idx( + options, 16, value, "scg_deactivation_pref_cfg_r17_s::scg_deactivation_pref_prohibit_timer_r17_e_"); +} +uint16_t scg_deactivation_pref_cfg_r17_s::scg_deactivation_pref_prohibit_timer_r17_opts::to_number() const +{ + static const uint16_t options[] = {0, 1, 2, 4, 8, 10, 20, 30, 60, 120, 180, 240, 300, 600, 900, 1800}; + return map_enum_number( + options, 16, value, "scg_deactivation_pref_cfg_r17_s::scg_deactivation_pref_prohibit_timer_r17_e_"); +} + // TrackingAreaCodeList-v1130 ::= SEQUENCE SRSASN_CODE tac_list_v1130_s::pack(bit_ref& bref) const { @@ -7372,6 +9055,9 @@ SRSASN_CODE other_cfg_r9_s::pack(bit_ref& bref) const group_flags[3] |= ailc_bit_cfg_r15_present; group_flags[3] |= bt_name_list_cfg_r15.is_present(); group_flags[3] |= wlan_name_list_cfg_r15.is_present(); + group_flags[4] |= overheat_assist_cfg_for_scg_r16_present; + group_flags[5] |= meas_uncom_bar_pre_r17_present; + group_flags[5] |= scg_deactivation_pref_cfg_r17.is_present(); group_flags.pack(bref); if (group_flags[0]) { @@ -7438,6 +9124,26 @@ SRSASN_CODE other_cfg_r9_s::pack(bit_ref& bref) const HANDLE_CODE(wlan_name_list_cfg_r15->pack(bref)); } } + if (group_flags[4]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(overheat_assist_cfg_for_scg_r16_present, 1)); + if (overheat_assist_cfg_for_scg_r16_present) { + HANDLE_CODE(bref.pack(overheat_assist_cfg_for_scg_r16, 1)); + } + } + if (group_flags[5]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(meas_uncom_bar_pre_r17_present, 1)); + HANDLE_CODE(bref.pack(scg_deactivation_pref_cfg_r17.is_present(), 1)); + if (meas_uncom_bar_pre_r17_present) { + HANDLE_CODE(bref.pack(meas_uncom_bar_pre_r17, 1)); + } + if (scg_deactivation_pref_cfg_r17.is_present()) { + HANDLE_CODE(scg_deactivation_pref_cfg_r17->pack(bref)); + } + } } return SRSASN_SUCCESS; } @@ -7451,7 +9157,7 @@ SRSASN_CODE other_cfg_r9_s::unpack(cbit_ref& bref) } if (ext) { - ext_groups_unpacker_guard group_flags(4); + ext_groups_unpacker_guard group_flags(6); group_flags.unpack(bref); if (group_flags[0]) { @@ -7536,6 +9242,28 @@ SRSASN_CODE other_cfg_r9_s::unpack(cbit_ref& bref) HANDLE_CODE(wlan_name_list_cfg_r15->unpack(bref)); } } + if (group_flags[4]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.unpack(overheat_assist_cfg_for_scg_r16_present, 1)); + if (overheat_assist_cfg_for_scg_r16_present) { + HANDLE_CODE(bref.unpack(overheat_assist_cfg_for_scg_r16, 1)); + } + } + if (group_flags[5]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.unpack(meas_uncom_bar_pre_r17_present, 1)); + bool scg_deactivation_pref_cfg_r17_present; + HANDLE_CODE(bref.unpack(scg_deactivation_pref_cfg_r17_present, 1)); + scg_deactivation_pref_cfg_r17.set_present(scg_deactivation_pref_cfg_r17_present); + if (meas_uncom_bar_pre_r17_present) { + HANDLE_CODE(bref.unpack(meas_uncom_bar_pre_r17, 1)); + } + if (scg_deactivation_pref_cfg_r17.is_present()) { + HANDLE_CODE(scg_deactivation_pref_cfg_r17->unpack(bref)); + } + } } return SRSASN_SUCCESS; } @@ -7592,6 +9320,16 @@ void other_cfg_r9_s::to_json(json_writer& j) const j.write_fieldname("wlan-NameListConfig-r15"); wlan_name_list_cfg_r15->to_json(j); } + if (overheat_assist_cfg_for_scg_r16_present) { + j.write_bool("overheatingAssistanceConfigForSCG-r16", overheat_assist_cfg_for_scg_r16); + } + if (meas_uncom_bar_pre_r17_present) { + j.write_bool("measUncomBarPre-r17", meas_uncom_bar_pre_r17); + } + if (scg_deactivation_pref_cfg_r17.is_present()) { + j.write_fieldname("scg-DeactivationPreferenceConfig-r17"); + scg_deactivation_pref_cfg_r17->to_json(j); + } } j.end_obj(); } @@ -8104,6 +9842,10 @@ SRSASN_CODE rrc_conn_resume_v1530_ies_s::pack(bit_ref& bref) const HANDLE_CODE(bref.pack(full_cfg_r15_present, 1)); HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } + return SRSASN_SUCCESS; } SRSASN_CODE rrc_conn_resume_v1530_ies_s::unpack(cbit_ref& bref) @@ -8111,6 +9853,10 @@ SRSASN_CODE rrc_conn_resume_v1530_ies_s::unpack(cbit_ref& bref) HANDLE_CODE(bref.unpack(full_cfg_r15_present, 1)); HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } + return SRSASN_SUCCESS; } void rrc_conn_resume_v1530_ies_s::to_json(json_writer& j) const @@ -8121,8 +9867,7 @@ void rrc_conn_resume_v1530_ies_s::to_json(json_writer& j) const } if (non_crit_ext_present) { j.write_fieldname("nonCriticalExtension"); - j.start_obj(); - j.end_obj(); + non_crit_ext.to_json(j); } j.end_obj(); } @@ -8211,6 +9956,54 @@ uint8_t carrier_info_nr_r15_s::subcarrier_spacing_ssb_r15_opts::to_number() cons return map_enum_number(options, 4, value, "carrier_info_nr_r15_s::subcarrier_spacing_ssb_r15_e_"); } +// CarrierInfoNR-r17 ::= SEQUENCE +SRSASN_CODE carrier_info_nr_r17_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(smtc_r17_present, 1)); + + HANDLE_CODE(pack_integer(bref, carrier_freq_r17, (uint32_t)0u, (uint32_t)3279165u)); + HANDLE_CODE(subcarrier_spacing_ssb_r17.pack(bref)); + if (smtc_r17_present) { + HANDLE_CODE(smtc_r17.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE carrier_info_nr_r17_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(smtc_r17_present, 1)); + + HANDLE_CODE(unpack_integer(carrier_freq_r17, bref, (uint32_t)0u, (uint32_t)3279165u)); + HANDLE_CODE(subcarrier_spacing_ssb_r17.unpack(bref)); + if (smtc_r17_present) { + HANDLE_CODE(smtc_r17.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void carrier_info_nr_r17_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_int("carrierFreq-r17", carrier_freq_r17); + j.write_str("subcarrierSpacingSSB-r17", subcarrier_spacing_ssb_r17.to_string()); + if (smtc_r17_present) { + j.write_fieldname("smtc-r17"); + smtc_r17.to_json(j); + } + j.end_obj(); +} + +const char* carrier_info_nr_r17_s::subcarrier_spacing_ssb_r17_opts::to_string() const +{ + static const char* options[] = {"kHz15", "kHz30", "kHz120", "kHz240", "kHz480", "spare1"}; + return convert_enum_idx(options, 6, value, "carrier_info_nr_r17_s::subcarrier_spacing_ssb_r17_e_"); +} +uint16_t carrier_info_nr_r17_s::subcarrier_spacing_ssb_r17_opts::to_number() const +{ + static const uint16_t options[] = {15, 30, 120, 240, 480}; + return map_enum_number(options, 5, value, "carrier_info_nr_r17_s::subcarrier_spacing_ssb_r17_e_"); +} + // CounterCheck-v1530-IEs ::= SEQUENCE SRSASN_CODE counter_check_v1530_ies_s::pack(bit_ref& bref) const { @@ -8252,6 +10045,43 @@ void counter_check_v1530_ies_s::to_json(json_writer& j) const j.end_obj(); } +// DLInformationTransfer-v1610-IEs ::= SEQUENCE +SRSASN_CODE dl_info_transfer_v1610_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(ded_info_f1c_r16_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + if (ded_info_f1c_r16_present) { + HANDLE_CODE(ded_info_f1c_r16.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE dl_info_transfer_v1610_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(ded_info_f1c_r16_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + if (ded_info_f1c_r16_present) { + HANDLE_CODE(ded_info_f1c_r16.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void dl_info_transfer_v1610_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (ded_info_f1c_r16_present) { + j.write_str("dedicatedInfoF1c-r16", ded_info_f1c_r16.to_string()); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + j.start_obj(); + j.end_obj(); + } + j.end_obj(); +} + // HandoverFromEUTRAPreparationRequest-v920-IEs ::= SEQUENCE SRSASN_CODE ho_from_eutra_prep_request_v920_ies_s::pack(bit_ref& bref) const { @@ -9271,6 +11101,9 @@ SRSASN_CODE dl_info_transfer_v8a0_ies_s::pack(bit_ref& bref) const if (late_non_crit_ext_present) { HANDLE_CODE(late_non_crit_ext.pack(bref)); } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } return SRSASN_SUCCESS; } @@ -9282,6 +11115,9 @@ SRSASN_CODE dl_info_transfer_v8a0_ies_s::unpack(cbit_ref& bref) if (late_non_crit_ext_present) { HANDLE_CODE(late_non_crit_ext.unpack(bref)); } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } return SRSASN_SUCCESS; } @@ -9293,8 +11129,7 @@ void dl_info_transfer_v8a0_ies_s::to_json(json_writer& j) const } if (non_crit_ext_present) { j.write_fieldname("nonCriticalExtension"); - j.start_obj(); - j.end_obj(); + non_crit_ext.to_json(j); } j.end_obj(); } @@ -10976,6 +12811,9 @@ void redirected_carrier_info_c::destroy_() case types::nr_r15: c.destroy<carrier_info_nr_r15_s>(); break; + case types::nr_r17: + c.destroy<carrier_info_nr_r17_s>(); + break; default: break; } @@ -11006,6 +12844,9 @@ void redirected_carrier_info_c::set(types::options e) case types::nr_r15: c.init<carrier_info_nr_r15_s>(); break; + case types::nr_r17: + c.init<carrier_info_nr_r17_s>(); + break; case types::nulltype: break; default: @@ -11040,6 +12881,9 @@ redirected_carrier_info_c::redirected_carrier_info_c(const redirected_carrier_in case types::nr_r15: c.init(other.c.get<carrier_info_nr_r15_s>()); break; + case types::nr_r17: + c.init(other.c.get<carrier_info_nr_r17_s>()); + break; case types::nulltype: break; default: @@ -11077,6 +12921,9 @@ redirected_carrier_info_c& redirected_carrier_info_c::operator=(const redirected case types::nr_r15: c.set(other.c.get<carrier_info_nr_r15_s>()); break; + case types::nr_r17: + c.set(other.c.get<carrier_info_nr_r17_s>()); + break; case types::nulltype: break; default: @@ -11125,6 +12972,11 @@ carrier_info_nr_r15_s& redirected_carrier_info_c::set_nr_r15() set(types::nr_r15); return c.get<carrier_info_nr_r15_s>(); } +carrier_info_nr_r17_s& redirected_carrier_info_c::set_nr_r17() +{ + set(types::nr_r17); + return c.get<carrier_info_nr_r17_s>(); +} void redirected_carrier_info_c::to_json(json_writer& j) const { j.start_obj(); @@ -11161,6 +13013,10 @@ void redirected_carrier_info_c::to_json(json_writer& j) const j.write_fieldname("nr-r15"); c.get<carrier_info_nr_r15_s>().to_json(j); break; + case types::nr_r17: + j.write_fieldname("nr-r17"); + c.get<carrier_info_nr_r17_s>().to_json(j); + break; default: log_invalid_choice_id(type_, "redirected_carrier_info_c"); } @@ -11197,6 +13053,10 @@ SRSASN_CODE redirected_carrier_info_c::pack(bit_ref& bref) const varlength_field_pack_guard varlen_scope(bref, false); HANDLE_CODE(c.get<carrier_info_nr_r15_s>().pack(bref)); } break; + case types::nr_r17: { + varlength_field_pack_guard varlen_scope(bref, false); + HANDLE_CODE(c.get<carrier_info_nr_r17_s>().pack(bref)); + } break; default: log_invalid_choice_id(type_, "redirected_carrier_info_c"); return SRSASN_ERROR_ENCODE_FAIL; @@ -11236,6 +13096,10 @@ SRSASN_CODE redirected_carrier_info_c::unpack(cbit_ref& bref) varlength_field_unpack_guard varlen_scope(bref, false); HANDLE_CODE(c.get<carrier_info_nr_r15_s>().unpack(bref)); } break; + case types::nr_r17: { + varlength_field_unpack_guard varlen_scope(bref, false); + HANDLE_CODE(c.get<carrier_info_nr_r17_s>().unpack(bref)); + } break; default: log_invalid_choice_id(type_, "redirected_carrier_info_c"); return SRSASN_ERROR_DECODE_FAIL; @@ -11368,6 +13232,58 @@ void counter_check_r8_ies_s::to_json(json_writer& j) const j.end_obj(); } +// DLDedicatedMessageSegment-r16-IEs ::= SEQUENCE +SRSASN_CODE dl_ded_msg_segment_r16_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(late_non_crit_ext_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + HANDLE_CODE(pack_integer(bref, segment_num_r16, (uint8_t)0u, (uint8_t)4u)); + HANDLE_CODE(rrc_msg_segment_container_r16.pack(bref)); + HANDLE_CODE(rrc_msg_segment_type_r16.pack(bref)); + if (late_non_crit_ext_present) { + HANDLE_CODE(late_non_crit_ext.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE dl_ded_msg_segment_r16_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(late_non_crit_ext_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + HANDLE_CODE(unpack_integer(segment_num_r16, bref, (uint8_t)0u, (uint8_t)4u)); + HANDLE_CODE(rrc_msg_segment_container_r16.unpack(bref)); + HANDLE_CODE(rrc_msg_segment_type_r16.unpack(bref)); + if (late_non_crit_ext_present) { + HANDLE_CODE(late_non_crit_ext.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void dl_ded_msg_segment_r16_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_int("segmentNumber-r16", segment_num_r16); + j.write_str("rrc-MessageSegmentContainer-r16", rrc_msg_segment_container_r16.to_string()); + j.write_str("rrc-MessageSegmentType-r16", rrc_msg_segment_type_r16.to_string()); + if (late_non_crit_ext_present) { + j.write_str("lateNonCriticalExtension", late_non_crit_ext.to_string()); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + j.start_obj(); + j.end_obj(); + } + j.end_obj(); +} + +const char* dl_ded_msg_segment_r16_ies_s::rrc_msg_segment_type_r16_opts::to_string() const +{ + static const char* options[] = {"notLastSegment", "lastSegment"}; + return convert_enum_idx(options, 2, value, "dl_ded_msg_segment_r16_ies_s::rrc_msg_segment_type_r16_e_"); +} + // DLInformationTransfer-r15-IEs ::= SEQUENCE SRSASN_CODE dl_info_transfer_r15_ies_s::pack(bit_ref& bref) const { @@ -11426,13 +13342,13 @@ void dl_info_transfer_r15_ies_s::to_json(json_writer& j) const void dl_info_transfer_r15_ies_s::ded_info_type_r15_c_::destroy_() { switch (type_) { - case types::ded_info_nas_r15: + case types::ded_info_nas: c.destroy<dyn_octstring>(); break; - case types::ded_info_cdma2000_minus1_xrtt_r15: + case types::ded_info_cdma2000_minus1_xrtt: c.destroy<dyn_octstring>(); break; - case types::ded_info_cdma2000_hrpd_r15: + case types::ded_info_cdma2000_hrpd: c.destroy<dyn_octstring>(); break; default: @@ -11444,13 +13360,13 @@ void dl_info_transfer_r15_ies_s::ded_info_type_r15_c_::set(types::options e) destroy_(); type_ = e; switch (type_) { - case types::ded_info_nas_r15: + case types::ded_info_nas: c.init<dyn_octstring>(); break; - case types::ded_info_cdma2000_minus1_xrtt_r15: + case types::ded_info_cdma2000_minus1_xrtt: c.init<dyn_octstring>(); break; - case types::ded_info_cdma2000_hrpd_r15: + case types::ded_info_cdma2000_hrpd: c.init<dyn_octstring>(); break; case types::nulltype: @@ -11464,13 +13380,13 @@ dl_info_transfer_r15_ies_s::ded_info_type_r15_c_::ded_info_type_r15_c_( { type_ = other.type(); switch (type_) { - case types::ded_info_nas_r15: + case types::ded_info_nas: c.init(other.c.get<dyn_octstring>()); break; - case types::ded_info_cdma2000_minus1_xrtt_r15: + case types::ded_info_cdma2000_minus1_xrtt: c.init(other.c.get<dyn_octstring>()); break; - case types::ded_info_cdma2000_hrpd_r15: + case types::ded_info_cdma2000_hrpd: c.init(other.c.get<dyn_octstring>()); break; case types::nulltype: @@ -11487,13 +13403,13 @@ dl_info_transfer_r15_ies_s::ded_info_type_r15_c_& dl_info_transfer_r15_ies_s::de } set(other.type()); switch (type_) { - case types::ded_info_nas_r15: + case types::ded_info_nas: c.set(other.c.get<dyn_octstring>()); break; - case types::ded_info_cdma2000_minus1_xrtt_r15: + case types::ded_info_cdma2000_minus1_xrtt: c.set(other.c.get<dyn_octstring>()); break; - case types::ded_info_cdma2000_hrpd_r15: + case types::ded_info_cdma2000_hrpd: c.set(other.c.get<dyn_octstring>()); break; case types::nulltype: @@ -11504,33 +13420,33 @@ dl_info_transfer_r15_ies_s::ded_info_type_r15_c_& dl_info_transfer_r15_ies_s::de return *this; } -dyn_octstring& dl_info_transfer_r15_ies_s::ded_info_type_r15_c_::set_ded_info_nas_r15() +dyn_octstring& dl_info_transfer_r15_ies_s::ded_info_type_r15_c_::set_ded_info_nas() { - set(types::ded_info_nas_r15); + set(types::ded_info_nas); return c.get<dyn_octstring>(); } -dyn_octstring& dl_info_transfer_r15_ies_s::ded_info_type_r15_c_::set_ded_info_cdma2000_minus1_xrtt_r15() +dyn_octstring& dl_info_transfer_r15_ies_s::ded_info_type_r15_c_::set_ded_info_cdma2000_minus1_xrtt() { - set(types::ded_info_cdma2000_minus1_xrtt_r15); + set(types::ded_info_cdma2000_minus1_xrtt); return c.get<dyn_octstring>(); } -dyn_octstring& dl_info_transfer_r15_ies_s::ded_info_type_r15_c_::set_ded_info_cdma2000_hrpd_r15() +dyn_octstring& dl_info_transfer_r15_ies_s::ded_info_type_r15_c_::set_ded_info_cdma2000_hrpd() { - set(types::ded_info_cdma2000_hrpd_r15); + set(types::ded_info_cdma2000_hrpd); return c.get<dyn_octstring>(); } void dl_info_transfer_r15_ies_s::ded_info_type_r15_c_::to_json(json_writer& j) const { j.start_obj(); switch (type_) { - case types::ded_info_nas_r15: - j.write_str("dedicatedInfoNAS-r15", c.get<dyn_octstring>().to_string()); + case types::ded_info_nas: + j.write_str("dedicatedInfoNAS", c.get<dyn_octstring>().to_string()); break; - case types::ded_info_cdma2000_minus1_xrtt_r15: - j.write_str("dedicatedInfoCDMA2000-1XRTT-r15", c.get<dyn_octstring>().to_string()); + case types::ded_info_cdma2000_minus1_xrtt: + j.write_str("dedicatedInfoCDMA2000-1XRTT", c.get<dyn_octstring>().to_string()); break; - case types::ded_info_cdma2000_hrpd_r15: - j.write_str("dedicatedInfoCDMA2000-HRPD-r15", c.get<dyn_octstring>().to_string()); + case types::ded_info_cdma2000_hrpd: + j.write_str("dedicatedInfoCDMA2000-HRPD", c.get<dyn_octstring>().to_string()); break; default: log_invalid_choice_id(type_, "dl_info_transfer_r15_ies_s::ded_info_type_r15_c_"); @@ -11541,13 +13457,13 @@ SRSASN_CODE dl_info_transfer_r15_ies_s::ded_info_type_r15_c_::pack(bit_ref& bref { type_.pack(bref); switch (type_) { - case types::ded_info_nas_r15: + case types::ded_info_nas: HANDLE_CODE(c.get<dyn_octstring>().pack(bref)); break; - case types::ded_info_cdma2000_minus1_xrtt_r15: + case types::ded_info_cdma2000_minus1_xrtt: HANDLE_CODE(c.get<dyn_octstring>().pack(bref)); break; - case types::ded_info_cdma2000_hrpd_r15: + case types::ded_info_cdma2000_hrpd: HANDLE_CODE(c.get<dyn_octstring>().pack(bref)); break; default: @@ -11562,13 +13478,13 @@ SRSASN_CODE dl_info_transfer_r15_ies_s::ded_info_type_r15_c_::unpack(cbit_ref& b e.unpack(bref); set(e); switch (type_) { - case types::ded_info_nas_r15: + case types::ded_info_nas: HANDLE_CODE(c.get<dyn_octstring>().unpack(bref)); break; - case types::ded_info_cdma2000_minus1_xrtt_r15: + case types::ded_info_cdma2000_minus1_xrtt: HANDLE_CODE(c.get<dyn_octstring>().unpack(bref)); break; - case types::ded_info_cdma2000_hrpd_r15: + case types::ded_info_cdma2000_hrpd: HANDLE_CODE(c.get<dyn_octstring>().unpack(bref)); break; default: @@ -12835,6 +14751,88 @@ SRSASN_CODE counter_check_s::crit_exts_c_::c1_c_::unpack(cbit_ref& bref) return SRSASN_SUCCESS; } +// DLDedicatedMessageSegment-r16 ::= SEQUENCE +SRSASN_CODE dl_ded_msg_segment_r16_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(crit_exts.pack(bref)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE dl_ded_msg_segment_r16_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(crit_exts.unpack(bref)); + + return SRSASN_SUCCESS; +} +void dl_ded_msg_segment_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_fieldname("criticalExtensions"); + crit_exts.to_json(j); + j.end_obj(); +} + +void dl_ded_msg_segment_r16_s::crit_exts_c_::set(types::options e) +{ + type_ = e; +} +dl_ded_msg_segment_r16_ies_s& dl_ded_msg_segment_r16_s::crit_exts_c_::set_dl_ded_msg_segment_r16() +{ + set(types::dl_ded_msg_segment_r16); + return c; +} +void dl_ded_msg_segment_r16_s::crit_exts_c_::set_crit_exts_future() +{ + set(types::crit_exts_future); +} +void dl_ded_msg_segment_r16_s::crit_exts_c_::to_json(json_writer& j) const +{ + j.start_obj(); + switch (type_) { + case types::dl_ded_msg_segment_r16: + j.write_fieldname("dlDedicatedMessageSegment-r16"); + c.to_json(j); + break; + case types::crit_exts_future: + break; + default: + log_invalid_choice_id(type_, "dl_ded_msg_segment_r16_s::crit_exts_c_"); + } + j.end_obj(); +} +SRSASN_CODE dl_ded_msg_segment_r16_s::crit_exts_c_::pack(bit_ref& bref) const +{ + type_.pack(bref); + switch (type_) { + case types::dl_ded_msg_segment_r16: + HANDLE_CODE(c.pack(bref)); + break; + case types::crit_exts_future: + break; + default: + log_invalid_choice_id(type_, "dl_ded_msg_segment_r16_s::crit_exts_c_"); + return SRSASN_ERROR_ENCODE_FAIL; + } + return SRSASN_SUCCESS; +} +SRSASN_CODE dl_ded_msg_segment_r16_s::crit_exts_c_::unpack(cbit_ref& bref) +{ + types e; + e.unpack(bref); + set(e); + switch (type_) { + case types::dl_ded_msg_segment_r16: + HANDLE_CODE(c.unpack(bref)); + break; + case types::crit_exts_future: + break; + default: + log_invalid_choice_id(type_, "dl_ded_msg_segment_r16_s::crit_exts_c_"); + return SRSASN_ERROR_DECODE_FAIL; + } + return SRSASN_SUCCESS; +} + // DLInformationTransfer ::= SEQUENCE SRSASN_CODE dl_info_transfer_s::pack(bit_ref& bref) const { @@ -14633,6 +16631,9 @@ void dl_dcch_msg_type_c::c1_c_::destroy_() case types::rrc_conn_resume_r13: c.destroy<rrc_conn_resume_r13_s>(); break; + case types::dl_ded_msg_segment_r16: + c.destroy<dl_ded_msg_segment_r16_s>(); + break; default: break; } @@ -14681,7 +16682,8 @@ void dl_dcch_msg_type_c::c1_c_::set(types::options e) case types::rrc_conn_resume_r13: c.init<rrc_conn_resume_r13_s>(); break; - case types::spare3: + case types::dl_ded_msg_segment_r16: + c.init<dl_ded_msg_segment_r16_s>(); break; case types::spare2: break; @@ -14736,7 +16738,8 @@ dl_dcch_msg_type_c::c1_c_::c1_c_(const dl_dcch_msg_type_c::c1_c_& other) case types::rrc_conn_resume_r13: c.init(other.c.get<rrc_conn_resume_r13_s>()); break; - case types::spare3: + case types::dl_ded_msg_segment_r16: + c.init(other.c.get<dl_ded_msg_segment_r16_s>()); break; case types::spare2: break; @@ -14794,7 +16797,8 @@ dl_dcch_msg_type_c::c1_c_& dl_dcch_msg_type_c::c1_c_::operator=(const dl_dcch_ms case types::rrc_conn_resume_r13: c.set(other.c.get<rrc_conn_resume_r13_s>()); break; - case types::spare3: + case types::dl_ded_msg_segment_r16: + c.set(other.c.get<dl_ded_msg_segment_r16_s>()); break; case types::spare2: break; @@ -14873,9 +16877,10 @@ rrc_conn_resume_r13_s& dl_dcch_msg_type_c::c1_c_::set_rrc_conn_resume_r13() set(types::rrc_conn_resume_r13); return c.get<rrc_conn_resume_r13_s>(); } -void dl_dcch_msg_type_c::c1_c_::set_spare3() +dl_ded_msg_segment_r16_s& dl_dcch_msg_type_c::c1_c_::set_dl_ded_msg_segment_r16() { - set(types::spare3); + set(types::dl_ded_msg_segment_r16); + return c.get<dl_ded_msg_segment_r16_s>(); } void dl_dcch_msg_type_c::c1_c_::set_spare2() { @@ -14941,7 +16946,9 @@ void dl_dcch_msg_type_c::c1_c_::to_json(json_writer& j) const j.write_fieldname("rrcConnectionResume-r13"); c.get<rrc_conn_resume_r13_s>().to_json(j); break; - case types::spare3: + case types::dl_ded_msg_segment_r16: + j.write_fieldname("dlDedicatedMessageSegment-r16"); + c.get<dl_ded_msg_segment_r16_s>().to_json(j); break; case types::spare2: break; @@ -14995,7 +17002,8 @@ SRSASN_CODE dl_dcch_msg_type_c::c1_c_::pack(bit_ref& bref) const case types::rrc_conn_resume_r13: HANDLE_CODE(c.get<rrc_conn_resume_r13_s>().pack(bref)); break; - case types::spare3: + case types::dl_ded_msg_segment_r16: + HANDLE_CODE(c.get<dl_ded_msg_segment_r16_s>().pack(bref)); break; case types::spare2: break; @@ -15052,7 +17060,8 @@ SRSASN_CODE dl_dcch_msg_type_c::c1_c_::unpack(cbit_ref& bref) case types::rrc_conn_resume_r13: HANDLE_CODE(c.get<rrc_conn_resume_r13_s>().unpack(bref)); break; - case types::spare3: + case types::dl_ded_msg_segment_r16: + HANDLE_CODE(c.get<dl_ded_msg_segment_r16_s>().unpack(bref)); break; case types::spare2: break; diff --git a/lib/src/asn1/rrc/ho_cmd.cc b/lib/src/asn1/rrc/ho_cmd.cc index f5c1970b3..f5eced7a0 100644 --- a/lib/src/asn1/rrc/ho_cmd.cc +++ b/lib/src/asn1/rrc/ho_cmd.cc @@ -258,6 +258,27 @@ void as_cfg_nr_v1570_s::to_json(json_writer& j) const j.end_obj(); } +// AS-ConfigNR-v1620 ::= SEQUENCE +SRSASN_CODE as_cfg_nr_v1620_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(tdm_pattern_cfg2_r16.pack(bref)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE as_cfg_nr_v1620_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(tdm_pattern_cfg2_r16.unpack(bref)); + + return SRSASN_SUCCESS; +} +void as_cfg_nr_v1620_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_fieldname("tdm-PatternConfig2-r16"); + tdm_pattern_cfg2_r16.to_json(j); + j.end_obj(); +} + // SCG-Config-r12 ::= SEQUENCE SRSASN_CODE scg_cfg_r12_s::pack(bit_ref& bref) const { @@ -484,6 +505,7 @@ SRSASN_CODE as_cfg_s::pack(bit_ref& bref) const group_flags[3] |= as_cfg_nr_r15.is_present(); group_flags[4] |= as_cfg_v1550.is_present(); group_flags[5] |= as_cfg_nr_v1570.is_present(); + group_flags[6] |= as_cfg_nr_v1620.is_present(); group_flags.pack(bref); if (group_flags[0]) { @@ -535,6 +557,14 @@ SRSASN_CODE as_cfg_s::pack(bit_ref& bref) const HANDLE_CODE(as_cfg_nr_v1570->pack(bref)); } } + if (group_flags[6]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(as_cfg_nr_v1620.is_present(), 1)); + if (as_cfg_nr_v1620.is_present()) { + HANDLE_CODE(as_cfg_nr_v1620->pack(bref)); + } + } } return SRSASN_SUCCESS; } @@ -552,7 +582,7 @@ SRSASN_CODE as_cfg_s::unpack(cbit_ref& bref) HANDLE_CODE(unpack_integer(source_dl_carrier_freq, bref, (uint32_t)0u, (uint32_t)65535u)); if (ext) { - ext_groups_unpacker_guard group_flags(6); + ext_groups_unpacker_guard group_flags(7); group_flags.unpack(bref); if (group_flags[0]) { @@ -614,6 +644,16 @@ SRSASN_CODE as_cfg_s::unpack(cbit_ref& bref) HANDLE_CODE(as_cfg_nr_v1570->unpack(bref)); } } + if (group_flags[6]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + bool as_cfg_nr_v1620_present; + HANDLE_CODE(bref.unpack(as_cfg_nr_v1620_present, 1)); + as_cfg_nr_v1620.set_present(as_cfg_nr_v1620_present); + if (as_cfg_nr_v1620.is_present()) { + HANDLE_CODE(as_cfg_nr_v1620->unpack(bref)); + } + } } return SRSASN_SUCCESS; } @@ -665,6 +705,10 @@ void as_cfg_s::to_json(json_writer& j) const j.write_fieldname("as-ConfigNR-v1570"); as_cfg_nr_v1570->to_json(j); } + if (as_cfg_nr_v1620.is_present()) { + j.write_fieldname("as-ConfigNR-v1620"); + as_cfg_nr_v1620->to_json(j); + } } j.end_obj(); } @@ -1057,7 +1101,7 @@ SRSASN_CODE as_context_v1130_s::pack(bit_ref& bref) const bref.pack(ext, 1); HANDLE_CODE(bref.pack(idc_ind_r11_present, 1)); HANDLE_CODE(bref.pack(mbms_interest_ind_r11_present, 1)); - HANDLE_CODE(bref.pack(pwr_pref_ind_r11_present, 1)); + HANDLE_CODE(bref.pack(ue_assist_info_r11_present, 1)); if (idc_ind_r11_present) { HANDLE_CODE(idc_ind_r11.pack(bref)); @@ -1065,8 +1109,8 @@ SRSASN_CODE as_context_v1130_s::pack(bit_ref& bref) const if (mbms_interest_ind_r11_present) { HANDLE_CODE(mbms_interest_ind_r11.pack(bref)); } - if (pwr_pref_ind_r11_present) { - HANDLE_CODE(pwr_pref_ind_r11.pack(bref)); + if (ue_assist_info_r11_present) { + HANDLE_CODE(ue_assist_info_r11.pack(bref)); } if (ext) { @@ -1108,7 +1152,7 @@ SRSASN_CODE as_context_v1130_s::unpack(cbit_ref& bref) bref.unpack(ext, 1); HANDLE_CODE(bref.unpack(idc_ind_r11_present, 1)); HANDLE_CODE(bref.unpack(mbms_interest_ind_r11_present, 1)); - HANDLE_CODE(bref.unpack(pwr_pref_ind_r11_present, 1)); + HANDLE_CODE(bref.unpack(ue_assist_info_r11_present, 1)); if (idc_ind_r11_present) { HANDLE_CODE(idc_ind_r11.unpack(bref)); @@ -1116,8 +1160,8 @@ SRSASN_CODE as_context_v1130_s::unpack(cbit_ref& bref) if (mbms_interest_ind_r11_present) { HANDLE_CODE(mbms_interest_ind_r11.unpack(bref)); } - if (pwr_pref_ind_r11_present) { - HANDLE_CODE(pwr_pref_ind_r11.unpack(bref)); + if (ue_assist_info_r11_present) { + HANDLE_CODE(ue_assist_info_r11.unpack(bref)); } if (ext) { @@ -1160,8 +1204,8 @@ void as_context_v1130_s::to_json(json_writer& j) const if (mbms_interest_ind_r11_present) { j.write_str("mbmsInterestIndication-r11", mbms_interest_ind_r11.to_string()); } - if (pwr_pref_ind_r11_present) { - j.write_str("powerPrefIndication-r11", pwr_pref_ind_r11.to_string()); + if (ue_assist_info_r11_present) { + j.write_str("ueAssistanceInformation-r11", ue_assist_info_r11.to_string()); } if (ext) { if (sidelink_ue_info_r12_present) { @@ -1207,6 +1251,162 @@ void as_context_v1320_s::to_json(json_writer& j) const j.end_obj(); } +// ConfigRestrictInfoDAPS-r16 ::= SEQUENCE +SRSASN_CODE cfg_restrict_info_daps_r16_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(max_sch_tb_bits_dl_r16_present, 1)); + HANDLE_CODE(bref.pack(max_sch_tb_bits_ul_r16_present, 1)); + + if (max_sch_tb_bits_dl_r16_present) { + HANDLE_CODE(pack_integer(bref, max_sch_tb_bits_dl_r16, (uint8_t)1u, (uint8_t)100u)); + } + if (max_sch_tb_bits_ul_r16_present) { + HANDLE_CODE(pack_integer(bref, max_sch_tb_bits_ul_r16, (uint8_t)1u, (uint8_t)100u)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE cfg_restrict_info_daps_r16_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(max_sch_tb_bits_dl_r16_present, 1)); + HANDLE_CODE(bref.unpack(max_sch_tb_bits_ul_r16_present, 1)); + + if (max_sch_tb_bits_dl_r16_present) { + HANDLE_CODE(unpack_integer(max_sch_tb_bits_dl_r16, bref, (uint8_t)1u, (uint8_t)100u)); + } + if (max_sch_tb_bits_ul_r16_present) { + HANDLE_CODE(unpack_integer(max_sch_tb_bits_ul_r16, bref, (uint8_t)1u, (uint8_t)100u)); + } + + return SRSASN_SUCCESS; +} +void cfg_restrict_info_daps_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (max_sch_tb_bits_dl_r16_present) { + j.write_int("maxSCH-TB-BitsDL-r16", max_sch_tb_bits_dl_r16); + } + if (max_sch_tb_bits_ul_r16_present) { + j.write_int("maxSCH-TB-BitsUL-r16", max_sch_tb_bits_ul_r16); + } + j.end_obj(); +} + +// AS-Context-v1610 ::= SEQUENCE +SRSASN_CODE as_context_v1610_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(sidelink_ue_info_nr_r16_present, 1)); + HANDLE_CODE(bref.pack(ue_assist_info_nr_r16_present, 1)); + HANDLE_CODE(bref.pack(cfg_restrict_info_daps_r16_present, 1)); + + if (sidelink_ue_info_nr_r16_present) { + HANDLE_CODE(sidelink_ue_info_nr_r16.pack(bref)); + } + if (ue_assist_info_nr_r16_present) { + HANDLE_CODE(ue_assist_info_nr_r16.pack(bref)); + } + if (cfg_restrict_info_daps_r16_present) { + HANDLE_CODE(cfg_restrict_info_daps_r16.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE as_context_v1610_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(sidelink_ue_info_nr_r16_present, 1)); + HANDLE_CODE(bref.unpack(ue_assist_info_nr_r16_present, 1)); + HANDLE_CODE(bref.unpack(cfg_restrict_info_daps_r16_present, 1)); + + if (sidelink_ue_info_nr_r16_present) { + HANDLE_CODE(sidelink_ue_info_nr_r16.unpack(bref)); + } + if (ue_assist_info_nr_r16_present) { + HANDLE_CODE(ue_assist_info_nr_r16.unpack(bref)); + } + if (cfg_restrict_info_daps_r16_present) { + HANDLE_CODE(cfg_restrict_info_daps_r16.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void as_context_v1610_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (sidelink_ue_info_nr_r16_present) { + j.write_str("sidelinkUEInformationNR-r16", sidelink_ue_info_nr_r16.to_string()); + } + if (ue_assist_info_nr_r16_present) { + j.write_str("ueAssistanceInformationNR-r16", ue_assist_info_nr_r16.to_string()); + } + if (cfg_restrict_info_daps_r16_present) { + j.write_fieldname("configRestrictInfoDAPS-r16"); + cfg_restrict_info_daps_r16.to_json(j); + } + j.end_obj(); +} + +// ConfigRestrictInfoDAPS-v1630 ::= SEQUENCE +SRSASN_CODE cfg_restrict_info_daps_v1630_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(daps_pwr_coordination_info_r16_present, 1)); + + if (daps_pwr_coordination_info_r16_present) { + HANDLE_CODE(daps_pwr_coordination_info_r16.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE cfg_restrict_info_daps_v1630_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(daps_pwr_coordination_info_r16_present, 1)); + + if (daps_pwr_coordination_info_r16_present) { + HANDLE_CODE(daps_pwr_coordination_info_r16.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void cfg_restrict_info_daps_v1630_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (daps_pwr_coordination_info_r16_present) { + j.write_fieldname("daps-PowerCoordinationInfo-r16"); + daps_pwr_coordination_info_r16.to_json(j); + } + j.end_obj(); +} + +// AS-Context-v1630 ::= SEQUENCE +SRSASN_CODE as_context_v1630_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(cfg_restrict_info_daps_v1630_present, 1)); + + if (cfg_restrict_info_daps_v1630_present) { + HANDLE_CODE(cfg_restrict_info_daps_v1630.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE as_context_v1630_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(cfg_restrict_info_daps_v1630_present, 1)); + + if (cfg_restrict_info_daps_v1630_present) { + HANDLE_CODE(cfg_restrict_info_daps_v1630.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void as_context_v1630_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (cfg_restrict_info_daps_v1630_present) { + j.write_fieldname("configRestrictInfoDAPS-v1630"); + cfg_restrict_info_daps_v1630.to_json(j); + } + j.end_obj(); +} + // CandidateCellInfo-r10 ::= SEQUENCE SRSASN_CODE candidate_cell_info_r10_s::pack(bit_ref& bref) const { @@ -1560,6 +1760,225 @@ SRSASN_CODE ho_cmd_s::crit_exts_c_::c1_c_::unpack(cbit_ref& bref) return SRSASN_SUCCESS; } +// AS-Config-v1700 ::= SEQUENCE +SRSASN_CODE as_cfg_v1700_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(scg_state_r17_present, 1)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE as_cfg_v1700_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(scg_state_r17_present, 1)); + + return SRSASN_SUCCESS; +} +void as_cfg_v1700_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (scg_state_r17_present) { + j.write_str("scg-State-r17", "deactivated"); + } + j.end_obj(); +} + +// HandoverPreparationInformation-v1700-IEs ::= SEQUENCE +SRSASN_CODE ho_prep_info_v1700_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(as_cfg_v1700_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + if (as_cfg_v1700_present) { + HANDLE_CODE(as_cfg_v1700.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE ho_prep_info_v1700_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(as_cfg_v1700_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + if (as_cfg_v1700_present) { + HANDLE_CODE(as_cfg_v1700.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void ho_prep_info_v1700_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (as_cfg_v1700_present) { + j.write_fieldname("as-Config-v1700"); + as_cfg_v1700.to_json(j); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + j.start_obj(); + j.end_obj(); + } + j.end_obj(); +} + +// AS-Context-v1620 ::= SEQUENCE +SRSASN_CODE as_context_v1620_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(ue_assist_info_nr_scg_r16_present, 1)); + + if (ue_assist_info_nr_scg_r16_present) { + HANDLE_CODE(ue_assist_info_nr_scg_r16.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE as_context_v1620_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(ue_assist_info_nr_scg_r16_present, 1)); + + if (ue_assist_info_nr_scg_r16_present) { + HANDLE_CODE(ue_assist_info_nr_scg_r16.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void as_context_v1620_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (ue_assist_info_nr_scg_r16_present) { + j.write_str("ueAssistanceInformationNR-SCG-r16", ue_assist_info_nr_scg_r16.to_string()); + } + j.end_obj(); +} + +// HandoverPreparationInformation-v1630-IEs ::= SEQUENCE +SRSASN_CODE ho_prep_info_v1630_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(as_context_v1630_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + if (as_context_v1630_present) { + HANDLE_CODE(as_context_v1630.pack(bref)); + } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE ho_prep_info_v1630_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(as_context_v1630_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + if (as_context_v1630_present) { + HANDLE_CODE(as_context_v1630.unpack(bref)); + } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void ho_prep_info_v1630_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (as_context_v1630_present) { + j.write_fieldname("as-Context-v1630"); + as_context_v1630.to_json(j); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + non_crit_ext.to_json(j); + } + j.end_obj(); +} + +// HandoverPreparationInformation-v1620-IEs ::= SEQUENCE +SRSASN_CODE ho_prep_info_v1620_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(as_context_v1620_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + if (as_context_v1620_present) { + HANDLE_CODE(as_context_v1620.pack(bref)); + } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE ho_prep_info_v1620_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(as_context_v1620_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + if (as_context_v1620_present) { + HANDLE_CODE(as_context_v1620.unpack(bref)); + } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void ho_prep_info_v1620_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (as_context_v1620_present) { + j.write_fieldname("as-Context-v1620"); + as_context_v1620.to_json(j); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + non_crit_ext.to_json(j); + } + j.end_obj(); +} + +// HandoverPreparationInformation-v1610-IEs ::= SEQUENCE +SRSASN_CODE ho_prep_info_v1610_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(as_context_v1610_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + if (as_context_v1610_present) { + HANDLE_CODE(as_context_v1610.pack(bref)); + } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE ho_prep_info_v1610_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(as_context_v1610_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + if (as_context_v1610_present) { + HANDLE_CODE(as_context_v1610.unpack(bref)); + } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void ho_prep_info_v1610_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (as_context_v1610_present) { + j.write_fieldname("as-Context-v1610"); + as_context_v1610.to_json(j); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + non_crit_ext.to_json(j); + } + j.end_obj(); +} + // HandoverPreparationInformation-v1540-IEs ::= SEQUENCE SRSASN_CODE ho_prep_info_v1540_ies_s::pack(bit_ref& bref) const { @@ -1569,6 +1988,9 @@ SRSASN_CODE ho_prep_info_v1540_ies_s::pack(bit_ref& bref) const if (source_rb_cfg_intra5_gc_r15_present) { HANDLE_CODE(source_rb_cfg_intra5_gc_r15.pack(bref)); } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } return SRSASN_SUCCESS; } @@ -1580,6 +2002,9 @@ SRSASN_CODE ho_prep_info_v1540_ies_s::unpack(cbit_ref& bref) if (source_rb_cfg_intra5_gc_r15_present) { HANDLE_CODE(source_rb_cfg_intra5_gc_r15.unpack(bref)); } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } return SRSASN_SUCCESS; } @@ -1591,8 +2016,7 @@ void ho_prep_info_v1540_ies_s::to_json(json_writer& j) const } if (non_crit_ext_present) { j.write_fieldname("nonCriticalExtension"); - j.start_obj(); - j.end_obj(); + non_crit_ext.to_json(j); } j.end_obj(); } @@ -1970,8 +2394,8 @@ void ho_prep_info_v920_ies_s::to_json(json_writer& j) const const char* ho_prep_info_v920_ies_s::ue_cfg_release_r9_opts::to_string() const { static const char* options[] = { - "rel9", "rel10", "rel11", "rel12", "v10j0", "v11e0", "v1280", "rel13", "rel14", "rel15"}; - return convert_enum_idx(options, 10, value, "ho_prep_info_v920_ies_s::ue_cfg_release_r9_e_"); + "rel9", "rel10", "rel11", "rel12", "v10j0", "v11e0", "v1280", "rel13", "rel14", "rel15", "rel16", "rel17"}; + return convert_enum_idx(options, 12, value, "ho_prep_info_v920_ies_s::ue_cfg_release_r9_e_"); } // RRM-Config ::= SEQUENCE diff --git a/lib/src/asn1/rrc/meascfg.cc b/lib/src/asn1/rrc/meascfg.cc index 23ad861b5..3c9349ab0 100644 --- a/lib/src/asn1/rrc/meascfg.cc +++ b/lib/src/asn1/rrc/meascfg.cc @@ -36,6 +36,18 @@ int8_t q_offset_range_opts::to_number() const return map_enum_number(options, 31, value, "q_offset_range_e"); } +// RSS-MeasPowerBias-r16 ::= ENUMERATED +const char* rss_meas_pwr_bias_r16_opts::to_string() const +{ + static const char* options[] = {"dB-6", "dB-3", "dB0", "dB3", "dB6", "dB9", "dB12", "rssNotUsed"}; + return convert_enum_idx(options, 8, value, "rss_meas_pwr_bias_r16_e"); +} +int8_t rss_meas_pwr_bias_r16_opts::to_number() const +{ + static const int8_t options[] = {-6, -3, 0, 3, 6, 9, 12}; + return map_enum_number(options, 7, value, "rss_meas_pwr_bias_r16_e"); +} + // SpeedStateScaleFactors ::= SEQUENCE SRSASN_CODE speed_state_scale_factors_s::pack(bit_ref& bref) const { @@ -103,290 +115,6 @@ uint16_t band_ind_geran_opts::to_number() const return map_enum_number(options, 2, value, "band_ind_geran_e"); } -// PreRegistrationInfoHRPD ::= SEQUENCE -SRSASN_CODE pre_regist_info_hrpd_s::pack(bit_ref& bref) const -{ - HANDLE_CODE(bref.pack(pre_regist_zone_id_present, 1)); - HANDLE_CODE(bref.pack(secondary_pre_regist_zone_id_list_present, 1)); - - HANDLE_CODE(bref.pack(pre_regist_allowed, 1)); - if (pre_regist_zone_id_present) { - HANDLE_CODE(pack_integer(bref, pre_regist_zone_id, (uint16_t)0u, (uint16_t)255u)); - } - if (secondary_pre_regist_zone_id_list_present) { - HANDLE_CODE(pack_dyn_seq_of(bref, secondary_pre_regist_zone_id_list, 1, 2, integer_packer<uint16_t>(0, 255))); - } - - return SRSASN_SUCCESS; -} -SRSASN_CODE pre_regist_info_hrpd_s::unpack(cbit_ref& bref) -{ - HANDLE_CODE(bref.unpack(pre_regist_zone_id_present, 1)); - HANDLE_CODE(bref.unpack(secondary_pre_regist_zone_id_list_present, 1)); - - HANDLE_CODE(bref.unpack(pre_regist_allowed, 1)); - if (pre_regist_zone_id_present) { - HANDLE_CODE(unpack_integer(pre_regist_zone_id, bref, (uint16_t)0u, (uint16_t)255u)); - } - if (secondary_pre_regist_zone_id_list_present) { - HANDLE_CODE(unpack_dyn_seq_of(secondary_pre_regist_zone_id_list, bref, 1, 2, integer_packer<uint16_t>(0, 255))); - } - - return SRSASN_SUCCESS; -} -void pre_regist_info_hrpd_s::to_json(json_writer& j) const -{ - j.start_obj(); - j.write_bool("preRegistrationAllowed", pre_regist_allowed); - if (pre_regist_zone_id_present) { - j.write_int("preRegistrationZoneId", pre_regist_zone_id); - } - if (secondary_pre_regist_zone_id_list_present) { - j.start_array("secondaryPreRegistrationZoneIdList"); - for (const auto& e1 : secondary_pre_regist_zone_id_list) { - j.write_int(e1); - } - j.end_array(); - } - j.end_obj(); -} - -// CarrierFreqsGERAN ::= SEQUENCE -SRSASN_CODE carrier_freqs_geran_s::pack(bit_ref& bref) const -{ - HANDLE_CODE(pack_integer(bref, start_arfcn, (uint16_t)0u, (uint16_t)1023u)); - HANDLE_CODE(band_ind.pack(bref)); - HANDLE_CODE(following_arfcns.pack(bref)); - - return SRSASN_SUCCESS; -} -SRSASN_CODE carrier_freqs_geran_s::unpack(cbit_ref& bref) -{ - HANDLE_CODE(unpack_integer(start_arfcn, bref, (uint16_t)0u, (uint16_t)1023u)); - HANDLE_CODE(band_ind.unpack(bref)); - HANDLE_CODE(following_arfcns.unpack(bref)); - - return SRSASN_SUCCESS; -} -void carrier_freqs_geran_s::to_json(json_writer& j) const -{ - j.start_obj(); - j.write_int("startingARFCN", start_arfcn); - j.write_str("bandIndicator", band_ind.to_string()); - j.write_fieldname("followingARFCNs"); - following_arfcns.to_json(j); - j.end_obj(); -} -bool carrier_freqs_geran_s::operator==(const carrier_freqs_geran_s& other) const -{ - return start_arfcn == other.start_arfcn and band_ind == other.band_ind and following_arfcns == other.following_arfcns; -} - -void carrier_freqs_geran_s::following_arfcns_c_::destroy_() -{ - switch (type_) { - case types::explicit_list_of_arfcns: - c.destroy<explicit_list_of_arfcns_l>(); - break; - case types::equally_spaced_arfcns: - c.destroy<equally_spaced_arfcns_s_>(); - break; - case types::variable_bit_map_of_arfcns: - c.destroy<bounded_octstring<1, 16> >(); - break; - default: - break; - } -} -void carrier_freqs_geran_s::following_arfcns_c_::set(types::options e) -{ - destroy_(); - type_ = e; - switch (type_) { - case types::explicit_list_of_arfcns: - c.init<explicit_list_of_arfcns_l>(); - break; - case types::equally_spaced_arfcns: - c.init<equally_spaced_arfcns_s_>(); - break; - case types::variable_bit_map_of_arfcns: - c.init<bounded_octstring<1, 16> >(); - break; - case types::nulltype: - break; - default: - log_invalid_choice_id(type_, "carrier_freqs_geran_s::following_arfcns_c_"); - } -} -carrier_freqs_geran_s::following_arfcns_c_::following_arfcns_c_(const carrier_freqs_geran_s::following_arfcns_c_& other) -{ - type_ = other.type(); - switch (type_) { - case types::explicit_list_of_arfcns: - c.init(other.c.get<explicit_list_of_arfcns_l>()); - break; - case types::equally_spaced_arfcns: - c.init(other.c.get<equally_spaced_arfcns_s_>()); - break; - case types::variable_bit_map_of_arfcns: - c.init(other.c.get<bounded_octstring<1, 16> >()); - break; - case types::nulltype: - break; - default: - log_invalid_choice_id(type_, "carrier_freqs_geran_s::following_arfcns_c_"); - } -} -carrier_freqs_geran_s::following_arfcns_c_& -carrier_freqs_geran_s::following_arfcns_c_::operator=(const carrier_freqs_geran_s::following_arfcns_c_& other) -{ - if (this == &other) { - return *this; - } - set(other.type()); - switch (type_) { - case types::explicit_list_of_arfcns: - c.set(other.c.get<explicit_list_of_arfcns_l>()); - break; - case types::equally_spaced_arfcns: - c.set(other.c.get<equally_spaced_arfcns_s_>()); - break; - case types::variable_bit_map_of_arfcns: - c.set(other.c.get<bounded_octstring<1, 16> >()); - break; - case types::nulltype: - break; - default: - log_invalid_choice_id(type_, "carrier_freqs_geran_s::following_arfcns_c_"); - } - - return *this; -} -explicit_list_of_arfcns_l& carrier_freqs_geran_s::following_arfcns_c_::set_explicit_list_of_arfcns() -{ - set(types::explicit_list_of_arfcns); - return c.get<explicit_list_of_arfcns_l>(); -} -carrier_freqs_geran_s::following_arfcns_c_::equally_spaced_arfcns_s_& -carrier_freqs_geran_s::following_arfcns_c_::set_equally_spaced_arfcns() -{ - set(types::equally_spaced_arfcns); - return c.get<equally_spaced_arfcns_s_>(); -} -bounded_octstring<1, 16>& carrier_freqs_geran_s::following_arfcns_c_::set_variable_bit_map_of_arfcns() -{ - set(types::variable_bit_map_of_arfcns); - return c.get<bounded_octstring<1, 16> >(); -} -void carrier_freqs_geran_s::following_arfcns_c_::to_json(json_writer& j) const -{ - j.start_obj(); - switch (type_) { - case types::explicit_list_of_arfcns: - j.start_array("explicitListOfARFCNs"); - for (const auto& e1 : c.get<explicit_list_of_arfcns_l>()) { - j.write_int(e1); - } - j.end_array(); - break; - case types::equally_spaced_arfcns: - j.write_fieldname("equallySpacedARFCNs"); - j.start_obj(); - j.write_int("arfcn-Spacing", c.get<equally_spaced_arfcns_s_>().arfcn_spacing); - j.write_int("numberOfFollowingARFCNs", c.get<equally_spaced_arfcns_s_>().nof_following_arfcns); - j.end_obj(); - break; - case types::variable_bit_map_of_arfcns: - j.write_str("variableBitMapOfARFCNs", c.get<bounded_octstring<1, 16> >().to_string()); - break; - default: - log_invalid_choice_id(type_, "carrier_freqs_geran_s::following_arfcns_c_"); - } - j.end_obj(); -} -SRSASN_CODE carrier_freqs_geran_s::following_arfcns_c_::pack(bit_ref& bref) const -{ - type_.pack(bref); - switch (type_) { - case types::explicit_list_of_arfcns: - HANDLE_CODE(pack_dyn_seq_of(bref, c.get<explicit_list_of_arfcns_l>(), 0, 31, integer_packer<uint16_t>(0, 1023))); - break; - case types::equally_spaced_arfcns: - HANDLE_CODE(pack_integer(bref, c.get<equally_spaced_arfcns_s_>().arfcn_spacing, (uint8_t)1u, (uint8_t)8u)); - HANDLE_CODE( - pack_integer(bref, c.get<equally_spaced_arfcns_s_>().nof_following_arfcns, (uint8_t)0u, (uint8_t)31u)); - break; - case types::variable_bit_map_of_arfcns: - HANDLE_CODE((c.get<bounded_octstring<1, 16> >().pack(bref))); - break; - default: - log_invalid_choice_id(type_, "carrier_freqs_geran_s::following_arfcns_c_"); - return SRSASN_ERROR_ENCODE_FAIL; - } - return SRSASN_SUCCESS; -} -SRSASN_CODE carrier_freqs_geran_s::following_arfcns_c_::unpack(cbit_ref& bref) -{ - types e; - e.unpack(bref); - set(e); - switch (type_) { - case types::explicit_list_of_arfcns: - HANDLE_CODE( - unpack_dyn_seq_of(c.get<explicit_list_of_arfcns_l>(), bref, 0, 31, integer_packer<uint16_t>(0, 1023))); - break; - case types::equally_spaced_arfcns: - HANDLE_CODE(unpack_integer(c.get<equally_spaced_arfcns_s_>().arfcn_spacing, bref, (uint8_t)1u, (uint8_t)8u)); - HANDLE_CODE( - unpack_integer(c.get<equally_spaced_arfcns_s_>().nof_following_arfcns, bref, (uint8_t)0u, (uint8_t)31u)); - break; - case types::variable_bit_map_of_arfcns: - HANDLE_CODE((c.get<bounded_octstring<1, 16> >().unpack(bref))); - break; - default: - log_invalid_choice_id(type_, "carrier_freqs_geran_s::following_arfcns_c_"); - return SRSASN_ERROR_DECODE_FAIL; - } - return SRSASN_SUCCESS; -} -bool carrier_freqs_geran_s::following_arfcns_c_::operator==(const following_arfcns_c_& other) const -{ - if (type_ != other.type_) { - return false; - } - switch (type_) { - case types::explicit_list_of_arfcns: - return c.get<explicit_list_of_arfcns_l>() == other.c.get<explicit_list_of_arfcns_l>(); - case types::equally_spaced_arfcns: - return c.get<equally_spaced_arfcns_s_>().arfcn_spacing == - other.c.get<equally_spaced_arfcns_s_>().arfcn_spacing and - c.get<equally_spaced_arfcns_s_>().nof_following_arfcns == - other.c.get<equally_spaced_arfcns_s_>().nof_following_arfcns; - case types::variable_bit_map_of_arfcns: - return c.get<bounded_octstring<1, 16> >() == other.c.get<bounded_octstring<1, 16> >(); - default: - return true; - } - return true; -} - -// CellReselectionSubPriority-r13 ::= ENUMERATED -const char* cell_resel_sub_prio_r13_opts::to_string() const -{ - static const char* options[] = {"oDot2", "oDot4", "oDot6", "oDot8"}; - return convert_enum_idx(options, 4, value, "cell_resel_sub_prio_r13_e"); -} -float cell_resel_sub_prio_r13_opts::to_number() const -{ - static const float options[] = {0.2, 0.4, 0.6, 0.8}; - return map_enum_number(options, 4, value, "cell_resel_sub_prio_r13_e"); -} -const char* cell_resel_sub_prio_r13_opts::to_number_string() const -{ - static const char* options[] = {"0.2", "0.4", "0.6", "0.8"}; - return convert_enum_idx(options, 4, value, "cell_resel_sub_prio_r13_e"); -} - // MTC-SSB-NR-r15 ::= SEQUENCE SRSASN_CODE mtc_ssb_nr_r15_s::pack(bit_ref& bref) const { @@ -634,6 +362,54 @@ uint8_t mtc_ssb_nr_r15_s::ssb_dur_r15_opts::to_number() const return map_enum_number(options, 5, value, "mtc_ssb_nr_r15_s::ssb_dur_r15_e_"); } +// PreRegistrationInfoHRPD ::= SEQUENCE +SRSASN_CODE pre_regist_info_hrpd_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(pre_regist_zone_id_present, 1)); + HANDLE_CODE(bref.pack(secondary_pre_regist_zone_id_list_present, 1)); + + HANDLE_CODE(bref.pack(pre_regist_allowed, 1)); + if (pre_regist_zone_id_present) { + HANDLE_CODE(pack_integer(bref, pre_regist_zone_id, (uint16_t)0u, (uint16_t)255u)); + } + if (secondary_pre_regist_zone_id_list_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, secondary_pre_regist_zone_id_list, 1, 2, integer_packer<uint16_t>(0, 255))); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE pre_regist_info_hrpd_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(pre_regist_zone_id_present, 1)); + HANDLE_CODE(bref.unpack(secondary_pre_regist_zone_id_list_present, 1)); + + HANDLE_CODE(bref.unpack(pre_regist_allowed, 1)); + if (pre_regist_zone_id_present) { + HANDLE_CODE(unpack_integer(pre_regist_zone_id, bref, (uint16_t)0u, (uint16_t)255u)); + } + if (secondary_pre_regist_zone_id_list_present) { + HANDLE_CODE(unpack_dyn_seq_of(secondary_pre_regist_zone_id_list, bref, 1, 2, integer_packer<uint16_t>(0, 255))); + } + + return SRSASN_SUCCESS; +} +void pre_regist_info_hrpd_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_bool("preRegistrationAllowed", pre_regist_allowed); + if (pre_regist_zone_id_present) { + j.write_int("preRegistrationZoneId", pre_regist_zone_id); + } + if (secondary_pre_regist_zone_id_list_present) { + j.start_array("secondaryPreRegistrationZoneIdList"); + for (const auto& e1 : secondary_pre_regist_zone_id_list) { + j.write_int(e1); + } + j.end_array(); + } + j.end_obj(); +} + // SS-RSSI-Measurement-r15 ::= SEQUENCE SRSASN_CODE ss_rssi_meas_r15_s::pack(bit_ref& bref) const { @@ -893,6 +669,304 @@ bool thres_list_nr_r15_s::operator==(const thres_list_nr_r15_s& other) const (not nr_sinr_r15_present or nr_sinr_r15 == other.nr_sinr_r15); } +// CarrierFreqsGERAN ::= SEQUENCE +SRSASN_CODE carrier_freqs_geran_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(pack_integer(bref, start_arfcn, (uint16_t)0u, (uint16_t)1023u)); + HANDLE_CODE(band_ind.pack(bref)); + HANDLE_CODE(following_arfcns.pack(bref)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE carrier_freqs_geran_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(unpack_integer(start_arfcn, bref, (uint16_t)0u, (uint16_t)1023u)); + HANDLE_CODE(band_ind.unpack(bref)); + HANDLE_CODE(following_arfcns.unpack(bref)); + + return SRSASN_SUCCESS; +} +void carrier_freqs_geran_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_int("startingARFCN", start_arfcn); + j.write_str("bandIndicator", band_ind.to_string()); + j.write_fieldname("followingARFCNs"); + following_arfcns.to_json(j); + j.end_obj(); +} +bool carrier_freqs_geran_s::operator==(const carrier_freqs_geran_s& other) const +{ + return start_arfcn == other.start_arfcn and band_ind == other.band_ind and following_arfcns == other.following_arfcns; +} + +void carrier_freqs_geran_s::following_arfcns_c_::destroy_() +{ + switch (type_) { + case types::explicit_list_of_arfcns: + c.destroy<explicit_list_of_arfcns_l>(); + break; + case types::equally_spaced_arfcns: + c.destroy<equally_spaced_arfcns_s_>(); + break; + case types::variable_bit_map_of_arfcns: + c.destroy<bounded_octstring<1, 16> >(); + break; + default: + break; + } +} +void carrier_freqs_geran_s::following_arfcns_c_::set(types::options e) +{ + destroy_(); + type_ = e; + switch (type_) { + case types::explicit_list_of_arfcns: + c.init<explicit_list_of_arfcns_l>(); + break; + case types::equally_spaced_arfcns: + c.init<equally_spaced_arfcns_s_>(); + break; + case types::variable_bit_map_of_arfcns: + c.init<bounded_octstring<1, 16> >(); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "carrier_freqs_geran_s::following_arfcns_c_"); + } +} +carrier_freqs_geran_s::following_arfcns_c_::following_arfcns_c_(const carrier_freqs_geran_s::following_arfcns_c_& other) +{ + type_ = other.type(); + switch (type_) { + case types::explicit_list_of_arfcns: + c.init(other.c.get<explicit_list_of_arfcns_l>()); + break; + case types::equally_spaced_arfcns: + c.init(other.c.get<equally_spaced_arfcns_s_>()); + break; + case types::variable_bit_map_of_arfcns: + c.init(other.c.get<bounded_octstring<1, 16> >()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "carrier_freqs_geran_s::following_arfcns_c_"); + } +} +carrier_freqs_geran_s::following_arfcns_c_& +carrier_freqs_geran_s::following_arfcns_c_::operator=(const carrier_freqs_geran_s::following_arfcns_c_& other) +{ + if (this == &other) { + return *this; + } + set(other.type()); + switch (type_) { + case types::explicit_list_of_arfcns: + c.set(other.c.get<explicit_list_of_arfcns_l>()); + break; + case types::equally_spaced_arfcns: + c.set(other.c.get<equally_spaced_arfcns_s_>()); + break; + case types::variable_bit_map_of_arfcns: + c.set(other.c.get<bounded_octstring<1, 16> >()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "carrier_freqs_geran_s::following_arfcns_c_"); + } + + return *this; +} +explicit_list_of_arfcns_l& carrier_freqs_geran_s::following_arfcns_c_::set_explicit_list_of_arfcns() +{ + set(types::explicit_list_of_arfcns); + return c.get<explicit_list_of_arfcns_l>(); +} +carrier_freqs_geran_s::following_arfcns_c_::equally_spaced_arfcns_s_& +carrier_freqs_geran_s::following_arfcns_c_::set_equally_spaced_arfcns() +{ + set(types::equally_spaced_arfcns); + return c.get<equally_spaced_arfcns_s_>(); +} +bounded_octstring<1, 16>& carrier_freqs_geran_s::following_arfcns_c_::set_variable_bit_map_of_arfcns() +{ + set(types::variable_bit_map_of_arfcns); + return c.get<bounded_octstring<1, 16> >(); +} +void carrier_freqs_geran_s::following_arfcns_c_::to_json(json_writer& j) const +{ + j.start_obj(); + switch (type_) { + case types::explicit_list_of_arfcns: + j.start_array("explicitListOfARFCNs"); + for (const auto& e1 : c.get<explicit_list_of_arfcns_l>()) { + j.write_int(e1); + } + j.end_array(); + break; + case types::equally_spaced_arfcns: + j.write_fieldname("equallySpacedARFCNs"); + j.start_obj(); + j.write_int("arfcn-Spacing", c.get<equally_spaced_arfcns_s_>().arfcn_spacing); + j.write_int("numberOfFollowingARFCNs", c.get<equally_spaced_arfcns_s_>().nof_following_arfcns); + j.end_obj(); + break; + case types::variable_bit_map_of_arfcns: + j.write_str("variableBitMapOfARFCNs", c.get<bounded_octstring<1, 16> >().to_string()); + break; + default: + log_invalid_choice_id(type_, "carrier_freqs_geran_s::following_arfcns_c_"); + } + j.end_obj(); +} +SRSASN_CODE carrier_freqs_geran_s::following_arfcns_c_::pack(bit_ref& bref) const +{ + type_.pack(bref); + switch (type_) { + case types::explicit_list_of_arfcns: + HANDLE_CODE(pack_dyn_seq_of(bref, c.get<explicit_list_of_arfcns_l>(), 0, 31, integer_packer<uint16_t>(0, 1023))); + break; + case types::equally_spaced_arfcns: + HANDLE_CODE(pack_integer(bref, c.get<equally_spaced_arfcns_s_>().arfcn_spacing, (uint8_t)1u, (uint8_t)8u)); + HANDLE_CODE( + pack_integer(bref, c.get<equally_spaced_arfcns_s_>().nof_following_arfcns, (uint8_t)0u, (uint8_t)31u)); + break; + case types::variable_bit_map_of_arfcns: + HANDLE_CODE((c.get<bounded_octstring<1, 16> >().pack(bref))); + break; + default: + log_invalid_choice_id(type_, "carrier_freqs_geran_s::following_arfcns_c_"); + return SRSASN_ERROR_ENCODE_FAIL; + } + return SRSASN_SUCCESS; +} +SRSASN_CODE carrier_freqs_geran_s::following_arfcns_c_::unpack(cbit_ref& bref) +{ + types e; + e.unpack(bref); + set(e); + switch (type_) { + case types::explicit_list_of_arfcns: + HANDLE_CODE( + unpack_dyn_seq_of(c.get<explicit_list_of_arfcns_l>(), bref, 0, 31, integer_packer<uint16_t>(0, 1023))); + break; + case types::equally_spaced_arfcns: + HANDLE_CODE(unpack_integer(c.get<equally_spaced_arfcns_s_>().arfcn_spacing, bref, (uint8_t)1u, (uint8_t)8u)); + HANDLE_CODE( + unpack_integer(c.get<equally_spaced_arfcns_s_>().nof_following_arfcns, bref, (uint8_t)0u, (uint8_t)31u)); + break; + case types::variable_bit_map_of_arfcns: + HANDLE_CODE((c.get<bounded_octstring<1, 16> >().unpack(bref))); + break; + default: + log_invalid_choice_id(type_, "carrier_freqs_geran_s::following_arfcns_c_"); + return SRSASN_ERROR_DECODE_FAIL; + } + return SRSASN_SUCCESS; +} +bool carrier_freqs_geran_s::following_arfcns_c_::operator==(const following_arfcns_c_& other) const +{ + if (type_ != other.type_) { + return false; + } + switch (type_) { + case types::explicit_list_of_arfcns: + return c.get<explicit_list_of_arfcns_l>() == other.c.get<explicit_list_of_arfcns_l>(); + case types::equally_spaced_arfcns: + return c.get<equally_spaced_arfcns_s_>().arfcn_spacing == + other.c.get<equally_spaced_arfcns_s_>().arfcn_spacing and + c.get<equally_spaced_arfcns_s_>().nof_following_arfcns == + other.c.get<equally_spaced_arfcns_s_>().nof_following_arfcns; + case types::variable_bit_map_of_arfcns: + return c.get<bounded_octstring<1, 16> >() == other.c.get<bounded_octstring<1, 16> >(); + default: + return true; + } + return true; +} + +// CellReselectionSubPriority-r13 ::= ENUMERATED +const char* cell_resel_sub_prio_r13_opts::to_string() const +{ + static const char* options[] = {"oDot2", "oDot4", "oDot6", "oDot8"}; + return convert_enum_idx(options, 4, value, "cell_resel_sub_prio_r13_e"); +} +float cell_resel_sub_prio_r13_opts::to_number() const +{ + static const float options[] = {0.2, 0.4, 0.6, 0.8}; + return map_enum_number(options, 4, value, "cell_resel_sub_prio_r13_e"); +} +const char* cell_resel_sub_prio_r13_opts::to_number_string() const +{ + static const char* options[] = {"0.2", "0.4", "0.6", "0.8"}; + return convert_enum_idx(options, 4, value, "cell_resel_sub_prio_r13_e"); +} + +// RSS-ConfigCarrierInfo-r16 ::= SEQUENCE +SRSASN_CODE rss_cfg_carrier_info_r16_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(nb_idx_r16.pack(bref)); + HANDLE_CODE(time_offset_granularity_r16.pack(bref)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE rss_cfg_carrier_info_r16_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(nb_idx_r16.unpack(bref)); + HANDLE_CODE(time_offset_granularity_r16.unpack(bref)); + + return SRSASN_SUCCESS; +} +void rss_cfg_carrier_info_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_str("narrowbandIndex-r16", nb_idx_r16.to_string()); + j.write_str("timeOffsetGranularity-r16", time_offset_granularity_r16.to_string()); + j.end_obj(); +} +bool rss_cfg_carrier_info_r16_s::operator==(const rss_cfg_carrier_info_r16_s& other) const +{ + return nb_idx_r16 == other.nb_idx_r16 and time_offset_granularity_r16 == other.time_offset_granularity_r16; +} + +const char* rss_cfg_carrier_info_r16_s::time_offset_granularity_r16_opts::to_string() const +{ + static const char* options[] = {"g1", "g2", "g4", "g8", "g16", "g32", "g64", "g128"}; + return convert_enum_idx(options, 8, value, "rss_cfg_carrier_info_r16_s::time_offset_granularity_r16_e_"); +} +uint8_t rss_cfg_carrier_info_r16_s::time_offset_granularity_r16_opts::to_number() const +{ + static const uint8_t options[] = {1, 2, 4, 8, 16, 32, 64, 128}; + return map_enum_number(options, 8, value, "rss_cfg_carrier_info_r16_s::time_offset_granularity_r16_e_"); +} + +// SSB-PositionQCL-RelationNR-r16 ::= ENUMERATED +const char* ssb_position_qcl_relation_nr_r16_opts::to_string() const +{ + static const char* options[] = {"n1", "n2", "n4", "n8"}; + return convert_enum_idx(options, 4, value, "ssb_position_qcl_relation_nr_r16_e"); +} +uint8_t ssb_position_qcl_relation_nr_r16_opts::to_number() const +{ + static const uint8_t options[] = {1, 2, 4, 8}; + return map_enum_number(options, 4, value, "ssb_position_qcl_relation_nr_r16_e"); +} + +// SSB-PositionQCL-RelationNR-r17 ::= ENUMERATED +const char* ssb_position_qcl_relation_nr_r17_opts::to_string() const +{ + static const char* options[] = {"n32", "n64"}; + return convert_enum_idx(options, 2, value, "ssb_position_qcl_relation_nr_r17_e"); +} +uint8_t ssb_position_qcl_relation_nr_r17_opts::to_number() const +{ + static const uint8_t options[] = {32, 64}; + return map_enum_number(options, 2, value, "ssb_position_qcl_relation_nr_r17_e"); +} + // MobilityStateParameters ::= SEQUENCE SRSASN_CODE mob_state_params_s::pack(bit_ref& bref) const { @@ -971,6 +1045,30 @@ bool carrier_freq_cdma2000_s::operator==(const carrier_freq_cdma2000_s& other) c return band_class == other.band_class and arfcn == other.arfcn; } +// CellsToAddMod-v1610 ::= SEQUENCE +SRSASN_CODE cells_to_add_mod_v1610_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(rss_meas_pwr_bias_r16.pack(bref)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE cells_to_add_mod_v1610_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(rss_meas_pwr_bias_r16.unpack(bref)); + + return SRSASN_SUCCESS; +} +void cells_to_add_mod_v1610_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_str("rss-MeasPowerBias-r16", rss_meas_pwr_bias_r16.to_string()); + j.end_obj(); +} +bool cells_to_add_mod_v1610_s::operator==(const cells_to_add_mod_v1610_s& other) const +{ + return rss_meas_pwr_bias_r16 == other.rss_meas_pwr_bias_r16; +} + // MeasCSI-RS-Config-r12 ::= SEQUENCE SRSASN_CODE meas_csi_rs_cfg_r12_s::pack(bit_ref& bref) const { @@ -1052,60 +1150,114 @@ bool pci_range_utra_fdd_r9_s::operator==(const pci_range_utra_fdd_r9_s& other) c (not range_r9_present or range_r9 == other.range_r9); } -// AltTTT-CellsToAddMod-r12 ::= SEQUENCE -SRSASN_CODE alt_ttt_cells_to_add_mod_r12_s::pack(bit_ref& bref) const +// SSB-PositionQCL-CellsToAddNR-r16 ::= SEQUENCE +SRSASN_CODE ssb_position_qcl_cells_to_add_nr_r16_s::pack(bit_ref& bref) const { - HANDLE_CODE(pack_integer(bref, cell_idx_r12, (uint8_t)1u, (uint8_t)32u)); - HANDLE_CODE(pci_range_r12.pack(bref)); + HANDLE_CODE(pack_integer(bref, pci_r16, (uint16_t)0u, (uint16_t)1007u)); + HANDLE_CODE(ssb_position_qcl_nr_r16.pack(bref)); return SRSASN_SUCCESS; } -SRSASN_CODE alt_ttt_cells_to_add_mod_r12_s::unpack(cbit_ref& bref) +SRSASN_CODE ssb_position_qcl_cells_to_add_nr_r16_s::unpack(cbit_ref& bref) { - HANDLE_CODE(unpack_integer(cell_idx_r12, bref, (uint8_t)1u, (uint8_t)32u)); - HANDLE_CODE(pci_range_r12.unpack(bref)); + HANDLE_CODE(unpack_integer(pci_r16, bref, (uint16_t)0u, (uint16_t)1007u)); + HANDLE_CODE(ssb_position_qcl_nr_r16.unpack(bref)); return SRSASN_SUCCESS; } -void alt_ttt_cells_to_add_mod_r12_s::to_json(json_writer& j) const +void ssb_position_qcl_cells_to_add_nr_r16_s::to_json(json_writer& j) const { j.start_obj(); - j.write_int("cellIndex-r12", cell_idx_r12); - j.write_fieldname("physCellIdRange-r12"); - pci_range_r12.to_json(j); + j.write_int("physCellId-r16", pci_r16); + j.write_str("ssb-PositionQCL-NR-r16", ssb_position_qcl_nr_r16.to_string()); j.end_obj(); } -bool alt_ttt_cells_to_add_mod_r12_s::operator==(const alt_ttt_cells_to_add_mod_r12_s& other) const +bool ssb_position_qcl_cells_to_add_nr_r16_s::operator==(const ssb_position_qcl_cells_to_add_nr_r16_s& other) const { - return cell_idx_r12 == other.cell_idx_r12 and pci_range_r12 == other.pci_range_r12; + return pci_r16 == other.pci_r16 and ssb_position_qcl_nr_r16 == other.ssb_position_qcl_nr_r16; } -// BlackCellsToAddMod ::= SEQUENCE -SRSASN_CODE black_cells_to_add_mod_s::pack(bit_ref& bref) const +// SSB-PositionQCL-CellsToAddNR-r17 ::= SEQUENCE +SRSASN_CODE ssb_position_qcl_cells_to_add_nr_r17_s::pack(bit_ref& bref) const { - HANDLE_CODE(pack_integer(bref, cell_idx, (uint8_t)1u, (uint8_t)32u)); - HANDLE_CODE(pci_range.pack(bref)); + HANDLE_CODE(pack_integer(bref, pci_nr_r17, (uint16_t)0u, (uint16_t)1007u)); + HANDLE_CODE(ssb_position_qcl_nr_r17.pack(bref)); return SRSASN_SUCCESS; } -SRSASN_CODE black_cells_to_add_mod_s::unpack(cbit_ref& bref) +SRSASN_CODE ssb_position_qcl_cells_to_add_nr_r17_s::unpack(cbit_ref& bref) { - HANDLE_CODE(unpack_integer(cell_idx, bref, (uint8_t)1u, (uint8_t)32u)); - HANDLE_CODE(pci_range.unpack(bref)); + HANDLE_CODE(unpack_integer(pci_nr_r17, bref, (uint16_t)0u, (uint16_t)1007u)); + HANDLE_CODE(ssb_position_qcl_nr_r17.unpack(bref)); return SRSASN_SUCCESS; } -void black_cells_to_add_mod_s::to_json(json_writer& j) const +void ssb_position_qcl_cells_to_add_nr_r17_s::to_json(json_writer& j) const { j.start_obj(); - j.write_int("cellIndex", cell_idx); - j.write_fieldname("physCellIdRange"); - pci_range.to_json(j); + j.write_int("physCellIdNR-r17", pci_nr_r17); + j.write_str("ssb-PositionQCL-NR-r17", ssb_position_qcl_nr_r17.to_string()); j.end_obj(); } -bool black_cells_to_add_mod_s::operator==(const black_cells_to_add_mod_s& other) const +bool ssb_position_qcl_cells_to_add_nr_r17_s::operator==(const ssb_position_qcl_cells_to_add_nr_r17_s& other) const { - return cell_idx == other.cell_idx and pci_range == other.pci_range; + return pci_nr_r17 == other.pci_nr_r17 and ssb_position_qcl_nr_r17 == other.ssb_position_qcl_nr_r17; +} + +// AllowedCellsToAddMod-r13 ::= SEQUENCE +SRSASN_CODE allowed_cells_to_add_mod_r13_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(pack_integer(bref, cell_idx_r13, (uint8_t)1u, (uint8_t)32u)); + HANDLE_CODE(pci_range_r13.pack(bref)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE allowed_cells_to_add_mod_r13_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(unpack_integer(cell_idx_r13, bref, (uint8_t)1u, (uint8_t)32u)); + HANDLE_CODE(pci_range_r13.unpack(bref)); + + return SRSASN_SUCCESS; +} +void allowed_cells_to_add_mod_r13_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_int("cellIndex-r13", cell_idx_r13); + j.write_fieldname("physCellIdRange-r13"); + pci_range_r13.to_json(j); + j.end_obj(); +} +bool allowed_cells_to_add_mod_r13_s::operator==(const allowed_cells_to_add_mod_r13_s& other) const +{ + return cell_idx_r13 == other.cell_idx_r13 and pci_range_r13 == other.pci_range_r13; +} + +// AltTTT-CellsToAddMod-r12 ::= SEQUENCE +SRSASN_CODE alt_ttt_cells_to_add_mod_r12_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(pack_integer(bref, cell_idx_r12, (uint8_t)1u, (uint8_t)32u)); + HANDLE_CODE(pci_range_r12.pack(bref)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE alt_ttt_cells_to_add_mod_r12_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(unpack_integer(cell_idx_r12, bref, (uint8_t)1u, (uint8_t)32u)); + HANDLE_CODE(pci_range_r12.unpack(bref)); + + return SRSASN_SUCCESS; +} +void alt_ttt_cells_to_add_mod_r12_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_int("cellIndex-r12", cell_idx_r12); + j.write_fieldname("physCellIdRange-r12"); + pci_range_r12.to_json(j); + j.end_obj(); +} +bool alt_ttt_cells_to_add_mod_r12_s::operator==(const alt_ttt_cells_to_add_mod_r12_s& other) const +{ + return cell_idx_r12 == other.cell_idx_r12 and pci_range_r12 == other.pci_range_r12; } // CellsToAddMod ::= SEQUENCE @@ -1192,6 +1344,37 @@ bool cells_to_add_mod_nr_r15_s::operator==(const cells_to_add_mod_nr_r15_s& othe return cell_idx_r15 == other.cell_idx_r15 and pci_r15 == other.pci_r15; } +// CellsToAddModNR-r16 ::= SEQUENCE +SRSASN_CODE cells_to_add_mod_nr_r16_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(pack_integer(bref, cell_idx_r16, (uint8_t)1u, (uint8_t)32u)); + HANDLE_CODE(pack_integer(bref, pci_r16, (uint16_t)0u, (uint16_t)1007u)); + HANDLE_CODE(cell_individual_offset_r16.pack(bref)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE cells_to_add_mod_nr_r16_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(unpack_integer(cell_idx_r16, bref, (uint8_t)1u, (uint8_t)32u)); + HANDLE_CODE(unpack_integer(pci_r16, bref, (uint16_t)0u, (uint16_t)1007u)); + HANDLE_CODE(cell_individual_offset_r16.unpack(bref)); + + return SRSASN_SUCCESS; +} +void cells_to_add_mod_nr_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_int("cellIndex-r16", cell_idx_r16); + j.write_int("physCellId-r16", pci_r16); + j.write_str("cellIndividualOffset-r16", cell_individual_offset_r16.to_string()); + j.end_obj(); +} +bool cells_to_add_mod_nr_r16_s::operator==(const cells_to_add_mod_nr_r16_s& other) const +{ + return cell_idx_r16 == other.cell_idx_r16 and pci_r16 == other.pci_r16 and + cell_individual_offset_r16 == other.cell_individual_offset_r16; +} + // CellsToAddModUTRA-FDD ::= SEQUENCE SRSASN_CODE cells_to_add_mod_utra_fdd_s::pack(bit_ref& bref) const { @@ -1246,32 +1429,319 @@ bool cells_to_add_mod_utra_tdd_s::operator==(const cells_to_add_mod_utra_tdd_s& return cell_idx == other.cell_idx and pci == other.pci; } -// WhiteCellsToAddMod-r13 ::= SEQUENCE -SRSASN_CODE white_cells_to_add_mod_r13_s::pack(bit_ref& bref) const +// ExcludedCellsToAddMod ::= SEQUENCE +SRSASN_CODE excluded_cells_to_add_mod_s::pack(bit_ref& bref) const { - HANDLE_CODE(pack_integer(bref, cell_idx_r13, (uint8_t)1u, (uint8_t)32u)); - HANDLE_CODE(pci_range_r13.pack(bref)); + HANDLE_CODE(pack_integer(bref, cell_idx, (uint8_t)1u, (uint8_t)32u)); + HANDLE_CODE(pci_range.pack(bref)); return SRSASN_SUCCESS; } -SRSASN_CODE white_cells_to_add_mod_r13_s::unpack(cbit_ref& bref) +SRSASN_CODE excluded_cells_to_add_mod_s::unpack(cbit_ref& bref) { - HANDLE_CODE(unpack_integer(cell_idx_r13, bref, (uint8_t)1u, (uint8_t)32u)); - HANDLE_CODE(pci_range_r13.unpack(bref)); + HANDLE_CODE(unpack_integer(cell_idx, bref, (uint8_t)1u, (uint8_t)32u)); + HANDLE_CODE(pci_range.unpack(bref)); return SRSASN_SUCCESS; } -void white_cells_to_add_mod_r13_s::to_json(json_writer& j) const +void excluded_cells_to_add_mod_s::to_json(json_writer& j) const { j.start_obj(); - j.write_int("cellIndex-r13", cell_idx_r13); - j.write_fieldname("physCellIdRange-r13"); - pci_range_r13.to_json(j); + j.write_int("cellIndex", cell_idx); + j.write_fieldname("physCellIdRange"); + pci_range.to_json(j); j.end_obj(); } -bool white_cells_to_add_mod_r13_s::operator==(const white_cells_to_add_mod_r13_s& other) const +bool excluded_cells_to_add_mod_s::operator==(const excluded_cells_to_add_mod_s& other) const { - return cell_idx_r13 == other.cell_idx_r13 and pci_range_r13 == other.pci_range_r13; + return cell_idx == other.cell_idx and pci_range == other.pci_range; +} + +// ThresholdEUTRA ::= CHOICE +void thres_eutra_c::destroy_() {} +void thres_eutra_c::set(types::options e) +{ + destroy_(); + type_ = e; +} +thres_eutra_c::thres_eutra_c(const thres_eutra_c& other) +{ + type_ = other.type(); + switch (type_) { + case types::thres_rsrp: + c.init(other.c.get<uint8_t>()); + break; + case types::thres_rsrq: + c.init(other.c.get<uint8_t>()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "thres_eutra_c"); + } +} +thres_eutra_c& thres_eutra_c::operator=(const thres_eutra_c& other) +{ + if (this == &other) { + return *this; + } + set(other.type()); + switch (type_) { + case types::thres_rsrp: + c.set(other.c.get<uint8_t>()); + break; + case types::thres_rsrq: + c.set(other.c.get<uint8_t>()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "thres_eutra_c"); + } + + return *this; +} +uint8_t& thres_eutra_c::set_thres_rsrp() +{ + set(types::thres_rsrp); + return c.get<uint8_t>(); +} +uint8_t& thres_eutra_c::set_thres_rsrq() +{ + set(types::thres_rsrq); + return c.get<uint8_t>(); +} +void thres_eutra_c::to_json(json_writer& j) const +{ + j.start_obj(); + switch (type_) { + case types::thres_rsrp: + j.write_int("threshold-RSRP", c.get<uint8_t>()); + break; + case types::thres_rsrq: + j.write_int("threshold-RSRQ", c.get<uint8_t>()); + break; + default: + log_invalid_choice_id(type_, "thres_eutra_c"); + } + j.end_obj(); +} +SRSASN_CODE thres_eutra_c::pack(bit_ref& bref) const +{ + type_.pack(bref); + switch (type_) { + case types::thres_rsrp: + HANDLE_CODE(pack_integer(bref, c.get<uint8_t>(), (uint8_t)0u, (uint8_t)97u)); + break; + case types::thres_rsrq: + HANDLE_CODE(pack_integer(bref, c.get<uint8_t>(), (uint8_t)0u, (uint8_t)34u)); + break; + default: + log_invalid_choice_id(type_, "thres_eutra_c"); + return SRSASN_ERROR_ENCODE_FAIL; + } + return SRSASN_SUCCESS; +} +SRSASN_CODE thres_eutra_c::unpack(cbit_ref& bref) +{ + types e; + e.unpack(bref); + set(e); + switch (type_) { + case types::thres_rsrp: + HANDLE_CODE(unpack_integer(c.get<uint8_t>(), bref, (uint8_t)0u, (uint8_t)97u)); + break; + case types::thres_rsrq: + HANDLE_CODE(unpack_integer(c.get<uint8_t>(), bref, (uint8_t)0u, (uint8_t)34u)); + break; + default: + log_invalid_choice_id(type_, "thres_eutra_c"); + return SRSASN_ERROR_DECODE_FAIL; + } + return SRSASN_SUCCESS; +} +bool thres_eutra_c::operator==(const thres_eutra_c& other) const +{ + if (type_ != other.type_) { + return false; + } + switch (type_) { + case types::thres_rsrp: + return c.get<uint8_t>() == other.c.get<uint8_t>(); + case types::thres_rsrq: + return c.get<uint8_t>() == other.c.get<uint8_t>(); + default: + return true; + } + return true; +} + +// ThresholdNR-r15 ::= CHOICE +void thres_nr_r15_c::destroy_() {} +void thres_nr_r15_c::set(types::options e) +{ + destroy_(); + type_ = e; +} +thres_nr_r15_c::thres_nr_r15_c(const thres_nr_r15_c& other) +{ + type_ = other.type(); + switch (type_) { + case types::nr_rsrp_r15: + c.init(other.c.get<uint8_t>()); + break; + case types::nr_rsrq_r15: + c.init(other.c.get<uint8_t>()); + break; + case types::nr_sinr_r15: + c.init(other.c.get<uint8_t>()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "thres_nr_r15_c"); + } +} +thres_nr_r15_c& thres_nr_r15_c::operator=(const thres_nr_r15_c& other) +{ + if (this == &other) { + return *this; + } + set(other.type()); + switch (type_) { + case types::nr_rsrp_r15: + c.set(other.c.get<uint8_t>()); + break; + case types::nr_rsrq_r15: + c.set(other.c.get<uint8_t>()); + break; + case types::nr_sinr_r15: + c.set(other.c.get<uint8_t>()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "thres_nr_r15_c"); + } + + return *this; +} +uint8_t& thres_nr_r15_c::set_nr_rsrp_r15() +{ + set(types::nr_rsrp_r15); + return c.get<uint8_t>(); +} +uint8_t& thres_nr_r15_c::set_nr_rsrq_r15() +{ + set(types::nr_rsrq_r15); + return c.get<uint8_t>(); +} +uint8_t& thres_nr_r15_c::set_nr_sinr_r15() +{ + set(types::nr_sinr_r15); + return c.get<uint8_t>(); +} +void thres_nr_r15_c::to_json(json_writer& j) const +{ + j.start_obj(); + switch (type_) { + case types::nr_rsrp_r15: + j.write_int("nr-RSRP-r15", c.get<uint8_t>()); + break; + case types::nr_rsrq_r15: + j.write_int("nr-RSRQ-r15", c.get<uint8_t>()); + break; + case types::nr_sinr_r15: + j.write_int("nr-SINR-r15", c.get<uint8_t>()); + break; + default: + log_invalid_choice_id(type_, "thres_nr_r15_c"); + } + j.end_obj(); +} +SRSASN_CODE thres_nr_r15_c::pack(bit_ref& bref) const +{ + type_.pack(bref); + switch (type_) { + case types::nr_rsrp_r15: + HANDLE_CODE(pack_integer(bref, c.get<uint8_t>(), (uint8_t)0u, (uint8_t)127u)); + break; + case types::nr_rsrq_r15: + HANDLE_CODE(pack_integer(bref, c.get<uint8_t>(), (uint8_t)0u, (uint8_t)127u)); + break; + case types::nr_sinr_r15: + HANDLE_CODE(pack_integer(bref, c.get<uint8_t>(), (uint8_t)0u, (uint8_t)127u)); + break; + default: + log_invalid_choice_id(type_, "thres_nr_r15_c"); + return SRSASN_ERROR_ENCODE_FAIL; + } + return SRSASN_SUCCESS; +} +SRSASN_CODE thres_nr_r15_c::unpack(cbit_ref& bref) +{ + types e; + e.unpack(bref); + set(e); + switch (type_) { + case types::nr_rsrp_r15: + HANDLE_CODE(unpack_integer(c.get<uint8_t>(), bref, (uint8_t)0u, (uint8_t)127u)); + break; + case types::nr_rsrq_r15: + HANDLE_CODE(unpack_integer(c.get<uint8_t>(), bref, (uint8_t)0u, (uint8_t)127u)); + break; + case types::nr_sinr_r15: + HANDLE_CODE(unpack_integer(c.get<uint8_t>(), bref, (uint8_t)0u, (uint8_t)127u)); + break; + default: + log_invalid_choice_id(type_, "thres_nr_r15_c"); + return SRSASN_ERROR_DECODE_FAIL; + } + return SRSASN_SUCCESS; +} +bool thres_nr_r15_c::operator==(const thres_nr_r15_c& other) const +{ + if (type_ != other.type_) { + return false; + } + switch (type_) { + case types::nr_rsrp_r15: + return c.get<uint8_t>() == other.c.get<uint8_t>(); + case types::nr_rsrq_r15: + return c.get<uint8_t>() == other.c.get<uint8_t>(); + case types::nr_sinr_r15: + return c.get<uint8_t>() == other.c.get<uint8_t>(); + default: + return true; + } + return true; +} + +// TimeToTrigger ::= ENUMERATED +const char* time_to_trigger_opts::to_string() const +{ + static const char* options[] = {"ms0", + "ms40", + "ms64", + "ms80", + "ms100", + "ms128", + "ms160", + "ms256", + "ms320", + "ms480", + "ms512", + "ms640", + "ms1024", + "ms1280", + "ms2560", + "ms5120"}; + return convert_enum_idx(options, 16, value, "time_to_trigger_e"); +} +uint16_t time_to_trigger_opts::to_number() const +{ + static const uint16_t options[] = {0, 40, 64, 80, 100, 128, 160, 256, 320, 480, 512, 640, 1024, 1280, 2560, 5120}; + return map_enum_number(options, 16, value, "time_to_trigger_e"); } // BT-NameListConfig-r15 ::= CHOICE @@ -1394,6 +1864,271 @@ bool csg_allowed_report_cells_r9_s::operator==(const csg_allowed_report_cells_r9 (not pci_range_utra_fdd_list_r9_present or pci_range_utra_fdd_list_r9 == other.pci_range_utra_fdd_list_r9); } +// CondReconfigurationTriggerEUTRA-r16 ::= SEQUENCE +SRSASN_CODE cond_recfg_trigger_eutra_r16_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(cond_event_id_r16.pack(bref)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE cond_recfg_trigger_eutra_r16_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(cond_event_id_r16.unpack(bref)); + + return SRSASN_SUCCESS; +} +void cond_recfg_trigger_eutra_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_fieldname("condEventId-r16"); + cond_event_id_r16.to_json(j); + j.end_obj(); +} +bool cond_recfg_trigger_eutra_r16_s::operator==(const cond_recfg_trigger_eutra_r16_s& other) const +{ + return cond_event_id_r16 == other.cond_event_id_r16; +} + +void cond_recfg_trigger_eutra_r16_s::cond_event_id_r16_c_::destroy_() +{ + switch (type_) { + case types::cond_event_a3_r16: + c.destroy<cond_event_a3_r16_s_>(); + break; + case types::cond_event_a5_r16: + c.destroy<cond_event_a5_r16_s_>(); + break; + default: + break; + } +} +void cond_recfg_trigger_eutra_r16_s::cond_event_id_r16_c_::set(types::options e) +{ + destroy_(); + type_ = e; + switch (type_) { + case types::cond_event_a3_r16: + c.init<cond_event_a3_r16_s_>(); + break; + case types::cond_event_a5_r16: + c.init<cond_event_a5_r16_s_>(); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "cond_recfg_trigger_eutra_r16_s::cond_event_id_r16_c_"); + } +} +cond_recfg_trigger_eutra_r16_s::cond_event_id_r16_c_::cond_event_id_r16_c_( + const cond_recfg_trigger_eutra_r16_s::cond_event_id_r16_c_& other) +{ + type_ = other.type(); + switch (type_) { + case types::cond_event_a3_r16: + c.init(other.c.get<cond_event_a3_r16_s_>()); + break; + case types::cond_event_a5_r16: + c.init(other.c.get<cond_event_a5_r16_s_>()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "cond_recfg_trigger_eutra_r16_s::cond_event_id_r16_c_"); + } +} +cond_recfg_trigger_eutra_r16_s::cond_event_id_r16_c_& cond_recfg_trigger_eutra_r16_s::cond_event_id_r16_c_::operator=( + const cond_recfg_trigger_eutra_r16_s::cond_event_id_r16_c_& other) +{ + if (this == &other) { + return *this; + } + set(other.type()); + switch (type_) { + case types::cond_event_a3_r16: + c.set(other.c.get<cond_event_a3_r16_s_>()); + break; + case types::cond_event_a5_r16: + c.set(other.c.get<cond_event_a5_r16_s_>()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "cond_recfg_trigger_eutra_r16_s::cond_event_id_r16_c_"); + } + + return *this; +} +cond_recfg_trigger_eutra_r16_s::cond_event_id_r16_c_::cond_event_a3_r16_s_& +cond_recfg_trigger_eutra_r16_s::cond_event_id_r16_c_::set_cond_event_a3_r16() +{ + set(types::cond_event_a3_r16); + return c.get<cond_event_a3_r16_s_>(); +} +cond_recfg_trigger_eutra_r16_s::cond_event_id_r16_c_::cond_event_a5_r16_s_& +cond_recfg_trigger_eutra_r16_s::cond_event_id_r16_c_::set_cond_event_a5_r16() +{ + set(types::cond_event_a5_r16); + return c.get<cond_event_a5_r16_s_>(); +} +void cond_recfg_trigger_eutra_r16_s::cond_event_id_r16_c_::to_json(json_writer& j) const +{ + j.start_obj(); + switch (type_) { + case types::cond_event_a3_r16: + j.write_fieldname("condEventA3-r16"); + j.start_obj(); + j.write_int("a3-Offset-r16", c.get<cond_event_a3_r16_s_>().a3_offset_r16); + j.write_int("hysteresis-r16", c.get<cond_event_a3_r16_s_>().hysteresis_r16); + j.write_str("timeToTrigger-r16", c.get<cond_event_a3_r16_s_>().time_to_trigger_r16.to_string()); + j.end_obj(); + break; + case types::cond_event_a5_r16: + j.write_fieldname("condEventA5-r16"); + j.start_obj(); + j.write_fieldname("a5-Threshold1-r16"); + c.get<cond_event_a5_r16_s_>().a5_thres1_r16.to_json(j); + j.write_fieldname("a5-Threshold2-r16"); + c.get<cond_event_a5_r16_s_>().a5_thres2_r16.to_json(j); + j.write_int("hysteresis-r16", c.get<cond_event_a5_r16_s_>().hysteresis_r16); + j.write_str("timeToTrigger-r16", c.get<cond_event_a5_r16_s_>().time_to_trigger_r16.to_string()); + j.end_obj(); + break; + default: + log_invalid_choice_id(type_, "cond_recfg_trigger_eutra_r16_s::cond_event_id_r16_c_"); + } + j.end_obj(); +} +SRSASN_CODE cond_recfg_trigger_eutra_r16_s::cond_event_id_r16_c_::pack(bit_ref& bref) const +{ + type_.pack(bref); + switch (type_) { + case types::cond_event_a3_r16: + HANDLE_CODE(pack_integer(bref, c.get<cond_event_a3_r16_s_>().a3_offset_r16, (int8_t)-30, (int8_t)30)); + HANDLE_CODE(pack_integer(bref, c.get<cond_event_a3_r16_s_>().hysteresis_r16, (uint8_t)0u, (uint8_t)30u)); + HANDLE_CODE(c.get<cond_event_a3_r16_s_>().time_to_trigger_r16.pack(bref)); + break; + case types::cond_event_a5_r16: + HANDLE_CODE(c.get<cond_event_a5_r16_s_>().a5_thres1_r16.pack(bref)); + HANDLE_CODE(c.get<cond_event_a5_r16_s_>().a5_thres2_r16.pack(bref)); + HANDLE_CODE(pack_integer(bref, c.get<cond_event_a5_r16_s_>().hysteresis_r16, (uint8_t)0u, (uint8_t)30u)); + HANDLE_CODE(c.get<cond_event_a5_r16_s_>().time_to_trigger_r16.pack(bref)); + break; + default: + log_invalid_choice_id(type_, "cond_recfg_trigger_eutra_r16_s::cond_event_id_r16_c_"); + return SRSASN_ERROR_ENCODE_FAIL; + } + return SRSASN_SUCCESS; +} +SRSASN_CODE cond_recfg_trigger_eutra_r16_s::cond_event_id_r16_c_::unpack(cbit_ref& bref) +{ + types e; + e.unpack(bref); + set(e); + switch (type_) { + case types::cond_event_a3_r16: + HANDLE_CODE(unpack_integer(c.get<cond_event_a3_r16_s_>().a3_offset_r16, bref, (int8_t)-30, (int8_t)30)); + HANDLE_CODE(unpack_integer(c.get<cond_event_a3_r16_s_>().hysteresis_r16, bref, (uint8_t)0u, (uint8_t)30u)); + HANDLE_CODE(c.get<cond_event_a3_r16_s_>().time_to_trigger_r16.unpack(bref)); + break; + case types::cond_event_a5_r16: + HANDLE_CODE(c.get<cond_event_a5_r16_s_>().a5_thres1_r16.unpack(bref)); + HANDLE_CODE(c.get<cond_event_a5_r16_s_>().a5_thres2_r16.unpack(bref)); + HANDLE_CODE(unpack_integer(c.get<cond_event_a5_r16_s_>().hysteresis_r16, bref, (uint8_t)0u, (uint8_t)30u)); + HANDLE_CODE(c.get<cond_event_a5_r16_s_>().time_to_trigger_r16.unpack(bref)); + break; + default: + log_invalid_choice_id(type_, "cond_recfg_trigger_eutra_r16_s::cond_event_id_r16_c_"); + return SRSASN_ERROR_DECODE_FAIL; + } + return SRSASN_SUCCESS; +} +bool cond_recfg_trigger_eutra_r16_s::cond_event_id_r16_c_::operator==(const cond_event_id_r16_c_& other) const +{ + if (type_ != other.type_) { + return false; + } + switch (type_) { + case types::cond_event_a3_r16: + return c.get<cond_event_a3_r16_s_>().a3_offset_r16 == other.c.get<cond_event_a3_r16_s_>().a3_offset_r16 and + c.get<cond_event_a3_r16_s_>().hysteresis_r16 == other.c.get<cond_event_a3_r16_s_>().hysteresis_r16 and + c.get<cond_event_a3_r16_s_>().time_to_trigger_r16 == + other.c.get<cond_event_a3_r16_s_>().time_to_trigger_r16; + case types::cond_event_a5_r16: + return c.get<cond_event_a5_r16_s_>().a5_thres1_r16 == other.c.get<cond_event_a5_r16_s_>().a5_thres1_r16 and + c.get<cond_event_a5_r16_s_>().a5_thres2_r16 == other.c.get<cond_event_a5_r16_s_>().a5_thres2_r16 and + c.get<cond_event_a5_r16_s_>().hysteresis_r16 == other.c.get<cond_event_a5_r16_s_>().hysteresis_r16 and + c.get<cond_event_a5_r16_s_>().time_to_trigger_r16 == + other.c.get<cond_event_a5_r16_s_>().time_to_trigger_r16; + default: + return true; + } + return true; +} + +// CondReconfigurationTriggerNR-r17 ::= SEQUENCE +SRSASN_CODE cond_recfg_trigger_nr_r17_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(cond_event_id_r17.pack(bref)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE cond_recfg_trigger_nr_r17_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(cond_event_id_r17.unpack(bref)); + + return SRSASN_SUCCESS; +} +void cond_recfg_trigger_nr_r17_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_fieldname("condEventId-r17"); + cond_event_id_r17.to_json(j); + j.end_obj(); +} +bool cond_recfg_trigger_nr_r17_s::operator==(const cond_recfg_trigger_nr_r17_s& other) const +{ + return cond_event_id_r17 == other.cond_event_id_r17; +} + +void cond_recfg_trigger_nr_r17_s::cond_event_id_r17_c_::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_fieldname("condEventB1-NR-r17"); + j.start_obj(); + j.write_fieldname("b1-ThresholdNR-r17"); + c.b1_thres_nr_r17.to_json(j); + j.write_int("hysteresis-r17", c.hysteresis_r17); + j.write_str("timeToTrigger-r17", c.time_to_trigger_r17.to_string()); + j.end_obj(); + j.end_obj(); +} +SRSASN_CODE cond_recfg_trigger_nr_r17_s::cond_event_id_r17_c_::pack(bit_ref& bref) const +{ + pack_enum(bref, type()); + HANDLE_CODE(c.b1_thres_nr_r17.pack(bref)); + HANDLE_CODE(pack_integer(bref, c.hysteresis_r17, (uint8_t)0u, (uint8_t)30u)); + HANDLE_CODE(c.time_to_trigger_r17.pack(bref)); + return SRSASN_SUCCESS; +} +SRSASN_CODE cond_recfg_trigger_nr_r17_s::cond_event_id_r17_c_::unpack(cbit_ref& bref) +{ + types e; + unpack_enum(e, bref); + if (e != type()) { + log_invalid_choice_id(e, "cond_recfg_trigger_nr_r17_s::cond_event_id_r17_c_"); + return SRSASN_ERROR_DECODE_FAIL; + } + HANDLE_CODE(c.b1_thres_nr_r17.unpack(bref)); + HANDLE_CODE(unpack_integer(c.hysteresis_r17, bref, (uint8_t)0u, (uint8_t)30u)); + HANDLE_CODE(c.time_to_trigger_r17.unpack(bref)); + return SRSASN_SUCCESS; +} +bool cond_recfg_trigger_nr_r17_s::cond_event_id_r17_c_::operator==(const cond_event_id_r17_c_& other) const +{ + return type() == other.type() and c.b1_thres_nr_r17 == other.c.b1_thres_nr_r17 and + c.hysteresis_r17 == other.c.hysteresis_r17 and c.time_to_trigger_r17 == other.c.time_to_trigger_r17; +} + // MeasCycleSCell-r10 ::= ENUMERATED const char* meas_cycle_scell_r10_opts::to_string() const { @@ -2347,6 +3082,59 @@ SRSASN_CODE meas_gap_cfg_c::setup_s_::gap_offset_c_::unpack(cbit_ref& bref) return SRSASN_SUCCESS; } +// MeasRSS-DedicatedConfig-r16 ::= SEQUENCE +SRSASN_CODE meas_rss_ded_cfg_r16_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(rss_cfg_carrier_info_r16_present, 1)); + HANDLE_CODE(bref.pack(cells_to_add_mod_list_v1610_present, 1)); + + if (rss_cfg_carrier_info_r16_present) { + HANDLE_CODE(rss_cfg_carrier_info_r16.pack(bref)); + } + if (cells_to_add_mod_list_v1610_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, cells_to_add_mod_list_v1610, 1, 32)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE meas_rss_ded_cfg_r16_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(rss_cfg_carrier_info_r16_present, 1)); + HANDLE_CODE(bref.unpack(cells_to_add_mod_list_v1610_present, 1)); + + if (rss_cfg_carrier_info_r16_present) { + HANDLE_CODE(rss_cfg_carrier_info_r16.unpack(bref)); + } + if (cells_to_add_mod_list_v1610_present) { + HANDLE_CODE(unpack_dyn_seq_of(cells_to_add_mod_list_v1610, bref, 1, 32)); + } + + return SRSASN_SUCCESS; +} +void meas_rss_ded_cfg_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (rss_cfg_carrier_info_r16_present) { + j.write_fieldname("rss-ConfigCarrierInfo-r16"); + rss_cfg_carrier_info_r16.to_json(j); + } + if (cells_to_add_mod_list_v1610_present) { + j.start_array("cellsToAddModList-v1610"); + for (const auto& e1 : cells_to_add_mod_list_v1610) { + e1.to_json(j); + } + j.end_array(); + } + j.end_obj(); +} +bool meas_rss_ded_cfg_r16_s::operator==(const meas_rss_ded_cfg_r16_s& other) const +{ + return rss_cfg_carrier_info_r16_present == other.rss_cfg_carrier_info_r16_present and + (not rss_cfg_carrier_info_r16_present or rss_cfg_carrier_info_r16 == other.rss_cfg_carrier_info_r16) and + cells_to_add_mod_list_v1610_present == other.cells_to_add_mod_list_v1610_present and + (not cells_to_add_mod_list_v1610_present or cells_to_add_mod_list_v1610 == other.cells_to_add_mod_list_v1610); +} + // MeasRSSI-ReportConfig-r13 ::= SEQUENCE SRSASN_CODE meas_rssi_report_cfg_r13_s::pack(bit_ref& bref) const { @@ -2713,6 +3501,181 @@ uint8_t rmtc_cfg_r13_c::setup_s_::meas_dur_r13_opts::to_number() const return map_enum_number(options, 5, value, "rmtc_cfg_r13_c::setup_s_::meas_dur_r13_e_"); } +// RMTC-ConfigNR-r16 ::= SEQUENCE +SRSASN_CODE rmtc_cfg_nr_r16_s::pack(bit_ref& bref) const +{ + bref.pack(ext, 1); + HANDLE_CODE(bref.pack(rmtc_sf_offset_nr_r16_present, 1)); + + HANDLE_CODE(rmtc_periodicity_nr_r16.pack(bref)); + if (rmtc_sf_offset_nr_r16_present) { + HANDLE_CODE(pack_integer(bref, rmtc_sf_offset_nr_r16, (uint16_t)0u, (uint16_t)639u)); + } + HANDLE_CODE(meas_dur_nr_r16.pack(bref)); + HANDLE_CODE(pack_integer(bref, rmtc_freq_nr_r16, (uint32_t)0u, (uint32_t)3279165u)); + HANDLE_CODE(ref_scs_cp_nr_r16.pack(bref)); + + if (ext) { + ext_groups_packer_guard group_flags; + group_flags[0] |= rmtc_bw_nr_r17_present; + group_flags[0] |= meas_dur_nr_r17_present; + group_flags[0] |= ref_scs_cp_nr_r17_present; + group_flags.pack(bref); + + if (group_flags[0]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(rmtc_bw_nr_r17_present, 1)); + HANDLE_CODE(bref.pack(meas_dur_nr_r17_present, 1)); + HANDLE_CODE(bref.pack(ref_scs_cp_nr_r17_present, 1)); + if (rmtc_bw_nr_r17_present) { + HANDLE_CODE(rmtc_bw_nr_r17.pack(bref)); + } + if (meas_dur_nr_r17_present) { + HANDLE_CODE(meas_dur_nr_r17.pack(bref)); + } + if (ref_scs_cp_nr_r17_present) { + HANDLE_CODE(ref_scs_cp_nr_r17.pack(bref)); + } + } + } + return SRSASN_SUCCESS; +} +SRSASN_CODE rmtc_cfg_nr_r16_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(bref.unpack(rmtc_sf_offset_nr_r16_present, 1)); + + HANDLE_CODE(rmtc_periodicity_nr_r16.unpack(bref)); + if (rmtc_sf_offset_nr_r16_present) { + HANDLE_CODE(unpack_integer(rmtc_sf_offset_nr_r16, bref, (uint16_t)0u, (uint16_t)639u)); + } + HANDLE_CODE(meas_dur_nr_r16.unpack(bref)); + HANDLE_CODE(unpack_integer(rmtc_freq_nr_r16, bref, (uint32_t)0u, (uint32_t)3279165u)); + HANDLE_CODE(ref_scs_cp_nr_r16.unpack(bref)); + + if (ext) { + ext_groups_unpacker_guard group_flags(1); + group_flags.unpack(bref); + + if (group_flags[0]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.unpack(rmtc_bw_nr_r17_present, 1)); + HANDLE_CODE(bref.unpack(meas_dur_nr_r17_present, 1)); + HANDLE_CODE(bref.unpack(ref_scs_cp_nr_r17_present, 1)); + if (rmtc_bw_nr_r17_present) { + HANDLE_CODE(rmtc_bw_nr_r17.unpack(bref)); + } + if (meas_dur_nr_r17_present) { + HANDLE_CODE(meas_dur_nr_r17.unpack(bref)); + } + if (ref_scs_cp_nr_r17_present) { + HANDLE_CODE(ref_scs_cp_nr_r17.unpack(bref)); + } + } + } + return SRSASN_SUCCESS; +} +void rmtc_cfg_nr_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_str("rmtc-PeriodicityNR-r16", rmtc_periodicity_nr_r16.to_string()); + if (rmtc_sf_offset_nr_r16_present) { + j.write_int("rmtc-SubframeOffsetNR-r16", rmtc_sf_offset_nr_r16); + } + j.write_str("measDurationNR-r16", meas_dur_nr_r16.to_string()); + j.write_int("rmtc-FrequencyNR-r16", rmtc_freq_nr_r16); + j.write_str("refSCS-CP-NR-r16", ref_scs_cp_nr_r16.to_string()); + if (ext) { + if (rmtc_bw_nr_r17_present) { + j.write_str("rmtc-BandwidthNR-r17", rmtc_bw_nr_r17.to_string()); + } + if (meas_dur_nr_r17_present) { + j.write_str("measDurationNR-r17", meas_dur_nr_r17.to_string()); + } + if (ref_scs_cp_nr_r17_present) { + j.write_str("refSCS-CP-NR-r17", ref_scs_cp_nr_r17.to_string()); + } + } + j.end_obj(); +} +bool rmtc_cfg_nr_r16_s::operator==(const rmtc_cfg_nr_r16_s& other) const +{ + return ext == other.ext and rmtc_periodicity_nr_r16 == other.rmtc_periodicity_nr_r16 and + rmtc_sf_offset_nr_r16_present == other.rmtc_sf_offset_nr_r16_present and + (not rmtc_sf_offset_nr_r16_present or rmtc_sf_offset_nr_r16 == other.rmtc_sf_offset_nr_r16) and + meas_dur_nr_r16 == other.meas_dur_nr_r16 and rmtc_freq_nr_r16 == other.rmtc_freq_nr_r16 and + ref_scs_cp_nr_r16 == other.ref_scs_cp_nr_r16 and + (not ext or (rmtc_bw_nr_r17_present == other.rmtc_bw_nr_r17_present and + (not rmtc_bw_nr_r17_present or rmtc_bw_nr_r17 == other.rmtc_bw_nr_r17) and + meas_dur_nr_r17_present == other.meas_dur_nr_r17_present and + (not meas_dur_nr_r17_present or meas_dur_nr_r17 == other.meas_dur_nr_r17) and + ref_scs_cp_nr_r17_present == other.ref_scs_cp_nr_r17_present and + (not ref_scs_cp_nr_r17_present or ref_scs_cp_nr_r17 == other.ref_scs_cp_nr_r17))); +} + +const char* rmtc_cfg_nr_r16_s::rmtc_periodicity_nr_r16_opts::to_string() const +{ + static const char* options[] = {"ms40", "ms80", "ms160", "ms320", "ms640"}; + return convert_enum_idx(options, 5, value, "rmtc_cfg_nr_r16_s::rmtc_periodicity_nr_r16_e_"); +} +uint16_t rmtc_cfg_nr_r16_s::rmtc_periodicity_nr_r16_opts::to_number() const +{ + static const uint16_t options[] = {40, 80, 160, 320, 640}; + return map_enum_number(options, 5, value, "rmtc_cfg_nr_r16_s::rmtc_periodicity_nr_r16_e_"); +} + +const char* rmtc_cfg_nr_r16_s::meas_dur_nr_r16_opts::to_string() const +{ + static const char* options[] = {"sym1", "sym14or12", "sym28or24", "sym42or36", "sym70or60"}; + return convert_enum_idx(options, 5, value, "rmtc_cfg_nr_r16_s::meas_dur_nr_r16_e_"); +} +uint8_t rmtc_cfg_nr_r16_s::meas_dur_nr_r16_opts::to_number() const +{ + static const uint8_t options[] = {1, 14, 28, 42, 70}; + return map_enum_number(options, 5, value, "rmtc_cfg_nr_r16_s::meas_dur_nr_r16_e_"); +} + +const char* rmtc_cfg_nr_r16_s::ref_scs_cp_nr_r16_opts::to_string() const +{ + static const char* options[] = {"kHz15", "kHz30", "kHz60-NCP", "kHz60-ECP"}; + return convert_enum_idx(options, 4, value, "rmtc_cfg_nr_r16_s::ref_scs_cp_nr_r16_e_"); +} + +const char* rmtc_cfg_nr_r16_s::rmtc_bw_nr_r17_opts::to_string() const +{ + static const char* options[] = {"mhz100", "mhz400", "mhz800", "mhz1600", "mhz2000"}; + return convert_enum_idx(options, 5, value, "rmtc_cfg_nr_r16_s::rmtc_bw_nr_r17_e_"); +} +uint16_t rmtc_cfg_nr_r16_s::rmtc_bw_nr_r17_opts::to_number() const +{ + static const uint16_t options[] = {100, 400, 800, 1600, 2000}; + return map_enum_number(options, 5, value, "rmtc_cfg_nr_r16_s::rmtc_bw_nr_r17_e_"); +} + +const char* rmtc_cfg_nr_r16_s::meas_dur_nr_r17_opts::to_string() const +{ + static const char* options[] = {"sym140", "sym560", "sym1120"}; + return convert_enum_idx(options, 3, value, "rmtc_cfg_nr_r16_s::meas_dur_nr_r17_e_"); +} +uint16_t rmtc_cfg_nr_r16_s::meas_dur_nr_r17_opts::to_number() const +{ + static const uint16_t options[] = {140, 560, 1120}; + return map_enum_number(options, 3, value, "rmtc_cfg_nr_r16_s::meas_dur_nr_r17_e_"); +} + +const char* rmtc_cfg_nr_r16_s::ref_scs_cp_nr_r17_opts::to_string() const +{ + static const char* options[] = {"kHz120", "kHz480", "kHz960"}; + return convert_enum_idx(options, 3, value, "rmtc_cfg_nr_r16_s::ref_scs_cp_nr_r17_e_"); +} +uint16_t rmtc_cfg_nr_r16_s::ref_scs_cp_nr_r17_opts::to_number() const +{ + static const uint16_t options[] = {120, 480, 960}; + return map_enum_number(options, 3, value, "rmtc_cfg_nr_r16_s::ref_scs_cp_nr_r17_e_"); +} + // RS-ConfigSSB-NR-r15 ::= SEQUENCE SRSASN_CODE rs_cfg_ssb_nr_r15_s::pack(bit_ref& bref) const { @@ -2723,6 +3686,13 @@ SRSASN_CODE rs_cfg_ssb_nr_r15_s::pack(bit_ref& bref) const if (ext) { ext_groups_packer_guard group_flags; group_flags[0] |= ssb_to_measure_r15.is_present(); + group_flags[1] |= ssb_position_qcl_common_nr_r16_present; + group_flags[1] |= ssb_position_qcl_cells_to_add_mod_list_nr_r16.is_present(); + group_flags[1] |= ssb_position_qcl_cells_to_rem_list_nr_r16.is_present(); + group_flags[2] |= subcarrier_spacing_ssb_r17_present; + group_flags[2] |= ssb_position_qcl_common_nr_r17_present; + group_flags[2] |= ssb_position_qcl_cells_to_add_mod_list_nr_r17.is_present(); + group_flags[2] |= ssb_position_qcl_cells_to_rem_list_nr_r17.is_present(); group_flags.pack(bref); if (group_flags[0]) { @@ -2733,6 +3703,44 @@ SRSASN_CODE rs_cfg_ssb_nr_r15_s::pack(bit_ref& bref) const HANDLE_CODE(ssb_to_measure_r15->pack(bref)); } } + if (group_flags[1]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(ssb_position_qcl_common_nr_r16_present, 1)); + HANDLE_CODE(bref.pack(ssb_position_qcl_cells_to_add_mod_list_nr_r16.is_present(), 1)); + HANDLE_CODE(bref.pack(ssb_position_qcl_cells_to_rem_list_nr_r16.is_present(), 1)); + if (ssb_position_qcl_common_nr_r16_present) { + HANDLE_CODE(ssb_position_qcl_common_nr_r16.pack(bref)); + } + if (ssb_position_qcl_cells_to_add_mod_list_nr_r16.is_present()) { + HANDLE_CODE(pack_dyn_seq_of(bref, *ssb_position_qcl_cells_to_add_mod_list_nr_r16, 1, 32)); + } + if (ssb_position_qcl_cells_to_rem_list_nr_r16.is_present()) { + HANDLE_CODE(pack_dyn_seq_of( + bref, *ssb_position_qcl_cells_to_rem_list_nr_r16, 1, 32, integer_packer<uint16_t>(0, 1007))); + } + } + if (group_flags[2]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(subcarrier_spacing_ssb_r17_present, 1)); + HANDLE_CODE(bref.pack(ssb_position_qcl_common_nr_r17_present, 1)); + HANDLE_CODE(bref.pack(ssb_position_qcl_cells_to_add_mod_list_nr_r17.is_present(), 1)); + HANDLE_CODE(bref.pack(ssb_position_qcl_cells_to_rem_list_nr_r17.is_present(), 1)); + if (subcarrier_spacing_ssb_r17_present) { + HANDLE_CODE(subcarrier_spacing_ssb_r17.pack(bref)); + } + if (ssb_position_qcl_common_nr_r17_present) { + HANDLE_CODE(ssb_position_qcl_common_nr_r17.pack(bref)); + } + if (ssb_position_qcl_cells_to_add_mod_list_nr_r17.is_present()) { + HANDLE_CODE(pack_dyn_seq_of(bref, *ssb_position_qcl_cells_to_add_mod_list_nr_r17, 1, 32)); + } + if (ssb_position_qcl_cells_to_rem_list_nr_r17.is_present()) { + HANDLE_CODE(pack_dyn_seq_of( + bref, *ssb_position_qcl_cells_to_rem_list_nr_r17, 1, 32, integer_packer<uint16_t>(0, 1007))); + } + } } return SRSASN_SUCCESS; } @@ -2743,7 +3751,7 @@ SRSASN_CODE rs_cfg_ssb_nr_r15_s::unpack(cbit_ref& bref) HANDLE_CODE(subcarrier_spacing_ssb_r15.unpack(bref)); if (ext) { - ext_groups_unpacker_guard group_flags(1); + ext_groups_unpacker_guard group_flags(3); group_flags.unpack(bref); if (group_flags[0]) { @@ -2756,6 +3764,52 @@ SRSASN_CODE rs_cfg_ssb_nr_r15_s::unpack(cbit_ref& bref) HANDLE_CODE(ssb_to_measure_r15->unpack(bref)); } } + if (group_flags[1]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.unpack(ssb_position_qcl_common_nr_r16_present, 1)); + bool ssb_position_qcl_cells_to_add_mod_list_nr_r16_present; + HANDLE_CODE(bref.unpack(ssb_position_qcl_cells_to_add_mod_list_nr_r16_present, 1)); + ssb_position_qcl_cells_to_add_mod_list_nr_r16.set_present(ssb_position_qcl_cells_to_add_mod_list_nr_r16_present); + bool ssb_position_qcl_cells_to_rem_list_nr_r16_present; + HANDLE_CODE(bref.unpack(ssb_position_qcl_cells_to_rem_list_nr_r16_present, 1)); + ssb_position_qcl_cells_to_rem_list_nr_r16.set_present(ssb_position_qcl_cells_to_rem_list_nr_r16_present); + if (ssb_position_qcl_common_nr_r16_present) { + HANDLE_CODE(ssb_position_qcl_common_nr_r16.unpack(bref)); + } + if (ssb_position_qcl_cells_to_add_mod_list_nr_r16.is_present()) { + HANDLE_CODE(unpack_dyn_seq_of(*ssb_position_qcl_cells_to_add_mod_list_nr_r16, bref, 1, 32)); + } + if (ssb_position_qcl_cells_to_rem_list_nr_r16.is_present()) { + HANDLE_CODE(unpack_dyn_seq_of( + *ssb_position_qcl_cells_to_rem_list_nr_r16, bref, 1, 32, integer_packer<uint16_t>(0, 1007))); + } + } + if (group_flags[2]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.unpack(subcarrier_spacing_ssb_r17_present, 1)); + HANDLE_CODE(bref.unpack(ssb_position_qcl_common_nr_r17_present, 1)); + bool ssb_position_qcl_cells_to_add_mod_list_nr_r17_present; + HANDLE_CODE(bref.unpack(ssb_position_qcl_cells_to_add_mod_list_nr_r17_present, 1)); + ssb_position_qcl_cells_to_add_mod_list_nr_r17.set_present(ssb_position_qcl_cells_to_add_mod_list_nr_r17_present); + bool ssb_position_qcl_cells_to_rem_list_nr_r17_present; + HANDLE_CODE(bref.unpack(ssb_position_qcl_cells_to_rem_list_nr_r17_present, 1)); + ssb_position_qcl_cells_to_rem_list_nr_r17.set_present(ssb_position_qcl_cells_to_rem_list_nr_r17_present); + if (subcarrier_spacing_ssb_r17_present) { + HANDLE_CODE(subcarrier_spacing_ssb_r17.unpack(bref)); + } + if (ssb_position_qcl_common_nr_r17_present) { + HANDLE_CODE(ssb_position_qcl_common_nr_r17.unpack(bref)); + } + if (ssb_position_qcl_cells_to_add_mod_list_nr_r17.is_present()) { + HANDLE_CODE(unpack_dyn_seq_of(*ssb_position_qcl_cells_to_add_mod_list_nr_r17, bref, 1, 32)); + } + if (ssb_position_qcl_cells_to_rem_list_nr_r17.is_present()) { + HANDLE_CODE(unpack_dyn_seq_of( + *ssb_position_qcl_cells_to_rem_list_nr_r17, bref, 1, 32, integer_packer<uint16_t>(0, 1007))); + } + } } return SRSASN_SUCCESS; } @@ -2770,6 +3824,43 @@ void rs_cfg_ssb_nr_r15_s::to_json(json_writer& j) const j.write_fieldname("ssb-ToMeasure-r15"); ssb_to_measure_r15->to_json(j); } + if (ssb_position_qcl_common_nr_r16_present) { + j.write_str("ssb-PositionQCL-CommonNR-r16", ssb_position_qcl_common_nr_r16.to_string()); + } + if (ssb_position_qcl_cells_to_add_mod_list_nr_r16.is_present()) { + j.start_array("ssb-PositionQCL-CellsToAddModListNR-r16"); + for (const auto& e1 : *ssb_position_qcl_cells_to_add_mod_list_nr_r16) { + e1.to_json(j); + } + j.end_array(); + } + if (ssb_position_qcl_cells_to_rem_list_nr_r16.is_present()) { + j.start_array("ssb-PositionQCL-CellsToRemoveListNR-r16"); + for (const auto& e1 : *ssb_position_qcl_cells_to_rem_list_nr_r16) { + j.write_int(e1); + } + j.end_array(); + } + if (subcarrier_spacing_ssb_r17_present) { + j.write_str("subcarrierSpacingSSB-r17", subcarrier_spacing_ssb_r17.to_string()); + } + if (ssb_position_qcl_common_nr_r17_present) { + j.write_str("ssb-PositionQCL-CommonNR-r17", ssb_position_qcl_common_nr_r17.to_string()); + } + if (ssb_position_qcl_cells_to_add_mod_list_nr_r17.is_present()) { + j.start_array("ssb-PositionQCL-CellsToAddModListNR-r17"); + for (const auto& e1 : *ssb_position_qcl_cells_to_add_mod_list_nr_r17) { + e1.to_json(j); + } + j.end_array(); + } + if (ssb_position_qcl_cells_to_rem_list_nr_r17.is_present()) { + j.start_array("ssb-PositionQCL-CellsToRemoveListNR-r17"); + for (const auto& e1 : *ssb_position_qcl_cells_to_rem_list_nr_r17) { + j.write_int(e1); + } + j.end_array(); + } } j.end_obj(); } @@ -2777,8 +3868,34 @@ bool rs_cfg_ssb_nr_r15_s::operator==(const rs_cfg_ssb_nr_r15_s& other) const { return ext == other.ext and meas_timing_cfg_r15 == other.meas_timing_cfg_r15 and subcarrier_spacing_ssb_r15 == other.subcarrier_spacing_ssb_r15 and - (not ext or (ssb_to_measure_r15.is_present() == other.ssb_to_measure_r15.is_present() and - (not ssb_to_measure_r15.is_present() or *ssb_to_measure_r15 == *other.ssb_to_measure_r15))); + (not ext or + (ssb_to_measure_r15.is_present() == other.ssb_to_measure_r15.is_present() and + (not ssb_to_measure_r15.is_present() or *ssb_to_measure_r15 == *other.ssb_to_measure_r15) and + ssb_position_qcl_common_nr_r16_present == other.ssb_position_qcl_common_nr_r16_present and + (not ssb_position_qcl_common_nr_r16_present or + ssb_position_qcl_common_nr_r16 == other.ssb_position_qcl_common_nr_r16) and + ssb_position_qcl_cells_to_add_mod_list_nr_r16.is_present() == + other.ssb_position_qcl_cells_to_add_mod_list_nr_r16.is_present() and + (not ssb_position_qcl_cells_to_add_mod_list_nr_r16.is_present() or + *ssb_position_qcl_cells_to_add_mod_list_nr_r16 == *other.ssb_position_qcl_cells_to_add_mod_list_nr_r16) and + ssb_position_qcl_cells_to_rem_list_nr_r16.is_present() == + other.ssb_position_qcl_cells_to_rem_list_nr_r16.is_present() and + (not ssb_position_qcl_cells_to_rem_list_nr_r16.is_present() or + *ssb_position_qcl_cells_to_rem_list_nr_r16 == *other.ssb_position_qcl_cells_to_rem_list_nr_r16) and + subcarrier_spacing_ssb_r17_present == other.subcarrier_spacing_ssb_r17_present and + (not subcarrier_spacing_ssb_r17_present or + subcarrier_spacing_ssb_r17 == other.subcarrier_spacing_ssb_r17) and + ssb_position_qcl_common_nr_r17_present == other.ssb_position_qcl_common_nr_r17_present and + (not ssb_position_qcl_common_nr_r17_present or + ssb_position_qcl_common_nr_r17 == other.ssb_position_qcl_common_nr_r17) and + ssb_position_qcl_cells_to_add_mod_list_nr_r17.is_present() == + other.ssb_position_qcl_cells_to_add_mod_list_nr_r17.is_present() and + (not ssb_position_qcl_cells_to_add_mod_list_nr_r17.is_present() or + *ssb_position_qcl_cells_to_add_mod_list_nr_r17 == *other.ssb_position_qcl_cells_to_add_mod_list_nr_r17) and + ssb_position_qcl_cells_to_rem_list_nr_r17.is_present() == + other.ssb_position_qcl_cells_to_rem_list_nr_r17.is_present() and + (not ssb_position_qcl_cells_to_rem_list_nr_r17.is_present() or + *ssb_position_qcl_cells_to_rem_list_nr_r17 == *other.ssb_position_qcl_cells_to_rem_list_nr_r17))); } const char* rs_cfg_ssb_nr_r15_s::subcarrier_spacing_ssb_r15_opts::to_string() const @@ -2857,6 +3974,17 @@ bool rs_cfg_ssb_nr_r15_s::ssb_to_measure_r15_c_::operator==(const ssb_to_measure return type() == other.type() and c == other.c; } +const char* rs_cfg_ssb_nr_r15_s::subcarrier_spacing_ssb_r17_opts::to_string() const +{ + static const char* options[] = {"kHz480", "kHz960"}; + return convert_enum_idx(options, 2, value, "rs_cfg_ssb_nr_r15_s::subcarrier_spacing_ssb_r17_e_"); +} +uint16_t rs_cfg_ssb_nr_r15_s::subcarrier_spacing_ssb_r17_opts::to_number() const +{ + static const uint16_t options[] = {480, 960}; + return map_enum_number(options, 2, value, "rs_cfg_ssb_nr_r15_s::subcarrier_spacing_ssb_r17_e_"); +} + // RSRQ-RangeConfig-r12 ::= CHOICE void rsrq_range_cfg_r12_c::set(types::options e) { @@ -3044,266 +4172,6 @@ bool report_quant_wlan_r13_s::operator==(const report_quant_wlan_r13_s& other) c station_count_request_wlan_r13_present == other.station_count_request_wlan_r13_present; } -// ThresholdEUTRA ::= CHOICE -void thres_eutra_c::destroy_() {} -void thres_eutra_c::set(types::options e) -{ - destroy_(); - type_ = e; -} -thres_eutra_c::thres_eutra_c(const thres_eutra_c& other) -{ - type_ = other.type(); - switch (type_) { - case types::thres_rsrp: - c.init(other.c.get<uint8_t>()); - break; - case types::thres_rsrq: - c.init(other.c.get<uint8_t>()); - break; - case types::nulltype: - break; - default: - log_invalid_choice_id(type_, "thres_eutra_c"); - } -} -thres_eutra_c& thres_eutra_c::operator=(const thres_eutra_c& other) -{ - if (this == &other) { - return *this; - } - set(other.type()); - switch (type_) { - case types::thres_rsrp: - c.set(other.c.get<uint8_t>()); - break; - case types::thres_rsrq: - c.set(other.c.get<uint8_t>()); - break; - case types::nulltype: - break; - default: - log_invalid_choice_id(type_, "thres_eutra_c"); - } - - return *this; -} -uint8_t& thres_eutra_c::set_thres_rsrp() -{ - set(types::thres_rsrp); - return c.get<uint8_t>(); -} -uint8_t& thres_eutra_c::set_thres_rsrq() -{ - set(types::thres_rsrq); - return c.get<uint8_t>(); -} -void thres_eutra_c::to_json(json_writer& j) const -{ - j.start_obj(); - switch (type_) { - case types::thres_rsrp: - j.write_int("threshold-RSRP", c.get<uint8_t>()); - break; - case types::thres_rsrq: - j.write_int("threshold-RSRQ", c.get<uint8_t>()); - break; - default: - log_invalid_choice_id(type_, "thres_eutra_c"); - } - j.end_obj(); -} -SRSASN_CODE thres_eutra_c::pack(bit_ref& bref) const -{ - type_.pack(bref); - switch (type_) { - case types::thres_rsrp: - HANDLE_CODE(pack_integer(bref, c.get<uint8_t>(), (uint8_t)0u, (uint8_t)97u)); - break; - case types::thres_rsrq: - HANDLE_CODE(pack_integer(bref, c.get<uint8_t>(), (uint8_t)0u, (uint8_t)34u)); - break; - default: - log_invalid_choice_id(type_, "thres_eutra_c"); - return SRSASN_ERROR_ENCODE_FAIL; - } - return SRSASN_SUCCESS; -} -SRSASN_CODE thres_eutra_c::unpack(cbit_ref& bref) -{ - types e; - e.unpack(bref); - set(e); - switch (type_) { - case types::thres_rsrp: - HANDLE_CODE(unpack_integer(c.get<uint8_t>(), bref, (uint8_t)0u, (uint8_t)97u)); - break; - case types::thres_rsrq: - HANDLE_CODE(unpack_integer(c.get<uint8_t>(), bref, (uint8_t)0u, (uint8_t)34u)); - break; - default: - log_invalid_choice_id(type_, "thres_eutra_c"); - return SRSASN_ERROR_DECODE_FAIL; - } - return SRSASN_SUCCESS; -} -bool thres_eutra_c::operator==(const thres_eutra_c& other) const -{ - if (type_ != other.type_) { - return false; - } - switch (type_) { - case types::thres_rsrp: - return c.get<uint8_t>() == other.c.get<uint8_t>(); - case types::thres_rsrq: - return c.get<uint8_t>() == other.c.get<uint8_t>(); - default: - return true; - } - return true; -} - -// ThresholdNR-r15 ::= CHOICE -void thres_nr_r15_c::destroy_() {} -void thres_nr_r15_c::set(types::options e) -{ - destroy_(); - type_ = e; -} -thres_nr_r15_c::thres_nr_r15_c(const thres_nr_r15_c& other) -{ - type_ = other.type(); - switch (type_) { - case types::nr_rsrp_r15: - c.init(other.c.get<uint8_t>()); - break; - case types::nr_rsrq_r15: - c.init(other.c.get<uint8_t>()); - break; - case types::nr_sinr_r15: - c.init(other.c.get<uint8_t>()); - break; - case types::nulltype: - break; - default: - log_invalid_choice_id(type_, "thres_nr_r15_c"); - } -} -thres_nr_r15_c& thres_nr_r15_c::operator=(const thres_nr_r15_c& other) -{ - if (this == &other) { - return *this; - } - set(other.type()); - switch (type_) { - case types::nr_rsrp_r15: - c.set(other.c.get<uint8_t>()); - break; - case types::nr_rsrq_r15: - c.set(other.c.get<uint8_t>()); - break; - case types::nr_sinr_r15: - c.set(other.c.get<uint8_t>()); - break; - case types::nulltype: - break; - default: - log_invalid_choice_id(type_, "thres_nr_r15_c"); - } - - return *this; -} -uint8_t& thres_nr_r15_c::set_nr_rsrp_r15() -{ - set(types::nr_rsrp_r15); - return c.get<uint8_t>(); -} -uint8_t& thres_nr_r15_c::set_nr_rsrq_r15() -{ - set(types::nr_rsrq_r15); - return c.get<uint8_t>(); -} -uint8_t& thres_nr_r15_c::set_nr_sinr_r15() -{ - set(types::nr_sinr_r15); - return c.get<uint8_t>(); -} -void thres_nr_r15_c::to_json(json_writer& j) const -{ - j.start_obj(); - switch (type_) { - case types::nr_rsrp_r15: - j.write_int("nr-RSRP-r15", c.get<uint8_t>()); - break; - case types::nr_rsrq_r15: - j.write_int("nr-RSRQ-r15", c.get<uint8_t>()); - break; - case types::nr_sinr_r15: - j.write_int("nr-SINR-r15", c.get<uint8_t>()); - break; - default: - log_invalid_choice_id(type_, "thres_nr_r15_c"); - } - j.end_obj(); -} -SRSASN_CODE thres_nr_r15_c::pack(bit_ref& bref) const -{ - type_.pack(bref); - switch (type_) { - case types::nr_rsrp_r15: - HANDLE_CODE(pack_integer(bref, c.get<uint8_t>(), (uint8_t)0u, (uint8_t)127u)); - break; - case types::nr_rsrq_r15: - HANDLE_CODE(pack_integer(bref, c.get<uint8_t>(), (uint8_t)0u, (uint8_t)127u)); - break; - case types::nr_sinr_r15: - HANDLE_CODE(pack_integer(bref, c.get<uint8_t>(), (uint8_t)0u, (uint8_t)127u)); - break; - default: - log_invalid_choice_id(type_, "thres_nr_r15_c"); - return SRSASN_ERROR_ENCODE_FAIL; - } - return SRSASN_SUCCESS; -} -SRSASN_CODE thres_nr_r15_c::unpack(cbit_ref& bref) -{ - types e; - e.unpack(bref); - set(e); - switch (type_) { - case types::nr_rsrp_r15: - HANDLE_CODE(unpack_integer(c.get<uint8_t>(), bref, (uint8_t)0u, (uint8_t)127u)); - break; - case types::nr_rsrq_r15: - HANDLE_CODE(unpack_integer(c.get<uint8_t>(), bref, (uint8_t)0u, (uint8_t)127u)); - break; - case types::nr_sinr_r15: - HANDLE_CODE(unpack_integer(c.get<uint8_t>(), bref, (uint8_t)0u, (uint8_t)127u)); - break; - default: - log_invalid_choice_id(type_, "thres_nr_r15_c"); - return SRSASN_ERROR_DECODE_FAIL; - } - return SRSASN_SUCCESS; -} -bool thres_nr_r15_c::operator==(const thres_nr_r15_c& other) const -{ - if (type_ != other.type_) { - return false; - } - switch (type_) { - case types::nr_rsrp_r15: - return c.get<uint8_t>() == other.c.get<uint8_t>(); - case types::nr_rsrq_r15: - return c.get<uint8_t>() == other.c.get<uint8_t>(); - case types::nr_sinr_r15: - return c.get<uint8_t>() == other.c.get<uint8_t>(); - default: - return true; - } - return true; -} - // ThresholdUTRA ::= CHOICE void thres_utra_c::destroy_() {} void thres_utra_c::set(types::options e) @@ -3423,33 +4291,6 @@ bool thres_utra_c::operator==(const thres_utra_c& other) const return true; } -// TimeToTrigger ::= ENUMERATED -const char* time_to_trigger_opts::to_string() const -{ - static const char* options[] = {"ms0", - "ms40", - "ms64", - "ms80", - "ms100", - "ms128", - "ms160", - "ms256", - "ms320", - "ms480", - "ms512", - "ms640", - "ms1024", - "ms1280", - "ms2560", - "ms5120"}; - return convert_enum_idx(options, 16, value, "time_to_trigger_e"); -} -uint16_t time_to_trigger_opts::to_number() const -{ - static const uint16_t options[] = {0, 40, 64, 80, 100, 128, 160, 256, 320, 480, 512, 640, 1024, 1280, 2560, 5120}; - return map_enum_number(options, 16, value, "time_to_trigger_e"); -} - // UL-DelayConfig-r13 ::= CHOICE void ul_delay_cfg_r13_c::set(types::options e) { @@ -3544,6 +4385,78 @@ uint16_t ul_delay_cfg_r13_c::setup_s_::delay_thres_r13_opts::to_number() const return map_enum_number(options, 12, value, "ul_delay_cfg_r13_c::setup_s_::delay_thres_r13_e_"); } +// UL-DelayValueConfig-r16 ::= CHOICE +void ul_delay_value_cfg_r16_c::set(types::options e) +{ + type_ = e; +} +void ul_delay_value_cfg_r16_c::set_release() +{ + set(types::release); +} +ul_delay_value_cfg_r16_c::setup_s_& ul_delay_value_cfg_r16_c::set_setup() +{ + set(types::setup); + return c; +} +void ul_delay_value_cfg_r16_c::to_json(json_writer& j) const +{ + j.start_obj(); + switch (type_) { + case types::release: + break; + case types::setup: + j.write_fieldname("setup"); + j.start_obj(); + j.start_array("delay-DRBlist-r16"); + for (const auto& e1 : c.delay_dr_blist_r16) { + j.write_int(e1); + } + j.end_array(); + j.end_obj(); + break; + default: + log_invalid_choice_id(type_, "ul_delay_value_cfg_r16_c"); + } + j.end_obj(); +} +SRSASN_CODE ul_delay_value_cfg_r16_c::pack(bit_ref& bref) const +{ + type_.pack(bref); + switch (type_) { + case types::release: + break; + case types::setup: + HANDLE_CODE(pack_dyn_seq_of(bref, c.delay_dr_blist_r16, 1, 11, integer_packer<uint8_t>(1, 32))); + break; + default: + log_invalid_choice_id(type_, "ul_delay_value_cfg_r16_c"); + return SRSASN_ERROR_ENCODE_FAIL; + } + return SRSASN_SUCCESS; +} +SRSASN_CODE ul_delay_value_cfg_r16_c::unpack(cbit_ref& bref) +{ + types e; + e.unpack(bref); + set(e); + switch (type_) { + case types::release: + break; + case types::setup: + HANDLE_CODE(unpack_dyn_seq_of(c.delay_dr_blist_r16, bref, 1, 11, integer_packer<uint8_t>(1, 32))); + break; + default: + log_invalid_choice_id(type_, "ul_delay_value_cfg_r16_c"); + return SRSASN_ERROR_DECODE_FAIL; + } + return SRSASN_SUCCESS; +} +bool ul_delay_value_cfg_r16_c::operator==(const ul_delay_value_cfg_r16_c& other) const +{ + return type() == other.type() and c.delay_dr_blist_r16 == other.c.delay_dr_blist_r16; +} + // WLAN-CarrierInfo-r13 ::= SEQUENCE SRSASN_CODE wlan_carrier_info_r13_s::pack(bit_ref& bref) const { @@ -3823,8 +4736,8 @@ SRSASN_CODE meas_obj_eutra_s::pack(bit_ref& bref) const HANDLE_CODE(bref.pack(offset_freq_present, 1)); HANDLE_CODE(bref.pack(cells_to_rem_list_present, 1)); HANDLE_CODE(bref.pack(cells_to_add_mod_list_present, 1)); - HANDLE_CODE(bref.pack(black_cells_to_rem_list_present, 1)); - HANDLE_CODE(bref.pack(black_cells_to_add_mod_list_present, 1)); + HANDLE_CODE(bref.pack(excluded_cells_to_rem_list_present, 1)); + HANDLE_CODE(bref.pack(excluded_cells_to_add_mod_list_present, 1)); HANDLE_CODE(bref.pack(cell_for_which_to_report_cgi_present, 1)); HANDLE_CODE(pack_integer(bref, carrier_freq, (uint32_t)0u, (uint32_t)65535u)); @@ -3840,11 +4753,11 @@ SRSASN_CODE meas_obj_eutra_s::pack(bit_ref& bref) const if (cells_to_add_mod_list_present) { HANDLE_CODE(pack_dyn_seq_of(bref, cells_to_add_mod_list, 1, 32)); } - if (black_cells_to_rem_list_present) { - HANDLE_CODE(pack_dyn_seq_of(bref, black_cells_to_rem_list, 1, 32, integer_packer<uint8_t>(1, 32))); + if (excluded_cells_to_rem_list_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, excluded_cells_to_rem_list, 1, 32, integer_packer<uint8_t>(1, 32))); } - if (black_cells_to_add_mod_list_present) { - HANDLE_CODE(pack_dyn_seq_of(bref, black_cells_to_add_mod_list, 1, 32)); + if (excluded_cells_to_add_mod_list_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, excluded_cells_to_add_mod_list, 1, 32)); } if (cell_for_which_to_report_cgi_present) { HANDLE_CODE(pack_integer(bref, cell_for_which_to_report_cgi, (uint16_t)0u, (uint16_t)503u)); @@ -3860,14 +4773,15 @@ SRSASN_CODE meas_obj_eutra_s::pack(bit_ref& bref) const group_flags[2] |= t312_r12.is_present(); group_flags[2] |= reduced_meas_performance_r12_present; group_flags[2] |= meas_ds_cfg_r12.is_present(); - group_flags[3] |= white_cells_to_rem_list_r13.is_present(); - group_flags[3] |= white_cells_to_add_mod_list_r13.is_present(); + group_flags[3] |= allowed_cells_to_rem_list_r13.is_present(); + group_flags[3] |= allowed_cells_to_add_mod_list_r13.is_present(); group_flags[3] |= rmtc_cfg_r13.is_present(); group_flags[3] |= carrier_freq_r13_present; group_flags[4] |= tx_res_pool_to_rem_list_r14.is_present(); group_flags[4] |= tx_res_pool_to_add_list_r14.is_present(); group_flags[4] |= fembms_mixed_carrier_r14_present; group_flags[5] |= meas_sensing_cfg_r15.is_present(); + group_flags[6] |= meas_rss_ded_cfg_r16.is_present(); group_flags.pack(bref); if (group_flags[0]) { @@ -3917,15 +4831,15 @@ SRSASN_CODE meas_obj_eutra_s::pack(bit_ref& bref) const if (group_flags[3]) { varlength_field_pack_guard varlen_scope(bref, false); - HANDLE_CODE(bref.pack(white_cells_to_rem_list_r13.is_present(), 1)); - HANDLE_CODE(bref.pack(white_cells_to_add_mod_list_r13.is_present(), 1)); + HANDLE_CODE(bref.pack(allowed_cells_to_rem_list_r13.is_present(), 1)); + HANDLE_CODE(bref.pack(allowed_cells_to_add_mod_list_r13.is_present(), 1)); HANDLE_CODE(bref.pack(rmtc_cfg_r13.is_present(), 1)); HANDLE_CODE(bref.pack(carrier_freq_r13_present, 1)); - if (white_cells_to_rem_list_r13.is_present()) { - HANDLE_CODE(pack_dyn_seq_of(bref, *white_cells_to_rem_list_r13, 1, 32, integer_packer<uint8_t>(1, 32))); + if (allowed_cells_to_rem_list_r13.is_present()) { + HANDLE_CODE(pack_dyn_seq_of(bref, *allowed_cells_to_rem_list_r13, 1, 32, integer_packer<uint8_t>(1, 32))); } - if (white_cells_to_add_mod_list_r13.is_present()) { - HANDLE_CODE(pack_dyn_seq_of(bref, *white_cells_to_add_mod_list_r13, 1, 32)); + if (allowed_cells_to_add_mod_list_r13.is_present()) { + HANDLE_CODE(pack_dyn_seq_of(bref, *allowed_cells_to_add_mod_list_r13, 1, 32)); } if (rmtc_cfg_r13.is_present()) { HANDLE_CODE(rmtc_cfg_r13->pack(bref)); @@ -3958,6 +4872,14 @@ SRSASN_CODE meas_obj_eutra_s::pack(bit_ref& bref) const HANDLE_CODE(meas_sensing_cfg_r15->pack(bref)); } } + if (group_flags[6]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(meas_rss_ded_cfg_r16.is_present(), 1)); + if (meas_rss_ded_cfg_r16.is_present()) { + HANDLE_CODE(meas_rss_ded_cfg_r16->pack(bref)); + } + } } return SRSASN_SUCCESS; } @@ -3967,8 +4889,8 @@ SRSASN_CODE meas_obj_eutra_s::unpack(cbit_ref& bref) HANDLE_CODE(bref.unpack(offset_freq_present, 1)); HANDLE_CODE(bref.unpack(cells_to_rem_list_present, 1)); HANDLE_CODE(bref.unpack(cells_to_add_mod_list_present, 1)); - HANDLE_CODE(bref.unpack(black_cells_to_rem_list_present, 1)); - HANDLE_CODE(bref.unpack(black_cells_to_add_mod_list_present, 1)); + HANDLE_CODE(bref.unpack(excluded_cells_to_rem_list_present, 1)); + HANDLE_CODE(bref.unpack(excluded_cells_to_add_mod_list_present, 1)); HANDLE_CODE(bref.unpack(cell_for_which_to_report_cgi_present, 1)); HANDLE_CODE(unpack_integer(carrier_freq, bref, (uint32_t)0u, (uint32_t)65535u)); @@ -3984,18 +4906,18 @@ SRSASN_CODE meas_obj_eutra_s::unpack(cbit_ref& bref) if (cells_to_add_mod_list_present) { HANDLE_CODE(unpack_dyn_seq_of(cells_to_add_mod_list, bref, 1, 32)); } - if (black_cells_to_rem_list_present) { - HANDLE_CODE(unpack_dyn_seq_of(black_cells_to_rem_list, bref, 1, 32, integer_packer<uint8_t>(1, 32))); + if (excluded_cells_to_rem_list_present) { + HANDLE_CODE(unpack_dyn_seq_of(excluded_cells_to_rem_list, bref, 1, 32, integer_packer<uint8_t>(1, 32))); } - if (black_cells_to_add_mod_list_present) { - HANDLE_CODE(unpack_dyn_seq_of(black_cells_to_add_mod_list, bref, 1, 32)); + if (excluded_cells_to_add_mod_list_present) { + HANDLE_CODE(unpack_dyn_seq_of(excluded_cells_to_add_mod_list, bref, 1, 32)); } if (cell_for_which_to_report_cgi_present) { HANDLE_CODE(unpack_integer(cell_for_which_to_report_cgi, bref, (uint16_t)0u, (uint16_t)503u)); } if (ext) { - ext_groups_unpacker_guard group_flags(6); + ext_groups_unpacker_guard group_flags(7); group_flags.unpack(bref); if (group_flags[0]) { @@ -4055,21 +4977,21 @@ SRSASN_CODE meas_obj_eutra_s::unpack(cbit_ref& bref) if (group_flags[3]) { varlength_field_unpack_guard varlen_scope(bref, false); - bool white_cells_to_rem_list_r13_present; - HANDLE_CODE(bref.unpack(white_cells_to_rem_list_r13_present, 1)); - white_cells_to_rem_list_r13.set_present(white_cells_to_rem_list_r13_present); - bool white_cells_to_add_mod_list_r13_present; - HANDLE_CODE(bref.unpack(white_cells_to_add_mod_list_r13_present, 1)); - white_cells_to_add_mod_list_r13.set_present(white_cells_to_add_mod_list_r13_present); + bool allowed_cells_to_rem_list_r13_present; + HANDLE_CODE(bref.unpack(allowed_cells_to_rem_list_r13_present, 1)); + allowed_cells_to_rem_list_r13.set_present(allowed_cells_to_rem_list_r13_present); + bool allowed_cells_to_add_mod_list_r13_present; + HANDLE_CODE(bref.unpack(allowed_cells_to_add_mod_list_r13_present, 1)); + allowed_cells_to_add_mod_list_r13.set_present(allowed_cells_to_add_mod_list_r13_present); bool rmtc_cfg_r13_present; HANDLE_CODE(bref.unpack(rmtc_cfg_r13_present, 1)); rmtc_cfg_r13.set_present(rmtc_cfg_r13_present); HANDLE_CODE(bref.unpack(carrier_freq_r13_present, 1)); - if (white_cells_to_rem_list_r13.is_present()) { - HANDLE_CODE(unpack_dyn_seq_of(*white_cells_to_rem_list_r13, bref, 1, 32, integer_packer<uint8_t>(1, 32))); + if (allowed_cells_to_rem_list_r13.is_present()) { + HANDLE_CODE(unpack_dyn_seq_of(*allowed_cells_to_rem_list_r13, bref, 1, 32, integer_packer<uint8_t>(1, 32))); } - if (white_cells_to_add_mod_list_r13.is_present()) { - HANDLE_CODE(unpack_dyn_seq_of(*white_cells_to_add_mod_list_r13, bref, 1, 32)); + if (allowed_cells_to_add_mod_list_r13.is_present()) { + HANDLE_CODE(unpack_dyn_seq_of(*allowed_cells_to_add_mod_list_r13, bref, 1, 32)); } if (rmtc_cfg_r13.is_present()) { HANDLE_CODE(rmtc_cfg_r13->unpack(bref)); @@ -4108,6 +5030,16 @@ SRSASN_CODE meas_obj_eutra_s::unpack(cbit_ref& bref) HANDLE_CODE(meas_sensing_cfg_r15->unpack(bref)); } } + if (group_flags[6]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + bool meas_rss_ded_cfg_r16_present; + HANDLE_CODE(bref.unpack(meas_rss_ded_cfg_r16_present, 1)); + meas_rss_ded_cfg_r16.set_present(meas_rss_ded_cfg_r16_present); + if (meas_rss_ded_cfg_r16.is_present()) { + HANDLE_CODE(meas_rss_ded_cfg_r16->unpack(bref)); + } + } } return SRSASN_SUCCESS; } @@ -4135,16 +5067,16 @@ void meas_obj_eutra_s::to_json(json_writer& j) const } j.end_array(); } - if (black_cells_to_rem_list_present) { - j.start_array("blackCellsToRemoveList"); - for (const auto& e1 : black_cells_to_rem_list) { + if (excluded_cells_to_rem_list_present) { + j.start_array("excludedCellsToRemoveList"); + for (const auto& e1 : excluded_cells_to_rem_list) { j.write_int(e1); } j.end_array(); } - if (black_cells_to_add_mod_list_present) { - j.start_array("blackCellsToAddModList"); - for (const auto& e1 : black_cells_to_add_mod_list) { + if (excluded_cells_to_add_mod_list_present) { + j.start_array("excludedCellsToAddModList"); + for (const auto& e1 : excluded_cells_to_add_mod_list) { e1.to_json(j); } j.end_array(); @@ -4188,16 +5120,16 @@ void meas_obj_eutra_s::to_json(json_writer& j) const j.write_fieldname("measDS-Config-r12"); meas_ds_cfg_r12->to_json(j); } - if (white_cells_to_rem_list_r13.is_present()) { - j.start_array("whiteCellsToRemoveList-r13"); - for (const auto& e1 : *white_cells_to_rem_list_r13) { + if (allowed_cells_to_rem_list_r13.is_present()) { + j.start_array("allowedCellsToRemoveList-r13"); + for (const auto& e1 : *allowed_cells_to_rem_list_r13) { j.write_int(e1); } j.end_array(); } - if (white_cells_to_add_mod_list_r13.is_present()) { - j.start_array("whiteCellsToAddModList-r13"); - for (const auto& e1 : *white_cells_to_add_mod_list_r13) { + if (allowed_cells_to_add_mod_list_r13.is_present()) { + j.start_array("allowedCellsToAddModList-r13"); + for (const auto& e1 : *allowed_cells_to_add_mod_list_r13) { e1.to_json(j); } j.end_array(); @@ -4230,6 +5162,10 @@ void meas_obj_eutra_s::to_json(json_writer& j) const j.write_fieldname("measSensing-Config-r15"); meas_sensing_cfg_r15->to_json(j); } + if (meas_rss_ded_cfg_r16.is_present()) { + j.write_fieldname("measRSS-DedicatedConfig-r16"); + meas_rss_ded_cfg_r16->to_json(j); + } } j.end_obj(); } @@ -4243,11 +5179,11 @@ bool meas_obj_eutra_s::operator==(const meas_obj_eutra_s& other) const (not cells_to_rem_list_present or cells_to_rem_list == other.cells_to_rem_list) and cells_to_add_mod_list_present == other.cells_to_add_mod_list_present and (not cells_to_add_mod_list_present or cells_to_add_mod_list == other.cells_to_add_mod_list) and - black_cells_to_rem_list_present == other.black_cells_to_rem_list_present and - (not black_cells_to_rem_list_present or black_cells_to_rem_list == other.black_cells_to_rem_list) and - black_cells_to_add_mod_list_present == other.black_cells_to_add_mod_list_present and - (not black_cells_to_add_mod_list_present or - black_cells_to_add_mod_list == other.black_cells_to_add_mod_list) and + excluded_cells_to_rem_list_present == other.excluded_cells_to_rem_list_present and + (not excluded_cells_to_rem_list_present or excluded_cells_to_rem_list == other.excluded_cells_to_rem_list) and + excluded_cells_to_add_mod_list_present == other.excluded_cells_to_add_mod_list_present and + (not excluded_cells_to_add_mod_list_present or + excluded_cells_to_add_mod_list == other.excluded_cells_to_add_mod_list) and cell_for_which_to_report_cgi_present == other.cell_for_which_to_report_cgi_present and (not cell_for_which_to_report_cgi_present or cell_for_which_to_report_cgi == other.cell_for_which_to_report_cgi) and @@ -4272,12 +5208,12 @@ bool meas_obj_eutra_s::operator==(const meas_obj_eutra_s& other) const reduced_meas_performance_r12 == other.reduced_meas_performance_r12) and meas_ds_cfg_r12.is_present() == other.meas_ds_cfg_r12.is_present() and (not meas_ds_cfg_r12.is_present() or *meas_ds_cfg_r12 == *other.meas_ds_cfg_r12) and - white_cells_to_rem_list_r13.is_present() == other.white_cells_to_rem_list_r13.is_present() and - (not white_cells_to_rem_list_r13.is_present() or - *white_cells_to_rem_list_r13 == *other.white_cells_to_rem_list_r13) and - white_cells_to_add_mod_list_r13.is_present() == other.white_cells_to_add_mod_list_r13.is_present() and - (not white_cells_to_add_mod_list_r13.is_present() or - *white_cells_to_add_mod_list_r13 == *other.white_cells_to_add_mod_list_r13) and + allowed_cells_to_rem_list_r13.is_present() == other.allowed_cells_to_rem_list_r13.is_present() and + (not allowed_cells_to_rem_list_r13.is_present() or + *allowed_cells_to_rem_list_r13 == *other.allowed_cells_to_rem_list_r13) and + allowed_cells_to_add_mod_list_r13.is_present() == other.allowed_cells_to_add_mod_list_r13.is_present() and + (not allowed_cells_to_add_mod_list_r13.is_present() or + *allowed_cells_to_add_mod_list_r13 == *other.allowed_cells_to_add_mod_list_r13) and rmtc_cfg_r13.is_present() == other.rmtc_cfg_r13.is_present() and (not rmtc_cfg_r13.is_present() or *rmtc_cfg_r13 == *other.rmtc_cfg_r13) and carrier_freq_r13_present == other.carrier_freq_r13_present and @@ -4291,7 +5227,9 @@ bool meas_obj_eutra_s::operator==(const meas_obj_eutra_s& other) const fembms_mixed_carrier_r14_present == other.fembms_mixed_carrier_r14_present and (not fembms_mixed_carrier_r14_present or fembms_mixed_carrier_r14 == other.fembms_mixed_carrier_r14) and meas_sensing_cfg_r15.is_present() == other.meas_sensing_cfg_r15.is_present() and - (not meas_sensing_cfg_r15.is_present() or *meas_sensing_cfg_r15 == *other.meas_sensing_cfg_r15))); + (not meas_sensing_cfg_r15.is_present() or *meas_sensing_cfg_r15 == *other.meas_sensing_cfg_r15) and + meas_rss_ded_cfg_r16.is_present() == other.meas_rss_ded_cfg_r16.is_present() and + (not meas_rss_ded_cfg_r16.is_present() or *meas_rss_ded_cfg_r16 == *other.meas_rss_ded_cfg_r16))); } void meas_obj_eutra_s::t312_r12_c_::set(types::options e) @@ -4466,8 +5404,8 @@ SRSASN_CODE meas_obj_nr_r15_s::pack(bit_ref& bref) const HANDLE_CODE(bref.pack(thresh_rs_idx_r15_present, 1)); HANDLE_CODE(bref.pack(max_rs_idx_cell_qual_r15_present, 1)); HANDLE_CODE(bref.pack(offset_freq_r15_present, 1)); - HANDLE_CODE(bref.pack(black_cells_to_rem_list_r15_present, 1)); - HANDLE_CODE(bref.pack(black_cells_to_add_mod_list_r15_present, 1)); + HANDLE_CODE(bref.pack(excluded_cells_to_rem_list_r15_present, 1)); + HANDLE_CODE(bref.pack(excluded_cells_to_add_mod_list_r15_present, 1)); HANDLE_CODE(bref.pack(cells_for_which_to_report_sftd_r15_present, 1)); HANDLE_CODE(pack_integer(bref, carrier_freq_r15, (uint32_t)0u, (uint32_t)3279165u)); @@ -4481,11 +5419,11 @@ SRSASN_CODE meas_obj_nr_r15_s::pack(bit_ref& bref) const if (offset_freq_r15_present) { HANDLE_CODE(pack_integer(bref, offset_freq_r15, (int8_t)-15, (int8_t)15)); } - if (black_cells_to_rem_list_r15_present) { - HANDLE_CODE(pack_dyn_seq_of(bref, black_cells_to_rem_list_r15, 1, 32, integer_packer<uint8_t>(1, 32))); + if (excluded_cells_to_rem_list_r15_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, excluded_cells_to_rem_list_r15, 1, 32, integer_packer<uint8_t>(1, 32))); } - if (black_cells_to_add_mod_list_r15_present) { - HANDLE_CODE(pack_dyn_seq_of(bref, black_cells_to_add_mod_list_r15, 1, 32)); + if (excluded_cells_to_add_mod_list_r15_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, excluded_cells_to_add_mod_list_r15, 1, 32)); } HANDLE_CODE(pack_integer(bref, quant_cfg_set_r15, (uint8_t)1u, (uint8_t)2u)); if (cells_for_which_to_report_sftd_r15_present) { @@ -4498,6 +5436,9 @@ SRSASN_CODE meas_obj_nr_r15_s::pack(bit_ref& bref) const group_flags[0] |= derive_ssb_idx_from_cell_r15_present; group_flags[0] |= ss_rssi_meas_r15.is_present(); group_flags[0] |= band_nr_r15.is_present(); + group_flags[1] |= rmtc_cfg_nr_r16.is_present(); + group_flags[2] |= cells_to_rem_list_r16.is_present(); + group_flags[2] |= cells_to_add_mod_list_r16.is_present(); group_flags.pack(bref); if (group_flags[0]) { @@ -4520,6 +5461,26 @@ SRSASN_CODE meas_obj_nr_r15_s::pack(bit_ref& bref) const HANDLE_CODE(band_nr_r15->pack(bref)); } } + if (group_flags[1]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(rmtc_cfg_nr_r16.is_present(), 1)); + if (rmtc_cfg_nr_r16.is_present()) { + HANDLE_CODE(rmtc_cfg_nr_r16->pack(bref)); + } + } + if (group_flags[2]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(cells_to_rem_list_r16.is_present(), 1)); + HANDLE_CODE(bref.pack(cells_to_add_mod_list_r16.is_present(), 1)); + if (cells_to_rem_list_r16.is_present()) { + HANDLE_CODE(pack_dyn_seq_of(bref, *cells_to_rem_list_r16, 1, 32, integer_packer<uint8_t>(1, 32))); + } + if (cells_to_add_mod_list_r16.is_present()) { + HANDLE_CODE(pack_dyn_seq_of(bref, *cells_to_add_mod_list_r16, 1, 32)); + } + } } return SRSASN_SUCCESS; } @@ -4529,8 +5490,8 @@ SRSASN_CODE meas_obj_nr_r15_s::unpack(cbit_ref& bref) HANDLE_CODE(bref.unpack(thresh_rs_idx_r15_present, 1)); HANDLE_CODE(bref.unpack(max_rs_idx_cell_qual_r15_present, 1)); HANDLE_CODE(bref.unpack(offset_freq_r15_present, 1)); - HANDLE_CODE(bref.unpack(black_cells_to_rem_list_r15_present, 1)); - HANDLE_CODE(bref.unpack(black_cells_to_add_mod_list_r15_present, 1)); + HANDLE_CODE(bref.unpack(excluded_cells_to_rem_list_r15_present, 1)); + HANDLE_CODE(bref.unpack(excluded_cells_to_add_mod_list_r15_present, 1)); HANDLE_CODE(bref.unpack(cells_for_which_to_report_sftd_r15_present, 1)); HANDLE_CODE(unpack_integer(carrier_freq_r15, bref, (uint32_t)0u, (uint32_t)3279165u)); @@ -4544,11 +5505,11 @@ SRSASN_CODE meas_obj_nr_r15_s::unpack(cbit_ref& bref) if (offset_freq_r15_present) { HANDLE_CODE(unpack_integer(offset_freq_r15, bref, (int8_t)-15, (int8_t)15)); } - if (black_cells_to_rem_list_r15_present) { - HANDLE_CODE(unpack_dyn_seq_of(black_cells_to_rem_list_r15, bref, 1, 32, integer_packer<uint8_t>(1, 32))); + if (excluded_cells_to_rem_list_r15_present) { + HANDLE_CODE(unpack_dyn_seq_of(excluded_cells_to_rem_list_r15, bref, 1, 32, integer_packer<uint8_t>(1, 32))); } - if (black_cells_to_add_mod_list_r15_present) { - HANDLE_CODE(unpack_dyn_seq_of(black_cells_to_add_mod_list_r15, bref, 1, 32)); + if (excluded_cells_to_add_mod_list_r15_present) { + HANDLE_CODE(unpack_dyn_seq_of(excluded_cells_to_add_mod_list_r15, bref, 1, 32)); } HANDLE_CODE(unpack_integer(quant_cfg_set_r15, bref, (uint8_t)1u, (uint8_t)2u)); if (cells_for_which_to_report_sftd_r15_present) { @@ -4556,7 +5517,7 @@ SRSASN_CODE meas_obj_nr_r15_s::unpack(cbit_ref& bref) } if (ext) { - ext_groups_unpacker_guard group_flags(1); + ext_groups_unpacker_guard group_flags(3); group_flags.unpack(bref); if (group_flags[0]) { @@ -4583,6 +5544,32 @@ SRSASN_CODE meas_obj_nr_r15_s::unpack(cbit_ref& bref) HANDLE_CODE(band_nr_r15->unpack(bref)); } } + if (group_flags[1]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + bool rmtc_cfg_nr_r16_present; + HANDLE_CODE(bref.unpack(rmtc_cfg_nr_r16_present, 1)); + rmtc_cfg_nr_r16.set_present(rmtc_cfg_nr_r16_present); + if (rmtc_cfg_nr_r16.is_present()) { + HANDLE_CODE(rmtc_cfg_nr_r16->unpack(bref)); + } + } + if (group_flags[2]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + bool cells_to_rem_list_r16_present; + HANDLE_CODE(bref.unpack(cells_to_rem_list_r16_present, 1)); + cells_to_rem_list_r16.set_present(cells_to_rem_list_r16_present); + bool cells_to_add_mod_list_r16_present; + HANDLE_CODE(bref.unpack(cells_to_add_mod_list_r16_present, 1)); + cells_to_add_mod_list_r16.set_present(cells_to_add_mod_list_r16_present); + if (cells_to_rem_list_r16.is_present()) { + HANDLE_CODE(unpack_dyn_seq_of(*cells_to_rem_list_r16, bref, 1, 32, integer_packer<uint8_t>(1, 32))); + } + if (cells_to_add_mod_list_r16.is_present()) { + HANDLE_CODE(unpack_dyn_seq_of(*cells_to_add_mod_list_r16, bref, 1, 32)); + } + } } return SRSASN_SUCCESS; } @@ -4602,16 +5589,16 @@ void meas_obj_nr_r15_s::to_json(json_writer& j) const if (offset_freq_r15_present) { j.write_int("offsetFreq-r15", offset_freq_r15); } - if (black_cells_to_rem_list_r15_present) { - j.start_array("blackCellsToRemoveList-r15"); - for (const auto& e1 : black_cells_to_rem_list_r15) { + if (excluded_cells_to_rem_list_r15_present) { + j.start_array("excludedCellsToRemoveList-r15"); + for (const auto& e1 : excluded_cells_to_rem_list_r15) { j.write_int(e1); } j.end_array(); } - if (black_cells_to_add_mod_list_r15_present) { - j.start_array("blackCellsToAddModList-r15"); - for (const auto& e1 : black_cells_to_add_mod_list_r15) { + if (excluded_cells_to_add_mod_list_r15_present) { + j.start_array("excludedCellsToAddModList-r15"); + for (const auto& e1 : excluded_cells_to_add_mod_list_r15) { e1.to_json(j); } j.end_array(); @@ -4639,6 +5626,24 @@ void meas_obj_nr_r15_s::to_json(json_writer& j) const j.write_fieldname("bandNR-r15"); band_nr_r15->to_json(j); } + if (rmtc_cfg_nr_r16.is_present()) { + j.write_fieldname("rmtc-ConfigNR-r16"); + rmtc_cfg_nr_r16->to_json(j); + } + if (cells_to_rem_list_r16.is_present()) { + j.start_array("cellsToRemoveList-r16"); + for (const auto& e1 : *cells_to_rem_list_r16) { + j.write_int(e1); + } + j.end_array(); + } + if (cells_to_add_mod_list_r16.is_present()) { + j.start_array("cellsToAddModList-r16"); + for (const auto& e1 : *cells_to_add_mod_list_r16) { + e1.to_json(j); + } + j.end_array(); + } } j.end_obj(); } @@ -4651,26 +5656,34 @@ bool meas_obj_nr_r15_s::operator==(const meas_obj_nr_r15_s& other) const (not max_rs_idx_cell_qual_r15_present or max_rs_idx_cell_qual_r15 == other.max_rs_idx_cell_qual_r15) and offset_freq_r15_present == other.offset_freq_r15_present and (not offset_freq_r15_present or offset_freq_r15 == other.offset_freq_r15) and - black_cells_to_rem_list_r15_present == other.black_cells_to_rem_list_r15_present and - (not black_cells_to_rem_list_r15_present or - black_cells_to_rem_list_r15 == other.black_cells_to_rem_list_r15) and - black_cells_to_add_mod_list_r15_present == other.black_cells_to_add_mod_list_r15_present and - (not black_cells_to_add_mod_list_r15_present or - black_cells_to_add_mod_list_r15 == other.black_cells_to_add_mod_list_r15) and + excluded_cells_to_rem_list_r15_present == other.excluded_cells_to_rem_list_r15_present and + (not excluded_cells_to_rem_list_r15_present or + excluded_cells_to_rem_list_r15 == other.excluded_cells_to_rem_list_r15) and + excluded_cells_to_add_mod_list_r15_present == other.excluded_cells_to_add_mod_list_r15_present and + (not excluded_cells_to_add_mod_list_r15_present or + excluded_cells_to_add_mod_list_r15 == other.excluded_cells_to_add_mod_list_r15) and quant_cfg_set_r15 == other.quant_cfg_set_r15 and cells_for_which_to_report_sftd_r15_present == other.cells_for_which_to_report_sftd_r15_present and (not cells_for_which_to_report_sftd_r15_present or cells_for_which_to_report_sftd_r15 == other.cells_for_which_to_report_sftd_r15) and - (not ext or (cell_for_which_to_report_cgi_r15_present == other.cell_for_which_to_report_cgi_r15_present and - (not cell_for_which_to_report_cgi_r15_present or - cell_for_which_to_report_cgi_r15 == other.cell_for_which_to_report_cgi_r15) and - derive_ssb_idx_from_cell_r15_present == other.derive_ssb_idx_from_cell_r15_present and - (not derive_ssb_idx_from_cell_r15_present or - derive_ssb_idx_from_cell_r15 == other.derive_ssb_idx_from_cell_r15) and - ss_rssi_meas_r15.is_present() == other.ss_rssi_meas_r15.is_present() and - (not ss_rssi_meas_r15.is_present() or *ss_rssi_meas_r15 == *other.ss_rssi_meas_r15) and - band_nr_r15.is_present() == other.band_nr_r15.is_present() and - (not band_nr_r15.is_present() or *band_nr_r15 == *other.band_nr_r15))); + (not ext or + (cell_for_which_to_report_cgi_r15_present == other.cell_for_which_to_report_cgi_r15_present and + (not cell_for_which_to_report_cgi_r15_present or + cell_for_which_to_report_cgi_r15 == other.cell_for_which_to_report_cgi_r15) and + derive_ssb_idx_from_cell_r15_present == other.derive_ssb_idx_from_cell_r15_present and + (not derive_ssb_idx_from_cell_r15_present or + derive_ssb_idx_from_cell_r15 == other.derive_ssb_idx_from_cell_r15) and + ss_rssi_meas_r15.is_present() == other.ss_rssi_meas_r15.is_present() and + (not ss_rssi_meas_r15.is_present() or *ss_rssi_meas_r15 == *other.ss_rssi_meas_r15) and + band_nr_r15.is_present() == other.band_nr_r15.is_present() and + (not band_nr_r15.is_present() or *band_nr_r15 == *other.band_nr_r15) and + rmtc_cfg_nr_r16.is_present() == other.rmtc_cfg_nr_r16.is_present() and + (not rmtc_cfg_nr_r16.is_present() or *rmtc_cfg_nr_r16 == *other.rmtc_cfg_nr_r16) and + cells_to_rem_list_r16.is_present() == other.cells_to_rem_list_r16.is_present() and + (not cells_to_rem_list_r16.is_present() or *cells_to_rem_list_r16 == *other.cells_to_rem_list_r16) and + cells_to_add_mod_list_r16.is_present() == other.cells_to_add_mod_list_r16.is_present() and + (not cells_to_add_mod_list_r16.is_present() or + *cells_to_add_mod_list_r16 == *other.cells_to_add_mod_list_r16))); } void meas_obj_nr_r15_s::band_nr_r15_c_::set(types::options e) @@ -5989,7 +7002,7 @@ SRSASN_CODE report_cfg_eutra_s::pack(bit_ref& bref) const group_flags[2] |= trigger_quant_csi_rs_r12_present; group_flags[3] |= report_sstd_meas_r13_present; group_flags[3] |= rs_sinr_cfg_r13.is_present(); - group_flags[3] |= use_white_cell_list_r13_present; + group_flags[3] |= use_allowed_cell_list_r13_present; group_flags[3] |= meas_rssi_report_cfg_r13.is_present(); group_flags[3] |= include_multi_band_info_r13_present; group_flags[3] |= ul_delay_cfg_r13.is_present(); @@ -6001,6 +7014,10 @@ SRSASN_CODE report_cfg_eutra_s::pack(bit_ref& bref) const group_flags[7] |= purpose_r15_present; group_flags[7] |= nof_trigger_cells_r15_present; group_flags[7] |= a4_a5_report_on_leave_r15_present; + group_flags[8] |= cond_recfg_trigger_eutra_r16.is_present(); + group_flags[8] |= ul_delay_value_cfg_r16.is_present(); + group_flags[9] |= include_uncom_bar_pre_meas_r17_present; + group_flags[9] |= coarse_location_req_r17_present; group_flags.pack(bref); if (group_flags[0]) { @@ -6056,7 +7073,7 @@ SRSASN_CODE report_cfg_eutra_s::pack(bit_ref& bref) const HANDLE_CODE(bref.pack(report_sstd_meas_r13_present, 1)); HANDLE_CODE(bref.pack(rs_sinr_cfg_r13.is_present(), 1)); - HANDLE_CODE(bref.pack(use_white_cell_list_r13_present, 1)); + HANDLE_CODE(bref.pack(use_allowed_cell_list_r13_present, 1)); HANDLE_CODE(bref.pack(meas_rssi_report_cfg_r13.is_present(), 1)); HANDLE_CODE(bref.pack(include_multi_band_info_r13_present, 1)); HANDLE_CODE(bref.pack(ul_delay_cfg_r13.is_present(), 1)); @@ -6066,8 +7083,8 @@ SRSASN_CODE report_cfg_eutra_s::pack(bit_ref& bref) const if (rs_sinr_cfg_r13.is_present()) { HANDLE_CODE(rs_sinr_cfg_r13->pack(bref)); } - if (use_white_cell_list_r13_present) { - HANDLE_CODE(bref.pack(use_white_cell_list_r13, 1)); + if (use_allowed_cell_list_r13_present) { + HANDLE_CODE(bref.pack(use_allowed_cell_list_r13, 1)); } if (meas_rssi_report_cfg_r13.is_present()) { HANDLE_CODE(meas_rssi_report_cfg_r13->pack(bref)); @@ -6121,6 +7138,27 @@ SRSASN_CODE report_cfg_eutra_s::pack(bit_ref& bref) const HANDLE_CODE(bref.pack(a4_a5_report_on_leave_r15, 1)); } } + if (group_flags[8]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(cond_recfg_trigger_eutra_r16.is_present(), 1)); + HANDLE_CODE(bref.pack(ul_delay_value_cfg_r16.is_present(), 1)); + if (cond_recfg_trigger_eutra_r16.is_present()) { + HANDLE_CODE(cond_recfg_trigger_eutra_r16->pack(bref)); + } + if (ul_delay_value_cfg_r16.is_present()) { + HANDLE_CODE(ul_delay_value_cfg_r16->pack(bref)); + } + } + if (group_flags[9]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(include_uncom_bar_pre_meas_r17_present, 1)); + HANDLE_CODE(bref.pack(coarse_location_req_r17_present, 1)); + if (include_uncom_bar_pre_meas_r17_present) { + HANDLE_CODE(bref.pack(include_uncom_bar_pre_meas_r17, 1)); + } + } } return SRSASN_SUCCESS; } @@ -6135,7 +7173,7 @@ SRSASN_CODE report_cfg_eutra_s::unpack(cbit_ref& bref) HANDLE_CODE(report_amount.unpack(bref)); if (ext) { - ext_groups_unpacker_guard group_flags(8); + ext_groups_unpacker_guard group_flags(10); group_flags.unpack(bref); if (group_flags[0]) { @@ -6199,7 +7237,7 @@ SRSASN_CODE report_cfg_eutra_s::unpack(cbit_ref& bref) bool rs_sinr_cfg_r13_present; HANDLE_CODE(bref.unpack(rs_sinr_cfg_r13_present, 1)); rs_sinr_cfg_r13.set_present(rs_sinr_cfg_r13_present); - HANDLE_CODE(bref.unpack(use_white_cell_list_r13_present, 1)); + HANDLE_CODE(bref.unpack(use_allowed_cell_list_r13_present, 1)); bool meas_rssi_report_cfg_r13_present; HANDLE_CODE(bref.unpack(meas_rssi_report_cfg_r13_present, 1)); meas_rssi_report_cfg_r13.set_present(meas_rssi_report_cfg_r13_present); @@ -6213,8 +7251,8 @@ SRSASN_CODE report_cfg_eutra_s::unpack(cbit_ref& bref) if (rs_sinr_cfg_r13.is_present()) { HANDLE_CODE(rs_sinr_cfg_r13->unpack(bref)); } - if (use_white_cell_list_r13_present) { - HANDLE_CODE(bref.unpack(use_white_cell_list_r13, 1)); + if (use_allowed_cell_list_r13_present) { + HANDLE_CODE(bref.unpack(use_allowed_cell_list_r13, 1)); } if (meas_rssi_report_cfg_r13.is_present()) { HANDLE_CODE(meas_rssi_report_cfg_r13->unpack(bref)); @@ -6272,6 +7310,31 @@ SRSASN_CODE report_cfg_eutra_s::unpack(cbit_ref& bref) HANDLE_CODE(bref.unpack(a4_a5_report_on_leave_r15, 1)); } } + if (group_flags[8]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + bool cond_recfg_trigger_eutra_r16_present; + HANDLE_CODE(bref.unpack(cond_recfg_trigger_eutra_r16_present, 1)); + cond_recfg_trigger_eutra_r16.set_present(cond_recfg_trigger_eutra_r16_present); + bool ul_delay_value_cfg_r16_present; + HANDLE_CODE(bref.unpack(ul_delay_value_cfg_r16_present, 1)); + ul_delay_value_cfg_r16.set_present(ul_delay_value_cfg_r16_present); + if (cond_recfg_trigger_eutra_r16.is_present()) { + HANDLE_CODE(cond_recfg_trigger_eutra_r16->unpack(bref)); + } + if (ul_delay_value_cfg_r16.is_present()) { + HANDLE_CODE(ul_delay_value_cfg_r16->unpack(bref)); + } + } + if (group_flags[9]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.unpack(include_uncom_bar_pre_meas_r17_present, 1)); + HANDLE_CODE(bref.unpack(coarse_location_req_r17_present, 1)); + if (include_uncom_bar_pre_meas_r17_present) { + HANDLE_CODE(bref.unpack(include_uncom_bar_pre_meas_r17, 1)); + } + } } return SRSASN_SUCCESS; } @@ -6332,8 +7395,8 @@ void report_cfg_eutra_s::to_json(json_writer& j) const j.write_fieldname("rs-sinr-Config-r13"); rs_sinr_cfg_r13->to_json(j); } - if (use_white_cell_list_r13_present) { - j.write_bool("useWhiteCellList-r13", use_white_cell_list_r13); + if (use_allowed_cell_list_r13_present) { + j.write_bool("useAllowedCellList-r13", use_allowed_cell_list_r13); } if (meas_rssi_report_cfg_r13.is_present()) { j.write_fieldname("measRSSI-ReportConfig-r13"); @@ -6372,6 +7435,20 @@ void report_cfg_eutra_s::to_json(json_writer& j) const if (a4_a5_report_on_leave_r15_present) { j.write_bool("a4-a5-ReportOnLeave-r15", a4_a5_report_on_leave_r15); } + if (cond_recfg_trigger_eutra_r16.is_present()) { + j.write_fieldname("condReconfigurationTriggerEUTRA-r16"); + cond_recfg_trigger_eutra_r16->to_json(j); + } + if (ul_delay_value_cfg_r16.is_present()) { + j.write_fieldname("ul-DelayValueConfig-r16"); + ul_delay_value_cfg_r16->to_json(j); + } + if (include_uncom_bar_pre_meas_r17_present) { + j.write_bool("includeUncomBarPreMeas-r17", include_uncom_bar_pre_meas_r17); + } + if (coarse_location_req_r17_present) { + j.write_str("coarseLocationReq-r17", "true"); + } } j.end_obj(); } @@ -6406,8 +7483,8 @@ bool report_cfg_eutra_s::operator==(const report_cfg_eutra_s& other) const (not report_sstd_meas_r13_present or report_sstd_meas_r13 == other.report_sstd_meas_r13) and rs_sinr_cfg_r13.is_present() == other.rs_sinr_cfg_r13.is_present() and (not rs_sinr_cfg_r13.is_present() or *rs_sinr_cfg_r13 == *other.rs_sinr_cfg_r13) and - use_white_cell_list_r13_present == other.use_white_cell_list_r13_present and - (not use_white_cell_list_r13_present or use_white_cell_list_r13 == other.use_white_cell_list_r13) and + use_allowed_cell_list_r13_present == other.use_allowed_cell_list_r13_present and + (not use_allowed_cell_list_r13_present or use_allowed_cell_list_r13 == other.use_allowed_cell_list_r13) and meas_rssi_report_cfg_r13.is_present() == other.meas_rssi_report_cfg_r13.is_present() and (not meas_rssi_report_cfg_r13.is_present() or *meas_rssi_report_cfg_r13 == *other.meas_rssi_report_cfg_r13) and @@ -6429,7 +7506,16 @@ bool report_cfg_eutra_s::operator==(const report_cfg_eutra_s& other) const nof_trigger_cells_r15_present == other.nof_trigger_cells_r15_present and (not nof_trigger_cells_r15_present or nof_trigger_cells_r15 == other.nof_trigger_cells_r15) and a4_a5_report_on_leave_r15_present == other.a4_a5_report_on_leave_r15_present and - (not a4_a5_report_on_leave_r15_present or a4_a5_report_on_leave_r15 == other.a4_a5_report_on_leave_r15))); + (not a4_a5_report_on_leave_r15_present or a4_a5_report_on_leave_r15 == other.a4_a5_report_on_leave_r15) and + cond_recfg_trigger_eutra_r16.is_present() == other.cond_recfg_trigger_eutra_r16.is_present() and + (not cond_recfg_trigger_eutra_r16.is_present() or + *cond_recfg_trigger_eutra_r16 == *other.cond_recfg_trigger_eutra_r16) and + ul_delay_value_cfg_r16.is_present() == other.ul_delay_value_cfg_r16.is_present() and + (not ul_delay_value_cfg_r16.is_present() or *ul_delay_value_cfg_r16 == *other.ul_delay_value_cfg_r16) and + include_uncom_bar_pre_meas_r17_present == other.include_uncom_bar_pre_meas_r17_present and + (not include_uncom_bar_pre_meas_r17_present or + include_uncom_bar_pre_meas_r17 == other.include_uncom_bar_pre_meas_r17) and + coarse_location_req_r17_present == other.coarse_location_req_r17_present)); } void report_cfg_eutra_s::trigger_type_c_::destroy_() @@ -6805,6 +7891,9 @@ SRSASN_CODE report_cfg_inter_rat_s::pack(bit_ref& bref) const group_flags[6] |= report_quant_rs_idx_nr_r15.is_present(); group_flags[6] |= report_rs_idx_results_nr_present; group_flags[6] |= report_sftd_meas_r15_present; + group_flags[7] |= use_autonomous_gaps_nr_r16_present; + group_flags[7] |= meas_rssi_report_cfg_nr_r16.is_present(); + group_flags[8] |= cond_recfg_trigger_nr_r17.is_present(); group_flags.pack(bref); if (group_flags[0]) { @@ -6873,6 +7962,23 @@ SRSASN_CODE report_cfg_inter_rat_s::pack(bit_ref& bref) const HANDLE_CODE(report_sftd_meas_r15.pack(bref)); } } + if (group_flags[7]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(use_autonomous_gaps_nr_r16_present, 1)); + HANDLE_CODE(bref.pack(meas_rssi_report_cfg_nr_r16.is_present(), 1)); + if (meas_rssi_report_cfg_nr_r16.is_present()) { + HANDLE_CODE(meas_rssi_report_cfg_nr_r16->pack(bref)); + } + } + if (group_flags[8]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(cond_recfg_trigger_nr_r17.is_present(), 1)); + if (cond_recfg_trigger_nr_r17.is_present()) { + HANDLE_CODE(cond_recfg_trigger_nr_r17->pack(bref)); + } + } } return SRSASN_SUCCESS; } @@ -6885,7 +7991,7 @@ SRSASN_CODE report_cfg_inter_rat_s::unpack(cbit_ref& bref) HANDLE_CODE(report_amount.unpack(bref)); if (ext) { - ext_groups_unpacker_guard group_flags(7); + ext_groups_unpacker_guard group_flags(9); group_flags.unpack(bref); if (group_flags[0]) { @@ -6962,6 +8068,27 @@ SRSASN_CODE report_cfg_inter_rat_s::unpack(cbit_ref& bref) HANDLE_CODE(report_sftd_meas_r15.unpack(bref)); } } + if (group_flags[7]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.unpack(use_autonomous_gaps_nr_r16_present, 1)); + bool meas_rssi_report_cfg_nr_r16_present; + HANDLE_CODE(bref.unpack(meas_rssi_report_cfg_nr_r16_present, 1)); + meas_rssi_report_cfg_nr_r16.set_present(meas_rssi_report_cfg_nr_r16_present); + if (meas_rssi_report_cfg_nr_r16.is_present()) { + HANDLE_CODE(meas_rssi_report_cfg_nr_r16->unpack(bref)); + } + } + if (group_flags[8]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + bool cond_recfg_trigger_nr_r17_present; + HANDLE_CODE(bref.unpack(cond_recfg_trigger_nr_r17_present, 1)); + cond_recfg_trigger_nr_r17.set_present(cond_recfg_trigger_nr_r17_present); + if (cond_recfg_trigger_nr_r17.is_present()) { + HANDLE_CODE(cond_recfg_trigger_nr_r17->unpack(bref)); + } + } } return SRSASN_SUCCESS; } @@ -7011,6 +8138,17 @@ void report_cfg_inter_rat_s::to_json(json_writer& j) const if (report_sftd_meas_r15_present) { j.write_str("reportSFTD-Meas-r15", report_sftd_meas_r15.to_string()); } + if (use_autonomous_gaps_nr_r16_present) { + j.write_str("useAutonomousGapsNR-r16", "setup"); + } + if (meas_rssi_report_cfg_nr_r16.is_present()) { + j.write_fieldname("measRSSI-ReportConfigNR-r16"); + meas_rssi_report_cfg_nr_r16->to_json(j); + } + if (cond_recfg_trigger_nr_r17.is_present()) { + j.write_fieldname("condReconfigurationTriggerNR-r17"); + cond_recfg_trigger_nr_r17->to_json(j); + } } j.end_obj(); } @@ -7040,7 +8178,14 @@ bool report_cfg_inter_rat_s::operator==(const report_cfg_inter_rat_s& other) con report_rs_idx_results_nr_present == other.report_rs_idx_results_nr_present and (not report_rs_idx_results_nr_present or report_rs_idx_results_nr == other.report_rs_idx_results_nr) and report_sftd_meas_r15_present == other.report_sftd_meas_r15_present and - (not report_sftd_meas_r15_present or report_sftd_meas_r15 == other.report_sftd_meas_r15))); + (not report_sftd_meas_r15_present or report_sftd_meas_r15 == other.report_sftd_meas_r15) and + use_autonomous_gaps_nr_r16_present == other.use_autonomous_gaps_nr_r16_present and + meas_rssi_report_cfg_nr_r16.is_present() == other.meas_rssi_report_cfg_nr_r16.is_present() and + (not meas_rssi_report_cfg_nr_r16.is_present() or + *meas_rssi_report_cfg_nr_r16 == *other.meas_rssi_report_cfg_nr_r16) and + cond_recfg_trigger_nr_r17.is_present() == other.cond_recfg_trigger_nr_r17.is_present() and + (not cond_recfg_trigger_nr_r17.is_present() or + *cond_recfg_trigger_nr_r17 == *other.cond_recfg_trigger_nr_r17))); } void report_cfg_inter_rat_s::trigger_type_c_::destroy_() @@ -8671,6 +9816,291 @@ SRSASN_CODE meas_obj_to_add_mod_ext_r13_s::meas_obj_r13_c_::unpack(cbit_ref& bre return SRSASN_SUCCESS; } +// PUR-PeriodicityAndOffset-r16 ::= CHOICE +void pur_periodicity_and_offset_r16_c::destroy_() {} +void pur_periodicity_and_offset_r16_c::set(types::options e) +{ + destroy_(); + type_ = e; +} +pur_periodicity_and_offset_r16_c::pur_periodicity_and_offset_r16_c(const pur_periodicity_and_offset_r16_c& other) +{ + type_ = other.type(); + switch (type_) { + case types::periodicity8: + c.init(other.c.get<uint8_t>()); + break; + case types::periodicity16: + c.init(other.c.get<uint8_t>()); + break; + case types::periodicity32: + c.init(other.c.get<uint8_t>()); + break; + case types::periodicity64: + c.init(other.c.get<uint8_t>()); + break; + case types::periodicity128: + c.init(other.c.get<uint8_t>()); + break; + case types::periodicity256: + c.init(other.c.get<uint16_t>()); + break; + case types::periodicity512: + c.init(other.c.get<uint16_t>()); + break; + case types::periodicity1024: + c.init(other.c.get<uint16_t>()); + break; + case types::periodicity2048: + c.init(other.c.get<uint16_t>()); + break; + case types::periodicity4096: + c.init(other.c.get<uint16_t>()); + break; + case types::periodicity8192: + c.init(other.c.get<uint16_t>()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "pur_periodicity_and_offset_r16_c"); + } +} +pur_periodicity_and_offset_r16_c& +pur_periodicity_and_offset_r16_c::operator=(const pur_periodicity_and_offset_r16_c& other) +{ + if (this == &other) { + return *this; + } + set(other.type()); + switch (type_) { + case types::periodicity8: + c.set(other.c.get<uint8_t>()); + break; + case types::periodicity16: + c.set(other.c.get<uint8_t>()); + break; + case types::periodicity32: + c.set(other.c.get<uint8_t>()); + break; + case types::periodicity64: + c.set(other.c.get<uint8_t>()); + break; + case types::periodicity128: + c.set(other.c.get<uint8_t>()); + break; + case types::periodicity256: + c.set(other.c.get<uint16_t>()); + break; + case types::periodicity512: + c.set(other.c.get<uint16_t>()); + break; + case types::periodicity1024: + c.set(other.c.get<uint16_t>()); + break; + case types::periodicity2048: + c.set(other.c.get<uint16_t>()); + break; + case types::periodicity4096: + c.set(other.c.get<uint16_t>()); + break; + case types::periodicity8192: + c.set(other.c.get<uint16_t>()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "pur_periodicity_and_offset_r16_c"); + } + + return *this; +} +uint8_t& pur_periodicity_and_offset_r16_c::set_periodicity8() +{ + set(types::periodicity8); + return c.get<uint8_t>(); +} +uint8_t& pur_periodicity_and_offset_r16_c::set_periodicity16() +{ + set(types::periodicity16); + return c.get<uint8_t>(); +} +uint8_t& pur_periodicity_and_offset_r16_c::set_periodicity32() +{ + set(types::periodicity32); + return c.get<uint8_t>(); +} +uint8_t& pur_periodicity_and_offset_r16_c::set_periodicity64() +{ + set(types::periodicity64); + return c.get<uint8_t>(); +} +uint8_t& pur_periodicity_and_offset_r16_c::set_periodicity128() +{ + set(types::periodicity128); + return c.get<uint8_t>(); +} +uint16_t& pur_periodicity_and_offset_r16_c::set_periodicity256() +{ + set(types::periodicity256); + return c.get<uint16_t>(); +} +uint16_t& pur_periodicity_and_offset_r16_c::set_periodicity512() +{ + set(types::periodicity512); + return c.get<uint16_t>(); +} +uint16_t& pur_periodicity_and_offset_r16_c::set_periodicity1024() +{ + set(types::periodicity1024); + return c.get<uint16_t>(); +} +uint16_t& pur_periodicity_and_offset_r16_c::set_periodicity2048() +{ + set(types::periodicity2048); + return c.get<uint16_t>(); +} +uint16_t& pur_periodicity_and_offset_r16_c::set_periodicity4096() +{ + set(types::periodicity4096); + return c.get<uint16_t>(); +} +uint16_t& pur_periodicity_and_offset_r16_c::set_periodicity8192() +{ + set(types::periodicity8192); + return c.get<uint16_t>(); +} +void pur_periodicity_and_offset_r16_c::to_json(json_writer& j) const +{ + j.start_obj(); + switch (type_) { + case types::periodicity8: + j.write_int("periodicity8", c.get<uint8_t>()); + break; + case types::periodicity16: + j.write_int("periodicity16", c.get<uint8_t>()); + break; + case types::periodicity32: + j.write_int("periodicity32", c.get<uint8_t>()); + break; + case types::periodicity64: + j.write_int("periodicity64", c.get<uint8_t>()); + break; + case types::periodicity128: + j.write_int("periodicity128", c.get<uint8_t>()); + break; + case types::periodicity256: + j.write_int("periodicity256", c.get<uint16_t>()); + break; + case types::periodicity512: + j.write_int("periodicity512", c.get<uint16_t>()); + break; + case types::periodicity1024: + j.write_int("periodicity1024", c.get<uint16_t>()); + break; + case types::periodicity2048: + j.write_int("periodicity2048", c.get<uint16_t>()); + break; + case types::periodicity4096: + j.write_int("periodicity4096", c.get<uint16_t>()); + break; + case types::periodicity8192: + j.write_int("periodicity8192", c.get<uint16_t>()); + break; + default: + log_invalid_choice_id(type_, "pur_periodicity_and_offset_r16_c"); + } + j.end_obj(); +} +SRSASN_CODE pur_periodicity_and_offset_r16_c::pack(bit_ref& bref) const +{ + type_.pack(bref); + switch (type_) { + case types::periodicity8: + HANDLE_CODE(pack_integer(bref, c.get<uint8_t>(), (uint8_t)1u, (uint8_t)7u)); + break; + case types::periodicity16: + HANDLE_CODE(pack_integer(bref, c.get<uint8_t>(), (uint8_t)1u, (uint8_t)15u)); + break; + case types::periodicity32: + HANDLE_CODE(pack_integer(bref, c.get<uint8_t>(), (uint8_t)1u, (uint8_t)31u)); + break; + case types::periodicity64: + HANDLE_CODE(pack_integer(bref, c.get<uint8_t>(), (uint8_t)1u, (uint8_t)63u)); + break; + case types::periodicity128: + HANDLE_CODE(pack_integer(bref, c.get<uint8_t>(), (uint8_t)1u, (uint8_t)127u)); + break; + case types::periodicity256: + HANDLE_CODE(pack_integer(bref, c.get<uint16_t>(), (uint16_t)1u, (uint16_t)255u)); + break; + case types::periodicity512: + HANDLE_CODE(pack_integer(bref, c.get<uint16_t>(), (uint16_t)1u, (uint16_t)511u)); + break; + case types::periodicity1024: + HANDLE_CODE(pack_integer(bref, c.get<uint16_t>(), (uint16_t)1u, (uint16_t)1023u)); + break; + case types::periodicity2048: + HANDLE_CODE(pack_integer(bref, c.get<uint16_t>(), (uint16_t)1u, (uint16_t)2047u)); + break; + case types::periodicity4096: + HANDLE_CODE(pack_integer(bref, c.get<uint16_t>(), (uint16_t)1u, (uint16_t)4095u)); + break; + case types::periodicity8192: + HANDLE_CODE(pack_integer(bref, c.get<uint16_t>(), (uint16_t)1u, (uint16_t)8191u)); + break; + default: + log_invalid_choice_id(type_, "pur_periodicity_and_offset_r16_c"); + return SRSASN_ERROR_ENCODE_FAIL; + } + return SRSASN_SUCCESS; +} +SRSASN_CODE pur_periodicity_and_offset_r16_c::unpack(cbit_ref& bref) +{ + types e; + e.unpack(bref); + set(e); + switch (type_) { + case types::periodicity8: + HANDLE_CODE(unpack_integer(c.get<uint8_t>(), bref, (uint8_t)1u, (uint8_t)7u)); + break; + case types::periodicity16: + HANDLE_CODE(unpack_integer(c.get<uint8_t>(), bref, (uint8_t)1u, (uint8_t)15u)); + break; + case types::periodicity32: + HANDLE_CODE(unpack_integer(c.get<uint8_t>(), bref, (uint8_t)1u, (uint8_t)31u)); + break; + case types::periodicity64: + HANDLE_CODE(unpack_integer(c.get<uint8_t>(), bref, (uint8_t)1u, (uint8_t)63u)); + break; + case types::periodicity128: + HANDLE_CODE(unpack_integer(c.get<uint8_t>(), bref, (uint8_t)1u, (uint8_t)127u)); + break; + case types::periodicity256: + HANDLE_CODE(unpack_integer(c.get<uint16_t>(), bref, (uint16_t)1u, (uint16_t)255u)); + break; + case types::periodicity512: + HANDLE_CODE(unpack_integer(c.get<uint16_t>(), bref, (uint16_t)1u, (uint16_t)511u)); + break; + case types::periodicity1024: + HANDLE_CODE(unpack_integer(c.get<uint16_t>(), bref, (uint16_t)1u, (uint16_t)1023u)); + break; + case types::periodicity2048: + HANDLE_CODE(unpack_integer(c.get<uint16_t>(), bref, (uint16_t)1u, (uint16_t)2047u)); + break; + case types::periodicity4096: + HANDLE_CODE(unpack_integer(c.get<uint16_t>(), bref, (uint16_t)1u, (uint16_t)4095u)); + break; + case types::periodicity8192: + HANDLE_CODE(unpack_integer(c.get<uint16_t>(), bref, (uint16_t)1u, (uint16_t)8191u)); + break; + default: + log_invalid_choice_id(type_, "pur_periodicity_and_offset_r16_c"); + return SRSASN_ERROR_DECODE_FAIL; + } + return SRSASN_SUCCESS; +} + // QuantityConfigCDMA2000 ::= SEQUENCE SRSASN_CODE quant_cfg_cdma2000_s::pack(bit_ref& bref) const { @@ -10999,6 +12429,98 @@ SRSASN_CODE meas_cfg_s::height_thresh_ref_r15_c_::unpack(cbit_ref& bref) return SRSASN_SUCCESS; } +// EventType-r17 ::= CHOICE +void event_type_r17_c::set(types::options e) +{ + type_ = e; +} +void event_type_r17_c::set_out_of_coverage() +{ + set(types::out_of_coverage); +} +event_type_r17_c::event_l1_s_& event_type_r17_c::set_event_l1() +{ + set(types::event_l1); + return c; +} +void event_type_r17_c::to_json(json_writer& j) const +{ + j.start_obj(); + switch (type_) { + case types::out_of_coverage: + break; + case types::event_l1: + j.write_fieldname("eventL1"); + j.start_obj(); + j.write_fieldname("l1-Threshold-r17"); + c.l1_thres_r17.to_json(j); + j.write_int("hysteresis-r17", c.hysteresis_r17); + j.write_str("timeToTrigger-r17", c.time_to_trigger_r17.to_string()); + j.end_obj(); + break; + default: + log_invalid_choice_id(type_, "event_type_r17_c"); + } + j.end_obj(); +} +SRSASN_CODE event_type_r17_c::pack(bit_ref& bref) const +{ + type_.pack(bref); + switch (type_) { + case types::out_of_coverage: + break; + case types::event_l1: + HANDLE_CODE(c.l1_thres_r17.pack(bref)); + HANDLE_CODE(pack_integer(bref, c.hysteresis_r17, (uint8_t)0u, (uint8_t)30u)); + HANDLE_CODE(c.time_to_trigger_r17.pack(bref)); + break; + default: + log_invalid_choice_id(type_, "event_type_r17_c"); + return SRSASN_ERROR_ENCODE_FAIL; + } + return SRSASN_SUCCESS; +} +SRSASN_CODE event_type_r17_c::unpack(cbit_ref& bref) +{ + types e; + e.unpack(bref); + set(e); + switch (type_) { + case types::out_of_coverage: + break; + case types::event_l1: + HANDLE_CODE(c.l1_thres_r17.unpack(bref)); + HANDLE_CODE(unpack_integer(c.hysteresis_r17, bref, (uint8_t)0u, (uint8_t)30u)); + HANDLE_CODE(c.time_to_trigger_r17.unpack(bref)); + break; + default: + log_invalid_choice_id(type_, "event_type_r17_c"); + return SRSASN_ERROR_DECODE_FAIL; + } + return SRSASN_SUCCESS; +} + +// LoggedEventTriggerConfig-r17 ::= SEQUENCE +SRSASN_CODE logged_event_trigger_cfg_r17_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(event_type_r17.pack(bref)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE logged_event_trigger_cfg_r17_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(event_type_r17.unpack(bref)); + + return SRSASN_SUCCESS; +} +void logged_event_trigger_cfg_r17_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_fieldname("eventType-r17"); + event_type_r17.to_json(j); + j.end_obj(); +} + // CarrierFreqGERAN ::= SEQUENCE SRSASN_CODE carrier_freq_geran_s::pack(bit_ref& bref) const { @@ -11022,6 +12544,49 @@ void carrier_freq_geran_s::to_json(json_writer& j) const j.end_obj(); } +// LoggedMeasurementConfiguration-v1700-IEs ::= SEQUENCE +SRSASN_CODE logged_meas_cfg_v1700_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(logged_event_trigger_cfg_r17_present, 1)); + HANDLE_CODE(bref.pack(meas_uncom_bar_pre_r17_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + if (logged_event_trigger_cfg_r17_present) { + HANDLE_CODE(logged_event_trigger_cfg_r17.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE logged_meas_cfg_v1700_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(logged_event_trigger_cfg_r17_present, 1)); + HANDLE_CODE(bref.unpack(meas_uncom_bar_pre_r17_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + if (logged_event_trigger_cfg_r17_present) { + HANDLE_CODE(logged_event_trigger_cfg_r17.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void logged_meas_cfg_v1700_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (logged_event_trigger_cfg_r17_present) { + j.write_fieldname("loggedEventTriggerConfig-r17"); + logged_event_trigger_cfg_r17.to_json(j); + } + if (meas_uncom_bar_pre_r17_present) { + j.write_str("measUncomBarPre-r17", "true"); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + j.start_obj(); + j.end_obj(); + } + j.end_obj(); +} + // LoggedMeasurementConfiguration-v1530-IEs ::= SEQUENCE SRSASN_CODE logged_meas_cfg_v1530_ies_s::pack(bit_ref& bref) const { @@ -11035,6 +12600,9 @@ SRSASN_CODE logged_meas_cfg_v1530_ies_s::pack(bit_ref& bref) const if (wlan_name_list_r15_present) { HANDLE_CODE(pack_dyn_seq_of(bref, wlan_name_list_r15, 1, 4)); } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } return SRSASN_SUCCESS; } @@ -11050,6 +12618,9 @@ SRSASN_CODE logged_meas_cfg_v1530_ies_s::unpack(cbit_ref& bref) if (wlan_name_list_r15_present) { HANDLE_CODE(unpack_dyn_seq_of(wlan_name_list_r15, bref, 1, 4)); } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } return SRSASN_SUCCESS; } @@ -11072,8 +12643,7 @@ void logged_meas_cfg_v1530_ies_s::to_json(json_writer& j) const } if (non_crit_ext_present) { j.write_fieldname("nonCriticalExtension"); - j.start_obj(); - j.end_obj(); + non_crit_ext.to_json(j); } j.end_obj(); } @@ -11102,6 +12672,32 @@ void cell_global_id_eutra_s::to_json(json_writer& j) const j.end_obj(); } +// DAPS-PowerCoordinationInfo-r16 ::= SEQUENCE +SRSASN_CODE daps_pwr_coordination_info_r16_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(pack_integer(bref, p_daps_source_r16, (uint8_t)1u, (uint8_t)16u)); + HANDLE_CODE(pack_integer(bref, p_daps_target_r16, (uint8_t)1u, (uint8_t)16u)); + HANDLE_CODE(pack_integer(bref, pwr_ctrl_mode_r16, (uint8_t)1u, (uint8_t)2u)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE daps_pwr_coordination_info_r16_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(unpack_integer(p_daps_source_r16, bref, (uint8_t)1u, (uint8_t)16u)); + HANDLE_CODE(unpack_integer(p_daps_target_r16, bref, (uint8_t)1u, (uint8_t)16u)); + HANDLE_CODE(unpack_integer(pwr_ctrl_mode_r16, bref, (uint8_t)1u, (uint8_t)2u)); + + return SRSASN_SUCCESS; +} +void daps_pwr_coordination_info_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_int("p-DAPS-Source-r16", p_daps_source_r16); + j.write_int("p-DAPS-Target-r16", p_daps_target_r16); + j.write_int("powerControlMode-r16", pwr_ctrl_mode_r16); + j.end_obj(); +} + // CarrierBandwidthEUTRA ::= SEQUENCE SRSASN_CODE carrier_bw_eutra_s::pack(bit_ref& bref) const { @@ -11253,6 +12849,39 @@ void carrier_freq_eutra_v9e0_s::to_json(json_writer& j) const j.end_obj(); } +// DAPS-Config-r16 ::= SEQUENCE +SRSASN_CODE daps_cfg_r16_s::pack(bit_ref& bref) const +{ + bref.pack(ext, 1); + HANDLE_CODE(bref.pack(daps_pwr_coordination_info_r16_present, 1)); + + if (daps_pwr_coordination_info_r16_present) { + HANDLE_CODE(daps_pwr_coordination_info_r16.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE daps_cfg_r16_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(bref.unpack(daps_pwr_coordination_info_r16_present, 1)); + + if (daps_pwr_coordination_info_r16_present) { + HANDLE_CODE(daps_pwr_coordination_info_r16.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void daps_cfg_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (daps_pwr_coordination_info_r16_present) { + j.write_fieldname("daps-PowerCoordinationInfo-r16"); + daps_pwr_coordination_info_r16.to_json(j); + } + j.end_obj(); +} + // MobilityControlInfoV2X-r14 ::= SEQUENCE SRSASN_CODE mob_ctrl_info_v2x_r14_s::pack(bit_ref& bref) const { @@ -11363,6 +12992,7 @@ SRSASN_CODE mob_ctrl_info_s::pack(bit_ref& bref) const group_flags[2] |= same_sfn_ind_r14_present; group_flags[3] |= mib_repeat_status_r14_present; group_flags[3] |= sched_info_sib1_br_r14_present; + group_flags[4] |= daps_cfg_r16.is_present(); group_flags.pack(bref); if (group_flags[0]) { @@ -11408,6 +13038,14 @@ SRSASN_CODE mob_ctrl_info_s::pack(bit_ref& bref) const HANDLE_CODE(pack_integer(bref, sched_info_sib1_br_r14, (uint8_t)0u, (uint8_t)31u)); } } + if (group_flags[4]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(daps_cfg_r16.is_present(), 1)); + if (daps_cfg_r16.is_present()) { + HANDLE_CODE(daps_cfg_r16->pack(bref)); + } + } } return SRSASN_SUCCESS; } @@ -11437,7 +13075,7 @@ SRSASN_CODE mob_ctrl_info_s::unpack(cbit_ref& bref) } if (ext) { - ext_groups_unpacker_guard group_flags(4); + ext_groups_unpacker_guard group_flags(5); group_flags.unpack(bref); if (group_flags[0]) { @@ -11489,6 +13127,16 @@ SRSASN_CODE mob_ctrl_info_s::unpack(cbit_ref& bref) HANDLE_CODE(unpack_integer(sched_info_sib1_br_r14, bref, (uint8_t)0u, (uint8_t)31u)); } } + if (group_flags[4]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + bool daps_cfg_r16_present; + HANDLE_CODE(bref.unpack(daps_cfg_r16_present, 1)); + daps_cfg_r16.set_present(daps_cfg_r16_present); + if (daps_cfg_r16.is_present()) { + HANDLE_CODE(daps_cfg_r16->unpack(bref)); + } + } } return SRSASN_SUCCESS; } @@ -11546,6 +13194,10 @@ void mob_ctrl_info_s::to_json(json_writer& j) const if (sched_info_sib1_br_r14_present) { j.write_int("schedulingInfoSIB1-BR-r14", sched_info_sib1_br_r14); } + if (daps_cfg_r16.is_present()) { + j.write_fieldname("daps-Config-r16"); + daps_cfg_r16->to_json(j); + } } j.end_obj(); } @@ -11591,6 +13243,141 @@ void trace_ref_r10_s::to_json(json_writer& j) const j.end_obj(); } +// MeasResultNR-r15 ::= SEQUENCE +SRSASN_CODE meas_result_nr_r15_s::pack(bit_ref& bref) const +{ + bref.pack(ext, 1); + HANDLE_CODE(bref.pack(rsrp_result_r15_present, 1)); + HANDLE_CODE(bref.pack(rsrq_result_r15_present, 1)); + HANDLE_CODE(bref.pack(rs_sinr_result_r15_present, 1)); + + if (rsrp_result_r15_present) { + HANDLE_CODE(pack_integer(bref, rsrp_result_r15, (uint8_t)0u, (uint8_t)127u)); + } + if (rsrq_result_r15_present) { + HANDLE_CODE(pack_integer(bref, rsrq_result_r15, (uint8_t)0u, (uint8_t)127u)); + } + if (rs_sinr_result_r15_present) { + HANDLE_CODE(pack_integer(bref, rs_sinr_result_r15, (uint8_t)0u, (uint8_t)127u)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE meas_result_nr_r15_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(bref.unpack(rsrp_result_r15_present, 1)); + HANDLE_CODE(bref.unpack(rsrq_result_r15_present, 1)); + HANDLE_CODE(bref.unpack(rs_sinr_result_r15_present, 1)); + + if (rsrp_result_r15_present) { + HANDLE_CODE(unpack_integer(rsrp_result_r15, bref, (uint8_t)0u, (uint8_t)127u)); + } + if (rsrq_result_r15_present) { + HANDLE_CODE(unpack_integer(rsrq_result_r15, bref, (uint8_t)0u, (uint8_t)127u)); + } + if (rs_sinr_result_r15_present) { + HANDLE_CODE(unpack_integer(rs_sinr_result_r15, bref, (uint8_t)0u, (uint8_t)127u)); + } + + return SRSASN_SUCCESS; +} +void meas_result_nr_r15_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (rsrp_result_r15_present) { + j.write_int("rsrpResult-r15", rsrp_result_r15); + } + if (rsrq_result_r15_present) { + j.write_int("rsrqResult-r15", rsrq_result_r15); + } + if (rs_sinr_result_r15_present) { + j.write_int("rs-sinr-Result-r15", rs_sinr_result_r15); + } + j.end_obj(); +} + +// PLMN-IdentityInfoNR-r15 ::= SEQUENCE +SRSASN_CODE plmn_id_info_nr_r15_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(tac_r15_present, 1)); + HANDLE_CODE(bref.pack(ran_area_code_r15_present, 1)); + + HANDLE_CODE(pack_dyn_seq_of(bref, plmn_id_list_r15, 1, 12)); + if (tac_r15_present) { + HANDLE_CODE(tac_r15.pack(bref)); + } + if (ran_area_code_r15_present) { + HANDLE_CODE(pack_integer(bref, ran_area_code_r15, (uint16_t)0u, (uint16_t)255u)); + } + HANDLE_CODE(cell_id_r15.pack(bref)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE plmn_id_info_nr_r15_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(tac_r15_present, 1)); + HANDLE_CODE(bref.unpack(ran_area_code_r15_present, 1)); + + HANDLE_CODE(unpack_dyn_seq_of(plmn_id_list_r15, bref, 1, 12)); + if (tac_r15_present) { + HANDLE_CODE(tac_r15.unpack(bref)); + } + if (ran_area_code_r15_present) { + HANDLE_CODE(unpack_integer(ran_area_code_r15, bref, (uint16_t)0u, (uint16_t)255u)); + } + HANDLE_CODE(cell_id_r15.unpack(bref)); + + return SRSASN_SUCCESS; +} +void plmn_id_info_nr_r15_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.start_array("plmn-IdentityList-r15"); + for (const auto& e1 : plmn_id_list_r15) { + e1.to_json(j); + } + j.end_array(); + if (tac_r15_present) { + j.write_str("trackingAreaCode-r15", tac_r15.to_string()); + } + if (ran_area_code_r15_present) { + j.write_int("ran-AreaCode-r15", ran_area_code_r15); + } + j.write_str("cellIdentity-r15", cell_id_r15.to_string()); + j.end_obj(); +} + +// PLMN-IdentityInfoNR-v1710 ::= SEQUENCE +SRSASN_CODE plmn_id_info_nr_v1710_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(gnb_id_len_r17_present, 1)); + + if (gnb_id_len_r17_present) { + HANDLE_CODE(pack_integer(bref, gnb_id_len_r17, (uint8_t)22u, (uint8_t)32u)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE plmn_id_info_nr_v1710_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(gnb_id_len_r17_present, 1)); + + if (gnb_id_len_r17_present) { + HANDLE_CODE(unpack_integer(gnb_id_len_r17, bref, (uint8_t)22u, (uint8_t)32u)); + } + + return SRSASN_SUCCESS; +} +void plmn_id_info_nr_v1710_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (gnb_id_len_r17_present) { + j.write_int("gNB-ID-Length-r17", gnb_id_len_r17); + } + j.end_obj(); +} + // CellGlobalIdCDMA2000 ::= CHOICE void cell_global_id_cdma2000_c::destroy_() { @@ -11719,6 +13506,42 @@ SRSASN_CODE cell_global_id_cdma2000_c::unpack(cbit_ref& bref) return SRSASN_SUCCESS; } +// MeasResultSSB-Index-r15 ::= SEQUENCE +SRSASN_CODE meas_result_ssb_idx_r15_s::pack(bit_ref& bref) const +{ + bref.pack(ext, 1); + HANDLE_CODE(bref.pack(meas_result_ssb_idx_r15_present, 1)); + + HANDLE_CODE(pack_integer(bref, ssb_idx_r15, (uint8_t)0u, (uint8_t)63u)); + if (meas_result_ssb_idx_r15_present) { + HANDLE_CODE(meas_result_ssb_idx_r15.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE meas_result_ssb_idx_r15_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(bref.unpack(meas_result_ssb_idx_r15_present, 1)); + + HANDLE_CODE(unpack_integer(ssb_idx_r15, bref, (uint8_t)0u, (uint8_t)63u)); + if (meas_result_ssb_idx_r15_present) { + HANDLE_CODE(meas_result_ssb_idx_r15.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void meas_result_ssb_idx_r15_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_int("ssb-Index-r15", ssb_idx_r15); + if (meas_result_ssb_idx_r15_present) { + j.write_fieldname("measResultSSB-Index-r15"); + meas_result_ssb_idx_r15.to_json(j); + } + j.end_obj(); +} + // AdditionalSI-Info-r9 ::= SEQUENCE SRSASN_CODE add_si_info_r9_s::pack(bit_ref& bref) const { @@ -11783,6 +13606,112 @@ void bler_result_r12_s::to_json(json_writer& j) const j.end_obj(); } +// CGI-InfoNR-r15 ::= SEQUENCE +SRSASN_CODE cgi_info_nr_r15_s::pack(bit_ref& bref) const +{ + bref.pack(ext, 1); + HANDLE_CODE(bref.pack(plmn_id_info_list_r15_present, 1)); + HANDLE_CODE(bref.pack(freq_band_list_r15_present, 1)); + HANDLE_CODE(bref.pack(no_sib1_r15_present, 1)); + + if (plmn_id_info_list_r15_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, plmn_id_info_list_r15, 1, 12)); + } + if (freq_band_list_r15_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, freq_band_list_r15, 1, 32, integer_packer<uint16_t>(1, 1024))); + } + if (no_sib1_r15_present) { + HANDLE_CODE(pack_integer(bref, no_sib1_r15.ssb_subcarrier_offset_r15, (uint8_t)0u, (uint8_t)15u)); + HANDLE_CODE(pack_integer(bref, no_sib1_r15.pdcch_cfg_sib1_r15, (uint16_t)0u, (uint16_t)255u)); + } + + if (ext) { + ext_groups_packer_guard group_flags; + group_flags[0] |= plmn_id_info_list_v1710.is_present(); + group_flags.pack(bref); + + if (group_flags[0]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(plmn_id_info_list_v1710.is_present(), 1)); + if (plmn_id_info_list_v1710.is_present()) { + HANDLE_CODE(pack_dyn_seq_of(bref, *plmn_id_info_list_v1710, 1, 12)); + } + } + } + return SRSASN_SUCCESS; +} +SRSASN_CODE cgi_info_nr_r15_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(bref.unpack(plmn_id_info_list_r15_present, 1)); + HANDLE_CODE(bref.unpack(freq_band_list_r15_present, 1)); + HANDLE_CODE(bref.unpack(no_sib1_r15_present, 1)); + + if (plmn_id_info_list_r15_present) { + HANDLE_CODE(unpack_dyn_seq_of(plmn_id_info_list_r15, bref, 1, 12)); + } + if (freq_band_list_r15_present) { + HANDLE_CODE(unpack_dyn_seq_of(freq_band_list_r15, bref, 1, 32, integer_packer<uint16_t>(1, 1024))); + } + if (no_sib1_r15_present) { + HANDLE_CODE(unpack_integer(no_sib1_r15.ssb_subcarrier_offset_r15, bref, (uint8_t)0u, (uint8_t)15u)); + HANDLE_CODE(unpack_integer(no_sib1_r15.pdcch_cfg_sib1_r15, bref, (uint16_t)0u, (uint16_t)255u)); + } + + if (ext) { + ext_groups_unpacker_guard group_flags(1); + group_flags.unpack(bref); + + if (group_flags[0]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + bool plmn_id_info_list_v1710_present; + HANDLE_CODE(bref.unpack(plmn_id_info_list_v1710_present, 1)); + plmn_id_info_list_v1710.set_present(plmn_id_info_list_v1710_present); + if (plmn_id_info_list_v1710.is_present()) { + HANDLE_CODE(unpack_dyn_seq_of(*plmn_id_info_list_v1710, bref, 1, 12)); + } + } + } + return SRSASN_SUCCESS; +} +void cgi_info_nr_r15_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (plmn_id_info_list_r15_present) { + j.start_array("plmn-IdentityInfoList-r15"); + for (const auto& e1 : plmn_id_info_list_r15) { + e1.to_json(j); + } + j.end_array(); + } + if (freq_band_list_r15_present) { + j.start_array("frequencyBandList-r15"); + for (const auto& e1 : freq_band_list_r15) { + j.write_int(e1); + } + j.end_array(); + } + if (no_sib1_r15_present) { + j.write_fieldname("noSIB1-r15"); + j.start_obj(); + j.write_int("ssb-SubcarrierOffset-r15", no_sib1_r15.ssb_subcarrier_offset_r15); + j.write_int("pdcch-ConfigSIB1-r15", no_sib1_r15.pdcch_cfg_sib1_r15); + j.end_obj(); + } + if (ext) { + if (plmn_id_info_list_v1710.is_present()) { + j.start_array("plmn-IdentityInfoList-v1710"); + for (const auto& e1 : *plmn_id_info_list_v1710) { + e1.to_json(j); + } + j.end_array(); + } + } + j.end_obj(); +} + // CellGlobalIdUTRA ::= SEQUENCE SRSASN_CODE cell_global_id_utra_s::pack(bit_ref& bref) const { @@ -11911,6 +13840,84 @@ void data_bler_mch_result_r12_s::to_json(json_writer& j) const j.end_obj(); } +// MeasResultCellNR-r15 ::= SEQUENCE +SRSASN_CODE meas_result_cell_nr_r15_s::pack(bit_ref& bref) const +{ + bref.pack(ext, 1); + HANDLE_CODE(bref.pack(meas_result_rs_idx_list_r15_present, 1)); + + HANDLE_CODE(pack_integer(bref, pci_r15, (uint16_t)0u, (uint16_t)1007u)); + HANDLE_CODE(meas_result_cell_r15.pack(bref)); + if (meas_result_rs_idx_list_r15_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, meas_result_rs_idx_list_r15, 1, 32)); + } + + if (ext) { + ext_groups_packer_guard group_flags; + group_flags[0] |= cgi_info_r15.is_present(); + group_flags.pack(bref); + + if (group_flags[0]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(cgi_info_r15.is_present(), 1)); + if (cgi_info_r15.is_present()) { + HANDLE_CODE(cgi_info_r15->pack(bref)); + } + } + } + return SRSASN_SUCCESS; +} +SRSASN_CODE meas_result_cell_nr_r15_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(bref.unpack(meas_result_rs_idx_list_r15_present, 1)); + + HANDLE_CODE(unpack_integer(pci_r15, bref, (uint16_t)0u, (uint16_t)1007u)); + HANDLE_CODE(meas_result_cell_r15.unpack(bref)); + if (meas_result_rs_idx_list_r15_present) { + HANDLE_CODE(unpack_dyn_seq_of(meas_result_rs_idx_list_r15, bref, 1, 32)); + } + + if (ext) { + ext_groups_unpacker_guard group_flags(1); + group_flags.unpack(bref); + + if (group_flags[0]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + bool cgi_info_r15_present; + HANDLE_CODE(bref.unpack(cgi_info_r15_present, 1)); + cgi_info_r15.set_present(cgi_info_r15_present); + if (cgi_info_r15.is_present()) { + HANDLE_CODE(cgi_info_r15->unpack(bref)); + } + } + } + return SRSASN_SUCCESS; +} +void meas_result_cell_nr_r15_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_int("pci-r15", pci_r15); + j.write_fieldname("measResultCell-r15"); + meas_result_cell_r15.to_json(j); + if (meas_result_rs_idx_list_r15_present) { + j.start_array("measResultRS-IndexList-r15"); + for (const auto& e1 : meas_result_rs_idx_list_r15) { + e1.to_json(j); + } + j.end_array(); + } + if (ext) { + if (cgi_info_r15.is_present()) { + j.write_fieldname("cgi-Info-r15"); + cgi_info_r15->to_json(j); + } + } + j.end_obj(); +} + // MeasResultEUTRA ::= SEQUENCE SRSASN_CODE meas_result_eutra_s::pack(bit_ref& bref) const { @@ -13001,60 +15008,6 @@ void meas_result_geran_s::to_json(json_writer& j) const j.end_obj(); } -// MeasResultNR-r15 ::= SEQUENCE -SRSASN_CODE meas_result_nr_r15_s::pack(bit_ref& bref) const -{ - bref.pack(ext, 1); - HANDLE_CODE(bref.pack(rsrp_result_r15_present, 1)); - HANDLE_CODE(bref.pack(rsrq_result_r15_present, 1)); - HANDLE_CODE(bref.pack(rs_sinr_result_r15_present, 1)); - - if (rsrp_result_r15_present) { - HANDLE_CODE(pack_integer(bref, rsrp_result_r15, (uint8_t)0u, (uint8_t)127u)); - } - if (rsrq_result_r15_present) { - HANDLE_CODE(pack_integer(bref, rsrq_result_r15, (uint8_t)0u, (uint8_t)127u)); - } - if (rs_sinr_result_r15_present) { - HANDLE_CODE(pack_integer(bref, rs_sinr_result_r15, (uint8_t)0u, (uint8_t)127u)); - } - - return SRSASN_SUCCESS; -} -SRSASN_CODE meas_result_nr_r15_s::unpack(cbit_ref& bref) -{ - bref.unpack(ext, 1); - HANDLE_CODE(bref.unpack(rsrp_result_r15_present, 1)); - HANDLE_CODE(bref.unpack(rsrq_result_r15_present, 1)); - HANDLE_CODE(bref.unpack(rs_sinr_result_r15_present, 1)); - - if (rsrp_result_r15_present) { - HANDLE_CODE(unpack_integer(rsrp_result_r15, bref, (uint8_t)0u, (uint8_t)127u)); - } - if (rsrq_result_r15_present) { - HANDLE_CODE(unpack_integer(rsrq_result_r15, bref, (uint8_t)0u, (uint8_t)127u)); - } - if (rs_sinr_result_r15_present) { - HANDLE_CODE(unpack_integer(rs_sinr_result_r15, bref, (uint8_t)0u, (uint8_t)127u)); - } - - return SRSASN_SUCCESS; -} -void meas_result_nr_r15_s::to_json(json_writer& j) const -{ - j.start_obj(); - if (rsrp_result_r15_present) { - j.write_int("rsrpResult-r15", rsrp_result_r15); - } - if (rsrq_result_r15_present) { - j.write_int("rsrqResult-r15", rsrq_result_r15); - } - if (rs_sinr_result_r15_present) { - j.write_int("rs-sinr-Result-r15", rs_sinr_result_r15); - } - j.end_obj(); -} - // MeasResultsCDMA2000 ::= SEQUENCE SRSASN_CODE meas_results_cdma2000_s::pack(bit_ref& bref) const { @@ -13082,57 +15035,6 @@ void meas_results_cdma2000_s::to_json(json_writer& j) const j.end_obj(); } -// PLMN-IdentityInfoNR-r15 ::= SEQUENCE -SRSASN_CODE plmn_id_info_nr_r15_s::pack(bit_ref& bref) const -{ - HANDLE_CODE(bref.pack(tac_r15_present, 1)); - HANDLE_CODE(bref.pack(ran_area_code_r15_present, 1)); - - HANDLE_CODE(pack_dyn_seq_of(bref, plmn_id_list_r15, 1, 12)); - if (tac_r15_present) { - HANDLE_CODE(tac_r15.pack(bref)); - } - if (ran_area_code_r15_present) { - HANDLE_CODE(pack_integer(bref, ran_area_code_r15, (uint16_t)0u, (uint16_t)255u)); - } - HANDLE_CODE(cell_id_r15.pack(bref)); - - return SRSASN_SUCCESS; -} -SRSASN_CODE plmn_id_info_nr_r15_s::unpack(cbit_ref& bref) -{ - HANDLE_CODE(bref.unpack(tac_r15_present, 1)); - HANDLE_CODE(bref.unpack(ran_area_code_r15_present, 1)); - - HANDLE_CODE(unpack_dyn_seq_of(plmn_id_list_r15, bref, 1, 12)); - if (tac_r15_present) { - HANDLE_CODE(tac_r15.unpack(bref)); - } - if (ran_area_code_r15_present) { - HANDLE_CODE(unpack_integer(ran_area_code_r15, bref, (uint16_t)0u, (uint16_t)255u)); - } - HANDLE_CODE(cell_id_r15.unpack(bref)); - - return SRSASN_SUCCESS; -} -void plmn_id_info_nr_r15_s::to_json(json_writer& j) const -{ - j.start_obj(); - j.start_array("plmn-IdentityList-r15"); - for (const auto& e1 : plmn_id_list_r15) { - e1.to_json(j); - } - j.end_array(); - if (tac_r15_present) { - j.write_str("trackingAreaCode-r15", tac_r15.to_string()); - } - if (ran_area_code_r15_present) { - j.write_int("ran-AreaCode-r15", ran_area_code_r15); - } - j.write_str("cellIdentity-r15", cell_id_r15.to_string()); - j.end_obj(); -} - // RSRQ-Type-r12 ::= SEQUENCE SRSASN_CODE rsrq_type_r12_s::pack(bit_ref& bref) const { @@ -13424,6 +15326,45 @@ void meas_result2_utra_r9_s::to_json(json_writer& j) const j.end_obj(); } +// MeasResultFreqFailNR-r15 ::= SEQUENCE +SRSASN_CODE meas_result_freq_fail_nr_r15_s::pack(bit_ref& bref) const +{ + bref.pack(ext, 1); + HANDLE_CODE(bref.pack(meas_result_cell_list_r15_present, 1)); + + HANDLE_CODE(pack_integer(bref, carrier_freq_r15, (uint32_t)0u, (uint32_t)3279165u)); + if (meas_result_cell_list_r15_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, meas_result_cell_list_r15, 1, 8)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE meas_result_freq_fail_nr_r15_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(bref.unpack(meas_result_cell_list_r15_present, 1)); + + HANDLE_CODE(unpack_integer(carrier_freq_r15, bref, (uint32_t)0u, (uint32_t)3279165u)); + if (meas_result_cell_list_r15_present) { + HANDLE_CODE(unpack_dyn_seq_of(meas_result_cell_list_r15, bref, 1, 8)); + } + + return SRSASN_SUCCESS; +} +void meas_result_freq_fail_nr_r15_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_int("carrierFreq-r15", carrier_freq_r15); + if (meas_result_cell_list_r15_present) { + j.start_array("measResultCellList-r15"); + for (const auto& e1 : meas_result_cell_list_r15) { + e1.to_json(j); + } + j.end_array(); + } + j.end_obj(); +} + // MeasResultMBSFN-r12 ::= SEQUENCE SRSASN_CODE meas_result_mbsfn_r12_s::pack(bit_ref& bref) const { @@ -13487,110 +15428,6 @@ void meas_result_mbsfn_r12_s::to_json(json_writer& j) const j.end_obj(); } -// MeasResultSSB-Index-r15 ::= SEQUENCE -SRSASN_CODE meas_result_ssb_idx_r15_s::pack(bit_ref& bref) const -{ - bref.pack(ext, 1); - HANDLE_CODE(bref.pack(meas_result_ssb_idx_r15_present, 1)); - - HANDLE_CODE(pack_integer(bref, ssb_idx_r15, (uint8_t)0u, (uint8_t)63u)); - if (meas_result_ssb_idx_r15_present) { - HANDLE_CODE(meas_result_ssb_idx_r15.pack(bref)); - } - - return SRSASN_SUCCESS; -} -SRSASN_CODE meas_result_ssb_idx_r15_s::unpack(cbit_ref& bref) -{ - bref.unpack(ext, 1); - HANDLE_CODE(bref.unpack(meas_result_ssb_idx_r15_present, 1)); - - HANDLE_CODE(unpack_integer(ssb_idx_r15, bref, (uint8_t)0u, (uint8_t)63u)); - if (meas_result_ssb_idx_r15_present) { - HANDLE_CODE(meas_result_ssb_idx_r15.unpack(bref)); - } - - return SRSASN_SUCCESS; -} -void meas_result_ssb_idx_r15_s::to_json(json_writer& j) const -{ - j.start_obj(); - j.write_int("ssb-Index-r15", ssb_idx_r15); - if (meas_result_ssb_idx_r15_present) { - j.write_fieldname("measResultSSB-Index-r15"); - meas_result_ssb_idx_r15.to_json(j); - } - j.end_obj(); -} - -// CGI-InfoNR-r15 ::= SEQUENCE -SRSASN_CODE cgi_info_nr_r15_s::pack(bit_ref& bref) const -{ - bref.pack(ext, 1); - HANDLE_CODE(bref.pack(plmn_id_info_list_r15_present, 1)); - HANDLE_CODE(bref.pack(freq_band_list_r15_present, 1)); - HANDLE_CODE(bref.pack(no_sib1_r15_present, 1)); - - if (plmn_id_info_list_r15_present) { - HANDLE_CODE(pack_dyn_seq_of(bref, plmn_id_info_list_r15, 1, 12)); - } - if (freq_band_list_r15_present) { - HANDLE_CODE(pack_dyn_seq_of(bref, freq_band_list_r15, 1, 32, integer_packer<uint16_t>(1, 1024))); - } - if (no_sib1_r15_present) { - HANDLE_CODE(pack_integer(bref, no_sib1_r15.ssb_subcarrier_offset_r15, (uint8_t)0u, (uint8_t)15u)); - HANDLE_CODE(pack_integer(bref, no_sib1_r15.pdcch_cfg_sib1_r15, (uint16_t)0u, (uint16_t)255u)); - } - - return SRSASN_SUCCESS; -} -SRSASN_CODE cgi_info_nr_r15_s::unpack(cbit_ref& bref) -{ - bref.unpack(ext, 1); - HANDLE_CODE(bref.unpack(plmn_id_info_list_r15_present, 1)); - HANDLE_CODE(bref.unpack(freq_band_list_r15_present, 1)); - HANDLE_CODE(bref.unpack(no_sib1_r15_present, 1)); - - if (plmn_id_info_list_r15_present) { - HANDLE_CODE(unpack_dyn_seq_of(plmn_id_info_list_r15, bref, 1, 12)); - } - if (freq_band_list_r15_present) { - HANDLE_CODE(unpack_dyn_seq_of(freq_band_list_r15, bref, 1, 32, integer_packer<uint16_t>(1, 1024))); - } - if (no_sib1_r15_present) { - HANDLE_CODE(unpack_integer(no_sib1_r15.ssb_subcarrier_offset_r15, bref, (uint8_t)0u, (uint8_t)15u)); - HANDLE_CODE(unpack_integer(no_sib1_r15.pdcch_cfg_sib1_r15, bref, (uint16_t)0u, (uint16_t)255u)); - } - - return SRSASN_SUCCESS; -} -void cgi_info_nr_r15_s::to_json(json_writer& j) const -{ - j.start_obj(); - if (plmn_id_info_list_r15_present) { - j.start_array("plmn-IdentityInfoList-r15"); - for (const auto& e1 : plmn_id_info_list_r15) { - e1.to_json(j); - } - j.end_array(); - } - if (freq_band_list_r15_present) { - j.start_array("frequencyBandList-r15"); - for (const auto& e1 : freq_band_list_r15) { - j.write_int(e1); - } - j.end_array(); - } - if (no_sib1_r15_present) { - j.write_fieldname("noSIB1-r15"); - j.start_obj(); - j.write_int("ssb-SubcarrierOffset-r15", no_sib1_r15.ssb_subcarrier_offset_r15); - j.write_int("pdcch-ConfigSIB1-r15", no_sib1_r15.pdcch_cfg_sib1_r15); - j.end_obj(); - } - j.end_obj(); -} - // LogMeasInfo-r10 ::= SEQUENCE SRSASN_CODE log_meas_info_r10_s::pack(bit_ref& bref) const { @@ -13637,6 +15474,10 @@ SRSASN_CODE log_meas_info_r10_s::pack(bit_ref& bref) const group_flags[4] |= log_meas_result_list_bt_r15.is_present(); group_flags[4] |= log_meas_result_list_wlan_r15.is_present(); group_flags[5] |= any_cell_sel_detected_r15_present; + group_flags[6] |= meas_result_list_nr_r16.is_present(); + group_flags[7] |= meas_result_list_nr_v1640.is_present(); + group_flags[7] |= meas_result_list_ext_nr_r16.is_present(); + group_flags[8] |= uncom_bar_pre_meas_result_r17_present; group_flags.pack(bref); if (group_flags[0]) { @@ -13697,6 +15538,35 @@ SRSASN_CODE log_meas_info_r10_s::pack(bit_ref& bref) const HANDLE_CODE(bref.pack(any_cell_sel_detected_r15_present, 1)); } + if (group_flags[6]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(meas_result_list_nr_r16.is_present(), 1)); + if (meas_result_list_nr_r16.is_present()) { + HANDLE_CODE(pack_dyn_seq_of(bref, *meas_result_list_nr_r16, 1, 8)); + } + } + if (group_flags[7]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(meas_result_list_nr_v1640.is_present(), 1)); + HANDLE_CODE(bref.pack(meas_result_list_ext_nr_r16.is_present(), 1)); + if (meas_result_list_nr_v1640.is_present()) { + HANDLE_CODE( + pack_integer(bref, meas_result_list_nr_v1640->carrier_freq_nr_r16, (uint32_t)0u, (uint32_t)3279165u)); + } + if (meas_result_list_ext_nr_r16.is_present()) { + HANDLE_CODE(pack_dyn_seq_of(bref, *meas_result_list_ext_nr_r16, 1, 7)); + } + } + if (group_flags[8]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(uncom_bar_pre_meas_result_r17_present, 1)); + if (uncom_bar_pre_meas_result_r17_present) { + HANDLE_CODE(uncom_bar_pre_meas_result_r17.pack(bref)); + } + } } return SRSASN_SUCCESS; } @@ -13734,7 +15604,7 @@ SRSASN_CODE log_meas_info_r10_s::unpack(cbit_ref& bref) } if (ext) { - ext_groups_unpacker_guard group_flags(6); + ext_groups_unpacker_guard group_flags(9); group_flags.unpack(bref); if (group_flags[0]) { @@ -13807,6 +15677,41 @@ SRSASN_CODE log_meas_info_r10_s::unpack(cbit_ref& bref) HANDLE_CODE(bref.unpack(any_cell_sel_detected_r15_present, 1)); } + if (group_flags[6]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + bool meas_result_list_nr_r16_present; + HANDLE_CODE(bref.unpack(meas_result_list_nr_r16_present, 1)); + meas_result_list_nr_r16.set_present(meas_result_list_nr_r16_present); + if (meas_result_list_nr_r16.is_present()) { + HANDLE_CODE(unpack_dyn_seq_of(*meas_result_list_nr_r16, bref, 1, 8)); + } + } + if (group_flags[7]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + bool meas_result_list_nr_v1640_present; + HANDLE_CODE(bref.unpack(meas_result_list_nr_v1640_present, 1)); + meas_result_list_nr_v1640.set_present(meas_result_list_nr_v1640_present); + bool meas_result_list_ext_nr_r16_present; + HANDLE_CODE(bref.unpack(meas_result_list_ext_nr_r16_present, 1)); + meas_result_list_ext_nr_r16.set_present(meas_result_list_ext_nr_r16_present); + if (meas_result_list_nr_v1640.is_present()) { + HANDLE_CODE( + unpack_integer(meas_result_list_nr_v1640->carrier_freq_nr_r16, bref, (uint32_t)0u, (uint32_t)3279165u)); + } + if (meas_result_list_ext_nr_r16.is_present()) { + HANDLE_CODE(unpack_dyn_seq_of(*meas_result_list_ext_nr_r16, bref, 1, 7)); + } + } + if (group_flags[8]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.unpack(uncom_bar_pre_meas_result_r17_present, 1)); + if (uncom_bar_pre_meas_result_r17_present) { + HANDLE_CODE(uncom_bar_pre_meas_result_r17.unpack(bref)); + } + } } return SRSASN_SUCCESS; } @@ -13914,83 +15819,28 @@ void log_meas_info_r10_s::to_json(json_writer& j) const if (any_cell_sel_detected_r15_present) { j.write_str("anyCellSelectionDetected-r15", "true"); } - } - j.end_obj(); -} - -// MeasResultCellNR-r15 ::= SEQUENCE -SRSASN_CODE meas_result_cell_nr_r15_s::pack(bit_ref& bref) const -{ - bref.pack(ext, 1); - HANDLE_CODE(bref.pack(meas_result_rs_idx_list_r15_present, 1)); - - HANDLE_CODE(pack_integer(bref, pci_r15, (uint16_t)0u, (uint16_t)1007u)); - HANDLE_CODE(meas_result_cell_r15.pack(bref)); - if (meas_result_rs_idx_list_r15_present) { - HANDLE_CODE(pack_dyn_seq_of(bref, meas_result_rs_idx_list_r15, 1, 32)); - } - - if (ext) { - ext_groups_packer_guard group_flags; - group_flags[0] |= cgi_info_r15.is_present(); - group_flags.pack(bref); - - if (group_flags[0]) { - varlength_field_pack_guard varlen_scope(bref, false); - - HANDLE_CODE(bref.pack(cgi_info_r15.is_present(), 1)); - if (cgi_info_r15.is_present()) { - HANDLE_CODE(cgi_info_r15->pack(bref)); + if (meas_result_list_nr_r16.is_present()) { + j.start_array("measResultListNR-r16"); + for (const auto& e1 : *meas_result_list_nr_r16) { + e1.to_json(j); } + j.end_array(); } - } - return SRSASN_SUCCESS; -} -SRSASN_CODE meas_result_cell_nr_r15_s::unpack(cbit_ref& bref) -{ - bref.unpack(ext, 1); - HANDLE_CODE(bref.unpack(meas_result_rs_idx_list_r15_present, 1)); - - HANDLE_CODE(unpack_integer(pci_r15, bref, (uint16_t)0u, (uint16_t)1007u)); - HANDLE_CODE(meas_result_cell_r15.unpack(bref)); - if (meas_result_rs_idx_list_r15_present) { - HANDLE_CODE(unpack_dyn_seq_of(meas_result_rs_idx_list_r15, bref, 1, 32)); - } - - if (ext) { - ext_groups_unpacker_guard group_flags(1); - group_flags.unpack(bref); - - if (group_flags[0]) { - varlength_field_unpack_guard varlen_scope(bref, false); - - bool cgi_info_r15_present; - HANDLE_CODE(bref.unpack(cgi_info_r15_present, 1)); - cgi_info_r15.set_present(cgi_info_r15_present); - if (cgi_info_r15.is_present()) { - HANDLE_CODE(cgi_info_r15->unpack(bref)); - } + if (meas_result_list_nr_v1640.is_present()) { + j.write_fieldname("measResultListNR-v1640"); + j.start_obj(); + j.write_int("carrierFreqNR-r16", meas_result_list_nr_v1640->carrier_freq_nr_r16); + j.end_obj(); } - } - return SRSASN_SUCCESS; -} -void meas_result_cell_nr_r15_s::to_json(json_writer& j) const -{ - j.start_obj(); - j.write_int("pci-r15", pci_r15); - j.write_fieldname("measResultCell-r15"); - meas_result_cell_r15.to_json(j); - if (meas_result_rs_idx_list_r15_present) { - j.start_array("measResultRS-IndexList-r15"); - for (const auto& e1 : meas_result_rs_idx_list_r15) { - e1.to_json(j); + if (meas_result_list_ext_nr_r16.is_present()) { + j.start_array("measResultListExtNR-r16"); + for (const auto& e1 : *meas_result_list_ext_nr_r16) { + e1.to_json(j); + } + j.end_array(); } - j.end_array(); - } - if (ext) { - if (cgi_info_r15.is_present()) { - j.write_fieldname("cgi-Info-r15"); - cgi_info_r15->to_json(j); + if (uncom_bar_pre_meas_result_r17_present) { + j.write_str("uncomBarPreMeasResult-r17", uncom_bar_pre_meas_result_r17.to_string()); } } j.end_obj(); @@ -14660,6 +16510,31 @@ uint8_t ul_pdcp_delay_result_r13_s::qci_id_r13_opts::to_number() const return map_enum_number(options, 4, value, "ul_pdcp_delay_result_r13_s::qci_id_r13_e_"); } +// UL-PDCP-DelayValueResult-r16 ::= SEQUENCE +SRSASN_CODE ul_pdcp_delay_value_result_r16_s::pack(bit_ref& bref) const +{ + bref.pack(ext, 1); + HANDLE_CODE(pack_integer(bref, drb_id_r16, (uint8_t)1u, (uint8_t)32u)); + HANDLE_CODE(pack_integer(bref, average_delay_r16, (uint16_t)0u, (uint16_t)10000u)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE ul_pdcp_delay_value_result_r16_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(unpack_integer(drb_id_r16, bref, (uint8_t)1u, (uint8_t)32u)); + HANDLE_CODE(unpack_integer(average_delay_r16, bref, (uint16_t)0u, (uint16_t)10000u)); + + return SRSASN_SUCCESS; +} +void ul_pdcp_delay_value_result_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_int("drb-Id-r16", drb_id_r16); + j.write_int("averageDelay-r16", average_delay_r16); + j.end_obj(); +} + // MeasResultForECID-r9 ::= SEQUENCE SRSASN_CODE meas_result_for_ecid_r9_s::pack(bit_ref& bref) const { @@ -14683,6 +16558,31 @@ void meas_result_for_ecid_r9_s::to_json(json_writer& j) const j.end_obj(); } +// MeasResultForRSSI-NR-r16 ::= SEQUENCE +SRSASN_CODE meas_result_for_rssi_nr_r16_s::pack(bit_ref& bref) const +{ + bref.pack(ext, 1); + HANDLE_CODE(pack_integer(bref, rssi_result_nr_r16, (uint8_t)0u, (uint8_t)76u)); + HANDLE_CODE(pack_integer(bref, ch_occupancy_nr_r16, (uint8_t)0u, (uint8_t)100u)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE meas_result_for_rssi_nr_r16_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(unpack_integer(rssi_result_nr_r16, bref, (uint8_t)0u, (uint8_t)76u)); + HANDLE_CODE(unpack_integer(ch_occupancy_nr_r16, bref, (uint8_t)0u, (uint8_t)100u)); + + return SRSASN_SUCCESS; +} +void meas_result_for_rssi_nr_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_int("rssi-ResultNR-r16", rssi_result_nr_r16); + j.write_int("channelOccupancyNR-r16", ch_occupancy_nr_r16); + j.end_obj(); +} + // MeasResultForRSSI-r13 ::= SEQUENCE SRSASN_CODE meas_result_for_rssi_r13_s::pack(bit_ref& bref) const { @@ -14797,6 +16697,10 @@ SRSASN_CODE meas_results_s::pack(bit_ref& bref) const group_flags[7] |= log_meas_result_list_wlan_r15.is_present(); group_flags[7] |= meas_result_sensing_r15.is_present(); group_flags[7] |= height_ue_r15_present; + group_flags[8] |= ul_pdcp_delay_value_result_list_r16.is_present(); + group_flags[8] |= meas_result_for_rssi_nr_r16.is_present(); + group_flags[9] |= uncom_bar_pre_meas_result_r17_present; + group_flags[9] |= coarse_location_info_r17_present; group_flags.pack(bref); if (group_flags[0]) { @@ -14915,6 +16819,30 @@ SRSASN_CODE meas_results_s::pack(bit_ref& bref) const HANDLE_CODE(pack_integer(bref, height_ue_r15, (int16_t)-400, (int16_t)8880)); } } + if (group_flags[8]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(ul_pdcp_delay_value_result_list_r16.is_present(), 1)); + HANDLE_CODE(bref.pack(meas_result_for_rssi_nr_r16.is_present(), 1)); + if (ul_pdcp_delay_value_result_list_r16.is_present()) { + HANDLE_CODE(pack_dyn_seq_of(bref, *ul_pdcp_delay_value_result_list_r16, 1, 11)); + } + if (meas_result_for_rssi_nr_r16.is_present()) { + HANDLE_CODE(meas_result_for_rssi_nr_r16->pack(bref)); + } + } + if (group_flags[9]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(uncom_bar_pre_meas_result_r17_present, 1)); + HANDLE_CODE(bref.pack(coarse_location_info_r17_present, 1)); + if (uncom_bar_pre_meas_result_r17_present) { + HANDLE_CODE(uncom_bar_pre_meas_result_r17.pack(bref)); + } + if (coarse_location_info_r17_present) { + HANDLE_CODE(coarse_location_info_r17.pack(bref)); + } + } } return SRSASN_SUCCESS; } @@ -14931,7 +16859,7 @@ SRSASN_CODE meas_results_s::unpack(cbit_ref& bref) } if (ext) { - ext_groups_unpacker_guard group_flags(8); + ext_groups_unpacker_guard group_flags(10); group_flags.unpack(bref); if (group_flags[0]) { @@ -15084,6 +17012,34 @@ SRSASN_CODE meas_results_s::unpack(cbit_ref& bref) HANDLE_CODE(unpack_integer(height_ue_r15, bref, (int16_t)-400, (int16_t)8880)); } } + if (group_flags[8]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + bool ul_pdcp_delay_value_result_list_r16_present; + HANDLE_CODE(bref.unpack(ul_pdcp_delay_value_result_list_r16_present, 1)); + ul_pdcp_delay_value_result_list_r16.set_present(ul_pdcp_delay_value_result_list_r16_present); + bool meas_result_for_rssi_nr_r16_present; + HANDLE_CODE(bref.unpack(meas_result_for_rssi_nr_r16_present, 1)); + meas_result_for_rssi_nr_r16.set_present(meas_result_for_rssi_nr_r16_present); + if (ul_pdcp_delay_value_result_list_r16.is_present()) { + HANDLE_CODE(unpack_dyn_seq_of(*ul_pdcp_delay_value_result_list_r16, bref, 1, 11)); + } + if (meas_result_for_rssi_nr_r16.is_present()) { + HANDLE_CODE(meas_result_for_rssi_nr_r16->unpack(bref)); + } + } + if (group_flags[9]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.unpack(uncom_bar_pre_meas_result_r17_present, 1)); + HANDLE_CODE(bref.unpack(coarse_location_info_r17_present, 1)); + if (uncom_bar_pre_meas_result_r17_present) { + HANDLE_CODE(uncom_bar_pre_meas_result_r17.unpack(bref)); + } + if (coarse_location_info_r17_present) { + HANDLE_CODE(coarse_location_info_r17.unpack(bref)); + } + } } return SRSASN_SUCCESS; } @@ -15216,6 +17172,23 @@ void meas_results_s::to_json(json_writer& j) const if (height_ue_r15_present) { j.write_int("heightUE-r15", height_ue_r15); } + if (ul_pdcp_delay_value_result_list_r16.is_present()) { + j.start_array("ul-PDCP-DelayValueResultList-r16"); + for (const auto& e1 : *ul_pdcp_delay_value_result_list_r16) { + e1.to_json(j); + } + j.end_array(); + } + if (meas_result_for_rssi_nr_r16.is_present()) { + j.write_fieldname("measResultForRSSI-NR-r16"); + meas_result_for_rssi_nr_r16->to_json(j); + } + if (uncom_bar_pre_meas_result_r17_present) { + j.write_str("uncomBarPreMeasResult-r17", uncom_bar_pre_meas_result_r17.to_string()); + } + if (coarse_location_info_r17_present) { + j.write_str("coarseLocationInfo-r17", coarse_location_info_r17.to_string()); + } } j.end_obj(); } diff --git a/lib/src/asn1/rrc/paging.cc b/lib/src/asn1/rrc/paging.cc index a07a7c563..8849e04b5 100644 --- a/lib/src/asn1/rrc/paging.cc +++ b/lib/src/asn1/rrc/paging.cc @@ -20,12 +20,157 @@ using namespace asn1::rrc; * Struct Methods ******************************************************************************/ +// PagingRecord-v1700 ::= SEQUENCE +SRSASN_CODE paging_record_v1700_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(paging_cause_r17_present, 1)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE paging_record_v1700_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(paging_cause_r17_present, 1)); + + return SRSASN_SUCCESS; +} +void paging_record_v1700_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (paging_cause_r17_present) { + j.write_str("pagingCause-r17", "voice"); + } + j.end_obj(); +} + +// PagingRecord-v1610 ::= SEQUENCE +SRSASN_CODE paging_record_v1610_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(access_type_r16_present, 1)); + HANDLE_CODE(bref.pack(mt_edt_r16_present, 1)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE paging_record_v1610_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(access_type_r16_present, 1)); + HANDLE_CODE(bref.unpack(mt_edt_r16_present, 1)); + + return SRSASN_SUCCESS; +} +void paging_record_v1610_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (access_type_r16_present) { + j.write_str("accessType-r16", "non3GPP"); + } + if (mt_edt_r16_present) { + j.write_str("mt-EDT-r16", "true"); + } + j.end_obj(); +} + +// Paging-v1700-IEs ::= SEQUENCE +SRSASN_CODE paging_v1700_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(paging_record_list_v1700_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + if (paging_record_list_v1700_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, paging_record_list_v1700, 1, 16)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE paging_v1700_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(paging_record_list_v1700_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + if (paging_record_list_v1700_present) { + HANDLE_CODE(unpack_dyn_seq_of(paging_record_list_v1700, bref, 1, 16)); + } + + return SRSASN_SUCCESS; +} +void paging_v1700_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (paging_record_list_v1700_present) { + j.start_array("pagingRecordList-v1700"); + for (const auto& e1 : paging_record_list_v1700) { + e1.to_json(j); + } + j.end_array(); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + j.start_obj(); + j.end_obj(); + } + j.end_obj(); +} + +// Paging-v1610-IEs ::= SEQUENCE +SRSASN_CODE paging_v1610_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(paging_record_list_v1610_present, 1)); + HANDLE_CODE(bref.pack(uac_param_mod_r16_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + if (paging_record_list_v1610_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, paging_record_list_v1610, 1, 16)); + } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE paging_v1610_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(paging_record_list_v1610_present, 1)); + HANDLE_CODE(bref.unpack(uac_param_mod_r16_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + if (paging_record_list_v1610_present) { + HANDLE_CODE(unpack_dyn_seq_of(paging_record_list_v1610, bref, 1, 16)); + } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void paging_v1610_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (paging_record_list_v1610_present) { + j.start_array("pagingRecordList-v1610"); + for (const auto& e1 : paging_record_list_v1610) { + e1.to_json(j); + } + j.end_array(); + } + if (uac_param_mod_r16_present) { + j.write_str("uac-ParamModification-r16", "true"); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + non_crit_ext.to_json(j); + } + j.end_obj(); +} + // Paging-v1530-IEs ::= SEQUENCE SRSASN_CODE paging_v1530_ies_s::pack(bit_ref& bref) const { HANDLE_CODE(bref.pack(access_type_present, 1)); HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } + return SRSASN_SUCCESS; } SRSASN_CODE paging_v1530_ies_s::unpack(cbit_ref& bref) @@ -33,6 +178,10 @@ SRSASN_CODE paging_v1530_ies_s::unpack(cbit_ref& bref) HANDLE_CODE(bref.unpack(access_type_present, 1)); HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } + return SRSASN_SUCCESS; } void paging_v1530_ies_s::to_json(json_writer& j) const @@ -43,8 +192,7 @@ void paging_v1530_ies_s::to_json(json_writer& j) const } if (non_crit_ext_present) { j.write_fieldname("nonCriticalExtension"); - j.start_obj(); - j.end_obj(); + non_crit_ext.to_json(j); } j.end_obj(); } @@ -853,6 +1001,35 @@ SRSASN_CODE ue_paging_coverage_info_s::crit_exts_c_::c1_c_::unpack(cbit_ref& bre return SRSASN_SUCCESS; } +// UERadioPagingInformation-v1610-IEs ::= SEQUENCE +SRSASN_CODE ue_radio_paging_info_v1610_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(access_stratum_release_r16_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE ue_radio_paging_info_v1610_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(access_stratum_release_r16_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + return SRSASN_SUCCESS; +} +void ue_radio_paging_info_v1610_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (access_stratum_release_r16_present) { + j.write_str("accessStratumRelease-r16", "true"); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + j.start_obj(); + j.end_obj(); + } + j.end_obj(); +} + // UERadioPagingInformation-v1310-IEs ::= SEQUENCE SRSASN_CODE ue_radio_paging_info_v1310_ies_s::pack(bit_ref& bref) const { @@ -863,6 +1040,9 @@ SRSASN_CODE ue_radio_paging_info_v1310_ies_s::pack(bit_ref& bref) const HANDLE_CODE( pack_dyn_seq_of(bref, supported_band_list_eutra_for_paging_r13, 1, 64, integer_packer<uint16_t>(1, 256))); } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } return SRSASN_SUCCESS; } @@ -875,6 +1055,9 @@ SRSASN_CODE ue_radio_paging_info_v1310_ies_s::unpack(cbit_ref& bref) HANDLE_CODE( unpack_dyn_seq_of(supported_band_list_eutra_for_paging_r13, bref, 1, 64, integer_packer<uint16_t>(1, 256))); } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } return SRSASN_SUCCESS; } @@ -890,8 +1073,7 @@ void ue_radio_paging_info_v1310_ies_s::to_json(json_writer& j) const } if (non_crit_ext_present) { j.write_fieldname("nonCriticalExtension"); - j.start_obj(); - j.end_obj(); + non_crit_ext.to_json(j); } j.end_obj(); } diff --git a/lib/src/asn1/rrc/phy_ded.cc b/lib/src/asn1/rrc/phy_ded.cc index e8e1d7b7f..c9bf3cffd 100644 --- a/lib/src/asn1/rrc/phy_ded.cc +++ b/lib/src/asn1/rrc/phy_ded.cc @@ -20,6 +20,819 @@ using namespace asn1::rrc; * Struct Methods ******************************************************************************/ +// PeriodicityStartPos-r16 ::= CHOICE +void periodicity_start_pos_r16_c::destroy_() {} +void periodicity_start_pos_r16_c::set(types::options e) +{ + destroy_(); + type_ = e; +} +periodicity_start_pos_r16_c::periodicity_start_pos_r16_c(const periodicity_start_pos_r16_c& other) +{ + type_ = other.type(); + switch (type_) { + case types::periodicity10ms: + break; + case types::periodicity20ms: + c.init(other.c.get<uint8_t>()); + break; + case types::periodicity40ms: + c.init(other.c.get<uint8_t>()); + break; + case types::periodicity80ms: + c.init(other.c.get<uint8_t>()); + break; + case types::periodicity160ms: + c.init(other.c.get<uint8_t>()); + break; + case types::spare3: + break; + case types::spare2: + break; + case types::spare1: + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "periodicity_start_pos_r16_c"); + } +} +periodicity_start_pos_r16_c& periodicity_start_pos_r16_c::operator=(const periodicity_start_pos_r16_c& other) +{ + if (this == &other) { + return *this; + } + set(other.type()); + switch (type_) { + case types::periodicity10ms: + break; + case types::periodicity20ms: + c.set(other.c.get<uint8_t>()); + break; + case types::periodicity40ms: + c.set(other.c.get<uint8_t>()); + break; + case types::periodicity80ms: + c.set(other.c.get<uint8_t>()); + break; + case types::periodicity160ms: + c.set(other.c.get<uint8_t>()); + break; + case types::spare3: + break; + case types::spare2: + break; + case types::spare1: + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "periodicity_start_pos_r16_c"); + } + + return *this; +} +void periodicity_start_pos_r16_c::set_periodicity10ms() +{ + set(types::periodicity10ms); +} +uint8_t& periodicity_start_pos_r16_c::set_periodicity20ms() +{ + set(types::periodicity20ms); + return c.get<uint8_t>(); +} +uint8_t& periodicity_start_pos_r16_c::set_periodicity40ms() +{ + set(types::periodicity40ms); + return c.get<uint8_t>(); +} +uint8_t& periodicity_start_pos_r16_c::set_periodicity80ms() +{ + set(types::periodicity80ms); + return c.get<uint8_t>(); +} +uint8_t& periodicity_start_pos_r16_c::set_periodicity160ms() +{ + set(types::periodicity160ms); + return c.get<uint8_t>(); +} +void periodicity_start_pos_r16_c::set_spare3() +{ + set(types::spare3); +} +void periodicity_start_pos_r16_c::set_spare2() +{ + set(types::spare2); +} +void periodicity_start_pos_r16_c::set_spare1() +{ + set(types::spare1); +} +void periodicity_start_pos_r16_c::to_json(json_writer& j) const +{ + j.start_obj(); + switch (type_) { + case types::periodicity10ms: + break; + case types::periodicity20ms: + j.write_int("periodicity20ms", c.get<uint8_t>()); + break; + case types::periodicity40ms: + j.write_int("periodicity40ms", c.get<uint8_t>()); + break; + case types::periodicity80ms: + j.write_int("periodicity80ms", c.get<uint8_t>()); + break; + case types::periodicity160ms: + j.write_int("periodicity160ms", c.get<uint8_t>()); + break; + case types::spare3: + break; + case types::spare2: + break; + case types::spare1: + break; + default: + log_invalid_choice_id(type_, "periodicity_start_pos_r16_c"); + } + j.end_obj(); +} +SRSASN_CODE periodicity_start_pos_r16_c::pack(bit_ref& bref) const +{ + type_.pack(bref); + switch (type_) { + case types::periodicity10ms: + break; + case types::periodicity20ms: + HANDLE_CODE(pack_integer(bref, c.get<uint8_t>(), (uint8_t)0u, (uint8_t)1u)); + break; + case types::periodicity40ms: + HANDLE_CODE(pack_integer(bref, c.get<uint8_t>(), (uint8_t)0u, (uint8_t)3u)); + break; + case types::periodicity80ms: + HANDLE_CODE(pack_integer(bref, c.get<uint8_t>(), (uint8_t)0u, (uint8_t)7u)); + break; + case types::periodicity160ms: + HANDLE_CODE(pack_integer(bref, c.get<uint8_t>(), (uint8_t)0u, (uint8_t)15u)); + break; + case types::spare3: + break; + case types::spare2: + break; + case types::spare1: + break; + default: + log_invalid_choice_id(type_, "periodicity_start_pos_r16_c"); + return SRSASN_ERROR_ENCODE_FAIL; + } + return SRSASN_SUCCESS; +} +SRSASN_CODE periodicity_start_pos_r16_c::unpack(cbit_ref& bref) +{ + types e; + e.unpack(bref); + set(e); + switch (type_) { + case types::periodicity10ms: + break; + case types::periodicity20ms: + HANDLE_CODE(unpack_integer(c.get<uint8_t>(), bref, (uint8_t)0u, (uint8_t)1u)); + break; + case types::periodicity40ms: + HANDLE_CODE(unpack_integer(c.get<uint8_t>(), bref, (uint8_t)0u, (uint8_t)3u)); + break; + case types::periodicity80ms: + HANDLE_CODE(unpack_integer(c.get<uint8_t>(), bref, (uint8_t)0u, (uint8_t)7u)); + break; + case types::periodicity160ms: + HANDLE_CODE(unpack_integer(c.get<uint8_t>(), bref, (uint8_t)0u, (uint8_t)15u)); + break; + case types::spare3: + break; + case types::spare2: + break; + case types::spare1: + break; + default: + log_invalid_choice_id(type_, "periodicity_start_pos_r16_c"); + return SRSASN_ERROR_DECODE_FAIL; + } + return SRSASN_SUCCESS; +} + +// ResourceReservationConfigDL-r16 ::= SEQUENCE +SRSASN_CODE res_reserv_cfg_dl_r16_s::pack(bit_ref& bref) const +{ + bref.pack(ext, 1); + HANDLE_CODE(bref.pack(res_reserv_freq_r16_present, 1)); + HANDLE_CODE(bref.pack(symbol_bitmap1_r16_present, 1)); + HANDLE_CODE(bref.pack(symbol_bitmap2_r16_present, 1)); + + HANDLE_CODE(periodicity_start_pos_r16.pack(bref)); + if (res_reserv_freq_r16_present) { + HANDLE_CODE(res_reserv_freq_r16.pack(bref)); + } + HANDLE_CODE(slot_bitmap_r16.pack(bref)); + if (symbol_bitmap1_r16_present) { + HANDLE_CODE(symbol_bitmap1_r16.pack(bref)); + } + if (symbol_bitmap2_r16_present) { + HANDLE_CODE(symbol_bitmap2_r16.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE res_reserv_cfg_dl_r16_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(bref.unpack(res_reserv_freq_r16_present, 1)); + HANDLE_CODE(bref.unpack(symbol_bitmap1_r16_present, 1)); + HANDLE_CODE(bref.unpack(symbol_bitmap2_r16_present, 1)); + + HANDLE_CODE(periodicity_start_pos_r16.unpack(bref)); + if (res_reserv_freq_r16_present) { + HANDLE_CODE(res_reserv_freq_r16.unpack(bref)); + } + HANDLE_CODE(slot_bitmap_r16.unpack(bref)); + if (symbol_bitmap1_r16_present) { + HANDLE_CODE(symbol_bitmap1_r16.unpack(bref)); + } + if (symbol_bitmap2_r16_present) { + HANDLE_CODE(symbol_bitmap2_r16.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void res_reserv_cfg_dl_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_fieldname("periodicityStartPos-r16"); + periodicity_start_pos_r16.to_json(j); + if (res_reserv_freq_r16_present) { + j.write_fieldname("resourceReservationFreq-r16"); + res_reserv_freq_r16.to_json(j); + } + j.write_fieldname("slotBitmap-r16"); + slot_bitmap_r16.to_json(j); + if (symbol_bitmap1_r16_present) { + j.write_str("symbolBitmap1-r16", symbol_bitmap1_r16.to_string()); + } + if (symbol_bitmap2_r16_present) { + j.write_str("symbolBitmap2-r16", symbol_bitmap2_r16.to_string()); + } + j.end_obj(); +} + +void res_reserv_cfg_dl_r16_s::res_reserv_freq_r16_c_::destroy_() +{ + switch (type_) { + case types::rbg_bitmap1dot4: + c.destroy<fixed_bitstring<6> >(); + break; + case types::rbg_bitmap3: + c.destroy<fixed_bitstring<8> >(); + break; + case types::rbg_bitmap5: + c.destroy<fixed_bitstring<13> >(); + break; + case types::rbg_bitmap10: + c.destroy<fixed_bitstring<17> >(); + break; + case types::rbg_bitmap15: + c.destroy<fixed_bitstring<19> >(); + break; + case types::rbg_bitmap20: + c.destroy<fixed_bitstring<25> >(); + break; + default: + break; + } +} +void res_reserv_cfg_dl_r16_s::res_reserv_freq_r16_c_::set(types::options e) +{ + destroy_(); + type_ = e; + switch (type_) { + case types::rbg_bitmap1dot4: + c.init<fixed_bitstring<6> >(); + break; + case types::rbg_bitmap3: + c.init<fixed_bitstring<8> >(); + break; + case types::rbg_bitmap5: + c.init<fixed_bitstring<13> >(); + break; + case types::rbg_bitmap10: + c.init<fixed_bitstring<17> >(); + break; + case types::rbg_bitmap15: + c.init<fixed_bitstring<19> >(); + break; + case types::rbg_bitmap20: + c.init<fixed_bitstring<25> >(); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "res_reserv_cfg_dl_r16_s::res_reserv_freq_r16_c_"); + } +} +res_reserv_cfg_dl_r16_s::res_reserv_freq_r16_c_::res_reserv_freq_r16_c_( + const res_reserv_cfg_dl_r16_s::res_reserv_freq_r16_c_& other) +{ + type_ = other.type(); + switch (type_) { + case types::rbg_bitmap1dot4: + c.init(other.c.get<fixed_bitstring<6> >()); + break; + case types::rbg_bitmap3: + c.init(other.c.get<fixed_bitstring<8> >()); + break; + case types::rbg_bitmap5: + c.init(other.c.get<fixed_bitstring<13> >()); + break; + case types::rbg_bitmap10: + c.init(other.c.get<fixed_bitstring<17> >()); + break; + case types::rbg_bitmap15: + c.init(other.c.get<fixed_bitstring<19> >()); + break; + case types::rbg_bitmap20: + c.init(other.c.get<fixed_bitstring<25> >()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "res_reserv_cfg_dl_r16_s::res_reserv_freq_r16_c_"); + } +} +res_reserv_cfg_dl_r16_s::res_reserv_freq_r16_c_& +res_reserv_cfg_dl_r16_s::res_reserv_freq_r16_c_::operator=(const res_reserv_cfg_dl_r16_s::res_reserv_freq_r16_c_& other) +{ + if (this == &other) { + return *this; + } + set(other.type()); + switch (type_) { + case types::rbg_bitmap1dot4: + c.set(other.c.get<fixed_bitstring<6> >()); + break; + case types::rbg_bitmap3: + c.set(other.c.get<fixed_bitstring<8> >()); + break; + case types::rbg_bitmap5: + c.set(other.c.get<fixed_bitstring<13> >()); + break; + case types::rbg_bitmap10: + c.set(other.c.get<fixed_bitstring<17> >()); + break; + case types::rbg_bitmap15: + c.set(other.c.get<fixed_bitstring<19> >()); + break; + case types::rbg_bitmap20: + c.set(other.c.get<fixed_bitstring<25> >()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "res_reserv_cfg_dl_r16_s::res_reserv_freq_r16_c_"); + } + + return *this; +} +fixed_bitstring<6>& res_reserv_cfg_dl_r16_s::res_reserv_freq_r16_c_::set_rbg_bitmap1dot4() +{ + set(types::rbg_bitmap1dot4); + return c.get<fixed_bitstring<6> >(); +} +fixed_bitstring<8>& res_reserv_cfg_dl_r16_s::res_reserv_freq_r16_c_::set_rbg_bitmap3() +{ + set(types::rbg_bitmap3); + return c.get<fixed_bitstring<8> >(); +} +fixed_bitstring<13>& res_reserv_cfg_dl_r16_s::res_reserv_freq_r16_c_::set_rbg_bitmap5() +{ + set(types::rbg_bitmap5); + return c.get<fixed_bitstring<13> >(); +} +fixed_bitstring<17>& res_reserv_cfg_dl_r16_s::res_reserv_freq_r16_c_::set_rbg_bitmap10() +{ + set(types::rbg_bitmap10); + return c.get<fixed_bitstring<17> >(); +} +fixed_bitstring<19>& res_reserv_cfg_dl_r16_s::res_reserv_freq_r16_c_::set_rbg_bitmap15() +{ + set(types::rbg_bitmap15); + return c.get<fixed_bitstring<19> >(); +} +fixed_bitstring<25>& res_reserv_cfg_dl_r16_s::res_reserv_freq_r16_c_::set_rbg_bitmap20() +{ + set(types::rbg_bitmap20); + return c.get<fixed_bitstring<25> >(); +} +void res_reserv_cfg_dl_r16_s::res_reserv_freq_r16_c_::to_json(json_writer& j) const +{ + j.start_obj(); + switch (type_) { + case types::rbg_bitmap1dot4: + j.write_str("rbg-Bitmap1dot4", c.get<fixed_bitstring<6> >().to_string()); + break; + case types::rbg_bitmap3: + j.write_str("rbg-Bitmap3", c.get<fixed_bitstring<8> >().to_string()); + break; + case types::rbg_bitmap5: + j.write_str("rbg-Bitmap5", c.get<fixed_bitstring<13> >().to_string()); + break; + case types::rbg_bitmap10: + j.write_str("rbg-Bitmap10", c.get<fixed_bitstring<17> >().to_string()); + break; + case types::rbg_bitmap15: + j.write_str("rbg-Bitmap15", c.get<fixed_bitstring<19> >().to_string()); + break; + case types::rbg_bitmap20: + j.write_str("rbg-Bitmap20", c.get<fixed_bitstring<25> >().to_string()); + break; + default: + log_invalid_choice_id(type_, "res_reserv_cfg_dl_r16_s::res_reserv_freq_r16_c_"); + } + j.end_obj(); +} +SRSASN_CODE res_reserv_cfg_dl_r16_s::res_reserv_freq_r16_c_::pack(bit_ref& bref) const +{ + type_.pack(bref); + switch (type_) { + case types::rbg_bitmap1dot4: + HANDLE_CODE(c.get<fixed_bitstring<6> >().pack(bref)); + break; + case types::rbg_bitmap3: + HANDLE_CODE(c.get<fixed_bitstring<8> >().pack(bref)); + break; + case types::rbg_bitmap5: + HANDLE_CODE(c.get<fixed_bitstring<13> >().pack(bref)); + break; + case types::rbg_bitmap10: + HANDLE_CODE(c.get<fixed_bitstring<17> >().pack(bref)); + break; + case types::rbg_bitmap15: + HANDLE_CODE(c.get<fixed_bitstring<19> >().pack(bref)); + break; + case types::rbg_bitmap20: + HANDLE_CODE(c.get<fixed_bitstring<25> >().pack(bref)); + break; + default: + log_invalid_choice_id(type_, "res_reserv_cfg_dl_r16_s::res_reserv_freq_r16_c_"); + return SRSASN_ERROR_ENCODE_FAIL; + } + return SRSASN_SUCCESS; +} +SRSASN_CODE res_reserv_cfg_dl_r16_s::res_reserv_freq_r16_c_::unpack(cbit_ref& bref) +{ + types e; + e.unpack(bref); + set(e); + switch (type_) { + case types::rbg_bitmap1dot4: + HANDLE_CODE(c.get<fixed_bitstring<6> >().unpack(bref)); + break; + case types::rbg_bitmap3: + HANDLE_CODE(c.get<fixed_bitstring<8> >().unpack(bref)); + break; + case types::rbg_bitmap5: + HANDLE_CODE(c.get<fixed_bitstring<13> >().unpack(bref)); + break; + case types::rbg_bitmap10: + HANDLE_CODE(c.get<fixed_bitstring<17> >().unpack(bref)); + break; + case types::rbg_bitmap15: + HANDLE_CODE(c.get<fixed_bitstring<19> >().unpack(bref)); + break; + case types::rbg_bitmap20: + HANDLE_CODE(c.get<fixed_bitstring<25> >().unpack(bref)); + break; + default: + log_invalid_choice_id(type_, "res_reserv_cfg_dl_r16_s::res_reserv_freq_r16_c_"); + return SRSASN_ERROR_DECODE_FAIL; + } + return SRSASN_SUCCESS; +} + +void res_reserv_cfg_dl_r16_s::slot_bitmap_r16_c_::destroy_() +{ + switch (type_) { + case types::slot_pattern10ms: + c.destroy<fixed_bitstring<20> >(); + break; + case types::slot_pattern40ms: + c.destroy<fixed_bitstring<80> >(); + break; + default: + break; + } +} +void res_reserv_cfg_dl_r16_s::slot_bitmap_r16_c_::set(types::options e) +{ + destroy_(); + type_ = e; + switch (type_) { + case types::slot_pattern10ms: + c.init<fixed_bitstring<20> >(); + break; + case types::slot_pattern40ms: + c.init<fixed_bitstring<80> >(); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "res_reserv_cfg_dl_r16_s::slot_bitmap_r16_c_"); + } +} +res_reserv_cfg_dl_r16_s::slot_bitmap_r16_c_::slot_bitmap_r16_c_( + const res_reserv_cfg_dl_r16_s::slot_bitmap_r16_c_& other) +{ + type_ = other.type(); + switch (type_) { + case types::slot_pattern10ms: + c.init(other.c.get<fixed_bitstring<20> >()); + break; + case types::slot_pattern40ms: + c.init(other.c.get<fixed_bitstring<80> >()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "res_reserv_cfg_dl_r16_s::slot_bitmap_r16_c_"); + } +} +res_reserv_cfg_dl_r16_s::slot_bitmap_r16_c_& +res_reserv_cfg_dl_r16_s::slot_bitmap_r16_c_::operator=(const res_reserv_cfg_dl_r16_s::slot_bitmap_r16_c_& other) +{ + if (this == &other) { + return *this; + } + set(other.type()); + switch (type_) { + case types::slot_pattern10ms: + c.set(other.c.get<fixed_bitstring<20> >()); + break; + case types::slot_pattern40ms: + c.set(other.c.get<fixed_bitstring<80> >()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "res_reserv_cfg_dl_r16_s::slot_bitmap_r16_c_"); + } + + return *this; +} +fixed_bitstring<20>& res_reserv_cfg_dl_r16_s::slot_bitmap_r16_c_::set_slot_pattern10ms() +{ + set(types::slot_pattern10ms); + return c.get<fixed_bitstring<20> >(); +} +fixed_bitstring<80>& res_reserv_cfg_dl_r16_s::slot_bitmap_r16_c_::set_slot_pattern40ms() +{ + set(types::slot_pattern40ms); + return c.get<fixed_bitstring<80> >(); +} +void res_reserv_cfg_dl_r16_s::slot_bitmap_r16_c_::to_json(json_writer& j) const +{ + j.start_obj(); + switch (type_) { + case types::slot_pattern10ms: + j.write_str("slotPattern10ms", c.get<fixed_bitstring<20> >().to_string()); + break; + case types::slot_pattern40ms: + j.write_str("slotPattern40ms", c.get<fixed_bitstring<80> >().to_string()); + break; + default: + log_invalid_choice_id(type_, "res_reserv_cfg_dl_r16_s::slot_bitmap_r16_c_"); + } + j.end_obj(); +} +SRSASN_CODE res_reserv_cfg_dl_r16_s::slot_bitmap_r16_c_::pack(bit_ref& bref) const +{ + type_.pack(bref); + switch (type_) { + case types::slot_pattern10ms: + HANDLE_CODE(c.get<fixed_bitstring<20> >().pack(bref)); + break; + case types::slot_pattern40ms: + HANDLE_CODE(c.get<fixed_bitstring<80> >().pack(bref)); + break; + default: + log_invalid_choice_id(type_, "res_reserv_cfg_dl_r16_s::slot_bitmap_r16_c_"); + return SRSASN_ERROR_ENCODE_FAIL; + } + return SRSASN_SUCCESS; +} +SRSASN_CODE res_reserv_cfg_dl_r16_s::slot_bitmap_r16_c_::unpack(cbit_ref& bref) +{ + types e; + e.unpack(bref); + set(e); + switch (type_) { + case types::slot_pattern10ms: + HANDLE_CODE(c.get<fixed_bitstring<20> >().unpack(bref)); + break; + case types::slot_pattern40ms: + HANDLE_CODE(c.get<fixed_bitstring<80> >().unpack(bref)); + break; + default: + log_invalid_choice_id(type_, "res_reserv_cfg_dl_r16_s::slot_bitmap_r16_c_"); + return SRSASN_ERROR_DECODE_FAIL; + } + return SRSASN_SUCCESS; +} + +// ResourceReservationConfigUL-r16 ::= SEQUENCE +SRSASN_CODE res_reserv_cfg_ul_r16_s::pack(bit_ref& bref) const +{ + bref.pack(ext, 1); + HANDLE_CODE(bref.pack(slot_bitmap_r16_present, 1)); + HANDLE_CODE(bref.pack(symbol_bitmap1_r16_present, 1)); + HANDLE_CODE(bref.pack(symbol_bitmap2_r16_present, 1)); + + HANDLE_CODE(periodicity_start_pos_r16.pack(bref)); + if (slot_bitmap_r16_present) { + HANDLE_CODE(slot_bitmap_r16.pack(bref)); + } + if (symbol_bitmap1_r16_present) { + HANDLE_CODE(symbol_bitmap1_r16.pack(bref)); + } + if (symbol_bitmap2_r16_present) { + HANDLE_CODE(symbol_bitmap2_r16.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE res_reserv_cfg_ul_r16_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(bref.unpack(slot_bitmap_r16_present, 1)); + HANDLE_CODE(bref.unpack(symbol_bitmap1_r16_present, 1)); + HANDLE_CODE(bref.unpack(symbol_bitmap2_r16_present, 1)); + + HANDLE_CODE(periodicity_start_pos_r16.unpack(bref)); + if (slot_bitmap_r16_present) { + HANDLE_CODE(slot_bitmap_r16.unpack(bref)); + } + if (symbol_bitmap1_r16_present) { + HANDLE_CODE(symbol_bitmap1_r16.unpack(bref)); + } + if (symbol_bitmap2_r16_present) { + HANDLE_CODE(symbol_bitmap2_r16.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void res_reserv_cfg_ul_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_fieldname("periodicityStartPos-r16"); + periodicity_start_pos_r16.to_json(j); + if (slot_bitmap_r16_present) { + j.write_fieldname("slotBitmap-r16"); + slot_bitmap_r16.to_json(j); + } + if (symbol_bitmap1_r16_present) { + j.write_str("symbolBitmap1-r16", symbol_bitmap1_r16.to_string()); + } + if (symbol_bitmap2_r16_present) { + j.write_str("symbolBitmap2-r16", symbol_bitmap2_r16.to_string()); + } + j.end_obj(); +} + +void res_reserv_cfg_ul_r16_s::slot_bitmap_r16_c_::destroy_() +{ + switch (type_) { + case types::slot_pattern10ms: + c.destroy<fixed_bitstring<20> >(); + break; + case types::slot_pattern40ms: + c.destroy<fixed_bitstring<80> >(); + break; + default: + break; + } +} +void res_reserv_cfg_ul_r16_s::slot_bitmap_r16_c_::set(types::options e) +{ + destroy_(); + type_ = e; + switch (type_) { + case types::slot_pattern10ms: + c.init<fixed_bitstring<20> >(); + break; + case types::slot_pattern40ms: + c.init<fixed_bitstring<80> >(); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "res_reserv_cfg_ul_r16_s::slot_bitmap_r16_c_"); + } +} +res_reserv_cfg_ul_r16_s::slot_bitmap_r16_c_::slot_bitmap_r16_c_( + const res_reserv_cfg_ul_r16_s::slot_bitmap_r16_c_& other) +{ + type_ = other.type(); + switch (type_) { + case types::slot_pattern10ms: + c.init(other.c.get<fixed_bitstring<20> >()); + break; + case types::slot_pattern40ms: + c.init(other.c.get<fixed_bitstring<80> >()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "res_reserv_cfg_ul_r16_s::slot_bitmap_r16_c_"); + } +} +res_reserv_cfg_ul_r16_s::slot_bitmap_r16_c_& +res_reserv_cfg_ul_r16_s::slot_bitmap_r16_c_::operator=(const res_reserv_cfg_ul_r16_s::slot_bitmap_r16_c_& other) +{ + if (this == &other) { + return *this; + } + set(other.type()); + switch (type_) { + case types::slot_pattern10ms: + c.set(other.c.get<fixed_bitstring<20> >()); + break; + case types::slot_pattern40ms: + c.set(other.c.get<fixed_bitstring<80> >()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "res_reserv_cfg_ul_r16_s::slot_bitmap_r16_c_"); + } + + return *this; +} +fixed_bitstring<20>& res_reserv_cfg_ul_r16_s::slot_bitmap_r16_c_::set_slot_pattern10ms() +{ + set(types::slot_pattern10ms); + return c.get<fixed_bitstring<20> >(); +} +fixed_bitstring<80>& res_reserv_cfg_ul_r16_s::slot_bitmap_r16_c_::set_slot_pattern40ms() +{ + set(types::slot_pattern40ms); + return c.get<fixed_bitstring<80> >(); +} +void res_reserv_cfg_ul_r16_s::slot_bitmap_r16_c_::to_json(json_writer& j) const +{ + j.start_obj(); + switch (type_) { + case types::slot_pattern10ms: + j.write_str("slotPattern10ms", c.get<fixed_bitstring<20> >().to_string()); + break; + case types::slot_pattern40ms: + j.write_str("slotPattern40ms", c.get<fixed_bitstring<80> >().to_string()); + break; + default: + log_invalid_choice_id(type_, "res_reserv_cfg_ul_r16_s::slot_bitmap_r16_c_"); + } + j.end_obj(); +} +SRSASN_CODE res_reserv_cfg_ul_r16_s::slot_bitmap_r16_c_::pack(bit_ref& bref) const +{ + type_.pack(bref); + switch (type_) { + case types::slot_pattern10ms: + HANDLE_CODE(c.get<fixed_bitstring<20> >().pack(bref)); + break; + case types::slot_pattern40ms: + HANDLE_CODE(c.get<fixed_bitstring<80> >().pack(bref)); + break; + default: + log_invalid_choice_id(type_, "res_reserv_cfg_ul_r16_s::slot_bitmap_r16_c_"); + return SRSASN_ERROR_ENCODE_FAIL; + } + return SRSASN_SUCCESS; +} +SRSASN_CODE res_reserv_cfg_ul_r16_s::slot_bitmap_r16_c_::unpack(cbit_ref& bref) +{ + types e; + e.unpack(bref); + set(e); + switch (type_) { + case types::slot_pattern10ms: + HANDLE_CODE(c.get<fixed_bitstring<20> >().unpack(bref)); + break; + case types::slot_pattern40ms: + HANDLE_CODE(c.get<fixed_bitstring<80> >().unpack(bref)); + break; + default: + log_invalid_choice_id(type_, "res_reserv_cfg_ul_r16_s::slot_bitmap_r16_c_"); + return SRSASN_ERROR_DECODE_FAIL; + } + return SRSASN_SUCCESS; +} + // NZP-FrequencyDensity-r14 ::= ENUMERATED const char* nzp_freq_density_r14_opts::to_string() const { @@ -9037,6 +9850,86 @@ uint8_t ant_info_ul_stti_r15_s::tx_mode_ul_stti_r15_opts::to_number() const return map_enum_number(options, 2, value, "ant_info_ul_stti_r15_s::tx_mode_ul_stti_r15_e_"); } +// CE-PDSCH-14HARQ-Config-r17 ::= SEQUENCE +SRSASN_CODE ce_pdsch_minus14_harq_cfg_r17_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(ce_harq_ack_delay_r17.pack(bref)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE ce_pdsch_minus14_harq_cfg_r17_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(ce_harq_ack_delay_r17.unpack(bref)); + + return SRSASN_SUCCESS; +} +void ce_pdsch_minus14_harq_cfg_r17_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_str("ce-HARQ-AckDelay-r17", ce_harq_ack_delay_r17.to_string()); + j.end_obj(); +} + +const char* ce_pdsch_minus14_harq_cfg_r17_s::ce_harq_ack_delay_r17_opts::to_string() const +{ + static const char* options[] = {"alt-1", "alt-2e"}; + return convert_enum_idx(options, 2, value, "ce_pdsch_minus14_harq_cfg_r17_s::ce_harq_ack_delay_r17_e_"); +} +int8_t ce_pdsch_minus14_harq_cfg_r17_s::ce_harq_ack_delay_r17_opts::to_number() const +{ + static const int8_t options[] = {-1, -2}; + return map_enum_number(options, 2, value, "ce_pdsch_minus14_harq_cfg_r17_s::ce_harq_ack_delay_r17_e_"); +} + +// CE-PDSCH-MultiTB-Config-r16 ::= SEQUENCE +SRSASN_CODE ce_pdsch_multi_tb_cfg_r16_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(interleaving_r16_present, 1)); + HANDLE_CODE(bref.pack(harq_ack_bundling_r16_present, 1)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE ce_pdsch_multi_tb_cfg_r16_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(interleaving_r16_present, 1)); + HANDLE_CODE(bref.unpack(harq_ack_bundling_r16_present, 1)); + + return SRSASN_SUCCESS; +} +void ce_pdsch_multi_tb_cfg_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (interleaving_r16_present) { + j.write_str("interleaving-r16", "on"); + } + if (harq_ack_bundling_r16_present) { + j.write_str("harq-AckBundling-r16", "on"); + } + j.end_obj(); +} + +// CE-PUSCH-MultiTB-Config-r16 ::= SEQUENCE +SRSASN_CODE ce_pusch_multi_tb_cfg_r16_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(interleaving_r16_present, 1)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE ce_pusch_multi_tb_cfg_r16_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(interleaving_r16_present, 1)); + + return SRSASN_SUCCESS; +} +void ce_pusch_multi_tb_cfg_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (interleaving_r16_present) { + j.write_str("interleaving-r16", "on"); + } + j.end_obj(); +} + // CQI-ReportConfig-r15 ::= CHOICE void cqi_report_cfg_r15_c::set(types::options e) { @@ -10508,6 +11401,133 @@ bool srs_cc_set_idx_r14_s::operator==(const srs_cc_set_idx_r14_s& other) const return cc_set_idx_r14 == other.cc_set_idx_r14 and cc_idx_in_one_cc_set_r14 == other.cc_idx_in_one_cc_set_r14; } +// SRS-ConfigAdd-r16 ::= SEQUENCE +SRSASN_CODE srs_cfg_add_r16_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(srs_guard_symbol_as_add_r16_present, 1)); + HANDLE_CODE(bref.pack(srs_guard_symbol_fh_add_r16_present, 1)); + + HANDLE_CODE(srs_rep_num_add_r16.pack(bref)); + HANDLE_CODE(srs_bw_add_r16.pack(bref)); + HANDLE_CODE(srs_hop_bw_add_r16.pack(bref)); + HANDLE_CODE(pack_integer(bref, srs_freq_domain_pos_add_r16, (uint8_t)0u, (uint8_t)23u)); + HANDLE_CODE(srs_ant_port_add_r16.pack(bref)); + HANDLE_CODE(srs_cyclic_shift_add_r16.pack(bref)); + HANDLE_CODE(srs_tx_comb_num_add_r16.pack(bref)); + HANDLE_CODE(pack_integer(bref, srs_tx_comb_add_r16, (uint8_t)0u, (uint8_t)3u)); + HANDLE_CODE(pack_integer(bref, srs_start_pos_add_r16, (uint8_t)1u, (uint8_t)13u)); + HANDLE_CODE(pack_integer(bref, srs_dur_add_r16, (uint8_t)1u, (uint8_t)13u)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE srs_cfg_add_r16_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(srs_guard_symbol_as_add_r16_present, 1)); + HANDLE_CODE(bref.unpack(srs_guard_symbol_fh_add_r16_present, 1)); + + HANDLE_CODE(srs_rep_num_add_r16.unpack(bref)); + HANDLE_CODE(srs_bw_add_r16.unpack(bref)); + HANDLE_CODE(srs_hop_bw_add_r16.unpack(bref)); + HANDLE_CODE(unpack_integer(srs_freq_domain_pos_add_r16, bref, (uint8_t)0u, (uint8_t)23u)); + HANDLE_CODE(srs_ant_port_add_r16.unpack(bref)); + HANDLE_CODE(srs_cyclic_shift_add_r16.unpack(bref)); + HANDLE_CODE(srs_tx_comb_num_add_r16.unpack(bref)); + HANDLE_CODE(unpack_integer(srs_tx_comb_add_r16, bref, (uint8_t)0u, (uint8_t)3u)); + HANDLE_CODE(unpack_integer(srs_start_pos_add_r16, bref, (uint8_t)1u, (uint8_t)13u)); + HANDLE_CODE(unpack_integer(srs_dur_add_r16, bref, (uint8_t)1u, (uint8_t)13u)); + + return SRSASN_SUCCESS; +} +void srs_cfg_add_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_str("srs-RepNumAdd-r16", srs_rep_num_add_r16.to_string()); + j.write_str("srs-BandwidthAdd-r16", srs_bw_add_r16.to_string()); + j.write_str("srs-HoppingBandwidthAdd-r16", srs_hop_bw_add_r16.to_string()); + j.write_int("srs-FreqDomainPosAdd-r16", srs_freq_domain_pos_add_r16); + j.write_str("srs-AntennaPortAdd-r16", srs_ant_port_add_r16.to_string()); + j.write_str("srs-CyclicShiftAdd-r16", srs_cyclic_shift_add_r16.to_string()); + j.write_str("srs-TransmissionCombNumAdd-r16", srs_tx_comb_num_add_r16.to_string()); + j.write_int("srs-TransmissionCombAdd-r16", srs_tx_comb_add_r16); + j.write_int("srs-StartPosAdd-r16", srs_start_pos_add_r16); + j.write_int("srs-DurationAdd-r16", srs_dur_add_r16); + if (srs_guard_symbol_as_add_r16_present) { + j.write_str("srs-GuardSymbolAS-Add-r16", "enabled"); + } + if (srs_guard_symbol_fh_add_r16_present) { + j.write_str("srs-GuardSymbolFH-Add-r16", "enabled"); + } + j.end_obj(); +} +bool srs_cfg_add_r16_s::operator==(const srs_cfg_add_r16_s& other) const +{ + return srs_rep_num_add_r16 == other.srs_rep_num_add_r16 and srs_bw_add_r16 == other.srs_bw_add_r16 and + srs_hop_bw_add_r16 == other.srs_hop_bw_add_r16 and + srs_freq_domain_pos_add_r16 == other.srs_freq_domain_pos_add_r16 and + srs_ant_port_add_r16 == other.srs_ant_port_add_r16 and + srs_cyclic_shift_add_r16 == other.srs_cyclic_shift_add_r16 and + srs_tx_comb_num_add_r16 == other.srs_tx_comb_num_add_r16 and + srs_tx_comb_add_r16 == other.srs_tx_comb_add_r16 and srs_start_pos_add_r16 == other.srs_start_pos_add_r16 and + srs_dur_add_r16 == other.srs_dur_add_r16 and + srs_guard_symbol_as_add_r16_present == other.srs_guard_symbol_as_add_r16_present and + srs_guard_symbol_fh_add_r16_present == other.srs_guard_symbol_fh_add_r16_present; +} + +const char* srs_cfg_add_r16_s::srs_rep_num_add_r16_opts::to_string() const +{ + static const char* options[] = {"n1", "n2", "n3", "n4", "n6", "n7", "n8", "n9", "n12", "n13"}; + return convert_enum_idx(options, 10, value, "srs_cfg_add_r16_s::srs_rep_num_add_r16_e_"); +} +uint8_t srs_cfg_add_r16_s::srs_rep_num_add_r16_opts::to_number() const +{ + static const uint8_t options[] = {1, 2, 3, 4, 6, 7, 8, 9, 12, 13}; + return map_enum_number(options, 10, value, "srs_cfg_add_r16_s::srs_rep_num_add_r16_e_"); +} + +const char* srs_cfg_add_r16_s::srs_bw_add_r16_opts::to_string() const +{ + static const char* options[] = {"bw0", "bw1", "bw2", "bw3"}; + return convert_enum_idx(options, 4, value, "srs_cfg_add_r16_s::srs_bw_add_r16_e_"); +} +uint8_t srs_cfg_add_r16_s::srs_bw_add_r16_opts::to_number() const +{ + static const uint8_t options[] = {0, 1, 2, 3}; + return map_enum_number(options, 4, value, "srs_cfg_add_r16_s::srs_bw_add_r16_e_"); +} + +const char* srs_cfg_add_r16_s::srs_hop_bw_add_r16_opts::to_string() const +{ + static const char* options[] = {"hbw0", "hbw1", "hbw2", "hbw3"}; + return convert_enum_idx(options, 4, value, "srs_cfg_add_r16_s::srs_hop_bw_add_r16_e_"); +} +uint8_t srs_cfg_add_r16_s::srs_hop_bw_add_r16_opts::to_number() const +{ + static const uint8_t options[] = {0, 1, 2, 3}; + return map_enum_number(options, 4, value, "srs_cfg_add_r16_s::srs_hop_bw_add_r16_e_"); +} + +const char* srs_cfg_add_r16_s::srs_cyclic_shift_add_r16_opts::to_string() const +{ + static const char* options[] = {"cs0", "cs1", "cs2", "cs3", "cs4", "cs5", "cs6", "cs7", "cs8", "cs9", "cs10", "cs11"}; + return convert_enum_idx(options, 12, value, "srs_cfg_add_r16_s::srs_cyclic_shift_add_r16_e_"); +} +uint8_t srs_cfg_add_r16_s::srs_cyclic_shift_add_r16_opts::to_number() const +{ + static const uint8_t options[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}; + return map_enum_number(options, 12, value, "srs_cfg_add_r16_s::srs_cyclic_shift_add_r16_e_"); +} + +const char* srs_cfg_add_r16_s::srs_tx_comb_num_add_r16_opts::to_string() const +{ + static const char* options[] = {"n2", "n4"}; + return convert_enum_idx(options, 2, value, "srs_cfg_add_r16_s::srs_tx_comb_num_add_r16_e_"); +} +uint8_t srs_cfg_add_r16_s::srs_tx_comb_num_add_r16_opts::to_number() const +{ + static const uint8_t options[] = {2, 4}; + return map_enum_number(options, 2, value, "srs_cfg_add_r16_s::srs_tx_comb_num_add_r16_e_"); +} + // SRS-ConfigAp-r10 ::= SEQUENCE SRSASN_CODE srs_cfg_ap_r10_s::pack(bit_ref& bref) const { @@ -13399,6 +14419,63 @@ const char* pdsch_cfg_ded_v1530_s::alt_mcs_table_scaling_cfg_r15_opts::to_number return convert_enum_idx(options, 4, value, "pdsch_cfg_ded_v1530_s::alt_mcs_table_scaling_cfg_r15_e_"); } +// PDSCH-ConfigDedicated-v1610 ::= SEQUENCE +SRSASN_CODE pdsch_cfg_ded_v1610_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(ce_pdsch_multi_tb_cfg_r16.pack(bref)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE pdsch_cfg_ded_v1610_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(ce_pdsch_multi_tb_cfg_r16.unpack(bref)); + + return SRSASN_SUCCESS; +} +void pdsch_cfg_ded_v1610_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_fieldname("ce-PDSCH-MultiTB-Config-r16"); + ce_pdsch_multi_tb_cfg_r16.to_json(j); + j.end_obj(); +} + +// PDSCH-ConfigDedicated-v1700 ::= SEQUENCE +SRSASN_CODE pdsch_cfg_ded_v1700_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(ce_pdsch_minus14_harq_cfg_r17_present, 1)); + HANDLE_CODE(bref.pack(ce_pdsch_max_tbs_r17_present, 1)); + + if (ce_pdsch_minus14_harq_cfg_r17_present) { + HANDLE_CODE(ce_pdsch_minus14_harq_cfg_r17.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE pdsch_cfg_ded_v1700_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(ce_pdsch_minus14_harq_cfg_r17_present, 1)); + HANDLE_CODE(bref.unpack(ce_pdsch_max_tbs_r17_present, 1)); + + if (ce_pdsch_minus14_harq_cfg_r17_present) { + HANDLE_CODE(ce_pdsch_minus14_harq_cfg_r17.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void pdsch_cfg_ded_v1700_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (ce_pdsch_minus14_harq_cfg_r17_present) { + j.write_fieldname("ce-PDSCH-14HARQ-Config-r17"); + ce_pdsch_minus14_harq_cfg_r17.to_json(j); + } + if (ce_pdsch_max_tbs_r17_present) { + j.write_str("ce-PDSCH-maxTBS-r17", "enabled"); + } + j.end_obj(); +} + // PUCCH-ConfigDedicated ::= SEQUENCE SRSASN_CODE pucch_cfg_ded_s::pack(bit_ref& bref) const { @@ -16161,6 +17238,27 @@ SRSASN_CODE pusch_cfg_ded_v1530_s::ce_pusch_sub_prb_cfg_r15_c_::unpack(cbit_ref& return SRSASN_SUCCESS; } +// PUSCH-ConfigDedicated-v1610 ::= SEQUENCE +SRSASN_CODE pusch_cfg_ded_v1610_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(ce_pusch_multi_tb_cfg_r16.pack(bref)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE pusch_cfg_ded_v1610_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(ce_pusch_multi_tb_cfg_r16.unpack(bref)); + + return SRSASN_SUCCESS; +} +void pusch_cfg_ded_v1610_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_fieldname("ce-PUSCH-MultiTB-Config-r16"); + ce_pusch_multi_tb_cfg_r16.to_json(j); + j.end_obj(); +} + // PUSCH-EnhancementsConfig-r14 ::= CHOICE void pusch_enhance_cfg_r14_c::set(types::options e) { @@ -16758,6 +17856,68 @@ bool phys_cfg_ded_stti_r15_c::operator==(const phys_cfg_ded_stti_r15_c& other) c (not c.short_tti_r15_present or c.short_tti_r15 == other.c.short_tti_r15); } +// ResourceReservationConfigDedicatedDL-r16 ::= SEQUENCE +SRSASN_CODE res_reserv_cfg_ded_dl_r16_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(res_reserv_ded_dl_r16_present, 1)); + + if (res_reserv_ded_dl_r16_present) { + HANDLE_CODE(res_reserv_ded_dl_r16.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE res_reserv_cfg_ded_dl_r16_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(res_reserv_ded_dl_r16_present, 1)); + + if (res_reserv_ded_dl_r16_present) { + HANDLE_CODE(res_reserv_ded_dl_r16.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void res_reserv_cfg_ded_dl_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (res_reserv_ded_dl_r16_present) { + j.write_fieldname("resourceReservationDedicatedDL-r16"); + res_reserv_ded_dl_r16.to_json(j); + } + j.end_obj(); +} + +// ResourceReservationConfigDedicatedUL-r16 ::= SEQUENCE +SRSASN_CODE res_reserv_cfg_ded_ul_r16_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(res_reserv_ded_ul_r16_present, 1)); + + if (res_reserv_ded_ul_r16_present) { + HANDLE_CODE(res_reserv_ded_ul_r16.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE res_reserv_cfg_ded_ul_r16_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(res_reserv_ded_ul_r16_present, 1)); + + if (res_reserv_ded_ul_r16_present) { + HANDLE_CODE(res_reserv_ded_ul_r16.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void res_reserv_cfg_ded_ul_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (res_reserv_ded_ul_r16_present) { + j.write_fieldname("resourceReservationDedicatedUL-r16"); + res_reserv_ded_ul_r16.to_json(j); + } + j.end_obj(); +} + // SPUCCH-Config-v1550 ::= CHOICE void spucch_cfg_v1550_c::set(types::options e) { @@ -17317,6 +18477,136 @@ uint8_t srs_ul_cfg_ded_v1310_c::setup_s_::tx_comb_num_r13_opts::to_number() cons return map_enum_number(options, 2, value, "srs_ul_cfg_ded_v1310_c::setup_s_::tx_comb_num_r13_e_"); } +// SoundingRS-UL-ConfigDedicatedAdd-r16 ::= SEQUENCE +SRSASN_CODE srs_ul_cfg_ded_add_r16_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(srs_cfg_ap_dci_format4_r16_present, 1)); + HANDLE_CODE(bref.pack(srs_activ_ap_r13_present, 1)); + + HANDLE_CODE(pack_integer(bref, srs_cfg_idx_ap_r16, (uint8_t)0u, (uint8_t)31u)); + if (srs_cfg_ap_dci_format4_r16_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, srs_cfg_ap_dci_format4_r16, 1, 3)); + } + if (srs_activ_ap_r13_present) { + HANDLE_CODE(srs_activ_ap_r13.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE srs_ul_cfg_ded_add_r16_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(srs_cfg_ap_dci_format4_r16_present, 1)); + HANDLE_CODE(bref.unpack(srs_activ_ap_r13_present, 1)); + + HANDLE_CODE(unpack_integer(srs_cfg_idx_ap_r16, bref, (uint8_t)0u, (uint8_t)31u)); + if (srs_cfg_ap_dci_format4_r16_present) { + HANDLE_CODE(unpack_dyn_seq_of(srs_cfg_ap_dci_format4_r16, bref, 1, 3)); + } + if (srs_activ_ap_r13_present) { + HANDLE_CODE(srs_activ_ap_r13.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void srs_ul_cfg_ded_add_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_int("srs-ConfigIndexAp-r16", srs_cfg_idx_ap_r16); + if (srs_cfg_ap_dci_format4_r16_present) { + j.start_array("srs-ConfigApDCI-Format4-r16"); + for (const auto& e1 : srs_cfg_ap_dci_format4_r16) { + e1.to_json(j); + } + j.end_array(); + } + if (srs_activ_ap_r13_present) { + j.write_fieldname("srs-ActivateAp-r13"); + srs_activ_ap_r13.to_json(j); + } + j.end_obj(); +} +bool srs_ul_cfg_ded_add_r16_s::operator==(const srs_ul_cfg_ded_add_r16_s& other) const +{ + return srs_cfg_idx_ap_r16 == other.srs_cfg_idx_ap_r16 and + srs_cfg_ap_dci_format4_r16_present == other.srs_cfg_ap_dci_format4_r16_present and + (not srs_cfg_ap_dci_format4_r16_present or srs_cfg_ap_dci_format4_r16 == other.srs_cfg_ap_dci_format4_r16) and + srs_activ_ap_r13_present == other.srs_activ_ap_r13_present and + (not srs_activ_ap_r13_present or srs_activ_ap_r13 == other.srs_activ_ap_r13); +} + +void srs_ul_cfg_ded_add_r16_s::srs_activ_ap_r13_c_::set(types::options e) +{ + type_ = e; +} +void srs_ul_cfg_ded_add_r16_s::srs_activ_ap_r13_c_::set_release() +{ + set(types::release); +} +srs_ul_cfg_ded_add_r16_s::srs_activ_ap_r13_c_::setup_s_& srs_ul_cfg_ded_add_r16_s::srs_activ_ap_r13_c_::set_setup() +{ + set(types::setup); + return c; +} +void srs_ul_cfg_ded_add_r16_s::srs_activ_ap_r13_c_::to_json(json_writer& j) const +{ + j.start_obj(); + switch (type_) { + case types::release: + break; + case types::setup: + j.write_fieldname("setup"); + j.start_obj(); + j.write_fieldname("srs-ConfigApDCI-Format0-r16"); + c.srs_cfg_ap_dci_format0_r16.to_json(j); + j.write_fieldname("srs-ConfigApDCI-Format1a2b2c-r16"); + c.srs_cfg_ap_dci_format1a2b2c_r16.to_json(j); + j.end_obj(); + break; + default: + log_invalid_choice_id(type_, "srs_ul_cfg_ded_add_r16_s::srs_activ_ap_r13_c_"); + } + j.end_obj(); +} +SRSASN_CODE srs_ul_cfg_ded_add_r16_s::srs_activ_ap_r13_c_::pack(bit_ref& bref) const +{ + type_.pack(bref); + switch (type_) { + case types::release: + break; + case types::setup: + HANDLE_CODE(c.srs_cfg_ap_dci_format0_r16.pack(bref)); + HANDLE_CODE(c.srs_cfg_ap_dci_format1a2b2c_r16.pack(bref)); + break; + default: + log_invalid_choice_id(type_, "srs_ul_cfg_ded_add_r16_s::srs_activ_ap_r13_c_"); + return SRSASN_ERROR_ENCODE_FAIL; + } + return SRSASN_SUCCESS; +} +SRSASN_CODE srs_ul_cfg_ded_add_r16_s::srs_activ_ap_r13_c_::unpack(cbit_ref& bref) +{ + types e; + e.unpack(bref); + set(e); + switch (type_) { + case types::release: + break; + case types::setup: + HANDLE_CODE(c.srs_cfg_ap_dci_format0_r16.unpack(bref)); + HANDLE_CODE(c.srs_cfg_ap_dci_format1a2b2c_r16.unpack(bref)); + break; + default: + log_invalid_choice_id(type_, "srs_ul_cfg_ded_add_r16_s::srs_activ_ap_r13_c_"); + return SRSASN_ERROR_DECODE_FAIL; + } + return SRSASN_SUCCESS; +} +bool srs_ul_cfg_ded_add_r16_s::srs_activ_ap_r13_c_::operator==(const srs_activ_ap_r13_c_& other) const +{ + return type() == other.type() and c.srs_cfg_ap_dci_format0_r16 == other.c.srs_cfg_ap_dci_format0_r16 and + c.srs_cfg_ap_dci_format1a2b2c_r16 == other.c.srs_cfg_ap_dci_format1a2b2c_r16; +} + // SoundingRS-UL-ConfigDedicatedAperiodic-r10 ::= CHOICE void srs_ul_cfg_ded_aperiodic_r10_c::set(types::options e) { @@ -18034,6 +19324,115 @@ uint8_t srs_ul_cfg_ded_up_pts_ext_r13_c::setup_s_::tx_comb_num_r13_opts::to_numb return map_enum_number(options, 2, value, "srs_ul_cfg_ded_up_pts_ext_r13_c::setup_s_::tx_comb_num_r13_e_"); } +// SoundingRS-VirtualCellID-r16 ::= SEQUENCE +SRSASN_CODE srs_virtual_cell_id_r16_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(pack_integer(bref, srs_virtual_cell_id_r16, (uint16_t)0u, (uint16_t)503u)); + HANDLE_CODE(bref.pack(srs_virtual_cell_id_all_srs_r16, 1)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE srs_virtual_cell_id_r16_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(unpack_integer(srs_virtual_cell_id_r16, bref, (uint16_t)0u, (uint16_t)503u)); + HANDLE_CODE(bref.unpack(srs_virtual_cell_id_all_srs_r16, 1)); + + return SRSASN_SUCCESS; +} +void srs_virtual_cell_id_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_int("srs-VirtualCellID-r16", srs_virtual_cell_id_r16); + j.write_bool("srs-VirtualCellID-AllSRS-r16", srs_virtual_cell_id_all_srs_r16); + j.end_obj(); +} +bool srs_virtual_cell_id_r16_s::operator==(const srs_virtual_cell_id_r16_s& other) const +{ + return srs_virtual_cell_id_r16 == other.srs_virtual_cell_id_r16 and + srs_virtual_cell_id_all_srs_r16 == other.srs_virtual_cell_id_all_srs_r16; +} + +// UplinkPowerControlAddSRS-r16 ::= SEQUENCE +SRSASN_CODE ul_pwr_ctrl_add_srs_r16_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(tpc_idx_srs_add_r16_present, 1)); + HANDLE_CODE(bref.pack(start_bit_of_format3_b_srs_add_r16_present, 1)); + HANDLE_CODE(bref.pack(field_type_format3_b_srs_add_r16_present, 1)); + HANDLE_CODE(bref.pack(p0_ue_srs_add_r16_present, 1)); + + if (tpc_idx_srs_add_r16_present) { + HANDLE_CODE(tpc_idx_srs_add_r16.pack(bref)); + } + if (start_bit_of_format3_b_srs_add_r16_present) { + HANDLE_CODE(pack_integer(bref, start_bit_of_format3_b_srs_add_r16, (uint8_t)0u, (uint8_t)31u)); + } + if (field_type_format3_b_srs_add_r16_present) { + HANDLE_CODE(pack_integer(bref, field_type_format3_b_srs_add_r16, (uint8_t)1u, (uint8_t)2u)); + } + if (p0_ue_srs_add_r16_present) { + HANDLE_CODE(pack_integer(bref, p0_ue_srs_add_r16, (int8_t)-16, (int8_t)15)); + } + HANDLE_CODE(bref.pack(accumulation_enabled_srs_add_r16, 1)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE ul_pwr_ctrl_add_srs_r16_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(tpc_idx_srs_add_r16_present, 1)); + HANDLE_CODE(bref.unpack(start_bit_of_format3_b_srs_add_r16_present, 1)); + HANDLE_CODE(bref.unpack(field_type_format3_b_srs_add_r16_present, 1)); + HANDLE_CODE(bref.unpack(p0_ue_srs_add_r16_present, 1)); + + if (tpc_idx_srs_add_r16_present) { + HANDLE_CODE(tpc_idx_srs_add_r16.unpack(bref)); + } + if (start_bit_of_format3_b_srs_add_r16_present) { + HANDLE_CODE(unpack_integer(start_bit_of_format3_b_srs_add_r16, bref, (uint8_t)0u, (uint8_t)31u)); + } + if (field_type_format3_b_srs_add_r16_present) { + HANDLE_CODE(unpack_integer(field_type_format3_b_srs_add_r16, bref, (uint8_t)1u, (uint8_t)2u)); + } + if (p0_ue_srs_add_r16_present) { + HANDLE_CODE(unpack_integer(p0_ue_srs_add_r16, bref, (int8_t)-16, (int8_t)15)); + } + HANDLE_CODE(bref.unpack(accumulation_enabled_srs_add_r16, 1)); + + return SRSASN_SUCCESS; +} +void ul_pwr_ctrl_add_srs_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (tpc_idx_srs_add_r16_present) { + j.write_fieldname("tpc-IndexSRS-Add-r16"); + tpc_idx_srs_add_r16.to_json(j); + } + if (start_bit_of_format3_b_srs_add_r16_present) { + j.write_int("startingBitOfFormat3B-SRS-Add-r16", start_bit_of_format3_b_srs_add_r16); + } + if (field_type_format3_b_srs_add_r16_present) { + j.write_int("fieldTypeFormat3B-SRS-Add-r16", field_type_format3_b_srs_add_r16); + } + if (p0_ue_srs_add_r16_present) { + j.write_int("p0-UE-SRS-Add-r16", p0_ue_srs_add_r16); + } + j.write_bool("accumulationEnabledSRS-Add-r16", accumulation_enabled_srs_add_r16); + j.end_obj(); +} +bool ul_pwr_ctrl_add_srs_r16_s::operator==(const ul_pwr_ctrl_add_srs_r16_s& other) const +{ + return tpc_idx_srs_add_r16_present == other.tpc_idx_srs_add_r16_present and + (not tpc_idx_srs_add_r16_present or tpc_idx_srs_add_r16 == other.tpc_idx_srs_add_r16) and + start_bit_of_format3_b_srs_add_r16_present == other.start_bit_of_format3_b_srs_add_r16_present and + (not start_bit_of_format3_b_srs_add_r16_present or + start_bit_of_format3_b_srs_add_r16 == other.start_bit_of_format3_b_srs_add_r16) and + field_type_format3_b_srs_add_r16_present == other.field_type_format3_b_srs_add_r16_present and + (not field_type_format3_b_srs_add_r16_present or + field_type_format3_b_srs_add_r16 == other.field_type_format3_b_srs_add_r16) and + p0_ue_srs_add_r16_present == other.p0_ue_srs_add_r16_present and + (not p0_ue_srs_add_r16_present or p0_ue_srs_add_r16 == other.p0_ue_srs_add_r16) and + accumulation_enabled_srs_add_r16 == other.accumulation_enabled_srs_add_r16; +} + // UplinkPowerControlDedicated ::= SEQUENCE SRSASN_CODE ul_pwr_ctrl_ded_s::pack(bit_ref& bref) const { @@ -18347,6 +19746,34 @@ bool ul_pwr_ctrl_ded_v1530_s::operator==(const ul_pwr_ctrl_ded_v1530_s& other) c (not p0_ue_pusch_r15_present or p0_ue_pusch_r15 == other.p0_ue_pusch_r15); } +// WidebandPRG-r16 ::= SEQUENCE +SRSASN_CODE wideband_prg_r16_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(wideband_prg_sf_r16, 1)); + HANDLE_CODE(bref.pack(wideband_prg_slot_subslot_r16, 1)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE wideband_prg_r16_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(wideband_prg_sf_r16, 1)); + HANDLE_CODE(bref.unpack(wideband_prg_slot_subslot_r16, 1)); + + return SRSASN_SUCCESS; +} +void wideband_prg_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_bool("widebandPRG-Subframe-r16", wideband_prg_sf_r16); + j.write_bool("widebandPRG-SlotSubslot-r16", wideband_prg_slot_subslot_r16); + j.end_obj(); +} +bool wideband_prg_r16_s::operator==(const wideband_prg_r16_s& other) const +{ + return wideband_prg_sf_r16 == other.wideband_prg_sf_r16 and + wideband_prg_slot_subslot_r16 == other.wideband_prg_slot_subslot_r16; +} + // PhysicalConfigDedicated ::= SEQUENCE SRSASN_CODE phys_cfg_ded_s::pack(bit_ref& bref) const { @@ -18469,6 +19896,18 @@ SRSASN_CODE phys_cfg_ded_s::pack(bit_ref& bref) const group_flags[10] |= semi_static_cfi_cfg_r15.is_present(); group_flags[10] |= blind_pdsch_repeat_cfg_r15.is_present(); group_flags[11] |= spucch_cfg_v1550.is_present(); + group_flags[12] |= pdsch_cfg_ded_v1610.is_present(); + group_flags[12] |= pusch_cfg_ded_v1610.is_present(); + group_flags[12] |= ce_csi_rs_feedback_r16_present; + group_flags[12] |= res_reserv_cfg_ded_dl_r16.is_present(); + group_flags[12] |= res_reserv_cfg_ded_ul_r16.is_present(); + group_flags[12] |= srs_ul_cfg_ded_add_r16.is_present(); + group_flags[12] |= ul_pwr_ctrl_add_srs_r16.is_present(); + group_flags[12] |= srs_virtual_cell_id_r16.is_present(); + group_flags[12] |= wideband_prg_r16.is_present(); + group_flags[13] |= pdsch_cfg_ded_v1700.is_present(); + group_flags[13] |= ntn_cfg_ded_r17.is_present(); + group_flags[14] |= ul_segmented_precompensation_gap_r17_present; group_flags.pack(bref); if (group_flags[0]) { @@ -18813,6 +20252,70 @@ SRSASN_CODE phys_cfg_ded_s::pack(bit_ref& bref) const HANDLE_CODE(spucch_cfg_v1550->pack(bref)); } } + if (group_flags[12]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(pdsch_cfg_ded_v1610.is_present(), 1)); + HANDLE_CODE(bref.pack(pusch_cfg_ded_v1610.is_present(), 1)); + HANDLE_CODE(bref.pack(ce_csi_rs_feedback_r16_present, 1)); + HANDLE_CODE(bref.pack(res_reserv_cfg_ded_dl_r16.is_present(), 1)); + HANDLE_CODE(bref.pack(res_reserv_cfg_ded_ul_r16.is_present(), 1)); + HANDLE_CODE(bref.pack(srs_ul_cfg_ded_add_r16.is_present(), 1)); + HANDLE_CODE(bref.pack(ul_pwr_ctrl_add_srs_r16.is_present(), 1)); + HANDLE_CODE(bref.pack(srs_virtual_cell_id_r16.is_present(), 1)); + HANDLE_CODE(bref.pack(wideband_prg_r16.is_present(), 1)); + if (pdsch_cfg_ded_v1610.is_present()) { + HANDLE_CODE(pdsch_cfg_ded_v1610->pack(bref)); + } + if (pusch_cfg_ded_v1610.is_present()) { + HANDLE_CODE(pusch_cfg_ded_v1610->pack(bref)); + } + if (res_reserv_cfg_ded_dl_r16.is_present()) { + HANDLE_CODE(res_reserv_cfg_ded_dl_r16->pack(bref)); + } + if (res_reserv_cfg_ded_ul_r16.is_present()) { + HANDLE_CODE(res_reserv_cfg_ded_ul_r16->pack(bref)); + } + if (srs_ul_cfg_ded_add_r16.is_present()) { + HANDLE_CODE(srs_ul_cfg_ded_add_r16->pack(bref)); + } + if (ul_pwr_ctrl_add_srs_r16.is_present()) { + HANDLE_CODE(ul_pwr_ctrl_add_srs_r16->pack(bref)); + } + if (srs_virtual_cell_id_r16.is_present()) { + HANDLE_CODE(srs_virtual_cell_id_r16->pack(bref)); + } + if (wideband_prg_r16.is_present()) { + HANDLE_CODE(wideband_prg_r16->pack(bref)); + } + } + if (group_flags[13]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(pdsch_cfg_ded_v1700.is_present(), 1)); + HANDLE_CODE(bref.pack(ntn_cfg_ded_r17.is_present(), 1)); + if (pdsch_cfg_ded_v1700.is_present()) { + HANDLE_CODE(pdsch_cfg_ded_v1700->pack(bref)); + } + if (ntn_cfg_ded_r17.is_present()) { + HANDLE_CODE(bref.pack(ntn_cfg_ded_r17->pucch_tx_dur_r17_present, 1)); + HANDLE_CODE(bref.pack(ntn_cfg_ded_r17->pusch_tx_dur_r17_present, 1)); + if (ntn_cfg_ded_r17->pucch_tx_dur_r17_present) { + HANDLE_CODE(ntn_cfg_ded_r17->pucch_tx_dur_r17.pack(bref)); + } + if (ntn_cfg_ded_r17->pusch_tx_dur_r17_present) { + HANDLE_CODE(ntn_cfg_ded_r17->pusch_tx_dur_r17.pack(bref)); + } + } + } + if (group_flags[14]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(ul_segmented_precompensation_gap_r17_present, 1)); + if (ul_segmented_precompensation_gap_r17_present) { + HANDLE_CODE(ul_segmented_precompensation_gap_r17.pack(bref)); + } + } } return SRSASN_SUCCESS; } @@ -18862,7 +20365,7 @@ SRSASN_CODE phys_cfg_ded_s::unpack(cbit_ref& bref) } if (ext) { - ext_groups_unpacker_guard group_flags(12); + ext_groups_unpacker_guard group_flags(15); group_flags.unpack(bref); if (group_flags[0]) { @@ -19349,6 +20852,90 @@ SRSASN_CODE phys_cfg_ded_s::unpack(cbit_ref& bref) HANDLE_CODE(spucch_cfg_v1550->unpack(bref)); } } + if (group_flags[12]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + bool pdsch_cfg_ded_v1610_present; + HANDLE_CODE(bref.unpack(pdsch_cfg_ded_v1610_present, 1)); + pdsch_cfg_ded_v1610.set_present(pdsch_cfg_ded_v1610_present); + bool pusch_cfg_ded_v1610_present; + HANDLE_CODE(bref.unpack(pusch_cfg_ded_v1610_present, 1)); + pusch_cfg_ded_v1610.set_present(pusch_cfg_ded_v1610_present); + HANDLE_CODE(bref.unpack(ce_csi_rs_feedback_r16_present, 1)); + bool res_reserv_cfg_ded_dl_r16_present; + HANDLE_CODE(bref.unpack(res_reserv_cfg_ded_dl_r16_present, 1)); + res_reserv_cfg_ded_dl_r16.set_present(res_reserv_cfg_ded_dl_r16_present); + bool res_reserv_cfg_ded_ul_r16_present; + HANDLE_CODE(bref.unpack(res_reserv_cfg_ded_ul_r16_present, 1)); + res_reserv_cfg_ded_ul_r16.set_present(res_reserv_cfg_ded_ul_r16_present); + bool srs_ul_cfg_ded_add_r16_present; + HANDLE_CODE(bref.unpack(srs_ul_cfg_ded_add_r16_present, 1)); + srs_ul_cfg_ded_add_r16.set_present(srs_ul_cfg_ded_add_r16_present); + bool ul_pwr_ctrl_add_srs_r16_present; + HANDLE_CODE(bref.unpack(ul_pwr_ctrl_add_srs_r16_present, 1)); + ul_pwr_ctrl_add_srs_r16.set_present(ul_pwr_ctrl_add_srs_r16_present); + bool srs_virtual_cell_id_r16_present; + HANDLE_CODE(bref.unpack(srs_virtual_cell_id_r16_present, 1)); + srs_virtual_cell_id_r16.set_present(srs_virtual_cell_id_r16_present); + bool wideband_prg_r16_present; + HANDLE_CODE(bref.unpack(wideband_prg_r16_present, 1)); + wideband_prg_r16.set_present(wideband_prg_r16_present); + if (pdsch_cfg_ded_v1610.is_present()) { + HANDLE_CODE(pdsch_cfg_ded_v1610->unpack(bref)); + } + if (pusch_cfg_ded_v1610.is_present()) { + HANDLE_CODE(pusch_cfg_ded_v1610->unpack(bref)); + } + if (res_reserv_cfg_ded_dl_r16.is_present()) { + HANDLE_CODE(res_reserv_cfg_ded_dl_r16->unpack(bref)); + } + if (res_reserv_cfg_ded_ul_r16.is_present()) { + HANDLE_CODE(res_reserv_cfg_ded_ul_r16->unpack(bref)); + } + if (srs_ul_cfg_ded_add_r16.is_present()) { + HANDLE_CODE(srs_ul_cfg_ded_add_r16->unpack(bref)); + } + if (ul_pwr_ctrl_add_srs_r16.is_present()) { + HANDLE_CODE(ul_pwr_ctrl_add_srs_r16->unpack(bref)); + } + if (srs_virtual_cell_id_r16.is_present()) { + HANDLE_CODE(srs_virtual_cell_id_r16->unpack(bref)); + } + if (wideband_prg_r16.is_present()) { + HANDLE_CODE(wideband_prg_r16->unpack(bref)); + } + } + if (group_flags[13]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + bool pdsch_cfg_ded_v1700_present; + HANDLE_CODE(bref.unpack(pdsch_cfg_ded_v1700_present, 1)); + pdsch_cfg_ded_v1700.set_present(pdsch_cfg_ded_v1700_present); + bool ntn_cfg_ded_r17_present; + HANDLE_CODE(bref.unpack(ntn_cfg_ded_r17_present, 1)); + ntn_cfg_ded_r17.set_present(ntn_cfg_ded_r17_present); + if (pdsch_cfg_ded_v1700.is_present()) { + HANDLE_CODE(pdsch_cfg_ded_v1700->unpack(bref)); + } + if (ntn_cfg_ded_r17.is_present()) { + HANDLE_CODE(bref.unpack(ntn_cfg_ded_r17->pucch_tx_dur_r17_present, 1)); + HANDLE_CODE(bref.unpack(ntn_cfg_ded_r17->pusch_tx_dur_r17_present, 1)); + if (ntn_cfg_ded_r17->pucch_tx_dur_r17_present) { + HANDLE_CODE(ntn_cfg_ded_r17->pucch_tx_dur_r17.unpack(bref)); + } + if (ntn_cfg_ded_r17->pusch_tx_dur_r17_present) { + HANDLE_CODE(ntn_cfg_ded_r17->pusch_tx_dur_r17.unpack(bref)); + } + } + } + if (group_flags[14]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.unpack(ul_segmented_precompensation_gap_r17_present, 1)); + if (ul_segmented_precompensation_gap_r17_present) { + HANDLE_CODE(ul_segmented_precompensation_gap_r17.unpack(bref)); + } + } } return SRSASN_SUCCESS; } @@ -19719,6 +21306,61 @@ void phys_cfg_ded_s::to_json(json_writer& j) const j.write_fieldname("spucch-Config-v1550"); spucch_cfg_v1550->to_json(j); } + if (pdsch_cfg_ded_v1610.is_present()) { + j.write_fieldname("pdsch-ConfigDedicated-v1610"); + pdsch_cfg_ded_v1610->to_json(j); + } + if (pusch_cfg_ded_v1610.is_present()) { + j.write_fieldname("pusch-ConfigDedicated-v1610"); + pusch_cfg_ded_v1610->to_json(j); + } + if (ce_csi_rs_feedback_r16_present) { + j.write_str("ce-CSI-RS-Feedback-r16", "enabled"); + } + if (res_reserv_cfg_ded_dl_r16.is_present()) { + j.write_fieldname("resourceReservationConfigDedicatedDL-r16"); + res_reserv_cfg_ded_dl_r16->to_json(j); + } + if (res_reserv_cfg_ded_ul_r16.is_present()) { + j.write_fieldname("resourceReservationConfigDedicatedUL-r16"); + res_reserv_cfg_ded_ul_r16->to_json(j); + } + if (srs_ul_cfg_ded_add_r16.is_present()) { + j.write_fieldname("soundingRS-UL-ConfigDedicatedAdd-r16"); + srs_ul_cfg_ded_add_r16->to_json(j); + } + if (ul_pwr_ctrl_add_srs_r16.is_present()) { + j.write_fieldname("uplinkPowerControlAddSRS-r16"); + ul_pwr_ctrl_add_srs_r16->to_json(j); + } + if (srs_virtual_cell_id_r16.is_present()) { + j.write_fieldname("soundingRS-VirtualCellID-r16"); + srs_virtual_cell_id_r16->to_json(j); + } + if (wideband_prg_r16.is_present()) { + j.write_fieldname("widebandPRG-r16"); + wideband_prg_r16->to_json(j); + } + if (pdsch_cfg_ded_v1700.is_present()) { + j.write_fieldname("pdsch-ConfigDedicated-v1700"); + pdsch_cfg_ded_v1700->to_json(j); + } + if (ntn_cfg_ded_r17.is_present()) { + j.write_fieldname("ntn-ConfigDedicated-r17"); + j.start_obj(); + if (ntn_cfg_ded_r17->pucch_tx_dur_r17_present) { + j.write_fieldname("pucch-TxDuration-r17"); + ntn_cfg_ded_r17->pucch_tx_dur_r17.to_json(j); + } + if (ntn_cfg_ded_r17->pusch_tx_dur_r17_present) { + j.write_fieldname("pusch-TxDuration-r17"); + ntn_cfg_ded_r17->pusch_tx_dur_r17.to_json(j); + } + j.end_obj(); + } + if (ul_segmented_precompensation_gap_r17_present) { + j.write_str("uplinkSegmentedPrecompensationGap-r17", ul_segmented_precompensation_gap_r17.to_string()); + } } j.end_obj(); } @@ -20593,3 +22235,9 @@ phys_cfg_ded_s::blind_pdsch_repeat_cfg_r15_c_::setup_s_::mcs_restrict_slot_subsl value, "phys_cfg_ded_s::blind_pdsch_repeat_cfg_r15_c_::setup_s_::mcs_restrict_slot_subslot_pdsch_repeats_r15_e_"); } + +const char* phys_cfg_ded_s::ul_segmented_precompensation_gap_r17_opts::to_string() const +{ + static const char* options[] = {"sym1", "sl1", "sf1"}; + return convert_enum_idx(options, 3, value, "phys_cfg_ded_s::ul_segmented_precompensation_gap_r17_e_"); +} diff --git a/lib/src/asn1/rrc/rr_common.cc b/lib/src/asn1/rrc/rr_common.cc index 0a4c6fd96..58886acf5 100644 --- a/lib/src/asn1/rrc/rr_common.cc +++ b/lib/src/asn1/rrc/rr_common.cc @@ -518,6 +518,30 @@ uint8_t tdd_cfg_v1130_s::special_sf_patterns_v1130_opts::to_number() const return map_enum_number(options, 2, value, "tdd_cfg_v1130_s::special_sf_patterns_v1130_e_"); } +// GWUS-NumGroups-r16 ::= ENUMERATED +const char* gwus_num_groups_r16_opts::to_string() const +{ + static const char* options[] = {"n1", "n2", "n4", "n8"}; + return convert_enum_idx(options, 4, value, "gwus_num_groups_r16_e"); +} +uint8_t gwus_num_groups_r16_opts::to_number() const +{ + static const uint8_t options[] = {1, 2, 4, 8}; + return map_enum_number(options, 4, value, "gwus_num_groups_r16_e"); +} + +// GWUS-PagingProbThresh-r16 ::= ENUMERATED +const char* gwus_paging_prob_thresh_r16_opts::to_string() const +{ + static const char* options[] = {"p20", "p30", "p40", "p50", "p60", "p70", "p80", "p90"}; + return convert_enum_idx(options, 8, value, "gwus_paging_prob_thresh_r16_e"); +} +uint8_t gwus_paging_prob_thresh_r16_opts::to_number() const +{ + static const uint8_t options[] = {20, 30, 40, 50, 60, 70, 80, 90}; + return map_enum_number(options, 8, value, "gwus_paging_prob_thresh_r16_e"); +} + // PRACH-ParametersCE-r13 ::= SEQUENCE SRSASN_CODE prach_params_ce_r13_s::pack(bit_ref& bref) const { @@ -1280,6 +1304,347 @@ uint16_t edt_prach_params_ce_r15_s::edt_prach_params_ce_r15_s_::prach_start_sf_r options, 8, value, "edt_prach_params_ce_r15_s::edt_prach_params_ce_r15_s_::prach_start_sf_r15_e_"); } +// GWUS-ResourceConfig-r16 ::= SEQUENCE +SRSASN_CODE gwus_res_cfg_r16_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(num_groups_list_r16_present, 1)); + HANDLE_CODE(bref.pack(groups_for_service_list_r16_present, 1)); + + HANDLE_CODE(res_map_pattern_r16.pack(bref)); + if (num_groups_list_r16_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, num_groups_list_r16, 1, 4)); + } + if (groups_for_service_list_r16_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, groups_for_service_list_r16, 1, 3, integer_packer<uint8_t>(1, 31))); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE gwus_res_cfg_r16_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(num_groups_list_r16_present, 1)); + HANDLE_CODE(bref.unpack(groups_for_service_list_r16_present, 1)); + + HANDLE_CODE(res_map_pattern_r16.unpack(bref)); + if (num_groups_list_r16_present) { + HANDLE_CODE(unpack_dyn_seq_of(num_groups_list_r16, bref, 1, 4)); + } + if (groups_for_service_list_r16_present) { + HANDLE_CODE(unpack_dyn_seq_of(groups_for_service_list_r16, bref, 1, 3, integer_packer<uint8_t>(1, 31))); + } + + return SRSASN_SUCCESS; +} +void gwus_res_cfg_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_fieldname("resourceMappingPattern-r16"); + res_map_pattern_r16.to_json(j); + if (num_groups_list_r16_present) { + j.start_array("numGroupsList-r16"); + for (const auto& e1 : num_groups_list_r16) { + j.write_str(e1.to_string()); + } + j.end_array(); + } + if (groups_for_service_list_r16_present) { + j.start_array("groupsForServiceList-r16"); + for (const auto& e1 : groups_for_service_list_r16) { + j.write_int(e1); + } + j.end_array(); + } + j.end_obj(); +} + +void gwus_res_cfg_r16_s::res_map_pattern_r16_c_::destroy_() {} +void gwus_res_cfg_r16_s::res_map_pattern_r16_c_::set(types::options e) +{ + destroy_(); + type_ = e; +} +gwus_res_cfg_r16_s::res_map_pattern_r16_c_::res_map_pattern_r16_c_( + const gwus_res_cfg_r16_s::res_map_pattern_r16_c_& other) +{ + type_ = other.type(); + switch (type_) { + case types::res_location_with_wus: + c.init(other.c.get<res_location_with_wus_e_>()); + break; + case types::res_location_without_wus: + c.init(other.c.get<res_location_without_wus_e_>()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "gwus_res_cfg_r16_s::res_map_pattern_r16_c_"); + } +} +gwus_res_cfg_r16_s::res_map_pattern_r16_c_& +gwus_res_cfg_r16_s::res_map_pattern_r16_c_::operator=(const gwus_res_cfg_r16_s::res_map_pattern_r16_c_& other) +{ + if (this == &other) { + return *this; + } + set(other.type()); + switch (type_) { + case types::res_location_with_wus: + c.set(other.c.get<res_location_with_wus_e_>()); + break; + case types::res_location_without_wus: + c.set(other.c.get<res_location_without_wus_e_>()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "gwus_res_cfg_r16_s::res_map_pattern_r16_c_"); + } + + return *this; +} +gwus_res_cfg_r16_s::res_map_pattern_r16_c_::res_location_with_wus_e_& +gwus_res_cfg_r16_s::res_map_pattern_r16_c_::set_res_location_with_wus() +{ + set(types::res_location_with_wus); + return c.get<res_location_with_wus_e_>(); +} +gwus_res_cfg_r16_s::res_map_pattern_r16_c_::res_location_without_wus_e_& +gwus_res_cfg_r16_s::res_map_pattern_r16_c_::set_res_location_without_wus() +{ + set(types::res_location_without_wus); + return c.get<res_location_without_wus_e_>(); +} +void gwus_res_cfg_r16_s::res_map_pattern_r16_c_::to_json(json_writer& j) const +{ + j.start_obj(); + switch (type_) { + case types::res_location_with_wus: + j.write_str("resourceLocationWithWUS", c.get<res_location_with_wus_e_>().to_string()); + break; + case types::res_location_without_wus: + j.write_str("resourceLocationWithoutWUS", c.get<res_location_without_wus_e_>().to_string()); + break; + default: + log_invalid_choice_id(type_, "gwus_res_cfg_r16_s::res_map_pattern_r16_c_"); + } + j.end_obj(); +} +SRSASN_CODE gwus_res_cfg_r16_s::res_map_pattern_r16_c_::pack(bit_ref& bref) const +{ + type_.pack(bref); + switch (type_) { + case types::res_location_with_wus: + HANDLE_CODE(c.get<res_location_with_wus_e_>().pack(bref)); + break; + case types::res_location_without_wus: + HANDLE_CODE(c.get<res_location_without_wus_e_>().pack(bref)); + break; + default: + log_invalid_choice_id(type_, "gwus_res_cfg_r16_s::res_map_pattern_r16_c_"); + return SRSASN_ERROR_ENCODE_FAIL; + } + return SRSASN_SUCCESS; +} +SRSASN_CODE gwus_res_cfg_r16_s::res_map_pattern_r16_c_::unpack(cbit_ref& bref) +{ + types e; + e.unpack(bref); + set(e); + switch (type_) { + case types::res_location_with_wus: + HANDLE_CODE(c.get<res_location_with_wus_e_>().unpack(bref)); + break; + case types::res_location_without_wus: + HANDLE_CODE(c.get<res_location_without_wus_e_>().unpack(bref)); + break; + default: + log_invalid_choice_id(type_, "gwus_res_cfg_r16_s::res_map_pattern_r16_c_"); + return SRSASN_ERROR_DECODE_FAIL; + } + return SRSASN_SUCCESS; +} + +const char* gwus_res_cfg_r16_s::res_map_pattern_r16_c_::res_location_with_wus_opts::to_string() const +{ + static const char* options[] = {"primary", "secondary", "primary3FDM"}; + return convert_enum_idx(options, 3, value, "gwus_res_cfg_r16_s::res_map_pattern_r16_c_::res_location_with_wus_e_"); +} +uint8_t gwus_res_cfg_r16_s::res_map_pattern_r16_c_::res_location_with_wus_opts::to_number() const +{ + if (value == primary3_fdm) { + return 3; + } + invalid_enum_number(value, "gwus_res_cfg_r16_s::res_map_pattern_r16_c_::res_location_with_wus_e_"); + return 0; +} + +const char* gwus_res_cfg_r16_s::res_map_pattern_r16_c_::res_location_without_wus_opts::to_string() const +{ + static const char* options[] = {"n0", "n2"}; + return convert_enum_idx(options, 2, value, "gwus_res_cfg_r16_s::res_map_pattern_r16_c_::res_location_without_wus_e_"); +} +uint8_t gwus_res_cfg_r16_s::res_map_pattern_r16_c_::res_location_without_wus_opts::to_number() const +{ + static const uint8_t options[] = {0, 2}; + return map_enum_number(options, 2, value, "gwus_res_cfg_r16_s::res_map_pattern_r16_c_::res_location_without_wus_e_"); +} + +// GWUS-TimeParameters-r16 ::= SEQUENCE +SRSASN_CODE gwus_time_params_r16_s::pack(bit_ref& bref) const +{ + bref.pack(ext, 1); + HANDLE_CODE(bref.pack(num_pos_r16_present, 1)); + HANDLE_CODE(bref.pack(time_offset_e_drx_long_r16_present, 1)); + HANDLE_CODE(bref.pack(num_drx_cycles_relaxed_r16_present, 1)); + HANDLE_CODE(bref.pack(pwr_boost_r16_present, 1)); + + HANDLE_CODE(max_dur_factor_r16.pack(bref)); + if (num_pos_r16_present) { + HANDLE_CODE(num_pos_r16.pack(bref)); + } + HANDLE_CODE(time_offset_drx_r16.pack(bref)); + HANDLE_CODE(time_offset_e_drx_short_r16.pack(bref)); + if (time_offset_e_drx_long_r16_present) { + HANDLE_CODE(time_offset_e_drx_long_r16.pack(bref)); + } + if (num_drx_cycles_relaxed_r16_present) { + HANDLE_CODE(num_drx_cycles_relaxed_r16.pack(bref)); + } + if (pwr_boost_r16_present) { + HANDLE_CODE(pwr_boost_r16.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE gwus_time_params_r16_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(bref.unpack(num_pos_r16_present, 1)); + HANDLE_CODE(bref.unpack(time_offset_e_drx_long_r16_present, 1)); + HANDLE_CODE(bref.unpack(num_drx_cycles_relaxed_r16_present, 1)); + HANDLE_CODE(bref.unpack(pwr_boost_r16_present, 1)); + + HANDLE_CODE(max_dur_factor_r16.unpack(bref)); + if (num_pos_r16_present) { + HANDLE_CODE(num_pos_r16.unpack(bref)); + } + HANDLE_CODE(time_offset_drx_r16.unpack(bref)); + HANDLE_CODE(time_offset_e_drx_short_r16.unpack(bref)); + if (time_offset_e_drx_long_r16_present) { + HANDLE_CODE(time_offset_e_drx_long_r16.unpack(bref)); + } + if (num_drx_cycles_relaxed_r16_present) { + HANDLE_CODE(num_drx_cycles_relaxed_r16.unpack(bref)); + } + if (pwr_boost_r16_present) { + HANDLE_CODE(pwr_boost_r16.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void gwus_time_params_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_str("maxDurationFactor-r16", max_dur_factor_r16.to_string()); + if (num_pos_r16_present) { + j.write_str("numPOs-r16", num_pos_r16.to_string()); + } + j.write_str("timeOffsetDRX-r16", time_offset_drx_r16.to_string()); + j.write_str("timeOffset-eDRX-Short-r16", time_offset_e_drx_short_r16.to_string()); + if (time_offset_e_drx_long_r16_present) { + j.write_str("timeOffset-eDRX-Long-r16", time_offset_e_drx_long_r16.to_string()); + } + if (num_drx_cycles_relaxed_r16_present) { + j.write_str("numDRX-CyclesRelaxed-r16", num_drx_cycles_relaxed_r16.to_string()); + } + if (pwr_boost_r16_present) { + j.write_str("powerBoost-r16", pwr_boost_r16.to_string()); + } + j.end_obj(); +} + +const char* gwus_time_params_r16_s::max_dur_factor_r16_opts::to_string() const +{ + static const char* options[] = {"one32th", "one16th", "one8th", "one4th"}; + return convert_enum_idx(options, 4, value, "gwus_time_params_r16_s::max_dur_factor_r16_e_"); +} +uint8_t gwus_time_params_r16_s::max_dur_factor_r16_opts::to_number() const +{ + static const uint8_t options[] = {32, 16, 8, 4}; + return map_enum_number(options, 4, value, "gwus_time_params_r16_s::max_dur_factor_r16_e_"); +} + +const char* gwus_time_params_r16_s::num_pos_r16_opts::to_string() const +{ + static const char* options[] = {"n1", "n2", "n4", "spare1"}; + return convert_enum_idx(options, 4, value, "gwus_time_params_r16_s::num_pos_r16_e_"); +} +uint8_t gwus_time_params_r16_s::num_pos_r16_opts::to_number() const +{ + static const uint8_t options[] = {1, 2, 4}; + return map_enum_number(options, 3, value, "gwus_time_params_r16_s::num_pos_r16_e_"); +} + +const char* gwus_time_params_r16_s::time_offset_drx_r16_opts::to_string() const +{ + static const char* options[] = {"ms40", "ms80", "ms160", "ms240"}; + return convert_enum_idx(options, 4, value, "gwus_time_params_r16_s::time_offset_drx_r16_e_"); +} +uint8_t gwus_time_params_r16_s::time_offset_drx_r16_opts::to_number() const +{ + static const uint8_t options[] = {40, 80, 160, 240}; + return map_enum_number(options, 4, value, "gwus_time_params_r16_s::time_offset_drx_r16_e_"); +} + +const char* gwus_time_params_r16_s::time_offset_e_drx_short_r16_opts::to_string() const +{ + static const char* options[] = {"ms40", "ms80", "ms160", "ms240"}; + return convert_enum_idx(options, 4, value, "gwus_time_params_r16_s::time_offset_e_drx_short_r16_e_"); +} +uint8_t gwus_time_params_r16_s::time_offset_e_drx_short_r16_opts::to_number() const +{ + static const uint8_t options[] = {40, 80, 160, 240}; + return map_enum_number(options, 4, value, "gwus_time_params_r16_s::time_offset_e_drx_short_r16_e_"); +} + +const char* gwus_time_params_r16_s::time_offset_e_drx_long_r16_opts::to_string() const +{ + static const char* options[] = {"ms1000", "ms2000"}; + return convert_enum_idx(options, 2, value, "gwus_time_params_r16_s::time_offset_e_drx_long_r16_e_"); +} +uint16_t gwus_time_params_r16_s::time_offset_e_drx_long_r16_opts::to_number() const +{ + static const uint16_t options[] = {1000, 2000}; + return map_enum_number(options, 2, value, "gwus_time_params_r16_s::time_offset_e_drx_long_r16_e_"); +} + +const char* gwus_time_params_r16_s::num_drx_cycles_relaxed_r16_opts::to_string() const +{ + static const char* options[] = {"n1", "n2", "n4", "n8"}; + return convert_enum_idx(options, 4, value, "gwus_time_params_r16_s::num_drx_cycles_relaxed_r16_e_"); +} +uint8_t gwus_time_params_r16_s::num_drx_cycles_relaxed_r16_opts::to_number() const +{ + static const uint8_t options[] = {1, 2, 4, 8}; + return map_enum_number(options, 4, value, "gwus_time_params_r16_s::num_drx_cycles_relaxed_r16_e_"); +} + +const char* gwus_time_params_r16_s::pwr_boost_r16_opts::to_string() const +{ + static const char* options[] = {"dB0", "dB1dot8", "dB3", "dB4dot8"}; + return convert_enum_idx(options, 4, value, "gwus_time_params_r16_s::pwr_boost_r16_e_"); +} +float gwus_time_params_r16_s::pwr_boost_r16_opts::to_number() const +{ + static const float options[] = {0.0, 1.8, 3.0, 4.8}; + return map_enum_number(options, 4, value, "gwus_time_params_r16_s::pwr_boost_r16_e_"); +} +const char* gwus_time_params_r16_s::pwr_boost_r16_opts::to_number_string() const +{ + static const char* options[] = {"0", "1.8", "3", "4.8"}; + return convert_enum_idx(options, 4, value, "gwus_time_params_r16_s::pwr_boost_r16_e_"); +} + // PRACH-ConfigInfo ::= SEQUENCE SRSASN_CODE prach_cfg_info_s::pack(bit_ref& bref) const { @@ -1472,6 +1837,42 @@ void bcch_cfg_v1310_s::to_json(json_writer& j) const j.end_obj(); } +// CRS-ChEstMPDCCH-ConfigCommon-r16 ::= SEQUENCE +SRSASN_CODE crs_ch_est_mpdcch_cfg_common_r16_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(pwr_ratio_r16.pack(bref)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE crs_ch_est_mpdcch_cfg_common_r16_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(pwr_ratio_r16.unpack(bref)); + + return SRSASN_SUCCESS; +} +void crs_ch_est_mpdcch_cfg_common_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_str("powerRatio-r16", pwr_ratio_r16.to_string()); + j.end_obj(); +} + +const char* crs_ch_est_mpdcch_cfg_common_r16_s::pwr_ratio_r16_opts::to_string() const +{ + static const char* options[] = {"dB-4dot77", "dB-3", "dB-1dot77", "dB0", "dB1", "dB2", "dB3", "dB4dot77"}; + return convert_enum_idx(options, 8, value, "crs_ch_est_mpdcch_cfg_common_r16_s::pwr_ratio_r16_e_"); +} +float crs_ch_est_mpdcch_cfg_common_r16_s::pwr_ratio_r16_opts::to_number() const +{ + static const float options[] = {-4.77, -3.0, -1.77, 0.0, 1.0, 2.0, 3.0, 4.77}; + return map_enum_number(options, 8, value, "crs_ch_est_mpdcch_cfg_common_r16_s::pwr_ratio_r16_e_"); +} +const char* crs_ch_est_mpdcch_cfg_common_r16_s::pwr_ratio_r16_opts::to_number_string() const +{ + static const char* options[] = {"-4.77", "-3", "-1.77", "0", "1", "2", "3", "4.77"}; + return convert_enum_idx(options, 8, value, "crs_ch_est_mpdcch_cfg_common_r16_s::pwr_ratio_r16_e_"); +} + // FreqHoppingParameters-r13 ::= SEQUENCE SRSASN_CODE freq_hop_params_r13_s::pack(bit_ref& bref) const { @@ -2092,6 +2493,122 @@ uint8_t freq_hop_params_r13_s::interv_ul_hop_cfg_common_mode_b_r13_c_::interv_td options, 4, value, "freq_hop_params_r13_s::interv_ul_hop_cfg_common_mode_b_r13_c_::interv_tdd_r13_e_"); } +// GWUS-Config-r16 ::= SEQUENCE +SRSASN_CODE gwus_cfg_r16_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(group_alternation_r16_present, 1)); + HANDLE_CODE(bref.pack(common_seq_r16_present, 1)); + HANDLE_CODE(bref.pack(time_params_r16_present, 1)); + HANDLE_CODE(bref.pack(res_cfg_e_drx_short_r16_present, 1)); + HANDLE_CODE(bref.pack(res_cfg_e_drx_long_r16_present, 1)); + HANDLE_CODE(bref.pack(prob_thresh_list_r16_present, 1)); + HANDLE_CODE(bref.pack(group_narrow_band_list_r16_present, 1)); + + if (common_seq_r16_present) { + HANDLE_CODE(common_seq_r16.pack(bref)); + } + if (time_params_r16_present) { + HANDLE_CODE(time_params_r16.pack(bref)); + } + HANDLE_CODE(res_cfg_drx_r16.pack(bref)); + if (res_cfg_e_drx_short_r16_present) { + HANDLE_CODE(res_cfg_e_drx_short_r16.pack(bref)); + } + if (res_cfg_e_drx_long_r16_present) { + HANDLE_CODE(res_cfg_e_drx_long_r16.pack(bref)); + } + if (prob_thresh_list_r16_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, prob_thresh_list_r16, 1, 3)); + } + if (group_narrow_band_list_r16_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, group_narrow_band_list_r16, 1, 16, BitPacker(1))); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE gwus_cfg_r16_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(group_alternation_r16_present, 1)); + HANDLE_CODE(bref.unpack(common_seq_r16_present, 1)); + HANDLE_CODE(bref.unpack(time_params_r16_present, 1)); + HANDLE_CODE(bref.unpack(res_cfg_e_drx_short_r16_present, 1)); + HANDLE_CODE(bref.unpack(res_cfg_e_drx_long_r16_present, 1)); + HANDLE_CODE(bref.unpack(prob_thresh_list_r16_present, 1)); + HANDLE_CODE(bref.unpack(group_narrow_band_list_r16_present, 1)); + + if (common_seq_r16_present) { + HANDLE_CODE(common_seq_r16.unpack(bref)); + } + if (time_params_r16_present) { + HANDLE_CODE(time_params_r16.unpack(bref)); + } + HANDLE_CODE(res_cfg_drx_r16.unpack(bref)); + if (res_cfg_e_drx_short_r16_present) { + HANDLE_CODE(res_cfg_e_drx_short_r16.unpack(bref)); + } + if (res_cfg_e_drx_long_r16_present) { + HANDLE_CODE(res_cfg_e_drx_long_r16.unpack(bref)); + } + if (prob_thresh_list_r16_present) { + HANDLE_CODE(unpack_dyn_seq_of(prob_thresh_list_r16, bref, 1, 3)); + } + if (group_narrow_band_list_r16_present) { + HANDLE_CODE(unpack_dyn_seq_of(group_narrow_band_list_r16, bref, 1, 16, BitPacker(1))); + } + + return SRSASN_SUCCESS; +} +void gwus_cfg_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (group_alternation_r16_present) { + j.write_str("groupAlternation-r16", "true"); + } + if (common_seq_r16_present) { + j.write_str("commonSequence-r16", common_seq_r16.to_string()); + } + if (time_params_r16_present) { + j.write_fieldname("timeParameters-r16"); + time_params_r16.to_json(j); + } + j.write_fieldname("resourceConfigDRX-r16"); + res_cfg_drx_r16.to_json(j); + if (res_cfg_e_drx_short_r16_present) { + j.write_fieldname("resourceConfig-eDRX-Short-r16"); + res_cfg_e_drx_short_r16.to_json(j); + } + if (res_cfg_e_drx_long_r16_present) { + j.write_fieldname("resourceConfig-eDRX-Long-r16"); + res_cfg_e_drx_long_r16.to_json(j); + } + if (prob_thresh_list_r16_present) { + j.start_array("probThreshList-r16"); + for (const auto& e1 : prob_thresh_list_r16) { + j.write_str(e1.to_string()); + } + j.end_array(); + } + if (group_narrow_band_list_r16_present) { + j.start_array("groupNarrowBandList-r16"); + for (const auto& e1 : group_narrow_band_list_r16) { + j.write_bool(e1); + } + j.end_array(); + } + j.end_obj(); +} + +const char* gwus_cfg_r16_s::common_seq_r16_opts::to_string() const +{ + static const char* options[] = {"g0", "g126"}; + return convert_enum_idx(options, 2, value, "gwus_cfg_r16_s::common_seq_r16_e_"); +} +uint8_t gwus_cfg_r16_s::common_seq_r16_opts::to_number() const +{ + static const uint8_t options[] = {0, 126}; + return map_enum_number(options, 2, value, "gwus_cfg_r16_s::common_seq_r16_e_"); +} + // HighSpeedConfig-r14 ::= SEQUENCE SRSASN_CODE high_speed_cfg_r14_s::pack(bit_ref& bref) const { @@ -2135,6 +2652,33 @@ void high_speed_cfg_v1530_s::to_json(json_writer& j) const j.end_obj(); } +// HighSpeedConfig-v1610 ::= SEQUENCE +SRSASN_CODE high_speed_cfg_v1610_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(high_speed_enh_meas_flag2_r16_present, 1)); + HANDLE_CODE(bref.pack(high_speed_enh_demod_flag2_r16_present, 1)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE high_speed_cfg_v1610_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(high_speed_enh_meas_flag2_r16_present, 1)); + HANDLE_CODE(bref.unpack(high_speed_enh_demod_flag2_r16_present, 1)); + + return SRSASN_SUCCESS; +} +void high_speed_cfg_v1610_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (high_speed_enh_meas_flag2_r16_present) { + j.write_str("highSpeedEnhMeasFlag2-r16", "true"); + } + if (high_speed_enh_demod_flag2_r16_present) { + j.write_str("highSpeedEnhDemodFlag2-r16", "true"); + } + j.end_obj(); +} + // PCCH-Config ::= SEQUENCE SRSASN_CODE pcch_cfg_s::pack(bit_ref& bref) const { @@ -2244,6 +2788,22 @@ uint16_t pcch_cfg_v1310_s::nb_v1310_opts::to_number() const return map_enum_number(options, 3, value, "pcch_cfg_v1310_s::nb_v1310_e_"); } +// PCCH-Config-v1700 ::= SEQUENCE +SRSASN_CODE pcch_cfg_v1700_s::pack(bit_ref& bref) const +{ + return SRSASN_SUCCESS; +} +SRSASN_CODE pcch_cfg_v1700_s::unpack(cbit_ref& bref) +{ + return SRSASN_SUCCESS; +} +void pcch_cfg_v1700_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_str("ranPagingInIdlePO-r17", "true"); + j.end_obj(); +} + // PDSCH-ConfigCommon ::= SEQUENCE SRSASN_CODE pdsch_cfg_common_s::pack(bit_ref& bref) const { @@ -2608,6 +3168,37 @@ void prach_cfg_sib_v1530_s::to_json(json_writer& j) const j.end_obj(); } +// PRACH-TxDuration-r17 ::= SEQUENCE +SRSASN_CODE prach_tx_dur_r17_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(prach_tx_dur_r17.pack(bref)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE prach_tx_dur_r17_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(prach_tx_dur_r17.unpack(bref)); + + return SRSASN_SUCCESS; +} +void prach_tx_dur_r17_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_str("prach-TxDuration-r17", prach_tx_dur_r17.to_string()); + j.end_obj(); +} + +const char* prach_tx_dur_r17_s::prach_tx_dur_r17_opts::to_string() const +{ + static const char* options[] = {"n1", "n2", "n4", "n8", "n16", "n32", "n64", "n128"}; + return convert_enum_idx(options, 8, value, "prach_tx_dur_r17_s::prach_tx_dur_r17_e_"); +} +uint8_t prach_tx_dur_r17_s::prach_tx_dur_r17_opts::to_number() const +{ + static const uint8_t options[] = {1, 2, 4, 8, 16, 32, 64, 128}; + return map_enum_number(options, 8, value, "prach_tx_dur_r17_s::prach_tx_dur_r17_e_"); +} + // PUCCH-ConfigCommon ::= SEQUENCE SRSASN_CODE pucch_cfg_common_s::pack(bit_ref& bref) const { @@ -2816,6 +3407,37 @@ uint8_t pucch_cfg_common_v1430_s::pucch_num_repeat_ce_msg4_level3_r14_opts::to_n return map_enum_number(options, 2, value, "pucch_cfg_common_v1430_s::pucch_num_repeat_ce_msg4_level3_r14_e_"); } +// PUCCH-TxDuration-r17 ::= SEQUENCE +SRSASN_CODE pucch_tx_dur_r17_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(pucch_tx_dur_r17.pack(bref)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE pucch_tx_dur_r17_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(pucch_tx_dur_r17.unpack(bref)); + + return SRSASN_SUCCESS; +} +void pucch_tx_dur_r17_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_str("pucch-TxDuration-r17", pucch_tx_dur_r17.to_string()); + j.end_obj(); +} + +const char* pucch_tx_dur_r17_s::pucch_tx_dur_r17_opts::to_string() const +{ + static const char* options[] = {"sf2", "sf4", "sf8", "sf16", "sf32", "sf64", "sf128"}; + return convert_enum_idx(options, 7, value, "pucch_tx_dur_r17_s::pucch_tx_dur_r17_e_"); +} +uint8_t pucch_tx_dur_r17_s::pucch_tx_dur_r17_opts::to_number() const +{ + static const uint8_t options[] = {2, 4, 8, 16, 32, 64, 128}; + return map_enum_number(options, 7, value, "pucch_tx_dur_r17_s::pucch_tx_dur_r17_e_"); +} + // PUSCH-ConfigCommon ::= SEQUENCE SRSASN_CODE pusch_cfg_common_s::pack(bit_ref& bref) const { @@ -2960,6 +3582,37 @@ uint16_t pusch_cfg_common_v1310_s::pusch_max_num_repeat_cemode_b_r13_opts::to_nu return map_enum_number(options, 8, value, "pusch_cfg_common_v1310_s::pusch_max_num_repeat_cemode_b_r13_e_"); } +// PUSCH-TxDuration-r17 ::= SEQUENCE +SRSASN_CODE pusch_tx_dur_r17_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(pusch_tx_dur_r17.pack(bref)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE pusch_tx_dur_r17_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(pusch_tx_dur_r17.unpack(bref)); + + return SRSASN_SUCCESS; +} +void pusch_tx_dur_r17_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_str("pusch-TxDuration-r17", pusch_tx_dur_r17.to_string()); + j.end_obj(); +} + +const char* pusch_tx_dur_r17_s::pusch_tx_dur_r17_opts::to_string() const +{ + static const char* options[] = {"n2", "n4", "n8", "n16", "n32", "n64", "n128", "n256"}; + return convert_enum_idx(options, 8, value, "pusch_tx_dur_r17_s::pusch_tx_dur_r17_e_"); +} +uint16_t pusch_tx_dur_r17_s::pusch_tx_dur_r17_opts::to_number() const +{ + static const uint16_t options[] = {2, 4, 8, 16, 32, 64, 128, 256}; + return map_enum_number(options, 8, value, "pusch_tx_dur_r17_s::pusch_tx_dur_r17_e_"); +} + // RACH-ConfigCommon ::= SEQUENCE SRSASN_CODE rach_cfg_common_s::pack(bit_ref& bref) const { @@ -3534,6 +4187,29 @@ bool ul_pwr_ctrl_common_v1530_s::operator==(const ul_pwr_ctrl_common_v1530_s& ot return delta_flist_spucch_r15 == other.delta_flist_spucch_r15; } +// UplinkPowerControlCommon-v1610 ::= SEQUENCE +SRSASN_CODE ul_pwr_ctrl_common_v1610_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(alpha_srs_add_r16.pack(bref)); + HANDLE_CODE(pack_integer(bref, p0_nominal_srs_add_r16, (int8_t)-126, (int8_t)24)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE ul_pwr_ctrl_common_v1610_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(alpha_srs_add_r16.unpack(bref)); + HANDLE_CODE(unpack_integer(p0_nominal_srs_add_r16, bref, (int8_t)-126, (int8_t)24)); + + return SRSASN_SUCCESS; +} +void ul_pwr_ctrl_common_v1610_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_str("alphaSRS-Add-r16", alpha_srs_add_r16.to_string()); + j.write_int("p0-NominalSRS-Add-r16", p0_nominal_srs_add_r16); + j.end_obj(); +} + // WUS-Config-r15 ::= SEQUENCE SRSASN_CODE wus_cfg_r15_s::pack(bit_ref& bref) const { @@ -3689,6 +4365,37 @@ const char* wus_cfg_v1560_s::pwr_boost_r15_opts::to_number_string() const return convert_enum_idx(options, 4, value, "wus_cfg_v1560_s::pwr_boost_r15_e_"); } +// WUS-Config-v1610 ::= SEQUENCE +SRSASN_CODE wus_cfg_v1610_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(num_drx_cycles_relaxed_r16.pack(bref)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE wus_cfg_v1610_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(num_drx_cycles_relaxed_r16.unpack(bref)); + + return SRSASN_SUCCESS; +} +void wus_cfg_v1610_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_str("numDRX-CyclesRelaxed-r16", num_drx_cycles_relaxed_r16.to_string()); + j.end_obj(); +} + +const char* wus_cfg_v1610_s::num_drx_cycles_relaxed_r16_opts::to_string() const +{ + static const char* options[] = {"n1", "n2", "n4", "n8"}; + return convert_enum_idx(options, 4, value, "wus_cfg_v1610_s::num_drx_cycles_relaxed_r16_e_"); +} +uint8_t wus_cfg_v1610_s::num_drx_cycles_relaxed_r16_opts::to_number() const +{ + static const uint8_t options[] = {1, 2, 4, 8}; + return map_enum_number(options, 4, value, "wus_cfg_v1610_s::num_drx_cycles_relaxed_r16_e_"); +} + // RadioResourceConfigCommonSIB ::= SEQUENCE SRSASN_CODE rr_cfg_common_sib_s::pack(bit_ref& bref) const { @@ -3725,6 +4432,17 @@ SRSASN_CODE rr_cfg_common_sib_s::pack(bit_ref& bref) const group_flags[5] |= high_speed_cfg_v1530.is_present(); group_flags[6] |= ul_pwr_ctrl_common_v1540.is_present(); group_flags[7] |= wus_cfg_v1560.is_present(); + group_flags[8] |= wus_cfg_v1610.is_present(); + group_flags[8] |= high_speed_cfg_v1610.is_present(); + group_flags[8] |= crs_ch_est_mpdcch_cfg_common_r16.is_present(); + group_flags[8] |= gwus_cfg_r16.is_present(); + group_flags[8] |= ul_pwr_ctrl_common_v1610.is_present(); + group_flags[8] |= rss_meas_cfg_r16_present; + group_flags[8] |= rss_meas_non_ncl_r16_present; + group_flags[8] |= punctured_subcarriers_dl_r16_present; + group_flags[8] |= high_speed_inter_rat_nr_r16_present; + group_flags[9] |= pcch_cfg_v1700.is_present(); + group_flags[9] |= ntn_cfg_common_r17.is_present(); group_flags.pack(bref); if (group_flags[0]) { @@ -3835,6 +4553,65 @@ SRSASN_CODE rr_cfg_common_sib_s::pack(bit_ref& bref) const HANDLE_CODE(wus_cfg_v1560->pack(bref)); } } + if (group_flags[8]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(wus_cfg_v1610.is_present(), 1)); + HANDLE_CODE(bref.pack(high_speed_cfg_v1610.is_present(), 1)); + HANDLE_CODE(bref.pack(crs_ch_est_mpdcch_cfg_common_r16.is_present(), 1)); + HANDLE_CODE(bref.pack(gwus_cfg_r16.is_present(), 1)); + HANDLE_CODE(bref.pack(ul_pwr_ctrl_common_v1610.is_present(), 1)); + HANDLE_CODE(bref.pack(rss_meas_cfg_r16_present, 1)); + HANDLE_CODE(bref.pack(rss_meas_non_ncl_r16_present, 1)); + HANDLE_CODE(bref.pack(punctured_subcarriers_dl_r16_present, 1)); + HANDLE_CODE(bref.pack(high_speed_inter_rat_nr_r16_present, 1)); + if (wus_cfg_v1610.is_present()) { + HANDLE_CODE(wus_cfg_v1610->pack(bref)); + } + if (high_speed_cfg_v1610.is_present()) { + HANDLE_CODE(high_speed_cfg_v1610->pack(bref)); + } + if (crs_ch_est_mpdcch_cfg_common_r16.is_present()) { + HANDLE_CODE(crs_ch_est_mpdcch_cfg_common_r16->pack(bref)); + } + if (gwus_cfg_r16.is_present()) { + HANDLE_CODE(gwus_cfg_r16->pack(bref)); + } + if (ul_pwr_ctrl_common_v1610.is_present()) { + HANDLE_CODE(ul_pwr_ctrl_common_v1610->pack(bref)); + } + if (punctured_subcarriers_dl_r16_present) { + HANDLE_CODE(punctured_subcarriers_dl_r16.pack(bref)); + } + if (high_speed_inter_rat_nr_r16_present) { + HANDLE_CODE(bref.pack(high_speed_inter_rat_nr_r16, 1)); + } + } + if (group_flags[9]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(pcch_cfg_v1700.is_present(), 1)); + HANDLE_CODE(bref.pack(ntn_cfg_common_r17.is_present(), 1)); + if (pcch_cfg_v1700.is_present()) { + HANDLE_CODE(pcch_cfg_v1700->pack(bref)); + } + if (ntn_cfg_common_r17.is_present()) { + HANDLE_CODE(bref.pack(ntn_cfg_common_r17->ta_report_r17_present, 1)); + HANDLE_CODE(bref.pack(ntn_cfg_common_r17->prach_tx_dur_r17_present, 1)); + HANDLE_CODE(bref.pack(ntn_cfg_common_r17->pucch_tx_dur_r17_present, 1)); + HANDLE_CODE(bref.pack(ntn_cfg_common_r17->pusch_tx_dur_r17_present, 1)); + HANDLE_CODE(ntn_cfg_common_r17->t318_r17.pack(bref)); + if (ntn_cfg_common_r17->prach_tx_dur_r17_present) { + HANDLE_CODE(ntn_cfg_common_r17->prach_tx_dur_r17.pack(bref)); + } + if (ntn_cfg_common_r17->pucch_tx_dur_r17_present) { + HANDLE_CODE(ntn_cfg_common_r17->pucch_tx_dur_r17.pack(bref)); + } + if (ntn_cfg_common_r17->pusch_tx_dur_r17_present) { + HANDLE_CODE(ntn_cfg_common_r17->pusch_tx_dur_r17.pack(bref)); + } + } + } } return SRSASN_SUCCESS; } @@ -3853,7 +4630,7 @@ SRSASN_CODE rr_cfg_common_sib_s::unpack(cbit_ref& bref) HANDLE_CODE(ul_cp_len.unpack(bref)); if (ext) { - ext_groups_unpacker_guard group_flags(8); + ext_groups_unpacker_guard group_flags(10); group_flags.unpack(bref); if (group_flags[0]) { @@ -4002,6 +4779,79 @@ SRSASN_CODE rr_cfg_common_sib_s::unpack(cbit_ref& bref) HANDLE_CODE(wus_cfg_v1560->unpack(bref)); } } + if (group_flags[8]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + bool wus_cfg_v1610_present; + HANDLE_CODE(bref.unpack(wus_cfg_v1610_present, 1)); + wus_cfg_v1610.set_present(wus_cfg_v1610_present); + bool high_speed_cfg_v1610_present; + HANDLE_CODE(bref.unpack(high_speed_cfg_v1610_present, 1)); + high_speed_cfg_v1610.set_present(high_speed_cfg_v1610_present); + bool crs_ch_est_mpdcch_cfg_common_r16_present; + HANDLE_CODE(bref.unpack(crs_ch_est_mpdcch_cfg_common_r16_present, 1)); + crs_ch_est_mpdcch_cfg_common_r16.set_present(crs_ch_est_mpdcch_cfg_common_r16_present); + bool gwus_cfg_r16_present; + HANDLE_CODE(bref.unpack(gwus_cfg_r16_present, 1)); + gwus_cfg_r16.set_present(gwus_cfg_r16_present); + bool ul_pwr_ctrl_common_v1610_present; + HANDLE_CODE(bref.unpack(ul_pwr_ctrl_common_v1610_present, 1)); + ul_pwr_ctrl_common_v1610.set_present(ul_pwr_ctrl_common_v1610_present); + HANDLE_CODE(bref.unpack(rss_meas_cfg_r16_present, 1)); + HANDLE_CODE(bref.unpack(rss_meas_non_ncl_r16_present, 1)); + HANDLE_CODE(bref.unpack(punctured_subcarriers_dl_r16_present, 1)); + HANDLE_CODE(bref.unpack(high_speed_inter_rat_nr_r16_present, 1)); + if (wus_cfg_v1610.is_present()) { + HANDLE_CODE(wus_cfg_v1610->unpack(bref)); + } + if (high_speed_cfg_v1610.is_present()) { + HANDLE_CODE(high_speed_cfg_v1610->unpack(bref)); + } + if (crs_ch_est_mpdcch_cfg_common_r16.is_present()) { + HANDLE_CODE(crs_ch_est_mpdcch_cfg_common_r16->unpack(bref)); + } + if (gwus_cfg_r16.is_present()) { + HANDLE_CODE(gwus_cfg_r16->unpack(bref)); + } + if (ul_pwr_ctrl_common_v1610.is_present()) { + HANDLE_CODE(ul_pwr_ctrl_common_v1610->unpack(bref)); + } + if (punctured_subcarriers_dl_r16_present) { + HANDLE_CODE(punctured_subcarriers_dl_r16.unpack(bref)); + } + if (high_speed_inter_rat_nr_r16_present) { + HANDLE_CODE(bref.unpack(high_speed_inter_rat_nr_r16, 1)); + } + } + if (group_flags[9]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + bool pcch_cfg_v1700_present; + HANDLE_CODE(bref.unpack(pcch_cfg_v1700_present, 1)); + pcch_cfg_v1700.set_present(pcch_cfg_v1700_present); + bool ntn_cfg_common_r17_present; + HANDLE_CODE(bref.unpack(ntn_cfg_common_r17_present, 1)); + ntn_cfg_common_r17.set_present(ntn_cfg_common_r17_present); + if (pcch_cfg_v1700.is_present()) { + HANDLE_CODE(pcch_cfg_v1700->unpack(bref)); + } + if (ntn_cfg_common_r17.is_present()) { + HANDLE_CODE(bref.unpack(ntn_cfg_common_r17->ta_report_r17_present, 1)); + HANDLE_CODE(bref.unpack(ntn_cfg_common_r17->prach_tx_dur_r17_present, 1)); + HANDLE_CODE(bref.unpack(ntn_cfg_common_r17->pucch_tx_dur_r17_present, 1)); + HANDLE_CODE(bref.unpack(ntn_cfg_common_r17->pusch_tx_dur_r17_present, 1)); + HANDLE_CODE(ntn_cfg_common_r17->t318_r17.unpack(bref)); + if (ntn_cfg_common_r17->prach_tx_dur_r17_present) { + HANDLE_CODE(ntn_cfg_common_r17->prach_tx_dur_r17.unpack(bref)); + } + if (ntn_cfg_common_r17->pucch_tx_dur_r17_present) { + HANDLE_CODE(ntn_cfg_common_r17->pucch_tx_dur_r17.unpack(bref)); + } + if (ntn_cfg_common_r17->pusch_tx_dur_r17_present) { + HANDLE_CODE(ntn_cfg_common_r17->pusch_tx_dur_r17.unpack(bref)); + } + } + } } return SRSASN_SUCCESS; } @@ -4104,10 +4954,78 @@ void rr_cfg_common_sib_s::to_json(json_writer& j) const j.write_fieldname("wus-Config-v1560"); wus_cfg_v1560->to_json(j); } + if (wus_cfg_v1610.is_present()) { + j.write_fieldname("wus-Config-v1610"); + wus_cfg_v1610->to_json(j); + } + if (high_speed_cfg_v1610.is_present()) { + j.write_fieldname("highSpeedConfig-v1610"); + high_speed_cfg_v1610->to_json(j); + } + if (crs_ch_est_mpdcch_cfg_common_r16.is_present()) { + j.write_fieldname("crs-ChEstMPDCCH-ConfigCommon-r16"); + crs_ch_est_mpdcch_cfg_common_r16->to_json(j); + } + if (gwus_cfg_r16.is_present()) { + j.write_fieldname("gwus-Config-r16"); + gwus_cfg_r16->to_json(j); + } + if (ul_pwr_ctrl_common_v1610.is_present()) { + j.write_fieldname("uplinkPowerControlCommon-v1610"); + ul_pwr_ctrl_common_v1610->to_json(j); + } + if (rss_meas_cfg_r16_present) { + j.write_str("rss-MeasConfig-r16", "enabled"); + } + if (rss_meas_non_ncl_r16_present) { + j.write_str("rss-MeasNonNCL-r16", "enabled"); + } + if (punctured_subcarriers_dl_r16_present) { + j.write_str("puncturedSubcarriersDL-r16", punctured_subcarriers_dl_r16.to_string()); + } + if (high_speed_inter_rat_nr_r16_present) { + j.write_bool("highSpeedInterRAT-NR-r16", high_speed_inter_rat_nr_r16); + } + if (pcch_cfg_v1700.is_present()) { + j.write_fieldname("pcch-Config-v1700"); + pcch_cfg_v1700->to_json(j); + } + if (ntn_cfg_common_r17.is_present()) { + j.write_fieldname("ntn-ConfigCommon-r17"); + j.start_obj(); + if (ntn_cfg_common_r17->ta_report_r17_present) { + j.write_str("ta-Report-r17", "enabled"); + } + j.write_str("t318-r17", ntn_cfg_common_r17->t318_r17.to_string()); + if (ntn_cfg_common_r17->prach_tx_dur_r17_present) { + j.write_fieldname("prach-TxDuration-r17"); + ntn_cfg_common_r17->prach_tx_dur_r17.to_json(j); + } + if (ntn_cfg_common_r17->pucch_tx_dur_r17_present) { + j.write_fieldname("pucch-TxDuration-r17"); + ntn_cfg_common_r17->pucch_tx_dur_r17.to_json(j); + } + if (ntn_cfg_common_r17->pusch_tx_dur_r17_present) { + j.write_fieldname("pusch-TxDuration-r17"); + ntn_cfg_common_r17->pusch_tx_dur_r17.to_json(j); + } + j.end_obj(); + } } j.end_obj(); } +const char* rr_cfg_common_sib_s::ntn_cfg_common_r17_s_::t318_r17_opts::to_string() const +{ + static const char* options[] = {"ms0", "ms50", "ms100", "ms200", "ms500", "ms1000", "ms2000", "ms4000"}; + return convert_enum_idx(options, 8, value, "rr_cfg_common_sib_s::ntn_cfg_common_r17_s_::t318_r17_e_"); +} +uint16_t rr_cfg_common_sib_s::ntn_cfg_common_r17_s_::t318_r17_opts::to_number() const +{ + static const uint16_t options[] = {0, 50, 100, 200, 500, 1000, 2000, 4000}; + return map_enum_number(options, 8, value, "rr_cfg_common_sib_s::ntn_cfg_common_r17_s_::t318_r17_e_"); +} + // TimeAlignmentTimer ::= ENUMERATED const char* time_align_timer_opts::to_string() const { @@ -4583,6 +5501,7 @@ SRSASN_CODE rr_cfg_common_scell_r10_s::pack(bit_ref& bref) const group_flags[4] |= srs_flex_timing_r14_present; group_flags[5] |= mbsfn_sf_cfg_list_v1430.is_present(); group_flags[6] |= ul_pwr_ctrl_common_scell_v1530.is_present(); + group_flags[7] |= high_speed_enh_meas_flag_scell_r16_present; group_flags.pack(bref); if (group_flags[0]) { @@ -4694,6 +5613,14 @@ SRSASN_CODE rr_cfg_common_scell_r10_s::pack(bit_ref& bref) const HANDLE_CODE(ul_pwr_ctrl_common_scell_v1530->pack(bref)); } } + if (group_flags[7]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(high_speed_enh_meas_flag_scell_r16_present, 1)); + if (high_speed_enh_meas_flag_scell_r16_present) { + HANDLE_CODE(bref.pack(high_speed_enh_meas_flag_scell_r16, 1)); + } + } } return SRSASN_SUCCESS; } @@ -4741,7 +5668,7 @@ SRSASN_CODE rr_cfg_common_scell_r10_s::unpack(cbit_ref& bref) } if (ext) { - ext_groups_unpacker_guard group_flags(7); + ext_groups_unpacker_guard group_flags(8); group_flags.unpack(bref); if (group_flags[0]) { @@ -4877,6 +5804,14 @@ SRSASN_CODE rr_cfg_common_scell_r10_s::unpack(cbit_ref& bref) HANDLE_CODE(ul_pwr_ctrl_common_scell_v1530->unpack(bref)); } } + if (group_flags[7]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.unpack(high_speed_enh_meas_flag_scell_r16_present, 1)); + if (high_speed_enh_meas_flag_scell_r16_present) { + HANDLE_CODE(bref.unpack(high_speed_enh_meas_flag_scell_r16, 1)); + } + } } return SRSASN_SUCCESS; } @@ -5019,6 +5954,9 @@ void rr_cfg_common_scell_r10_s::to_json(json_writer& j) const j.write_fieldname("uplinkPowerControlCommonSCell-v1530"); ul_pwr_ctrl_common_scell_v1530->to_json(j); } + if (high_speed_enh_meas_flag_scell_r16_present) { + j.write_bool("highSpeedEnhMeasFlagSCell-r16", high_speed_enh_meas_flag_scell_r16); + } } j.end_obj(); } @@ -5105,7 +6043,10 @@ bool rr_cfg_common_scell_r10_s::operator==(const rr_cfg_common_scell_r10_s& othe (not mbsfn_sf_cfg_list_v1430.is_present() or *mbsfn_sf_cfg_list_v1430 == *other.mbsfn_sf_cfg_list_v1430) and ul_pwr_ctrl_common_scell_v1530.is_present() == other.ul_pwr_ctrl_common_scell_v1530.is_present() and (not ul_pwr_ctrl_common_scell_v1530.is_present() or - *ul_pwr_ctrl_common_scell_v1530 == *other.ul_pwr_ctrl_common_scell_v1530))); + *ul_pwr_ctrl_common_scell_v1530 == *other.ul_pwr_ctrl_common_scell_v1530) and + high_speed_enh_meas_flag_scell_r16_present == other.high_speed_enh_meas_flag_scell_r16_present and + (not high_speed_enh_meas_flag_scell_r16_present or + high_speed_enh_meas_flag_scell_r16 == other.high_speed_enh_meas_flag_scell_r16))); } const char* rr_cfg_common_scell_r10_s::non_ul_cfg_r10_s_::dl_bw_r10_opts::to_string() const @@ -5501,6 +6442,10 @@ SRSASN_CODE rr_cfg_common_s::pack(bit_ref& bref) const group_flags[5] |= tdd_cfg_v1450.is_present(); group_flags[6] |= ul_pwr_ctrl_common_v1530.is_present(); group_flags[6] |= high_speed_cfg_v1530.is_present(); + group_flags[7] |= high_speed_cfg_v1610.is_present(); + group_flags[7] |= ul_pwr_ctrl_common_v1610.is_present(); + group_flags[7] |= high_speed_inter_rat_nr_r16_present; + group_flags[8] |= ntn_cfg_common_r17.is_present(); group_flags.pack(bref); if (group_flags[0]) { @@ -5595,6 +6540,43 @@ SRSASN_CODE rr_cfg_common_s::pack(bit_ref& bref) const HANDLE_CODE(high_speed_cfg_v1530->pack(bref)); } } + if (group_flags[7]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(high_speed_cfg_v1610.is_present(), 1)); + HANDLE_CODE(bref.pack(ul_pwr_ctrl_common_v1610.is_present(), 1)); + HANDLE_CODE(bref.pack(high_speed_inter_rat_nr_r16_present, 1)); + if (high_speed_cfg_v1610.is_present()) { + HANDLE_CODE(high_speed_cfg_v1610->pack(bref)); + } + if (ul_pwr_ctrl_common_v1610.is_present()) { + HANDLE_CODE(ul_pwr_ctrl_common_v1610->pack(bref)); + } + if (high_speed_inter_rat_nr_r16_present) { + HANDLE_CODE(bref.pack(high_speed_inter_rat_nr_r16, 1)); + } + } + if (group_flags[8]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(ntn_cfg_common_r17.is_present(), 1)); + if (ntn_cfg_common_r17.is_present()) { + HANDLE_CODE(bref.pack(ntn_cfg_common_r17->ta_report_r17_present, 1)); + HANDLE_CODE(bref.pack(ntn_cfg_common_r17->prach_tx_dur_r17_present, 1)); + HANDLE_CODE(bref.pack(ntn_cfg_common_r17->pucch_tx_dur_r17_present, 1)); + HANDLE_CODE(bref.pack(ntn_cfg_common_r17->pusch_tx_dur_r17_present, 1)); + HANDLE_CODE(ntn_cfg_common_r17->t318_r17.pack(bref)); + if (ntn_cfg_common_r17->prach_tx_dur_r17_present) { + HANDLE_CODE(ntn_cfg_common_r17->prach_tx_dur_r17.pack(bref)); + } + if (ntn_cfg_common_r17->pucch_tx_dur_r17_present) { + HANDLE_CODE(ntn_cfg_common_r17->pucch_tx_dur_r17.pack(bref)); + } + if (ntn_cfg_common_r17->pusch_tx_dur_r17_present) { + HANDLE_CODE(ntn_cfg_common_r17->pusch_tx_dur_r17.pack(bref)); + } + } + } } return SRSASN_SUCCESS; } @@ -5643,7 +6625,7 @@ SRSASN_CODE rr_cfg_common_s::unpack(cbit_ref& bref) HANDLE_CODE(ul_cp_len.unpack(bref)); if (ext) { - ext_groups_unpacker_guard group_flags(7); + ext_groups_unpacker_guard group_flags(9); group_flags.unpack(bref); if (group_flags[0]) { @@ -5770,6 +6752,49 @@ SRSASN_CODE rr_cfg_common_s::unpack(cbit_ref& bref) HANDLE_CODE(high_speed_cfg_v1530->unpack(bref)); } } + if (group_flags[7]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + bool high_speed_cfg_v1610_present; + HANDLE_CODE(bref.unpack(high_speed_cfg_v1610_present, 1)); + high_speed_cfg_v1610.set_present(high_speed_cfg_v1610_present); + bool ul_pwr_ctrl_common_v1610_present; + HANDLE_CODE(bref.unpack(ul_pwr_ctrl_common_v1610_present, 1)); + ul_pwr_ctrl_common_v1610.set_present(ul_pwr_ctrl_common_v1610_present); + HANDLE_CODE(bref.unpack(high_speed_inter_rat_nr_r16_present, 1)); + if (high_speed_cfg_v1610.is_present()) { + HANDLE_CODE(high_speed_cfg_v1610->unpack(bref)); + } + if (ul_pwr_ctrl_common_v1610.is_present()) { + HANDLE_CODE(ul_pwr_ctrl_common_v1610->unpack(bref)); + } + if (high_speed_inter_rat_nr_r16_present) { + HANDLE_CODE(bref.unpack(high_speed_inter_rat_nr_r16, 1)); + } + } + if (group_flags[8]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + bool ntn_cfg_common_r17_present; + HANDLE_CODE(bref.unpack(ntn_cfg_common_r17_present, 1)); + ntn_cfg_common_r17.set_present(ntn_cfg_common_r17_present); + if (ntn_cfg_common_r17.is_present()) { + HANDLE_CODE(bref.unpack(ntn_cfg_common_r17->ta_report_r17_present, 1)); + HANDLE_CODE(bref.unpack(ntn_cfg_common_r17->prach_tx_dur_r17_present, 1)); + HANDLE_CODE(bref.unpack(ntn_cfg_common_r17->pucch_tx_dur_r17_present, 1)); + HANDLE_CODE(bref.unpack(ntn_cfg_common_r17->pusch_tx_dur_r17_present, 1)); + HANDLE_CODE(ntn_cfg_common_r17->t318_r17.unpack(bref)); + if (ntn_cfg_common_r17->prach_tx_dur_r17_present) { + HANDLE_CODE(ntn_cfg_common_r17->prach_tx_dur_r17.unpack(bref)); + } + if (ntn_cfg_common_r17->pucch_tx_dur_r17_present) { + HANDLE_CODE(ntn_cfg_common_r17->pucch_tx_dur_r17.unpack(bref)); + } + if (ntn_cfg_common_r17->pusch_tx_dur_r17_present) { + HANDLE_CODE(ntn_cfg_common_r17->pusch_tx_dur_r17.unpack(bref)); + } + } + } } return SRSASN_SUCCESS; } @@ -5881,6 +6906,49 @@ void rr_cfg_common_s::to_json(json_writer& j) const j.write_fieldname("highSpeedConfig-v1530"); high_speed_cfg_v1530->to_json(j); } + if (high_speed_cfg_v1610.is_present()) { + j.write_fieldname("highSpeedConfig-v1610"); + high_speed_cfg_v1610->to_json(j); + } + if (ul_pwr_ctrl_common_v1610.is_present()) { + j.write_fieldname("uplinkPowerControlCommon-v1610"); + ul_pwr_ctrl_common_v1610->to_json(j); + } + if (high_speed_inter_rat_nr_r16_present) { + j.write_bool("highSpeedInterRAT-NR-r16", high_speed_inter_rat_nr_r16); + } + if (ntn_cfg_common_r17.is_present()) { + j.write_fieldname("ntn-ConfigCommon-r17"); + j.start_obj(); + if (ntn_cfg_common_r17->ta_report_r17_present) { + j.write_str("ta-Report-r17", "enabled"); + } + j.write_str("t318-r17", ntn_cfg_common_r17->t318_r17.to_string()); + if (ntn_cfg_common_r17->prach_tx_dur_r17_present) { + j.write_fieldname("prach-TxDuration-r17"); + ntn_cfg_common_r17->prach_tx_dur_r17.to_json(j); + } + if (ntn_cfg_common_r17->pucch_tx_dur_r17_present) { + j.write_fieldname("pucch-TxDuration-r17"); + ntn_cfg_common_r17->pucch_tx_dur_r17.to_json(j); + } + if (ntn_cfg_common_r17->pusch_tx_dur_r17_present) { + j.write_fieldname("pusch-TxDuration-r17"); + ntn_cfg_common_r17->pusch_tx_dur_r17.to_json(j); + } + j.end_obj(); + } } j.end_obj(); } + +const char* rr_cfg_common_s::ntn_cfg_common_r17_s_::t318_r17_opts::to_string() const +{ + static const char* options[] = {"ms0", "ms50", "ms100", "ms200", "ms500", "ms1000", "ms2000", "ms4000", "ms6000"}; + return convert_enum_idx(options, 9, value, "rr_cfg_common_s::ntn_cfg_common_r17_s_::t318_r17_e_"); +} +uint16_t rr_cfg_common_s::ntn_cfg_common_r17_s_::t318_r17_opts::to_number() const +{ + static const uint16_t options[] = {0, 50, 100, 200, 500, 1000, 2000, 4000, 6000}; + return map_enum_number(options, 9, value, "rr_cfg_common_s::ntn_cfg_common_r17_s_::t318_r17_e_"); +} diff --git a/lib/src/asn1/rrc/rr_ded.cc b/lib/src/asn1/rrc/rr_ded.cc index 1f3628a56..4f4e018aa 100644 --- a/lib/src/asn1/rrc/rr_ded.cc +++ b/lib/src/asn1/rrc/rr_ded.cc @@ -377,6 +377,98 @@ bool dl_um_rlc_s::operator==(const dl_um_rlc_s& other) const return sn_field_len == other.sn_field_len and t_reordering == other.t_reordering; } +// DiscardTimerExt-r17 ::= ENUMERATED +const char* discard_timer_ext_r17_opts::to_string() const +{ + static const char* options[] = {"ms2000", "spare"}; + return convert_enum_idx(options, 2, value, "discard_timer_ext_r17_e"); +} +uint16_t discard_timer_ext_r17_opts::to_number() const +{ + static const uint16_t options[] = {2000}; + return map_enum_number(options, 1, value, "discard_timer_ext_r17_e"); +} + +// EthernetHeaderCompression-r16 ::= SEQUENCE +SRSASN_CODE ethernet_hdr_compress_r16_s::pack(bit_ref& bref) const +{ + bref.pack(ext, 1); + HANDLE_CODE(bref.pack(ehc_dl_r16_present, 1)); + HANDLE_CODE(bref.pack(ehc_ul_r16_present, 1)); + + HANDLE_CODE(ehc_common_r16.ehc_cid_len_r16.pack(bref)); + if (ehc_dl_r16_present) { + HANDLE_CODE(bref.pack(ehc_dl_r16.drb_continue_ehc_dl_r16_present, 1)); + } + if (ehc_ul_r16_present) { + HANDLE_CODE(bref.pack(ehc_ul_r16.drb_continue_ehc_ul_r16_present, 1)); + HANDLE_CODE(pack_integer(bref, ehc_ul_r16.max_cid_ehc_ul_r16, (uint16_t)1u, (uint16_t)32767u)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE ethernet_hdr_compress_r16_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(bref.unpack(ehc_dl_r16_present, 1)); + HANDLE_CODE(bref.unpack(ehc_ul_r16_present, 1)); + + HANDLE_CODE(ehc_common_r16.ehc_cid_len_r16.unpack(bref)); + if (ehc_dl_r16_present) { + HANDLE_CODE(bref.unpack(ehc_dl_r16.drb_continue_ehc_dl_r16_present, 1)); + } + if (ehc_ul_r16_present) { + HANDLE_CODE(bref.unpack(ehc_ul_r16.drb_continue_ehc_ul_r16_present, 1)); + HANDLE_CODE(unpack_integer(ehc_ul_r16.max_cid_ehc_ul_r16, bref, (uint16_t)1u, (uint16_t)32767u)); + } + + return SRSASN_SUCCESS; +} +void ethernet_hdr_compress_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_fieldname("ehc-Common-r16"); + j.start_obj(); + j.write_str("ehc-CID-Length-r16", ehc_common_r16.ehc_cid_len_r16.to_string()); + j.end_obj(); + if (ehc_dl_r16_present) { + j.write_fieldname("ehc-Downlink-r16"); + j.start_obj(); + if (ehc_dl_r16.drb_continue_ehc_dl_r16_present) { + j.write_str("drb-ContinueEHC-DL-r16", "true"); + } + j.end_obj(); + } + if (ehc_ul_r16_present) { + j.write_fieldname("ehc-Uplink-r16"); + j.start_obj(); + j.write_int("maxCID-EHC-UL-r16", ehc_ul_r16.max_cid_ehc_ul_r16); + if (ehc_ul_r16.drb_continue_ehc_ul_r16_present) { + j.write_str("drb-ContinueEHC-UL-r16", "true"); + } + j.end_obj(); + } + j.end_obj(); +} +bool ethernet_hdr_compress_r16_s::operator==(const ethernet_hdr_compress_r16_s& other) const +{ + return ext == other.ext and ehc_common_r16.ehc_cid_len_r16 == other.ehc_common_r16.ehc_cid_len_r16 and + ehc_dl_r16.drb_continue_ehc_dl_r16_present == other.ehc_dl_r16.drb_continue_ehc_dl_r16_present and + ehc_ul_r16.max_cid_ehc_ul_r16 == other.ehc_ul_r16.max_cid_ehc_ul_r16 and + ehc_ul_r16.drb_continue_ehc_ul_r16_present == other.ehc_ul_r16.drb_continue_ehc_ul_r16_present; +} + +const char* ethernet_hdr_compress_r16_s::ehc_common_r16_s_::ehc_cid_len_r16_opts::to_string() const +{ + static const char* options[] = {"bits7", "bits15"}; + return convert_enum_idx(options, 2, value, "ethernet_hdr_compress_r16_s::ehc_common_r16_s_::ehc_cid_len_r16_e_"); +} +uint8_t ethernet_hdr_compress_r16_s::ehc_common_r16_s_::ehc_cid_len_r16_opts::to_number() const +{ + static const uint8_t options[] = {7, 15}; + return map_enum_number(options, 2, value, "ethernet_hdr_compress_r16_s::ehc_common_r16_s_::ehc_cid_len_r16_e_"); +} + // LogicalChannelConfig ::= SEQUENCE SRSASN_CODE lc_ch_cfg_s::pack(bit_ref& bref) const { @@ -403,6 +495,7 @@ SRSASN_CODE lc_ch_cfg_s::pack(bit_ref& bref) const group_flags[3] |= lc_ch_sr_restrict_r15.is_present(); group_flags[3] |= ch_access_prio_r15.is_present(); group_flags[3] |= lch_cell_restrict_r15_present; + group_flags[4] |= bit_rate_multiplier_r16_present; group_flags.pack(bref); if (group_flags[0]) { @@ -450,6 +543,14 @@ SRSASN_CODE lc_ch_cfg_s::pack(bit_ref& bref) const HANDLE_CODE(lch_cell_restrict_r15.pack(bref)); } } + if (group_flags[4]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(bit_rate_multiplier_r16_present, 1)); + if (bit_rate_multiplier_r16_present) { + HANDLE_CODE(bit_rate_multiplier_r16.pack(bref)); + } + } } return SRSASN_SUCCESS; } @@ -469,7 +570,7 @@ SRSASN_CODE lc_ch_cfg_s::unpack(cbit_ref& bref) } if (ext) { - ext_groups_unpacker_guard group_flags(4); + ext_groups_unpacker_guard group_flags(5); group_flags.unpack(bref); if (group_flags[0]) { @@ -523,6 +624,14 @@ SRSASN_CODE lc_ch_cfg_s::unpack(cbit_ref& bref) HANDLE_CODE(lch_cell_restrict_r15.unpack(bref)); } } + if (group_flags[4]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.unpack(bit_rate_multiplier_r16_present, 1)); + if (bit_rate_multiplier_r16_present) { + HANDLE_CODE(bit_rate_multiplier_r16.unpack(bref)); + } + } } return SRSASN_SUCCESS; } @@ -568,6 +677,9 @@ void lc_ch_cfg_s::to_json(json_writer& j) const if (lch_cell_restrict_r15_present) { j.write_str("lch-CellRestriction-r15", lch_cell_restrict_r15.to_string()); } + if (bit_rate_multiplier_r16_present) { + j.write_str("bitRateMultiplier-r16", bit_rate_multiplier_r16.to_string()); + } } j.end_obj(); } @@ -595,7 +707,9 @@ bool lc_ch_cfg_s::operator==(const lc_ch_cfg_s& other) const ch_access_prio_r15.is_present() == other.ch_access_prio_r15.is_present() and (not ch_access_prio_r15.is_present() or *ch_access_prio_r15 == *other.ch_access_prio_r15) and lch_cell_restrict_r15_present == other.lch_cell_restrict_r15_present and - (not lch_cell_restrict_r15_present or lch_cell_restrict_r15 == other.lch_cell_restrict_r15))); + (not lch_cell_restrict_r15_present or lch_cell_restrict_r15 == other.lch_cell_restrict_r15) and + bit_rate_multiplier_r16_present == other.bit_rate_multiplier_r16_present and + (not bit_rate_multiplier_r16_present or bit_rate_multiplier_r16 == other.bit_rate_multiplier_r16))); } const char* lc_ch_cfg_s::ul_specific_params_s_::prioritised_bit_rate_opts::to_string() const @@ -855,6 +969,17 @@ bool lc_ch_cfg_s::ch_access_prio_r15_c_::operator==(const ch_access_prio_r15_c_& return type() == other.type() and c == other.c; } +const char* lc_ch_cfg_s::bit_rate_multiplier_r16_opts::to_string() const +{ + static const char* options[] = {"x40", "x70", "x100", "x200"}; + return convert_enum_idx(options, 4, value, "lc_ch_cfg_s::bit_rate_multiplier_r16_e_"); +} +uint8_t lc_ch_cfg_s::bit_rate_multiplier_r16_opts::to_number() const +{ + static const uint8_t options[] = {40, 70, 100, 200}; + return map_enum_number(options, 4, value, "lc_ch_cfg_s::bit_rate_multiplier_r16_e_"); +} + // P-a ::= ENUMERATED const char* p_a_opts::to_string() const { @@ -1149,6 +1274,18 @@ bool rlc_cfg_r15_s::mode_r15_c_::operator==(const mode_r15_c_& other) const return true; } +// T-ReorderingExt-r17 ::= ENUMERATED +const char* t_reordering_ext_r17_opts::to_string() const +{ + static const char* options[] = {"ms2200", "ms3200"}; + return convert_enum_idx(options, 2, value, "t_reordering_ext_r17_e"); +} +uint16_t t_reordering_ext_r17_opts::to_number() const +{ + static const uint16_t options[] = {2200, 3200}; + return map_enum_number(options, 2, value, "t_reordering_ext_r17_e"); +} + // UL-AM-RLC ::= SEQUENCE SRSASN_CODE ul_am_rlc_s::pack(bit_ref& bref) const { @@ -1516,6 +1653,8 @@ SRSASN_CODE pdcp_cfg_s::pack(bit_ref& bref) const group_flags[4] |= ul_only_hdr_compress_r14.is_present(); group_flags[5] |= ul_data_compress_r15.is_present(); group_flags[5] |= pdcp_dupl_cfg_r15.is_present(); + group_flags[6] |= ethernet_hdr_compress_r16.is_present(); + group_flags[7] |= discard_timer_ext_r17.is_present(); group_flags.pack(bref); if (group_flags[0]) { @@ -1582,6 +1721,22 @@ SRSASN_CODE pdcp_cfg_s::pack(bit_ref& bref) const HANDLE_CODE(pdcp_dupl_cfg_r15->pack(bref)); } } + if (group_flags[6]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(ethernet_hdr_compress_r16.is_present(), 1)); + if (ethernet_hdr_compress_r16.is_present()) { + HANDLE_CODE(ethernet_hdr_compress_r16->pack(bref)); + } + } + if (group_flags[7]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(discard_timer_ext_r17.is_present(), 1)); + if (discard_timer_ext_r17.is_present()) { + HANDLE_CODE(discard_timer_ext_r17->pack(bref)); + } + } } return SRSASN_SUCCESS; } @@ -1604,7 +1759,7 @@ SRSASN_CODE pdcp_cfg_s::unpack(cbit_ref& bref) HANDLE_CODE(hdr_compress.unpack(bref)); if (ext) { - ext_groups_unpacker_guard group_flags(6); + ext_groups_unpacker_guard group_flags(8); group_flags.unpack(bref); if (group_flags[0]) { @@ -1683,6 +1838,26 @@ SRSASN_CODE pdcp_cfg_s::unpack(cbit_ref& bref) HANDLE_CODE(pdcp_dupl_cfg_r15->unpack(bref)); } } + if (group_flags[6]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + bool ethernet_hdr_compress_r16_present; + HANDLE_CODE(bref.unpack(ethernet_hdr_compress_r16_present, 1)); + ethernet_hdr_compress_r16.set_present(ethernet_hdr_compress_r16_present); + if (ethernet_hdr_compress_r16.is_present()) { + HANDLE_CODE(ethernet_hdr_compress_r16->unpack(bref)); + } + } + if (group_flags[7]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + bool discard_timer_ext_r17_present; + HANDLE_CODE(bref.unpack(discard_timer_ext_r17_present, 1)); + discard_timer_ext_r17.set_present(discard_timer_ext_r17_present); + if (discard_timer_ext_r17.is_present()) { + HANDLE_CODE(discard_timer_ext_r17->unpack(bref)); + } + } } return SRSASN_SUCCESS; } @@ -1751,6 +1926,14 @@ void pdcp_cfg_s::to_json(json_writer& j) const j.write_fieldname("pdcp-DuplicationConfig-r15"); pdcp_dupl_cfg_r15->to_json(j); } + if (ethernet_hdr_compress_r16.is_present()) { + j.write_fieldname("ethernetHeaderCompression-r16"); + ethernet_hdr_compress_r16->to_json(j); + } + if (discard_timer_ext_r17.is_present()) { + j.write_fieldname("discardTimerExt-r17"); + discard_timer_ext_r17->to_json(j); + } } j.end_obj(); } @@ -1784,7 +1967,12 @@ bool pdcp_cfg_s::operator==(const pdcp_cfg_s& other) const (not ul_data_compress_r15->dictionary_r15_present or ul_data_compress_r15->dictionary_r15 == other.ul_data_compress_r15->dictionary_r15) and pdcp_dupl_cfg_r15.is_present() == other.pdcp_dupl_cfg_r15.is_present() and - (not pdcp_dupl_cfg_r15.is_present() or *pdcp_dupl_cfg_r15 == *other.pdcp_dupl_cfg_r15))); + (not pdcp_dupl_cfg_r15.is_present() or *pdcp_dupl_cfg_r15 == *other.pdcp_dupl_cfg_r15) and + ethernet_hdr_compress_r16.is_present() == other.ethernet_hdr_compress_r16.is_present() and + (not ethernet_hdr_compress_r16.is_present() or + *ethernet_hdr_compress_r16 == *other.ethernet_hdr_compress_r16) and + discard_timer_ext_r17.is_present() == other.discard_timer_ext_r17.is_present() and + (not discard_timer_ext_r17.is_present() or *discard_timer_ext_r17 == *other.discard_timer_ext_r17))); } const char* pdcp_cfg_s::discard_timer_opts::to_string() const @@ -3129,6 +3317,31 @@ bool rlc_cfg_v1530_c::operator==(const rlc_cfg_v1530_c& other) const return type() == other.type(); } +// RLC-Config-v1700 ::= SEQUENCE +SRSASN_CODE rlc_cfg_v1700_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(t_reordering_ext_r17.pack(bref)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE rlc_cfg_v1700_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(t_reordering_ext_r17.unpack(bref)); + + return SRSASN_SUCCESS; +} +void rlc_cfg_v1700_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_fieldname("t-ReorderingExt-r17"); + t_reordering_ext_r17.to_json(j); + j.end_obj(); +} +bool rlc_cfg_v1700_s::operator==(const rlc_cfg_v1700_s& other) const +{ + return t_reordering_ext_r17 == other.t_reordering_ext_r17; +} + // SPS-ConfigSL-r14 ::= SEQUENCE SRSASN_CODE sps_cfg_sl_r14_s::pack(bit_ref& bref) const { @@ -4149,6 +4362,8 @@ SRSASN_CODE drb_to_add_mod_s::pack(bit_ref& bref) const group_flags[4] |= rlc_cfg_v1530.is_present(); group_flags[4] |= rlc_bearer_cfg_secondary_r15.is_present(); group_flags[4] |= lc_ch_id_r15_present; + group_flags[5] |= daps_ho_r16_present; + group_flags[6] |= rlc_cfg_v1700.is_present(); group_flags.pack(bref); if (group_flags[0]) { @@ -4220,6 +4435,19 @@ SRSASN_CODE drb_to_add_mod_s::pack(bit_ref& bref) const HANDLE_CODE(pack_integer(bref, lc_ch_id_r15, (uint8_t)32u, (uint8_t)38u)); } } + if (group_flags[5]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(daps_ho_r16_present, 1)); + } + if (group_flags[6]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(rlc_cfg_v1700.is_present(), 1)); + if (rlc_cfg_v1700.is_present()) { + HANDLE_CODE(rlc_cfg_v1700->pack(bref)); + } + } } return SRSASN_SUCCESS; } @@ -4250,7 +4478,7 @@ SRSASN_CODE drb_to_add_mod_s::unpack(cbit_ref& bref) } if (ext) { - ext_groups_unpacker_guard group_flags(5); + ext_groups_unpacker_guard group_flags(7); group_flags.unpack(bref); if (group_flags[0]) { @@ -4334,6 +4562,21 @@ SRSASN_CODE drb_to_add_mod_s::unpack(cbit_ref& bref) HANDLE_CODE(unpack_integer(lc_ch_id_r15, bref, (uint8_t)32u, (uint8_t)38u)); } } + if (group_flags[5]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.unpack(daps_ho_r16_present, 1)); + } + if (group_flags[6]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + bool rlc_cfg_v1700_present; + HANDLE_CODE(bref.unpack(rlc_cfg_v1700_present, 1)); + rlc_cfg_v1700.set_present(rlc_cfg_v1700_present); + if (rlc_cfg_v1700.is_present()) { + HANDLE_CODE(rlc_cfg_v1700->unpack(bref)); + } + } } return SRSASN_SUCCESS; } @@ -4405,6 +4648,13 @@ void drb_to_add_mod_s::to_json(json_writer& j) const if (lc_ch_id_r15_present) { j.write_int("logicalChannelIdentity-r15", lc_ch_id_r15); } + if (daps_ho_r16_present) { + j.write_str("daps-HO-r16", "true"); + } + if (rlc_cfg_v1700.is_present()) { + j.write_fieldname("rlc-Config-v1700"); + rlc_cfg_v1700->to_json(j); + } } j.end_obj(); } @@ -4442,7 +4692,10 @@ bool drb_to_add_mod_s::operator==(const drb_to_add_mod_s& other) const (not rlc_bearer_cfg_secondary_r15.is_present() or *rlc_bearer_cfg_secondary_r15 == *other.rlc_bearer_cfg_secondary_r15) and lc_ch_id_r15_present == other.lc_ch_id_r15_present and - (not lc_ch_id_r15_present or lc_ch_id_r15 == other.lc_ch_id_r15))); + (not lc_ch_id_r15_present or lc_ch_id_r15 == other.lc_ch_id_r15) and + daps_ho_r16_present == other.daps_ho_r16_present and + rlc_cfg_v1700.is_present() == other.rlc_cfg_v1700.is_present() and + (not rlc_cfg_v1700.is_present() or *rlc_cfg_v1700 == *other.rlc_cfg_v1700))); } const char* drb_to_add_mod_s::drb_type_lwip_r13_opts::to_string() const @@ -5385,6 +5638,39 @@ uint8_t data_inactivity_timer_r14_opts::to_number() const return map_enum_number(options, 16, value, "data_inactivity_timer_r14_e"); } +// OffsetThresholdTA-r17 ::= ENUMERATED +const char* offset_thres_ta_r17_opts::to_string() const +{ + static const char* options[] = {"ms0dot5", + "ms1", + "ms2", + "ms3", + "ms4", + "ms5", + "ms6", + "ms7", + "ms8", + "ms9", + "ms10", + "ms11", + "ms12", + "ms13", + "ms14", + "ms15"}; + return convert_enum_idx(options, 16, value, "offset_thres_ta_r17_e"); +} +float offset_thres_ta_r17_opts::to_number() const +{ + static const float options[] = {0.5, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0}; + return map_enum_number(options, 16, value, "offset_thres_ta_r17_e"); +} +const char* offset_thres_ta_r17_opts::to_number_string() const +{ + static const char* options[] = { + "0.5", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"}; + return convert_enum_idx(options, 16, value, "offset_thres_ta_r17_e"); +} + // PeriodicBSR-Timer-r12 ::= ENUMERATED const char* periodic_bsr_timer_r12_opts::to_string() const { @@ -5858,6 +6144,18 @@ SRSASN_CODE sps_cfg_dl_stti_r15_c::setup_s_::two_ant_port_activ_r15_c_::unpack(c return SRSASN_SUCCESS; } +// SR-ProhibitTimerOffset-r17 ::= ENUMERATED +const char* sr_prohibit_timer_offset_r17_opts::to_string() const +{ + static const char* options[] = {"ms90", "ms180", "ms270", "ms360", "ms450", "ms540", "ms1080", "spare"}; + return convert_enum_idx(options, 8, value, "sr_prohibit_timer_offset_r17_e"); +} +uint16_t sr_prohibit_timer_offset_r17_opts::to_number() const +{ + static const uint16_t options[] = {90, 180, 270, 360, 450, 540, 1080}; + return map_enum_number(options, 7, value, "sr_prohibit_timer_offset_r17_e"); +} + // SRB-ToAddMod ::= SEQUENCE SRSASN_CODE srb_to_add_mod_s::pack(bit_ref& bref) const { @@ -5880,6 +6178,7 @@ SRSASN_CODE srb_to_add_mod_s::pack(bit_ref& bref) const group_flags[0] |= rlc_bearer_cfg_secondary_r15.is_present(); group_flags[0] |= srb_id_v1530_present; group_flags[1] |= rlc_cfg_v1560.is_present(); + group_flags[2] |= rlc_cfg_v1700.is_present(); group_flags.pack(bref); if (group_flags[0]) { @@ -5907,6 +6206,14 @@ SRSASN_CODE srb_to_add_mod_s::pack(bit_ref& bref) const HANDLE_CODE(rlc_cfg_v1560->pack(bref)); } } + if (group_flags[2]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(rlc_cfg_v1700.is_present(), 1)); + if (rlc_cfg_v1700.is_present()) { + HANDLE_CODE(rlc_cfg_v1700->pack(bref)); + } + } } return SRSASN_SUCCESS; } @@ -5925,7 +6232,7 @@ SRSASN_CODE srb_to_add_mod_s::unpack(cbit_ref& bref) } if (ext) { - ext_groups_unpacker_guard group_flags(2); + ext_groups_unpacker_guard group_flags(3); group_flags.unpack(bref); if (group_flags[0]) { @@ -5959,6 +6266,16 @@ SRSASN_CODE srb_to_add_mod_s::unpack(cbit_ref& bref) HANDLE_CODE(rlc_cfg_v1560->unpack(bref)); } } + if (group_flags[2]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + bool rlc_cfg_v1700_present; + HANDLE_CODE(bref.unpack(rlc_cfg_v1700_present, 1)); + rlc_cfg_v1700.set_present(rlc_cfg_v1700_present); + if (rlc_cfg_v1700.is_present()) { + HANDLE_CODE(rlc_cfg_v1700->unpack(bref)); + } + } } return SRSASN_SUCCESS; } @@ -5993,6 +6310,10 @@ void srb_to_add_mod_s::to_json(json_writer& j) const j.write_fieldname("rlc-Config-v1560"); rlc_cfg_v1560->to_json(j); } + if (rlc_cfg_v1700.is_present()) { + j.write_fieldname("rlc-Config-v1700"); + rlc_cfg_v1700->to_json(j); + } } j.end_obj(); } @@ -6010,7 +6331,9 @@ bool srb_to_add_mod_s::operator==(const srb_to_add_mod_s& other) const srb_id_v1530_present == other.srb_id_v1530_present and (not srb_id_v1530_present or srb_id_v1530 == other.srb_id_v1530) and rlc_cfg_v1560.is_present() == other.rlc_cfg_v1560.is_present() and - (not rlc_cfg_v1560.is_present() or *rlc_cfg_v1560 == *other.rlc_cfg_v1560))); + (not rlc_cfg_v1560.is_present() or *rlc_cfg_v1560 == *other.rlc_cfg_v1560) and + rlc_cfg_v1700.is_present() == other.rlc_cfg_v1700.is_present() and + (not rlc_cfg_v1700.is_present() or *rlc_cfg_v1700 == *other.rlc_cfg_v1700))); } void srb_to_add_mod_s::rlc_cfg_c_::set(types::options e) @@ -6143,6 +6466,69 @@ bool srb_to_add_mod_s::lc_ch_cfg_c_::operator==(const lc_ch_cfg_c_& other) const return type() == other.type() and c == other.c; } +// CRS-ChEstMPDCCH-ConfigDedicated-r16 ::= SEQUENCE +SRSASN_CODE crs_ch_est_mpdcch_cfg_ded_r16_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(pwr_ratio_r16_present, 1)); + HANDLE_CODE(bref.pack(localized_map_type_r16_present, 1)); + + if (pwr_ratio_r16_present) { + HANDLE_CODE(pwr_ratio_r16.pack(bref)); + } + if (localized_map_type_r16_present) { + HANDLE_CODE(localized_map_type_r16.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE crs_ch_est_mpdcch_cfg_ded_r16_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(pwr_ratio_r16_present, 1)); + HANDLE_CODE(bref.unpack(localized_map_type_r16_present, 1)); + + if (pwr_ratio_r16_present) { + HANDLE_CODE(pwr_ratio_r16.unpack(bref)); + } + if (localized_map_type_r16_present) { + HANDLE_CODE(localized_map_type_r16.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void crs_ch_est_mpdcch_cfg_ded_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (pwr_ratio_r16_present) { + j.write_str("powerRatio-r16", pwr_ratio_r16.to_string()); + } + if (localized_map_type_r16_present) { + j.write_str("localizedMappingType-r16", localized_map_type_r16.to_string()); + } + j.end_obj(); +} + +const char* crs_ch_est_mpdcch_cfg_ded_r16_s::pwr_ratio_r16_opts::to_string() const +{ + static const char* options[] = {"dB-4dot77", "dB-3", "dB-1dot77", "dB0", "dB1", "dB2", "dB3", "dB4dot77"}; + return convert_enum_idx(options, 8, value, "crs_ch_est_mpdcch_cfg_ded_r16_s::pwr_ratio_r16_e_"); +} +float crs_ch_est_mpdcch_cfg_ded_r16_s::pwr_ratio_r16_opts::to_number() const +{ + static const float options[] = {-4.77, -3.0, -1.77, 0.0, 1.0, 2.0, 3.0, 4.77}; + return map_enum_number(options, 8, value, "crs_ch_est_mpdcch_cfg_ded_r16_s::pwr_ratio_r16_e_"); +} +const char* crs_ch_est_mpdcch_cfg_ded_r16_s::pwr_ratio_r16_opts::to_number_string() const +{ + static const char* options[] = {"-4.77", "-3", "-1.77", "0", "1", "2", "3", "4.77"}; + return convert_enum_idx(options, 8, value, "crs_ch_est_mpdcch_cfg_ded_r16_s::pwr_ratio_r16_e_"); +} + +const char* crs_ch_est_mpdcch_cfg_ded_r16_s::localized_map_type_r16_opts::to_string() const +{ + static const char* options[] = {"predefined", "csi-Based", "reciprocityBased"}; + return convert_enum_idx(options, 3, value, "crs_ch_est_mpdcch_cfg_ded_r16_s::localized_map_type_r16_e_"); +} + // MAC-MainConfig ::= SEQUENCE SRSASN_CODE mac_main_cfg_s::pack(bit_ref& bref) const { @@ -6191,6 +6577,9 @@ SRSASN_CODE mac_main_cfg_s::pack(bit_ref& bref) const group_flags[8] |= short_tti_and_spt_r15.is_present(); group_flags[8] |= mpdcch_ul_harq_ack_feedback_cfg_r15_present; group_flags[8] |= dormant_state_timers_r15.is_present(); + group_flags[9] |= ce_etws_cmas_rx_in_conn_r16_present; + group_flags[10] |= offset_thres_ta_r17.is_present(); + group_flags[10] |= sr_prohibit_timer_offset_r17.is_present(); group_flags.pack(bref); if (group_flags[0]) { @@ -6303,6 +6692,23 @@ SRSASN_CODE mac_main_cfg_s::pack(bit_ref& bref) const HANDLE_CODE(dormant_state_timers_r15->pack(bref)); } } + if (group_flags[9]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(ce_etws_cmas_rx_in_conn_r16_present, 1)); + } + if (group_flags[10]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(offset_thres_ta_r17.is_present(), 1)); + HANDLE_CODE(bref.pack(sr_prohibit_timer_offset_r17.is_present(), 1)); + if (offset_thres_ta_r17.is_present()) { + HANDLE_CODE(offset_thres_ta_r17->pack(bref)); + } + if (sr_prohibit_timer_offset_r17.is_present()) { + HANDLE_CODE(sr_prohibit_timer_offset_r17->pack(bref)); + } + } } return SRSASN_SUCCESS; } @@ -6334,7 +6740,7 @@ SRSASN_CODE mac_main_cfg_s::unpack(cbit_ref& bref) } if (ext) { - ext_groups_unpacker_guard group_flags(9); + ext_groups_unpacker_guard group_flags(11); group_flags.unpack(bref); if (group_flags[0]) { @@ -6473,6 +6879,27 @@ SRSASN_CODE mac_main_cfg_s::unpack(cbit_ref& bref) HANDLE_CODE(dormant_state_timers_r15->unpack(bref)); } } + if (group_flags[9]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.unpack(ce_etws_cmas_rx_in_conn_r16_present, 1)); + } + if (group_flags[10]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + bool offset_thres_ta_r17_present; + HANDLE_CODE(bref.unpack(offset_thres_ta_r17_present, 1)); + offset_thres_ta_r17.set_present(offset_thres_ta_r17_present); + bool sr_prohibit_timer_offset_r17_present; + HANDLE_CODE(bref.unpack(sr_prohibit_timer_offset_r17_present, 1)); + sr_prohibit_timer_offset_r17.set_present(sr_prohibit_timer_offset_r17_present); + if (offset_thres_ta_r17.is_present()) { + HANDLE_CODE(offset_thres_ta_r17->unpack(bref)); + } + if (sr_prohibit_timer_offset_r17.is_present()) { + HANDLE_CODE(sr_prohibit_timer_offset_r17->unpack(bref)); + } + } } return SRSASN_SUCCESS; } @@ -6585,6 +7012,17 @@ void mac_main_cfg_s::to_json(json_writer& j) const j.write_fieldname("dormantStateTimers-r15"); dormant_state_timers_r15->to_json(j); } + if (ce_etws_cmas_rx_in_conn_r16_present) { + j.write_str("ce-ETWS-CMAS-RxInConn-r16", "true"); + } + if (offset_thres_ta_r17.is_present()) { + j.write_fieldname("offsetThresholdTA-r17"); + offset_thres_ta_r17->to_json(j); + } + if (sr_prohibit_timer_offset_r17.is_present()) { + j.write_fieldname("sr-ProhibitTimerOffset-r17"); + sr_prohibit_timer_offset_r17->to_json(j); + } } j.end_obj(); } @@ -8142,6 +8580,84 @@ uint8_t rlf_timers_and_consts_r9_c::setup_s_::n311_r9_opts::to_number() const return map_enum_number(options, 8, value, "rlf_timers_and_consts_r9_c::setup_s_::n311_r9_e_"); } +// RLF-TimersAndConstantsMCG-Failure-r16 ::= CHOICE +void rlf_timers_and_consts_mcg_fail_r16_c::set(types::options e) +{ + type_ = e; +} +void rlf_timers_and_consts_mcg_fail_r16_c::set_release() +{ + set(types::release); +} +rlf_timers_and_consts_mcg_fail_r16_c::setup_s_& rlf_timers_and_consts_mcg_fail_r16_c::set_setup() +{ + set(types::setup); + return c; +} +void rlf_timers_and_consts_mcg_fail_r16_c::to_json(json_writer& j) const +{ + j.start_obj(); + switch (type_) { + case types::release: + break; + case types::setup: + j.write_fieldname("setup"); + j.start_obj(); + j.write_str("t316-r16", c.t316_r16.to_string()); + j.end_obj(); + break; + default: + log_invalid_choice_id(type_, "rlf_timers_and_consts_mcg_fail_r16_c"); + } + j.end_obj(); +} +SRSASN_CODE rlf_timers_and_consts_mcg_fail_r16_c::pack(bit_ref& bref) const +{ + type_.pack(bref); + switch (type_) { + case types::release: + break; + case types::setup: + bref.pack(c.ext, 1); + HANDLE_CODE(c.t316_r16.pack(bref)); + break; + default: + log_invalid_choice_id(type_, "rlf_timers_and_consts_mcg_fail_r16_c"); + return SRSASN_ERROR_ENCODE_FAIL; + } + return SRSASN_SUCCESS; +} +SRSASN_CODE rlf_timers_and_consts_mcg_fail_r16_c::unpack(cbit_ref& bref) +{ + types e; + e.unpack(bref); + set(e); + switch (type_) { + case types::release: + break; + case types::setup: + bref.unpack(c.ext, 1); + HANDLE_CODE(c.t316_r16.unpack(bref)); + break; + default: + log_invalid_choice_id(type_, "rlf_timers_and_consts_mcg_fail_r16_c"); + return SRSASN_ERROR_DECODE_FAIL; + } + return SRSASN_SUCCESS; +} + +const char* rlf_timers_and_consts_mcg_fail_r16_c::setup_s_::t316_r16_opts::to_string() const +{ + static const char* options[] = { + "ms50", "ms100", "ms200", "ms300", "ms400", "ms500", "ms600", "ms1000", "ms1500", "ms2000"}; + return convert_enum_idx(options, 10, value, "rlf_timers_and_consts_mcg_fail_r16_c::setup_s_::t316_r16_e_"); +} +uint16_t rlf_timers_and_consts_mcg_fail_r16_c::setup_s_::t316_r16_opts::to_number() const +{ + static const uint16_t options[] = {50, 100, 200, 300, 400, 500, 600, 1000, 1500, 2000}; + return map_enum_number(options, 10, value, "rlf_timers_and_consts_mcg_fail_r16_c::setup_s_::t316_r16_e_"); +} + // SPS-Config ::= SEQUENCE SRSASN_CODE sps_cfg_s::pack(bit_ref& bref) const { @@ -8498,6 +9014,9 @@ SRSASN_CODE rr_cfg_ded_s::pack(bit_ref& bref) const group_flags[6] |= drb_to_release_list_r15.is_present(); group_flags[6] |= dummy.is_present(); group_flags[7] |= sps_cfg_v1540.is_present(); + group_flags[8] |= rlf_timers_and_consts_mcg_fail_r16.is_present(); + group_flags[8] |= crs_ch_est_mpdcch_cfg_ded_r16.is_present(); + group_flags[8] |= new_ue_id_r16_present; group_flags.pack(bref); if (group_flags[0]) { @@ -8596,6 +9115,22 @@ SRSASN_CODE rr_cfg_ded_s::pack(bit_ref& bref) const HANDLE_CODE(sps_cfg_v1540->pack(bref)); } } + if (group_flags[8]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(rlf_timers_and_consts_mcg_fail_r16.is_present(), 1)); + HANDLE_CODE(bref.pack(crs_ch_est_mpdcch_cfg_ded_r16.is_present(), 1)); + HANDLE_CODE(bref.pack(new_ue_id_r16_present, 1)); + if (rlf_timers_and_consts_mcg_fail_r16.is_present()) { + HANDLE_CODE(rlf_timers_and_consts_mcg_fail_r16->pack(bref)); + } + if (crs_ch_est_mpdcch_cfg_ded_r16.is_present()) { + HANDLE_CODE(crs_ch_est_mpdcch_cfg_ded_r16->pack(bref)); + } + if (new_ue_id_r16_present) { + HANDLE_CODE(new_ue_id_r16.pack(bref)); + } + } } return SRSASN_SUCCESS; } @@ -8629,7 +9164,7 @@ SRSASN_CODE rr_cfg_ded_s::unpack(cbit_ref& bref) } if (ext) { - ext_groups_unpacker_guard group_flags(8); + ext_groups_unpacker_guard group_flags(9); group_flags.unpack(bref); if (group_flags[0]) { @@ -8758,6 +9293,26 @@ SRSASN_CODE rr_cfg_ded_s::unpack(cbit_ref& bref) HANDLE_CODE(sps_cfg_v1540->unpack(bref)); } } + if (group_flags[8]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + bool rlf_timers_and_consts_mcg_fail_r16_present; + HANDLE_CODE(bref.unpack(rlf_timers_and_consts_mcg_fail_r16_present, 1)); + rlf_timers_and_consts_mcg_fail_r16.set_present(rlf_timers_and_consts_mcg_fail_r16_present); + bool crs_ch_est_mpdcch_cfg_ded_r16_present; + HANDLE_CODE(bref.unpack(crs_ch_est_mpdcch_cfg_ded_r16_present, 1)); + crs_ch_est_mpdcch_cfg_ded_r16.set_present(crs_ch_est_mpdcch_cfg_ded_r16_present); + HANDLE_CODE(bref.unpack(new_ue_id_r16_present, 1)); + if (rlf_timers_and_consts_mcg_fail_r16.is_present()) { + HANDLE_CODE(rlf_timers_and_consts_mcg_fail_r16->unpack(bref)); + } + if (crs_ch_est_mpdcch_cfg_ded_r16.is_present()) { + HANDLE_CODE(crs_ch_est_mpdcch_cfg_ded_r16->unpack(bref)); + } + if (new_ue_id_r16_present) { + HANDLE_CODE(new_ue_id_r16.unpack(bref)); + } + } } return SRSASN_SUCCESS; } @@ -8873,6 +9428,17 @@ void rr_cfg_ded_s::to_json(json_writer& j) const j.write_fieldname("sps-Config-v1540"); sps_cfg_v1540->to_json(j); } + if (rlf_timers_and_consts_mcg_fail_r16.is_present()) { + j.write_fieldname("rlf-TimersAndConstantsMCG-Failure-r16"); + rlf_timers_and_consts_mcg_fail_r16->to_json(j); + } + if (crs_ch_est_mpdcch_cfg_ded_r16.is_present()) { + j.write_fieldname("crs-ChEstMPDCCH-ConfigDedicated-r16"); + crs_ch_est_mpdcch_cfg_ded_r16->to_json(j); + } + if (new_ue_id_r16_present) { + j.write_str("newUE-Identity-r16", new_ue_id_r16.to_string()); + } } j.end_obj(); } @@ -10278,6 +10844,45 @@ uint8_t cqi_report_cfg_scell_r15_s::alt_cqi_table_minus1024_qam_r15_opts::to_num return 0; } +// CQI-ReportPeriodicSCell-v1730 ::= SEQUENCE +SRSASN_CODE cqi_report_periodic_scell_v1730_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(ri_cfg_idx2_dormant_r17_present, 1)); + + HANDLE_CODE(pack_integer(bref, cqi_pmi_cfg_idx2_dormant_r17, (uint16_t)0u, (uint16_t)1023u)); + if (ri_cfg_idx2_dormant_r17_present) { + HANDLE_CODE(pack_integer(bref, ri_cfg_idx2_dormant_r17, (uint16_t)0u, (uint16_t)1023u)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE cqi_report_periodic_scell_v1730_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(ri_cfg_idx2_dormant_r17_present, 1)); + + HANDLE_CODE(unpack_integer(cqi_pmi_cfg_idx2_dormant_r17, bref, (uint16_t)0u, (uint16_t)1023u)); + if (ri_cfg_idx2_dormant_r17_present) { + HANDLE_CODE(unpack_integer(ri_cfg_idx2_dormant_r17, bref, (uint16_t)0u, (uint16_t)1023u)); + } + + return SRSASN_SUCCESS; +} +void cqi_report_periodic_scell_v1730_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_int("cqi-pmi-ConfigIndex2Dormant-r17", cqi_pmi_cfg_idx2_dormant_r17); + if (ri_cfg_idx2_dormant_r17_present) { + j.write_int("ri-ConfigIndex2Dormant-r17", ri_cfg_idx2_dormant_r17); + } + j.end_obj(); +} +bool cqi_report_periodic_scell_v1730_s::operator==(const cqi_report_periodic_scell_v1730_s& other) const +{ + return cqi_pmi_cfg_idx2_dormant_r17 == other.cqi_pmi_cfg_idx2_dormant_r17 and + ri_cfg_idx2_dormant_r17_present == other.ri_cfg_idx2_dormant_r17_present and + (not ri_cfg_idx2_dormant_r17_present or ri_cfg_idx2_dormant_r17 == other.ri_cfg_idx2_dormant_r17); +} + // CQI-ShortConfigSCell-r15 ::= CHOICE void cqi_short_cfg_scell_r15_c::set(types::options e) { @@ -12089,6 +12694,10 @@ SRSASN_CODE phys_cfg_ded_scell_r10_s::pack(bit_ref& bref) const group_flags[7] |= semi_static_cfi_cfg_r15.is_present(); group_flags[7] |= blind_pdsch_repeat_cfg_r15.is_present(); group_flags[8] |= spucch_cfg_v1550.is_present(); + group_flags[9] |= srs_ul_cfg_ded_add_r16.is_present(); + group_flags[9] |= ul_pwr_ctrl_add_srs_r16.is_present(); + group_flags[9] |= srs_virtual_cell_id_r16.is_present(); + group_flags[9] |= wideband_prg_r16.is_present(); group_flags.pack(bref); if (group_flags[0]) { @@ -12353,6 +12962,26 @@ SRSASN_CODE phys_cfg_ded_scell_r10_s::pack(bit_ref& bref) const HANDLE_CODE(spucch_cfg_v1550->pack(bref)); } } + if (group_flags[9]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(srs_ul_cfg_ded_add_r16.is_present(), 1)); + HANDLE_CODE(bref.pack(ul_pwr_ctrl_add_srs_r16.is_present(), 1)); + HANDLE_CODE(bref.pack(srs_virtual_cell_id_r16.is_present(), 1)); + HANDLE_CODE(bref.pack(wideband_prg_r16.is_present(), 1)); + if (srs_ul_cfg_ded_add_r16.is_present()) { + HANDLE_CODE(srs_ul_cfg_ded_add_r16->pack(bref)); + } + if (ul_pwr_ctrl_add_srs_r16.is_present()) { + HANDLE_CODE(ul_pwr_ctrl_add_srs_r16->pack(bref)); + } + if (srs_virtual_cell_id_r16.is_present()) { + HANDLE_CODE(srs_virtual_cell_id_r16->pack(bref)); + } + if (wideband_prg_r16.is_present()) { + HANDLE_CODE(wideband_prg_r16->pack(bref)); + } + } } return SRSASN_SUCCESS; } @@ -12412,7 +13041,7 @@ SRSASN_CODE phys_cfg_ded_scell_r10_s::unpack(cbit_ref& bref) } if (ext) { - ext_groups_unpacker_guard group_flags(9); + ext_groups_unpacker_guard group_flags(10); group_flags.unpack(bref); if (group_flags[0]) { @@ -12787,6 +13416,34 @@ SRSASN_CODE phys_cfg_ded_scell_r10_s::unpack(cbit_ref& bref) HANDLE_CODE(spucch_cfg_v1550->unpack(bref)); } } + if (group_flags[9]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + bool srs_ul_cfg_ded_add_r16_present; + HANDLE_CODE(bref.unpack(srs_ul_cfg_ded_add_r16_present, 1)); + srs_ul_cfg_ded_add_r16.set_present(srs_ul_cfg_ded_add_r16_present); + bool ul_pwr_ctrl_add_srs_r16_present; + HANDLE_CODE(bref.unpack(ul_pwr_ctrl_add_srs_r16_present, 1)); + ul_pwr_ctrl_add_srs_r16.set_present(ul_pwr_ctrl_add_srs_r16_present); + bool srs_virtual_cell_id_r16_present; + HANDLE_CODE(bref.unpack(srs_virtual_cell_id_r16_present, 1)); + srs_virtual_cell_id_r16.set_present(srs_virtual_cell_id_r16_present); + bool wideband_prg_r16_present; + HANDLE_CODE(bref.unpack(wideband_prg_r16_present, 1)); + wideband_prg_r16.set_present(wideband_prg_r16_present); + if (srs_ul_cfg_ded_add_r16.is_present()) { + HANDLE_CODE(srs_ul_cfg_ded_add_r16->unpack(bref)); + } + if (ul_pwr_ctrl_add_srs_r16.is_present()) { + HANDLE_CODE(ul_pwr_ctrl_add_srs_r16->unpack(bref)); + } + if (srs_virtual_cell_id_r16.is_present()) { + HANDLE_CODE(srs_virtual_cell_id_r16->unpack(bref)); + } + if (wideband_prg_r16.is_present()) { + HANDLE_CODE(wideband_prg_r16->unpack(bref)); + } + } } return SRSASN_SUCCESS; } @@ -13104,6 +13761,22 @@ void phys_cfg_ded_scell_r10_s::to_json(json_writer& j) const j.write_fieldname("spucch-Config-v1550"); spucch_cfg_v1550->to_json(j); } + if (srs_ul_cfg_ded_add_r16.is_present()) { + j.write_fieldname("soundingRS-UL-ConfigDedicatedAdd-r16"); + srs_ul_cfg_ded_add_r16->to_json(j); + } + if (ul_pwr_ctrl_add_srs_r16.is_present()) { + j.write_fieldname("uplinkPowerControlAddSRS-r16"); + ul_pwr_ctrl_add_srs_r16->to_json(j); + } + if (srs_virtual_cell_id_r16.is_present()) { + j.write_fieldname("soundingRS-VirtualCellID-r16"); + srs_virtual_cell_id_r16->to_json(j); + } + if (wideband_prg_r16.is_present()) { + j.write_fieldname("widebandPRG-r16"); + wideband_prg_r16->to_json(j); + } } j.end_obj(); } @@ -13284,7 +13957,15 @@ bool phys_cfg_ded_scell_r10_s::operator==(const phys_cfg_ded_scell_r10_s& other) (not blind_pdsch_repeat_cfg_r15.is_present() or *blind_pdsch_repeat_cfg_r15 == *other.blind_pdsch_repeat_cfg_r15) and spucch_cfg_v1550.is_present() == other.spucch_cfg_v1550.is_present() and - (not spucch_cfg_v1550.is_present() or *spucch_cfg_v1550 == *other.spucch_cfg_v1550))); + (not spucch_cfg_v1550.is_present() or *spucch_cfg_v1550 == *other.spucch_cfg_v1550) and + srs_ul_cfg_ded_add_r16.is_present() == other.srs_ul_cfg_ded_add_r16.is_present() and + (not srs_ul_cfg_ded_add_r16.is_present() or *srs_ul_cfg_ded_add_r16 == *other.srs_ul_cfg_ded_add_r16) and + ul_pwr_ctrl_add_srs_r16.is_present() == other.ul_pwr_ctrl_add_srs_r16.is_present() and + (not ul_pwr_ctrl_add_srs_r16.is_present() or *ul_pwr_ctrl_add_srs_r16 == *other.ul_pwr_ctrl_add_srs_r16) and + srs_virtual_cell_id_r16.is_present() == other.srs_virtual_cell_id_r16.is_present() and + (not srs_virtual_cell_id_r16.is_present() or *srs_virtual_cell_id_r16 == *other.srs_virtual_cell_id_r16) and + wideband_prg_r16.is_present() == other.wideband_prg_r16.is_present() and + (not wideband_prg_r16.is_present() or *wideband_prg_r16 == *other.wideband_prg_r16))); } void phys_cfg_ded_scell_r10_s::pucch_scell_c_::set(types::options e) @@ -14162,6 +14843,31 @@ bool phys_cfg_ded_scell_v1370_s::pucch_scell_v1370_c_::operator==(const pucch_sc (not c.pucch_cfg_ded_v1370_present or c.pucch_cfg_ded_v1370 == other.c.pucch_cfg_ded_v1370); } +// PhysicalConfigDedicatedSCell-v1730 ::= SEQUENCE +SRSASN_CODE phys_cfg_ded_scell_v1730_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(cqi_report_periodic_scell_v1730.pack(bref)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE phys_cfg_ded_scell_v1730_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(cqi_report_periodic_scell_v1730.unpack(bref)); + + return SRSASN_SUCCESS; +} +void phys_cfg_ded_scell_v1730_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_fieldname("cqi-ReportPeriodicSCell-v1730"); + cqi_report_periodic_scell_v1730.to_json(j); + j.end_obj(); +} +bool phys_cfg_ded_scell_v1730_s::operator==(const phys_cfg_ded_scell_v1730_s& other) const +{ + return cqi_report_periodic_scell_v1730 == other.cqi_report_periodic_scell_v1730; +} + // AntennaInfoDedicated-v10i0 ::= SEQUENCE SRSASN_CODE ant_info_ded_v10i0_s::pack(bit_ref& bref) const { @@ -14227,6 +14933,7 @@ SRSASN_CODE rr_cfg_ded_scell_r10_s::pack(bit_ref& bref) const group_flags[4] |= crs_intf_mitig_enabled_r15_present; group_flags[4] |= neigh_cells_crs_info_r15.is_present(); group_flags[4] |= sps_cfg_v1530.is_present(); + group_flags[5] |= phys_cfg_ded_scell_v1730.is_present(); group_flags.pack(bref); if (group_flags[0]) { @@ -14277,6 +14984,14 @@ SRSASN_CODE rr_cfg_ded_scell_r10_s::pack(bit_ref& bref) const HANDLE_CODE(sps_cfg_v1530->pack(bref)); } } + if (group_flags[5]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(phys_cfg_ded_scell_v1730.is_present(), 1)); + if (phys_cfg_ded_scell_v1730.is_present()) { + HANDLE_CODE(phys_cfg_ded_scell_v1730->pack(bref)); + } + } } return SRSASN_SUCCESS; } @@ -14290,7 +15005,7 @@ SRSASN_CODE rr_cfg_ded_scell_r10_s::unpack(cbit_ref& bref) } if (ext) { - ext_groups_unpacker_guard group_flags(5); + ext_groups_unpacker_guard group_flags(6); group_flags.unpack(bref); if (group_flags[0]) { @@ -14353,6 +15068,16 @@ SRSASN_CODE rr_cfg_ded_scell_r10_s::unpack(cbit_ref& bref) HANDLE_CODE(sps_cfg_v1530->unpack(bref)); } } + if (group_flags[5]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + bool phys_cfg_ded_scell_v1730_present; + HANDLE_CODE(bref.unpack(phys_cfg_ded_scell_v1730_present, 1)); + phys_cfg_ded_scell_v1730.set_present(phys_cfg_ded_scell_v1730_present); + if (phys_cfg_ded_scell_v1730.is_present()) { + HANDLE_CODE(phys_cfg_ded_scell_v1730->unpack(bref)); + } + } } return SRSASN_SUCCESS; } @@ -14391,6 +15116,10 @@ void rr_cfg_ded_scell_r10_s::to_json(json_writer& j) const j.write_fieldname("sps-Config-v1530"); sps_cfg_v1530->to_json(j); } + if (phys_cfg_ded_scell_v1730.is_present()) { + j.write_fieldname("physicalConfigDedicatedSCell-v1730"); + phys_cfg_ded_scell_v1730->to_json(j); + } } j.end_obj(); } @@ -14416,7 +15145,10 @@ bool rr_cfg_ded_scell_r10_s::operator==(const rr_cfg_ded_scell_r10_s& other) con (not neigh_cells_crs_info_r15.is_present() or *neigh_cells_crs_info_r15 == *other.neigh_cells_crs_info_r15) and sps_cfg_v1530.is_present() == other.sps_cfg_v1530.is_present() and - (not sps_cfg_v1530.is_present() or *sps_cfg_v1530 == *other.sps_cfg_v1530))); + (not sps_cfg_v1530.is_present() or *sps_cfg_v1530 == *other.sps_cfg_v1530) and + phys_cfg_ded_scell_v1730.is_present() == other.phys_cfg_ded_scell_v1730.is_present() and + (not phys_cfg_ded_scell_v1730.is_present() or + *phys_cfg_ded_scell_v1730 == *other.phys_cfg_ded_scell_v1730))); } // SCellToAddModExt-r13 ::= SEQUENCE diff --git a/lib/src/asn1/rrc/security.cc b/lib/src/asn1/rrc/security.cc index 98c1eeb72..432b6124f 100644 --- a/lib/src/asn1/rrc/security.cc +++ b/lib/src/asn1/rrc/security.cc @@ -80,14 +80,14 @@ void security_cfg_ho_v1530_s::to_json(json_writer& j) const void security_cfg_ho_v1530_s::handov_type_v1530_c_::destroy_() { switch (type_) { - case types::intra5_gc_r15: - c.destroy<intra5_gc_r15_s_>(); + case types::intra5_gc: + c.destroy<intra5_gc_s_>(); break; - case types::fivegc_to_epc_r15: - c.destroy<fivegc_to_epc_r15_s_>(); + case types::fivegc_to_epc: + c.destroy<fivegc_to_epc_s_>(); break; - case types::epc_to5_gc_r15: - c.destroy<epc_to5_gc_r15_s_>(); + case types::epc_to5_gc: + c.destroy<epc_to5_gc_s_>(); break; default: break; @@ -98,14 +98,14 @@ void security_cfg_ho_v1530_s::handov_type_v1530_c_::set(types::options e) destroy_(); type_ = e; switch (type_) { - case types::intra5_gc_r15: - c.init<intra5_gc_r15_s_>(); + case types::intra5_gc: + c.init<intra5_gc_s_>(); break; - case types::fivegc_to_epc_r15: - c.init<fivegc_to_epc_r15_s_>(); + case types::fivegc_to_epc: + c.init<fivegc_to_epc_s_>(); break; - case types::epc_to5_gc_r15: - c.init<epc_to5_gc_r15_s_>(); + case types::epc_to5_gc: + c.init<epc_to5_gc_s_>(); break; case types::nulltype: break; @@ -118,14 +118,14 @@ security_cfg_ho_v1530_s::handov_type_v1530_c_::handov_type_v1530_c_( { type_ = other.type(); switch (type_) { - case types::intra5_gc_r15: - c.init(other.c.get<intra5_gc_r15_s_>()); + case types::intra5_gc: + c.init(other.c.get<intra5_gc_s_>()); break; - case types::fivegc_to_epc_r15: - c.init(other.c.get<fivegc_to_epc_r15_s_>()); + case types::fivegc_to_epc: + c.init(other.c.get<fivegc_to_epc_s_>()); break; - case types::epc_to5_gc_r15: - c.init(other.c.get<epc_to5_gc_r15_s_>()); + case types::epc_to5_gc: + c.init(other.c.get<epc_to5_gc_s_>()); break; case types::nulltype: break; @@ -141,14 +141,14 @@ security_cfg_ho_v1530_s::handov_type_v1530_c_::operator=(const security_cfg_ho_v } set(other.type()); switch (type_) { - case types::intra5_gc_r15: - c.set(other.c.get<intra5_gc_r15_s_>()); + case types::intra5_gc: + c.set(other.c.get<intra5_gc_s_>()); break; - case types::fivegc_to_epc_r15: - c.set(other.c.get<fivegc_to_epc_r15_s_>()); + case types::fivegc_to_epc: + c.set(other.c.get<fivegc_to_epc_s_>()); break; - case types::epc_to5_gc_r15: - c.set(other.c.get<epc_to5_gc_r15_s_>()); + case types::epc_to5_gc: + c.set(other.c.get<epc_to5_gc_s_>()); break; case types::nulltype: break; @@ -158,56 +158,56 @@ security_cfg_ho_v1530_s::handov_type_v1530_c_::operator=(const security_cfg_ho_v return *this; } -security_cfg_ho_v1530_s::handov_type_v1530_c_::intra5_gc_r15_s_& -security_cfg_ho_v1530_s::handov_type_v1530_c_::set_intra5_gc_r15() +security_cfg_ho_v1530_s::handov_type_v1530_c_::intra5_gc_s_& +security_cfg_ho_v1530_s::handov_type_v1530_c_::set_intra5_gc() { - set(types::intra5_gc_r15); - return c.get<intra5_gc_r15_s_>(); + set(types::intra5_gc); + return c.get<intra5_gc_s_>(); } -security_cfg_ho_v1530_s::handov_type_v1530_c_::fivegc_to_epc_r15_s_& -security_cfg_ho_v1530_s::handov_type_v1530_c_::set_fivegc_to_epc_r15() +security_cfg_ho_v1530_s::handov_type_v1530_c_::fivegc_to_epc_s_& +security_cfg_ho_v1530_s::handov_type_v1530_c_::set_fivegc_to_epc() { - set(types::fivegc_to_epc_r15); - return c.get<fivegc_to_epc_r15_s_>(); + set(types::fivegc_to_epc); + return c.get<fivegc_to_epc_s_>(); } -security_cfg_ho_v1530_s::handov_type_v1530_c_::epc_to5_gc_r15_s_& -security_cfg_ho_v1530_s::handov_type_v1530_c_::set_epc_to5_gc_r15() +security_cfg_ho_v1530_s::handov_type_v1530_c_::epc_to5_gc_s_& +security_cfg_ho_v1530_s::handov_type_v1530_c_::set_epc_to5_gc() { - set(types::epc_to5_gc_r15); - return c.get<epc_to5_gc_r15_s_>(); + set(types::epc_to5_gc); + return c.get<epc_to5_gc_s_>(); } void security_cfg_ho_v1530_s::handov_type_v1530_c_::to_json(json_writer& j) const { j.start_obj(); switch (type_) { - case types::intra5_gc_r15: - j.write_fieldname("intra5GC-r15"); + case types::intra5_gc: + j.write_fieldname("intra5GC"); j.start_obj(); - if (c.get<intra5_gc_r15_s_>().security_algorithm_cfg_r15_present) { + if (c.get<intra5_gc_s_>().security_algorithm_cfg_r15_present) { j.write_fieldname("securityAlgorithmConfig-r15"); - c.get<intra5_gc_r15_s_>().security_algorithm_cfg_r15.to_json(j); + c.get<intra5_gc_s_>().security_algorithm_cfg_r15.to_json(j); } - j.write_bool("keyChangeIndicator-r15", c.get<intra5_gc_r15_s_>().key_change_ind_r15); - j.write_int("nextHopChainingCount-r15", c.get<intra5_gc_r15_s_>().next_hop_chaining_count_r15); - if (c.get<intra5_gc_r15_s_>().nas_container_r15_present) { - j.write_str("nas-Container-r15", c.get<intra5_gc_r15_s_>().nas_container_r15.to_string()); + j.write_bool("keyChangeIndicator-r15", c.get<intra5_gc_s_>().key_change_ind_r15); + j.write_int("nextHopChainingCount-r15", c.get<intra5_gc_s_>().next_hop_chaining_count_r15); + if (c.get<intra5_gc_s_>().nas_container_r15_present) { + j.write_str("nas-Container-r15", c.get<intra5_gc_s_>().nas_container_r15.to_string()); } j.end_obj(); break; - case types::fivegc_to_epc_r15: - j.write_fieldname("fivegc-ToEPC-r15"); + case types::fivegc_to_epc: + j.write_fieldname("fivegc-ToEPC"); j.start_obj(); j.write_fieldname("securityAlgorithmConfig-r15"); - c.get<fivegc_to_epc_r15_s_>().security_algorithm_cfg_r15.to_json(j); - j.write_int("nextHopChainingCount-r15", c.get<fivegc_to_epc_r15_s_>().next_hop_chaining_count_r15); + c.get<fivegc_to_epc_s_>().security_algorithm_cfg_r15.to_json(j); + j.write_int("nextHopChainingCount-r15", c.get<fivegc_to_epc_s_>().next_hop_chaining_count_r15); j.end_obj(); break; - case types::epc_to5_gc_r15: - j.write_fieldname("epc-To5GC-r15"); + case types::epc_to5_gc: + j.write_fieldname("epc-To5GC"); j.start_obj(); j.write_fieldname("securityAlgorithmConfig-r15"); - c.get<epc_to5_gc_r15_s_>().security_algorithm_cfg_r15.to_json(j); - j.write_str("nas-Container-r15", c.get<epc_to5_gc_r15_s_>().nas_container_r15.to_string()); + c.get<epc_to5_gc_s_>().security_algorithm_cfg_r15.to_json(j); + j.write_str("nas-Container-r15", c.get<epc_to5_gc_s_>().nas_container_r15.to_string()); j.end_obj(); break; default: @@ -219,26 +219,25 @@ SRSASN_CODE security_cfg_ho_v1530_s::handov_type_v1530_c_::pack(bit_ref& bref) c { type_.pack(bref); switch (type_) { - case types::intra5_gc_r15: - HANDLE_CODE(bref.pack(c.get<intra5_gc_r15_s_>().security_algorithm_cfg_r15_present, 1)); - HANDLE_CODE(bref.pack(c.get<intra5_gc_r15_s_>().nas_container_r15_present, 1)); - if (c.get<intra5_gc_r15_s_>().security_algorithm_cfg_r15_present) { - HANDLE_CODE(c.get<intra5_gc_r15_s_>().security_algorithm_cfg_r15.pack(bref)); + case types::intra5_gc: + HANDLE_CODE(bref.pack(c.get<intra5_gc_s_>().security_algorithm_cfg_r15_present, 1)); + HANDLE_CODE(bref.pack(c.get<intra5_gc_s_>().nas_container_r15_present, 1)); + if (c.get<intra5_gc_s_>().security_algorithm_cfg_r15_present) { + HANDLE_CODE(c.get<intra5_gc_s_>().security_algorithm_cfg_r15.pack(bref)); } - HANDLE_CODE(bref.pack(c.get<intra5_gc_r15_s_>().key_change_ind_r15, 1)); - HANDLE_CODE(pack_integer(bref, c.get<intra5_gc_r15_s_>().next_hop_chaining_count_r15, (uint8_t)0u, (uint8_t)7u)); - if (c.get<intra5_gc_r15_s_>().nas_container_r15_present) { - HANDLE_CODE(c.get<intra5_gc_r15_s_>().nas_container_r15.pack(bref)); + HANDLE_CODE(bref.pack(c.get<intra5_gc_s_>().key_change_ind_r15, 1)); + HANDLE_CODE(pack_integer(bref, c.get<intra5_gc_s_>().next_hop_chaining_count_r15, (uint8_t)0u, (uint8_t)7u)); + if (c.get<intra5_gc_s_>().nas_container_r15_present) { + HANDLE_CODE(c.get<intra5_gc_s_>().nas_container_r15.pack(bref)); } break; - case types::fivegc_to_epc_r15: - HANDLE_CODE(c.get<fivegc_to_epc_r15_s_>().security_algorithm_cfg_r15.pack(bref)); - HANDLE_CODE( - pack_integer(bref, c.get<fivegc_to_epc_r15_s_>().next_hop_chaining_count_r15, (uint8_t)0u, (uint8_t)7u)); + case types::fivegc_to_epc: + HANDLE_CODE(c.get<fivegc_to_epc_s_>().security_algorithm_cfg_r15.pack(bref)); + HANDLE_CODE(pack_integer(bref, c.get<fivegc_to_epc_s_>().next_hop_chaining_count_r15, (uint8_t)0u, (uint8_t)7u)); break; - case types::epc_to5_gc_r15: - HANDLE_CODE(c.get<epc_to5_gc_r15_s_>().security_algorithm_cfg_r15.pack(bref)); - HANDLE_CODE(c.get<epc_to5_gc_r15_s_>().nas_container_r15.pack(bref)); + case types::epc_to5_gc: + HANDLE_CODE(c.get<epc_to5_gc_s_>().security_algorithm_cfg_r15.pack(bref)); + HANDLE_CODE(c.get<epc_to5_gc_s_>().nas_container_r15.pack(bref)); break; default: log_invalid_choice_id(type_, "security_cfg_ho_v1530_s::handov_type_v1530_c_"); @@ -252,27 +251,26 @@ SRSASN_CODE security_cfg_ho_v1530_s::handov_type_v1530_c_::unpack(cbit_ref& bref e.unpack(bref); set(e); switch (type_) { - case types::intra5_gc_r15: - HANDLE_CODE(bref.unpack(c.get<intra5_gc_r15_s_>().security_algorithm_cfg_r15_present, 1)); - HANDLE_CODE(bref.unpack(c.get<intra5_gc_r15_s_>().nas_container_r15_present, 1)); - if (c.get<intra5_gc_r15_s_>().security_algorithm_cfg_r15_present) { - HANDLE_CODE(c.get<intra5_gc_r15_s_>().security_algorithm_cfg_r15.unpack(bref)); + case types::intra5_gc: + HANDLE_CODE(bref.unpack(c.get<intra5_gc_s_>().security_algorithm_cfg_r15_present, 1)); + HANDLE_CODE(bref.unpack(c.get<intra5_gc_s_>().nas_container_r15_present, 1)); + if (c.get<intra5_gc_s_>().security_algorithm_cfg_r15_present) { + HANDLE_CODE(c.get<intra5_gc_s_>().security_algorithm_cfg_r15.unpack(bref)); } - HANDLE_CODE(bref.unpack(c.get<intra5_gc_r15_s_>().key_change_ind_r15, 1)); - HANDLE_CODE( - unpack_integer(c.get<intra5_gc_r15_s_>().next_hop_chaining_count_r15, bref, (uint8_t)0u, (uint8_t)7u)); - if (c.get<intra5_gc_r15_s_>().nas_container_r15_present) { - HANDLE_CODE(c.get<intra5_gc_r15_s_>().nas_container_r15.unpack(bref)); + HANDLE_CODE(bref.unpack(c.get<intra5_gc_s_>().key_change_ind_r15, 1)); + HANDLE_CODE(unpack_integer(c.get<intra5_gc_s_>().next_hop_chaining_count_r15, bref, (uint8_t)0u, (uint8_t)7u)); + if (c.get<intra5_gc_s_>().nas_container_r15_present) { + HANDLE_CODE(c.get<intra5_gc_s_>().nas_container_r15.unpack(bref)); } break; - case types::fivegc_to_epc_r15: - HANDLE_CODE(c.get<fivegc_to_epc_r15_s_>().security_algorithm_cfg_r15.unpack(bref)); + case types::fivegc_to_epc: + HANDLE_CODE(c.get<fivegc_to_epc_s_>().security_algorithm_cfg_r15.unpack(bref)); HANDLE_CODE( - unpack_integer(c.get<fivegc_to_epc_r15_s_>().next_hop_chaining_count_r15, bref, (uint8_t)0u, (uint8_t)7u)); + unpack_integer(c.get<fivegc_to_epc_s_>().next_hop_chaining_count_r15, bref, (uint8_t)0u, (uint8_t)7u)); break; - case types::epc_to5_gc_r15: - HANDLE_CODE(c.get<epc_to5_gc_r15_s_>().security_algorithm_cfg_r15.unpack(bref)); - HANDLE_CODE(c.get<epc_to5_gc_r15_s_>().nas_container_r15.unpack(bref)); + case types::epc_to5_gc: + HANDLE_CODE(c.get<epc_to5_gc_s_>().security_algorithm_cfg_r15.unpack(bref)); + HANDLE_CODE(c.get<epc_to5_gc_s_>().nas_container_r15.unpack(bref)); break; default: log_invalid_choice_id(type_, "security_cfg_ho_v1530_s::handov_type_v1530_c_"); diff --git a/lib/src/asn1/rrc/si.cc b/lib/src/asn1/rrc/si.cc index c107c289a..58fb0b774 100644 --- a/lib/src/asn1/rrc/si.cc +++ b/lib/src/asn1/rrc/si.cc @@ -28,6 +28,7 @@ SRSASN_CODE mib_s::pack(bit_ref& bref) const HANDLE_CODE(sys_frame_num.pack(bref)); HANDLE_CODE(pack_integer(bref, sched_info_sib1_br_r13, (uint8_t)0u, (uint8_t)31u)); HANDLE_CODE(bref.pack(sys_info_unchanged_br_r15, 1)); + HANDLE_CODE(part_earfcn_minus17.pack(bref)); HANDLE_CODE(spare.pack(bref)); return SRSASN_SUCCESS; @@ -39,6 +40,7 @@ SRSASN_CODE mib_s::unpack(cbit_ref& bref) HANDLE_CODE(sys_frame_num.unpack(bref)); HANDLE_CODE(unpack_integer(sched_info_sib1_br_r13, bref, (uint8_t)0u, (uint8_t)31u)); HANDLE_CODE(bref.unpack(sys_info_unchanged_br_r15, 1)); + HANDLE_CODE(part_earfcn_minus17.unpack(bref)); HANDLE_CODE(spare.unpack(bref)); return SRSASN_SUCCESS; @@ -52,6 +54,8 @@ void mib_s::to_json(json_writer& j) const j.write_str("systemFrameNumber", sys_frame_num.to_string()); j.write_int("schedulingInfoSIB1-BR-r13", sched_info_sib1_br_r13); j.write_bool("systemInfoUnchanged-BR-r15", sys_info_unchanged_br_r15); + j.write_fieldname("partEARFCN-17"); + part_earfcn_minus17.to_json(j); j.write_str("spare", spare.to_string()); j.end_obj(); } @@ -67,6 +71,133 @@ uint8_t mib_s::dl_bw_opts::to_number() const return map_enum_number(options, 6, value, "mib_s::dl_bw_e_"); } +void mib_s::part_earfcn_minus17_c_::destroy_() +{ + switch (type_) { + case types::spare: + c.destroy<fixed_bitstring<2> >(); + break; + case types::earfcn_lsb: + c.destroy<fixed_bitstring<2> >(); + break; + default: + break; + } +} +void mib_s::part_earfcn_minus17_c_::set(types::options e) +{ + destroy_(); + type_ = e; + switch (type_) { + case types::spare: + c.init<fixed_bitstring<2> >(); + break; + case types::earfcn_lsb: + c.init<fixed_bitstring<2> >(); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "mib_s::part_earfcn_minus17_c_"); + } +} +mib_s::part_earfcn_minus17_c_::part_earfcn_minus17_c_(const mib_s::part_earfcn_minus17_c_& other) +{ + type_ = other.type(); + switch (type_) { + case types::spare: + c.init(other.c.get<fixed_bitstring<2> >()); + break; + case types::earfcn_lsb: + c.init(other.c.get<fixed_bitstring<2> >()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "mib_s::part_earfcn_minus17_c_"); + } +} +mib_s::part_earfcn_minus17_c_& mib_s::part_earfcn_minus17_c_::operator=(const mib_s::part_earfcn_minus17_c_& other) +{ + if (this == &other) { + return *this; + } + set(other.type()); + switch (type_) { + case types::spare: + c.set(other.c.get<fixed_bitstring<2> >()); + break; + case types::earfcn_lsb: + c.set(other.c.get<fixed_bitstring<2> >()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "mib_s::part_earfcn_minus17_c_"); + } + + return *this; +} +fixed_bitstring<2>& mib_s::part_earfcn_minus17_c_::set_spare() +{ + set(types::spare); + return c.get<fixed_bitstring<2> >(); +} +fixed_bitstring<2>& mib_s::part_earfcn_minus17_c_::set_earfcn_lsb() +{ + set(types::earfcn_lsb); + return c.get<fixed_bitstring<2> >(); +} +void mib_s::part_earfcn_minus17_c_::to_json(json_writer& j) const +{ + j.start_obj(); + switch (type_) { + case types::spare: + j.write_str("spare", c.get<fixed_bitstring<2> >().to_string()); + break; + case types::earfcn_lsb: + j.write_str("earfcn-LSB", c.get<fixed_bitstring<2> >().to_string()); + break; + default: + log_invalid_choice_id(type_, "mib_s::part_earfcn_minus17_c_"); + } + j.end_obj(); +} +SRSASN_CODE mib_s::part_earfcn_minus17_c_::pack(bit_ref& bref) const +{ + type_.pack(bref); + switch (type_) { + case types::spare: + HANDLE_CODE(c.get<fixed_bitstring<2> >().pack(bref)); + break; + case types::earfcn_lsb: + HANDLE_CODE(c.get<fixed_bitstring<2> >().pack(bref)); + break; + default: + log_invalid_choice_id(type_, "mib_s::part_earfcn_minus17_c_"); + return SRSASN_ERROR_ENCODE_FAIL; + } + return SRSASN_SUCCESS; +} +SRSASN_CODE mib_s::part_earfcn_minus17_c_::unpack(cbit_ref& bref) +{ + types e; + e.unpack(bref); + set(e); + switch (type_) { + case types::spare: + HANDLE_CODE(c.get<fixed_bitstring<2> >().unpack(bref)); + break; + case types::earfcn_lsb: + HANDLE_CODE(c.get<fixed_bitstring<2> >().unpack(bref)); + break; + default: + log_invalid_choice_id(type_, "mib_s::part_earfcn_minus17_c_"); + return SRSASN_ERROR_DECODE_FAIL; + } + return SRSASN_SUCCESS; +} + // GNSS-ID-r15 ::= SEQUENCE SRSASN_CODE gnss_id_r15_s::pack(bit_ref& bref) const { @@ -91,8 +222,42 @@ void gnss_id_r15_s::to_json(json_writer& j) const const char* gnss_id_r15_s::gnss_id_r15_opts::to_string() const { - static const char* options[] = {"gps", "sbas", "qzss", "galileo", "glonass", "bds"}; - return convert_enum_idx(options, 6, value, "gnss_id_r15_s::gnss_id_r15_e_"); + static const char* options[] = {"gps", "sbas", "qzss", "galileo", "glonass", "bds", "navic-v1610"}; + return convert_enum_idx(options, 7, value, "gnss_id_r15_s::gnss_id_r15_e_"); +} + +// PLMN-IdentityInfo-v1700 ::= SEQUENCE +SRSASN_CODE plmn_id_info_v1700_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(tracking_area_list_r17_present, 1)); + + if (tracking_area_list_r17_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, tracking_area_list_r17, 1, 12)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE plmn_id_info_v1700_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(tracking_area_list_r17_present, 1)); + + if (tracking_area_list_r17_present) { + HANDLE_CODE(unpack_dyn_seq_of(tracking_area_list_r17, bref, 1, 12)); + } + + return SRSASN_SUCCESS; +} +void plmn_id_info_v1700_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (tracking_area_list_r17_present) { + j.start_array("trackingAreaList-r17"); + for (const auto& e1 : tracking_area_list_r17) { + j.write_str(e1.to_string()); + } + j.end_array(); + } + j.end_obj(); } // SBAS-ID-r15 ::= SEQUENCE @@ -123,6 +288,38 @@ const char* sbas_id_r15_s::sbas_id_r15_opts::to_string() const return convert_enum_idx(options, 4, value, "sbas_id_r15_s::sbas_id_r15_e_"); } +// PLMN-IdentityInfo-v1610 ::= SEQUENCE +SRSASN_CODE plmn_id_info_v1610_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(cp_cio_t_minus5_gs_optim_r16_present, 1)); + HANDLE_CODE(bref.pack(up_cio_t_minus5_gs_optim_r16_present, 1)); + HANDLE_CODE(bref.pack(iab_support_r16_present, 1)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE plmn_id_info_v1610_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(cp_cio_t_minus5_gs_optim_r16_present, 1)); + HANDLE_CODE(bref.unpack(up_cio_t_minus5_gs_optim_r16_present, 1)); + HANDLE_CODE(bref.unpack(iab_support_r16_present, 1)); + + return SRSASN_SUCCESS; +} +void plmn_id_info_v1610_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (cp_cio_t_minus5_gs_optim_r16_present) { + j.write_str("cp-CIoT-5GS-Optimisation-r16", "true"); + } + if (up_cio_t_minus5_gs_optim_r16_present) { + j.write_str("up-CIoT-5GS-Optimisation-r16", "true"); + } + if (iab_support_r16_present) { + j.write_str("iab-Support-r16", "true"); + } + j.end_obj(); +} + // PosSIB-Type-r15 ::= SEQUENCE SRSASN_CODE pos_sib_type_r15_s::pack(bit_ref& bref) const { @@ -179,12 +376,79 @@ void pos_sib_type_r15_s::to_json(json_writer& j) const const char* pos_sib_type_r15_s::pos_sib_type_r15_opts::to_string() const { static const char* options[] = { - "posSibType1-1", "posSibType1-2", "posSibType1-3", "posSibType1-4", "posSibType1-5", "posSibType1-6", - "posSibType1-7", "posSibType2-1", "posSibType2-2", "posSibType2-3", "posSibType2-4", "posSibType2-5", - "posSibType2-6", "posSibType2-7", "posSibType2-8", "posSibType2-9", "posSibType2-10", "posSibType2-11", - "posSibType2-12", "posSibType2-13", "posSibType2-14", "posSibType2-15", "posSibType2-16", "posSibType2-17", - "posSibType2-18", "posSibType2-19", "posSibType3-1"}; - return convert_enum_idx(options, 27, value, "pos_sib_type_r15_s::pos_sib_type_r15_e_"); + "posSibType1-1", "posSibType1-2", "posSibType1-3", "posSibType1-4", + "posSibType1-5", "posSibType1-6", "posSibType1-7", "posSibType2-1", + "posSibType2-2", "posSibType2-3", "posSibType2-4", "posSibType2-5", + "posSibType2-6", "posSibType2-7", "posSibType2-8", "posSibType2-9", + "posSibType2-10", "posSibType2-11", "posSibType2-12", "posSibType2-13", + "posSibType2-14", "posSibType2-15", "posSibType2-16", "posSibType2-17", + "posSibType2-18", "posSibType2-19", "posSibType3-1", "posSibType1-8-v1610", + "posSibType2-20-v1610", "posSibType2-21-v1610", "posSibType2-22-v1610", "posSibType2-23-v1610", + "posSibType2-24-v1610", "posSibType2-25-v1610", "posSibType4-1-v1610", "posSibType5-1-v1610", + "posSibType1-9-v1700", "posSibType1-10-v1700"}; + return convert_enum_idx(options, 38, value, "pos_sib_type_r15_s::pos_sib_type_r15_e_"); +} + +// SystemInformationBlockType1-v1700-IEs ::= SEQUENCE +SRSASN_CODE sib_type1_v1700_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(cell_access_related_info_ntn_r17_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + if (cell_access_related_info_ntn_r17_present) { + HANDLE_CODE(bref.pack(cell_access_related_info_ntn_r17.plmn_id_list_v1700_present, 1)); + HANDLE_CODE(cell_access_related_info_ntn_r17.cell_barred_ntn_r17.pack(bref)); + if (cell_access_related_info_ntn_r17.plmn_id_list_v1700_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, cell_access_related_info_ntn_r17.plmn_id_list_v1700, 1, 6)); + } + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE sib_type1_v1700_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(cell_access_related_info_ntn_r17_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + if (cell_access_related_info_ntn_r17_present) { + HANDLE_CODE(bref.unpack(cell_access_related_info_ntn_r17.plmn_id_list_v1700_present, 1)); + HANDLE_CODE(cell_access_related_info_ntn_r17.cell_barred_ntn_r17.unpack(bref)); + if (cell_access_related_info_ntn_r17.plmn_id_list_v1700_present) { + HANDLE_CODE(unpack_dyn_seq_of(cell_access_related_info_ntn_r17.plmn_id_list_v1700, bref, 1, 6)); + } + } + + return SRSASN_SUCCESS; +} +void sib_type1_v1700_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (cell_access_related_info_ntn_r17_present) { + j.write_fieldname("cellAccessRelatedInfo-NTN-r17"); + j.start_obj(); + j.write_str("cellBarred-NTN-r17", cell_access_related_info_ntn_r17.cell_barred_ntn_r17.to_string()); + if (cell_access_related_info_ntn_r17.plmn_id_list_v1700_present) { + j.start_array("plmn-IdentityList-v1700"); + for (const auto& e1 : cell_access_related_info_ntn_r17.plmn_id_list_v1700) { + e1.to_json(j); + } + j.end_array(); + } + j.end_obj(); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + j.start_obj(); + j.end_obj(); + } + j.end_obj(); +} + +const char* sib_type1_v1700_ies_s::cell_access_related_info_ntn_r17_s_::cell_barred_ntn_r17_opts::to_string() const +{ + static const char* options[] = {"barred", "notBarred"}; + return convert_enum_idx( + options, 2, value, "sib_type1_v1700_ies_s::cell_access_related_info_ntn_r17_s_::cell_barred_ntn_r17_e_"); } // PLMN-IdentityInfo-v1530 ::= SEQUENCE @@ -251,6 +515,67 @@ uint16_t pos_sched_info_r15_s::pos_si_periodicity_r15_opts::to_number() const return map_enum_number(options, 7, value, "pos_sched_info_r15_s::pos_si_periodicity_r15_e_"); } +// SystemInformationBlockType1-v1610-IEs ::= SEQUENCE +SRSASN_CODE sib_type1_v1610_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(edrx_allowed_minus5_gc_r16_present, 1)); + HANDLE_CODE(bref.pack(tx_in_ctrl_ch_region_r16_present, 1)); + HANDLE_CODE(bref.pack(camping_allowed_in_ce_r16_present, 1)); + HANDLE_CODE(bref.pack(plmn_id_list_v1610_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + if (plmn_id_list_v1610_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, plmn_id_list_v1610, 1, 6)); + } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE sib_type1_v1610_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(edrx_allowed_minus5_gc_r16_present, 1)); + HANDLE_CODE(bref.unpack(tx_in_ctrl_ch_region_r16_present, 1)); + HANDLE_CODE(bref.unpack(camping_allowed_in_ce_r16_present, 1)); + HANDLE_CODE(bref.unpack(plmn_id_list_v1610_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + if (plmn_id_list_v1610_present) { + HANDLE_CODE(unpack_dyn_seq_of(plmn_id_list_v1610, bref, 1, 6)); + } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void sib_type1_v1610_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (edrx_allowed_minus5_gc_r16_present) { + j.write_str("eDRX-Allowed-5GC-r16", "true"); + } + if (tx_in_ctrl_ch_region_r16_present) { + j.write_str("transmissionInControlChRegion-r16", "true"); + } + if (camping_allowed_in_ce_r16_present) { + j.write_str("campingAllowedInCE-r16", "true"); + } + if (plmn_id_list_v1610_present) { + j.start_array("plmn-IdentityList-v1610"); + for (const auto& e1 : plmn_id_list_v1610) { + e1.to_json(j); + } + j.end_array(); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + non_crit_ext.to_json(j); + } + j.end_obj(); +} + // CellSelectionInfoCE-v1530 ::= SEQUENCE SRSASN_CODE cell_sel_info_ce_v1530_s::pack(bit_ref& bref) const { @@ -288,6 +613,10 @@ SRSASN_CODE sib_type1_v1540_ies_s::pack(bit_ref& bref) const HANDLE_CODE(bref.pack(si_pos_offset_r15_present, 1)); HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } + return SRSASN_SUCCESS; } SRSASN_CODE sib_type1_v1540_ies_s::unpack(cbit_ref& bref) @@ -295,6 +624,10 @@ SRSASN_CODE sib_type1_v1540_ies_s::unpack(cbit_ref& bref) HANDLE_CODE(bref.unpack(si_pos_offset_r15_present, 1)); HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } + return SRSASN_SUCCESS; } void sib_type1_v1540_ies_s::to_json(json_writer& j) const @@ -305,8 +638,7 @@ void sib_type1_v1540_ies_s::to_json(json_writer& j) const } if (non_crit_ext_present) { j.write_fieldname("nonCriticalExtension"); - j.start_obj(); - j.end_obj(); + non_crit_ext.to_json(j); } j.end_obj(); } @@ -2043,16 +2375,12 @@ void plmn_info_r15_s::to_json(json_writer& j) const const char* sib_type_opts::to_string() const { static const char* options[] = { - "sibType3", "sibType4", "sibType5", "sibType6", "sibType7", "sibType8", - "sibType9", "sibType10", "sibType11", "sibType12-v920", "sibType13-v920", "sibType14-v1130", - "sibType15-v1130", "sibType16-v1130", "sibType17-v1250", "sibType18-v1250", "sibType19-v1250", "sibType20-v1310", - "sibType21-v1430", "sibType24-v1530", "sibType25-v1530", "sibType26-v1530"}; - return convert_enum_idx(options, 22, value, "sib_type_e"); -} -uint8_t sib_type_opts::to_number() const -{ - static const uint8_t options[] = {3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 24, 25, 26}; - return map_enum_number(options, 22, value, "sib_type_e"); + "sibType3", "sibType4", "sibType5", "sibType6", "sibType7", "sibType8", + "sibType9", "sibType10", "sibType11", "sibType12-v920", "sibType13-v920", "sibType14-v1130", + "sibType15-v1130", "sibType16-v1130", "sibType17-v1250", "sibType18-v1250", "sibType19-v1250", "sibType20-v1310", + "sibType21-v1430", "sibType24-v1530", "sibType25-v1530", "sibType26-v1530", "sibType26a-v1610", "sibType27-v1610", + "sibType28-v1610", "sibType29-v1610"}; + return convert_enum_idx(options, 26, value, "sib_type_e"); } // SystemInformationBlockType1-v1250-IEs ::= SEQUENCE @@ -2638,6 +2966,17 @@ SRSASN_CODE sib_type2_s::pack(bit_ref& bref) const group_flags[10] |= idle_mode_meass_r15_present; group_flags[10] |= reduced_cp_latency_enabled_r15_present; group_flags[11] |= mbms_rom_service_ind_r15_present; + group_flags[12] |= rlos_enabled_r16_present; + group_flags[12] |= early_security_reactivation_r16_present; + group_flags[12] |= cp_edt_minus5_gc_r16_present; + group_flags[12] |= up_edt_minus5_gc_r16_present; + group_flags[12] |= cp_pur_epc_r16_present; + group_flags[12] |= up_pur_epc_r16_present; + group_flags[12] |= cp_pur_minus5_gc_r16_present; + group_flags[12] |= up_pur_minus5_gc_r16_present; + group_flags[12] |= mpdcch_cqi_report_r16_present; + group_flags[12] |= rai_activation_enh_r16_present; + group_flags[12] |= idle_mode_meass_nr_r16_present; group_flags.pack(bref); if (group_flags[0]) { @@ -2745,6 +3084,24 @@ SRSASN_CODE sib_type2_s::pack(bit_ref& bref) const HANDLE_CODE(bref.pack(mbms_rom_service_ind_r15_present, 1)); } + if (group_flags[12]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(rlos_enabled_r16_present, 1)); + HANDLE_CODE(bref.pack(early_security_reactivation_r16_present, 1)); + HANDLE_CODE(bref.pack(cp_edt_minus5_gc_r16_present, 1)); + HANDLE_CODE(bref.pack(up_edt_minus5_gc_r16_present, 1)); + HANDLE_CODE(bref.pack(cp_pur_epc_r16_present, 1)); + HANDLE_CODE(bref.pack(up_pur_epc_r16_present, 1)); + HANDLE_CODE(bref.pack(cp_pur_minus5_gc_r16_present, 1)); + HANDLE_CODE(bref.pack(up_pur_minus5_gc_r16_present, 1)); + HANDLE_CODE(bref.pack(mpdcch_cqi_report_r16_present, 1)); + HANDLE_CODE(bref.pack(rai_activation_enh_r16_present, 1)); + HANDLE_CODE(bref.pack(idle_mode_meass_nr_r16_present, 1)); + if (mpdcch_cqi_report_r16_present) { + HANDLE_CODE(mpdcch_cqi_report_r16.pack(bref)); + } + } } return SRSASN_SUCCESS; } @@ -2782,7 +3139,7 @@ SRSASN_CODE sib_type2_s::unpack(cbit_ref& bref) HANDLE_CODE(time_align_timer_common.unpack(bref)); if (ext) { - ext_groups_unpacker_guard group_flags(12); + ext_groups_unpacker_guard group_flags(13); group_flags.unpack(bref); if (group_flags[0]) { @@ -2912,6 +3269,24 @@ SRSASN_CODE sib_type2_s::unpack(cbit_ref& bref) HANDLE_CODE(bref.unpack(mbms_rom_service_ind_r15_present, 1)); } + if (group_flags[12]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.unpack(rlos_enabled_r16_present, 1)); + HANDLE_CODE(bref.unpack(early_security_reactivation_r16_present, 1)); + HANDLE_CODE(bref.unpack(cp_edt_minus5_gc_r16_present, 1)); + HANDLE_CODE(bref.unpack(up_edt_minus5_gc_r16_present, 1)); + HANDLE_CODE(bref.unpack(cp_pur_epc_r16_present, 1)); + HANDLE_CODE(bref.unpack(up_pur_epc_r16_present, 1)); + HANDLE_CODE(bref.unpack(cp_pur_minus5_gc_r16_present, 1)); + HANDLE_CODE(bref.unpack(up_pur_minus5_gc_r16_present, 1)); + HANDLE_CODE(bref.unpack(mpdcch_cqi_report_r16_present, 1)); + HANDLE_CODE(bref.unpack(rai_activation_enh_r16_present, 1)); + HANDLE_CODE(bref.unpack(idle_mode_meass_nr_r16_present, 1)); + if (mpdcch_cqi_report_r16_present) { + HANDLE_CODE(mpdcch_cqi_report_r16.unpack(bref)); + } + } } return SRSASN_SUCCESS; } @@ -3056,6 +3431,39 @@ void sib_type2_s::to_json(json_writer& j) const if (mbms_rom_service_ind_r15_present) { j.write_str("mbms-ROM-ServiceIndication-r15", "true"); } + if (rlos_enabled_r16_present) { + j.write_str("rlos-Enabled-r16", "true"); + } + if (early_security_reactivation_r16_present) { + j.write_str("earlySecurityReactivation-r16", "true"); + } + if (cp_edt_minus5_gc_r16_present) { + j.write_str("cp-EDT-5GC-r16", "true"); + } + if (up_edt_minus5_gc_r16_present) { + j.write_str("up-EDT-5GC-r16", "true"); + } + if (cp_pur_epc_r16_present) { + j.write_str("cp-PUR-EPC-r16", "true"); + } + if (up_pur_epc_r16_present) { + j.write_str("up-PUR-EPC-r16", "true"); + } + if (cp_pur_minus5_gc_r16_present) { + j.write_str("cp-PUR-5GC-r16", "true"); + } + if (up_pur_minus5_gc_r16_present) { + j.write_str("up-PUR-5GC-r16", "true"); + } + if (mpdcch_cqi_report_r16_present) { + j.write_str("mpdcch-CQI-Reporting-r16", mpdcch_cqi_report_r16.to_string()); + } + if (rai_activation_enh_r16_present) { + j.write_str("rai-ActivationEnh-r16", "true"); + } + if (idle_mode_meass_nr_r16_present) { + j.write_str("idleModeMeasurementsNR-r16", "true"); + } } j.end_obj(); } @@ -3071,6 +3479,17 @@ uint8_t sib_type2_s::freq_info_s_::ul_bw_opts::to_number() const return map_enum_number(options, 6, value, "sib_type2_s::freq_info_s_::ul_bw_e_"); } +const char* sib_type2_s::mpdcch_cqi_report_r16_opts::to_string() const +{ + static const char* options[] = {"fourBits", "both"}; + return convert_enum_idx(options, 2, value, "sib_type2_s::mpdcch_cqi_report_r16_e_"); +} +uint8_t sib_type2_s::mpdcch_cqi_report_r16_opts::to_number() const +{ + static const uint8_t options[] = {4}; + return map_enum_number(options, 1, value, "sib_type2_s::mpdcch_cqi_report_r16_e_"); +} + // SystemInformationBlockType1-v890-IEs ::= SEQUENCE SRSASN_CODE sib_type1_v890_ies_s::pack(bit_ref& bref) const { diff --git a/lib/src/asn1/rrc/uecap.cc b/lib/src/asn1/rrc/uecap.cc index dcb7f80f7..b72c5373d 100644 --- a/lib/src/asn1/rrc/uecap.cc +++ b/lib/src/asn1/rrc/uecap.cc @@ -20,6 +20,71 @@ using namespace asn1::rrc; * Struct Methods ******************************************************************************/ +// UECapabilityEnquiry-v1710-IEs ::= SEQUENCE +SRSASN_CODE ue_cap_enquiry_v1710_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(sidelink_request_r17_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE ue_cap_enquiry_v1710_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(sidelink_request_r17_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + return SRSASN_SUCCESS; +} +void ue_cap_enquiry_v1710_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (sidelink_request_r17_present) { + j.write_str("sidelinkRequest-r17", "true"); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + j.start_obj(); + j.end_obj(); + } + j.end_obj(); +} + +// UECapabilityEnquiry-v1610-IEs ::= SEQUENCE +SRSASN_CODE ue_cap_enquiry_v1610_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(rrc_seg_allowed_r16_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE ue_cap_enquiry_v1610_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(rrc_seg_allowed_r16_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void ue_cap_enquiry_v1610_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (rrc_seg_allowed_r16_present) { + j.write_str("rrc-SegAllowed-r16", "enabled"); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + non_crit_ext.to_json(j); + } + j.end_obj(); +} + // CA-BandwidthClass-r10 ::= ENUMERATED const char* ca_bw_class_r10_opts::to_string() const { @@ -36,6 +101,9 @@ SRSASN_CODE ue_cap_enquiry_v1560_ies_s::pack(bit_ref& bref) const if (requested_cap_common_r15_present) { HANDLE_CODE(requested_cap_common_r15.pack(bref)); } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } return SRSASN_SUCCESS; } @@ -47,6 +115,9 @@ SRSASN_CODE ue_cap_enquiry_v1560_ies_s::unpack(cbit_ref& bref) if (requested_cap_common_r15_present) { HANDLE_CODE(requested_cap_common_r15.unpack(bref)); } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } return SRSASN_SUCCESS; } @@ -58,8 +129,7 @@ void ue_cap_enquiry_v1560_ies_s::to_json(json_writer& j) const } if (non_crit_ext_present) { j.write_fieldname("nonCriticalExtension"); - j.start_obj(); - j.end_obj(); + non_crit_ext.to_json(j); } j.end_obj(); } @@ -672,6 +742,12 @@ SRSASN_CODE ue_radio_paging_info_r12_s::pack(bit_ref& bref) const group_flags[1] |= wake_up_signal_tdd_r15_present; group_flags[1] |= wake_up_signal_min_gap_e_drx_r15_present; group_flags[1] |= wake_up_signal_min_gap_e_drx_tdd_r15_present; + group_flags[2] |= ue_category_dl_v1610_present; + group_flags[2] |= group_wake_up_signal_r16_present; + group_flags[2] |= group_wake_up_signal_tdd_r16_present; + group_flags[2] |= group_wake_up_signal_alternation_r16_present; + group_flags[2] |= group_wake_up_signal_alternation_tdd_r16_present; + group_flags[3] |= inactive_state_po_determination_r17_present; group_flags.pack(bref); if (group_flags[0]) { @@ -695,6 +771,20 @@ SRSASN_CODE ue_radio_paging_info_r12_s::pack(bit_ref& bref) const HANDLE_CODE(wake_up_signal_min_gap_e_drx_tdd_r15.pack(bref)); } } + if (group_flags[2]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(ue_category_dl_v1610_present, 1)); + HANDLE_CODE(bref.pack(group_wake_up_signal_r16_present, 1)); + HANDLE_CODE(bref.pack(group_wake_up_signal_tdd_r16_present, 1)); + HANDLE_CODE(bref.pack(group_wake_up_signal_alternation_r16_present, 1)); + HANDLE_CODE(bref.pack(group_wake_up_signal_alternation_tdd_r16_present, 1)); + } + if (group_flags[3]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(inactive_state_po_determination_r17_present, 1)); + } } return SRSASN_SUCCESS; } @@ -708,7 +798,7 @@ SRSASN_CODE ue_radio_paging_info_r12_s::unpack(cbit_ref& bref) } if (ext) { - ext_groups_unpacker_guard group_flags(2); + ext_groups_unpacker_guard group_flags(4); group_flags.unpack(bref); if (group_flags[0]) { @@ -732,6 +822,20 @@ SRSASN_CODE ue_radio_paging_info_r12_s::unpack(cbit_ref& bref) HANDLE_CODE(wake_up_signal_min_gap_e_drx_tdd_r15.unpack(bref)); } } + if (group_flags[2]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.unpack(ue_category_dl_v1610_present, 1)); + HANDLE_CODE(bref.unpack(group_wake_up_signal_r16_present, 1)); + HANDLE_CODE(bref.unpack(group_wake_up_signal_tdd_r16_present, 1)); + HANDLE_CODE(bref.unpack(group_wake_up_signal_alternation_r16_present, 1)); + HANDLE_CODE(bref.unpack(group_wake_up_signal_alternation_tdd_r16_present, 1)); + } + if (group_flags[3]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.unpack(inactive_state_po_determination_r17_present, 1)); + } } return SRSASN_SUCCESS; } @@ -763,6 +867,24 @@ void ue_radio_paging_info_r12_s::to_json(json_writer& j) const if (wake_up_signal_min_gap_e_drx_tdd_r15_present) { j.write_str("wakeUpSignalMinGap-eDRX-TDD-r15", wake_up_signal_min_gap_e_drx_tdd_r15.to_string()); } + if (ue_category_dl_v1610_present) { + j.write_str("ue-CategoryDL-v1610", "m2"); + } + if (group_wake_up_signal_r16_present) { + j.write_str("groupWakeUpSignal-r16", "true"); + } + if (group_wake_up_signal_tdd_r16_present) { + j.write_str("groupWakeUpSignalTDD-r16", "true"); + } + if (group_wake_up_signal_alternation_r16_present) { + j.write_str("groupWakeUpSignalAlternation-r16", "true"); + } + if (group_wake_up_signal_alternation_tdd_r16_present) { + j.write_str("groupWakeUpSignalAlternationTDD-r16", "true"); + } + if (inactive_state_po_determination_r17_present) { + j.write_str("inactiveStatePO-Determination-r17", "true"); + } } j.end_obj(); } @@ -3899,6 +4021,348 @@ void band_combination_params_v1530_s::to_json(json_writer& j) const j.end_obj(); } +// InterRAT-BandInfoNR-r16 ::= SEQUENCE +SRSASN_CODE inter_rat_band_info_nr_r16_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(inter_rat_need_for_gaps_nr_r16, 1)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE inter_rat_band_info_nr_r16_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(inter_rat_need_for_gaps_nr_r16, 1)); + + return SRSASN_SUCCESS; +} +void inter_rat_band_info_nr_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_bool("interRAT-NeedForGapsNR-r16", inter_rat_need_for_gaps_nr_r16); + j.end_obj(); +} + +// SRS-CapabilityPerBandPair-v1610 ::= SEQUENCE +SRSASN_CODE srs_cap_per_band_pair_v1610_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(add_srs_carrier_switching_r16_present, 1)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE srs_cap_per_band_pair_v1610_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(add_srs_carrier_switching_r16_present, 1)); + + return SRSASN_SUCCESS; +} +void srs_cap_per_band_pair_v1610_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (add_srs_carrier_switching_r16_present) { + j.write_str("addSRS-CarrierSwitching-r16", "supported"); + } + j.end_obj(); +} + +// BandParameters-v1610 ::= SEQUENCE +SRSASN_CODE band_params_v1610_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(intra_freq_daps_r16_present, 1)); + HANDLE_CODE(bref.pack(add_srs_freq_hop_r16_present, 1)); + HANDLE_CODE(bref.pack(add_srs_ant_switching_r16_present, 1)); + HANDLE_CODE(bref.pack(srs_cap_per_band_pair_list_v1610_present, 1)); + + if (intra_freq_daps_r16_present) { + HANDLE_CODE(bref.pack(intra_freq_daps_r16.intra_freq_async_daps_r16_present, 1)); + HANDLE_CODE(bref.pack(intra_freq_daps_r16.dummy_present, 1)); + HANDLE_CODE(bref.pack(intra_freq_daps_r16.intra_freq_two_tags_daps_r16_present, 1)); + } + if (add_srs_ant_switching_r16_present) { + HANDLE_CODE(bref.pack(add_srs_ant_switching_r16.add_srs_minus1_t2_r_r16_present, 1)); + HANDLE_CODE(bref.pack(add_srs_ant_switching_r16.add_srs_minus1_t4_r_r16_present, 1)); + HANDLE_CODE(bref.pack(add_srs_ant_switching_r16.add_srs_minus2_t4_r_minus2pairs_r16_present, 1)); + HANDLE_CODE(bref.pack(add_srs_ant_switching_r16.add_srs_minus2_t4_r_minus3pairs_r16_present, 1)); + } + if (srs_cap_per_band_pair_list_v1610_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, srs_cap_per_band_pair_list_v1610, 1, 64)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE band_params_v1610_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(intra_freq_daps_r16_present, 1)); + HANDLE_CODE(bref.unpack(add_srs_freq_hop_r16_present, 1)); + HANDLE_CODE(bref.unpack(add_srs_ant_switching_r16_present, 1)); + HANDLE_CODE(bref.unpack(srs_cap_per_band_pair_list_v1610_present, 1)); + + if (intra_freq_daps_r16_present) { + HANDLE_CODE(bref.unpack(intra_freq_daps_r16.intra_freq_async_daps_r16_present, 1)); + HANDLE_CODE(bref.unpack(intra_freq_daps_r16.dummy_present, 1)); + HANDLE_CODE(bref.unpack(intra_freq_daps_r16.intra_freq_two_tags_daps_r16_present, 1)); + } + if (add_srs_ant_switching_r16_present) { + HANDLE_CODE(bref.unpack(add_srs_ant_switching_r16.add_srs_minus1_t2_r_r16_present, 1)); + HANDLE_CODE(bref.unpack(add_srs_ant_switching_r16.add_srs_minus1_t4_r_r16_present, 1)); + HANDLE_CODE(bref.unpack(add_srs_ant_switching_r16.add_srs_minus2_t4_r_minus2pairs_r16_present, 1)); + HANDLE_CODE(bref.unpack(add_srs_ant_switching_r16.add_srs_minus2_t4_r_minus3pairs_r16_present, 1)); + } + if (srs_cap_per_band_pair_list_v1610_present) { + HANDLE_CODE(unpack_dyn_seq_of(srs_cap_per_band_pair_list_v1610, bref, 1, 64)); + } + + return SRSASN_SUCCESS; +} +void band_params_v1610_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (intra_freq_daps_r16_present) { + j.write_fieldname("intraFreqDAPS-r16"); + j.start_obj(); + if (intra_freq_daps_r16.intra_freq_async_daps_r16_present) { + j.write_str("intraFreqAsyncDAPS-r16", "supported"); + } + if (intra_freq_daps_r16.dummy_present) { + j.write_str("dummy", "supported"); + } + if (intra_freq_daps_r16.intra_freq_two_tags_daps_r16_present) { + j.write_str("intraFreqTwoTAGs-DAPS-r16", "supported"); + } + j.end_obj(); + } + if (add_srs_freq_hop_r16_present) { + j.write_str("addSRS-FrequencyHopping-r16", "supported"); + } + if (add_srs_ant_switching_r16_present) { + j.write_fieldname("addSRS-AntennaSwitching-r16"); + j.start_obj(); + if (add_srs_ant_switching_r16.add_srs_minus1_t2_r_r16_present) { + j.write_str("addSRS-1T2R-r16", "supported"); + } + if (add_srs_ant_switching_r16.add_srs_minus1_t4_r_r16_present) { + j.write_str("addSRS-1T4R-r16", "supported"); + } + if (add_srs_ant_switching_r16.add_srs_minus2_t4_r_minus2pairs_r16_present) { + j.write_str("addSRS-2T4R-2pairs-r16", "supported"); + } + if (add_srs_ant_switching_r16.add_srs_minus2_t4_r_minus3pairs_r16_present) { + j.write_str("addSRS-2T4R-3pairs-r16", "supported"); + } + j.end_obj(); + } + if (srs_cap_per_band_pair_list_v1610_present) { + j.start_array("srs-CapabilityPerBandPairList-v1610"); + for (const auto& e1 : srs_cap_per_band_pair_list_v1610) { + e1.to_json(j); + } + j.end_array(); + } + j.end_obj(); +} + +// MeasGapInfoNR-r16 ::= SEQUENCE +SRSASN_CODE meas_gap_info_nr_r16_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(inter_rat_band_list_nr_en_dc_r16_present, 1)); + HANDLE_CODE(bref.pack(inter_rat_band_list_nr_sa_r16_present, 1)); + + if (inter_rat_band_list_nr_en_dc_r16_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, inter_rat_band_list_nr_en_dc_r16, 1, 1024)); + } + if (inter_rat_band_list_nr_sa_r16_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, inter_rat_band_list_nr_sa_r16, 1, 1024)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE meas_gap_info_nr_r16_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(inter_rat_band_list_nr_en_dc_r16_present, 1)); + HANDLE_CODE(bref.unpack(inter_rat_band_list_nr_sa_r16_present, 1)); + + if (inter_rat_band_list_nr_en_dc_r16_present) { + HANDLE_CODE(unpack_dyn_seq_of(inter_rat_band_list_nr_en_dc_r16, bref, 1, 1024)); + } + if (inter_rat_band_list_nr_sa_r16_present) { + HANDLE_CODE(unpack_dyn_seq_of(inter_rat_band_list_nr_sa_r16, bref, 1, 1024)); + } + + return SRSASN_SUCCESS; +} +void meas_gap_info_nr_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (inter_rat_band_list_nr_en_dc_r16_present) { + j.start_array("interRAT-BandListNR-EN-DC-r16"); + for (const auto& e1 : inter_rat_band_list_nr_en_dc_r16) { + e1.to_json(j); + } + j.end_array(); + } + if (inter_rat_band_list_nr_sa_r16_present) { + j.start_array("interRAT-BandListNR-SA-r16"); + for (const auto& e1 : inter_rat_band_list_nr_sa_r16) { + e1.to_json(j); + } + j.end_array(); + } + j.end_obj(); +} + +// BandCombinationParameters-v1610 ::= SEQUENCE +SRSASN_CODE band_combination_params_v1610_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(meas_gap_info_nr_r16_present, 1)); + HANDLE_CODE(bref.pack(band_param_list_v1610_present, 1)); + HANDLE_CODE(bref.pack(inter_freq_daps_r16_present, 1)); + + if (meas_gap_info_nr_r16_present) { + HANDLE_CODE(meas_gap_info_nr_r16.pack(bref)); + } + if (band_param_list_v1610_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, band_param_list_v1610, 1, 64)); + } + if (inter_freq_daps_r16_present) { + HANDLE_CODE(bref.pack(inter_freq_daps_r16.inter_freq_async_daps_r16_present, 1)); + HANDLE_CODE(bref.pack(inter_freq_daps_r16.inter_freq_multi_ul_tx_daps_r16_present, 1)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE band_combination_params_v1610_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(meas_gap_info_nr_r16_present, 1)); + HANDLE_CODE(bref.unpack(band_param_list_v1610_present, 1)); + HANDLE_CODE(bref.unpack(inter_freq_daps_r16_present, 1)); + + if (meas_gap_info_nr_r16_present) { + HANDLE_CODE(meas_gap_info_nr_r16.unpack(bref)); + } + if (band_param_list_v1610_present) { + HANDLE_CODE(unpack_dyn_seq_of(band_param_list_v1610, bref, 1, 64)); + } + if (inter_freq_daps_r16_present) { + HANDLE_CODE(bref.unpack(inter_freq_daps_r16.inter_freq_async_daps_r16_present, 1)); + HANDLE_CODE(bref.unpack(inter_freq_daps_r16.inter_freq_multi_ul_tx_daps_r16_present, 1)); + } + + return SRSASN_SUCCESS; +} +void band_combination_params_v1610_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (meas_gap_info_nr_r16_present) { + j.write_fieldname("measGapInfoNR-r16"); + meas_gap_info_nr_r16.to_json(j); + } + if (band_param_list_v1610_present) { + j.start_array("bandParameterList-v1610"); + for (const auto& e1 : band_param_list_v1610) { + e1.to_json(j); + } + j.end_array(); + } + if (inter_freq_daps_r16_present) { + j.write_fieldname("interFreqDAPS-r16"); + j.start_obj(); + if (inter_freq_daps_r16.inter_freq_async_daps_r16_present) { + j.write_str("interFreqAsyncDAPS-r16", "supported"); + } + if (inter_freq_daps_r16.inter_freq_multi_ul_tx_daps_r16_present) { + j.write_str("interFreqMultiUL-TransmissionDAPS-r16", "supported"); + } + j.end_obj(); + } + j.end_obj(); +} + +// ScalingFactorSidelink-r16 ::= ENUMERATED +const char* scaling_factor_sidelink_r16_opts::to_string() const +{ + static const char* options[] = {"f0p4", "f0p75", "f0p8", "f1"}; + return convert_enum_idx(options, 4, value, "scaling_factor_sidelink_r16_e"); +} + +// BandCombinationParameters-v1630 ::= SEQUENCE +SRSASN_CODE band_combination_params_v1630_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(v2x_supported_tx_band_comb_list_per_bc_v1630_present, 1)); + HANDLE_CODE(bref.pack(v2x_supported_rx_band_comb_list_per_bc_v1630_present, 1)); + HANDLE_CODE(bref.pack(scaling_factor_tx_sidelink_r16_present, 1)); + HANDLE_CODE(bref.pack(scaling_factor_rx_sidelink_r16_present, 1)); + HANDLE_CODE(bref.pack(inter_band_pwr_sharing_sync_daps_r16_present, 1)); + HANDLE_CODE(bref.pack(inter_band_pwr_sharing_async_daps_r16_present, 1)); + + if (v2x_supported_tx_band_comb_list_per_bc_v1630_present) { + HANDLE_CODE(v2x_supported_tx_band_comb_list_per_bc_v1630.pack(bref)); + } + if (v2x_supported_rx_band_comb_list_per_bc_v1630_present) { + HANDLE_CODE(v2x_supported_rx_band_comb_list_per_bc_v1630.pack(bref)); + } + if (scaling_factor_tx_sidelink_r16_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, scaling_factor_tx_sidelink_r16, 1, 512)); + } + if (scaling_factor_rx_sidelink_r16_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, scaling_factor_rx_sidelink_r16, 1, 512)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE band_combination_params_v1630_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(v2x_supported_tx_band_comb_list_per_bc_v1630_present, 1)); + HANDLE_CODE(bref.unpack(v2x_supported_rx_band_comb_list_per_bc_v1630_present, 1)); + HANDLE_CODE(bref.unpack(scaling_factor_tx_sidelink_r16_present, 1)); + HANDLE_CODE(bref.unpack(scaling_factor_rx_sidelink_r16_present, 1)); + HANDLE_CODE(bref.unpack(inter_band_pwr_sharing_sync_daps_r16_present, 1)); + HANDLE_CODE(bref.unpack(inter_band_pwr_sharing_async_daps_r16_present, 1)); + + if (v2x_supported_tx_band_comb_list_per_bc_v1630_present) { + HANDLE_CODE(v2x_supported_tx_band_comb_list_per_bc_v1630.unpack(bref)); + } + if (v2x_supported_rx_band_comb_list_per_bc_v1630_present) { + HANDLE_CODE(v2x_supported_rx_band_comb_list_per_bc_v1630.unpack(bref)); + } + if (scaling_factor_tx_sidelink_r16_present) { + HANDLE_CODE(unpack_dyn_seq_of(scaling_factor_tx_sidelink_r16, bref, 1, 512)); + } + if (scaling_factor_rx_sidelink_r16_present) { + HANDLE_CODE(unpack_dyn_seq_of(scaling_factor_rx_sidelink_r16, bref, 1, 512)); + } + + return SRSASN_SUCCESS; +} +void band_combination_params_v1630_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (v2x_supported_tx_band_comb_list_per_bc_v1630_present) { + j.write_str("v2x-SupportedTxBandCombListPerBC-v1630", v2x_supported_tx_band_comb_list_per_bc_v1630.to_string()); + } + if (v2x_supported_rx_band_comb_list_per_bc_v1630_present) { + j.write_str("v2x-SupportedRxBandCombListPerBC-v1630", v2x_supported_rx_band_comb_list_per_bc_v1630.to_string()); + } + if (scaling_factor_tx_sidelink_r16_present) { + j.start_array("scalingFactorTxSidelink-r16"); + for (const auto& e1 : scaling_factor_tx_sidelink_r16) { + j.write_str(e1.to_string()); + } + j.end_array(); + } + if (scaling_factor_rx_sidelink_r16_present) { + j.start_array("scalingFactorRxSidelink-r16"); + for (const auto& e1 : scaling_factor_rx_sidelink_r16) { + j.write_str(e1.to_string()); + } + j.end_array(); + } + if (inter_band_pwr_sharing_sync_daps_r16_present) { + j.write_str("interBandPowerSharingSyncDAPS-r16", "supported"); + } + if (inter_band_pwr_sharing_async_daps_r16_present) { + j.write_str("interBandPowerSharingAsyncDAPS-r16", "supported"); + } + j.end_obj(); +} + // BandCombinationParametersExt-r10 ::= SEQUENCE SRSASN_CODE band_combination_params_ext_r10_s::pack(bit_ref& bref) const { @@ -5011,6 +5475,187 @@ void mac_params_v1530_s::to_json(json_writer& j) const j.end_obj(); } +// MBMS-SupportedBandInfo-r16 ::= SEQUENCE +SRSASN_CODE mbms_supported_band_info_r16_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(subcarrier_spacing_mbms_khz2dot5_r16_present, 1)); + HANDLE_CODE(bref.pack(subcarrier_spacing_mbms_khz0dot37_r16_present, 1)); + + if (subcarrier_spacing_mbms_khz0dot37_r16_present) { + HANDLE_CODE(bref.pack(subcarrier_spacing_mbms_khz0dot37_r16.time_separation_slot2_r16_present, 1)); + HANDLE_CODE(bref.pack(subcarrier_spacing_mbms_khz0dot37_r16.time_separation_slot4_r16_present, 1)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE mbms_supported_band_info_r16_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(subcarrier_spacing_mbms_khz2dot5_r16_present, 1)); + HANDLE_CODE(bref.unpack(subcarrier_spacing_mbms_khz0dot37_r16_present, 1)); + + if (subcarrier_spacing_mbms_khz0dot37_r16_present) { + HANDLE_CODE(bref.unpack(subcarrier_spacing_mbms_khz0dot37_r16.time_separation_slot2_r16_present, 1)); + HANDLE_CODE(bref.unpack(subcarrier_spacing_mbms_khz0dot37_r16.time_separation_slot4_r16_present, 1)); + } + + return SRSASN_SUCCESS; +} +void mbms_supported_band_info_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (subcarrier_spacing_mbms_khz2dot5_r16_present) { + j.write_str("subcarrierSpacingMBMS-khz2dot5-r16", "supported"); + } + if (subcarrier_spacing_mbms_khz0dot37_r16_present) { + j.write_fieldname("subcarrierSpacingMBMS-khz0dot37-r16"); + j.start_obj(); + if (subcarrier_spacing_mbms_khz0dot37_r16.time_separation_slot2_r16_present) { + j.write_str("timeSeparationSlot2-r16", "supported"); + } + if (subcarrier_spacing_mbms_khz0dot37_r16.time_separation_slot4_r16_present) { + j.write_str("timeSeparationSlot4-r16", "supported"); + } + j.end_obj(); + } + j.end_obj(); +} + +// MBMS-Parameters-v1610 ::= SEQUENCE +SRSASN_CODE mbms_params_v1610_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(mbms_scaling_factor2dot5_r16_present, 1)); + HANDLE_CODE(bref.pack(mbms_scaling_factor0dot37_r16_present, 1)); + + if (mbms_scaling_factor2dot5_r16_present) { + HANDLE_CODE(mbms_scaling_factor2dot5_r16.pack(bref)); + } + if (mbms_scaling_factor0dot37_r16_present) { + HANDLE_CODE(mbms_scaling_factor0dot37_r16.pack(bref)); + } + HANDLE_CODE(pack_dyn_seq_of(bref, mbms_supported_band_info_list_r16, 1, 64)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE mbms_params_v1610_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(mbms_scaling_factor2dot5_r16_present, 1)); + HANDLE_CODE(bref.unpack(mbms_scaling_factor0dot37_r16_present, 1)); + + if (mbms_scaling_factor2dot5_r16_present) { + HANDLE_CODE(mbms_scaling_factor2dot5_r16.unpack(bref)); + } + if (mbms_scaling_factor0dot37_r16_present) { + HANDLE_CODE(mbms_scaling_factor0dot37_r16.unpack(bref)); + } + HANDLE_CODE(unpack_dyn_seq_of(mbms_supported_band_info_list_r16, bref, 1, 64)); + + return SRSASN_SUCCESS; +} +void mbms_params_v1610_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (mbms_scaling_factor2dot5_r16_present) { + j.write_str("mbms-ScalingFactor2dot5-r16", mbms_scaling_factor2dot5_r16.to_string()); + } + if (mbms_scaling_factor0dot37_r16_present) { + j.write_str("mbms-ScalingFactor0dot37-r16", mbms_scaling_factor0dot37_r16.to_string()); + } + j.start_array("mbms-SupportedBandInfoList-r16"); + for (const auto& e1 : mbms_supported_band_info_list_r16) { + e1.to_json(j); + } + j.end_array(); + j.end_obj(); +} + +const char* mbms_params_v1610_s::mbms_scaling_factor2dot5_r16_opts::to_string() const +{ + static const char* options[] = {"n2", "n4", "n6", "n8"}; + return convert_enum_idx(options, 4, value, "mbms_params_v1610_s::mbms_scaling_factor2dot5_r16_e_"); +} +uint8_t mbms_params_v1610_s::mbms_scaling_factor2dot5_r16_opts::to_number() const +{ + static const uint8_t options[] = {2, 4, 6, 8}; + return map_enum_number(options, 4, value, "mbms_params_v1610_s::mbms_scaling_factor2dot5_r16_e_"); +} + +const char* mbms_params_v1610_s::mbms_scaling_factor0dot37_r16_opts::to_string() const +{ + static const char* options[] = {"n12", "n16", "n20", "n24"}; + return convert_enum_idx(options, 4, value, "mbms_params_v1610_s::mbms_scaling_factor0dot37_r16_e_"); +} +uint8_t mbms_params_v1610_s::mbms_scaling_factor0dot37_r16_opts::to_number() const +{ + static const uint8_t options[] = {12, 16, 20, 24}; + return map_enum_number(options, 4, value, "mbms_params_v1610_s::mbms_scaling_factor0dot37_r16_e_"); +} + +// MBMS-SupportedBandInfo-v1700 ::= SEQUENCE +SRSASN_CODE mbms_supported_band_info_v1700_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(pmch_bw_n40_r17_present, 1)); + HANDLE_CODE(bref.pack(pmch_bw_n35_r17_present, 1)); + HANDLE_CODE(bref.pack(pmch_bw_n30_r17_present, 1)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE mbms_supported_band_info_v1700_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(pmch_bw_n40_r17_present, 1)); + HANDLE_CODE(bref.unpack(pmch_bw_n35_r17_present, 1)); + HANDLE_CODE(bref.unpack(pmch_bw_n30_r17_present, 1)); + + return SRSASN_SUCCESS; +} +void mbms_supported_band_info_v1700_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (pmch_bw_n40_r17_present) { + j.write_str("pmch-Bandwidth-n40-r17", "supported"); + } + if (pmch_bw_n35_r17_present) { + j.write_str("pmch-Bandwidth-n35-r17", "supported"); + } + if (pmch_bw_n30_r17_present) { + j.write_str("pmch-Bandwidth-n30-r17", "supported"); + } + j.end_obj(); +} + +// MBMS-Parameters-v1700 ::= SEQUENCE +SRSASN_CODE mbms_params_v1700_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(mbms_supported_band_info_list_v1700_present, 1)); + + if (mbms_supported_band_info_list_v1700_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, mbms_supported_band_info_list_v1700, 1, 64)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE mbms_params_v1700_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(mbms_supported_band_info_list_v1700_present, 1)); + + if (mbms_supported_band_info_list_v1700_present) { + HANDLE_CODE(unpack_dyn_seq_of(mbms_supported_band_info_list_v1700, bref, 1, 64)); + } + + return SRSASN_SUCCESS; +} +void mbms_params_v1700_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (mbms_supported_band_info_list_v1700_present) { + j.start_array("mbms-SupportedBandInfoList-v1700"); + for (const auto& e1 : mbms_supported_band_info_list_v1700) { + e1.to_json(j); + } + j.end_array(); + } + j.end_obj(); +} + // MIMO-UE-BeamformedCapabilities-r13 ::= SEQUENCE SRSASN_CODE mimo_ue_bf_cap_r13_s::pack(bit_ref& bref) const { @@ -5250,26 +5895,26 @@ void mimo_ue_params_per_tm_v1430_s::to_json(json_writer& j) const const char* mimo_ue_params_per_tm_v1430_s::nzp_csi_rs_aperiodic_info_r14_s_::nmax_res_r14_opts::to_string() const { - static const char* options[] = {"ffs1", "ffs2", "ffs3", "ffs4"}; + static const char* options[] = {"n1", "n2", "n4", "n8"}; return convert_enum_idx( options, 4, value, "mimo_ue_params_per_tm_v1430_s::nzp_csi_rs_aperiodic_info_r14_s_::nmax_res_r14_e_"); } uint8_t mimo_ue_params_per_tm_v1430_s::nzp_csi_rs_aperiodic_info_r14_s_::nmax_res_r14_opts::to_number() const { - static const uint8_t options[] = {1, 2, 3, 4}; + static const uint8_t options[] = {1, 2, 4, 8}; return map_enum_number( options, 4, value, "mimo_ue_params_per_tm_v1430_s::nzp_csi_rs_aperiodic_info_r14_s_::nmax_res_r14_e_"); } const char* mimo_ue_params_per_tm_v1430_s::nzp_csi_rs_periodic_info_r14_s_::nmax_res_r14_opts::to_string() const { - static const char* options[] = {"ffs1", "ffs2", "ffs3", "ffs4"}; + static const char* options[] = {"n1", "n2", "n4", "n8"}; return convert_enum_idx( options, 4, value, "mimo_ue_params_per_tm_v1430_s::nzp_csi_rs_periodic_info_r14_s_::nmax_res_r14_e_"); } uint8_t mimo_ue_params_per_tm_v1430_s::nzp_csi_rs_periodic_info_r14_s_::nmax_res_r14_opts::to_number() const { - static const uint8_t options[] = {1, 2, 3, 4}; + static const uint8_t options[] = {1, 2, 4, 8}; return map_enum_number( options, 4, value, "mimo_ue_params_per_tm_v1430_s::nzp_csi_rs_periodic_info_r14_s_::nmax_res_r14_e_"); } @@ -5431,6 +6076,154 @@ void meas_params_v1020_s::to_json(json_writer& j) const j.end_obj(); } +// MeasParameters-v1610 ::= SEQUENCE +SRSASN_CODE meas_params_v1610_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(band_info_nr_v1610_present, 1)); + HANDLE_CODE(bref.pack(alt_freq_prio_r16_present, 1)); + HANDLE_CODE(bref.pack(ce_dl_ch_quality_report_r16_present, 1)); + HANDLE_CODE(bref.pack(ce_meas_rss_ded_r16_present, 1)); + HANDLE_CODE(bref.pack(eutra_idle_inactive_meass_r16_present, 1)); + HANDLE_CODE(bref.pack(nr_idle_inactive_meas_fr1_r16_present, 1)); + HANDLE_CODE(bref.pack(nr_idle_inactive_meas_fr2_r16_present, 1)); + HANDLE_CODE(bref.pack(idle_inactive_validity_area_list_r16_present, 1)); + HANDLE_CODE(bref.pack(meas_gap_patterns_nronly_r16_present, 1)); + HANDLE_CODE(bref.pack(meas_gap_patterns_nronly_endc_r16_present, 1)); + + if (band_info_nr_v1610_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, band_info_nr_v1610, 1, 64)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE meas_params_v1610_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(band_info_nr_v1610_present, 1)); + HANDLE_CODE(bref.unpack(alt_freq_prio_r16_present, 1)); + HANDLE_CODE(bref.unpack(ce_dl_ch_quality_report_r16_present, 1)); + HANDLE_CODE(bref.unpack(ce_meas_rss_ded_r16_present, 1)); + HANDLE_CODE(bref.unpack(eutra_idle_inactive_meass_r16_present, 1)); + HANDLE_CODE(bref.unpack(nr_idle_inactive_meas_fr1_r16_present, 1)); + HANDLE_CODE(bref.unpack(nr_idle_inactive_meas_fr2_r16_present, 1)); + HANDLE_CODE(bref.unpack(idle_inactive_validity_area_list_r16_present, 1)); + HANDLE_CODE(bref.unpack(meas_gap_patterns_nronly_r16_present, 1)); + HANDLE_CODE(bref.unpack(meas_gap_patterns_nronly_endc_r16_present, 1)); + + if (band_info_nr_v1610_present) { + HANDLE_CODE(unpack_dyn_seq_of(band_info_nr_v1610, bref, 1, 64)); + } + + return SRSASN_SUCCESS; +} +void meas_params_v1610_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (band_info_nr_v1610_present) { + j.start_array("bandInfoNR-v1610"); + for (const auto& e1 : band_info_nr_v1610) { + e1.to_json(j); + } + j.end_array(); + } + if (alt_freq_prio_r16_present) { + j.write_str("altFreqPriority-r16", "supported"); + } + if (ce_dl_ch_quality_report_r16_present) { + j.write_str("ce-DL-ChannelQualityReporting-r16", "supported"); + } + if (ce_meas_rss_ded_r16_present) { + j.write_str("ce-MeasRSS-Dedicated-r16", "supported"); + } + if (eutra_idle_inactive_meass_r16_present) { + j.write_str("eutra-IdleInactiveMeasurements-r16", "supported"); + } + if (nr_idle_inactive_meas_fr1_r16_present) { + j.write_str("nr-IdleInactiveMeasFR1-r16", "supported"); + } + if (nr_idle_inactive_meas_fr2_r16_present) { + j.write_str("nr-IdleInactiveMeasFR2-r16", "supported"); + } + if (idle_inactive_validity_area_list_r16_present) { + j.write_str("idleInactiveValidityAreaList-r16", "supported"); + } + if (meas_gap_patterns_nronly_r16_present) { + j.write_str("measGapPatterns-NRonly-r16", "supported"); + } + if (meas_gap_patterns_nronly_endc_r16_present) { + j.write_str("measGapPatterns-NRonly-ENDC-r16", "supported"); + } + j.end_obj(); +} + +// SharedSpectrumMeasNR-r17 ::= SEQUENCE +SRSASN_CODE shared_spec_meas_nr_r17_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(nr_rssi_ch_occupancy_report_r17, 1)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE shared_spec_meas_nr_r17_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(nr_rssi_ch_occupancy_report_r17, 1)); + + return SRSASN_SUCCESS; +} +void shared_spec_meas_nr_r17_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_bool("nr-RSSI-ChannelOccupancyReporting-r17", nr_rssi_ch_occupancy_report_r17); + j.end_obj(); +} + +// MeasParameters-v1700 ::= SEQUENCE +SRSASN_CODE meas_params_v1700_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(shared_spec_meas_nr_en_dc_r17_present, 1)); + HANDLE_CODE(bref.pack(shared_spec_meas_nr_sa_r17_present, 1)); + + if (shared_spec_meas_nr_en_dc_r17_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, shared_spec_meas_nr_en_dc_r17, 1, 1024)); + } + if (shared_spec_meas_nr_sa_r17_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, shared_spec_meas_nr_sa_r17, 1, 1024)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE meas_params_v1700_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(shared_spec_meas_nr_en_dc_r17_present, 1)); + HANDLE_CODE(bref.unpack(shared_spec_meas_nr_sa_r17_present, 1)); + + if (shared_spec_meas_nr_en_dc_r17_present) { + HANDLE_CODE(unpack_dyn_seq_of(shared_spec_meas_nr_en_dc_r17, bref, 1, 1024)); + } + if (shared_spec_meas_nr_sa_r17_present) { + HANDLE_CODE(unpack_dyn_seq_of(shared_spec_meas_nr_sa_r17, bref, 1, 1024)); + } + + return SRSASN_SUCCESS; +} +void meas_params_v1700_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (shared_spec_meas_nr_en_dc_r17_present) { + j.start_array("sharedSpectrumMeasNR-EN-DC-r17"); + for (const auto& e1 : shared_spec_meas_nr_en_dc_r17) { + e1.to_json(j); + } + j.end_array(); + } + if (shared_spec_meas_nr_sa_r17_present) { + j.start_array("sharedSpectrumMeasNR-SA-r17"); + for (const auto& e1 : shared_spec_meas_nr_sa_r17) { + e1.to_json(j); + } + j.end_array(); + } + j.end_obj(); +} + // NAICS-Capability-Entry-r12 ::= SEQUENCE SRSASN_CODE naics_cap_entry_r12_s::pack(bit_ref& bref) const { @@ -6760,6 +7553,305 @@ const char* phy_layer_params_v1530_s::stti_spt_cap_r15_s_::sps_stti_r15_opts::to return convert_enum_idx(options, 3, value, "phy_layer_params_v1530_s::stti_spt_cap_r15_s_::sps_stti_r15_e_"); } +// CE-MultiTB-Parameters-r16 ::= SEQUENCE +SRSASN_CODE ce_multi_tb_params_r16_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(pdsch_multi_tb_ce_mode_a_r16_present, 1)); + HANDLE_CODE(bref.pack(pdsch_multi_tb_ce_mode_b_r16_present, 1)); + HANDLE_CODE(bref.pack(pusch_multi_tb_ce_mode_a_r16_present, 1)); + HANDLE_CODE(bref.pack(pusch_multi_tb_ce_mode_b_r16_present, 1)); + HANDLE_CODE(bref.pack(ce_multi_tb_minus64_qam_r16_present, 1)); + HANDLE_CODE(bref.pack(ce_multi_tb_early_termination_r16_present, 1)); + HANDLE_CODE(bref.pack(ce_multi_tb_freq_hop_r16_present, 1)); + HANDLE_CODE(bref.pack(ce_multi_tb_harq_ack_bundling_r16_present, 1)); + HANDLE_CODE(bref.pack(ce_multi_tb_interleaving_r16_present, 1)); + HANDLE_CODE(bref.pack(ce_multi_tb_sub_prb_r16_present, 1)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE ce_multi_tb_params_r16_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(pdsch_multi_tb_ce_mode_a_r16_present, 1)); + HANDLE_CODE(bref.unpack(pdsch_multi_tb_ce_mode_b_r16_present, 1)); + HANDLE_CODE(bref.unpack(pusch_multi_tb_ce_mode_a_r16_present, 1)); + HANDLE_CODE(bref.unpack(pusch_multi_tb_ce_mode_b_r16_present, 1)); + HANDLE_CODE(bref.unpack(ce_multi_tb_minus64_qam_r16_present, 1)); + HANDLE_CODE(bref.unpack(ce_multi_tb_early_termination_r16_present, 1)); + HANDLE_CODE(bref.unpack(ce_multi_tb_freq_hop_r16_present, 1)); + HANDLE_CODE(bref.unpack(ce_multi_tb_harq_ack_bundling_r16_present, 1)); + HANDLE_CODE(bref.unpack(ce_multi_tb_interleaving_r16_present, 1)); + HANDLE_CODE(bref.unpack(ce_multi_tb_sub_prb_r16_present, 1)); + + return SRSASN_SUCCESS; +} +void ce_multi_tb_params_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (pdsch_multi_tb_ce_mode_a_r16_present) { + j.write_str("pdsch-MultiTB-CE-ModeA-r16", "supported"); + } + if (pdsch_multi_tb_ce_mode_b_r16_present) { + j.write_str("pdsch-MultiTB-CE-ModeB-r16", "supported"); + } + if (pusch_multi_tb_ce_mode_a_r16_present) { + j.write_str("pusch-MultiTB-CE-ModeA-r16", "supported"); + } + if (pusch_multi_tb_ce_mode_b_r16_present) { + j.write_str("pusch-MultiTB-CE-ModeB-r16", "supported"); + } + if (ce_multi_tb_minus64_qam_r16_present) { + j.write_str("ce-MultiTB-64QAM-r16", "supported"); + } + if (ce_multi_tb_early_termination_r16_present) { + j.write_str("ce-MultiTB-EarlyTermination-r16", "supported"); + } + if (ce_multi_tb_freq_hop_r16_present) { + j.write_str("ce-MultiTB-FrequencyHopping-r16", "supported"); + } + if (ce_multi_tb_harq_ack_bundling_r16_present) { + j.write_str("ce-MultiTB-HARQ-AckBundling-r16", "supported"); + } + if (ce_multi_tb_interleaving_r16_present) { + j.write_str("ce-MultiTB-Interleaving-r16", "supported"); + } + if (ce_multi_tb_sub_prb_r16_present) { + j.write_str("ce-MultiTB-SubPRB-r16", "supported"); + } + j.end_obj(); +} + +// CE-ResourceResvParameters-r16 ::= SEQUENCE +SRSASN_CODE ce_res_resv_params_r16_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(sf_res_resv_dl_ce_mode_a_r16_present, 1)); + HANDLE_CODE(bref.pack(sf_res_resv_dl_ce_mode_b_r16_present, 1)); + HANDLE_CODE(bref.pack(sf_res_resv_ul_ce_mode_a_r16_present, 1)); + HANDLE_CODE(bref.pack(sf_res_resv_ul_ce_mode_b_r16_present, 1)); + HANDLE_CODE(bref.pack(slot_symbol_res_resv_dl_ce_mode_a_r16_present, 1)); + HANDLE_CODE(bref.pack(slot_symbol_res_resv_dl_ce_mode_b_r16_present, 1)); + HANDLE_CODE(bref.pack(slot_symbol_res_resv_ul_ce_mode_a_r16_present, 1)); + HANDLE_CODE(bref.pack(slot_symbol_res_resv_ul_ce_mode_b_r16_present, 1)); + HANDLE_CODE(bref.pack(subcarrier_puncturing_ce_mode_a_r16_present, 1)); + HANDLE_CODE(bref.pack(subcarrier_puncturing_ce_mode_b_r16_present, 1)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE ce_res_resv_params_r16_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(sf_res_resv_dl_ce_mode_a_r16_present, 1)); + HANDLE_CODE(bref.unpack(sf_res_resv_dl_ce_mode_b_r16_present, 1)); + HANDLE_CODE(bref.unpack(sf_res_resv_ul_ce_mode_a_r16_present, 1)); + HANDLE_CODE(bref.unpack(sf_res_resv_ul_ce_mode_b_r16_present, 1)); + HANDLE_CODE(bref.unpack(slot_symbol_res_resv_dl_ce_mode_a_r16_present, 1)); + HANDLE_CODE(bref.unpack(slot_symbol_res_resv_dl_ce_mode_b_r16_present, 1)); + HANDLE_CODE(bref.unpack(slot_symbol_res_resv_ul_ce_mode_a_r16_present, 1)); + HANDLE_CODE(bref.unpack(slot_symbol_res_resv_ul_ce_mode_b_r16_present, 1)); + HANDLE_CODE(bref.unpack(subcarrier_puncturing_ce_mode_a_r16_present, 1)); + HANDLE_CODE(bref.unpack(subcarrier_puncturing_ce_mode_b_r16_present, 1)); + + return SRSASN_SUCCESS; +} +void ce_res_resv_params_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (sf_res_resv_dl_ce_mode_a_r16_present) { + j.write_str("subframeResourceResvDL-CE-ModeA-r16", "supported"); + } + if (sf_res_resv_dl_ce_mode_b_r16_present) { + j.write_str("subframeResourceResvDL-CE-ModeB-r16", "supported"); + } + if (sf_res_resv_ul_ce_mode_a_r16_present) { + j.write_str("subframeResourceResvUL-CE-ModeA-r16", "supported"); + } + if (sf_res_resv_ul_ce_mode_b_r16_present) { + j.write_str("subframeResourceResvUL-CE-ModeB-r16", "supported"); + } + if (slot_symbol_res_resv_dl_ce_mode_a_r16_present) { + j.write_str("slotSymbolResourceResvDL-CE-ModeA-r16", "supported"); + } + if (slot_symbol_res_resv_dl_ce_mode_b_r16_present) { + j.write_str("slotSymbolResourceResvDL-CE-ModeB-r16", "supported"); + } + if (slot_symbol_res_resv_ul_ce_mode_a_r16_present) { + j.write_str("slotSymbolResourceResvUL-CE-ModeA-r16", "supported"); + } + if (slot_symbol_res_resv_ul_ce_mode_b_r16_present) { + j.write_str("slotSymbolResourceResvUL-CE-ModeB-r16", "supported"); + } + if (subcarrier_puncturing_ce_mode_a_r16_present) { + j.write_str("subcarrierPuncturingCE-ModeA-r16", "supported"); + } + if (subcarrier_puncturing_ce_mode_b_r16_present) { + j.write_str("subcarrierPuncturingCE-ModeB-r16", "supported"); + } + j.end_obj(); +} + +// PhyLayerParameters-v1610 ::= SEQUENCE +SRSASN_CODE phy_layer_params_v1610_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(ce_cap_v1610_present, 1)); + HANDLE_CODE(bref.pack(wideband_prg_slot_r16_present, 1)); + HANDLE_CODE(bref.pack(wideband_prg_subslot_r16_present, 1)); + HANDLE_CODE(bref.pack(wideband_prg_sf_r16_present, 1)); + HANDLE_CODE(bref.pack(add_srs_r16_present, 1)); + HANDLE_CODE(bref.pack(virtual_cell_id_basic_srs_r16_present, 1)); + HANDLE_CODE(bref.pack(virtual_cell_id_add_srs_r16_present, 1)); + + if (ce_cap_v1610_present) { + HANDLE_CODE(bref.pack(ce_cap_v1610.ce_csi_rs_feedback_r16_present, 1)); + HANDLE_CODE(bref.pack(ce_cap_v1610.ce_csi_rs_feedback_codebook_restrict_r16_present, 1)); + HANDLE_CODE(bref.pack(ce_cap_v1610.crs_ch_est_mpdcch_ce_mode_a_r16_present, 1)); + HANDLE_CODE(bref.pack(ce_cap_v1610.crs_ch_est_mpdcch_ce_mode_b_r16_present, 1)); + HANDLE_CODE(bref.pack(ce_cap_v1610.crs_ch_est_mpdcch_csi_r16_present, 1)); + HANDLE_CODE(bref.pack(ce_cap_v1610.crs_ch_est_mpdcch_reciprocity_tdd_r16_present, 1)); + HANDLE_CODE(bref.pack(ce_cap_v1610.etws_cmas_rx_in_conn_ce_mode_a_r16_present, 1)); + HANDLE_CODE(bref.pack(ce_cap_v1610.etws_cmas_rx_in_conn_ce_mode_b_r16_present, 1)); + HANDLE_CODE(bref.pack(ce_cap_v1610.mpdcch_in_lte_ctrl_region_ce_mode_a_r16_present, 1)); + HANDLE_CODE(bref.pack(ce_cap_v1610.mpdcch_in_lte_ctrl_region_ce_mode_b_r16_present, 1)); + HANDLE_CODE(bref.pack(ce_cap_v1610.pdsch_in_lte_ctrl_region_ce_mode_a_r16_present, 1)); + HANDLE_CODE(bref.pack(ce_cap_v1610.pdsch_in_lte_ctrl_region_ce_mode_b_r16_present, 1)); + HANDLE_CODE(bref.pack(ce_cap_v1610.multi_tb_params_r16_present, 1)); + HANDLE_CODE(bref.pack(ce_cap_v1610.res_resv_params_r16_present, 1)); + if (ce_cap_v1610.multi_tb_params_r16_present) { + HANDLE_CODE(ce_cap_v1610.multi_tb_params_r16.pack(bref)); + } + if (ce_cap_v1610.res_resv_params_r16_present) { + HANDLE_CODE(ce_cap_v1610.res_resv_params_r16.pack(bref)); + } + } + if (add_srs_r16_present) { + HANDLE_CODE(bref.pack(add_srs_r16.add_srs_freq_hop_r16_present, 1)); + HANDLE_CODE(bref.pack(add_srs_r16.add_srs_ant_switching_r16_present, 1)); + HANDLE_CODE(bref.pack(add_srs_r16.add_srs_carrier_switching_r16_present, 1)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE phy_layer_params_v1610_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(ce_cap_v1610_present, 1)); + HANDLE_CODE(bref.unpack(wideband_prg_slot_r16_present, 1)); + HANDLE_CODE(bref.unpack(wideband_prg_subslot_r16_present, 1)); + HANDLE_CODE(bref.unpack(wideband_prg_sf_r16_present, 1)); + HANDLE_CODE(bref.unpack(add_srs_r16_present, 1)); + HANDLE_CODE(bref.unpack(virtual_cell_id_basic_srs_r16_present, 1)); + HANDLE_CODE(bref.unpack(virtual_cell_id_add_srs_r16_present, 1)); + + if (ce_cap_v1610_present) { + HANDLE_CODE(bref.unpack(ce_cap_v1610.ce_csi_rs_feedback_r16_present, 1)); + HANDLE_CODE(bref.unpack(ce_cap_v1610.ce_csi_rs_feedback_codebook_restrict_r16_present, 1)); + HANDLE_CODE(bref.unpack(ce_cap_v1610.crs_ch_est_mpdcch_ce_mode_a_r16_present, 1)); + HANDLE_CODE(bref.unpack(ce_cap_v1610.crs_ch_est_mpdcch_ce_mode_b_r16_present, 1)); + HANDLE_CODE(bref.unpack(ce_cap_v1610.crs_ch_est_mpdcch_csi_r16_present, 1)); + HANDLE_CODE(bref.unpack(ce_cap_v1610.crs_ch_est_mpdcch_reciprocity_tdd_r16_present, 1)); + HANDLE_CODE(bref.unpack(ce_cap_v1610.etws_cmas_rx_in_conn_ce_mode_a_r16_present, 1)); + HANDLE_CODE(bref.unpack(ce_cap_v1610.etws_cmas_rx_in_conn_ce_mode_b_r16_present, 1)); + HANDLE_CODE(bref.unpack(ce_cap_v1610.mpdcch_in_lte_ctrl_region_ce_mode_a_r16_present, 1)); + HANDLE_CODE(bref.unpack(ce_cap_v1610.mpdcch_in_lte_ctrl_region_ce_mode_b_r16_present, 1)); + HANDLE_CODE(bref.unpack(ce_cap_v1610.pdsch_in_lte_ctrl_region_ce_mode_a_r16_present, 1)); + HANDLE_CODE(bref.unpack(ce_cap_v1610.pdsch_in_lte_ctrl_region_ce_mode_b_r16_present, 1)); + HANDLE_CODE(bref.unpack(ce_cap_v1610.multi_tb_params_r16_present, 1)); + HANDLE_CODE(bref.unpack(ce_cap_v1610.res_resv_params_r16_present, 1)); + if (ce_cap_v1610.multi_tb_params_r16_present) { + HANDLE_CODE(ce_cap_v1610.multi_tb_params_r16.unpack(bref)); + } + if (ce_cap_v1610.res_resv_params_r16_present) { + HANDLE_CODE(ce_cap_v1610.res_resv_params_r16.unpack(bref)); + } + } + if (add_srs_r16_present) { + HANDLE_CODE(bref.unpack(add_srs_r16.add_srs_freq_hop_r16_present, 1)); + HANDLE_CODE(bref.unpack(add_srs_r16.add_srs_ant_switching_r16_present, 1)); + HANDLE_CODE(bref.unpack(add_srs_r16.add_srs_carrier_switching_r16_present, 1)); + } + + return SRSASN_SUCCESS; +} +void phy_layer_params_v1610_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (ce_cap_v1610_present) { + j.write_fieldname("ce-Capabilities-v1610"); + j.start_obj(); + if (ce_cap_v1610.ce_csi_rs_feedback_r16_present) { + j.write_str("ce-CSI-RS-Feedback-r16", "supported"); + } + if (ce_cap_v1610.ce_csi_rs_feedback_codebook_restrict_r16_present) { + j.write_str("ce-CSI-RS-FeedbackCodebookRestriction-r16", "supported"); + } + if (ce_cap_v1610.crs_ch_est_mpdcch_ce_mode_a_r16_present) { + j.write_str("crs-ChEstMPDCCH-CE-ModeA-r16", "supported"); + } + if (ce_cap_v1610.crs_ch_est_mpdcch_ce_mode_b_r16_present) { + j.write_str("crs-ChEstMPDCCH-CE-ModeB-r16", "supported"); + } + if (ce_cap_v1610.crs_ch_est_mpdcch_csi_r16_present) { + j.write_str("crs-ChEstMPDCCH-CSI-r16", "supported"); + } + if (ce_cap_v1610.crs_ch_est_mpdcch_reciprocity_tdd_r16_present) { + j.write_str("crs-ChEstMPDCCH-ReciprocityTDD-r16", "supported"); + } + if (ce_cap_v1610.etws_cmas_rx_in_conn_ce_mode_a_r16_present) { + j.write_str("etws-CMAS-RxInConnCE-ModeA-r16", "supported"); + } + if (ce_cap_v1610.etws_cmas_rx_in_conn_ce_mode_b_r16_present) { + j.write_str("etws-CMAS-RxInConnCE-ModeB-r16", "supported"); + } + if (ce_cap_v1610.mpdcch_in_lte_ctrl_region_ce_mode_a_r16_present) { + j.write_str("mpdcch-InLteControlRegionCE-ModeA-r16", "supported"); + } + if (ce_cap_v1610.mpdcch_in_lte_ctrl_region_ce_mode_b_r16_present) { + j.write_str("mpdcch-InLteControlRegionCE-ModeB-r16", "supported"); + } + if (ce_cap_v1610.pdsch_in_lte_ctrl_region_ce_mode_a_r16_present) { + j.write_str("pdsch-InLteControlRegionCE-ModeA-r16", "supported"); + } + if (ce_cap_v1610.pdsch_in_lte_ctrl_region_ce_mode_b_r16_present) { + j.write_str("pdsch-InLteControlRegionCE-ModeB-r16", "supported"); + } + if (ce_cap_v1610.multi_tb_params_r16_present) { + j.write_fieldname("multiTB-Parameters-r16"); + ce_cap_v1610.multi_tb_params_r16.to_json(j); + } + if (ce_cap_v1610.res_resv_params_r16_present) { + j.write_fieldname("resourceResvParameters-r16"); + ce_cap_v1610.res_resv_params_r16.to_json(j); + } + j.end_obj(); + } + if (wideband_prg_slot_r16_present) { + j.write_str("widebandPRG-Slot-r16", "supported"); + } + if (wideband_prg_subslot_r16_present) { + j.write_str("widebandPRG-Subslot-r16", "supported"); + } + if (wideband_prg_sf_r16_present) { + j.write_str("widebandPRG-Subframe-r16", "supported"); + } + if (add_srs_r16_present) { + j.write_fieldname("addSRS-r16"); + j.start_obj(); + if (add_srs_r16.add_srs_freq_hop_r16_present) { + j.write_str("addSRS-FrequencyHopping-r16", "supported"); + } + if (add_srs_r16.add_srs_ant_switching_r16_present) { + j.write_str("addSRS-AntennaSwitching-r16", "useBasic"); + } + if (add_srs_r16.add_srs_carrier_switching_r16_present) { + j.write_str("addSRS-CarrierSwitching-r16", "supported"); + } + j.end_obj(); + } + if (virtual_cell_id_basic_srs_r16_present) { + j.write_str("virtualCellID-BasicSRS-r16", "supported"); + } + if (virtual_cell_id_add_srs_r16_present) { + j.write_str("virtualCellID-AddSRS-r16", "supported"); + } + j.end_obj(); +} + // SupportedBandEUTRA ::= SEQUENCE SRSASN_CODE supported_band_eutra_s::pack(bit_ref& bref) const { @@ -7968,6 +9060,134 @@ void rf_params_v1530_s::to_json(json_writer& j) const j.end_obj(); } +// RF-Parameters-v1610 ::= SEQUENCE +SRSASN_CODE rf_params_v1610_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(supported_band_combination_v1610_present, 1)); + HANDLE_CODE(bref.pack(supported_band_combination_add_v1610_present, 1)); + HANDLE_CODE(bref.pack(supported_band_combination_reduced_v1610_present, 1)); + + if (supported_band_combination_v1610_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, supported_band_combination_v1610, 1, 128)); + } + if (supported_band_combination_add_v1610_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, supported_band_combination_add_v1610, 1, 256)); + } + if (supported_band_combination_reduced_v1610_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, supported_band_combination_reduced_v1610, 1, 384)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE rf_params_v1610_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(supported_band_combination_v1610_present, 1)); + HANDLE_CODE(bref.unpack(supported_band_combination_add_v1610_present, 1)); + HANDLE_CODE(bref.unpack(supported_band_combination_reduced_v1610_present, 1)); + + if (supported_band_combination_v1610_present) { + HANDLE_CODE(unpack_dyn_seq_of(supported_band_combination_v1610, bref, 1, 128)); + } + if (supported_band_combination_add_v1610_present) { + HANDLE_CODE(unpack_dyn_seq_of(supported_band_combination_add_v1610, bref, 1, 256)); + } + if (supported_band_combination_reduced_v1610_present) { + HANDLE_CODE(unpack_dyn_seq_of(supported_band_combination_reduced_v1610, bref, 1, 384)); + } + + return SRSASN_SUCCESS; +} +void rf_params_v1610_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (supported_band_combination_v1610_present) { + j.start_array("supportedBandCombination-v1610"); + for (const auto& e1 : supported_band_combination_v1610) { + e1.to_json(j); + } + j.end_array(); + } + if (supported_band_combination_add_v1610_present) { + j.start_array("supportedBandCombinationAdd-v1610"); + for (const auto& e1 : supported_band_combination_add_v1610) { + e1.to_json(j); + } + j.end_array(); + } + if (supported_band_combination_reduced_v1610_present) { + j.start_array("supportedBandCombinationReduced-v1610"); + for (const auto& e1 : supported_band_combination_reduced_v1610) { + e1.to_json(j); + } + j.end_array(); + } + j.end_obj(); +} + +// RF-Parameters-v1630 ::= SEQUENCE +SRSASN_CODE rf_params_v1630_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(supported_band_combination_v1630_present, 1)); + HANDLE_CODE(bref.pack(supported_band_combination_add_v1630_present, 1)); + HANDLE_CODE(bref.pack(supported_band_combination_reduced_v1630_present, 1)); + + if (supported_band_combination_v1630_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, supported_band_combination_v1630, 1, 128)); + } + if (supported_band_combination_add_v1630_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, supported_band_combination_add_v1630, 1, 256)); + } + if (supported_band_combination_reduced_v1630_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, supported_band_combination_reduced_v1630, 1, 384)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE rf_params_v1630_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(supported_band_combination_v1630_present, 1)); + HANDLE_CODE(bref.unpack(supported_band_combination_add_v1630_present, 1)); + HANDLE_CODE(bref.unpack(supported_band_combination_reduced_v1630_present, 1)); + + if (supported_band_combination_v1630_present) { + HANDLE_CODE(unpack_dyn_seq_of(supported_band_combination_v1630, bref, 1, 128)); + } + if (supported_band_combination_add_v1630_present) { + HANDLE_CODE(unpack_dyn_seq_of(supported_band_combination_add_v1630, bref, 1, 256)); + } + if (supported_band_combination_reduced_v1630_present) { + HANDLE_CODE(unpack_dyn_seq_of(supported_band_combination_reduced_v1630, bref, 1, 384)); + } + + return SRSASN_SUCCESS; +} +void rf_params_v1630_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (supported_band_combination_v1630_present) { + j.start_array("supportedBandCombination-v1630"); + for (const auto& e1 : supported_band_combination_v1630) { + e1.to_json(j); + } + j.end_array(); + } + if (supported_band_combination_add_v1630_present) { + j.start_array("supportedBandCombinationAdd-v1630"); + for (const auto& e1 : supported_band_combination_add_v1630) { + e1.to_json(j); + } + j.end_array(); + } + if (supported_band_combination_reduced_v1630_present) { + j.start_array("supportedBandCombinationReduced-v1630"); + for (const auto& e1 : supported_band_combination_reduced_v1630) { + e1.to_json(j); + } + j.end_array(); + } + j.end_obj(); +} + // SupportedBandEUTRA-v9e0 ::= SEQUENCE SRSASN_CODE supported_band_eutra_v9e0_s::pack(bit_ref& bref) const { @@ -8401,6 +9621,1503 @@ const char* sl_params_v1530_s::slss_supported_tx_freq_r15_opts::to_string() cons return convert_enum_idx(options, 2, value, "sl_params_v1530_s::slss_supported_tx_freq_r15_e_"); } +// V2X-BandParametersEUTRA-NR-r16 ::= CHOICE +void v2x_band_params_eutra_nr_r16_c::destroy_() +{ + switch (type_) { + case types::eutra: + c.destroy<eutra_s_>(); + break; + case types::nr: + c.destroy<nr_s_>(); + break; + default: + break; + } +} +void v2x_band_params_eutra_nr_r16_c::set(types::options e) +{ + destroy_(); + type_ = e; + switch (type_) { + case types::eutra: + c.init<eutra_s_>(); + break; + case types::nr: + c.init<nr_s_>(); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "v2x_band_params_eutra_nr_r16_c"); + } +} +v2x_band_params_eutra_nr_r16_c::v2x_band_params_eutra_nr_r16_c(const v2x_band_params_eutra_nr_r16_c& other) +{ + type_ = other.type(); + switch (type_) { + case types::eutra: + c.init(other.c.get<eutra_s_>()); + break; + case types::nr: + c.init(other.c.get<nr_s_>()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "v2x_band_params_eutra_nr_r16_c"); + } +} +v2x_band_params_eutra_nr_r16_c& v2x_band_params_eutra_nr_r16_c::operator=(const v2x_band_params_eutra_nr_r16_c& other) +{ + if (this == &other) { + return *this; + } + set(other.type()); + switch (type_) { + case types::eutra: + c.set(other.c.get<eutra_s_>()); + break; + case types::nr: + c.set(other.c.get<nr_s_>()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "v2x_band_params_eutra_nr_r16_c"); + } + + return *this; +} +v2x_band_params_eutra_nr_r16_c::eutra_s_& v2x_band_params_eutra_nr_r16_c::set_eutra() +{ + set(types::eutra); + return c.get<eutra_s_>(); +} +v2x_band_params_eutra_nr_r16_c::nr_s_& v2x_band_params_eutra_nr_r16_c::set_nr() +{ + set(types::nr); + return c.get<nr_s_>(); +} +void v2x_band_params_eutra_nr_r16_c::to_json(json_writer& j) const +{ + j.start_obj(); + switch (type_) { + case types::eutra: + j.write_fieldname("eutra"); + j.start_obj(); + if (c.get<eutra_s_>().v2x_band_params1_r16_present) { + j.write_fieldname("v2x-BandParameters1-r16"); + c.get<eutra_s_>().v2x_band_params1_r16.to_json(j); + } + if (c.get<eutra_s_>().v2x_band_params2_r16_present) { + j.write_fieldname("v2x-BandParameters2-r16"); + c.get<eutra_s_>().v2x_band_params2_r16.to_json(j); + } + j.end_obj(); + break; + case types::nr: + j.write_fieldname("nr"); + j.start_obj(); + if (c.get<nr_s_>().v2x_band_params_nr_r16_present) { + j.write_str("v2x-BandParametersNR-r16", c.get<nr_s_>().v2x_band_params_nr_r16.to_string()); + } + j.end_obj(); + break; + default: + log_invalid_choice_id(type_, "v2x_band_params_eutra_nr_r16_c"); + } + j.end_obj(); +} +SRSASN_CODE v2x_band_params_eutra_nr_r16_c::pack(bit_ref& bref) const +{ + type_.pack(bref); + switch (type_) { + case types::eutra: + HANDLE_CODE(bref.pack(c.get<eutra_s_>().v2x_band_params1_r16_present, 1)); + HANDLE_CODE(bref.pack(c.get<eutra_s_>().v2x_band_params2_r16_present, 1)); + if (c.get<eutra_s_>().v2x_band_params1_r16_present) { + HANDLE_CODE(c.get<eutra_s_>().v2x_band_params1_r16.pack(bref)); + } + if (c.get<eutra_s_>().v2x_band_params2_r16_present) { + HANDLE_CODE(c.get<eutra_s_>().v2x_band_params2_r16.pack(bref)); + } + break; + case types::nr: + HANDLE_CODE(bref.pack(c.get<nr_s_>().v2x_band_params_nr_r16_present, 1)); + if (c.get<nr_s_>().v2x_band_params_nr_r16_present) { + HANDLE_CODE(c.get<nr_s_>().v2x_band_params_nr_r16.pack(bref)); + } + break; + default: + log_invalid_choice_id(type_, "v2x_band_params_eutra_nr_r16_c"); + return SRSASN_ERROR_ENCODE_FAIL; + } + return SRSASN_SUCCESS; +} +SRSASN_CODE v2x_band_params_eutra_nr_r16_c::unpack(cbit_ref& bref) +{ + types e; + e.unpack(bref); + set(e); + switch (type_) { + case types::eutra: + HANDLE_CODE(bref.unpack(c.get<eutra_s_>().v2x_band_params1_r16_present, 1)); + HANDLE_CODE(bref.unpack(c.get<eutra_s_>().v2x_band_params2_r16_present, 1)); + if (c.get<eutra_s_>().v2x_band_params1_r16_present) { + HANDLE_CODE(c.get<eutra_s_>().v2x_band_params1_r16.unpack(bref)); + } + if (c.get<eutra_s_>().v2x_band_params2_r16_present) { + HANDLE_CODE(c.get<eutra_s_>().v2x_band_params2_r16.unpack(bref)); + } + break; + case types::nr: + HANDLE_CODE(bref.unpack(c.get<nr_s_>().v2x_band_params_nr_r16_present, 1)); + if (c.get<nr_s_>().v2x_band_params_nr_r16_present) { + HANDLE_CODE(c.get<nr_s_>().v2x_band_params_nr_r16.unpack(bref)); + } + break; + default: + log_invalid_choice_id(type_, "v2x_band_params_eutra_nr_r16_c"); + return SRSASN_ERROR_DECODE_FAIL; + } + return SRSASN_SUCCESS; +} + +// SL-Parameters-v1610 ::= SEQUENCE +SRSASN_CODE sl_params_v1610_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(sl_param_nr_r16_present, 1)); + HANDLE_CODE(bref.pack(dummy_present, 1)); + + if (sl_param_nr_r16_present) { + HANDLE_CODE(sl_param_nr_r16.pack(bref)); + } + if (dummy_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, dummy, 1, 512)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE sl_params_v1610_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(sl_param_nr_r16_present, 1)); + HANDLE_CODE(bref.unpack(dummy_present, 1)); + + if (sl_param_nr_r16_present) { + HANDLE_CODE(sl_param_nr_r16.unpack(bref)); + } + if (dummy_present) { + HANDLE_CODE(unpack_dyn_seq_of(dummy, bref, 1, 512)); + } + + return SRSASN_SUCCESS; +} +void sl_params_v1610_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (sl_param_nr_r16_present) { + j.write_str("sl-ParameterNR-r16", sl_param_nr_r16.to_string()); + } + if (dummy_present) { + j.start_array("dummy"); + for (const auto& e1 : dummy) { + e1.to_json(j); + } + j.end_array(); + } + j.end_obj(); +} + +// V2X-BandParametersEUTRA-NR-v1630 ::= CHOICE +void v2x_band_params_eutra_nr_v1630_c::set(types::options e) +{ + type_ = e; +} +void v2x_band_params_eutra_nr_v1630_c::set_eutra() +{ + set(types::eutra); +} +v2x_band_params_eutra_nr_v1630_c::nr_s_& v2x_band_params_eutra_nr_v1630_c::set_nr() +{ + set(types::nr); + return c; +} +void v2x_band_params_eutra_nr_v1630_c::to_json(json_writer& j) const +{ + j.start_obj(); + switch (type_) { + case types::eutra: + break; + case types::nr: + j.write_fieldname("nr"); + j.start_obj(); + if (c.tx_sidelink_r16_present) { + j.write_str("tx-Sidelink-r16", "supported"); + } + if (c.rx_sidelink_r16_present) { + j.write_str("rx-Sidelink-r16", "supported"); + } + j.end_obj(); + break; + default: + log_invalid_choice_id(type_, "v2x_band_params_eutra_nr_v1630_c"); + } + j.end_obj(); +} +SRSASN_CODE v2x_band_params_eutra_nr_v1630_c::pack(bit_ref& bref) const +{ + type_.pack(bref); + switch (type_) { + case types::eutra: + break; + case types::nr: + HANDLE_CODE(bref.pack(c.tx_sidelink_r16_present, 1)); + HANDLE_CODE(bref.pack(c.rx_sidelink_r16_present, 1)); + break; + default: + log_invalid_choice_id(type_, "v2x_band_params_eutra_nr_v1630_c"); + return SRSASN_ERROR_ENCODE_FAIL; + } + return SRSASN_SUCCESS; +} +SRSASN_CODE v2x_band_params_eutra_nr_v1630_c::unpack(cbit_ref& bref) +{ + types e; + e.unpack(bref); + set(e); + switch (type_) { + case types::eutra: + break; + case types::nr: + HANDLE_CODE(bref.unpack(c.tx_sidelink_r16_present, 1)); + HANDLE_CODE(bref.unpack(c.rx_sidelink_r16_present, 1)); + break; + default: + log_invalid_choice_id(type_, "v2x_band_params_eutra_nr_v1630_c"); + return SRSASN_ERROR_DECODE_FAIL; + } + return SRSASN_SUCCESS; +} + +// V2X-BandCombinationParametersEUTRA-NR-v1630 ::= SEQUENCE +SRSASN_CODE v2x_band_combination_params_eutra_nr_v1630_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(pack_dyn_seq_of(bref, band_list_sidelink_eutra_nr_r16, 1, 64)); + HANDLE_CODE(pack_dyn_seq_of(bref, band_list_sidelink_eutra_nr_v1630, 1, 64)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE v2x_band_combination_params_eutra_nr_v1630_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(unpack_dyn_seq_of(band_list_sidelink_eutra_nr_r16, bref, 1, 64)); + HANDLE_CODE(unpack_dyn_seq_of(band_list_sidelink_eutra_nr_v1630, bref, 1, 64)); + + return SRSASN_SUCCESS; +} +void v2x_band_combination_params_eutra_nr_v1630_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.start_array("bandListSidelinkEUTRA-NR-r16"); + for (const auto& e1 : band_list_sidelink_eutra_nr_r16) { + e1.to_json(j); + } + j.end_array(); + j.start_array("bandListSidelinkEUTRA-NR-v1630"); + for (const auto& e1 : band_list_sidelink_eutra_nr_v1630) { + e1.to_json(j); + } + j.end_array(); + j.end_obj(); +} + +// SL-Parameters-v1630 ::= SEQUENCE +SRSASN_CODE sl_params_v1630_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(v2x_supported_band_combination_list_eutra_nr_r16_present, 1)); + + if (v2x_supported_band_combination_list_eutra_nr_r16_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, v2x_supported_band_combination_list_eutra_nr_r16, 1, 512)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE sl_params_v1630_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(v2x_supported_band_combination_list_eutra_nr_r16_present, 1)); + + if (v2x_supported_band_combination_list_eutra_nr_r16_present) { + HANDLE_CODE(unpack_dyn_seq_of(v2x_supported_band_combination_list_eutra_nr_r16, bref, 1, 512)); + } + + return SRSASN_SUCCESS; +} +void sl_params_v1630_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (v2x_supported_band_combination_list_eutra_nr_r16_present) { + j.start_array("v2x-SupportedBandCombinationListEUTRA-NR-r16"); + for (const auto& e1 : v2x_supported_band_combination_list_eutra_nr_r16) { + e1.to_json(j); + } + j.end_array(); + } + j.end_obj(); +} + +// V2X-BandParametersEUTRA-NR-v1710 ::= SEQUENCE +SRSASN_CODE v2x_band_params_eutra_nr_v1710_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(v2x_band_params_eutra_nr_v1710_present, 1)); + + if (v2x_band_params_eutra_nr_v1710_present) { + HANDLE_CODE(v2x_band_params_eutra_nr_v1710.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE v2x_band_params_eutra_nr_v1710_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(v2x_band_params_eutra_nr_v1710_present, 1)); + + if (v2x_band_params_eutra_nr_v1710_present) { + HANDLE_CODE(v2x_band_params_eutra_nr_v1710.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void v2x_band_params_eutra_nr_v1710_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (v2x_band_params_eutra_nr_v1710_present) { + j.write_str("v2x-BandParametersEUTRA-NR-v1710", v2x_band_params_eutra_nr_v1710.to_string()); + } + j.end_obj(); +} + +// SL-Parameters-v1710 ::= SEQUENCE +SRSASN_CODE sl_params_v1710_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(v2x_supported_band_combination_list_eutra_nr_v1710_present, 1)); + + if (v2x_supported_band_combination_list_eutra_nr_v1710_present) { + HANDLE_CODE(pack_dyn_seq_of( + bref, v2x_supported_band_combination_list_eutra_nr_v1710, 1, 512, SeqOfPacker<Packer>(1, 64, Packer()))); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE sl_params_v1710_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(v2x_supported_band_combination_list_eutra_nr_v1710_present, 1)); + + if (v2x_supported_band_combination_list_eutra_nr_v1710_present) { + HANDLE_CODE(unpack_dyn_seq_of( + v2x_supported_band_combination_list_eutra_nr_v1710, bref, 1, 512, SeqOfPacker<Packer>(1, 64, Packer()))); + } + + return SRSASN_SUCCESS; +} +void sl_params_v1710_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (v2x_supported_band_combination_list_eutra_nr_v1710_present) { + j.start_array("v2x-SupportedBandCombinationListEUTRA-NR-v1710"); + for (const auto& e1 : v2x_supported_band_combination_list_eutra_nr_v1710) { + j.start_array(); + for (const auto& e2 : e1) { + e2.to_json(j); + } + j.end_array(); + } + j.end_array(); + } + j.end_obj(); +} + +// PhyLayerParameters-v1730 ::= SEQUENCE +SRSASN_CODE phy_layer_params_v1730_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(csi_sf_set2_for_dormant_scell_r17_present, 1)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE phy_layer_params_v1730_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(csi_sf_set2_for_dormant_scell_r17_present, 1)); + + return SRSASN_SUCCESS; +} +void phy_layer_params_v1730_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (csi_sf_set2_for_dormant_scell_r17_present) { + j.write_str("csi-SubframeSet2ForDormantSCell-r17", "supported"); + } + j.end_obj(); +} + +// NTN-Parameters-v1720 ::= SEQUENCE +SRSASN_CODE ntn_params_v1720_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(ntn_segmented_precompensation_gaps_r17_present, 1)); + + if (ntn_segmented_precompensation_gaps_r17_present) { + HANDLE_CODE(ntn_segmented_precompensation_gaps_r17.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE ntn_params_v1720_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(ntn_segmented_precompensation_gaps_r17_present, 1)); + + if (ntn_segmented_precompensation_gaps_r17_present) { + HANDLE_CODE(ntn_segmented_precompensation_gaps_r17.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void ntn_params_v1720_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (ntn_segmented_precompensation_gaps_r17_present) { + j.write_str("ntn-SegmentedPrecompensationGaps-r17", ntn_segmented_precompensation_gaps_r17.to_string()); + } + j.end_obj(); +} + +const char* ntn_params_v1720_s::ntn_segmented_precompensation_gaps_r17_opts::to_string() const +{ + static const char* options[] = {"sym1", "sl1", "sf1"}; + return convert_enum_idx(options, 3, value, "ntn_params_v1720_s::ntn_segmented_precompensation_gaps_r17_e_"); +} + +// UE-EUTRA-Capability-v1730-IEs ::= SEQUENCE +SRSASN_CODE ue_eutra_cap_v1730_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + HANDLE_CODE(phy_layer_params_v1730.pack(bref)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE ue_eutra_cap_v1730_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + HANDLE_CODE(phy_layer_params_v1730.unpack(bref)); + + return SRSASN_SUCCESS; +} +void ue_eutra_cap_v1730_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_fieldname("phyLayerParameters-v1730"); + phy_layer_params_v1730.to_json(j); + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + j.start_obj(); + j.end_obj(); + } + j.end_obj(); +} + +// IRAT-ParametersNR-v1710 ::= SEQUENCE +SRSASN_CODE irat_params_nr_v1710_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(extended_band_n77_minus2_r17_present, 1)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE irat_params_nr_v1710_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(extended_band_n77_minus2_r17_present, 1)); + + return SRSASN_SUCCESS; +} +void irat_params_nr_v1710_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (extended_band_n77_minus2_r17_present) { + j.write_str("extendedBand-n77-2-r17", "supported"); + } + j.end_obj(); +} + +// NeighCellSI-AcquisitionParameters-v1710 ::= SEQUENCE +SRSASN_CODE neigh_cell_si_acquisition_params_v1710_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(gnb_id_len_report_nr_en_dc_r17_present, 1)); + HANDLE_CODE(bref.pack(gnb_id_len_report_nr_no_en_dc_r17_present, 1)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE neigh_cell_si_acquisition_params_v1710_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(gnb_id_len_report_nr_en_dc_r17_present, 1)); + HANDLE_CODE(bref.unpack(gnb_id_len_report_nr_no_en_dc_r17_present, 1)); + + return SRSASN_SUCCESS; +} +void neigh_cell_si_acquisition_params_v1710_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (gnb_id_len_report_nr_en_dc_r17_present) { + j.write_str("gNB-ID-Length-Reporting-NR-EN-DC-r17", "supported"); + } + if (gnb_id_len_report_nr_no_en_dc_r17_present) { + j.write_str("gNB-ID-Length-Reporting-NR-NoEN-DC-r17", "supported"); + } + j.end_obj(); +} + +// UE-EUTRA-Capability-v1720-IEs ::= SEQUENCE +SRSASN_CODE ue_eutra_cap_v1720_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + HANDLE_CODE(ntn_params_v1720.pack(bref)); + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE ue_eutra_cap_v1720_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + HANDLE_CODE(ntn_params_v1720.unpack(bref)); + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void ue_eutra_cap_v1720_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_fieldname("ntn-Parameters-v1720"); + ntn_params_v1720.to_json(j); + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + non_crit_ext.to_json(j); + } + j.end_obj(); +} + +// IRAT-ParametersNR-v1700 ::= SEQUENCE +SRSASN_CODE irat_params_nr_v1700_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(eutra_minus5_gc_ho_to_nr_tdd_fr2_minus2_r17_present, 1)); + HANDLE_CODE(bref.pack(eutra_epc_ho_to_nr_tdd_fr2_minus2_r17_present, 1)); + HANDLE_CODE(bref.pack(ce_eutra_minus5_gc_ho_to_nr_tdd_fr2_minus2_r17_present, 1)); + HANDLE_CODE(bref.pack(ims_voice_over_nr_fr2_minus2_r17_present, 1)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE irat_params_nr_v1700_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(eutra_minus5_gc_ho_to_nr_tdd_fr2_minus2_r17_present, 1)); + HANDLE_CODE(bref.unpack(eutra_epc_ho_to_nr_tdd_fr2_minus2_r17_present, 1)); + HANDLE_CODE(bref.unpack(ce_eutra_minus5_gc_ho_to_nr_tdd_fr2_minus2_r17_present, 1)); + HANDLE_CODE(bref.unpack(ims_voice_over_nr_fr2_minus2_r17_present, 1)); + + return SRSASN_SUCCESS; +} +void irat_params_nr_v1700_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (eutra_minus5_gc_ho_to_nr_tdd_fr2_minus2_r17_present) { + j.write_str("eutra-5GC-HO-ToNR-TDD-FR2-2-r17", "supported"); + } + if (eutra_epc_ho_to_nr_tdd_fr2_minus2_r17_present) { + j.write_str("eutra-EPC-HO-ToNR-TDD-FR2-2-r17", "supported"); + } + if (ce_eutra_minus5_gc_ho_to_nr_tdd_fr2_minus2_r17_present) { + j.write_str("ce-EUTRA-5GC-HO-ToNR-TDD-FR2-2-r17", "supported"); + } + if (ims_voice_over_nr_fr2_minus2_r17_present) { + j.write_str("ims-VoiceOverNR-FR2-2-r17", "supported"); + } + j.end_obj(); +} + +// NTN-Parameters-r17 ::= SEQUENCE +SRSASN_CODE ntn_params_r17_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(ntn_connect_epc_r17_present, 1)); + HANDLE_CODE(bref.pack(ntn_ta_report_r17_present, 1)); + HANDLE_CODE(bref.pack(ntn_pur_timer_delay_r17_present, 1)); + HANDLE_CODE(bref.pack(ntn_offset_timing_enh_r17_present, 1)); + HANDLE_CODE(bref.pack(ntn_scenario_support_r17_present, 1)); + + if (ntn_scenario_support_r17_present) { + HANDLE_CODE(ntn_scenario_support_r17.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE ntn_params_r17_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(ntn_connect_epc_r17_present, 1)); + HANDLE_CODE(bref.unpack(ntn_ta_report_r17_present, 1)); + HANDLE_CODE(bref.unpack(ntn_pur_timer_delay_r17_present, 1)); + HANDLE_CODE(bref.unpack(ntn_offset_timing_enh_r17_present, 1)); + HANDLE_CODE(bref.unpack(ntn_scenario_support_r17_present, 1)); + + if (ntn_scenario_support_r17_present) { + HANDLE_CODE(ntn_scenario_support_r17.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void ntn_params_r17_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (ntn_connect_epc_r17_present) { + j.write_str("ntn-Connectivity-EPC-r17", "supported"); + } + if (ntn_ta_report_r17_present) { + j.write_str("ntn-TA-Report-r17", "supported"); + } + if (ntn_pur_timer_delay_r17_present) { + j.write_str("ntn-PUR-TimerDelay-r17", "supported"); + } + if (ntn_offset_timing_enh_r17_present) { + j.write_str("ntn-OffsetTimingEnh-r17", "supported"); + } + if (ntn_scenario_support_r17_present) { + j.write_str("ntn-ScenarioSupport-r17", ntn_scenario_support_r17.to_string()); + } + j.end_obj(); +} + +const char* ntn_params_r17_s::ntn_scenario_support_r17_opts::to_string() const +{ + static const char* options[] = {"ngso", "gso"}; + return convert_enum_idx(options, 2, value, "ntn_params_r17_s::ntn_scenario_support_r17_e_"); +} + +// PhyLayerParameters-v1700 ::= SEQUENCE +SRSASN_CODE phy_layer_params_v1700_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(ce_cap_v1700_present, 1)); + + if (ce_cap_v1700_present) { + HANDLE_CODE(bref.pack(ce_cap_v1700.ce_pdsch_minus14_harq_processes_r17_present, 1)); + HANDLE_CODE(bref.pack(ce_cap_v1700.ce_pdsch_minus14_harq_processes_alt2_r17_present, 1)); + HANDLE_CODE(bref.pack(ce_cap_v1700.ce_pdsch_max_tbs_r17_present, 1)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE phy_layer_params_v1700_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(ce_cap_v1700_present, 1)); + + if (ce_cap_v1700_present) { + HANDLE_CODE(bref.unpack(ce_cap_v1700.ce_pdsch_minus14_harq_processes_r17_present, 1)); + HANDLE_CODE(bref.unpack(ce_cap_v1700.ce_pdsch_minus14_harq_processes_alt2_r17_present, 1)); + HANDLE_CODE(bref.unpack(ce_cap_v1700.ce_pdsch_max_tbs_r17_present, 1)); + } + + return SRSASN_SUCCESS; +} +void phy_layer_params_v1700_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (ce_cap_v1700_present) { + j.write_fieldname("ce-Capabilities-v1700"); + j.start_obj(); + if (ce_cap_v1700.ce_pdsch_minus14_harq_processes_r17_present) { + j.write_str("ce-PDSCH-14HARQProcesses-r17", "supported"); + } + if (ce_cap_v1700.ce_pdsch_minus14_harq_processes_alt2_r17_present) { + j.write_str("ce-PDSCH-14HARQProcesses-Alt2-r17", "supported"); + } + if (ce_cap_v1700.ce_pdsch_max_tbs_r17_present) { + j.write_str("ce-PDSCH-MaxTBS-r17", "supported"); + } + j.end_obj(); + } + j.end_obj(); +} + +// UE-BasedNetwPerfMeasParameters-v1700 ::= SEQUENCE +SRSASN_CODE ue_based_netw_perf_meas_params_v1700_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(logged_meas_idle_event_l1_r17_present, 1)); + HANDLE_CODE(bref.pack(logged_meas_idle_event_out_of_coverage_r17_present, 1)); + HANDLE_CODE(bref.pack(logged_meas_uncom_bar_pre_r17_present, 1)); + HANDLE_CODE(bref.pack(imm_meas_uncom_bar_pre_r17_present, 1)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE ue_based_netw_perf_meas_params_v1700_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(logged_meas_idle_event_l1_r17_present, 1)); + HANDLE_CODE(bref.unpack(logged_meas_idle_event_out_of_coverage_r17_present, 1)); + HANDLE_CODE(bref.unpack(logged_meas_uncom_bar_pre_r17_present, 1)); + HANDLE_CODE(bref.unpack(imm_meas_uncom_bar_pre_r17_present, 1)); + + return SRSASN_SUCCESS; +} +void ue_based_netw_perf_meas_params_v1700_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (logged_meas_idle_event_l1_r17_present) { + j.write_str("loggedMeasIdleEventL1-r17", "supported"); + } + if (logged_meas_idle_event_out_of_coverage_r17_present) { + j.write_str("loggedMeasIdleEventOutOfCoverage-r17", "supported"); + } + if (logged_meas_uncom_bar_pre_r17_present) { + j.write_str("loggedMeasUncomBarPre-r17", "supported"); + } + if (imm_meas_uncom_bar_pre_r17_present) { + j.write_str("immMeasUncomBarPre-r17", "supported"); + } + j.end_obj(); +} + +// UE-EUTRA-Capability-v1710-IEs ::= SEQUENCE +SRSASN_CODE ue_eutra_cap_v1710_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(neigh_cell_si_acquisition_params_v1710_present, 1)); + HANDLE_CODE(bref.pack(sl_params_v1710_present, 1)); + HANDLE_CODE(bref.pack(sidelink_requested_r17_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + HANDLE_CODE(irat_params_nr_v1710.pack(bref)); + if (neigh_cell_si_acquisition_params_v1710_present) { + HANDLE_CODE(neigh_cell_si_acquisition_params_v1710.pack(bref)); + } + if (sl_params_v1710_present) { + HANDLE_CODE(sl_params_v1710.pack(bref)); + } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE ue_eutra_cap_v1710_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(neigh_cell_si_acquisition_params_v1710_present, 1)); + HANDLE_CODE(bref.unpack(sl_params_v1710_present, 1)); + HANDLE_CODE(bref.unpack(sidelink_requested_r17_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + HANDLE_CODE(irat_params_nr_v1710.unpack(bref)); + if (neigh_cell_si_acquisition_params_v1710_present) { + HANDLE_CODE(neigh_cell_si_acquisition_params_v1710.unpack(bref)); + } + if (sl_params_v1710_present) { + HANDLE_CODE(sl_params_v1710.unpack(bref)); + } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void ue_eutra_cap_v1710_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_fieldname("irat-ParametersNR-v1710"); + irat_params_nr_v1710.to_json(j); + if (neigh_cell_si_acquisition_params_v1710_present) { + j.write_fieldname("neighCellSI-AcquisitionParameters-v1710"); + neigh_cell_si_acquisition_params_v1710.to_json(j); + } + if (sl_params_v1710_present) { + j.write_fieldname("sl-Parameters-v1710"); + sl_params_v1710.to_json(j); + } + if (sidelink_requested_r17_present) { + j.write_str("sidelinkRequested-r17", "true"); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + non_crit_ext.to_json(j); + } + j.end_obj(); +} + +// Other-Parameters-v1690 ::= SEQUENCE +SRSASN_CODE other_params_v1690_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(ul_rrc_segmentation_r16_present, 1)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE other_params_v1690_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(ul_rrc_segmentation_r16_present, 1)); + + return SRSASN_SUCCESS; +} +void other_params_v1690_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (ul_rrc_segmentation_r16_present) { + j.write_str("ul-RRC-Segmentation-r16", "supported"); + } + j.end_obj(); +} + +// UE-EUTRA-Capability-v1700-IEs ::= SEQUENCE +SRSASN_CODE ue_eutra_cap_v1700_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(meas_params_v1700_present, 1)); + HANDLE_CODE(bref.pack(ue_based_netw_perf_meas_params_v1700_present, 1)); + HANDLE_CODE(bref.pack(ntn_params_r17_present, 1)); + HANDLE_CODE(bref.pack(irat_params_nr_v1700_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + if (meas_params_v1700_present) { + HANDLE_CODE(meas_params_v1700.pack(bref)); + } + if (ue_based_netw_perf_meas_params_v1700_present) { + HANDLE_CODE(ue_based_netw_perf_meas_params_v1700.pack(bref)); + } + HANDLE_CODE(phy_layer_params_v1700.pack(bref)); + if (ntn_params_r17_present) { + HANDLE_CODE(ntn_params_r17.pack(bref)); + } + if (irat_params_nr_v1700_present) { + HANDLE_CODE(irat_params_nr_v1700.pack(bref)); + } + HANDLE_CODE(mbms_params_v1700.pack(bref)); + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE ue_eutra_cap_v1700_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(meas_params_v1700_present, 1)); + HANDLE_CODE(bref.unpack(ue_based_netw_perf_meas_params_v1700_present, 1)); + HANDLE_CODE(bref.unpack(ntn_params_r17_present, 1)); + HANDLE_CODE(bref.unpack(irat_params_nr_v1700_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + if (meas_params_v1700_present) { + HANDLE_CODE(meas_params_v1700.unpack(bref)); + } + if (ue_based_netw_perf_meas_params_v1700_present) { + HANDLE_CODE(ue_based_netw_perf_meas_params_v1700.unpack(bref)); + } + HANDLE_CODE(phy_layer_params_v1700.unpack(bref)); + if (ntn_params_r17_present) { + HANDLE_CODE(ntn_params_r17.unpack(bref)); + } + if (irat_params_nr_v1700_present) { + HANDLE_CODE(irat_params_nr_v1700.unpack(bref)); + } + HANDLE_CODE(mbms_params_v1700.unpack(bref)); + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void ue_eutra_cap_v1700_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (meas_params_v1700_present) { + j.write_fieldname("measParameters-v1700"); + meas_params_v1700.to_json(j); + } + if (ue_based_netw_perf_meas_params_v1700_present) { + j.write_fieldname("ue-BasedNetwPerfMeasParameters-v1700"); + ue_based_netw_perf_meas_params_v1700.to_json(j); + } + j.write_fieldname("phyLayerParameters-v1700"); + phy_layer_params_v1700.to_json(j); + if (ntn_params_r17_present) { + j.write_fieldname("ntn-Parameters-r17"); + ntn_params_r17.to_json(j); + } + if (irat_params_nr_v1700_present) { + j.write_fieldname("irat-ParametersNR-v1700"); + irat_params_nr_v1700.to_json(j); + } + j.write_fieldname("mbms-Parameters-v1700"); + mbms_params_v1700.to_json(j); + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + non_crit_ext.to_json(j); + } + j.end_obj(); +} + +// IRAT-ParametersNR-v1660 ::= SEQUENCE +SRSASN_CODE irat_params_nr_v1660_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(extended_band_n77_r16_present, 1)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE irat_params_nr_v1660_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(extended_band_n77_r16_present, 1)); + + return SRSASN_SUCCESS; +} +void irat_params_nr_v1660_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (extended_band_n77_r16_present) { + j.write_str("extendedBand-n77-r16", "supported"); + } + j.end_obj(); +} + +// UE-EUTRA-Capability-v1690-IEs ::= SEQUENCE +SRSASN_CODE ue_eutra_cap_v1690_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + HANDLE_CODE(other_params_v1690.pack(bref)); + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE ue_eutra_cap_v1690_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + HANDLE_CODE(other_params_v1690.unpack(bref)); + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void ue_eutra_cap_v1690_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_fieldname("other-Parameters-v1690"); + other_params_v1690.to_json(j); + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + non_crit_ext.to_json(j); + } + j.end_obj(); +} + +// MeasParameters-v1630 ::= SEQUENCE +SRSASN_CODE meas_params_v1630_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(nr_idle_inactive_beam_meas_fr1_r16_present, 1)); + HANDLE_CODE(bref.pack(nr_idle_inactive_beam_meas_fr2_r16_present, 1)); + HANDLE_CODE(bref.pack(ce_meas_rss_ded_same_rbs_r16_present, 1)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE meas_params_v1630_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(nr_idle_inactive_beam_meas_fr1_r16_present, 1)); + HANDLE_CODE(bref.unpack(nr_idle_inactive_beam_meas_fr2_r16_present, 1)); + HANDLE_CODE(bref.unpack(ce_meas_rss_ded_same_rbs_r16_present, 1)); + + return SRSASN_SUCCESS; +} +void meas_params_v1630_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (nr_idle_inactive_beam_meas_fr1_r16_present) { + j.write_str("nr-IdleInactiveBeamMeasFR1-r16", "supported"); + } + if (nr_idle_inactive_beam_meas_fr2_r16_present) { + j.write_str("nr-IdleInactiveBeamMeasFR2-r16", "supported"); + } + if (ce_meas_rss_ded_same_rbs_r16_present) { + j.write_str("ce-MeasRSS-DedicatedSameRBs-r16", "supported"); + } + j.end_obj(); +} + +// Other-Parameters-v1650 ::= SEQUENCE +SRSASN_CODE other_params_v1650_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(mps_prio_ind_r16_present, 1)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE other_params_v1650_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(mps_prio_ind_r16_present, 1)); + + return SRSASN_SUCCESS; +} +void other_params_v1650_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (mps_prio_ind_r16_present) { + j.write_str("mpsPriorityIndication-r16", "supported"); + } + j.end_obj(); +} + +// UE-EUTRA-Capability-v1660-IEs ::= SEQUENCE +SRSASN_CODE ue_eutra_cap_v1660_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + HANDLE_CODE(irat_params_nr_v1660.pack(bref)); + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE ue_eutra_cap_v1660_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + HANDLE_CODE(irat_params_nr_v1660.unpack(bref)); + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void ue_eutra_cap_v1660_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_fieldname("irat-ParametersNR-v1660"); + irat_params_nr_v1660.to_json(j); + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + non_crit_ext.to_json(j); + } + j.end_obj(); +} + +// EUTRA-5GC-Parameters-v1610 ::= SEQUENCE +SRSASN_CODE eutra_minus5_gc_params_v1610_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(ce_inactive_state_r16_present, 1)); + HANDLE_CODE(bref.pack(ce_eutra_minus5_gc_r16_present, 1)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE eutra_minus5_gc_params_v1610_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(ce_inactive_state_r16_present, 1)); + HANDLE_CODE(bref.unpack(ce_eutra_minus5_gc_r16_present, 1)); + + return SRSASN_SUCCESS; +} +void eutra_minus5_gc_params_v1610_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (ce_inactive_state_r16_present) { + j.write_str("ce-InactiveState-r16", "supported"); + } + if (ce_eutra_minus5_gc_r16_present) { + j.write_str("ce-EUTRA-5GC-r16", "supported"); + } + j.end_obj(); +} + +// IRAT-ParametersNR-v1610 ::= SEQUENCE +SRSASN_CODE irat_params_nr_v1610_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(nr_ho_to_en_dc_r16_present, 1)); + HANDLE_CODE(bref.pack(ce_eutra_minus5_gc_ho_to_nr_fdd_fr1_r16_present, 1)); + HANDLE_CODE(bref.pack(ce_eutra_minus5_gc_ho_to_nr_tdd_fr1_r16_present, 1)); + HANDLE_CODE(bref.pack(ce_eutra_minus5_gc_ho_to_nr_fdd_fr2_r16_present, 1)); + HANDLE_CODE(bref.pack(ce_eutra_minus5_gc_ho_to_nr_tdd_fr2_r16_present, 1)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE irat_params_nr_v1610_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(nr_ho_to_en_dc_r16_present, 1)); + HANDLE_CODE(bref.unpack(ce_eutra_minus5_gc_ho_to_nr_fdd_fr1_r16_present, 1)); + HANDLE_CODE(bref.unpack(ce_eutra_minus5_gc_ho_to_nr_tdd_fr1_r16_present, 1)); + HANDLE_CODE(bref.unpack(ce_eutra_minus5_gc_ho_to_nr_fdd_fr2_r16_present, 1)); + HANDLE_CODE(bref.unpack(ce_eutra_minus5_gc_ho_to_nr_tdd_fr2_r16_present, 1)); + + return SRSASN_SUCCESS; +} +void irat_params_nr_v1610_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (nr_ho_to_en_dc_r16_present) { + j.write_str("nr-HO-ToEN-DC-r16", "supported"); + } + if (ce_eutra_minus5_gc_ho_to_nr_fdd_fr1_r16_present) { + j.write_str("ce-EUTRA-5GC-HO-ToNR-FDD-FR1-r16", "supported"); + } + if (ce_eutra_minus5_gc_ho_to_nr_tdd_fr1_r16_present) { + j.write_str("ce-EUTRA-5GC-HO-ToNR-TDD-FR1-r16", "supported"); + } + if (ce_eutra_minus5_gc_ho_to_nr_fdd_fr2_r16_present) { + j.write_str("ce-EUTRA-5GC-HO-ToNR-FDD-FR2-r16", "supported"); + } + if (ce_eutra_minus5_gc_ho_to_nr_tdd_fr2_r16_present) { + j.write_str("ce-EUTRA-5GC-HO-ToNR-TDD-FR2-r16", "supported"); + } + j.end_obj(); +} + +// MAC-Parameters-v1630 ::= SEQUENCE +SRSASN_CODE mac_params_v1630_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(direct_scg_scell_activation_nedc_r16_present, 1)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE mac_params_v1630_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(direct_scg_scell_activation_nedc_r16_present, 1)); + + return SRSASN_SUCCESS; +} +void mac_params_v1630_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (direct_scg_scell_activation_nedc_r16_present) { + j.write_str("directSCG-SCellActivationNEDC-r16", "supported"); + } + j.end_obj(); +} + +// MobilityParameters-v1610 ::= SEQUENCE +SRSASN_CODE mob_params_v1610_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(cho_r16_present, 1)); + HANDLE_CODE(bref.pack(cho_fdd_tdd_r16_present, 1)); + HANDLE_CODE(bref.pack(cho_fail_r16_present, 1)); + HANDLE_CODE(bref.pack(cho_two_trigger_events_r16_present, 1)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE mob_params_v1610_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(cho_r16_present, 1)); + HANDLE_CODE(bref.unpack(cho_fdd_tdd_r16_present, 1)); + HANDLE_CODE(bref.unpack(cho_fail_r16_present, 1)); + HANDLE_CODE(bref.unpack(cho_two_trigger_events_r16_present, 1)); + + return SRSASN_SUCCESS; +} +void mob_params_v1610_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (cho_r16_present) { + j.write_str("cho-r16", "supported"); + } + if (cho_fdd_tdd_r16_present) { + j.write_str("cho-FDD-TDD-r16", "supported"); + } + if (cho_fail_r16_present) { + j.write_str("cho-Failure-r16", "supported"); + } + if (cho_two_trigger_events_r16_present) { + j.write_str("cho-TwoTriggerEvents-r16", "supported"); + } + j.end_obj(); +} + +// NeighCellSI-AcquisitionParameters-v1610 ::= SEQUENCE +SRSASN_CODE neigh_cell_si_acquisition_params_v1610_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(eutra_si_acquisition_for_ho_endc_r16_present, 1)); + HANDLE_CODE(bref.pack(nr_autonomous_gaps_endc_fr1_r16_present, 1)); + HANDLE_CODE(bref.pack(nr_autonomous_gaps_endc_fr2_r16_present, 1)); + HANDLE_CODE(bref.pack(nr_autonomous_gaps_fr1_r16_present, 1)); + HANDLE_CODE(bref.pack(nr_autonomous_gaps_fr2_r16_present, 1)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE neigh_cell_si_acquisition_params_v1610_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(eutra_si_acquisition_for_ho_endc_r16_present, 1)); + HANDLE_CODE(bref.unpack(nr_autonomous_gaps_endc_fr1_r16_present, 1)); + HANDLE_CODE(bref.unpack(nr_autonomous_gaps_endc_fr2_r16_present, 1)); + HANDLE_CODE(bref.unpack(nr_autonomous_gaps_fr1_r16_present, 1)); + HANDLE_CODE(bref.unpack(nr_autonomous_gaps_fr2_r16_present, 1)); + + return SRSASN_SUCCESS; +} +void neigh_cell_si_acquisition_params_v1610_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (eutra_si_acquisition_for_ho_endc_r16_present) { + j.write_str("eutra-SI-AcquisitionForHO-ENDC-r16", "supported"); + } + if (nr_autonomous_gaps_endc_fr1_r16_present) { + j.write_str("nr-AutonomousGaps-ENDC-FR1-r16", "supported"); + } + if (nr_autonomous_gaps_endc_fr2_r16_present) { + j.write_str("nr-AutonomousGaps-ENDC-FR2-r16", "supported"); + } + if (nr_autonomous_gaps_fr1_r16_present) { + j.write_str("nr-AutonomousGaps-FR1-r16", "supported"); + } + if (nr_autonomous_gaps_fr2_r16_present) { + j.write_str("nr-AutonomousGaps-FR2-r16", "supported"); + } + j.end_obj(); +} + +// PUR-Parameters-r16 ::= SEQUENCE +SRSASN_CODE pur_params_r16_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(pur_cp_minus5_gc_ce_mode_a_r16_present, 1)); + HANDLE_CODE(bref.pack(pur_cp_minus5_gc_ce_mode_b_r16_present, 1)); + HANDLE_CODE(bref.pack(pur_up_minus5_gc_ce_mode_a_r16_present, 1)); + HANDLE_CODE(bref.pack(pur_up_minus5_gc_ce_mode_b_r16_present, 1)); + HANDLE_CODE(bref.pack(pur_cp_epc_ce_mode_a_r16_present, 1)); + HANDLE_CODE(bref.pack(pur_cp_epc_ce_mode_b_r16_present, 1)); + HANDLE_CODE(bref.pack(pur_up_epc_ce_mode_a_r16_present, 1)); + HANDLE_CODE(bref.pack(pur_up_epc_ce_mode_b_r16_present, 1)); + HANDLE_CODE(bref.pack(pur_cp_l1_ack_r16_present, 1)); + HANDLE_CODE(bref.pack(pur_freq_hop_r16_present, 1)); + HANDLE_CODE(bref.pack(pur_pusch_nb_max_tbs_r16_present, 1)); + HANDLE_CODE(bref.pack(pur_rsrp_validation_r16_present, 1)); + HANDLE_CODE(bref.pack(pur_sub_prb_ce_mode_a_r16_present, 1)); + HANDLE_CODE(bref.pack(pur_sub_prb_ce_mode_b_r16_present, 1)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE pur_params_r16_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(pur_cp_minus5_gc_ce_mode_a_r16_present, 1)); + HANDLE_CODE(bref.unpack(pur_cp_minus5_gc_ce_mode_b_r16_present, 1)); + HANDLE_CODE(bref.unpack(pur_up_minus5_gc_ce_mode_a_r16_present, 1)); + HANDLE_CODE(bref.unpack(pur_up_minus5_gc_ce_mode_b_r16_present, 1)); + HANDLE_CODE(bref.unpack(pur_cp_epc_ce_mode_a_r16_present, 1)); + HANDLE_CODE(bref.unpack(pur_cp_epc_ce_mode_b_r16_present, 1)); + HANDLE_CODE(bref.unpack(pur_up_epc_ce_mode_a_r16_present, 1)); + HANDLE_CODE(bref.unpack(pur_up_epc_ce_mode_b_r16_present, 1)); + HANDLE_CODE(bref.unpack(pur_cp_l1_ack_r16_present, 1)); + HANDLE_CODE(bref.unpack(pur_freq_hop_r16_present, 1)); + HANDLE_CODE(bref.unpack(pur_pusch_nb_max_tbs_r16_present, 1)); + HANDLE_CODE(bref.unpack(pur_rsrp_validation_r16_present, 1)); + HANDLE_CODE(bref.unpack(pur_sub_prb_ce_mode_a_r16_present, 1)); + HANDLE_CODE(bref.unpack(pur_sub_prb_ce_mode_b_r16_present, 1)); + + return SRSASN_SUCCESS; +} +void pur_params_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (pur_cp_minus5_gc_ce_mode_a_r16_present) { + j.write_str("pur-CP-5GC-CE-ModeA-r16", "supported"); + } + if (pur_cp_minus5_gc_ce_mode_b_r16_present) { + j.write_str("pur-CP-5GC-CE-ModeB-r16", "supported"); + } + if (pur_up_minus5_gc_ce_mode_a_r16_present) { + j.write_str("pur-UP-5GC-CE-ModeA-r16", "supported"); + } + if (pur_up_minus5_gc_ce_mode_b_r16_present) { + j.write_str("pur-UP-5GC-CE-ModeB-r16", "supported"); + } + if (pur_cp_epc_ce_mode_a_r16_present) { + j.write_str("pur-CP-EPC-CE-ModeA-r16", "supported"); + } + if (pur_cp_epc_ce_mode_b_r16_present) { + j.write_str("pur-CP-EPC-CE-ModeB-r16", "supported"); + } + if (pur_up_epc_ce_mode_a_r16_present) { + j.write_str("pur-UP-EPC-CE-ModeA-r16", "supported"); + } + if (pur_up_epc_ce_mode_b_r16_present) { + j.write_str("pur-UP-EPC-CE-ModeB-r16", "supported"); + } + if (pur_cp_l1_ack_r16_present) { + j.write_str("pur-CP-L1Ack-r16", "supported"); + } + if (pur_freq_hop_r16_present) { + j.write_str("pur-FrequencyHopping-r16", "supported"); + } + if (pur_pusch_nb_max_tbs_r16_present) { + j.write_str("pur-PUSCH-NB-MaxTBS-r16", "supported"); + } + if (pur_rsrp_validation_r16_present) { + j.write_str("pur-RSRP-Validation-r16", "supported"); + } + if (pur_sub_prb_ce_mode_a_r16_present) { + j.write_str("pur-SubPRB-CE-ModeA-r16", "supported"); + } + if (pur_sub_prb_ce_mode_b_r16_present) { + j.write_str("pur-SubPRB-CE-ModeB-r16", "supported"); + } + j.end_obj(); +} + +// UE-EUTRA-Capability-v1650-IEs ::= SEQUENCE +SRSASN_CODE ue_eutra_cap_v1650_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(other_params_v1650_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + if (other_params_v1650_present) { + HANDLE_CODE(other_params_v1650.pack(bref)); + } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE ue_eutra_cap_v1650_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(other_params_v1650_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + if (other_params_v1650_present) { + HANDLE_CODE(other_params_v1650.unpack(bref)); + } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void ue_eutra_cap_v1650_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (other_params_v1650_present) { + j.write_fieldname("otherParameters-v1650"); + other_params_v1650.to_json(j); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + non_crit_ext.to_json(j); + } + j.end_obj(); +} + +// UE-EUTRA-CapabilityAddXDD-Mode-v1630 ::= SEQUENCE +SRSASN_CODE ue_eutra_cap_add_xdd_mode_v1630_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(meas_params_v1630.pack(bref)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE ue_eutra_cap_add_xdd_mode_v1630_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(meas_params_v1630.unpack(bref)); + + return SRSASN_SUCCESS; +} +void ue_eutra_cap_add_xdd_mode_v1630_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_fieldname("measParameters-v1630"); + meas_params_v1630.to_json(j); + j.end_obj(); +} + +// HighSpeedEnhParameters-v1610 ::= SEQUENCE +SRSASN_CODE high_speed_enh_params_v1610_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(meas_enhance_scell_r16_present, 1)); + HANDLE_CODE(bref.pack(meas_enhance2_r16_present, 1)); + HANDLE_CODE(bref.pack(demod_enhance2_r16_present, 1)); + HANDLE_CODE(bref.pack(inter_rat_enhancement_nr_r16_present, 1)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE high_speed_enh_params_v1610_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(meas_enhance_scell_r16_present, 1)); + HANDLE_CODE(bref.unpack(meas_enhance2_r16_present, 1)); + HANDLE_CODE(bref.unpack(demod_enhance2_r16_present, 1)); + HANDLE_CODE(bref.unpack(inter_rat_enhancement_nr_r16_present, 1)); + + return SRSASN_SUCCESS; +} +void high_speed_enh_params_v1610_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (meas_enhance_scell_r16_present) { + j.write_str("measurementEnhancementsSCell-r16", "supported"); + } + if (meas_enhance2_r16_present) { + j.write_str("measurementEnhancements2-r16", "supported"); + } + if (demod_enhance2_r16_present) { + j.write_str("demodulationEnhancements2-r16", "supported"); + } + if (inter_rat_enhancement_nr_r16_present) { + j.write_str("interRAT-enhancementNR-r16", "supported"); + } + j.end_obj(); +} + +// MAC-Parameters-v1610 ::= SEQUENCE +SRSASN_CODE mac_params_v1610_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(direct_mcg_scell_activation_resume_r16_present, 1)); + HANDLE_CODE(bref.pack(direct_scg_scell_activation_resume_r16_present, 1)); + HANDLE_CODE(bref.pack(early_data_up_minus5_gc_r16_present, 1)); + HANDLE_CODE(bref.pack(rai_support_enh_r16_present, 1)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE mac_params_v1610_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(direct_mcg_scell_activation_resume_r16_present, 1)); + HANDLE_CODE(bref.unpack(direct_scg_scell_activation_resume_r16_present, 1)); + HANDLE_CODE(bref.unpack(early_data_up_minus5_gc_r16_present, 1)); + HANDLE_CODE(bref.unpack(rai_support_enh_r16_present, 1)); + + return SRSASN_SUCCESS; +} +void mac_params_v1610_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (direct_mcg_scell_activation_resume_r16_present) { + j.write_str("directMCG-SCellActivationResume-r16", "supported"); + } + if (direct_scg_scell_activation_resume_r16_present) { + j.write_str("directSCG-SCellActivationResume-r16", "supported"); + } + if (early_data_up_minus5_gc_r16_present) { + j.write_str("earlyData-UP-5GC-r16", "supported"); + } + if (rai_support_enh_r16_present) { + j.write_str("rai-SupportEnh-r16", "supported"); + } + j.end_obj(); +} + +// MMTEL-Parameters-v1610 ::= SEQUENCE +SRSASN_CODE mmtel_params_v1610_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(recommended_bit_rate_multiplier_r16_present, 1)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE mmtel_params_v1610_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(recommended_bit_rate_multiplier_r16_present, 1)); + + return SRSASN_SUCCESS; +} +void mmtel_params_v1610_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (recommended_bit_rate_multiplier_r16_present) { + j.write_str("recommendedBitRateMultiplier-r16", "supported"); + } + j.end_obj(); +} + // NeighCellSI-AcquisitionParameters-v15a0 ::= SEQUENCE SRSASN_CODE neigh_cell_si_acquisition_params_v15a0_s::pack(bit_ref& bref) const { @@ -8423,6 +11140,129 @@ void neigh_cell_si_acquisition_params_v15a0_s::to_json(json_writer& j) const j.end_obj(); } +// Other-Parameters-v1610 ::= SEQUENCE +SRSASN_CODE other_params_v1610_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(resume_with_stored_mcg_scells_r16_present, 1)); + HANDLE_CODE(bref.pack(resume_with_mcg_scell_cfg_r16_present, 1)); + HANDLE_CODE(bref.pack(resume_with_stored_scg_r16_present, 1)); + HANDLE_CODE(bref.pack(resume_with_scg_cfg_r16_present, 1)); + HANDLE_CODE(bref.pack(mcg_rlf_recovery_via_scg_r16_present, 1)); + HANDLE_CODE(bref.pack(overheat_ind_for_scg_r16_present, 1)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE other_params_v1610_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(resume_with_stored_mcg_scells_r16_present, 1)); + HANDLE_CODE(bref.unpack(resume_with_mcg_scell_cfg_r16_present, 1)); + HANDLE_CODE(bref.unpack(resume_with_stored_scg_r16_present, 1)); + HANDLE_CODE(bref.unpack(resume_with_scg_cfg_r16_present, 1)); + HANDLE_CODE(bref.unpack(mcg_rlf_recovery_via_scg_r16_present, 1)); + HANDLE_CODE(bref.unpack(overheat_ind_for_scg_r16_present, 1)); + + return SRSASN_SUCCESS; +} +void other_params_v1610_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (resume_with_stored_mcg_scells_r16_present) { + j.write_str("resumeWithStoredMCG-SCells-r16", "supported"); + } + if (resume_with_mcg_scell_cfg_r16_present) { + j.write_str("resumeWithMCG-SCellConfig-r16", "supported"); + } + if (resume_with_stored_scg_r16_present) { + j.write_str("resumeWithStoredSCG-r16", "supported"); + } + if (resume_with_scg_cfg_r16_present) { + j.write_str("resumeWithSCG-Config-r16", "supported"); + } + if (mcg_rlf_recovery_via_scg_r16_present) { + j.write_str("mcgRLF-RecoveryViaSCG-r16", "supported"); + } + if (overheat_ind_for_scg_r16_present) { + j.write_str("overheatingIndForSCG-r16", "supported"); + } + j.end_obj(); +} + +// PDCP-Parameters-v1610 ::= SEQUENCE +SRSASN_CODE pdcp_params_v1610_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(pdcp_version_change_without_ho_r16_present, 1)); + HANDLE_CODE(bref.pack(ehc_r16_present, 1)); + HANDLE_CODE(bref.pack(continue_ehc_context_r16_present, 1)); + HANDLE_CODE(bref.pack(max_num_ehc_contexts_r16_present, 1)); + HANDLE_CODE(bref.pack(joint_ehc_rohc_cfg_r16_present, 1)); + + if (max_num_ehc_contexts_r16_present) { + HANDLE_CODE(max_num_ehc_contexts_r16.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE pdcp_params_v1610_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(pdcp_version_change_without_ho_r16_present, 1)); + HANDLE_CODE(bref.unpack(ehc_r16_present, 1)); + HANDLE_CODE(bref.unpack(continue_ehc_context_r16_present, 1)); + HANDLE_CODE(bref.unpack(max_num_ehc_contexts_r16_present, 1)); + HANDLE_CODE(bref.unpack(joint_ehc_rohc_cfg_r16_present, 1)); + + if (max_num_ehc_contexts_r16_present) { + HANDLE_CODE(max_num_ehc_contexts_r16.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void pdcp_params_v1610_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (pdcp_version_change_without_ho_r16_present) { + j.write_str("pdcp-VersionChangeWithoutHO-r16", "supported"); + } + if (ehc_r16_present) { + j.write_str("ehc-r16", "supported"); + } + if (continue_ehc_context_r16_present) { + j.write_str("continueEHC-Context-r16", "supported"); + } + if (max_num_ehc_contexts_r16_present) { + j.write_str("maxNumberEHC-Contexts-r16", max_num_ehc_contexts_r16.to_string()); + } + if (joint_ehc_rohc_cfg_r16_present) { + j.write_str("jointEHC-ROHC-Config-r16", "supported"); + } + j.end_obj(); +} + +const char* pdcp_params_v1610_s::max_num_ehc_contexts_r16_opts::to_string() const +{ + static const char* options[] = {"cs2", + "cs4", + "cs8", + "cs16", + "cs32", + "cs64", + "cs128", + "cs256", + "cs512", + "cs1024", + "cs2048", + "cs4096", + "cs8192", + "cs16384", + "cs32768", + "cs65536"}; + return convert_enum_idx(options, 16, value, "pdcp_params_v1610_s::max_num_ehc_contexts_r16_e_"); +} +uint32_t pdcp_params_v1610_s::max_num_ehc_contexts_r16_opts::to_number() const +{ + static const uint32_t options[] = {2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536}; + return map_enum_number(options, 16, value, "pdcp_params_v1610_s::max_num_ehc_contexts_r16_e_"); +} + // PhyLayerParameters-v1540 ::= SEQUENCE SRSASN_CODE phy_layer_params_v1540_s::pack(bit_ref& bref) const { @@ -8480,6 +11320,215 @@ void phy_layer_params_v1550_s::to_json(json_writer& j) const j.end_obj(); } +// UE-BasedNetwPerfMeasParameters-v1610 ::= SEQUENCE +SRSASN_CODE ue_based_netw_perf_meas_params_v1610_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(ul_pdcp_avg_delay_r16_present, 1)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE ue_based_netw_perf_meas_params_v1610_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(ul_pdcp_avg_delay_r16_present, 1)); + + return SRSASN_SUCCESS; +} +void ue_based_netw_perf_meas_params_v1610_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (ul_pdcp_avg_delay_r16_present) { + j.write_str("ul-PDCP-AvgDelay-r16", "supported"); + } + j.end_obj(); +} + +// UE-EUTRA-Capability-v1630-IEs ::= SEQUENCE +SRSASN_CODE ue_eutra_cap_v1630_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(rf_params_v1630_present, 1)); + HANDLE_CODE(bref.pack(sl_params_v1630_present, 1)); + HANDLE_CODE(bref.pack(early_security_reactivation_r16_present, 1)); + HANDLE_CODE(bref.pack(meas_params_v1630_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + if (rf_params_v1630_present) { + HANDLE_CODE(rf_params_v1630.pack(bref)); + } + if (sl_params_v1630_present) { + HANDLE_CODE(sl_params_v1630.pack(bref)); + } + HANDLE_CODE(mac_params_v1630.pack(bref)); + if (meas_params_v1630_present) { + HANDLE_CODE(meas_params_v1630.pack(bref)); + } + HANDLE_CODE(fdd_add_ue_eutra_cap_v1630.pack(bref)); + HANDLE_CODE(tdd_add_ue_eutra_cap_v1630.pack(bref)); + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE ue_eutra_cap_v1630_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(rf_params_v1630_present, 1)); + HANDLE_CODE(bref.unpack(sl_params_v1630_present, 1)); + HANDLE_CODE(bref.unpack(early_security_reactivation_r16_present, 1)); + HANDLE_CODE(bref.unpack(meas_params_v1630_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + if (rf_params_v1630_present) { + HANDLE_CODE(rf_params_v1630.unpack(bref)); + } + if (sl_params_v1630_present) { + HANDLE_CODE(sl_params_v1630.unpack(bref)); + } + HANDLE_CODE(mac_params_v1630.unpack(bref)); + if (meas_params_v1630_present) { + HANDLE_CODE(meas_params_v1630.unpack(bref)); + } + HANDLE_CODE(fdd_add_ue_eutra_cap_v1630.unpack(bref)); + HANDLE_CODE(tdd_add_ue_eutra_cap_v1630.unpack(bref)); + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void ue_eutra_cap_v1630_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (rf_params_v1630_present) { + j.write_fieldname("rf-Parameters-v1630"); + rf_params_v1630.to_json(j); + } + if (sl_params_v1630_present) { + j.write_fieldname("sl-Parameters-v1630"); + sl_params_v1630.to_json(j); + } + if (early_security_reactivation_r16_present) { + j.write_str("earlySecurityReactivation-r16", "supported"); + } + j.write_fieldname("mac-Parameters-v1630"); + mac_params_v1630.to_json(j); + if (meas_params_v1630_present) { + j.write_fieldname("measParameters-v1630"); + meas_params_v1630.to_json(j); + } + j.write_fieldname("fdd-Add-UE-EUTRA-Capabilities-v1630"); + fdd_add_ue_eutra_cap_v1630.to_json(j); + j.write_fieldname("tdd-Add-UE-EUTRA-Capabilities-v1630"); + tdd_add_ue_eutra_cap_v1630.to_json(j); + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + non_crit_ext.to_json(j); + } + j.end_obj(); +} + +// UE-EUTRA-CapabilityAddXDD-Mode-v1610 ::= SEQUENCE +SRSASN_CODE ue_eutra_cap_add_xdd_mode_v1610_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(phy_layer_params_v1610_present, 1)); + HANDLE_CODE(bref.pack(pur_params_r16_present, 1)); + HANDLE_CODE(bref.pack(meas_params_v1610_present, 1)); + HANDLE_CODE(bref.pack(eutra_minus5_gc_params_v1610_present, 1)); + HANDLE_CODE(bref.pack(irat_params_nr_v1610_present, 1)); + HANDLE_CODE(bref.pack(neigh_cell_si_acquisition_params_v1610_present, 1)); + HANDLE_CODE(bref.pack(mob_params_v1610_present, 1)); + + if (phy_layer_params_v1610_present) { + HANDLE_CODE(phy_layer_params_v1610.pack(bref)); + } + if (pur_params_r16_present) { + HANDLE_CODE(pur_params_r16.pack(bref)); + } + if (meas_params_v1610_present) { + HANDLE_CODE(meas_params_v1610.pack(bref)); + } + if (eutra_minus5_gc_params_v1610_present) { + HANDLE_CODE(eutra_minus5_gc_params_v1610.pack(bref)); + } + if (irat_params_nr_v1610_present) { + HANDLE_CODE(irat_params_nr_v1610.pack(bref)); + } + if (neigh_cell_si_acquisition_params_v1610_present) { + HANDLE_CODE(neigh_cell_si_acquisition_params_v1610.pack(bref)); + } + if (mob_params_v1610_present) { + HANDLE_CODE(mob_params_v1610.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE ue_eutra_cap_add_xdd_mode_v1610_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(phy_layer_params_v1610_present, 1)); + HANDLE_CODE(bref.unpack(pur_params_r16_present, 1)); + HANDLE_CODE(bref.unpack(meas_params_v1610_present, 1)); + HANDLE_CODE(bref.unpack(eutra_minus5_gc_params_v1610_present, 1)); + HANDLE_CODE(bref.unpack(irat_params_nr_v1610_present, 1)); + HANDLE_CODE(bref.unpack(neigh_cell_si_acquisition_params_v1610_present, 1)); + HANDLE_CODE(bref.unpack(mob_params_v1610_present, 1)); + + if (phy_layer_params_v1610_present) { + HANDLE_CODE(phy_layer_params_v1610.unpack(bref)); + } + if (pur_params_r16_present) { + HANDLE_CODE(pur_params_r16.unpack(bref)); + } + if (meas_params_v1610_present) { + HANDLE_CODE(meas_params_v1610.unpack(bref)); + } + if (eutra_minus5_gc_params_v1610_present) { + HANDLE_CODE(eutra_minus5_gc_params_v1610.unpack(bref)); + } + if (irat_params_nr_v1610_present) { + HANDLE_CODE(irat_params_nr_v1610.unpack(bref)); + } + if (neigh_cell_si_acquisition_params_v1610_present) { + HANDLE_CODE(neigh_cell_si_acquisition_params_v1610.unpack(bref)); + } + if (mob_params_v1610_present) { + HANDLE_CODE(mob_params_v1610.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void ue_eutra_cap_add_xdd_mode_v1610_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (phy_layer_params_v1610_present) { + j.write_fieldname("phyLayerParameters-v1610"); + phy_layer_params_v1610.to_json(j); + } + if (pur_params_r16_present) { + j.write_fieldname("pur-Parameters-r16"); + pur_params_r16.to_json(j); + } + if (meas_params_v1610_present) { + j.write_fieldname("measParameters-v1610"); + meas_params_v1610.to_json(j); + } + if (eutra_minus5_gc_params_v1610_present) { + j.write_fieldname("eutra-5GC-Parameters-v1610"); + eutra_minus5_gc_params_v1610.to_json(j); + } + if (irat_params_nr_v1610_present) { + j.write_fieldname("irat-ParametersNR-v1610"); + irat_params_nr_v1610.to_json(j); + } + if (neigh_cell_si_acquisition_params_v1610_present) { + j.write_fieldname("neighCellSI-AcquisitionParameters-v1610"); + neigh_cell_si_acquisition_params_v1610.to_json(j); + } + if (mob_params_v1610_present) { + j.write_fieldname("mobilityParameters-v1610"); + mob_params_v1610.to_json(j); + } + j.end_obj(); +} + // EUTRA-5GC-Parameters-r15 ::= SEQUENCE SRSASN_CODE eutra_minus5_gc_params_r15_s::pack(bit_ref& bref) const { @@ -8532,6 +11581,242 @@ void eutra_minus5_gc_params_r15_s::to_json(json_writer& j) const j.end_obj(); } +// UE-EUTRA-Capability-v1610-IEs ::= SEQUENCE +SRSASN_CODE ue_eutra_cap_v1610_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(high_speed_enh_params_v1610_present, 1)); + HANDLE_CODE(bref.pack(neigh_cell_si_acquisition_params_v1610_present, 1)); + HANDLE_CODE(bref.pack(mbms_params_v1610_present, 1)); + HANDLE_CODE(bref.pack(pdcp_params_v1610_present, 1)); + HANDLE_CODE(bref.pack(mac_params_v1610_present, 1)); + HANDLE_CODE(bref.pack(phy_layer_params_v1610_present, 1)); + HANDLE_CODE(bref.pack(meas_params_v1610_present, 1)); + HANDLE_CODE(bref.pack(pur_params_r16_present, 1)); + HANDLE_CODE(bref.pack(eutra_minus5_gc_params_v1610_present, 1)); + HANDLE_CODE(bref.pack(other_params_v1610_present, 1)); + HANDLE_CODE(bref.pack(dl_ded_msg_segmentation_r16_present, 1)); + HANDLE_CODE(bref.pack(irat_params_nr_v1610_present, 1)); + HANDLE_CODE(bref.pack(rf_params_v1610_present, 1)); + HANDLE_CODE(bref.pack(mob_params_v1610_present, 1)); + HANDLE_CODE(bref.pack(sl_params_v1610_present, 1)); + HANDLE_CODE(bref.pack(fdd_add_ue_eutra_cap_v1610_present, 1)); + HANDLE_CODE(bref.pack(tdd_add_ue_eutra_cap_v1610_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + if (high_speed_enh_params_v1610_present) { + HANDLE_CODE(high_speed_enh_params_v1610.pack(bref)); + } + if (neigh_cell_si_acquisition_params_v1610_present) { + HANDLE_CODE(neigh_cell_si_acquisition_params_v1610.pack(bref)); + } + if (mbms_params_v1610_present) { + HANDLE_CODE(mbms_params_v1610.pack(bref)); + } + if (pdcp_params_v1610_present) { + HANDLE_CODE(pdcp_params_v1610.pack(bref)); + } + if (mac_params_v1610_present) { + HANDLE_CODE(mac_params_v1610.pack(bref)); + } + if (phy_layer_params_v1610_present) { + HANDLE_CODE(phy_layer_params_v1610.pack(bref)); + } + if (meas_params_v1610_present) { + HANDLE_CODE(meas_params_v1610.pack(bref)); + } + if (pur_params_r16_present) { + HANDLE_CODE(pur_params_r16.pack(bref)); + } + if (eutra_minus5_gc_params_v1610_present) { + HANDLE_CODE(eutra_minus5_gc_params_v1610.pack(bref)); + } + if (other_params_v1610_present) { + HANDLE_CODE(other_params_v1610.pack(bref)); + } + HANDLE_CODE(mmtel_params_v1610.pack(bref)); + if (irat_params_nr_v1610_present) { + HANDLE_CODE(irat_params_nr_v1610.pack(bref)); + } + if (rf_params_v1610_present) { + HANDLE_CODE(rf_params_v1610.pack(bref)); + } + if (mob_params_v1610_present) { + HANDLE_CODE(mob_params_v1610.pack(bref)); + } + HANDLE_CODE(ue_based_netw_perf_meas_params_v1610.pack(bref)); + if (sl_params_v1610_present) { + HANDLE_CODE(sl_params_v1610.pack(bref)); + } + if (fdd_add_ue_eutra_cap_v1610_present) { + HANDLE_CODE(fdd_add_ue_eutra_cap_v1610.pack(bref)); + } + if (tdd_add_ue_eutra_cap_v1610_present) { + HANDLE_CODE(tdd_add_ue_eutra_cap_v1610.pack(bref)); + } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE ue_eutra_cap_v1610_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(high_speed_enh_params_v1610_present, 1)); + HANDLE_CODE(bref.unpack(neigh_cell_si_acquisition_params_v1610_present, 1)); + HANDLE_CODE(bref.unpack(mbms_params_v1610_present, 1)); + HANDLE_CODE(bref.unpack(pdcp_params_v1610_present, 1)); + HANDLE_CODE(bref.unpack(mac_params_v1610_present, 1)); + HANDLE_CODE(bref.unpack(phy_layer_params_v1610_present, 1)); + HANDLE_CODE(bref.unpack(meas_params_v1610_present, 1)); + HANDLE_CODE(bref.unpack(pur_params_r16_present, 1)); + HANDLE_CODE(bref.unpack(eutra_minus5_gc_params_v1610_present, 1)); + HANDLE_CODE(bref.unpack(other_params_v1610_present, 1)); + HANDLE_CODE(bref.unpack(dl_ded_msg_segmentation_r16_present, 1)); + HANDLE_CODE(bref.unpack(irat_params_nr_v1610_present, 1)); + HANDLE_CODE(bref.unpack(rf_params_v1610_present, 1)); + HANDLE_CODE(bref.unpack(mob_params_v1610_present, 1)); + HANDLE_CODE(bref.unpack(sl_params_v1610_present, 1)); + HANDLE_CODE(bref.unpack(fdd_add_ue_eutra_cap_v1610_present, 1)); + HANDLE_CODE(bref.unpack(tdd_add_ue_eutra_cap_v1610_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + if (high_speed_enh_params_v1610_present) { + HANDLE_CODE(high_speed_enh_params_v1610.unpack(bref)); + } + if (neigh_cell_si_acquisition_params_v1610_present) { + HANDLE_CODE(neigh_cell_si_acquisition_params_v1610.unpack(bref)); + } + if (mbms_params_v1610_present) { + HANDLE_CODE(mbms_params_v1610.unpack(bref)); + } + if (pdcp_params_v1610_present) { + HANDLE_CODE(pdcp_params_v1610.unpack(bref)); + } + if (mac_params_v1610_present) { + HANDLE_CODE(mac_params_v1610.unpack(bref)); + } + if (phy_layer_params_v1610_present) { + HANDLE_CODE(phy_layer_params_v1610.unpack(bref)); + } + if (meas_params_v1610_present) { + HANDLE_CODE(meas_params_v1610.unpack(bref)); + } + if (pur_params_r16_present) { + HANDLE_CODE(pur_params_r16.unpack(bref)); + } + if (eutra_minus5_gc_params_v1610_present) { + HANDLE_CODE(eutra_minus5_gc_params_v1610.unpack(bref)); + } + if (other_params_v1610_present) { + HANDLE_CODE(other_params_v1610.unpack(bref)); + } + HANDLE_CODE(mmtel_params_v1610.unpack(bref)); + if (irat_params_nr_v1610_present) { + HANDLE_CODE(irat_params_nr_v1610.unpack(bref)); + } + if (rf_params_v1610_present) { + HANDLE_CODE(rf_params_v1610.unpack(bref)); + } + if (mob_params_v1610_present) { + HANDLE_CODE(mob_params_v1610.unpack(bref)); + } + HANDLE_CODE(ue_based_netw_perf_meas_params_v1610.unpack(bref)); + if (sl_params_v1610_present) { + HANDLE_CODE(sl_params_v1610.unpack(bref)); + } + if (fdd_add_ue_eutra_cap_v1610_present) { + HANDLE_CODE(fdd_add_ue_eutra_cap_v1610.unpack(bref)); + } + if (tdd_add_ue_eutra_cap_v1610_present) { + HANDLE_CODE(tdd_add_ue_eutra_cap_v1610.unpack(bref)); + } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void ue_eutra_cap_v1610_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (high_speed_enh_params_v1610_present) { + j.write_fieldname("highSpeedEnhParameters-v1610"); + high_speed_enh_params_v1610.to_json(j); + } + if (neigh_cell_si_acquisition_params_v1610_present) { + j.write_fieldname("neighCellSI-AcquisitionParameters-v1610"); + neigh_cell_si_acquisition_params_v1610.to_json(j); + } + if (mbms_params_v1610_present) { + j.write_fieldname("mbms-Parameters-v1610"); + mbms_params_v1610.to_json(j); + } + if (pdcp_params_v1610_present) { + j.write_fieldname("pdcp-Parameters-v1610"); + pdcp_params_v1610.to_json(j); + } + if (mac_params_v1610_present) { + j.write_fieldname("mac-Parameters-v1610"); + mac_params_v1610.to_json(j); + } + if (phy_layer_params_v1610_present) { + j.write_fieldname("phyLayerParameters-v1610"); + phy_layer_params_v1610.to_json(j); + } + if (meas_params_v1610_present) { + j.write_fieldname("measParameters-v1610"); + meas_params_v1610.to_json(j); + } + if (pur_params_r16_present) { + j.write_fieldname("pur-Parameters-r16"); + pur_params_r16.to_json(j); + } + if (eutra_minus5_gc_params_v1610_present) { + j.write_fieldname("eutra-5GC-Parameters-v1610"); + eutra_minus5_gc_params_v1610.to_json(j); + } + if (other_params_v1610_present) { + j.write_fieldname("otherParameters-v1610"); + other_params_v1610.to_json(j); + } + if (dl_ded_msg_segmentation_r16_present) { + j.write_str("dl-DedicatedMessageSegmentation-r16", "supported"); + } + j.write_fieldname("mmtel-Parameters-v1610"); + mmtel_params_v1610.to_json(j); + if (irat_params_nr_v1610_present) { + j.write_fieldname("irat-ParametersNR-v1610"); + irat_params_nr_v1610.to_json(j); + } + if (rf_params_v1610_present) { + j.write_fieldname("rf-Parameters-v1610"); + rf_params_v1610.to_json(j); + } + if (mob_params_v1610_present) { + j.write_fieldname("mobilityParameters-v1610"); + mob_params_v1610.to_json(j); + } + j.write_fieldname("ue-BasedNetwPerfMeasParameters-v1610"); + ue_based_netw_perf_meas_params_v1610.to_json(j); + if (sl_params_v1610_present) { + j.write_fieldname("sl-Parameters-v1610"); + sl_params_v1610.to_json(j); + } + if (fdd_add_ue_eutra_cap_v1610_present) { + j.write_fieldname("fdd-Add-UE-EUTRA-Capabilities-v1610"); + fdd_add_ue_eutra_cap_v1610.to_json(j); + } + if (tdd_add_ue_eutra_cap_v1610_present) { + j.write_fieldname("tdd-Add-UE-EUTRA-Capabilities-v1610"); + tdd_add_ue_eutra_cap_v1610.to_json(j); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + non_crit_ext.to_json(j); + } + j.end_obj(); +} + // UE-EUTRA-CapabilityAddXDD-Mode-v15a0 ::= SEQUENCE SRSASN_CODE ue_eutra_cap_add_xdd_mode_v15a0_s::pack(bit_ref& bref) const { @@ -8697,6 +11982,9 @@ SRSASN_CODE ue_eutra_cap_v15a0_ies_s::pack(bit_ref& bref) const if (tdd_add_ue_eutra_cap_v15a0_present) { HANDLE_CODE(tdd_add_ue_eutra_cap_v15a0.pack(bref)); } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } return SRSASN_SUCCESS; } @@ -8717,6 +12005,9 @@ SRSASN_CODE ue_eutra_cap_v15a0_ies_s::unpack(cbit_ref& bref) if (tdd_add_ue_eutra_cap_v15a0_present) { HANDLE_CODE(tdd_add_ue_eutra_cap_v15a0.unpack(bref)); } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } return SRSASN_SUCCESS; } @@ -8739,8 +12030,7 @@ void ue_eutra_cap_v15a0_ies_s::to_json(json_writer& j) const } if (non_crit_ext_present) { j.write_fieldname("nonCriticalExtension"); - j.start_obj(); - j.end_obj(); + non_crit_ext.to_json(j); } j.end_obj(); } @@ -11666,7 +14956,7 @@ void mac_params_v1310_s::to_json(json_writer& j) const SRSASN_CODE meas_params_v1310_s::pack(bit_ref& bref) const { HANDLE_CODE(bref.pack(rs_sinr_meas_r13_present, 1)); - HANDLE_CODE(bref.pack(white_cell_list_r13_present, 1)); + HANDLE_CODE(bref.pack(allowed_cell_list_r13_present, 1)); HANDLE_CODE(bref.pack(extended_max_obj_id_r13_present, 1)); HANDLE_CODE(bref.pack(ul_pdcp_delay_r13_present, 1)); HANDLE_CODE(bref.pack(extended_freq_priorities_r13_present, 1)); @@ -11678,7 +14968,7 @@ SRSASN_CODE meas_params_v1310_s::pack(bit_ref& bref) const SRSASN_CODE meas_params_v1310_s::unpack(cbit_ref& bref) { HANDLE_CODE(bref.unpack(rs_sinr_meas_r13_present, 1)); - HANDLE_CODE(bref.unpack(white_cell_list_r13_present, 1)); + HANDLE_CODE(bref.unpack(allowed_cell_list_r13_present, 1)); HANDLE_CODE(bref.unpack(extended_max_obj_id_r13_present, 1)); HANDLE_CODE(bref.unpack(ul_pdcp_delay_r13_present, 1)); HANDLE_CODE(bref.unpack(extended_freq_priorities_r13_present, 1)); @@ -11693,8 +14983,8 @@ void meas_params_v1310_s::to_json(json_writer& j) const if (rs_sinr_meas_r13_present) { j.write_str("rs-SINR-Meas-r13", "supported"); } - if (white_cell_list_r13_present) { - j.write_str("whiteCellList-r13", "supported"); + if (allowed_cell_list_r13_present) { + j.write_str("allowedCellList-r13", "supported"); } if (extended_max_obj_id_r13_present) { j.write_str("extendedMaxObjectId-r13", "supported"); @@ -13995,13 +17285,14 @@ void ue_eutra_cap_v940_ies_s::to_json(json_writer& j) const // AccessStratumRelease ::= ENUMERATED const char* access_stratum_release_opts::to_string() const { - static const char* options[] = {"rel8", "rel9", "rel10", "rel11", "rel12", "rel13", "rel14", "rel15"}; - return convert_enum_idx(options, 8, value, "access_stratum_release_e"); + static const char* options[] = { + "rel8", "rel9", "rel10", "rel11", "rel12", "rel13", "rel14", "rel15", "rel16", "rel17"}; + return convert_enum_idx(options, 10, value, "access_stratum_release_e"); } uint8_t access_stratum_release_opts::to_number() const { - static const uint8_t options[] = {8, 9, 10, 11, 12, 13, 14, 15}; - return map_enum_number(options, 8, value, "access_stratum_release_e"); + static const uint8_t options[] = {8, 9, 10, 11, 12, 13, 14, 15, 16, 17}; + return map_enum_number(options, 10, value, "access_stratum_release_e"); } // PhyLayerParameters ::= SEQUENCE @@ -14258,6 +17549,153 @@ void ue_eutra_cap_s::to_json(json_writer& j) const j.end_obj(); } +// MeasParameters-v16c0 ::= SEQUENCE +SRSASN_CODE meas_params_v16c0_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(nr_cell_individual_offset_r16_present, 1)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE meas_params_v16c0_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(nr_cell_individual_offset_r16_present, 1)); + + return SRSASN_SUCCESS; +} +void meas_params_v16c0_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (nr_cell_individual_offset_r16_present) { + j.write_str("nr-CellIndividualOffset-r16", "supported"); + } + j.end_obj(); +} + +// UE-EUTRA-Capability-v16c0-IEs ::= SEQUENCE +SRSASN_CODE ue_eutra_cap_v16c0_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(late_non_crit_ext_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + HANDLE_CODE(meas_params_v16c0.pack(bref)); + if (late_non_crit_ext_present) { + HANDLE_CODE(late_non_crit_ext.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE ue_eutra_cap_v16c0_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(late_non_crit_ext_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + HANDLE_CODE(meas_params_v16c0.unpack(bref)); + if (late_non_crit_ext_present) { + HANDLE_CODE(late_non_crit_ext.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void ue_eutra_cap_v16c0_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_fieldname("measParameters-v16c0"); + meas_params_v16c0.to_json(j); + if (late_non_crit_ext_present) { + j.write_str("lateNonCriticalExtension", late_non_crit_ext.to_string()); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + j.start_obj(); + j.end_obj(); + } + j.end_obj(); +} + +// UE-EUTRA-Capability-v15x0-IEs ::= SEQUENCE +SRSASN_CODE ue_eutra_cap_v15x0_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(late_non_crit_ext_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + if (late_non_crit_ext_present) { + HANDLE_CODE(late_non_crit_ext.pack(bref)); + } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE ue_eutra_cap_v15x0_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(late_non_crit_ext_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + if (late_non_crit_ext_present) { + HANDLE_CODE(late_non_crit_ext.unpack(bref)); + } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void ue_eutra_cap_v15x0_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (late_non_crit_ext_present) { + j.write_str("lateNonCriticalExtension", late_non_crit_ext.to_string()); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + non_crit_ext.to_json(j); + } + j.end_obj(); +} + +// UE-EUTRA-Capability-v14x0-IEs ::= SEQUENCE +SRSASN_CODE ue_eutra_cap_v14x0_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(late_non_crit_ext_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + if (late_non_crit_ext_present) { + HANDLE_CODE(late_non_crit_ext.pack(bref)); + } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE ue_eutra_cap_v14x0_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(late_non_crit_ext_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + if (late_non_crit_ext_present) { + HANDLE_CODE(late_non_crit_ext.unpack(bref)); + } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void ue_eutra_cap_v14x0_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (late_non_crit_ext_present) { + j.write_str("lateNonCriticalExtension", late_non_crit_ext.to_string()); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + non_crit_ext.to_json(j); + } + j.end_obj(); +} + // PhyLayerParameters-v14a0 ::= SEQUENCE SRSASN_CODE phy_layer_params_v14a0_s::pack(bit_ref& bref) const { @@ -14289,6 +17727,9 @@ SRSASN_CODE ue_eutra_cap_v14b0_ies_s::pack(bit_ref& bref) const if (rf_params_v14b0_present) { HANDLE_CODE(rf_params_v14b0.pack(bref)); } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } return SRSASN_SUCCESS; } @@ -14300,6 +17741,9 @@ SRSASN_CODE ue_eutra_cap_v14b0_ies_s::unpack(cbit_ref& bref) if (rf_params_v14b0_present) { HANDLE_CODE(rf_params_v14b0.unpack(bref)); } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } return SRSASN_SUCCESS; } @@ -14312,8 +17756,7 @@ void ue_eutra_cap_v14b0_ies_s::to_json(json_writer& j) const } if (non_crit_ext_present) { j.write_fieldname("nonCriticalExtension"); - j.start_obj(); - j.end_obj(); + non_crit_ext.to_json(j); } j.end_obj(); } diff --git a/lib/src/asn1/rrc/ul_ccch_msg.cc b/lib/src/asn1/rrc/ul_ccch_msg.cc index cb9396ab2..59cd811f9 100644 --- a/lib/src/asn1/rrc/ul_ccch_msg.cc +++ b/lib/src/asn1/rrc/ul_ccch_msg.cc @@ -20,6 +20,41 @@ using namespace asn1::rrc; * Struct Methods ******************************************************************************/ +// RRCEarlyDataRequest-v1610-IEs ::= SEQUENCE +SRSASN_CODE rrc_early_data_request_v1610_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + HANDLE_CODE(establishment_cause_v1610.pack(bref)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE rrc_early_data_request_v1610_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + HANDLE_CODE(establishment_cause_v1610.unpack(bref)); + + return SRSASN_SUCCESS; +} +void rrc_early_data_request_v1610_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_str("establishmentCause-v1610", establishment_cause_v1610.to_string()); + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + j.start_obj(); + j.end_obj(); + } + j.end_obj(); +} + +const char* rrc_early_data_request_v1610_ies_s::establishment_cause_v1610_opts::to_string() const +{ + static const char* options[] = {"mt-Access", "spare3", "spare2", "spare1"}; + return convert_enum_idx(options, 4, value, "rrc_early_data_request_v1610_ies_s::establishment_cause_v1610_e_"); +} + // EstablishmentCause ::= ENUMERATED const char* establishment_cause_opts::to_string() const { @@ -34,12 +69,12 @@ const char* establishment_cause_opts::to_string() const return convert_enum_idx(options, 8, value, "establishment_cause_e"); } -// EstablishmentCause-5GC ::= ENUMERATED -const char* establishment_cause_minus5_gc_opts::to_string() const +// EstablishmentCause-5GC-r15 ::= ENUMERATED +const char* establishment_cause_minus5_gc_r15_opts::to_string() const { static const char* options[] = { "emergency", "highPriorityAccess", "mt-Access", "mo-Signalling", "mo-Data", "mo-VoiceCall", "spare2", "spare1"}; - return convert_enum_idx(options, 8, value, "establishment_cause_minus5_gc_e"); + return convert_enum_idx(options, 8, value, "establishment_cause_minus5_gc_r15_e"); } // InitialUE-Identity ::= CHOICE @@ -171,8 +206,8 @@ SRSASN_CODE init_ue_id_c::unpack(cbit_ref& bref) return SRSASN_SUCCESS; } -// InitialUE-Identity-5GC ::= CHOICE -void init_ue_id_minus5_gc_c::destroy_() +// InitialUE-Identity-5GC-r15 ::= CHOICE +void init_ue_id_minus5_gc_r15_c::destroy_() { switch (type_) { case types::ng_minus5_g_s_tmsi_part1: @@ -185,7 +220,7 @@ void init_ue_id_minus5_gc_c::destroy_() break; } } -void init_ue_id_minus5_gc_c::set(types::options e) +void init_ue_id_minus5_gc_r15_c::set(types::options e) { destroy_(); type_ = e; @@ -199,10 +234,10 @@ void init_ue_id_minus5_gc_c::set(types::options e) case types::nulltype: break; default: - log_invalid_choice_id(type_, "init_ue_id_minus5_gc_c"); + log_invalid_choice_id(type_, "init_ue_id_minus5_gc_r15_c"); } } -init_ue_id_minus5_gc_c::init_ue_id_minus5_gc_c(const init_ue_id_minus5_gc_c& other) +init_ue_id_minus5_gc_r15_c::init_ue_id_minus5_gc_r15_c(const init_ue_id_minus5_gc_r15_c& other) { type_ = other.type(); switch (type_) { @@ -215,10 +250,10 @@ init_ue_id_minus5_gc_c::init_ue_id_minus5_gc_c(const init_ue_id_minus5_gc_c& oth case types::nulltype: break; default: - log_invalid_choice_id(type_, "init_ue_id_minus5_gc_c"); + log_invalid_choice_id(type_, "init_ue_id_minus5_gc_r15_c"); } } -init_ue_id_minus5_gc_c& init_ue_id_minus5_gc_c::operator=(const init_ue_id_minus5_gc_c& other) +init_ue_id_minus5_gc_r15_c& init_ue_id_minus5_gc_r15_c::operator=(const init_ue_id_minus5_gc_r15_c& other) { if (this == &other) { return *this; @@ -234,22 +269,22 @@ init_ue_id_minus5_gc_c& init_ue_id_minus5_gc_c::operator=(const init_ue_id_minus case types::nulltype: break; default: - log_invalid_choice_id(type_, "init_ue_id_minus5_gc_c"); + log_invalid_choice_id(type_, "init_ue_id_minus5_gc_r15_c"); } return *this; } -fixed_bitstring<40>& init_ue_id_minus5_gc_c::set_ng_minus5_g_s_tmsi_part1() +fixed_bitstring<40>& init_ue_id_minus5_gc_r15_c::set_ng_minus5_g_s_tmsi_part1() { set(types::ng_minus5_g_s_tmsi_part1); return c.get<fixed_bitstring<40> >(); } -fixed_bitstring<40>& init_ue_id_minus5_gc_c::set_random_value() +fixed_bitstring<40>& init_ue_id_minus5_gc_r15_c::set_random_value() { set(types::random_value); return c.get<fixed_bitstring<40> >(); } -void init_ue_id_minus5_gc_c::to_json(json_writer& j) const +void init_ue_id_minus5_gc_r15_c::to_json(json_writer& j) const { j.start_obj(); switch (type_) { @@ -260,11 +295,11 @@ void init_ue_id_minus5_gc_c::to_json(json_writer& j) const j.write_str("randomValue", c.get<fixed_bitstring<40> >().to_string()); break; default: - log_invalid_choice_id(type_, "init_ue_id_minus5_gc_c"); + log_invalid_choice_id(type_, "init_ue_id_minus5_gc_r15_c"); } j.end_obj(); } -SRSASN_CODE init_ue_id_minus5_gc_c::pack(bit_ref& bref) const +SRSASN_CODE init_ue_id_minus5_gc_r15_c::pack(bit_ref& bref) const { type_.pack(bref); switch (type_) { @@ -275,12 +310,12 @@ SRSASN_CODE init_ue_id_minus5_gc_c::pack(bit_ref& bref) const HANDLE_CODE(c.get<fixed_bitstring<40> >().pack(bref)); break; default: - log_invalid_choice_id(type_, "init_ue_id_minus5_gc_c"); + log_invalid_choice_id(type_, "init_ue_id_minus5_gc_r15_c"); return SRSASN_ERROR_ENCODE_FAIL; } return SRSASN_SUCCESS; } -SRSASN_CODE init_ue_id_minus5_gc_c::unpack(cbit_ref& bref) +SRSASN_CODE init_ue_id_minus5_gc_r15_c::unpack(cbit_ref& bref) { types e; e.unpack(bref); @@ -293,7 +328,7 @@ SRSASN_CODE init_ue_id_minus5_gc_c::unpack(cbit_ref& bref) HANDLE_CODE(c.get<fixed_bitstring<40> >().unpack(bref)); break; default: - log_invalid_choice_id(type_, "init_ue_id_minus5_gc_c"); + log_invalid_choice_id(type_, "init_ue_id_minus5_gc_r15_c"); return SRSASN_ERROR_DECODE_FAIL; } return SRSASN_SUCCESS; @@ -308,6 +343,9 @@ SRSASN_CODE rrc_early_data_request_v1590_ies_s::pack(bit_ref& bref) const if (late_non_crit_ext_present) { HANDLE_CODE(late_non_crit_ext.pack(bref)); } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } return SRSASN_SUCCESS; } @@ -319,6 +357,9 @@ SRSASN_CODE rrc_early_data_request_v1590_ies_s::unpack(cbit_ref& bref) if (late_non_crit_ext_present) { HANDLE_CODE(late_non_crit_ext.unpack(bref)); } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } return SRSASN_SUCCESS; } @@ -330,8 +371,7 @@ void rrc_early_data_request_v1590_ies_s::to_json(json_writer& j) const } if (non_crit_ext_present) { j.write_fieldname("nonCriticalExtension"); - j.start_obj(); - j.end_obj(); + non_crit_ext.to_json(j); } j.end_obj(); } @@ -379,7 +419,7 @@ const char* resume_cause_opts::to_string() const "mo-Data", "delayTolerantAccess-v1020", "mo-VoiceCall-v1280", - "spare1"}; + "mt-EDT-v1610"}; return convert_enum_idx(options, 8, value, "resume_cause_e"); } @@ -427,16 +467,16 @@ void rrc_conn_reest_request_r8_ies_s::to_json(json_writer& j) const // RRCConnectionRequest-5GC-r15-IEs ::= SEQUENCE SRSASN_CODE rrc_conn_request_minus5_gc_r15_ies_s::pack(bit_ref& bref) const { - HANDLE_CODE(ue_id.pack(bref)); - HANDLE_CODE(establishment_cause.pack(bref)); + HANDLE_CODE(ue_id_r15.pack(bref)); + HANDLE_CODE(establishment_cause_r15.pack(bref)); HANDLE_CODE(spare.pack(bref)); return SRSASN_SUCCESS; } SRSASN_CODE rrc_conn_request_minus5_gc_r15_ies_s::unpack(cbit_ref& bref) { - HANDLE_CODE(ue_id.unpack(bref)); - HANDLE_CODE(establishment_cause.unpack(bref)); + HANDLE_CODE(ue_id_r15.unpack(bref)); + HANDLE_CODE(establishment_cause_r15.unpack(bref)); HANDLE_CODE(spare.unpack(bref)); return SRSASN_SUCCESS; @@ -444,9 +484,9 @@ SRSASN_CODE rrc_conn_request_minus5_gc_r15_ies_s::unpack(cbit_ref& bref) void rrc_conn_request_minus5_gc_r15_ies_s::to_json(json_writer& j) const { j.start_obj(); - j.write_fieldname("ue-Identity"); - ue_id.to_json(j); - j.write_str("establishmentCause", establishment_cause.to_string()); + j.write_fieldname("ue-Identity-r15"); + ue_id_r15.to_json(j); + j.write_str("establishmentCause-r15", establishment_cause_r15.to_string()); j.write_str("spare", spare.to_string()); j.end_obj(); } @@ -797,6 +837,58 @@ SRSASN_CODE rrc_conn_resume_request_r13_ies_s::resume_id_r13_c_::unpack(cbit_ref return SRSASN_SUCCESS; } +// RRCEarlyDataRequest-5GC-r16-IEs ::= SEQUENCE +SRSASN_CODE rrc_early_data_request_minus5_gc_r16_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(late_non_crit_ext_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + HANDLE_CODE(ng_minus5_g_s_tmsi_r16.pack(bref)); + HANDLE_CODE(establishment_cause_r16.pack(bref)); + HANDLE_CODE(ded_info_nas_r16.pack(bref)); + if (late_non_crit_ext_present) { + HANDLE_CODE(late_non_crit_ext.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE rrc_early_data_request_minus5_gc_r16_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(late_non_crit_ext_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + HANDLE_CODE(ng_minus5_g_s_tmsi_r16.unpack(bref)); + HANDLE_CODE(establishment_cause_r16.unpack(bref)); + HANDLE_CODE(ded_info_nas_r16.unpack(bref)); + if (late_non_crit_ext_present) { + HANDLE_CODE(late_non_crit_ext.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void rrc_early_data_request_minus5_gc_r16_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_str("ng-5G-S-TMSI-r16", ng_minus5_g_s_tmsi_r16.to_string()); + j.write_str("establishmentCause-r16", establishment_cause_r16.to_string()); + j.write_str("dedicatedInfoNAS-r16", ded_info_nas_r16.to_string()); + if (late_non_crit_ext_present) { + j.write_str("lateNonCriticalExtension", late_non_crit_ext.to_string()); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + j.start_obj(); + j.end_obj(); + } + j.end_obj(); +} + +const char* rrc_early_data_request_minus5_gc_r16_ies_s::establishment_cause_r16_opts::to_string() const +{ + static const char* options[] = {"mo-Data", "spare3", "spare2", "spare1"}; + return convert_enum_idx(options, 4, value, "rrc_early_data_request_minus5_gc_r16_ies_s::establishment_cause_r16_e_"); +} + // RRCEarlyDataRequest-r15-IEs ::= SEQUENCE SRSASN_CODE rrc_early_data_request_r15_ies_s::pack(bit_ref& bref) const { @@ -1250,18 +1342,84 @@ void rrc_early_data_request_r15_s::to_json(json_writer& j) const j.end_obj(); } +void rrc_early_data_request_r15_s::crit_exts_c_::destroy_() +{ + switch (type_) { + case types::rrc_early_data_request_r15: + c.destroy<rrc_early_data_request_r15_ies_s>(); + break; + case types::crit_exts_future: + c.destroy<crit_exts_future_c_>(); + break; + default: + break; + } +} void rrc_early_data_request_r15_s::crit_exts_c_::set(types::options e) { + destroy_(); type_ = e; + switch (type_) { + case types::rrc_early_data_request_r15: + c.init<rrc_early_data_request_r15_ies_s>(); + break; + case types::crit_exts_future: + c.init<crit_exts_future_c_>(); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "rrc_early_data_request_r15_s::crit_exts_c_"); + } +} +rrc_early_data_request_r15_s::crit_exts_c_::crit_exts_c_(const rrc_early_data_request_r15_s::crit_exts_c_& other) +{ + type_ = other.type(); + switch (type_) { + case types::rrc_early_data_request_r15: + c.init(other.c.get<rrc_early_data_request_r15_ies_s>()); + break; + case types::crit_exts_future: + c.init(other.c.get<crit_exts_future_c_>()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "rrc_early_data_request_r15_s::crit_exts_c_"); + } +} +rrc_early_data_request_r15_s::crit_exts_c_& +rrc_early_data_request_r15_s::crit_exts_c_::operator=(const rrc_early_data_request_r15_s::crit_exts_c_& other) +{ + if (this == &other) { + return *this; + } + set(other.type()); + switch (type_) { + case types::rrc_early_data_request_r15: + c.set(other.c.get<rrc_early_data_request_r15_ies_s>()); + break; + case types::crit_exts_future: + c.set(other.c.get<crit_exts_future_c_>()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "rrc_early_data_request_r15_s::crit_exts_c_"); + } + + return *this; } rrc_early_data_request_r15_ies_s& rrc_early_data_request_r15_s::crit_exts_c_::set_rrc_early_data_request_r15() { set(types::rrc_early_data_request_r15); - return c; + return c.get<rrc_early_data_request_r15_ies_s>(); } -void rrc_early_data_request_r15_s::crit_exts_c_::set_crit_exts_future() +rrc_early_data_request_r15_s::crit_exts_c_::crit_exts_future_c_& +rrc_early_data_request_r15_s::crit_exts_c_::set_crit_exts_future() { set(types::crit_exts_future); + return c.get<crit_exts_future_c_>(); } void rrc_early_data_request_r15_s::crit_exts_c_::to_json(json_writer& j) const { @@ -1269,9 +1427,11 @@ void rrc_early_data_request_r15_s::crit_exts_c_::to_json(json_writer& j) const switch (type_) { case types::rrc_early_data_request_r15: j.write_fieldname("rrcEarlyDataRequest-r15"); - c.to_json(j); + c.get<rrc_early_data_request_r15_ies_s>().to_json(j); break; case types::crit_exts_future: + j.write_fieldname("criticalExtensionsFuture"); + c.get<crit_exts_future_c_>().to_json(j); break; default: log_invalid_choice_id(type_, "rrc_early_data_request_r15_s::crit_exts_c_"); @@ -1283,9 +1443,10 @@ SRSASN_CODE rrc_early_data_request_r15_s::crit_exts_c_::pack(bit_ref& bref) cons type_.pack(bref); switch (type_) { case types::rrc_early_data_request_r15: - HANDLE_CODE(c.pack(bref)); + HANDLE_CODE(c.get<rrc_early_data_request_r15_ies_s>().pack(bref)); break; case types::crit_exts_future: + HANDLE_CODE(c.get<crit_exts_future_c_>().pack(bref)); break; default: log_invalid_choice_id(type_, "rrc_early_data_request_r15_s::crit_exts_c_"); @@ -1300,9 +1461,10 @@ SRSASN_CODE rrc_early_data_request_r15_s::crit_exts_c_::unpack(cbit_ref& bref) set(e); switch (type_) { case types::rrc_early_data_request_r15: - HANDLE_CODE(c.unpack(bref)); + HANDLE_CODE(c.get<rrc_early_data_request_r15_ies_s>().unpack(bref)); break; case types::crit_exts_future: + HANDLE_CODE(c.get<crit_exts_future_c_>().unpack(bref)); break; default: log_invalid_choice_id(type_, "rrc_early_data_request_r15_s::crit_exts_c_"); @@ -1311,6 +1473,68 @@ SRSASN_CODE rrc_early_data_request_r15_s::crit_exts_c_::unpack(cbit_ref& bref) return SRSASN_SUCCESS; } +void rrc_early_data_request_r15_s::crit_exts_c_::crit_exts_future_c_::set(types::options e) +{ + type_ = e; +} +rrc_early_data_request_minus5_gc_r16_ies_s& +rrc_early_data_request_r15_s::crit_exts_c_::crit_exts_future_c_::set_rrc_early_data_request_minus5_gc_r16() +{ + set(types::rrc_early_data_request_minus5_gc_r16); + return c; +} +void rrc_early_data_request_r15_s::crit_exts_c_::crit_exts_future_c_::set_crit_exts_future_r16() +{ + set(types::crit_exts_future_r16); +} +void rrc_early_data_request_r15_s::crit_exts_c_::crit_exts_future_c_::to_json(json_writer& j) const +{ + j.start_obj(); + switch (type_) { + case types::rrc_early_data_request_minus5_gc_r16: + j.write_fieldname("rrcEarlyDataRequest-5GC-r16"); + c.to_json(j); + break; + case types::crit_exts_future_r16: + break; + default: + log_invalid_choice_id(type_, "rrc_early_data_request_r15_s::crit_exts_c_::crit_exts_future_c_"); + } + j.end_obj(); +} +SRSASN_CODE rrc_early_data_request_r15_s::crit_exts_c_::crit_exts_future_c_::pack(bit_ref& bref) const +{ + type_.pack(bref); + switch (type_) { + case types::rrc_early_data_request_minus5_gc_r16: + HANDLE_CODE(c.pack(bref)); + break; + case types::crit_exts_future_r16: + break; + default: + log_invalid_choice_id(type_, "rrc_early_data_request_r15_s::crit_exts_c_::crit_exts_future_c_"); + return SRSASN_ERROR_ENCODE_FAIL; + } + return SRSASN_SUCCESS; +} +SRSASN_CODE rrc_early_data_request_r15_s::crit_exts_c_::crit_exts_future_c_::unpack(cbit_ref& bref) +{ + types e; + e.unpack(bref); + set(e); + switch (type_) { + case types::rrc_early_data_request_minus5_gc_r16: + HANDLE_CODE(c.unpack(bref)); + break; + case types::crit_exts_future_r16: + break; + default: + log_invalid_choice_id(type_, "rrc_early_data_request_r15_s::crit_exts_c_::crit_exts_future_c_"); + return SRSASN_ERROR_DECODE_FAIL; + } + return SRSASN_SUCCESS; +} + // UL-CCCH-MessageType ::= CHOICE void ul_ccch_msg_type_c::destroy_() { diff --git a/lib/src/asn1/rrc/ul_dcch_msg.cc b/lib/src/asn1/rrc/ul_dcch_msg.cc index f9eb9d753..9a3e9fae7 100644 --- a/lib/src/asn1/rrc/ul_dcch_msg.cc +++ b/lib/src/asn1/rrc/ul_dcch_msg.cc @@ -168,6 +168,223 @@ SRSASN_CODE tmgi_r9_s::plmn_id_r9_c_::unpack(cbit_ref& bref) return SRSASN_SUCCESS; } +// GNSS-ValidityDuration-r17 ::= ENUMERATED +const char* gnss_validity_dur_r17_opts::to_string() const +{ + static const char* options[] = {"s10", + "s20", + "s30", + "s40", + "s50", + "s60", + "min5", + "min10", + "min15", + "min20", + "min25", + "min30", + "min50", + "min90", + "min120", + "infinity"}; + return convert_enum_idx(options, 16, value, "gnss_validity_dur_r17_e"); +} + +// RRCConnectionSetupComplete-v1710-IEs ::= SEQUENCE +SRSASN_CODE rrc_conn_setup_complete_v1710_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(gnss_validity_dur_r17_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + if (gnss_validity_dur_r17_present) { + HANDLE_CODE(gnss_validity_dur_r17.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE rrc_conn_setup_complete_v1710_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(gnss_validity_dur_r17_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + if (gnss_validity_dur_r17_present) { + HANDLE_CODE(gnss_validity_dur_r17.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void rrc_conn_setup_complete_v1710_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (gnss_validity_dur_r17_present) { + j.write_str("gnss-ValidityDuration-r17", gnss_validity_dur_r17.to_string()); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + j.start_obj(); + j.end_obj(); + } + j.end_obj(); +} + +// RRCConnectionSetupComplete-v1690-IEs ::= SEQUENCE +SRSASN_CODE rrc_conn_setup_complete_v1690_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(ul_rrc_segmentation_r16_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE rrc_conn_setup_complete_v1690_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(ul_rrc_segmentation_r16_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void rrc_conn_setup_complete_v1690_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (ul_rrc_segmentation_r16_present) { + j.write_str("ul-RRC-Segmentation-r16", "true"); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + non_crit_ext.to_json(j); + } + j.end_obj(); +} + +// ResultsPerSSB-IndexIdle-r16 ::= SEQUENCE +SRSASN_CODE results_per_ssb_idx_idle_r16_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(ssb_results_r16_present, 1)); + + HANDLE_CODE(pack_integer(bref, ssb_idx_r16, (uint8_t)0u, (uint8_t)63u)); + if (ssb_results_r16_present) { + HANDLE_CODE(bref.pack(ssb_results_r16.ssb_rsrp_result_r16_present, 1)); + HANDLE_CODE(bref.pack(ssb_results_r16.ssb_rsrq_result_r16_present, 1)); + if (ssb_results_r16.ssb_rsrp_result_r16_present) { + HANDLE_CODE(pack_integer(bref, ssb_results_r16.ssb_rsrp_result_r16, (uint8_t)0u, (uint8_t)127u)); + } + if (ssb_results_r16.ssb_rsrq_result_r16_present) { + HANDLE_CODE(pack_integer(bref, ssb_results_r16.ssb_rsrq_result_r16, (uint8_t)0u, (uint8_t)127u)); + } + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE results_per_ssb_idx_idle_r16_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(ssb_results_r16_present, 1)); + + HANDLE_CODE(unpack_integer(ssb_idx_r16, bref, (uint8_t)0u, (uint8_t)63u)); + if (ssb_results_r16_present) { + HANDLE_CODE(bref.unpack(ssb_results_r16.ssb_rsrp_result_r16_present, 1)); + HANDLE_CODE(bref.unpack(ssb_results_r16.ssb_rsrq_result_r16_present, 1)); + if (ssb_results_r16.ssb_rsrp_result_r16_present) { + HANDLE_CODE(unpack_integer(ssb_results_r16.ssb_rsrp_result_r16, bref, (uint8_t)0u, (uint8_t)127u)); + } + if (ssb_results_r16.ssb_rsrq_result_r16_present) { + HANDLE_CODE(unpack_integer(ssb_results_r16.ssb_rsrq_result_r16, bref, (uint8_t)0u, (uint8_t)127u)); + } + } + + return SRSASN_SUCCESS; +} +void results_per_ssb_idx_idle_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_int("ssb-Index-r16", ssb_idx_r16); + if (ssb_results_r16_present) { + j.write_fieldname("ssb-Results-r16"); + j.start_obj(); + if (ssb_results_r16.ssb_rsrp_result_r16_present) { + j.write_int("ssb-RSRP-Result-r16", ssb_results_r16.ssb_rsrp_result_r16); + } + if (ssb_results_r16.ssb_rsrq_result_r16_present) { + j.write_int("ssb-RSRQ-Result-r16", ssb_results_r16.ssb_rsrq_result_r16); + } + j.end_obj(); + } + j.end_obj(); +} + +// RRCConnectionSetupComplete-v1610-IEs ::= SEQUENCE +SRSASN_CODE rrc_conn_setup_complete_v1610_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(rlos_request_r16_present, 1)); + HANDLE_CODE(bref.pack(cp_cio_t_minus5_gs_optim_r16_present, 1)); + HANDLE_CODE(bref.pack(up_cio_t_minus5_gs_optim_r16_present, 1)); + HANDLE_CODE(bref.pack(pur_cfg_id_r16_present, 1)); + HANDLE_CODE(bref.pack(lte_m_r16_present, 1)); + HANDLE_CODE(bref.pack(iab_node_ind_r16_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + if (pur_cfg_id_r16_present) { + HANDLE_CODE(pur_cfg_id_r16.pack(bref)); + } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE rrc_conn_setup_complete_v1610_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(rlos_request_r16_present, 1)); + HANDLE_CODE(bref.unpack(cp_cio_t_minus5_gs_optim_r16_present, 1)); + HANDLE_CODE(bref.unpack(up_cio_t_minus5_gs_optim_r16_present, 1)); + HANDLE_CODE(bref.unpack(pur_cfg_id_r16_present, 1)); + HANDLE_CODE(bref.unpack(lte_m_r16_present, 1)); + HANDLE_CODE(bref.unpack(iab_node_ind_r16_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + if (pur_cfg_id_r16_present) { + HANDLE_CODE(pur_cfg_id_r16.unpack(bref)); + } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void rrc_conn_setup_complete_v1610_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (rlos_request_r16_present) { + j.write_str("rlos-Request-r16", "true"); + } + if (cp_cio_t_minus5_gs_optim_r16_present) { + j.write_str("cp-CIoT-5GS-Optimisation-r16", "true"); + } + if (up_cio_t_minus5_gs_optim_r16_present) { + j.write_str("up-CIoT-5GS-Optimisation-r16", "true"); + } + if (pur_cfg_id_r16_present) { + j.write_str("pur-ConfigID-r16", pur_cfg_id_r16.to_string()); + } + if (lte_m_r16_present) { + j.write_str("lte-M-r16", "true"); + } + if (iab_node_ind_r16_present) { + j.write_str("iab-NodeIndication-r16", "true"); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + non_crit_ext.to_json(j); + } + j.end_obj(); +} + // MeasResultIdleEUTRA-r15 ::= SEQUENCE SRSASN_CODE meas_result_idle_eutra_r15_s::pack(bit_ref& bref) const { @@ -202,6 +419,105 @@ void meas_result_idle_eutra_r15_s::to_json(json_writer& j) const j.end_obj(); } +// MeasResultsPerCellIdleNR-r16 ::= SEQUENCE +SRSASN_CODE meas_results_per_cell_idle_nr_r16_s::pack(bit_ref& bref) const +{ + bref.pack(ext, 1); + HANDLE_CODE(pack_integer(bref, pci_nr_r16, (uint16_t)0u, (uint16_t)1007u)); + HANDLE_CODE(bref.pack(meas_idle_result_nr_r16.rsrp_result_nr_r16_present, 1)); + HANDLE_CODE(bref.pack(meas_idle_result_nr_r16.rsrq_result_nr_r16_present, 1)); + HANDLE_CODE(bref.pack(meas_idle_result_nr_r16.result_rs_idx_list_r16_present, 1)); + if (meas_idle_result_nr_r16.rsrp_result_nr_r16_present) { + HANDLE_CODE(pack_integer(bref, meas_idle_result_nr_r16.rsrp_result_nr_r16, (uint8_t)0u, (uint8_t)127u)); + } + if (meas_idle_result_nr_r16.rsrq_result_nr_r16_present) { + HANDLE_CODE(pack_integer(bref, meas_idle_result_nr_r16.rsrq_result_nr_r16, (uint8_t)0u, (uint8_t)127u)); + } + if (meas_idle_result_nr_r16.result_rs_idx_list_r16_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, meas_idle_result_nr_r16.result_rs_idx_list_r16, 1, 32)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE meas_results_per_cell_idle_nr_r16_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(unpack_integer(pci_nr_r16, bref, (uint16_t)0u, (uint16_t)1007u)); + HANDLE_CODE(bref.unpack(meas_idle_result_nr_r16.rsrp_result_nr_r16_present, 1)); + HANDLE_CODE(bref.unpack(meas_idle_result_nr_r16.rsrq_result_nr_r16_present, 1)); + HANDLE_CODE(bref.unpack(meas_idle_result_nr_r16.result_rs_idx_list_r16_present, 1)); + if (meas_idle_result_nr_r16.rsrp_result_nr_r16_present) { + HANDLE_CODE(unpack_integer(meas_idle_result_nr_r16.rsrp_result_nr_r16, bref, (uint8_t)0u, (uint8_t)127u)); + } + if (meas_idle_result_nr_r16.rsrq_result_nr_r16_present) { + HANDLE_CODE(unpack_integer(meas_idle_result_nr_r16.rsrq_result_nr_r16, bref, (uint8_t)0u, (uint8_t)127u)); + } + if (meas_idle_result_nr_r16.result_rs_idx_list_r16_present) { + HANDLE_CODE(unpack_dyn_seq_of(meas_idle_result_nr_r16.result_rs_idx_list_r16, bref, 1, 32)); + } + + return SRSASN_SUCCESS; +} +void meas_results_per_cell_idle_nr_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_int("physCellIdNR-r16", pci_nr_r16); + j.write_fieldname("measIdleResultNR-r16"); + j.start_obj(); + if (meas_idle_result_nr_r16.rsrp_result_nr_r16_present) { + j.write_int("rsrpResultNR-r16", meas_idle_result_nr_r16.rsrp_result_nr_r16); + } + if (meas_idle_result_nr_r16.rsrq_result_nr_r16_present) { + j.write_int("rsrqResultNR-r16", meas_idle_result_nr_r16.rsrq_result_nr_r16); + } + if (meas_idle_result_nr_r16.result_rs_idx_list_r16_present) { + j.start_array("resultRS-IndexList-r16"); + for (const auto& e1 : meas_idle_result_nr_r16.result_rs_idx_list_r16) { + e1.to_json(j); + } + j.end_array(); + } + j.end_obj(); + j.end_obj(); +} + +// RRCConnectionReconfigurationComplete-v1710-IEs ::= SEQUENCE +SRSASN_CODE rrc_conn_recfg_complete_v1710_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(gnss_validity_dur_r17_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + if (gnss_validity_dur_r17_present) { + HANDLE_CODE(gnss_validity_dur_r17.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE rrc_conn_recfg_complete_v1710_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(gnss_validity_dur_r17_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + if (gnss_validity_dur_r17_present) { + HANDLE_CODE(gnss_validity_dur_r17.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void rrc_conn_recfg_complete_v1710_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (gnss_validity_dur_r17_present) { + j.write_str("gnss-ValidityDuration-r17", gnss_validity_dur_r17.to_string()); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + j.start_obj(); + j.end_obj(); + } + j.end_obj(); +} + // RRCConnectionSetupComplete-v1540-IEs ::= SEQUENCE SRSASN_CODE rrc_conn_setup_complete_v1540_ies_s::pack(bit_ref& bref) const { @@ -212,6 +528,9 @@ SRSASN_CODE rrc_conn_setup_complete_v1540_ies_s::pack(bit_ref& bref) const if (guami_type_r15_present) { HANDLE_CODE(guami_type_r15.pack(bref)); } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } return SRSASN_SUCCESS; } @@ -224,6 +543,9 @@ SRSASN_CODE rrc_conn_setup_complete_v1540_ies_s::unpack(cbit_ref& bref) if (guami_type_r15_present) { HANDLE_CODE(guami_type_r15.unpack(bref)); } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } return SRSASN_SUCCESS; } @@ -238,8 +560,7 @@ void rrc_conn_setup_complete_v1540_ies_s::to_json(json_writer& j) const } if (non_crit_ext_present) { j.write_fieldname("nonCriticalExtension"); - j.start_obj(); - j.end_obj(); + non_crit_ext.to_json(j); } j.end_obj(); } @@ -412,6 +733,77 @@ SRSASN_CODE s_nssai_r15_c::unpack(cbit_ref& bref) return SRSASN_SUCCESS; } +// MeasResultIdleNR-r16 ::= SEQUENCE +SRSASN_CODE meas_result_idle_nr_r16_s::pack(bit_ref& bref) const +{ + bref.pack(ext, 1); + HANDLE_CODE(pack_integer(bref, carrier_freq_nr_r16, (uint32_t)0u, (uint32_t)3279165u)); + HANDLE_CODE(pack_dyn_seq_of(bref, meas_results_per_cell_list_idle_nr_r16, 1, 8)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE meas_result_idle_nr_r16_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(unpack_integer(carrier_freq_nr_r16, bref, (uint32_t)0u, (uint32_t)3279165u)); + HANDLE_CODE(unpack_dyn_seq_of(meas_results_per_cell_list_idle_nr_r16, bref, 1, 8)); + + return SRSASN_SUCCESS; +} +void meas_result_idle_nr_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_int("carrierFreqNR-r16", carrier_freq_nr_r16); + j.start_array("measResultsPerCellListIdleNR-r16"); + for (const auto& e1 : meas_results_per_cell_list_idle_nr_r16) { + e1.to_json(j); + } + j.end_array(); + j.end_obj(); +} + +// RRCConnectionReconfigurationComplete-v1700-IEs ::= SEQUENCE +SRSASN_CODE rrc_conn_recfg_complete_v1700_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(sel_cond_recfg_to_apply_r17_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + if (sel_cond_recfg_to_apply_r17_present) { + HANDLE_CODE(pack_integer(bref, sel_cond_recfg_to_apply_r17, (uint8_t)1u, (uint8_t)8u)); + } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE rrc_conn_recfg_complete_v1700_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(sel_cond_recfg_to_apply_r17_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + if (sel_cond_recfg_to_apply_r17_present) { + HANDLE_CODE(unpack_integer(sel_cond_recfg_to_apply_r17, bref, (uint8_t)1u, (uint8_t)8u)); + } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void rrc_conn_recfg_complete_v1700_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (sel_cond_recfg_to_apply_r17_present) { + j.write_int("selectedCondReconfigurationToApply-r17", sel_cond_recfg_to_apply_r17); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + non_crit_ext.to_json(j); + } + j.end_obj(); +} + // RRCConnectionSetupComplete-v1530-IEs ::= SEQUENCE SRSASN_CODE rrc_conn_setup_complete_v1530_ies_s::pack(bit_ref& bref) const { @@ -708,6 +1100,26 @@ SRSASN_CODE meas_result_idle_r15_s::meas_result_neigh_cells_r15_c_::unpack(cbit_ return SRSASN_SUCCESS; } +// OverheatingAssistance-v1710 ::= SEQUENCE +SRSASN_CODE overheat_assist_v1710_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(overheat_assist_for_scg_fr2_minus2_r17.pack(bref)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE overheat_assist_v1710_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(overheat_assist_for_scg_fr2_minus2_r17.unpack(bref)); + + return SRSASN_SUCCESS; +} +void overheat_assist_v1710_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_str("overheatingAssistanceForSCG-FR2-2-r17", overheat_assist_for_scg_fr2_minus2_r17.to_string()); + j.end_obj(); +} + // PerCC-GapIndication-r14 ::= SEQUENCE SRSASN_CODE per_cc_gap_ind_r14_s::pack(bit_ref& bref) const { @@ -737,6 +1149,29 @@ const char* per_cc_gap_ind_r14_s::gap_ind_r14_opts::to_string() const return convert_enum_idx(options, 3, value, "per_cc_gap_ind_r14_s::gap_ind_r14_e_"); } +// RACH-Report-v1610 ::= SEQUENCE +SRSASN_CODE rach_report_v1610_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(pack_integer(bref, init_cel_r16, (uint8_t)0u, (uint8_t)3u)); + HANDLE_CODE(bref.pack(edt_fallback_r16, 1)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE rach_report_v1610_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(unpack_integer(init_cel_r16, bref, (uint8_t)0u, (uint8_t)3u)); + HANDLE_CODE(bref.unpack(edt_fallback_r16, 1)); + + return SRSASN_SUCCESS; +} +void rach_report_v1610_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_int("initialCEL-r16", init_cel_r16); + j.write_bool("edt-Fallback-r16", edt_fallback_r16); + j.end_obj(); +} + // RRCConnectionReconfigurationComplete-v1530-IEs ::= SEQUENCE SRSASN_CODE rrc_conn_recfg_complete_v1530_ies_s::pack(bit_ref& bref) const { @@ -745,6 +1180,10 @@ SRSASN_CODE rrc_conn_recfg_complete_v1530_ies_s::pack(bit_ref& bref) const HANDLE_CODE(bref.pack(flight_path_info_available_r15_present, 1)); HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } + return SRSASN_SUCCESS; } SRSASN_CODE rrc_conn_recfg_complete_v1530_ies_s::unpack(cbit_ref& bref) @@ -754,6 +1193,10 @@ SRSASN_CODE rrc_conn_recfg_complete_v1530_ies_s::unpack(cbit_ref& bref) HANDLE_CODE(bref.unpack(flight_path_info_available_r15_present, 1)); HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } + return SRSASN_SUCCESS; } void rrc_conn_recfg_complete_v1530_ies_s::to_json(json_writer& j) const @@ -770,6 +1213,42 @@ void rrc_conn_recfg_complete_v1530_ies_s::to_json(json_writer& j) const } if (non_crit_ext_present) { j.write_fieldname("nonCriticalExtension"); + non_crit_ext.to_json(j); + } + j.end_obj(); +} + +// RRCConnectionReestablishmentComplete-v1710-IEs ::= SEQUENCE +SRSASN_CODE rrc_conn_reest_complete_v1710_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(gnss_validity_dur_r17_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + if (gnss_validity_dur_r17_present) { + HANDLE_CODE(gnss_validity_dur_r17.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE rrc_conn_reest_complete_v1710_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(gnss_validity_dur_r17_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + if (gnss_validity_dur_r17_present) { + HANDLE_CODE(gnss_validity_dur_r17.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void rrc_conn_reest_complete_v1710_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (gnss_validity_dur_r17_present) { + j.write_str("gnss-ValidityDuration-r17", gnss_validity_dur_r17.to_string()); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); j.start_obj(); j.end_obj(); } @@ -818,6 +1297,43 @@ void rrc_conn_setup_complete_v1430_ies_s::to_json(json_writer& j) const j.end_obj(); } +// UEInformationResponse-v1710-IEs ::= SEQUENCE +SRSASN_CODE ue_info_resp_v1710_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(coarse_location_info_r17_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + if (coarse_location_info_r17_present) { + HANDLE_CODE(coarse_location_info_r17.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE ue_info_resp_v1710_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(coarse_location_info_r17_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + if (coarse_location_info_r17_present) { + HANDLE_CODE(coarse_location_info_r17.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void ue_info_resp_v1710_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (coarse_location_info_r17_present) { + j.write_str("coarseLocationInfo-r17", coarse_location_info_r17.to_string()); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + j.start_obj(); + j.end_obj(); + } + j.end_obj(); +} + // VictimSystemType-r11 ::= SEQUENCE SRSASN_CODE victim_sys_type_r11_s::pack(bit_ref& bref) const { @@ -1159,7 +1675,7 @@ const char* affected_carrier_freq_comb_info_mrdc_r15_s::interference_direction_m SRSASN_CODE flight_path_info_report_r15_s::pack(bit_ref& bref) const { HANDLE_CODE(bref.pack(flight_path_r15_present, 1)); - HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + HANDLE_CODE(bref.pack(dummy_present, 1)); if (flight_path_r15_present) { HANDLE_CODE(pack_dyn_seq_of(bref, flight_path_r15, 1, 20)); @@ -1170,7 +1686,7 @@ SRSASN_CODE flight_path_info_report_r15_s::pack(bit_ref& bref) const SRSASN_CODE flight_path_info_report_r15_s::unpack(cbit_ref& bref) { HANDLE_CODE(bref.unpack(flight_path_r15_present, 1)); - HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + HANDLE_CODE(bref.unpack(dummy_present, 1)); if (flight_path_r15_present) { HANDLE_CODE(unpack_dyn_seq_of(flight_path_r15, bref, 1, 20)); @@ -1188,8 +1704,8 @@ void flight_path_info_report_r15_s::to_json(json_writer& j) const } j.end_array(); } - if (non_crit_ext_present) { - j.write_fieldname("nonCriticalExtension"); + if (dummy_present) { + j.write_fieldname("dummy"); j.start_obj(); j.end_obj(); } @@ -1246,6 +1762,10 @@ SRSASN_CODE rrc_conn_reest_complete_v1530_ies_s::pack(bit_ref& bref) const HANDLE_CODE(bref.pack(flight_path_info_available_r15_present, 1)); HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } + return SRSASN_SUCCESS; } SRSASN_CODE rrc_conn_reest_complete_v1530_ies_s::unpack(cbit_ref& bref) @@ -1255,6 +1775,10 @@ SRSASN_CODE rrc_conn_reest_complete_v1530_ies_s::unpack(cbit_ref& bref) HANDLE_CODE(bref.unpack(flight_path_info_available_r15_present, 1)); HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } + return SRSASN_SUCCESS; } void rrc_conn_reest_complete_v1530_ies_s::to_json(json_writer& j) const @@ -1271,8 +1795,7 @@ void rrc_conn_reest_complete_v1530_ies_s::to_json(json_writer& j) const } if (non_crit_ext_present) { j.write_fieldname("nonCriticalExtension"); - j.start_obj(); - j.end_obj(); + non_crit_ext.to_json(j); } j.end_obj(); } @@ -1313,12 +1836,201 @@ void rrc_conn_setup_complete_v1330_ies_s::to_json(json_writer& j) const j.end_obj(); } +// UEAssistanceInformation-v1710-IEs ::= SEQUENCE +SRSASN_CODE ueassist_info_v1710_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(overheat_assist_v1710_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + if (overheat_assist_v1710_present) { + HANDLE_CODE(overheat_assist_v1710.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE ueassist_info_v1710_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(overheat_assist_v1710_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + if (overheat_assist_v1710_present) { + HANDLE_CODE(overheat_assist_v1710.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void ueassist_info_v1710_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (overheat_assist_v1710_present) { + j.write_fieldname("overheatingAssistance-v1710"); + overheat_assist_v1710.to_json(j); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + j.start_obj(); + j.end_obj(); + } + j.end_obj(); +} + +// UEInformationResponse-v1610-IEs ::= SEQUENCE +SRSASN_CODE ue_info_resp_v1610_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(rach_report_v1610_present, 1)); + HANDLE_CODE(bref.pack(meas_result_list_ext_idle_r16_present, 1)); + HANDLE_CODE(bref.pack(meas_result_list_idle_nr_r16_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + if (rach_report_v1610_present) { + HANDLE_CODE(rach_report_v1610.pack(bref)); + } + if (meas_result_list_ext_idle_r16_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, meas_result_list_ext_idle_r16, 1, 5, SeqOfPacker<Packer>(1, 8, Packer()))); + } + if (meas_result_list_idle_nr_r16_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, meas_result_list_idle_nr_r16, 1, 8)); + } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE ue_info_resp_v1610_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(rach_report_v1610_present, 1)); + HANDLE_CODE(bref.unpack(meas_result_list_ext_idle_r16_present, 1)); + HANDLE_CODE(bref.unpack(meas_result_list_idle_nr_r16_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + if (rach_report_v1610_present) { + HANDLE_CODE(rach_report_v1610.unpack(bref)); + } + if (meas_result_list_ext_idle_r16_present) { + HANDLE_CODE(unpack_dyn_seq_of(meas_result_list_ext_idle_r16, bref, 1, 5, SeqOfPacker<Packer>(1, 8, Packer()))); + } + if (meas_result_list_idle_nr_r16_present) { + HANDLE_CODE(unpack_dyn_seq_of(meas_result_list_idle_nr_r16, bref, 1, 8)); + } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void ue_info_resp_v1610_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (rach_report_v1610_present) { + j.write_fieldname("rach-Report-v1610"); + rach_report_v1610.to_json(j); + } + if (meas_result_list_ext_idle_r16_present) { + j.start_array("measResultListExtIdle-r16"); + for (const auto& e1 : meas_result_list_ext_idle_r16) { + j.start_array(); + for (const auto& e2 : e1) { + e2.to_json(j); + } + j.end_array(); + } + j.end_array(); + } + if (meas_result_list_idle_nr_r16_present) { + j.start_array("measResultListIdleNR-r16"); + for (const auto& e1 : meas_result_list_idle_nr_r16) { + e1.to_json(j); + } + j.end_array(); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + non_crit_ext.to_json(j); + } + j.end_obj(); +} + +// VictimSystemType-v1610 ::= SEQUENCE +SRSASN_CODE victim_sys_type_v1610_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(navic_r16_present, 1)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE victim_sys_type_v1610_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(navic_r16_present, 1)); + + return SRSASN_SUCCESS; +} +void victim_sys_type_v1610_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (navic_r16_present) { + j.write_str("navic-r16", "true"); + } + j.end_obj(); +} + +// InDeviceCoexIndication-v1610-IEs ::= SEQUENCE +SRSASN_CODE in_dev_coex_ind_v1610_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(victim_sys_type_v1610_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + if (victim_sys_type_v1610_present) { + HANDLE_CODE(victim_sys_type_v1610.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE in_dev_coex_ind_v1610_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(victim_sys_type_v1610_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + if (victim_sys_type_v1610_present) { + HANDLE_CODE(victim_sys_type_v1610.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void in_dev_coex_ind_v1610_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (victim_sys_type_v1610_present) { + j.write_fieldname("victimSystemType-v1610"); + victim_sys_type_v1610.to_json(j); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + j.start_obj(); + j.end_obj(); + } + j.end_obj(); +} + // MRDC-AssistanceInfo-r15 ::= SEQUENCE SRSASN_CODE mrdc_assist_info_r15_s::pack(bit_ref& bref) const { bref.pack(ext, 1); HANDLE_CODE(pack_dyn_seq_of(bref, affected_carrier_freq_comb_info_list_mrdc_r15, 1, 128)); + if (ext) { + ext_groups_packer_guard group_flags; + group_flags[0] |= affected_carrier_freq_comb_info_list_mrdc_v1610.is_present(); + group_flags.pack(bref); + + if (group_flags[0]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(affected_carrier_freq_comb_info_list_mrdc_v1610.is_present(), 1)); + if (affected_carrier_freq_comb_info_list_mrdc_v1610.is_present()) { + HANDLE_CODE(pack_dyn_seq_of(bref, *affected_carrier_freq_comb_info_list_mrdc_v1610, 1, 128)); + } + } + } return SRSASN_SUCCESS; } SRSASN_CODE mrdc_assist_info_r15_s::unpack(cbit_ref& bref) @@ -1326,6 +2038,22 @@ SRSASN_CODE mrdc_assist_info_r15_s::unpack(cbit_ref& bref) bref.unpack(ext, 1); HANDLE_CODE(unpack_dyn_seq_of(affected_carrier_freq_comb_info_list_mrdc_r15, bref, 1, 128)); + if (ext) { + ext_groups_unpacker_guard group_flags(1); + group_flags.unpack(bref); + + if (group_flags[0]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + bool affected_carrier_freq_comb_info_list_mrdc_v1610_present; + HANDLE_CODE(bref.unpack(affected_carrier_freq_comb_info_list_mrdc_v1610_present, 1)); + affected_carrier_freq_comb_info_list_mrdc_v1610.set_present( + affected_carrier_freq_comb_info_list_mrdc_v1610_present); + if (affected_carrier_freq_comb_info_list_mrdc_v1610.is_present()) { + HANDLE_CODE(unpack_dyn_seq_of(*affected_carrier_freq_comb_info_list_mrdc_v1610, bref, 1, 128)); + } + } + } return SRSASN_SUCCESS; } void mrdc_assist_info_r15_s::to_json(json_writer& j) const @@ -1336,6 +2064,35 @@ void mrdc_assist_info_r15_s::to_json(json_writer& j) const e1.to_json(j); } j.end_array(); + if (ext) { + if (affected_carrier_freq_comb_info_list_mrdc_v1610.is_present()) { + j.start_array("affectedCarrierFreqCombInfoListMRDC-v1610"); + for (const auto& e1 : *affected_carrier_freq_comb_info_list_mrdc_v1610) { + e1.to_json(j); + } + j.end_array(); + } + } + j.end_obj(); +} + +// OverheatingAssistance-v1610 ::= SEQUENCE +SRSASN_CODE overheat_assist_v1610_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(overheat_assist_for_scg_r16.pack(bref)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE overheat_assist_v1610_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(overheat_assist_for_scg_r16.unpack(bref)); + + return SRSASN_SUCCESS; +} +void overheat_assist_v1610_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_str("overheatingAssistanceForSCG-r16", overheat_assist_for_scg_r16.to_string()); j.end_obj(); } @@ -1547,6 +2304,59 @@ void traffic_pattern_info_v1530_s::to_json(json_writer& j) const j.end_obj(); } +// UEAssistanceInformation-v1700-IEs ::= SEQUENCE +SRSASN_CODE ueassist_info_v1700_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(ul_data_r17_present, 1)); + HANDLE_CODE(bref.pack(scg_deactivation_pref_r17_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + if (scg_deactivation_pref_r17_present) { + HANDLE_CODE(scg_deactivation_pref_r17.pack(bref)); + } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE ueassist_info_v1700_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(ul_data_r17_present, 1)); + HANDLE_CODE(bref.unpack(scg_deactivation_pref_r17_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + if (scg_deactivation_pref_r17_present) { + HANDLE_CODE(scg_deactivation_pref_r17.unpack(bref)); + } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void ueassist_info_v1700_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (ul_data_r17_present) { + j.write_str("uplinkData-r17", "true"); + } + if (scg_deactivation_pref_r17_present) { + j.write_str("scg-DeactivationPreference-r17", scg_deactivation_pref_r17.to_string()); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + non_crit_ext.to_json(j); + } + j.end_obj(); +} + +const char* ueassist_info_v1700_ies_s::scg_deactivation_pref_r17_opts::to_string() const +{ + static const char* options[] = {"scgDeactivationPreferred", "noPreference"}; + return convert_enum_idx(options, 2, value, "ueassist_info_v1700_ies_s::scg_deactivation_pref_r17_e_"); +} + // UEInformationResponse-v1530-IEs ::= SEQUENCE SRSASN_CODE ue_info_resp_v1530_ies_s::pack(bit_ref& bref) const { @@ -1560,6 +2370,9 @@ SRSASN_CODE ue_info_resp_v1530_ies_s::pack(bit_ref& bref) const if (flight_path_info_report_r15_present) { HANDLE_CODE(flight_path_info_report_r15.pack(bref)); } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } return SRSASN_SUCCESS; } @@ -1575,6 +2388,9 @@ SRSASN_CODE ue_info_resp_v1530_ies_s::unpack(cbit_ref& bref) if (flight_path_info_report_r15_present) { HANDLE_CODE(flight_path_info_report_r15.unpack(bref)); } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } return SRSASN_SUCCESS; } @@ -1594,8 +2410,7 @@ void ue_info_resp_v1530_ies_s::to_json(json_writer& j) const } if (non_crit_ext_present) { j.write_fieldname("nonCriticalExtension"); - j.start_obj(); - j.end_obj(); + non_crit_ext.to_json(j); } j.end_obj(); } @@ -1681,6 +2496,9 @@ SRSASN_CODE conn_est_fail_report_r11_s::pack(bit_ref& bref) const group_flags[1] |= meas_result_failed_cell_v1360_present; group_flags[2] |= log_meas_result_list_bt_r15.is_present(); group_flags[2] |= log_meas_result_list_wlan_r15.is_present(); + group_flags[3] |= meas_result_list_nr_r16.is_present(); + group_flags[4] |= meas_result_list_nr_v1640.is_present(); + group_flags[4] |= meas_result_list_ext_nr_r16.is_present(); group_flags.pack(bref); if (group_flags[0]) { @@ -1719,6 +2537,27 @@ SRSASN_CODE conn_est_fail_report_r11_s::pack(bit_ref& bref) const HANDLE_CODE(pack_dyn_seq_of(bref, *log_meas_result_list_wlan_r15, 1, 32)); } } + if (group_flags[3]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(meas_result_list_nr_r16.is_present(), 1)); + if (meas_result_list_nr_r16.is_present()) { + HANDLE_CODE(pack_dyn_seq_of(bref, *meas_result_list_nr_r16, 1, 8)); + } + } + if (group_flags[4]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(meas_result_list_nr_v1640.is_present(), 1)); + HANDLE_CODE(bref.pack(meas_result_list_ext_nr_r16.is_present(), 1)); + if (meas_result_list_nr_v1640.is_present()) { + HANDLE_CODE( + pack_integer(bref, meas_result_list_nr_v1640->carrier_freq_nr_r16, (uint32_t)0u, (uint32_t)3279165u)); + } + if (meas_result_list_ext_nr_r16.is_present()) { + HANDLE_CODE(pack_dyn_seq_of(bref, *meas_result_list_ext_nr_r16, 1, 7)); + } + } } return SRSASN_SUCCESS; } @@ -1765,7 +2604,7 @@ SRSASN_CODE conn_est_fail_report_r11_s::unpack(cbit_ref& bref) } if (ext) { - ext_groups_unpacker_guard group_flags(3); + ext_groups_unpacker_guard group_flags(5); group_flags.unpack(bref); if (group_flags[0]) { @@ -1812,6 +2651,33 @@ SRSASN_CODE conn_est_fail_report_r11_s::unpack(cbit_ref& bref) HANDLE_CODE(unpack_dyn_seq_of(*log_meas_result_list_wlan_r15, bref, 1, 32)); } } + if (group_flags[3]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + bool meas_result_list_nr_r16_present; + HANDLE_CODE(bref.unpack(meas_result_list_nr_r16_present, 1)); + meas_result_list_nr_r16.set_present(meas_result_list_nr_r16_present); + if (meas_result_list_nr_r16.is_present()) { + HANDLE_CODE(unpack_dyn_seq_of(*meas_result_list_nr_r16, bref, 1, 8)); + } + } + if (group_flags[4]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + bool meas_result_list_nr_v1640_present; + HANDLE_CODE(bref.unpack(meas_result_list_nr_v1640_present, 1)); + meas_result_list_nr_v1640.set_present(meas_result_list_nr_v1640_present); + bool meas_result_list_ext_nr_r16_present; + HANDLE_CODE(bref.unpack(meas_result_list_ext_nr_r16_present, 1)); + meas_result_list_ext_nr_r16.set_present(meas_result_list_ext_nr_r16_present); + if (meas_result_list_nr_v1640.is_present()) { + HANDLE_CODE( + unpack_integer(meas_result_list_nr_v1640->carrier_freq_nr_r16, bref, (uint32_t)0u, (uint32_t)3279165u)); + } + if (meas_result_list_ext_nr_r16.is_present()) { + HANDLE_CODE(unpack_dyn_seq_of(*meas_result_list_ext_nr_r16, bref, 1, 7)); + } + } } return SRSASN_SUCCESS; } @@ -1907,6 +2773,26 @@ void conn_est_fail_report_r11_s::to_json(json_writer& j) const } j.end_array(); } + if (meas_result_list_nr_r16.is_present()) { + j.start_array("measResultListNR-r16"); + for (const auto& e1 : *meas_result_list_nr_r16) { + e1.to_json(j); + } + j.end_array(); + } + if (meas_result_list_nr_v1640.is_present()) { + j.write_fieldname("measResultListNR-v1640"); + j.start_obj(); + j.write_int("carrierFreqNR-r16", meas_result_list_nr_v1640->carrier_freq_nr_r16); + j.end_obj(); + } + if (meas_result_list_ext_nr_r16.is_present()) { + j.start_array("measResultListExtNR-r16"); + for (const auto& e1 : *meas_result_list_ext_nr_r16) { + e1.to_json(j); + } + j.end_array(); + } } j.end_obj(); } @@ -1946,6 +2832,9 @@ SRSASN_CODE in_dev_coex_ind_v1530_ies_s::pack(bit_ref& bref) const if (mrdc_assist_info_r15_present) { HANDLE_CODE(mrdc_assist_info_r15.pack(bref)); } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } return SRSASN_SUCCESS; } @@ -1957,6 +2846,9 @@ SRSASN_CODE in_dev_coex_ind_v1530_ies_s::unpack(cbit_ref& bref) if (mrdc_assist_info_r15_present) { HANDLE_CODE(mrdc_assist_info_r15.unpack(bref)); } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } return SRSASN_SUCCESS; } @@ -1969,12 +2861,64 @@ void in_dev_coex_ind_v1530_ies_s::to_json(json_writer& j) const } if (non_crit_ext_present) { j.write_fieldname("nonCriticalExtension"); - j.start_obj(); - j.end_obj(); + non_crit_ext.to_json(j); } j.end_obj(); } +// MBMS-ROM-Info-r16 ::= SEQUENCE +SRSASN_CODE mbms_rom_info_r16_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(pack_integer(bref, mbms_rom_freq_r16, (uint32_t)0u, (uint32_t)262143u)); + HANDLE_CODE(mbms_rom_subcarrier_spacing_r16.pack(bref)); + HANDLE_CODE(mbms_bw_r16.pack(bref)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE mbms_rom_info_r16_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(unpack_integer(mbms_rom_freq_r16, bref, (uint32_t)0u, (uint32_t)262143u)); + HANDLE_CODE(mbms_rom_subcarrier_spacing_r16.unpack(bref)); + HANDLE_CODE(mbms_bw_r16.unpack(bref)); + + return SRSASN_SUCCESS; +} +void mbms_rom_info_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_int("mbms-ROM-Freq-r16", mbms_rom_freq_r16); + j.write_str("mbms-ROM-SubcarrierSpacing-r16", mbms_rom_subcarrier_spacing_r16.to_string()); + j.write_str("mbms-Bandwidth-r16", mbms_bw_r16.to_string()); + j.end_obj(); +} + +const char* mbms_rom_info_r16_s::mbms_rom_subcarrier_spacing_r16_opts::to_string() const +{ + static const char* options[] = {"kHz2dot5", "kHz0dot37"}; + return convert_enum_idx(options, 2, value, "mbms_rom_info_r16_s::mbms_rom_subcarrier_spacing_r16_e_"); +} +float mbms_rom_info_r16_s::mbms_rom_subcarrier_spacing_r16_opts::to_number() const +{ + static const float options[] = {2.5, 0.37}; + return map_enum_number(options, 2, value, "mbms_rom_info_r16_s::mbms_rom_subcarrier_spacing_r16_e_"); +} +const char* mbms_rom_info_r16_s::mbms_rom_subcarrier_spacing_r16_opts::to_number_string() const +{ + static const char* options[] = {"2.5", "0.37"}; + return convert_enum_idx(options, 2, value, "mbms_rom_info_r16_s::mbms_rom_subcarrier_spacing_r16_e_"); +} + +const char* mbms_rom_info_r16_s::mbms_bw_r16_opts::to_string() const +{ + static const char* options[] = {"n6", "n15", "n25", "n50", "n75", "n100"}; + return convert_enum_idx(options, 6, value, "mbms_rom_info_r16_s::mbms_bw_r16_e_"); +} +uint8_t mbms_rom_info_r16_s::mbms_bw_r16_opts::to_number() const +{ + static const uint8_t options[] = {6, 15, 25, 50, 75, 100}; + return map_enum_number(options, 6, value, "mbms_rom_info_r16_s::mbms_bw_r16_e_"); +} + // RRCConnectionReconfigurationComplete-v1250-IEs ::= SEQUENCE SRSASN_CODE rrc_conn_recfg_complete_v1250_ies_s::pack(bit_ref& bref) const { @@ -2161,6 +3105,49 @@ void sl_v2x_comm_tx_res_req_r14_s::to_json(json_writer& j) const j.end_obj(); } +// UEAssistanceInformation-v1610-IEs ::= SEQUENCE +SRSASN_CODE ueassist_info_v1610_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(overheat_assist_v1610_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + if (overheat_assist_v1610_present) { + HANDLE_CODE(overheat_assist_v1610.pack(bref)); + } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE ueassist_info_v1610_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(overheat_assist_v1610_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + if (overheat_assist_v1610_present) { + HANDLE_CODE(overheat_assist_v1610.unpack(bref)); + } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void ueassist_info_v1610_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (overheat_assist_v1610_present) { + j.write_fieldname("overheatingAssistance-v1610"); + overheat_assist_v1610.to_json(j); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + non_crit_ext.to_json(j); + } + j.end_obj(); +} + // UEInformationResponse-v1250-IEs ::= SEQUENCE SRSASN_CODE ue_info_resp_v1250_ies_s::pack(bit_ref& bref) const { @@ -2601,38 +3588,91 @@ void mbms_service_info_r13_s::to_json(json_writer& j) const j.end_obj(); } -// MeasResultFreqFailNR-r15 ::= SEQUENCE -SRSASN_CODE meas_result_freq_fail_nr_r15_s::pack(bit_ref& bref) const +// MBMSInterestIndication-v1610-IEs ::= SEQUENCE +SRSASN_CODE mbms_interest_ind_v1610_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(mbms_rom_info_list_r16_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + if (mbms_rom_info_list_r16_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, mbms_rom_info_list_r16, 1, 15)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE mbms_interest_ind_v1610_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(mbms_rom_info_list_r16_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + if (mbms_rom_info_list_r16_present) { + HANDLE_CODE(unpack_dyn_seq_of(mbms_rom_info_list_r16, bref, 1, 15)); + } + + return SRSASN_SUCCESS; +} +void mbms_interest_ind_v1610_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (mbms_rom_info_list_r16_present) { + j.start_array("mbms-ROM-InfoList-r16"); + for (const auto& e1 : mbms_rom_info_list_r16) { + e1.to_json(j); + } + j.end_array(); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + j.start_obj(); + j.end_obj(); + } + j.end_obj(); +} + +// MeasResult3EUTRA-r15 ::= SEQUENCE +SRSASN_CODE meas_result3_eutra_r15_s::pack(bit_ref& bref) const { bref.pack(ext, 1); - HANDLE_CODE(bref.pack(meas_result_cell_list_r15_present, 1)); + HANDLE_CODE(bref.pack(meas_result_serving_cell_r15_present, 1)); + HANDLE_CODE(bref.pack(meas_result_neigh_cell_list_r15_present, 1)); - HANDLE_CODE(pack_integer(bref, carrier_freq_r15, (uint32_t)0u, (uint32_t)3279165u)); - if (meas_result_cell_list_r15_present) { - HANDLE_CODE(pack_dyn_seq_of(bref, meas_result_cell_list_r15, 1, 8)); + HANDLE_CODE(pack_integer(bref, carrier_freq_r15, (uint32_t)0u, (uint32_t)262143u)); + if (meas_result_serving_cell_r15_present) { + HANDLE_CODE(meas_result_serving_cell_r15.pack(bref)); + } + if (meas_result_neigh_cell_list_r15_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, meas_result_neigh_cell_list_r15, 1, 8)); } return SRSASN_SUCCESS; } -SRSASN_CODE meas_result_freq_fail_nr_r15_s::unpack(cbit_ref& bref) +SRSASN_CODE meas_result3_eutra_r15_s::unpack(cbit_ref& bref) { bref.unpack(ext, 1); - HANDLE_CODE(bref.unpack(meas_result_cell_list_r15_present, 1)); + HANDLE_CODE(bref.unpack(meas_result_serving_cell_r15_present, 1)); + HANDLE_CODE(bref.unpack(meas_result_neigh_cell_list_r15_present, 1)); - HANDLE_CODE(unpack_integer(carrier_freq_r15, bref, (uint32_t)0u, (uint32_t)3279165u)); - if (meas_result_cell_list_r15_present) { - HANDLE_CODE(unpack_dyn_seq_of(meas_result_cell_list_r15, bref, 1, 8)); + HANDLE_CODE(unpack_integer(carrier_freq_r15, bref, (uint32_t)0u, (uint32_t)262143u)); + if (meas_result_serving_cell_r15_present) { + HANDLE_CODE(meas_result_serving_cell_r15.unpack(bref)); + } + if (meas_result_neigh_cell_list_r15_present) { + HANDLE_CODE(unpack_dyn_seq_of(meas_result_neigh_cell_list_r15, bref, 1, 8)); } return SRSASN_SUCCESS; } -void meas_result_freq_fail_nr_r15_s::to_json(json_writer& j) const +void meas_result3_eutra_r15_s::to_json(json_writer& j) const { j.start_obj(); j.write_int("carrierFreq-r15", carrier_freq_r15); - if (meas_result_cell_list_r15_present) { - j.start_array("measResultCellList-r15"); - for (const auto& e1 : meas_result_cell_list_r15) { + if (meas_result_serving_cell_r15_present) { + j.write_fieldname("measResultServingCell-r15"); + meas_result_serving_cell_r15.to_json(j); + } + if (meas_result_neigh_cell_list_r15_present) { + j.start_array("measResultNeighCellList-r15"); + for (const auto& e1 : meas_result_neigh_cell_list_r15) { e1.to_json(j); } j.end_array(); @@ -2765,6 +3805,43 @@ void rrc_conn_reest_complete_v1020_ies_s::to_json(json_writer& j) const j.end_obj(); } +// RRCConnectionResumeComplete-v1710-IEs ::= SEQUENCE +SRSASN_CODE rrc_conn_resume_complete_v1710_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(gnss_validity_dur_r17_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + if (gnss_validity_dur_r17_present) { + HANDLE_CODE(gnss_validity_dur_r17.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE rrc_conn_resume_complete_v1710_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(gnss_validity_dur_r17_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + if (gnss_validity_dur_r17_present) { + HANDLE_CODE(gnss_validity_dur_r17.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void rrc_conn_resume_complete_v1710_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (gnss_validity_dur_r17_present) { + j.write_str("gnss-ValidityDuration-r17", gnss_validity_dur_r17.to_string()); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + j.start_obj(); + j.end_obj(); + } + j.end_obj(); +} + // RRCConnectionSetupComplete-v1130-IEs ::= SEQUENCE SRSASN_CODE rrc_conn_setup_complete_v1130_ies_s::pack(bit_ref& bref) const { @@ -3295,6 +4372,9 @@ SRSASN_CODE ueassist_info_v1530_ies_s::pack(bit_ref& bref) const if (sps_assist_info_v1530_present) { HANDLE_CODE(pack_dyn_seq_of(bref, sps_assist_info_v1530.traffic_pattern_info_list_sl_v1530, 1, 8)); } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } return SRSASN_SUCCESS; } @@ -3306,6 +4386,9 @@ SRSASN_CODE ueassist_info_v1530_ies_s::unpack(cbit_ref& bref) if (sps_assist_info_v1530_present) { HANDLE_CODE(unpack_dyn_seq_of(sps_assist_info_v1530.traffic_pattern_info_list_sl_v1530, bref, 1, 8)); } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } return SRSASN_SUCCESS; } @@ -3324,8 +4407,7 @@ void ueassist_info_v1530_ies_s::to_json(json_writer& j) const } if (non_crit_ext_present) { j.write_fieldname("nonCriticalExtension"); - j.start_obj(); - j.end_obj(); + non_crit_ext.to_json(j); } j.end_obj(); } @@ -3475,6 +4557,43 @@ const char* bw_pref_r14_s::ul_pref_r14_opts::to_number_string() const return convert_enum_idx(options, 2, value, "bw_pref_r14_s::ul_pref_r14_e_"); } +// CellGlobalIdNR-r16 ::= SEQUENCE +SRSASN_CODE cell_global_id_nr_r16_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(tac_r16_present, 1)); + + HANDLE_CODE(plmn_id_r16.pack(bref)); + HANDLE_CODE(cell_id_r16.pack(bref)); + if (tac_r16_present) { + HANDLE_CODE(tac_r16.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE cell_global_id_nr_r16_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(tac_r16_present, 1)); + + HANDLE_CODE(plmn_id_r16.unpack(bref)); + HANDLE_CODE(cell_id_r16.unpack(bref)); + if (tac_r16_present) { + HANDLE_CODE(tac_r16.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void cell_global_id_nr_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_fieldname("plmn-Identity-r16"); + plmn_id_r16.to_json(j); + j.write_str("cellIdentity-r16", cell_id_r16.to_string()); + if (tac_r16_present) { + j.write_str("trackingAreaCode-r16", tac_r16.to_string()); + } + j.end_obj(); +} + // CounterCheckResponse-v1530-IEs ::= SEQUENCE SRSASN_CODE counter_check_resp_v1530_ies_s::pack(bit_ref& bref) const { @@ -3779,6 +4898,9 @@ SRSASN_CODE mbms_interest_ind_v1540_ies_s::pack(bit_ref& bref) const if (mbms_rom_info_list_r15_present) { HANDLE_CODE(pack_dyn_seq_of(bref, mbms_rom_info_list_r15, 1, 15)); } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } return SRSASN_SUCCESS; } @@ -3790,6 +4912,9 @@ SRSASN_CODE mbms_interest_ind_v1540_ies_s::unpack(cbit_ref& bref) if (mbms_rom_info_list_r15_present) { HANDLE_CODE(unpack_dyn_seq_of(mbms_rom_info_list_r15, bref, 1, 15)); } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } return SRSASN_SUCCESS; } @@ -3805,8 +4930,7 @@ void mbms_interest_ind_v1540_ies_s::to_json(json_writer& j) const } if (non_crit_ext_present) { j.write_fieldname("nonCriticalExtension"); - j.start_obj(); - j.end_obj(); + non_crit_ext.to_json(j); } j.end_obj(); } @@ -3894,6 +5018,97 @@ void rrc_conn_reest_complete_v8a0_ies_s::to_json(json_writer& j) const j.end_obj(); } +// RRCConnectionResumeComplete-v1610-IEs ::= SEQUENCE +SRSASN_CODE rrc_conn_resume_complete_v1610_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(meas_result_list_idle_r16_present, 1)); + HANDLE_CODE(bref.pack(meas_result_list_ext_idle_r16_present, 1)); + HANDLE_CODE(bref.pack(meas_result_list_idle_nr_r16_present, 1)); + HANDLE_CODE(bref.pack(scg_cfg_resp_nr_r16_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + if (meas_result_list_idle_r16_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, meas_result_list_idle_r16, 1, 3)); + } + if (meas_result_list_ext_idle_r16_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, meas_result_list_ext_idle_r16, 1, 5, SeqOfPacker<Packer>(1, 8, Packer()))); + } + if (meas_result_list_idle_nr_r16_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, meas_result_list_idle_nr_r16, 1, 8)); + } + if (scg_cfg_resp_nr_r16_present) { + HANDLE_CODE(scg_cfg_resp_nr_r16.pack(bref)); + } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE rrc_conn_resume_complete_v1610_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(meas_result_list_idle_r16_present, 1)); + HANDLE_CODE(bref.unpack(meas_result_list_ext_idle_r16_present, 1)); + HANDLE_CODE(bref.unpack(meas_result_list_idle_nr_r16_present, 1)); + HANDLE_CODE(bref.unpack(scg_cfg_resp_nr_r16_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + if (meas_result_list_idle_r16_present) { + HANDLE_CODE(unpack_dyn_seq_of(meas_result_list_idle_r16, bref, 1, 3)); + } + if (meas_result_list_ext_idle_r16_present) { + HANDLE_CODE(unpack_dyn_seq_of(meas_result_list_ext_idle_r16, bref, 1, 5, SeqOfPacker<Packer>(1, 8, Packer()))); + } + if (meas_result_list_idle_nr_r16_present) { + HANDLE_CODE(unpack_dyn_seq_of(meas_result_list_idle_nr_r16, bref, 1, 8)); + } + if (scg_cfg_resp_nr_r16_present) { + HANDLE_CODE(scg_cfg_resp_nr_r16.unpack(bref)); + } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void rrc_conn_resume_complete_v1610_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (meas_result_list_idle_r16_present) { + j.start_array("measResultListIdle-r16"); + for (const auto& e1 : meas_result_list_idle_r16) { + e1.to_json(j); + } + j.end_array(); + } + if (meas_result_list_ext_idle_r16_present) { + j.start_array("measResultListExtIdle-r16"); + for (const auto& e1 : meas_result_list_ext_idle_r16) { + j.start_array(); + for (const auto& e2 : e1) { + e2.to_json(j); + } + j.end_array(); + } + j.end_array(); + } + if (meas_result_list_idle_nr_r16_present) { + j.start_array("measResultListIdleNR-r16"); + for (const auto& e1 : meas_result_list_idle_nr_r16) { + e1.to_json(j); + } + j.end_array(); + } + if (scg_cfg_resp_nr_r16_present) { + j.write_str("scg-ConfigResponseNR-r16", scg_cfg_resp_nr_r16.to_string()); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + non_crit_ext.to_json(j); + } + j.end_obj(); +} + // RRCConnectionSetupComplete-v1020-IEs ::= SEQUENCE SRSASN_CODE rrc_conn_setup_complete_v1020_ies_s::pack(bit_ref& bref) const { @@ -4809,6 +6024,182 @@ void counter_check_resp_v8a0_ies_s::to_json(json_writer& j) const j.end_obj(); } +// FailedLogicalChannelIdentity-r16 ::= SEQUENCE +SRSASN_CODE failed_lc_ch_id_r16_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(lc_ch_id_r16_present, 1)); + HANDLE_CODE(bref.pack(lc_ch_id_ext_r16_present, 1)); + + HANDLE_CODE(cell_group_ind_r16.pack(bref)); + if (lc_ch_id_r16_present) { + HANDLE_CODE(pack_integer(bref, lc_ch_id_r16, (uint8_t)1u, (uint8_t)10u)); + } + if (lc_ch_id_ext_r16_present) { + HANDLE_CODE(pack_integer(bref, lc_ch_id_ext_r16, (uint8_t)32u, (uint8_t)38u)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE failed_lc_ch_id_r16_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(lc_ch_id_r16_present, 1)); + HANDLE_CODE(bref.unpack(lc_ch_id_ext_r16_present, 1)); + + HANDLE_CODE(cell_group_ind_r16.unpack(bref)); + if (lc_ch_id_r16_present) { + HANDLE_CODE(unpack_integer(lc_ch_id_r16, bref, (uint8_t)1u, (uint8_t)10u)); + } + if (lc_ch_id_ext_r16_present) { + HANDLE_CODE(unpack_integer(lc_ch_id_ext_r16, bref, (uint8_t)32u, (uint8_t)38u)); + } + + return SRSASN_SUCCESS; +} +void failed_lc_ch_id_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_str("cellGroupIndication-r16", cell_group_ind_r16.to_string()); + if (lc_ch_id_r16_present) { + j.write_int("logicalChannelIdentity-r16", lc_ch_id_r16); + } + if (lc_ch_id_ext_r16_present) { + j.write_int("logicalChannelIdentityExt-r16", lc_ch_id_ext_r16); + } + j.end_obj(); +} + +const char* failed_lc_ch_id_r16_s::cell_group_ind_r16_opts::to_string() const +{ + static const char* options[] = {"mn", "sn"}; + return convert_enum_idx(options, 2, value, "failed_lc_ch_id_r16_s::cell_group_ind_r16_e_"); +} + +// FailureReportMCG-r16 ::= SEQUENCE +SRSASN_CODE fail_report_mcg_r16_s::pack(bit_ref& bref) const +{ + bref.pack(ext, 1); + HANDLE_CODE(bref.pack(fail_type_r16_present, 1)); + HANDLE_CODE(bref.pack(meas_result_freq_list_eutra_r16_present, 1)); + HANDLE_CODE(bref.pack(meas_result_freq_list_nr_r16_present, 1)); + HANDLE_CODE(bref.pack(meas_result_freq_list_geran_r16_present, 1)); + HANDLE_CODE(bref.pack(meas_result_freq_list_utra_r16_present, 1)); + HANDLE_CODE(bref.pack(meas_result_scg_r16_present, 1)); + + if (fail_type_r16_present) { + HANDLE_CODE(fail_type_r16.pack(bref)); + } + if (meas_result_freq_list_eutra_r16_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, meas_result_freq_list_eutra_r16, 1, 8)); + } + if (meas_result_freq_list_nr_r16_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, meas_result_freq_list_nr_r16, 1, 5)); + } + if (meas_result_freq_list_geran_r16_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, meas_result_freq_list_geran_r16, 1, 3, SeqOfPacker<Packer>(1, 8, Packer()))); + } + if (meas_result_freq_list_utra_r16_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, meas_result_freq_list_utra_r16, 1, 8)); + } + if (meas_result_scg_r16_present) { + HANDLE_CODE(meas_result_scg_r16.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE fail_report_mcg_r16_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(bref.unpack(fail_type_r16_present, 1)); + HANDLE_CODE(bref.unpack(meas_result_freq_list_eutra_r16_present, 1)); + HANDLE_CODE(bref.unpack(meas_result_freq_list_nr_r16_present, 1)); + HANDLE_CODE(bref.unpack(meas_result_freq_list_geran_r16_present, 1)); + HANDLE_CODE(bref.unpack(meas_result_freq_list_utra_r16_present, 1)); + HANDLE_CODE(bref.unpack(meas_result_scg_r16_present, 1)); + + if (fail_type_r16_present) { + HANDLE_CODE(fail_type_r16.unpack(bref)); + } + if (meas_result_freq_list_eutra_r16_present) { + HANDLE_CODE(unpack_dyn_seq_of(meas_result_freq_list_eutra_r16, bref, 1, 8)); + } + if (meas_result_freq_list_nr_r16_present) { + HANDLE_CODE(unpack_dyn_seq_of(meas_result_freq_list_nr_r16, bref, 1, 5)); + } + if (meas_result_freq_list_geran_r16_present) { + HANDLE_CODE(unpack_dyn_seq_of(meas_result_freq_list_geran_r16, bref, 1, 3, SeqOfPacker<Packer>(1, 8, Packer()))); + } + if (meas_result_freq_list_utra_r16_present) { + HANDLE_CODE(unpack_dyn_seq_of(meas_result_freq_list_utra_r16, bref, 1, 8)); + } + if (meas_result_scg_r16_present) { + HANDLE_CODE(meas_result_scg_r16.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void fail_report_mcg_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (fail_type_r16_present) { + j.write_str("failureType-r16", fail_type_r16.to_string()); + } + if (meas_result_freq_list_eutra_r16_present) { + j.start_array("measResultFreqListEUTRA-r16"); + for (const auto& e1 : meas_result_freq_list_eutra_r16) { + e1.to_json(j); + } + j.end_array(); + } + if (meas_result_freq_list_nr_r16_present) { + j.start_array("measResultFreqListNR-r16"); + for (const auto& e1 : meas_result_freq_list_nr_r16) { + e1.to_json(j); + } + j.end_array(); + } + if (meas_result_freq_list_geran_r16_present) { + j.start_array("measResultFreqListGERAN-r16"); + for (const auto& e1 : meas_result_freq_list_geran_r16) { + j.start_array(); + for (const auto& e2 : e1) { + e2.to_json(j); + } + j.end_array(); + } + j.end_array(); + } + if (meas_result_freq_list_utra_r16_present) { + j.start_array("measResultFreqListUTRA-r16"); + for (const auto& e1 : meas_result_freq_list_utra_r16) { + e1.to_json(j); + } + j.end_array(); + } + if (meas_result_scg_r16_present) { + j.write_str("measResultSCG-r16", meas_result_scg_r16.to_string()); + } + j.end_obj(); +} + +const char* fail_report_mcg_r16_s::fail_type_r16_opts::to_string() const +{ + static const char* options[] = { + "t310-Expiry", "randomAccessProblem", "rlc-MaxNumRetx", "t312-Expiry", "spare4", "spare3", "spare2", "spare1"}; + return convert_enum_idx(options, 8, value, "fail_report_mcg_r16_s::fail_type_r16_e_"); +} +uint16_t fail_report_mcg_r16_s::fail_type_r16_opts::to_number() const +{ + switch (value) { + case t310_expiry: + return 310; + case t312_expiry: + return 312; + default: + invalid_enum_number(value, "fail_report_mcg_r16_s::fail_type_r16_e_"); + } + return 0; +} + // FailureReportSCG-NR-r15 ::= SEQUENCE SRSASN_CODE fail_report_scg_nr_r15_s::pack(bit_ref& bref) const { @@ -4824,6 +6215,35 @@ SRSASN_CODE fail_report_scg_nr_r15_s::pack(bit_ref& bref) const HANDLE_CODE(meas_result_scg_r15.pack(bref)); } + if (ext) { + ext_groups_packer_guard group_flags; + group_flags[0] |= location_info_r16.is_present(); + group_flags[0] |= log_meas_result_list_bt_r16.is_present(); + group_flags[0] |= log_meas_result_list_wlan_r16.is_present(); + group_flags[0] |= fail_type_v1610_present; + group_flags.pack(bref); + + if (group_flags[0]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(location_info_r16.is_present(), 1)); + HANDLE_CODE(bref.pack(log_meas_result_list_bt_r16.is_present(), 1)); + HANDLE_CODE(bref.pack(log_meas_result_list_wlan_r16.is_present(), 1)); + HANDLE_CODE(bref.pack(fail_type_v1610_present, 1)); + if (location_info_r16.is_present()) { + HANDLE_CODE(location_info_r16->pack(bref)); + } + if (log_meas_result_list_bt_r16.is_present()) { + HANDLE_CODE(pack_dyn_seq_of(bref, *log_meas_result_list_bt_r16, 1, 32)); + } + if (log_meas_result_list_wlan_r16.is_present()) { + HANDLE_CODE(pack_dyn_seq_of(bref, *log_meas_result_list_wlan_r16, 1, 32)); + } + if (fail_type_v1610_present) { + HANDLE_CODE(fail_type_v1610.pack(bref)); + } + } + } return SRSASN_SUCCESS; } SRSASN_CODE fail_report_scg_nr_r15_s::unpack(cbit_ref& bref) @@ -4840,6 +6260,37 @@ SRSASN_CODE fail_report_scg_nr_r15_s::unpack(cbit_ref& bref) HANDLE_CODE(meas_result_scg_r15.unpack(bref)); } + if (ext) { + ext_groups_unpacker_guard group_flags(1); + group_flags.unpack(bref); + + if (group_flags[0]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + bool location_info_r16_present; + HANDLE_CODE(bref.unpack(location_info_r16_present, 1)); + location_info_r16.set_present(location_info_r16_present); + bool log_meas_result_list_bt_r16_present; + HANDLE_CODE(bref.unpack(log_meas_result_list_bt_r16_present, 1)); + log_meas_result_list_bt_r16.set_present(log_meas_result_list_bt_r16_present); + bool log_meas_result_list_wlan_r16_present; + HANDLE_CODE(bref.unpack(log_meas_result_list_wlan_r16_present, 1)); + log_meas_result_list_wlan_r16.set_present(log_meas_result_list_wlan_r16_present); + HANDLE_CODE(bref.unpack(fail_type_v1610_present, 1)); + if (location_info_r16.is_present()) { + HANDLE_CODE(location_info_r16->unpack(bref)); + } + if (log_meas_result_list_bt_r16.is_present()) { + HANDLE_CODE(unpack_dyn_seq_of(*log_meas_result_list_bt_r16, bref, 1, 32)); + } + if (log_meas_result_list_wlan_r16.is_present()) { + HANDLE_CODE(unpack_dyn_seq_of(*log_meas_result_list_wlan_r16, bref, 1, 32)); + } + if (fail_type_v1610_present) { + HANDLE_CODE(fail_type_v1610.unpack(bref)); + } + } + } return SRSASN_SUCCESS; } void fail_report_scg_nr_r15_s::to_json(json_writer& j) const @@ -4856,6 +6307,29 @@ void fail_report_scg_nr_r15_s::to_json(json_writer& j) const if (meas_result_scg_r15_present) { j.write_str("measResultSCG-r15", meas_result_scg_r15.to_string()); } + if (ext) { + if (location_info_r16.is_present()) { + j.write_fieldname("locationInfo-r16"); + location_info_r16->to_json(j); + } + if (log_meas_result_list_bt_r16.is_present()) { + j.start_array("logMeasResultListBT-r16"); + for (const auto& e1 : *log_meas_result_list_bt_r16) { + e1.to_json(j); + } + j.end_array(); + } + if (log_meas_result_list_wlan_r16.is_present()) { + j.start_array("logMeasResultListWLAN-r16"); + for (const auto& e1 : *log_meas_result_list_wlan_r16) { + e1.to_json(j); + } + j.end_array(); + } + if (fail_type_v1610_present) { + j.write_str("failureType-v1610", fail_type_v1610.to_string()); + } + } j.end_obj(); } @@ -4866,8 +6340,9 @@ const char* fail_report_scg_nr_r15_s::fail_type_r15_opts::to_string() const "rlc-MaxNumRetx", "synchReconfigFailureSCG", "scg-reconfigFailure", - "srb3-IntegrityFailure"}; - return convert_enum_idx(options, 6, value, "fail_report_scg_nr_r15_s::fail_type_r15_e_"); + "srb3-IntegrityFailure", + "dummy"}; + return convert_enum_idx(options, 7, value, "fail_report_scg_nr_r15_s::fail_type_r15_e_"); } uint16_t fail_report_scg_nr_r15_s::fail_type_r15_opts::to_number() const { @@ -4882,6 +6357,24 @@ uint16_t fail_report_scg_nr_r15_s::fail_type_r15_opts::to_number() const return 0; } +const char* fail_report_scg_nr_r15_s::fail_type_v1610_opts::to_string() const +{ + static const char* options[] = {"t312-Expiry", + "scg-lbtFailure", + "beamFailureRecoveryFailure", + "bh-RLF-r16", + "beamFailure-r17", + "spare3", + "spare2", + "spare1"}; + return convert_enum_idx(options, 8, value, "fail_report_scg_nr_r15_s::fail_type_v1610_e_"); +} +uint16_t fail_report_scg_nr_r15_s::fail_type_v1610_opts::to_number() const +{ + static const uint16_t options[] = {312}; + return map_enum_number(options, 1, value, "fail_report_scg_nr_r15_s::fail_type_v1610_e_"); +} + // FailureReportSCG-r12 ::= SEQUENCE SRSASN_CODE fail_report_scg_r12_s::pack(bit_ref& bref) const { @@ -5192,6 +6685,29 @@ void proximity_ind_v930_ies_s::to_json(json_writer& j) const j.end_obj(); } +// RACH-Report-r16 ::= SEQUENCE +SRSASN_CODE rach_report_r16_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(pack_integer(bref, nof_preambs_sent_r16, (uint8_t)1u, (uint8_t)200u)); + HANDLE_CODE(bref.pack(contention_detected_r16, 1)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE rach_report_r16_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(unpack_integer(nof_preambs_sent_r16, bref, (uint8_t)1u, (uint8_t)200u)); + HANDLE_CODE(bref.unpack(contention_detected_r16, 1)); + + return SRSASN_SUCCESS; +} +void rach_report_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_int("numberOfPreamblesSent-r16", nof_preambs_sent_r16); + j.write_bool("contentionDetected-r16", contention_detected_r16); + j.end_obj(); +} + // RLF-Report-r9 ::= SEQUENCE SRSASN_CODE rlf_report_r9_s::pack(bit_ref& bref) const { @@ -5242,6 +6758,13 @@ SRSASN_CODE rlf_report_r9_s::pack(bit_ref& bref) const group_flags[5] |= meas_result_last_serv_cell_v1360_present; group_flags[6] |= log_meas_result_list_bt_r15.is_present(); group_flags[6] |= log_meas_result_list_wlan_r15.is_present(); + group_flags[7] |= meas_result_list_nr_r16.is_present(); + group_flags[7] |= prev_nr_pcell_id_r16.is_present(); + group_flags[7] |= failed_nr_pcell_id_r16.is_present(); + group_flags[7] |= reconnect_cell_id_r16.is_present(); + group_flags[7] |= time_until_reconn_r16_present; + group_flags[8] |= meas_result_list_nr_v1640.is_present(); + group_flags[8] |= meas_result_list_ext_nr_r16.is_present(); group_flags.pack(bref); if (group_flags[0]) { @@ -5349,6 +6872,43 @@ SRSASN_CODE rlf_report_r9_s::pack(bit_ref& bref) const HANDLE_CODE(pack_dyn_seq_of(bref, *log_meas_result_list_wlan_r15, 1, 32)); } } + if (group_flags[7]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(meas_result_list_nr_r16.is_present(), 1)); + HANDLE_CODE(bref.pack(prev_nr_pcell_id_r16.is_present(), 1)); + HANDLE_CODE(bref.pack(failed_nr_pcell_id_r16.is_present(), 1)); + HANDLE_CODE(bref.pack(reconnect_cell_id_r16.is_present(), 1)); + HANDLE_CODE(bref.pack(time_until_reconn_r16_present, 1)); + if (meas_result_list_nr_r16.is_present()) { + HANDLE_CODE(pack_dyn_seq_of(bref, *meas_result_list_nr_r16, 1, 8)); + } + if (prev_nr_pcell_id_r16.is_present()) { + HANDLE_CODE(prev_nr_pcell_id_r16->pack(bref)); + } + if (failed_nr_pcell_id_r16.is_present()) { + HANDLE_CODE(failed_nr_pcell_id_r16->pack(bref)); + } + if (reconnect_cell_id_r16.is_present()) { + HANDLE_CODE(reconnect_cell_id_r16->pack(bref)); + } + if (time_until_reconn_r16_present) { + HANDLE_CODE(pack_integer(bref, time_until_reconn_r16, (uint32_t)0u, (uint32_t)172800u)); + } + } + if (group_flags[8]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(meas_result_list_nr_v1640.is_present(), 1)); + HANDLE_CODE(bref.pack(meas_result_list_ext_nr_r16.is_present(), 1)); + if (meas_result_list_nr_v1640.is_present()) { + HANDLE_CODE( + pack_integer(bref, meas_result_list_nr_v1640->carrier_freq_nr_r16, (uint32_t)0u, (uint32_t)3279165u)); + } + if (meas_result_list_ext_nr_r16.is_present()) { + HANDLE_CODE(pack_dyn_seq_of(bref, *meas_result_list_ext_nr_r16, 1, 7)); + } + } } return SRSASN_SUCCESS; } @@ -5382,7 +6942,7 @@ SRSASN_CODE rlf_report_r9_s::unpack(cbit_ref& bref) } if (ext) { - ext_groups_unpacker_guard group_flags(7); + ext_groups_unpacker_guard group_flags(9); group_flags.unpack(bref); if (group_flags[0]) { @@ -5517,6 +7077,55 @@ SRSASN_CODE rlf_report_r9_s::unpack(cbit_ref& bref) HANDLE_CODE(unpack_dyn_seq_of(*log_meas_result_list_wlan_r15, bref, 1, 32)); } } + if (group_flags[7]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + bool meas_result_list_nr_r16_present; + HANDLE_CODE(bref.unpack(meas_result_list_nr_r16_present, 1)); + meas_result_list_nr_r16.set_present(meas_result_list_nr_r16_present); + bool prev_nr_pcell_id_r16_present; + HANDLE_CODE(bref.unpack(prev_nr_pcell_id_r16_present, 1)); + prev_nr_pcell_id_r16.set_present(prev_nr_pcell_id_r16_present); + bool failed_nr_pcell_id_r16_present; + HANDLE_CODE(bref.unpack(failed_nr_pcell_id_r16_present, 1)); + failed_nr_pcell_id_r16.set_present(failed_nr_pcell_id_r16_present); + bool reconnect_cell_id_r16_present; + HANDLE_CODE(bref.unpack(reconnect_cell_id_r16_present, 1)); + reconnect_cell_id_r16.set_present(reconnect_cell_id_r16_present); + HANDLE_CODE(bref.unpack(time_until_reconn_r16_present, 1)); + if (meas_result_list_nr_r16.is_present()) { + HANDLE_CODE(unpack_dyn_seq_of(*meas_result_list_nr_r16, bref, 1, 8)); + } + if (prev_nr_pcell_id_r16.is_present()) { + HANDLE_CODE(prev_nr_pcell_id_r16->unpack(bref)); + } + if (failed_nr_pcell_id_r16.is_present()) { + HANDLE_CODE(failed_nr_pcell_id_r16->unpack(bref)); + } + if (reconnect_cell_id_r16.is_present()) { + HANDLE_CODE(reconnect_cell_id_r16->unpack(bref)); + } + if (time_until_reconn_r16_present) { + HANDLE_CODE(unpack_integer(time_until_reconn_r16, bref, (uint32_t)0u, (uint32_t)172800u)); + } + } + if (group_flags[8]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + bool meas_result_list_nr_v1640_present; + HANDLE_CODE(bref.unpack(meas_result_list_nr_v1640_present, 1)); + meas_result_list_nr_v1640.set_present(meas_result_list_nr_v1640_present); + bool meas_result_list_ext_nr_r16_present; + HANDLE_CODE(bref.unpack(meas_result_list_ext_nr_r16_present, 1)); + meas_result_list_ext_nr_r16.set_present(meas_result_list_ext_nr_r16_present); + if (meas_result_list_nr_v1640.is_present()) { + HANDLE_CODE( + unpack_integer(meas_result_list_nr_v1640->carrier_freq_nr_r16, bref, (uint32_t)0u, (uint32_t)3279165u)); + } + if (meas_result_list_ext_nr_r16.is_present()) { + HANDLE_CODE(unpack_dyn_seq_of(*meas_result_list_ext_nr_r16, bref, 1, 7)); + } + } } return SRSASN_SUCCESS; } @@ -5660,6 +7269,41 @@ void rlf_report_r9_s::to_json(json_writer& j) const } j.end_array(); } + if (meas_result_list_nr_r16.is_present()) { + j.start_array("measResultListNR-r16"); + for (const auto& e1 : *meas_result_list_nr_r16) { + e1.to_json(j); + } + j.end_array(); + } + if (prev_nr_pcell_id_r16.is_present()) { + j.write_fieldname("previousNR-PCellId-r16"); + prev_nr_pcell_id_r16->to_json(j); + } + if (failed_nr_pcell_id_r16.is_present()) { + j.write_fieldname("failedNR-PCellId-r16"); + failed_nr_pcell_id_r16->to_json(j); + } + if (reconnect_cell_id_r16.is_present()) { + j.write_fieldname("reconnectCellId-r16"); + reconnect_cell_id_r16->to_json(j); + } + if (time_until_reconn_r16_present) { + j.write_int("timeUntilReconnection-r16", time_until_reconn_r16); + } + if (meas_result_list_nr_v1640.is_present()) { + j.write_fieldname("measResultListNR-v1640"); + j.start_obj(); + j.write_int("carrierFreqNR-r16", meas_result_list_nr_v1640->carrier_freq_nr_r16); + j.end_obj(); + } + if (meas_result_list_ext_nr_r16.is_present()) { + j.start_array("measResultListExtNR-r16"); + for (const auto& e1 : *meas_result_list_ext_nr_r16) { + e1.to_json(j); + } + j.end_array(); + } } j.end_obj(); } @@ -6033,6 +7677,299 @@ SRSASN_CODE rlf_report_r9_s::sel_utra_cell_id_r11_s_::pci_r11_c_::unpack(cbit_re return SRSASN_SUCCESS; } +void rlf_report_r9_s::failed_nr_pcell_id_r16_c_::destroy_() +{ + switch (type_) { + case types::cell_global_id: + c.destroy<cell_global_id_nr_r16_s>(); + break; + case types::pci_arfcn: + c.destroy<pci_arfcn_s_>(); + break; + default: + break; + } +} +void rlf_report_r9_s::failed_nr_pcell_id_r16_c_::set(types::options e) +{ + destroy_(); + type_ = e; + switch (type_) { + case types::cell_global_id: + c.init<cell_global_id_nr_r16_s>(); + break; + case types::pci_arfcn: + c.init<pci_arfcn_s_>(); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "rlf_report_r9_s::failed_nr_pcell_id_r16_c_"); + } +} +rlf_report_r9_s::failed_nr_pcell_id_r16_c_::failed_nr_pcell_id_r16_c_( + const rlf_report_r9_s::failed_nr_pcell_id_r16_c_& other) +{ + type_ = other.type(); + switch (type_) { + case types::cell_global_id: + c.init(other.c.get<cell_global_id_nr_r16_s>()); + break; + case types::pci_arfcn: + c.init(other.c.get<pci_arfcn_s_>()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "rlf_report_r9_s::failed_nr_pcell_id_r16_c_"); + } +} +rlf_report_r9_s::failed_nr_pcell_id_r16_c_& +rlf_report_r9_s::failed_nr_pcell_id_r16_c_::operator=(const rlf_report_r9_s::failed_nr_pcell_id_r16_c_& other) +{ + if (this == &other) { + return *this; + } + set(other.type()); + switch (type_) { + case types::cell_global_id: + c.set(other.c.get<cell_global_id_nr_r16_s>()); + break; + case types::pci_arfcn: + c.set(other.c.get<pci_arfcn_s_>()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "rlf_report_r9_s::failed_nr_pcell_id_r16_c_"); + } + + return *this; +} +cell_global_id_nr_r16_s& rlf_report_r9_s::failed_nr_pcell_id_r16_c_::set_cell_global_id() +{ + set(types::cell_global_id); + return c.get<cell_global_id_nr_r16_s>(); +} +rlf_report_r9_s::failed_nr_pcell_id_r16_c_::pci_arfcn_s_& rlf_report_r9_s::failed_nr_pcell_id_r16_c_::set_pci_arfcn() +{ + set(types::pci_arfcn); + return c.get<pci_arfcn_s_>(); +} +void rlf_report_r9_s::failed_nr_pcell_id_r16_c_::to_json(json_writer& j) const +{ + j.start_obj(); + switch (type_) { + case types::cell_global_id: + j.write_fieldname("cellGlobalId"); + c.get<cell_global_id_nr_r16_s>().to_json(j); + break; + case types::pci_arfcn: + j.write_fieldname("pci-arfcn"); + j.start_obj(); + j.write_int("physCellId-r16", c.get<pci_arfcn_s_>().pci_r16); + j.write_int("carrierFreq-r16", c.get<pci_arfcn_s_>().carrier_freq_r16); + j.end_obj(); + break; + default: + log_invalid_choice_id(type_, "rlf_report_r9_s::failed_nr_pcell_id_r16_c_"); + } + j.end_obj(); +} +SRSASN_CODE rlf_report_r9_s::failed_nr_pcell_id_r16_c_::pack(bit_ref& bref) const +{ + type_.pack(bref); + switch (type_) { + case types::cell_global_id: + HANDLE_CODE(c.get<cell_global_id_nr_r16_s>().pack(bref)); + break; + case types::pci_arfcn: + HANDLE_CODE(pack_integer(bref, c.get<pci_arfcn_s_>().pci_r16, (uint16_t)0u, (uint16_t)1007u)); + HANDLE_CODE(pack_integer(bref, c.get<pci_arfcn_s_>().carrier_freq_r16, (uint32_t)0u, (uint32_t)3279165u)); + break; + default: + log_invalid_choice_id(type_, "rlf_report_r9_s::failed_nr_pcell_id_r16_c_"); + return SRSASN_ERROR_ENCODE_FAIL; + } + return SRSASN_SUCCESS; +} +SRSASN_CODE rlf_report_r9_s::failed_nr_pcell_id_r16_c_::unpack(cbit_ref& bref) +{ + types e; + e.unpack(bref); + set(e); + switch (type_) { + case types::cell_global_id: + HANDLE_CODE(c.get<cell_global_id_nr_r16_s>().unpack(bref)); + break; + case types::pci_arfcn: + HANDLE_CODE(unpack_integer(c.get<pci_arfcn_s_>().pci_r16, bref, (uint16_t)0u, (uint16_t)1007u)); + HANDLE_CODE(unpack_integer(c.get<pci_arfcn_s_>().carrier_freq_r16, bref, (uint32_t)0u, (uint32_t)3279165u)); + break; + default: + log_invalid_choice_id(type_, "rlf_report_r9_s::failed_nr_pcell_id_r16_c_"); + return SRSASN_ERROR_DECODE_FAIL; + } + return SRSASN_SUCCESS; +} + +void rlf_report_r9_s::reconnect_cell_id_r16_c_::destroy_() +{ + switch (type_) { + case types::nr_reconnect_cell_id: + c.destroy<cell_global_id_nr_r16_s>(); + break; + case types::eutra_reconnect_cell_id: + c.destroy<eutra_reconnect_cell_id_s_>(); + break; + default: + break; + } +} +void rlf_report_r9_s::reconnect_cell_id_r16_c_::set(types::options e) +{ + destroy_(); + type_ = e; + switch (type_) { + case types::nr_reconnect_cell_id: + c.init<cell_global_id_nr_r16_s>(); + break; + case types::eutra_reconnect_cell_id: + c.init<eutra_reconnect_cell_id_s_>(); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "rlf_report_r9_s::reconnect_cell_id_r16_c_"); + } +} +rlf_report_r9_s::reconnect_cell_id_r16_c_::reconnect_cell_id_r16_c_( + const rlf_report_r9_s::reconnect_cell_id_r16_c_& other) +{ + type_ = other.type(); + switch (type_) { + case types::nr_reconnect_cell_id: + c.init(other.c.get<cell_global_id_nr_r16_s>()); + break; + case types::eutra_reconnect_cell_id: + c.init(other.c.get<eutra_reconnect_cell_id_s_>()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "rlf_report_r9_s::reconnect_cell_id_r16_c_"); + } +} +rlf_report_r9_s::reconnect_cell_id_r16_c_& +rlf_report_r9_s::reconnect_cell_id_r16_c_::operator=(const rlf_report_r9_s::reconnect_cell_id_r16_c_& other) +{ + if (this == &other) { + return *this; + } + set(other.type()); + switch (type_) { + case types::nr_reconnect_cell_id: + c.set(other.c.get<cell_global_id_nr_r16_s>()); + break; + case types::eutra_reconnect_cell_id: + c.set(other.c.get<eutra_reconnect_cell_id_s_>()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "rlf_report_r9_s::reconnect_cell_id_r16_c_"); + } + + return *this; +} +cell_global_id_nr_r16_s& rlf_report_r9_s::reconnect_cell_id_r16_c_::set_nr_reconnect_cell_id() +{ + set(types::nr_reconnect_cell_id); + return c.get<cell_global_id_nr_r16_s>(); +} +rlf_report_r9_s::reconnect_cell_id_r16_c_::eutra_reconnect_cell_id_s_& +rlf_report_r9_s::reconnect_cell_id_r16_c_::set_eutra_reconnect_cell_id() +{ + set(types::eutra_reconnect_cell_id); + return c.get<eutra_reconnect_cell_id_s_>(); +} +void rlf_report_r9_s::reconnect_cell_id_r16_c_::to_json(json_writer& j) const +{ + j.start_obj(); + switch (type_) { + case types::nr_reconnect_cell_id: + j.write_fieldname("nrReconnectCellId"); + c.get<cell_global_id_nr_r16_s>().to_json(j); + break; + case types::eutra_reconnect_cell_id: + j.write_fieldname("eutraReconnectCellId"); + j.start_obj(); + j.write_fieldname("cellGlobalId-r16"); + c.get<eutra_reconnect_cell_id_s_>().cell_global_id_r16.to_json(j); + if (c.get<eutra_reconnect_cell_id_s_>().tac_epc_r16_present) { + j.write_str("trackingAreaCode-EPC-r16", c.get<eutra_reconnect_cell_id_s_>().tac_epc_r16.to_string()); + } + if (c.get<eutra_reconnect_cell_id_s_>().tac_minus5_gc_r16_present) { + j.write_str("trackingAreaCode-5GC-r16", c.get<eutra_reconnect_cell_id_s_>().tac_minus5_gc_r16.to_string()); + } + j.end_obj(); + break; + default: + log_invalid_choice_id(type_, "rlf_report_r9_s::reconnect_cell_id_r16_c_"); + } + j.end_obj(); +} +SRSASN_CODE rlf_report_r9_s::reconnect_cell_id_r16_c_::pack(bit_ref& bref) const +{ + type_.pack(bref); + switch (type_) { + case types::nr_reconnect_cell_id: + HANDLE_CODE(c.get<cell_global_id_nr_r16_s>().pack(bref)); + break; + case types::eutra_reconnect_cell_id: + HANDLE_CODE(bref.pack(c.get<eutra_reconnect_cell_id_s_>().tac_epc_r16_present, 1)); + HANDLE_CODE(bref.pack(c.get<eutra_reconnect_cell_id_s_>().tac_minus5_gc_r16_present, 1)); + HANDLE_CODE(c.get<eutra_reconnect_cell_id_s_>().cell_global_id_r16.pack(bref)); + if (c.get<eutra_reconnect_cell_id_s_>().tac_epc_r16_present) { + HANDLE_CODE(c.get<eutra_reconnect_cell_id_s_>().tac_epc_r16.pack(bref)); + } + if (c.get<eutra_reconnect_cell_id_s_>().tac_minus5_gc_r16_present) { + HANDLE_CODE(c.get<eutra_reconnect_cell_id_s_>().tac_minus5_gc_r16.pack(bref)); + } + break; + default: + log_invalid_choice_id(type_, "rlf_report_r9_s::reconnect_cell_id_r16_c_"); + return SRSASN_ERROR_ENCODE_FAIL; + } + return SRSASN_SUCCESS; +} +SRSASN_CODE rlf_report_r9_s::reconnect_cell_id_r16_c_::unpack(cbit_ref& bref) +{ + types e; + e.unpack(bref); + set(e); + switch (type_) { + case types::nr_reconnect_cell_id: + HANDLE_CODE(c.get<cell_global_id_nr_r16_s>().unpack(bref)); + break; + case types::eutra_reconnect_cell_id: + HANDLE_CODE(bref.unpack(c.get<eutra_reconnect_cell_id_s_>().tac_epc_r16_present, 1)); + HANDLE_CODE(bref.unpack(c.get<eutra_reconnect_cell_id_s_>().tac_minus5_gc_r16_present, 1)); + HANDLE_CODE(c.get<eutra_reconnect_cell_id_s_>().cell_global_id_r16.unpack(bref)); + if (c.get<eutra_reconnect_cell_id_s_>().tac_epc_r16_present) { + HANDLE_CODE(c.get<eutra_reconnect_cell_id_s_>().tac_epc_r16.unpack(bref)); + } + if (c.get<eutra_reconnect_cell_id_s_>().tac_minus5_gc_r16_present) { + HANDLE_CODE(c.get<eutra_reconnect_cell_id_s_>().tac_minus5_gc_r16.unpack(bref)); + } + break; + default: + log_invalid_choice_id(type_, "rlf_report_r9_s::reconnect_cell_id_r16_c_"); + return SRSASN_ERROR_DECODE_FAIL; + } + return SRSASN_SUCCESS; +} + // RRCConnectionReconfigurationComplete-v8a0-IEs ::= SEQUENCE SRSASN_CODE rrc_conn_recfg_complete_v8a0_ies_s::pack(bit_ref& bref) const { @@ -6120,6 +8057,10 @@ SRSASN_CODE rrc_conn_resume_complete_v1530_ies_s::pack(bit_ref& bref) const HANDLE_CODE(bref.pack(flight_path_info_available_r15_present, 1)); HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } + return SRSASN_SUCCESS; } SRSASN_CODE rrc_conn_resume_complete_v1530_ies_s::unpack(cbit_ref& bref) @@ -6130,6 +8071,10 @@ SRSASN_CODE rrc_conn_resume_complete_v1530_ies_s::unpack(cbit_ref& bref) HANDLE_CODE(bref.unpack(flight_path_info_available_r15_present, 1)); HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } + return SRSASN_SUCCESS; } void rrc_conn_resume_complete_v1530_ies_s::to_json(json_writer& j) const @@ -6149,8 +8094,7 @@ void rrc_conn_resume_complete_v1530_ies_s::to_json(json_writer& j) const } if (non_crit_ext_present) { j.write_fieldname("nonCriticalExtension"); - j.start_obj(); - j.end_obj(); + non_crit_ext.to_json(j); } j.end_obj(); } @@ -7081,6 +9025,61 @@ const char* failed_lc_ch_info_r15_s::fail_type_opts::to_string() const return convert_enum_idx(options, 4, value, "failed_lc_ch_info_r15_s::fail_type_e_"); } +// FailureInformation-r16-IEs ::= SEQUENCE +SRSASN_CODE fail_info_r16_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(failed_lc_ch_id_r16_present, 1)); + HANDLE_CODE(bref.pack(fail_type_r16_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + if (failed_lc_ch_id_r16_present) { + HANDLE_CODE(failed_lc_ch_id_r16.pack(bref)); + } + if (fail_type_r16_present) { + HANDLE_CODE(fail_type_r16.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE fail_info_r16_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(failed_lc_ch_id_r16_present, 1)); + HANDLE_CODE(bref.unpack(fail_type_r16_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + if (failed_lc_ch_id_r16_present) { + HANDLE_CODE(failed_lc_ch_id_r16.unpack(bref)); + } + if (fail_type_r16_present) { + HANDLE_CODE(fail_type_r16.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void fail_info_r16_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (failed_lc_ch_id_r16_present) { + j.write_fieldname("failedLogicalChannelIdentity-r16"); + failed_lc_ch_id_r16.to_json(j); + } + if (fail_type_r16_present) { + j.write_str("failureType-r16", fail_type_r16.to_string()); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + j.start_obj(); + j.end_obj(); + } + j.end_obj(); +} + +const char* fail_info_r16_ies_s::fail_type_r16_opts::to_string() const +{ + static const char* options[] = {"duplication", "dapsHO-failure", "spare2", "spare1"}; + return convert_enum_idx(options, 4, value, "fail_info_r16_ies_s::fail_type_r16_e_"); +} + // InDeviceCoexIndication-r11-IEs ::= SEQUENCE SRSASN_CODE in_dev_coex_ind_r11_ies_s::pack(bit_ref& bref) const { @@ -7384,6 +9383,55 @@ void mbms_interest_ind_r11_ies_s::to_json(json_writer& j) const j.end_obj(); } +// MCGFailureInformation-r16-IEs ::= SEQUENCE +SRSASN_CODE mcg_fail_info_r16_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(fail_report_mcg_r16_present, 1)); + HANDLE_CODE(bref.pack(late_non_crit_ext_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + if (fail_report_mcg_r16_present) { + HANDLE_CODE(fail_report_mcg_r16.pack(bref)); + } + if (late_non_crit_ext_present) { + HANDLE_CODE(late_non_crit_ext.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE mcg_fail_info_r16_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(fail_report_mcg_r16_present, 1)); + HANDLE_CODE(bref.unpack(late_non_crit_ext_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + if (fail_report_mcg_r16_present) { + HANDLE_CODE(fail_report_mcg_r16.unpack(bref)); + } + if (late_non_crit_ext_present) { + HANDLE_CODE(late_non_crit_ext.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void mcg_fail_info_r16_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (fail_report_mcg_r16_present) { + j.write_fieldname("failureReportMCG-r16"); + fail_report_mcg_r16.to_json(j); + } + if (late_non_crit_ext_present) { + j.write_str("lateNonCriticalExtension", late_non_crit_ext.to_string()); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + j.start_obj(); + j.end_obj(); + } + j.end_obj(); +} + // MeasReportAppLayer-r15-IEs ::= SEQUENCE SRSASN_CODE meas_report_app_layer_r15_ies_s::pack(bit_ref& bref) const { @@ -7443,6 +9491,193 @@ const char* meas_report_app_layer_r15_ies_s::service_type_r15_opts::to_string() return convert_enum_idx(options, 8, value, "meas_report_app_layer_r15_ies_s::service_type_r15_e_"); } +// PURConfigurationRequest-r16-IEs ::= SEQUENCE +SRSASN_CODE pur_cfg_request_r16_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(pur_cfg_request_r16_present, 1)); + HANDLE_CODE(bref.pack(late_non_crit_ext_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + if (pur_cfg_request_r16_present) { + HANDLE_CODE(pur_cfg_request_r16.pack(bref)); + } + if (late_non_crit_ext_present) { + HANDLE_CODE(late_non_crit_ext.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE pur_cfg_request_r16_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(pur_cfg_request_r16_present, 1)); + HANDLE_CODE(bref.unpack(late_non_crit_ext_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + if (pur_cfg_request_r16_present) { + HANDLE_CODE(pur_cfg_request_r16.unpack(bref)); + } + if (late_non_crit_ext_present) { + HANDLE_CODE(late_non_crit_ext.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void pur_cfg_request_r16_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (pur_cfg_request_r16_present) { + j.write_fieldname("pur-ConfigRequest-r16"); + pur_cfg_request_r16.to_json(j); + } + if (late_non_crit_ext_present) { + j.write_str("lateNonCriticalExtension", late_non_crit_ext.to_string()); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + j.start_obj(); + j.end_obj(); + } + j.end_obj(); +} + +void pur_cfg_request_r16_ies_s::pur_cfg_request_r16_c_::set(types::options e) +{ + type_ = e; +} +void pur_cfg_request_r16_ies_s::pur_cfg_request_r16_c_::set_pur_release_request() +{ + set(types::pur_release_request); +} +pur_cfg_request_r16_ies_s::pur_cfg_request_r16_c_::pur_setup_request_s_& +pur_cfg_request_r16_ies_s::pur_cfg_request_r16_c_::set_pur_setup_request() +{ + set(types::pur_setup_request); + return c; +} +void pur_cfg_request_r16_ies_s::pur_cfg_request_r16_c_::to_json(json_writer& j) const +{ + j.start_obj(); + switch (type_) { + case types::pur_release_request: + break; + case types::pur_setup_request: + j.write_fieldname("pur-SetupRequest"); + j.start_obj(); + j.write_str("requestedNumOccasions-r16", c.requested_num_occasions_r16.to_string()); + if (c.requested_periodicity_and_offset_r16_present) { + j.write_fieldname("requestedPeriodicityAndOffset-r16"); + c.requested_periodicity_and_offset_r16.to_json(j); + } + j.write_str("requestedTBS-r16", c.requested_tbs_r16.to_string()); + if (c.rrc_ack_r16_present) { + j.write_str("rrc-ACK-r16", "true"); + } + j.end_obj(); + break; + default: + log_invalid_choice_id(type_, "pur_cfg_request_r16_ies_s::pur_cfg_request_r16_c_"); + } + j.end_obj(); +} +SRSASN_CODE pur_cfg_request_r16_ies_s::pur_cfg_request_r16_c_::pack(bit_ref& bref) const +{ + type_.pack(bref); + switch (type_) { + case types::pur_release_request: + break; + case types::pur_setup_request: + HANDLE_CODE(bref.pack(c.requested_periodicity_and_offset_r16_present, 1)); + HANDLE_CODE(bref.pack(c.rrc_ack_r16_present, 1)); + HANDLE_CODE(c.requested_num_occasions_r16.pack(bref)); + if (c.requested_periodicity_and_offset_r16_present) { + HANDLE_CODE(c.requested_periodicity_and_offset_r16.pack(bref)); + } + HANDLE_CODE(c.requested_tbs_r16.pack(bref)); + break; + default: + log_invalid_choice_id(type_, "pur_cfg_request_r16_ies_s::pur_cfg_request_r16_c_"); + return SRSASN_ERROR_ENCODE_FAIL; + } + return SRSASN_SUCCESS; +} +SRSASN_CODE pur_cfg_request_r16_ies_s::pur_cfg_request_r16_c_::unpack(cbit_ref& bref) +{ + types e; + e.unpack(bref); + set(e); + switch (type_) { + case types::pur_release_request: + break; + case types::pur_setup_request: + HANDLE_CODE(bref.unpack(c.requested_periodicity_and_offset_r16_present, 1)); + HANDLE_CODE(bref.unpack(c.rrc_ack_r16_present, 1)); + HANDLE_CODE(c.requested_num_occasions_r16.unpack(bref)); + if (c.requested_periodicity_and_offset_r16_present) { + HANDLE_CODE(c.requested_periodicity_and_offset_r16.unpack(bref)); + } + HANDLE_CODE(c.requested_tbs_r16.unpack(bref)); + break; + default: + log_invalid_choice_id(type_, "pur_cfg_request_r16_ies_s::pur_cfg_request_r16_c_"); + return SRSASN_ERROR_DECODE_FAIL; + } + return SRSASN_SUCCESS; +} + +const char* +pur_cfg_request_r16_ies_s::pur_cfg_request_r16_c_::pur_setup_request_s_::requested_num_occasions_r16_opts::to_string() + const +{ + static const char* options[] = {"one", "infinite"}; + return convert_enum_idx( + options, + 2, + value, + "pur_cfg_request_r16_ies_s::pur_cfg_request_r16_c_::pur_setup_request_s_::requested_num_occasions_r16_e_"); +} +uint8_t +pur_cfg_request_r16_ies_s::pur_cfg_request_r16_c_::pur_setup_request_s_::requested_num_occasions_r16_opts::to_number() + const +{ + static const uint8_t options[] = {1}; + return map_enum_number( + options, + 1, + value, + "pur_cfg_request_r16_ies_s::pur_cfg_request_r16_c_::pur_setup_request_s_::requested_num_occasions_r16_e_"); +} + +const char* +pur_cfg_request_r16_ies_s::pur_cfg_request_r16_c_::pur_setup_request_s_::requested_tbs_r16_opts::to_string() const +{ + static const char* options[] = { + "b328", "b344", "b376", "b392", "b408", "b424", "b440", "b456", "b472", "b488", "b504", + "b536", "b568", "b584", "b616", "b648", "b680", "b712", "b744", "b776", "b808", "b840", + "b872", "b904", "b936", "b968", "b1000", "b1032", "b1064", "b1096", "b1128", "b1160", "b1192", + "b1224", "b1256", "b1288", "b1320", "b1352", "b1384", "b1416", "b1480", "b1544", "b1608", "b1672", + "b1736", "b1800", "b1864", "b1928", "b1992", "b2024", "b2088", "b2152", "b2216", "b2280", "b2344", + "b2408", "b2472", "b2536", "b2600", "b2664", "b2728", "b2792", "b2856", "b2984"}; + return convert_enum_idx( + options, + 64, + value, + "pur_cfg_request_r16_ies_s::pur_cfg_request_r16_c_::pur_setup_request_s_::requested_tbs_r16_e_"); +} +uint16_t +pur_cfg_request_r16_ies_s::pur_cfg_request_r16_c_::pur_setup_request_s_::requested_tbs_r16_opts::to_number() const +{ + static const uint16_t options[] = {328, 344, 376, 392, 408, 424, 440, 456, 472, 488, 504, 536, 568, + 584, 616, 648, 680, 712, 744, 776, 808, 840, 872, 904, 936, 968, + 1000, 1032, 1064, 1096, 1128, 1160, 1192, 1224, 1256, 1288, 1320, 1352, 1384, + 1416, 1480, 1544, 1608, 1672, 1736, 1800, 1864, 1928, 1992, 2024, 2088, 2152, + 2216, 2280, 2344, 2408, 2472, 2536, 2600, 2664, 2728, 2792, 2856, 2984}; + return map_enum_number( + options, + 64, + value, + "pur_cfg_request_r16_ies_s::pur_cfg_request_r16_c_::pur_setup_request_s_::requested_tbs_r16_e_"); +} + // ProximityIndication-r9-IEs ::= SEQUENCE SRSASN_CODE proximity_ind_r9_ies_s::pack(bit_ref& bref) const { @@ -8101,8 +10336,7 @@ SRSASN_CODE ue_info_resp_r9_ies_s::pack(bit_ref& bref) const HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); if (rach_report_r9_present) { - HANDLE_CODE(pack_integer(bref, rach_report_r9.nof_preambs_sent_r9, (uint8_t)1u, (uint8_t)200u)); - HANDLE_CODE(bref.pack(rach_report_r9.contention_detected_r9, 1)); + HANDLE_CODE(rach_report_r9.pack(bref)); } if (rlf_report_r9_present) { HANDLE_CODE(rlf_report_r9.pack(bref)); @@ -8120,8 +10354,7 @@ SRSASN_CODE ue_info_resp_r9_ies_s::unpack(cbit_ref& bref) HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); if (rach_report_r9_present) { - HANDLE_CODE(unpack_integer(rach_report_r9.nof_preambs_sent_r9, bref, (uint8_t)1u, (uint8_t)200u)); - HANDLE_CODE(bref.unpack(rach_report_r9.contention_detected_r9, 1)); + HANDLE_CODE(rach_report_r9.unpack(bref)); } if (rlf_report_r9_present) { HANDLE_CODE(rlf_report_r9.unpack(bref)); @@ -8137,10 +10370,7 @@ void ue_info_resp_r9_ies_s::to_json(json_writer& j) const j.start_obj(); if (rach_report_r9_present) { j.write_fieldname("rach-Report-r9"); - j.start_obj(); - j.write_int("numberOfPreamblesSent-r9", rach_report_r9.nof_preambs_sent_r9); - j.write_bool("contentionDetected-r9", rach_report_r9.contention_detected_r9); - j.end_obj(); + rach_report_r9.to_json(j); } if (rlf_report_r9_present) { j.write_fieldname("rlf-Report-r9"); @@ -8153,6 +10383,58 @@ void ue_info_resp_r9_ies_s::to_json(json_writer& j) const j.end_obj(); } +// ULDedicatedMessageSegment-r16-IEs ::= SEQUENCE +SRSASN_CODE ul_ded_msg_segment_r16_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(late_non_crit_ext_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + HANDLE_CODE(pack_integer(bref, segment_num_r16, (uint8_t)0u, (uint8_t)15u)); + HANDLE_CODE(rrc_msg_segment_container_r16.pack(bref)); + HANDLE_CODE(rrc_msg_segment_type_r16.pack(bref)); + if (late_non_crit_ext_present) { + HANDLE_CODE(late_non_crit_ext.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE ul_ded_msg_segment_r16_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(late_non_crit_ext_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + HANDLE_CODE(unpack_integer(segment_num_r16, bref, (uint8_t)0u, (uint8_t)15u)); + HANDLE_CODE(rrc_msg_segment_container_r16.unpack(bref)); + HANDLE_CODE(rrc_msg_segment_type_r16.unpack(bref)); + if (late_non_crit_ext_present) { + HANDLE_CODE(late_non_crit_ext.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void ul_ded_msg_segment_r16_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_int("segmentNumber-r16", segment_num_r16); + j.write_str("rrc-MessageSegmentContainer-r16", rrc_msg_segment_container_r16.to_string()); + j.write_str("rrc-MessageSegmentType-r16", rrc_msg_segment_type_r16.to_string()); + if (late_non_crit_ext_present) { + j.write_str("lateNonCriticalExtension", late_non_crit_ext.to_string()); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + j.start_obj(); + j.end_obj(); + } + j.end_obj(); +} + +const char* ul_ded_msg_segment_r16_ies_s::rrc_msg_segment_type_r16_opts::to_string() const +{ + static const char* options[] = {"notLastSegment", "lastSegment"}; + return convert_enum_idx(options, 2, value, "ul_ded_msg_segment_r16_ies_s::rrc_msg_segment_type_r16_e_"); +} + // ULHandoverPreparationTransfer-r8-IEs ::= SEQUENCE SRSASN_CODE ul_ho_prep_transfer_r8_ies_s::pack(bit_ref& bref) const { @@ -8201,6 +10483,215 @@ void ul_ho_prep_transfer_r8_ies_s::to_json(json_writer& j) const j.end_obj(); } +// ULInformationTransfer-r16-IEs ::= SEQUENCE +SRSASN_CODE ul_info_transfer_r16_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(ded_info_type_r16_present, 1)); + HANDLE_CODE(bref.pack(ded_info_f1c_r16_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + if (ded_info_type_r16_present) { + HANDLE_CODE(ded_info_type_r16.pack(bref)); + } + if (ded_info_f1c_r16_present) { + HANDLE_CODE(ded_info_f1c_r16.pack(bref)); + } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE ul_info_transfer_r16_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(ded_info_type_r16_present, 1)); + HANDLE_CODE(bref.unpack(ded_info_f1c_r16_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + if (ded_info_type_r16_present) { + HANDLE_CODE(ded_info_type_r16.unpack(bref)); + } + if (ded_info_f1c_r16_present) { + HANDLE_CODE(ded_info_f1c_r16.unpack(bref)); + } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void ul_info_transfer_r16_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (ded_info_type_r16_present) { + j.write_fieldname("dedicatedInfoType-r16"); + ded_info_type_r16.to_json(j); + } + if (ded_info_f1c_r16_present) { + j.write_str("dedicatedInfoF1c-r16", ded_info_f1c_r16.to_string()); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + non_crit_ext.to_json(j); + } + j.end_obj(); +} + +void ul_info_transfer_r16_ies_s::ded_info_type_r16_c_::destroy_() +{ + switch (type_) { + case types::ded_info_nas_r16: + c.destroy<dyn_octstring>(); + break; + case types::ded_info_cdma2000_minus1_xrtt_r16: + c.destroy<dyn_octstring>(); + break; + case types::ded_info_cdma2000_hrpd_r16: + c.destroy<dyn_octstring>(); + break; + default: + break; + } +} +void ul_info_transfer_r16_ies_s::ded_info_type_r16_c_::set(types::options e) +{ + destroy_(); + type_ = e; + switch (type_) { + case types::ded_info_nas_r16: + c.init<dyn_octstring>(); + break; + case types::ded_info_cdma2000_minus1_xrtt_r16: + c.init<dyn_octstring>(); + break; + case types::ded_info_cdma2000_hrpd_r16: + c.init<dyn_octstring>(); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "ul_info_transfer_r16_ies_s::ded_info_type_r16_c_"); + } +} +ul_info_transfer_r16_ies_s::ded_info_type_r16_c_::ded_info_type_r16_c_( + const ul_info_transfer_r16_ies_s::ded_info_type_r16_c_& other) +{ + type_ = other.type(); + switch (type_) { + case types::ded_info_nas_r16: + c.init(other.c.get<dyn_octstring>()); + break; + case types::ded_info_cdma2000_minus1_xrtt_r16: + c.init(other.c.get<dyn_octstring>()); + break; + case types::ded_info_cdma2000_hrpd_r16: + c.init(other.c.get<dyn_octstring>()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "ul_info_transfer_r16_ies_s::ded_info_type_r16_c_"); + } +} +ul_info_transfer_r16_ies_s::ded_info_type_r16_c_& ul_info_transfer_r16_ies_s::ded_info_type_r16_c_::operator=( + const ul_info_transfer_r16_ies_s::ded_info_type_r16_c_& other) +{ + if (this == &other) { + return *this; + } + set(other.type()); + switch (type_) { + case types::ded_info_nas_r16: + c.set(other.c.get<dyn_octstring>()); + break; + case types::ded_info_cdma2000_minus1_xrtt_r16: + c.set(other.c.get<dyn_octstring>()); + break; + case types::ded_info_cdma2000_hrpd_r16: + c.set(other.c.get<dyn_octstring>()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "ul_info_transfer_r16_ies_s::ded_info_type_r16_c_"); + } + + return *this; +} +dyn_octstring& ul_info_transfer_r16_ies_s::ded_info_type_r16_c_::set_ded_info_nas_r16() +{ + set(types::ded_info_nas_r16); + return c.get<dyn_octstring>(); +} +dyn_octstring& ul_info_transfer_r16_ies_s::ded_info_type_r16_c_::set_ded_info_cdma2000_minus1_xrtt_r16() +{ + set(types::ded_info_cdma2000_minus1_xrtt_r16); + return c.get<dyn_octstring>(); +} +dyn_octstring& ul_info_transfer_r16_ies_s::ded_info_type_r16_c_::set_ded_info_cdma2000_hrpd_r16() +{ + set(types::ded_info_cdma2000_hrpd_r16); + return c.get<dyn_octstring>(); +} +void ul_info_transfer_r16_ies_s::ded_info_type_r16_c_::to_json(json_writer& j) const +{ + j.start_obj(); + switch (type_) { + case types::ded_info_nas_r16: + j.write_str("dedicatedInfoNAS-r16", c.get<dyn_octstring>().to_string()); + break; + case types::ded_info_cdma2000_minus1_xrtt_r16: + j.write_str("dedicatedInfoCDMA2000-1XRTT-r16", c.get<dyn_octstring>().to_string()); + break; + case types::ded_info_cdma2000_hrpd_r16: + j.write_str("dedicatedInfoCDMA2000-HRPD-r16", c.get<dyn_octstring>().to_string()); + break; + default: + log_invalid_choice_id(type_, "ul_info_transfer_r16_ies_s::ded_info_type_r16_c_"); + } + j.end_obj(); +} +SRSASN_CODE ul_info_transfer_r16_ies_s::ded_info_type_r16_c_::pack(bit_ref& bref) const +{ + type_.pack(bref); + switch (type_) { + case types::ded_info_nas_r16: + HANDLE_CODE(c.get<dyn_octstring>().pack(bref)); + break; + case types::ded_info_cdma2000_minus1_xrtt_r16: + HANDLE_CODE(c.get<dyn_octstring>().pack(bref)); + break; + case types::ded_info_cdma2000_hrpd_r16: + HANDLE_CODE(c.get<dyn_octstring>().pack(bref)); + break; + default: + log_invalid_choice_id(type_, "ul_info_transfer_r16_ies_s::ded_info_type_r16_c_"); + return SRSASN_ERROR_ENCODE_FAIL; + } + return SRSASN_SUCCESS; +} +SRSASN_CODE ul_info_transfer_r16_ies_s::ded_info_type_r16_c_::unpack(cbit_ref& bref) +{ + types e; + e.unpack(bref); + set(e); + switch (type_) { + case types::ded_info_nas_r16: + HANDLE_CODE(c.get<dyn_octstring>().unpack(bref)); + break; + case types::ded_info_cdma2000_minus1_xrtt_r16: + HANDLE_CODE(c.get<dyn_octstring>().unpack(bref)); + break; + case types::ded_info_cdma2000_hrpd_r16: + HANDLE_CODE(c.get<dyn_octstring>().unpack(bref)); + break; + default: + log_invalid_choice_id(type_, "ul_info_transfer_r16_ies_s::ded_info_type_r16_c_"); + return SRSASN_ERROR_DECODE_FAIL; + } + return SRSASN_SUCCESS; +} + // ULInformationTransfer-r8-IEs ::= SEQUENCE SRSASN_CODE ul_info_transfer_r8_ies_s::pack(bit_ref& bref) const { @@ -8390,6 +10881,54 @@ SRSASN_CODE ul_info_transfer_r8_ies_s::ded_info_type_c_::unpack(cbit_ref& bref) return SRSASN_SUCCESS; } +// ULInformationTransferIRAT-r16-IEs ::= SEQUENCE +SRSASN_CODE ul_info_transfer_irat_r16_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(ul_dcch_msg_nr_r16_present, 1)); + HANDLE_CODE(bref.pack(late_non_crit_ext_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + if (ul_dcch_msg_nr_r16_present) { + HANDLE_CODE(ul_dcch_msg_nr_r16.pack(bref)); + } + if (late_non_crit_ext_present) { + HANDLE_CODE(late_non_crit_ext.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE ul_info_transfer_irat_r16_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(ul_dcch_msg_nr_r16_present, 1)); + HANDLE_CODE(bref.unpack(late_non_crit_ext_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + if (ul_dcch_msg_nr_r16_present) { + HANDLE_CODE(ul_dcch_msg_nr_r16.unpack(bref)); + } + if (late_non_crit_ext_present) { + HANDLE_CODE(late_non_crit_ext.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void ul_info_transfer_irat_r16_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (ul_dcch_msg_nr_r16_present) { + j.write_str("ul-DCCH-MessageNR-r16", ul_dcch_msg_nr_r16.to_string()); + } + if (late_non_crit_ext_present) { + j.write_str("lateNonCriticalExtension", late_non_crit_ext.to_string()); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + j.start_obj(); + j.end_obj(); + } + j.end_obj(); +} + // ULInformationTransferMRDC-r15-IEs ::= SEQUENCE SRSASN_CODE ul_info_transfer_mrdc_r15_ies_s::pack(bit_ref& bref) const { @@ -8682,6 +11221,88 @@ void fail_info_r15_s::to_json(json_writer& j) const j.end_obj(); } +// FailureInformation-r16 ::= SEQUENCE +SRSASN_CODE fail_info_r16_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(crit_exts.pack(bref)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE fail_info_r16_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(crit_exts.unpack(bref)); + + return SRSASN_SUCCESS; +} +void fail_info_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_fieldname("criticalExtensions"); + crit_exts.to_json(j); + j.end_obj(); +} + +void fail_info_r16_s::crit_exts_c_::set(types::options e) +{ + type_ = e; +} +fail_info_r16_ies_s& fail_info_r16_s::crit_exts_c_::set_fail_info_r16() +{ + set(types::fail_info_r16); + return c; +} +void fail_info_r16_s::crit_exts_c_::set_crit_exts_future() +{ + set(types::crit_exts_future); +} +void fail_info_r16_s::crit_exts_c_::to_json(json_writer& j) const +{ + j.start_obj(); + switch (type_) { + case types::fail_info_r16: + j.write_fieldname("failureInformation-r16"); + c.to_json(j); + break; + case types::crit_exts_future: + break; + default: + log_invalid_choice_id(type_, "fail_info_r16_s::crit_exts_c_"); + } + j.end_obj(); +} +SRSASN_CODE fail_info_r16_s::crit_exts_c_::pack(bit_ref& bref) const +{ + type_.pack(bref); + switch (type_) { + case types::fail_info_r16: + HANDLE_CODE(c.pack(bref)); + break; + case types::crit_exts_future: + break; + default: + log_invalid_choice_id(type_, "fail_info_r16_s::crit_exts_c_"); + return SRSASN_ERROR_ENCODE_FAIL; + } + return SRSASN_SUCCESS; +} +SRSASN_CODE fail_info_r16_s::crit_exts_c_::unpack(cbit_ref& bref) +{ + types e; + e.unpack(bref); + set(e); + switch (type_) { + case types::fail_info_r16: + HANDLE_CODE(c.unpack(bref)); + break; + case types::crit_exts_future: + break; + default: + log_invalid_choice_id(type_, "fail_info_r16_s::crit_exts_c_"); + return SRSASN_ERROR_DECODE_FAIL; + } + return SRSASN_SUCCESS; +} + // InDeviceCoexIndication-r11 ::= SEQUENCE SRSASN_CODE in_dev_coex_ind_r11_s::pack(bit_ref& bref) const { @@ -9335,6 +11956,88 @@ SRSASN_CODE mbms_interest_ind_r11_s::crit_exts_c_::c1_c_::unpack(cbit_ref& bref) return SRSASN_SUCCESS; } +// MCGFailureInformation-r16 ::= SEQUENCE +SRSASN_CODE mcg_fail_info_r16_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(crit_exts.pack(bref)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE mcg_fail_info_r16_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(crit_exts.unpack(bref)); + + return SRSASN_SUCCESS; +} +void mcg_fail_info_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_fieldname("criticalExtensions"); + crit_exts.to_json(j); + j.end_obj(); +} + +void mcg_fail_info_r16_s::crit_exts_c_::set(types::options e) +{ + type_ = e; +} +mcg_fail_info_r16_ies_s& mcg_fail_info_r16_s::crit_exts_c_::set_mcg_fail_info() +{ + set(types::mcg_fail_info); + return c; +} +void mcg_fail_info_r16_s::crit_exts_c_::set_crit_exts_future() +{ + set(types::crit_exts_future); +} +void mcg_fail_info_r16_s::crit_exts_c_::to_json(json_writer& j) const +{ + j.start_obj(); + switch (type_) { + case types::mcg_fail_info: + j.write_fieldname("mcgFailureInformation"); + c.to_json(j); + break; + case types::crit_exts_future: + break; + default: + log_invalid_choice_id(type_, "mcg_fail_info_r16_s::crit_exts_c_"); + } + j.end_obj(); +} +SRSASN_CODE mcg_fail_info_r16_s::crit_exts_c_::pack(bit_ref& bref) const +{ + type_.pack(bref); + switch (type_) { + case types::mcg_fail_info: + HANDLE_CODE(c.pack(bref)); + break; + case types::crit_exts_future: + break; + default: + log_invalid_choice_id(type_, "mcg_fail_info_r16_s::crit_exts_c_"); + return SRSASN_ERROR_ENCODE_FAIL; + } + return SRSASN_SUCCESS; +} +SRSASN_CODE mcg_fail_info_r16_s::crit_exts_c_::unpack(cbit_ref& bref) +{ + types e; + e.unpack(bref); + set(e); + switch (type_) { + case types::mcg_fail_info: + HANDLE_CODE(c.unpack(bref)); + break; + case types::crit_exts_future: + break; + default: + log_invalid_choice_id(type_, "mcg_fail_info_r16_s::crit_exts_c_"); + return SRSASN_ERROR_DECODE_FAIL; + } + return SRSASN_SUCCESS; +} + // MeasReportAppLayer-r15 ::= SEQUENCE SRSASN_CODE meas_report_app_layer_r15_s::pack(bit_ref& bref) const { @@ -9417,6 +12120,88 @@ SRSASN_CODE meas_report_app_layer_r15_s::crit_exts_c_::unpack(cbit_ref& bref) return SRSASN_SUCCESS; } +// PURConfigurationRequest-r16 ::= SEQUENCE +SRSASN_CODE pur_cfg_request_r16_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(crit_exts.pack(bref)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE pur_cfg_request_r16_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(crit_exts.unpack(bref)); + + return SRSASN_SUCCESS; +} +void pur_cfg_request_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_fieldname("criticalExtensions"); + crit_exts.to_json(j); + j.end_obj(); +} + +void pur_cfg_request_r16_s::crit_exts_c_::set(types::options e) +{ + type_ = e; +} +pur_cfg_request_r16_ies_s& pur_cfg_request_r16_s::crit_exts_c_::set_pur_cfg_request() +{ + set(types::pur_cfg_request); + return c; +} +void pur_cfg_request_r16_s::crit_exts_c_::set_crit_exts_future() +{ + set(types::crit_exts_future); +} +void pur_cfg_request_r16_s::crit_exts_c_::to_json(json_writer& j) const +{ + j.start_obj(); + switch (type_) { + case types::pur_cfg_request: + j.write_fieldname("purConfigurationRequest"); + c.to_json(j); + break; + case types::crit_exts_future: + break; + default: + log_invalid_choice_id(type_, "pur_cfg_request_r16_s::crit_exts_c_"); + } + j.end_obj(); +} +SRSASN_CODE pur_cfg_request_r16_s::crit_exts_c_::pack(bit_ref& bref) const +{ + type_.pack(bref); + switch (type_) { + case types::pur_cfg_request: + HANDLE_CODE(c.pack(bref)); + break; + case types::crit_exts_future: + break; + default: + log_invalid_choice_id(type_, "pur_cfg_request_r16_s::crit_exts_c_"); + return SRSASN_ERROR_ENCODE_FAIL; + } + return SRSASN_SUCCESS; +} +SRSASN_CODE pur_cfg_request_r16_s::crit_exts_c_::unpack(cbit_ref& bref) +{ + types e; + e.unpack(bref); + set(e); + switch (type_) { + case types::pur_cfg_request: + HANDLE_CODE(c.unpack(bref)); + break; + case types::crit_exts_future: + break; + default: + log_invalid_choice_id(type_, "pur_cfg_request_r16_s::crit_exts_c_"); + return SRSASN_ERROR_DECODE_FAIL; + } + return SRSASN_SUCCESS; +} + // ProximityIndication-r9 ::= SEQUENCE SRSASN_CODE proximity_ind_r9_s::pack(bit_ref& bref) const { @@ -10985,6 +13770,88 @@ SRSASN_CODE ue_info_resp_r9_s::crit_exts_c_::c1_c_::unpack(cbit_ref& bref) return SRSASN_SUCCESS; } +// ULDedicatedMessageSegment-r16 ::= SEQUENCE +SRSASN_CODE ul_ded_msg_segment_r16_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(crit_exts.pack(bref)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE ul_ded_msg_segment_r16_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(crit_exts.unpack(bref)); + + return SRSASN_SUCCESS; +} +void ul_ded_msg_segment_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_fieldname("criticalExtensions"); + crit_exts.to_json(j); + j.end_obj(); +} + +void ul_ded_msg_segment_r16_s::crit_exts_c_::set(types::options e) +{ + type_ = e; +} +ul_ded_msg_segment_r16_ies_s& ul_ded_msg_segment_r16_s::crit_exts_c_::set_ul_ded_msg_segment_r16() +{ + set(types::ul_ded_msg_segment_r16); + return c; +} +void ul_ded_msg_segment_r16_s::crit_exts_c_::set_crit_exts_future() +{ + set(types::crit_exts_future); +} +void ul_ded_msg_segment_r16_s::crit_exts_c_::to_json(json_writer& j) const +{ + j.start_obj(); + switch (type_) { + case types::ul_ded_msg_segment_r16: + j.write_fieldname("ulDedicatedMessageSegment-r16"); + c.to_json(j); + break; + case types::crit_exts_future: + break; + default: + log_invalid_choice_id(type_, "ul_ded_msg_segment_r16_s::crit_exts_c_"); + } + j.end_obj(); +} +SRSASN_CODE ul_ded_msg_segment_r16_s::crit_exts_c_::pack(bit_ref& bref) const +{ + type_.pack(bref); + switch (type_) { + case types::ul_ded_msg_segment_r16: + HANDLE_CODE(c.pack(bref)); + break; + case types::crit_exts_future: + break; + default: + log_invalid_choice_id(type_, "ul_ded_msg_segment_r16_s::crit_exts_c_"); + return SRSASN_ERROR_ENCODE_FAIL; + } + return SRSASN_SUCCESS; +} +SRSASN_CODE ul_ded_msg_segment_r16_s::crit_exts_c_::unpack(cbit_ref& bref) +{ + types e; + e.unpack(bref); + set(e); + switch (type_) { + case types::ul_ded_msg_segment_r16: + HANDLE_CODE(c.unpack(bref)); + break; + case types::crit_exts_future: + break; + default: + log_invalid_choice_id(type_, "ul_ded_msg_segment_r16_s::crit_exts_c_"); + return SRSASN_ERROR_DECODE_FAIL; + } + return SRSASN_SUCCESS; +} + // ULHandoverPreparationTransfer ::= SEQUENCE SRSASN_CODE ul_ho_prep_transfer_s::pack(bit_ref& bref) const { @@ -11230,18 +14097,95 @@ SRSASN_CODE ul_info_transfer_s::crit_exts_c_::unpack(cbit_ref& bref) return SRSASN_SUCCESS; } +void ul_info_transfer_s::crit_exts_c_::c1_c_::destroy_() +{ + switch (type_) { + case types::ul_info_transfer_r8: + c.destroy<ul_info_transfer_r8_ies_s>(); + break; + case types::ul_info_transfer_r16: + c.destroy<ul_info_transfer_r16_ies_s>(); + break; + default: + break; + } +} void ul_info_transfer_s::crit_exts_c_::c1_c_::set(types::options e) { + destroy_(); type_ = e; + switch (type_) { + case types::ul_info_transfer_r8: + c.init<ul_info_transfer_r8_ies_s>(); + break; + case types::ul_info_transfer_r16: + c.init<ul_info_transfer_r16_ies_s>(); + break; + case types::spare2: + break; + case types::spare1: + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "ul_info_transfer_s::crit_exts_c_::c1_c_"); + } +} +ul_info_transfer_s::crit_exts_c_::c1_c_::c1_c_(const ul_info_transfer_s::crit_exts_c_::c1_c_& other) +{ + type_ = other.type(); + switch (type_) { + case types::ul_info_transfer_r8: + c.init(other.c.get<ul_info_transfer_r8_ies_s>()); + break; + case types::ul_info_transfer_r16: + c.init(other.c.get<ul_info_transfer_r16_ies_s>()); + break; + case types::spare2: + break; + case types::spare1: + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "ul_info_transfer_s::crit_exts_c_::c1_c_"); + } +} +ul_info_transfer_s::crit_exts_c_::c1_c_& +ul_info_transfer_s::crit_exts_c_::c1_c_::operator=(const ul_info_transfer_s::crit_exts_c_::c1_c_& other) +{ + if (this == &other) { + return *this; + } + set(other.type()); + switch (type_) { + case types::ul_info_transfer_r8: + c.set(other.c.get<ul_info_transfer_r8_ies_s>()); + break; + case types::ul_info_transfer_r16: + c.set(other.c.get<ul_info_transfer_r16_ies_s>()); + break; + case types::spare2: + break; + case types::spare1: + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "ul_info_transfer_s::crit_exts_c_::c1_c_"); + } + + return *this; } ul_info_transfer_r8_ies_s& ul_info_transfer_s::crit_exts_c_::c1_c_::set_ul_info_transfer_r8() { set(types::ul_info_transfer_r8); - return c; + return c.get<ul_info_transfer_r8_ies_s>(); } -void ul_info_transfer_s::crit_exts_c_::c1_c_::set_spare3() +ul_info_transfer_r16_ies_s& ul_info_transfer_s::crit_exts_c_::c1_c_::set_ul_info_transfer_r16() { - set(types::spare3); + set(types::ul_info_transfer_r16); + return c.get<ul_info_transfer_r16_ies_s>(); } void ul_info_transfer_s::crit_exts_c_::c1_c_::set_spare2() { @@ -11257,9 +14201,11 @@ void ul_info_transfer_s::crit_exts_c_::c1_c_::to_json(json_writer& j) const switch (type_) { case types::ul_info_transfer_r8: j.write_fieldname("ulInformationTransfer-r8"); - c.to_json(j); + c.get<ul_info_transfer_r8_ies_s>().to_json(j); break; - case types::spare3: + case types::ul_info_transfer_r16: + j.write_fieldname("ulInformationTransfer-r16"); + c.get<ul_info_transfer_r16_ies_s>().to_json(j); break; case types::spare2: break; @@ -11275,9 +14221,10 @@ SRSASN_CODE ul_info_transfer_s::crit_exts_c_::c1_c_::pack(bit_ref& bref) const type_.pack(bref); switch (type_) { case types::ul_info_transfer_r8: - HANDLE_CODE(c.pack(bref)); + HANDLE_CODE(c.get<ul_info_transfer_r8_ies_s>().pack(bref)); break; - case types::spare3: + case types::ul_info_transfer_r16: + HANDLE_CODE(c.get<ul_info_transfer_r16_ies_s>().pack(bref)); break; case types::spare2: break; @@ -11296,6 +14243,170 @@ SRSASN_CODE ul_info_transfer_s::crit_exts_c_::c1_c_::unpack(cbit_ref& bref) set(e); switch (type_) { case types::ul_info_transfer_r8: + HANDLE_CODE(c.get<ul_info_transfer_r8_ies_s>().unpack(bref)); + break; + case types::ul_info_transfer_r16: + HANDLE_CODE(c.get<ul_info_transfer_r16_ies_s>().unpack(bref)); + break; + case types::spare2: + break; + case types::spare1: + break; + default: + log_invalid_choice_id(type_, "ul_info_transfer_s::crit_exts_c_::c1_c_"); + return SRSASN_ERROR_DECODE_FAIL; + } + return SRSASN_SUCCESS; +} + +// ULInformationTransferIRAT-r16 ::= SEQUENCE +SRSASN_CODE ul_info_transfer_irat_r16_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(crit_exts.pack(bref)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE ul_info_transfer_irat_r16_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(crit_exts.unpack(bref)); + + return SRSASN_SUCCESS; +} +void ul_info_transfer_irat_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_fieldname("criticalExtensions"); + crit_exts.to_json(j); + j.end_obj(); +} + +void ul_info_transfer_irat_r16_s::crit_exts_c_::set(types::options e) +{ + type_ = e; +} +ul_info_transfer_irat_r16_s::crit_exts_c_::c1_c_& ul_info_transfer_irat_r16_s::crit_exts_c_::set_c1() +{ + set(types::c1); + return c; +} +void ul_info_transfer_irat_r16_s::crit_exts_c_::set_crit_exts_future() +{ + set(types::crit_exts_future); +} +void ul_info_transfer_irat_r16_s::crit_exts_c_::to_json(json_writer& j) const +{ + j.start_obj(); + switch (type_) { + case types::c1: + j.write_fieldname("c1"); + c.to_json(j); + break; + case types::crit_exts_future: + break; + default: + log_invalid_choice_id(type_, "ul_info_transfer_irat_r16_s::crit_exts_c_"); + } + j.end_obj(); +} +SRSASN_CODE ul_info_transfer_irat_r16_s::crit_exts_c_::pack(bit_ref& bref) const +{ + type_.pack(bref); + switch (type_) { + case types::c1: + HANDLE_CODE(c.pack(bref)); + break; + case types::crit_exts_future: + break; + default: + log_invalid_choice_id(type_, "ul_info_transfer_irat_r16_s::crit_exts_c_"); + return SRSASN_ERROR_ENCODE_FAIL; + } + return SRSASN_SUCCESS; +} +SRSASN_CODE ul_info_transfer_irat_r16_s::crit_exts_c_::unpack(cbit_ref& bref) +{ + types e; + e.unpack(bref); + set(e); + switch (type_) { + case types::c1: + HANDLE_CODE(c.unpack(bref)); + break; + case types::crit_exts_future: + break; + default: + log_invalid_choice_id(type_, "ul_info_transfer_irat_r16_s::crit_exts_c_"); + return SRSASN_ERROR_DECODE_FAIL; + } + return SRSASN_SUCCESS; +} + +void ul_info_transfer_irat_r16_s::crit_exts_c_::c1_c_::set(types::options e) +{ + type_ = e; +} +ul_info_transfer_irat_r16_ies_s& ul_info_transfer_irat_r16_s::crit_exts_c_::c1_c_::set_ul_info_transfer_irat_r16() +{ + set(types::ul_info_transfer_irat_r16); + return c; +} +void ul_info_transfer_irat_r16_s::crit_exts_c_::c1_c_::set_spare3() +{ + set(types::spare3); +} +void ul_info_transfer_irat_r16_s::crit_exts_c_::c1_c_::set_spare2() +{ + set(types::spare2); +} +void ul_info_transfer_irat_r16_s::crit_exts_c_::c1_c_::set_spare1() +{ + set(types::spare1); +} +void ul_info_transfer_irat_r16_s::crit_exts_c_::c1_c_::to_json(json_writer& j) const +{ + j.start_obj(); + switch (type_) { + case types::ul_info_transfer_irat_r16: + j.write_fieldname("ulInformationTransferIRAT-r16"); + c.to_json(j); + break; + case types::spare3: + break; + case types::spare2: + break; + case types::spare1: + break; + default: + log_invalid_choice_id(type_, "ul_info_transfer_irat_r16_s::crit_exts_c_::c1_c_"); + } + j.end_obj(); +} +SRSASN_CODE ul_info_transfer_irat_r16_s::crit_exts_c_::c1_c_::pack(bit_ref& bref) const +{ + type_.pack(bref); + switch (type_) { + case types::ul_info_transfer_irat_r16: + HANDLE_CODE(c.pack(bref)); + break; + case types::spare3: + break; + case types::spare2: + break; + case types::spare1: + break; + default: + log_invalid_choice_id(type_, "ul_info_transfer_irat_r16_s::crit_exts_c_::c1_c_"); + return SRSASN_ERROR_ENCODE_FAIL; + } + return SRSASN_SUCCESS; +} +SRSASN_CODE ul_info_transfer_irat_r16_s::crit_exts_c_::c1_c_::unpack(cbit_ref& bref) +{ + types e; + e.unpack(bref); + set(e); + switch (type_) { + case types::ul_info_transfer_irat_r16: HANDLE_CODE(c.unpack(bref)); break; case types::spare3: @@ -11305,7 +14416,7 @@ SRSASN_CODE ul_info_transfer_s::crit_exts_c_::c1_c_::unpack(cbit_ref& bref) case types::spare1: break; default: - log_invalid_choice_id(type_, "ul_info_transfer_s::crit_exts_c_::c1_c_"); + log_invalid_choice_id(type_, "ul_info_transfer_irat_r16_s::crit_exts_c_::c1_c_"); return SRSASN_ERROR_DECODE_FAIL; } return SRSASN_SUCCESS; @@ -12371,6 +15482,21 @@ void ul_dcch_msg_type_c::msg_class_ext_c_::c2_c_::destroy_() case types::fail_info_r15: c.destroy<fail_info_r15_s>(); break; + case types::ul_ded_msg_segment_r16: + c.destroy<ul_ded_msg_segment_r16_s>(); + break; + case types::pur_cfg_request_r16: + c.destroy<pur_cfg_request_r16_s>(); + break; + case types::fail_info_r16: + c.destroy<fail_info_r16_s>(); + break; + case types::mcg_fail_info_r16: + c.destroy<mcg_fail_info_r16_s>(); + break; + case types::ul_info_transfer_irat_r16: + c.destroy<ul_info_transfer_irat_r16_s>(); + break; default: break; } @@ -12413,15 +15539,20 @@ void ul_dcch_msg_type_c::msg_class_ext_c_::c2_c_::set(types::options e) case types::fail_info_r15: c.init<fail_info_r15_s>(); break; - case types::spare5: + case types::ul_ded_msg_segment_r16: + c.init<ul_ded_msg_segment_r16_s>(); break; - case types::spare4: + case types::pur_cfg_request_r16: + c.init<pur_cfg_request_r16_s>(); break; - case types::spare3: + case types::fail_info_r16: + c.init<fail_info_r16_s>(); break; - case types::spare2: + case types::mcg_fail_info_r16: + c.init<mcg_fail_info_r16_s>(); break; - case types::spare1: + case types::ul_info_transfer_irat_r16: + c.init<ul_info_transfer_irat_r16_s>(); break; case types::nulltype: break; @@ -12466,15 +15597,20 @@ ul_dcch_msg_type_c::msg_class_ext_c_::c2_c_::c2_c_(const ul_dcch_msg_type_c::msg case types::fail_info_r15: c.init(other.c.get<fail_info_r15_s>()); break; - case types::spare5: + case types::ul_ded_msg_segment_r16: + c.init(other.c.get<ul_ded_msg_segment_r16_s>()); break; - case types::spare4: + case types::pur_cfg_request_r16: + c.init(other.c.get<pur_cfg_request_r16_s>()); break; - case types::spare3: + case types::fail_info_r16: + c.init(other.c.get<fail_info_r16_s>()); break; - case types::spare2: + case types::mcg_fail_info_r16: + c.init(other.c.get<mcg_fail_info_r16_s>()); break; - case types::spare1: + case types::ul_info_transfer_irat_r16: + c.init(other.c.get<ul_info_transfer_irat_r16_s>()); break; case types::nulltype: break; @@ -12523,15 +15659,20 @@ ul_dcch_msg_type_c::msg_class_ext_c_::c2_c_::operator=(const ul_dcch_msg_type_c: case types::fail_info_r15: c.set(other.c.get<fail_info_r15_s>()); break; - case types::spare5: + case types::ul_ded_msg_segment_r16: + c.set(other.c.get<ul_ded_msg_segment_r16_s>()); break; - case types::spare4: + case types::pur_cfg_request_r16: + c.set(other.c.get<pur_cfg_request_r16_s>()); break; - case types::spare3: + case types::fail_info_r16: + c.set(other.c.get<fail_info_r16_s>()); break; - case types::spare2: + case types::mcg_fail_info_r16: + c.set(other.c.get<mcg_fail_info_r16_s>()); break; - case types::spare1: + case types::ul_info_transfer_irat_r16: + c.set(other.c.get<ul_info_transfer_irat_r16_s>()); break; case types::nulltype: break; @@ -12596,25 +15737,30 @@ fail_info_r15_s& ul_dcch_msg_type_c::msg_class_ext_c_::c2_c_::set_fail_info_r15( set(types::fail_info_r15); return c.get<fail_info_r15_s>(); } -void ul_dcch_msg_type_c::msg_class_ext_c_::c2_c_::set_spare5() +ul_ded_msg_segment_r16_s& ul_dcch_msg_type_c::msg_class_ext_c_::c2_c_::set_ul_ded_msg_segment_r16() { - set(types::spare5); + set(types::ul_ded_msg_segment_r16); + return c.get<ul_ded_msg_segment_r16_s>(); } -void ul_dcch_msg_type_c::msg_class_ext_c_::c2_c_::set_spare4() +pur_cfg_request_r16_s& ul_dcch_msg_type_c::msg_class_ext_c_::c2_c_::set_pur_cfg_request_r16() { - set(types::spare4); + set(types::pur_cfg_request_r16); + return c.get<pur_cfg_request_r16_s>(); } -void ul_dcch_msg_type_c::msg_class_ext_c_::c2_c_::set_spare3() +fail_info_r16_s& ul_dcch_msg_type_c::msg_class_ext_c_::c2_c_::set_fail_info_r16() { - set(types::spare3); + set(types::fail_info_r16); + return c.get<fail_info_r16_s>(); } -void ul_dcch_msg_type_c::msg_class_ext_c_::c2_c_::set_spare2() +mcg_fail_info_r16_s& ul_dcch_msg_type_c::msg_class_ext_c_::c2_c_::set_mcg_fail_info_r16() { - set(types::spare2); + set(types::mcg_fail_info_r16); + return c.get<mcg_fail_info_r16_s>(); } -void ul_dcch_msg_type_c::msg_class_ext_c_::c2_c_::set_spare1() +ul_info_transfer_irat_r16_s& ul_dcch_msg_type_c::msg_class_ext_c_::c2_c_::set_ul_info_transfer_irat_r16() { - set(types::spare1); + set(types::ul_info_transfer_irat_r16); + return c.get<ul_info_transfer_irat_r16_s>(); } void ul_dcch_msg_type_c::msg_class_ext_c_::c2_c_::to_json(json_writer& j) const { @@ -12664,15 +15810,25 @@ void ul_dcch_msg_type_c::msg_class_ext_c_::c2_c_::to_json(json_writer& j) const j.write_fieldname("failureInformation-r15"); c.get<fail_info_r15_s>().to_json(j); break; - case types::spare5: + case types::ul_ded_msg_segment_r16: + j.write_fieldname("ulDedicatedMessageSegment-r16"); + c.get<ul_ded_msg_segment_r16_s>().to_json(j); break; - case types::spare4: + case types::pur_cfg_request_r16: + j.write_fieldname("purConfigurationRequest-r16"); + c.get<pur_cfg_request_r16_s>().to_json(j); break; - case types::spare3: + case types::fail_info_r16: + j.write_fieldname("failureInformation-r16"); + c.get<fail_info_r16_s>().to_json(j); break; - case types::spare2: + case types::mcg_fail_info_r16: + j.write_fieldname("mcgFailureInformation-r16"); + c.get<mcg_fail_info_r16_s>().to_json(j); break; - case types::spare1: + case types::ul_info_transfer_irat_r16: + j.write_fieldname("ulInformationTransferIRAT-r16"); + c.get<ul_info_transfer_irat_r16_s>().to_json(j); break; default: log_invalid_choice_id(type_, "ul_dcch_msg_type_c::msg_class_ext_c_::c2_c_"); @@ -12716,15 +15872,20 @@ SRSASN_CODE ul_dcch_msg_type_c::msg_class_ext_c_::c2_c_::pack(bit_ref& bref) con case types::fail_info_r15: HANDLE_CODE(c.get<fail_info_r15_s>().pack(bref)); break; - case types::spare5: + case types::ul_ded_msg_segment_r16: + HANDLE_CODE(c.get<ul_ded_msg_segment_r16_s>().pack(bref)); break; - case types::spare4: + case types::pur_cfg_request_r16: + HANDLE_CODE(c.get<pur_cfg_request_r16_s>().pack(bref)); break; - case types::spare3: + case types::fail_info_r16: + HANDLE_CODE(c.get<fail_info_r16_s>().pack(bref)); break; - case types::spare2: + case types::mcg_fail_info_r16: + HANDLE_CODE(c.get<mcg_fail_info_r16_s>().pack(bref)); break; - case types::spare1: + case types::ul_info_transfer_irat_r16: + HANDLE_CODE(c.get<ul_info_transfer_irat_r16_s>().pack(bref)); break; default: log_invalid_choice_id(type_, "ul_dcch_msg_type_c::msg_class_ext_c_::c2_c_"); @@ -12771,15 +15932,20 @@ SRSASN_CODE ul_dcch_msg_type_c::msg_class_ext_c_::c2_c_::unpack(cbit_ref& bref) case types::fail_info_r15: HANDLE_CODE(c.get<fail_info_r15_s>().unpack(bref)); break; - case types::spare5: + case types::ul_ded_msg_segment_r16: + HANDLE_CODE(c.get<ul_ded_msg_segment_r16_s>().unpack(bref)); break; - case types::spare4: + case types::pur_cfg_request_r16: + HANDLE_CODE(c.get<pur_cfg_request_r16_s>().unpack(bref)); break; - case types::spare3: + case types::fail_info_r16: + HANDLE_CODE(c.get<fail_info_r16_s>().unpack(bref)); break; - case types::spare2: + case types::mcg_fail_info_r16: + HANDLE_CODE(c.get<mcg_fail_info_r16_s>().unpack(bref)); break; - case types::spare1: + case types::ul_info_transfer_irat_r16: + HANDLE_CODE(c.get<ul_info_transfer_irat_r16_s>().unpack(bref)); break; default: log_invalid_choice_id(type_, "ul_dcch_msg_type_c::msg_class_ext_c_::c2_c_"); diff --git a/lib/src/asn1/rrc_nbiot.cc b/lib/src/asn1/rrc_nbiot.cc index af992e824..675cb845d 100644 --- a/lib/src/asn1/rrc_nbiot.cc +++ b/lib/src/asn1/rrc_nbiot.cc @@ -90,32 +90,72 @@ void ab_cfg_plmn_nb_r13_s::to_json(json_writer& j) const j.end_obj(); } -// T-PollRetransmit-NB-r13 ::= ENUMERATED -const char* t_poll_retx_nb_r13_opts::to_string() const +// ANR-Carrier-NB-r16 ::= SEQUENCE +SRSASN_CODE anr_carrier_nb_r16_s::pack(bit_ref& bref) const { - static const char* options[] = {"ms250", - "ms500", - "ms1000", - "ms2000", - "ms3000", - "ms4000", - "ms6000", - "ms10000", - "ms15000", - "ms25000", - "ms40000", - "ms60000", - "ms90000", - "ms120000", - "ms180000", - "ms300000-v1530"}; - return convert_enum_idx(options, 16, value, "t_poll_retx_nb_r13_e"); + bref.pack(ext, 1); + HANDLE_CODE(bref.pack(excluded_cell_list_r16_present, 1)); + + HANDLE_CODE(pack_integer(bref, carrier_freq_idx_r16, (uint8_t)1u, (uint8_t)8u)); + if (excluded_cell_list_r16_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, excluded_cell_list_r16, 1, 16, integer_packer<uint16_t>(0, 503))); + } + + return SRSASN_SUCCESS; } -uint32_t t_poll_retx_nb_r13_opts::to_number() const +SRSASN_CODE anr_carrier_nb_r16_s::unpack(cbit_ref& bref) { - static const uint32_t options[] = { - 250, 500, 1000, 2000, 3000, 4000, 6000, 10000, 15000, 25000, 40000, 60000, 90000, 120000, 180000, 300000}; - return map_enum_number(options, 16, value, "t_poll_retx_nb_r13_e"); + bref.unpack(ext, 1); + HANDLE_CODE(bref.unpack(excluded_cell_list_r16_present, 1)); + + HANDLE_CODE(unpack_integer(carrier_freq_idx_r16, bref, (uint8_t)1u, (uint8_t)8u)); + if (excluded_cell_list_r16_present) { + HANDLE_CODE(unpack_dyn_seq_of(excluded_cell_list_r16, bref, 1, 16, integer_packer<uint16_t>(0, 503))); + } + + return SRSASN_SUCCESS; +} +void anr_carrier_nb_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_int("carrierFreqIndex-r16", carrier_freq_idx_r16); + if (excluded_cell_list_r16_present) { + j.start_array("excludedCellList-r16"); + for (const auto& e1 : excluded_cell_list_r16) { + j.write_int(e1); + } + j.end_array(); + } + j.end_obj(); +} + +// ANR-MeasConfig-NB-r16 ::= SEQUENCE +SRSASN_CODE anr_meas_cfg_nb_r16_s::pack(bit_ref& bref) const +{ + bref.pack(ext, 1); + HANDLE_CODE(pack_integer(bref, anr_quality_thres_r16, (uint8_t)0u, (uint8_t)113u)); + HANDLE_CODE(pack_dyn_seq_of(bref, anr_carrier_list_r16, 1, 2)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE anr_meas_cfg_nb_r16_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(unpack_integer(anr_quality_thres_r16, bref, (uint8_t)0u, (uint8_t)113u)); + HANDLE_CODE(unpack_dyn_seq_of(anr_carrier_list_r16, bref, 1, 2)); + + return SRSASN_SUCCESS; +} +void anr_meas_cfg_nb_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_int("anr-QualityThreshold-r16", anr_quality_thres_r16); + j.start_array("anr-CarrierList-r16"); + for (const auto& e1 : anr_carrier_list_r16) { + e1.to_json(j); + } + j.end_array(); + j.end_obj(); } // CarrierFreq-NB-r13 ::= SEQUENCE @@ -170,6 +210,186 @@ const char* carrier_freq_nb_r13_s::carrier_freq_offset_r13_opts::to_number_strin return convert_enum_idx(options, 21, value, "carrier_freq_nb_r13_s::carrier_freq_offset_r13_e_"); } +// MeasResultServCell-NB-r14 ::= SEQUENCE +SRSASN_CODE meas_result_serv_cell_nb_r14_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(pack_integer(bref, nrsrp_result_r14, (uint8_t)0u, (uint8_t)113u)); + HANDLE_CODE(pack_integer(bref, nrsrq_result_r14, (int8_t)-30, (int8_t)46)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE meas_result_serv_cell_nb_r14_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(unpack_integer(nrsrp_result_r14, bref, (uint8_t)0u, (uint8_t)113u)); + HANDLE_CODE(unpack_integer(nrsrq_result_r14, bref, (int8_t)-30, (int8_t)46)); + + return SRSASN_SUCCESS; +} +void meas_result_serv_cell_nb_r14_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_int("nrsrpResult-r14", nrsrp_result_r14); + j.write_int("nrsrqResult-r14", nrsrq_result_r14); + j.end_obj(); +} + +// ANR-MeasResult-NB-r16 ::= SEQUENCE +SRSASN_CODE anr_meas_result_nb_r16_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(pci_r16_present, 1)); + HANDLE_CODE(bref.pack(meas_result_r16_present, 1)); + HANDLE_CODE(bref.pack(cgi_info_r16_present, 1)); + + HANDLE_CODE(carrier_freq_r16.pack(bref)); + if (pci_r16_present) { + HANDLE_CODE(pack_integer(bref, pci_r16, (uint16_t)0u, (uint16_t)503u)); + } + HANDLE_CODE(meas_result_last_serv_cell_r16.pack(bref)); + if (meas_result_r16_present) { + HANDLE_CODE(pack_integer(bref, meas_result_r16, (uint8_t)0u, (uint8_t)113u)); + } + if (cgi_info_r16_present) { + HANDLE_CODE(bref.pack(cgi_info_r16.plmn_id_list_r16_present, 1)); + HANDLE_CODE(cgi_info_r16.cell_global_id_r16.pack(bref)); + HANDLE_CODE(cgi_info_r16.tac_r16.pack(bref)); + if (cgi_info_r16.plmn_id_list_r16_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, cgi_info_r16.plmn_id_list_r16, 1, 5)); + } + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE anr_meas_result_nb_r16_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(pci_r16_present, 1)); + HANDLE_CODE(bref.unpack(meas_result_r16_present, 1)); + HANDLE_CODE(bref.unpack(cgi_info_r16_present, 1)); + + HANDLE_CODE(carrier_freq_r16.unpack(bref)); + if (pci_r16_present) { + HANDLE_CODE(unpack_integer(pci_r16, bref, (uint16_t)0u, (uint16_t)503u)); + } + HANDLE_CODE(meas_result_last_serv_cell_r16.unpack(bref)); + if (meas_result_r16_present) { + HANDLE_CODE(unpack_integer(meas_result_r16, bref, (uint8_t)0u, (uint8_t)113u)); + } + if (cgi_info_r16_present) { + HANDLE_CODE(bref.unpack(cgi_info_r16.plmn_id_list_r16_present, 1)); + HANDLE_CODE(cgi_info_r16.cell_global_id_r16.unpack(bref)); + HANDLE_CODE(cgi_info_r16.tac_r16.unpack(bref)); + if (cgi_info_r16.plmn_id_list_r16_present) { + HANDLE_CODE(unpack_dyn_seq_of(cgi_info_r16.plmn_id_list_r16, bref, 1, 5)); + } + } + + return SRSASN_SUCCESS; +} +void anr_meas_result_nb_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_fieldname("carrierFreq-r16"); + carrier_freq_r16.to_json(j); + if (pci_r16_present) { + j.write_int("physCellId-r16", pci_r16); + } + j.write_fieldname("measResultLastServCell-r16"); + meas_result_last_serv_cell_r16.to_json(j); + if (meas_result_r16_present) { + j.write_int("measResult-r16", meas_result_r16); + } + if (cgi_info_r16_present) { + j.write_fieldname("cgi-Info-r16"); + j.start_obj(); + j.write_fieldname("cellGlobalId-r16"); + cgi_info_r16.cell_global_id_r16.to_json(j); + j.write_str("trackingAreaCode-r16", cgi_info_r16.tac_r16.to_string()); + if (cgi_info_r16.plmn_id_list_r16_present) { + j.start_array("plmn-IdentityList-r16"); + for (const auto& e1 : cgi_info_r16.plmn_id_list_r16) { + e1.to_json(j); + } + j.end_array(); + } + j.end_obj(); + } + j.end_obj(); +} + +// ANR-MeasReport-NB-r16 ::= SEQUENCE +SRSASN_CODE anr_meas_report_nb_r16_s::pack(bit_ref& bref) const +{ + bref.pack(ext, 1); + HANDLE_CODE(bref.pack(serv_cell_id_r16_present, 1)); + + if (serv_cell_id_r16_present) { + HANDLE_CODE(serv_cell_id_r16.pack(bref)); + } + HANDLE_CODE(meas_result_serv_cell_r16.pack(bref)); + HANDLE_CODE(pack_integer(bref, relative_time_stamp_r16, (uint8_t)0u, (uint8_t)95u)); + HANDLE_CODE(pack_dyn_seq_of(bref, meas_result_list_r16, 1, 2)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE anr_meas_report_nb_r16_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(bref.unpack(serv_cell_id_r16_present, 1)); + + if (serv_cell_id_r16_present) { + HANDLE_CODE(serv_cell_id_r16.unpack(bref)); + } + HANDLE_CODE(meas_result_serv_cell_r16.unpack(bref)); + HANDLE_CODE(unpack_integer(relative_time_stamp_r16, bref, (uint8_t)0u, (uint8_t)95u)); + HANDLE_CODE(unpack_dyn_seq_of(meas_result_list_r16, bref, 1, 2)); + + return SRSASN_SUCCESS; +} +void anr_meas_report_nb_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (serv_cell_id_r16_present) { + j.write_fieldname("servCellIdentity-r16"); + serv_cell_id_r16.to_json(j); + } + j.write_fieldname("measResultServCell-r16"); + meas_result_serv_cell_r16.to_json(j); + j.write_int("relativeTimeStamp-r16", relative_time_stamp_r16); + j.start_array("measResultList-r16"); + for (const auto& e1 : meas_result_list_r16) { + e1.to_json(j); + } + j.end_array(); + j.end_obj(); +} + +// T-PollRetransmit-NB-r13 ::= ENUMERATED +const char* t_poll_retx_nb_r13_opts::to_string() const +{ + static const char* options[] = {"ms250", + "ms500", + "ms1000", + "ms2000", + "ms3000", + "ms4000", + "ms6000", + "ms10000", + "ms15000", + "ms25000", + "ms40000", + "ms60000", + "ms90000", + "ms120000", + "ms180000", + "ms300000-v1530"}; + return convert_enum_idx(options, 16, value, "t_poll_retx_nb_r13_e"); +} +uint32_t t_poll_retx_nb_r13_opts::to_number() const +{ + static const uint32_t options[] = { + 250, 500, 1000, 2000, 3000, 4000, 6000, 10000, 15000, 25000, 40000, 60000, 90000, 120000, 180000, 300000}; + return map_enum_number(options, 16, value, "t_poll_retx_nb_r13_e"); +} + // CarrierFreq-NB-v1550 ::= SEQUENCE SRSASN_CODE carrier_freq_nb_v1550_s::pack(bit_ref& bref) const { @@ -1071,6 +1291,112 @@ void lc_ch_cfg_nb_r13_s::to_json(json_writer& j) const j.end_obj(); } +// NPDSCH-16QAM-Config-NB-r17 ::= SEQUENCE +SRSASN_CODE npdsch_minus16_qam_cfg_nb_r17_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(nrs_pwr_ratio_r17_present, 1)); + HANDLE_CODE(bref.pack(nrs_pwr_ratio_with_crs_r17_present, 1)); + + if (nrs_pwr_ratio_r17_present) { + HANDLE_CODE(nrs_pwr_ratio_r17.pack(bref)); + } + if (nrs_pwr_ratio_with_crs_r17_present) { + HANDLE_CODE(nrs_pwr_ratio_with_crs_r17.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE npdsch_minus16_qam_cfg_nb_r17_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(nrs_pwr_ratio_r17_present, 1)); + HANDLE_CODE(bref.unpack(nrs_pwr_ratio_with_crs_r17_present, 1)); + + if (nrs_pwr_ratio_r17_present) { + HANDLE_CODE(nrs_pwr_ratio_r17.unpack(bref)); + } + if (nrs_pwr_ratio_with_crs_r17_present) { + HANDLE_CODE(nrs_pwr_ratio_with_crs_r17.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void npdsch_minus16_qam_cfg_nb_r17_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (nrs_pwr_ratio_r17_present) { + j.write_str("nrs-PowerRatio-r17", nrs_pwr_ratio_r17.to_string()); + } + if (nrs_pwr_ratio_with_crs_r17_present) { + j.write_str("nrs-PowerRatioWithCRS-r17", nrs_pwr_ratio_with_crs_r17.to_string()); + } + j.end_obj(); +} + +const char* npdsch_minus16_qam_cfg_nb_r17_s::nrs_pwr_ratio_r17_opts::to_string() const +{ + static const char* options[] = {"dB-6", "dB-4dot77", "dB-3", "dB-1dot77", "dB0", "dB1", "dB2", "dB3"}; + return convert_enum_idx(options, 8, value, "npdsch_minus16_qam_cfg_nb_r17_s::nrs_pwr_ratio_r17_e_"); +} +float npdsch_minus16_qam_cfg_nb_r17_s::nrs_pwr_ratio_r17_opts::to_number() const +{ + static const float options[] = {-6.0, -4.77, -3.0, -1.77, 0.0, 1.0, 2.0, 3.0}; + return map_enum_number(options, 8, value, "npdsch_minus16_qam_cfg_nb_r17_s::nrs_pwr_ratio_r17_e_"); +} +const char* npdsch_minus16_qam_cfg_nb_r17_s::nrs_pwr_ratio_r17_opts::to_number_string() const +{ + static const char* options[] = {"-6", "-4.77", "-3", "-1.77", "0", "1", "2", "3"}; + return convert_enum_idx(options, 8, value, "npdsch_minus16_qam_cfg_nb_r17_s::nrs_pwr_ratio_r17_e_"); +} + +const char* npdsch_minus16_qam_cfg_nb_r17_s::nrs_pwr_ratio_with_crs_r17_opts::to_string() const +{ + static const char* options[] = {"dB-6", "dB-4dot77", "dB-3", "dB-1dot77", "dB0", "dB1", "dB2", "dB3"}; + return convert_enum_idx(options, 8, value, "npdsch_minus16_qam_cfg_nb_r17_s::nrs_pwr_ratio_with_crs_r17_e_"); +} +float npdsch_minus16_qam_cfg_nb_r17_s::nrs_pwr_ratio_with_crs_r17_opts::to_number() const +{ + static const float options[] = {-6.0, -4.77, -3.0, -1.77, 0.0, 1.0, 2.0, 3.0}; + return map_enum_number(options, 8, value, "npdsch_minus16_qam_cfg_nb_r17_s::nrs_pwr_ratio_with_crs_r17_e_"); +} +const char* npdsch_minus16_qam_cfg_nb_r17_s::nrs_pwr_ratio_with_crs_r17_opts::to_number_string() const +{ + static const char* options[] = {"-6", "-4.77", "-3", "-1.77", "0", "1", "2", "3"}; + return convert_enum_idx(options, 8, value, "npdsch_minus16_qam_cfg_nb_r17_s::nrs_pwr_ratio_with_crs_r17_e_"); +} + +// NPDSCH-MultiTB-Config-NB-r16 ::= SEQUENCE +SRSASN_CODE npdsch_multi_tb_cfg_nb_r16_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(harq_ack_bundling_r16_present, 1)); + + HANDLE_CODE(multi_tb_cfg_r16.pack(bref)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE npdsch_multi_tb_cfg_nb_r16_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(harq_ack_bundling_r16_present, 1)); + + HANDLE_CODE(multi_tb_cfg_r16.unpack(bref)); + + return SRSASN_SUCCESS; +} +void npdsch_multi_tb_cfg_nb_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_str("multiTB-Config-r16", multi_tb_cfg_r16.to_string()); + if (harq_ack_bundling_r16_present) { + j.write_str("harq-AckBundling-r16", "true"); + } + j.end_obj(); +} + +const char* npdsch_multi_tb_cfg_nb_r16_s::multi_tb_cfg_r16_opts::to_string() const +{ + static const char* options[] = {"interleaved", "nonInterleaved"}; + return convert_enum_idx(options, 2, value, "npdsch_multi_tb_cfg_nb_r16_s::multi_tb_cfg_r16_e_"); +} + // PDCP-Config-NB-r13 ::= SEQUENCE SRSASN_CODE pdcp_cfg_nb_r13_s::pack(bit_ref& bref) const { @@ -1082,6 +1408,17 @@ SRSASN_CODE pdcp_cfg_nb_r13_s::pack(bit_ref& bref) const } HANDLE_CODE(hdr_compress_r13.pack(bref)); + if (ext) { + ext_groups_packer_guard group_flags; + group_flags[0] |= ciphering_disabled_r16_present; + group_flags.pack(bref); + + if (group_flags[0]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(ciphering_disabled_r16_present, 1)); + } + } return SRSASN_SUCCESS; } SRSASN_CODE pdcp_cfg_nb_r13_s::unpack(cbit_ref& bref) @@ -1094,6 +1431,16 @@ SRSASN_CODE pdcp_cfg_nb_r13_s::unpack(cbit_ref& bref) } HANDLE_CODE(hdr_compress_r13.unpack(bref)); + if (ext) { + ext_groups_unpacker_guard group_flags(1); + group_flags.unpack(bref); + + if (group_flags[0]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.unpack(ciphering_disabled_r16_present, 1)); + } + } return SRSASN_SUCCESS; } void pdcp_cfg_nb_r13_s::to_json(json_writer& j) const @@ -1104,6 +1451,11 @@ void pdcp_cfg_nb_r13_s::to_json(json_writer& j) const } j.write_fieldname("headerCompression-r13"); hdr_compress_r13.to_json(j); + if (ext) { + if (ciphering_disabled_r16_present) { + j.write_str("cipheringDisabled-r16", "true"); + } + } j.end_obj(); } @@ -1347,6 +1699,27 @@ void rlc_cfg_nb_v1430_s::to_json(json_writer& j) const j.end_obj(); } +// RLC-Config-NB-v1700 ::= SEQUENCE +SRSASN_CODE rlc_cfg_nb_v1700_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(t_reordering_ext_r17.pack(bref)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE rlc_cfg_nb_v1700_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(t_reordering_ext_r17.unpack(bref)); + + return SRSASN_SUCCESS; +} +void rlc_cfg_nb_v1700_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_fieldname("t-ReorderingExt-r17"); + t_reordering_ext_r17.to_json(j); + j.end_obj(); +} + // SR-NPRACH-Resource-NB-r15 ::= SEQUENCE SRSASN_CODE sr_nprach_res_nb_r15_s::pack(bit_ref& bref) const { @@ -1512,6 +1885,18 @@ const char* sr_nprach_res_nb_r15_s::alpha_r15_opts::to_number_string() const return convert_enum_idx(options, 8, value, "sr_nprach_res_nb_r15_s::alpha_r15_e_"); } +// SR-ProhibitTimerOffset-NB-r17 ::= ENUMERATED +const char* sr_prohibit_timer_offset_nb_r17_opts::to_string() const +{ + static const char* options[] = {"ms90", "ms180", "ms270", "ms360", "ms450", "ms540", "ms1080", "spare"}; + return convert_enum_idx(options, 8, value, "sr_prohibit_timer_offset_nb_r17_e"); +} +uint16_t sr_prohibit_timer_offset_nb_r17_opts::to_number() const +{ + static const uint16_t options[] = {90, 180, 270, 360, 450, 540, 1080}; + return map_enum_number(options, 7, value, "sr_prohibit_timer_offset_nb_r17_e"); +} + // UL-CarrierConfigDedicated-NB-r13 ::= SEQUENCE SRSASN_CODE ul_carrier_cfg_ded_nb_r13_s::pack(bit_ref& bref) const { @@ -1632,6 +2017,8 @@ SRSASN_CODE drb_to_add_mod_nb_r13_s::pack(bit_ref& bref) const if (ext) { ext_groups_packer_guard group_flags; group_flags[0] |= rlc_cfg_v1430.is_present(); + group_flags[1] |= pdu_session_r16_present; + group_flags[2] |= rlc_cfg_v1700.is_present(); group_flags.pack(bref); if (group_flags[0]) { @@ -1642,6 +2029,22 @@ SRSASN_CODE drb_to_add_mod_nb_r13_s::pack(bit_ref& bref) const HANDLE_CODE(rlc_cfg_v1430->pack(bref)); } } + if (group_flags[1]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(pdu_session_r16_present, 1)); + if (pdu_session_r16_present) { + HANDLE_CODE(pack_integer(bref, pdu_session_r16, (uint16_t)0u, (uint16_t)255u)); + } + } + if (group_flags[2]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(rlc_cfg_v1700.is_present(), 1)); + if (rlc_cfg_v1700.is_present()) { + HANDLE_CODE(rlc_cfg_v1700->pack(bref)); + } + } } return SRSASN_SUCCESS; } @@ -1672,7 +2075,7 @@ SRSASN_CODE drb_to_add_mod_nb_r13_s::unpack(cbit_ref& bref) } if (ext) { - ext_groups_unpacker_guard group_flags(1); + ext_groups_unpacker_guard group_flags(3); group_flags.unpack(bref); if (group_flags[0]) { @@ -1685,6 +2088,24 @@ SRSASN_CODE drb_to_add_mod_nb_r13_s::unpack(cbit_ref& bref) HANDLE_CODE(rlc_cfg_v1430->unpack(bref)); } } + if (group_flags[1]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.unpack(pdu_session_r16_present, 1)); + if (pdu_session_r16_present) { + HANDLE_CODE(unpack_integer(pdu_session_r16, bref, (uint16_t)0u, (uint16_t)255u)); + } + } + if (group_flags[2]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + bool rlc_cfg_v1700_present; + HANDLE_CODE(bref.unpack(rlc_cfg_v1700_present, 1)); + rlc_cfg_v1700.set_present(rlc_cfg_v1700_present); + if (rlc_cfg_v1700.is_present()) { + HANDLE_CODE(rlc_cfg_v1700->unpack(bref)); + } + } } return SRSASN_SUCCESS; } @@ -1715,6 +2136,13 @@ void drb_to_add_mod_nb_r13_s::to_json(json_writer& j) const j.write_fieldname("rlc-Config-v1430"); rlc_cfg_v1430->to_json(j); } + if (pdu_session_r16_present) { + j.write_int("pdu-Session-r16", pdu_session_r16); + } + if (rlc_cfg_v1700.is_present()) { + j.write_fieldname("rlc-Config-v1700"); + rlc_cfg_v1700->to_json(j); + } } j.end_obj(); } @@ -2014,6 +2442,58 @@ uint8_t npdcch_cfg_ded_nb_v1530_s::npdcch_start_sf_uss_v1530_opts::to_number() c return map_enum_number(options, 2, value, "npdcch_cfg_ded_nb_v1530_s::npdcch_start_sf_uss_v1530_e_"); } +// NPDSCH-ConfigDedicated-NB-r16 ::= SEQUENCE +SRSASN_CODE npdsch_cfg_ded_nb_r16_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(npdsch_multi_tb_cfg_r16_present, 1)); + + if (npdsch_multi_tb_cfg_r16_present) { + HANDLE_CODE(npdsch_multi_tb_cfg_r16.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE npdsch_cfg_ded_nb_r16_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(npdsch_multi_tb_cfg_r16_present, 1)); + + if (npdsch_multi_tb_cfg_r16_present) { + HANDLE_CODE(npdsch_multi_tb_cfg_r16.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void npdsch_cfg_ded_nb_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (npdsch_multi_tb_cfg_r16_present) { + j.write_fieldname("npdsch-MultiTB-Config-r16"); + npdsch_multi_tb_cfg_r16.to_json(j); + } + j.end_obj(); +} + +// NPDSCH-ConfigDedicated-NB-v1710 ::= SEQUENCE +SRSASN_CODE npdsch_cfg_ded_nb_v1710_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(npdsch_minus16_qam_cfg_r17.pack(bref)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE npdsch_cfg_ded_nb_v1710_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(npdsch_minus16_qam_cfg_r17.unpack(bref)); + + return SRSASN_SUCCESS; +} +void npdsch_cfg_ded_nb_v1710_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_fieldname("npdsch-16QAM-Config-r17"); + npdsch_minus16_qam_cfg_r17.to_json(j); + j.end_obj(); +} + // NPUSCH-ConfigDedicated-NB-r13 ::= SEQUENCE SRSASN_CODE npusch_cfg_ded_nb_r13_s::pack(bit_ref& bref) const { @@ -2060,6 +2540,118 @@ void npusch_cfg_ded_nb_r13_s::to_json(json_writer& j) const j.end_obj(); } +// NPUSCH-ConfigDedicated-NB-v1610 ::= SEQUENCE +SRSASN_CODE npusch_cfg_ded_nb_v1610_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(npusch_multi_tb_cfg_r16.pack(bref)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE npusch_cfg_ded_nb_v1610_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(npusch_multi_tb_cfg_r16.unpack(bref)); + + return SRSASN_SUCCESS; +} +void npusch_cfg_ded_nb_v1610_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_str("npusch-MultiTB-Config-r16", npusch_multi_tb_cfg_r16.to_string()); + j.end_obj(); +} + +const char* npusch_cfg_ded_nb_v1610_s::npusch_multi_tb_cfg_r16_opts::to_string() const +{ + static const char* options[] = {"interleaved", "nonInterleaved"}; + return convert_enum_idx(options, 2, value, "npusch_cfg_ded_nb_v1610_s::npusch_multi_tb_cfg_r16_e_"); +} + +// NPUSCH-ConfigDedicated-NB-v1700 ::= SEQUENCE +SRSASN_CODE npusch_cfg_ded_nb_v1700_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(npusch_minus16_qam_cfg_r17_present, 1)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE npusch_cfg_ded_nb_v1700_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(npusch_minus16_qam_cfg_r17_present, 1)); + + return SRSASN_SUCCESS; +} +void npusch_cfg_ded_nb_v1700_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (npusch_minus16_qam_cfg_r17_present) { + j.write_str("npusch-16QAM-Config-r17", "true"); + } + j.end_obj(); +} + +// NPUSCH-TxDuration-NB-r17 ::= SEQUENCE +SRSASN_CODE npusch_tx_dur_nb_r17_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(npusch_tx_dur_r17.pack(bref)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE npusch_tx_dur_nb_r17_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(npusch_tx_dur_r17.unpack(bref)); + + return SRSASN_SUCCESS; +} +void npusch_tx_dur_nb_r17_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_str("npusch-TxDuration-r17", npusch_tx_dur_r17.to_string()); + j.end_obj(); +} + +const char* npusch_tx_dur_nb_r17_s::npusch_tx_dur_r17_opts::to_string() const +{ + static const char* options[] = {"ms2", "ms4", "ms8", "ms16", "ms32", "ms64", "ms128", "ms256"}; + return convert_enum_idx(options, 8, value, "npusch_tx_dur_nb_r17_s::npusch_tx_dur_r17_e_"); +} +uint16_t npusch_tx_dur_nb_r17_s::npusch_tx_dur_r17_opts::to_number() const +{ + static const uint16_t options[] = {2, 4, 8, 16, 32, 64, 128, 256}; + return map_enum_number(options, 8, value, "npusch_tx_dur_nb_r17_s::npusch_tx_dur_r17_e_"); +} + +// OffsetThresholdTA-NB-r17 ::= ENUMERATED +const char* offset_thres_ta_nb_r17_opts::to_string() const +{ + static const char* options[] = {"ms0dot5", + "ms1", + "ms2", + "ms3", + "ms4", + "ms5", + "ms6", + "ms7", + "ms8", + "ms9", + "ms10", + "ms11", + "ms12", + "ms13", + "ms14", + "ms15"}; + return convert_enum_idx(options, 16, value, "offset_thres_ta_nb_r17_e"); +} +float offset_thres_ta_nb_r17_opts::to_number() const +{ + static const float options[] = {0.5, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, 13.0, 14.0, 15.0}; + return map_enum_number(options, 16, value, "offset_thres_ta_nb_r17_e"); +} +const char* offset_thres_ta_nb_r17_opts::to_number_string() const +{ + static const char* options[] = { + "0.5", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"}; + return convert_enum_idx(options, 16, value, "offset_thres_ta_nb_r17_e"); +} + // PeriodicBSR-Timer-NB-r13 ::= ENUMERATED const char* periodic_bsr_timer_nb_r13_opts::to_string() const { @@ -2072,6 +2664,662 @@ int16_t periodic_bsr_timer_nb_r13_opts::to_number() const return map_enum_number(options, 7, value, "periodic_bsr_timer_nb_r13_e"); } +// ResourceReservationConfig-NB-r16 ::= SEQUENCE +SRSASN_CODE res_reserv_cfg_nb_r16_s::pack(bit_ref& bref) const +{ + bref.pack(ext, 1); + HANDLE_CODE(periodicity_r16.pack(bref)); + HANDLE_CODE(pack_integer(bref, start_position_r16, (uint8_t)0u, (uint8_t)15u)); + HANDLE_CODE(res_reserv_r16.pack(bref)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE res_reserv_cfg_nb_r16_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(periodicity_r16.unpack(bref)); + HANDLE_CODE(unpack_integer(start_position_r16, bref, (uint8_t)0u, (uint8_t)15u)); + HANDLE_CODE(res_reserv_r16.unpack(bref)); + + return SRSASN_SUCCESS; +} +void res_reserv_cfg_nb_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_str("periodicity-r16", periodicity_r16.to_string()); + j.write_int("startPosition-r16", start_position_r16); + j.write_fieldname("resourceReservation-r16"); + res_reserv_r16.to_json(j); + j.end_obj(); +} + +const char* res_reserv_cfg_nb_r16_s::periodicity_r16_opts::to_string() const +{ + static const char* options[] = {"ms10", "ms20", "ms40", "ms80", "ms160", "spare3", "spare2", "spare1"}; + return convert_enum_idx(options, 8, value, "res_reserv_cfg_nb_r16_s::periodicity_r16_e_"); +} +uint8_t res_reserv_cfg_nb_r16_s::periodicity_r16_opts::to_number() const +{ + static const uint8_t options[] = {10, 20, 40, 80, 160}; + return map_enum_number(options, 5, value, "res_reserv_cfg_nb_r16_s::periodicity_r16_e_"); +} + +void res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::destroy_() +{ + switch (type_) { + case types::sf_bitmap_r16: + c.destroy<sf_bitmap_r16_c_>(); + break; + case types::slot_cfg_r16: + c.destroy<slot_cfg_r16_s_>(); + break; + default: + break; + } +} +void res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::set(types::options e) +{ + destroy_(); + type_ = e; + switch (type_) { + case types::sf_bitmap_r16: + c.init<sf_bitmap_r16_c_>(); + break; + case types::slot_cfg_r16: + c.init<slot_cfg_r16_s_>(); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "res_reserv_cfg_nb_r16_s::res_reserv_r16_c_"); + } +} +res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::res_reserv_r16_c_(const res_reserv_cfg_nb_r16_s::res_reserv_r16_c_& other) +{ + type_ = other.type(); + switch (type_) { + case types::sf_bitmap_r16: + c.init(other.c.get<sf_bitmap_r16_c_>()); + break; + case types::slot_cfg_r16: + c.init(other.c.get<slot_cfg_r16_s_>()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "res_reserv_cfg_nb_r16_s::res_reserv_r16_c_"); + } +} +res_reserv_cfg_nb_r16_s::res_reserv_r16_c_& +res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::operator=(const res_reserv_cfg_nb_r16_s::res_reserv_r16_c_& other) +{ + if (this == &other) { + return *this; + } + set(other.type()); + switch (type_) { + case types::sf_bitmap_r16: + c.set(other.c.get<sf_bitmap_r16_c_>()); + break; + case types::slot_cfg_r16: + c.set(other.c.get<slot_cfg_r16_s_>()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "res_reserv_cfg_nb_r16_s::res_reserv_r16_c_"); + } + + return *this; +} +res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::sf_bitmap_r16_c_& +res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::set_sf_bitmap_r16() +{ + set(types::sf_bitmap_r16); + return c.get<sf_bitmap_r16_c_>(); +} +res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::slot_cfg_r16_s_& +res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::set_slot_cfg_r16() +{ + set(types::slot_cfg_r16); + return c.get<slot_cfg_r16_s_>(); +} +void res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::to_json(json_writer& j) const +{ + j.start_obj(); + switch (type_) { + case types::sf_bitmap_r16: + j.write_fieldname("subframeBitmap-r16"); + c.get<sf_bitmap_r16_c_>().to_json(j); + break; + case types::slot_cfg_r16: + j.write_fieldname("slotConfig-r16"); + j.start_obj(); + j.write_fieldname("slotBitmap-r16"); + c.get<slot_cfg_r16_s_>().slot_bitmap_r16.to_json(j); + j.write_fieldname("symbolBitmap-r16"); + c.get<slot_cfg_r16_s_>().symbol_bitmap_r16.to_json(j); + j.end_obj(); + break; + default: + log_invalid_choice_id(type_, "res_reserv_cfg_nb_r16_s::res_reserv_r16_c_"); + } + j.end_obj(); +} +SRSASN_CODE res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::pack(bit_ref& bref) const +{ + type_.pack(bref); + switch (type_) { + case types::sf_bitmap_r16: + HANDLE_CODE(c.get<sf_bitmap_r16_c_>().pack(bref)); + break; + case types::slot_cfg_r16: + HANDLE_CODE(c.get<slot_cfg_r16_s_>().slot_bitmap_r16.pack(bref)); + HANDLE_CODE(c.get<slot_cfg_r16_s_>().symbol_bitmap_r16.pack(bref)); + break; + default: + log_invalid_choice_id(type_, "res_reserv_cfg_nb_r16_s::res_reserv_r16_c_"); + return SRSASN_ERROR_ENCODE_FAIL; + } + return SRSASN_SUCCESS; +} +SRSASN_CODE res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::unpack(cbit_ref& bref) +{ + types e; + e.unpack(bref); + set(e); + switch (type_) { + case types::sf_bitmap_r16: + HANDLE_CODE(c.get<sf_bitmap_r16_c_>().unpack(bref)); + break; + case types::slot_cfg_r16: + HANDLE_CODE(c.get<slot_cfg_r16_s_>().slot_bitmap_r16.unpack(bref)); + HANDLE_CODE(c.get<slot_cfg_r16_s_>().symbol_bitmap_r16.unpack(bref)); + break; + default: + log_invalid_choice_id(type_, "res_reserv_cfg_nb_r16_s::res_reserv_r16_c_"); + return SRSASN_ERROR_DECODE_FAIL; + } + return SRSASN_SUCCESS; +} + +void res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::sf_bitmap_r16_c_::destroy_() +{ + switch (type_) { + case types::sf_pattern10ms: + c.destroy<fixed_bitstring<10> >(); + break; + case types::sf_pattern40ms: + c.destroy<fixed_bitstring<40> >(); + break; + default: + break; + } +} +void res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::sf_bitmap_r16_c_::set(types::options e) +{ + destroy_(); + type_ = e; + switch (type_) { + case types::sf_pattern10ms: + c.init<fixed_bitstring<10> >(); + break; + case types::sf_pattern40ms: + c.init<fixed_bitstring<40> >(); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::sf_bitmap_r16_c_"); + } +} +res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::sf_bitmap_r16_c_::sf_bitmap_r16_c_( + const res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::sf_bitmap_r16_c_& other) +{ + type_ = other.type(); + switch (type_) { + case types::sf_pattern10ms: + c.init(other.c.get<fixed_bitstring<10> >()); + break; + case types::sf_pattern40ms: + c.init(other.c.get<fixed_bitstring<40> >()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::sf_bitmap_r16_c_"); + } +} +res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::sf_bitmap_r16_c_& +res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::sf_bitmap_r16_c_::operator=( + const res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::sf_bitmap_r16_c_& other) +{ + if (this == &other) { + return *this; + } + set(other.type()); + switch (type_) { + case types::sf_pattern10ms: + c.set(other.c.get<fixed_bitstring<10> >()); + break; + case types::sf_pattern40ms: + c.set(other.c.get<fixed_bitstring<40> >()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::sf_bitmap_r16_c_"); + } + + return *this; +} +fixed_bitstring<10>& res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::sf_bitmap_r16_c_::set_sf_pattern10ms() +{ + set(types::sf_pattern10ms); + return c.get<fixed_bitstring<10> >(); +} +fixed_bitstring<40>& res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::sf_bitmap_r16_c_::set_sf_pattern40ms() +{ + set(types::sf_pattern40ms); + return c.get<fixed_bitstring<40> >(); +} +void res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::sf_bitmap_r16_c_::to_json(json_writer& j) const +{ + j.start_obj(); + switch (type_) { + case types::sf_pattern10ms: + j.write_str("subframePattern10ms", c.get<fixed_bitstring<10> >().to_string()); + break; + case types::sf_pattern40ms: + j.write_str("subframePattern40ms", c.get<fixed_bitstring<40> >().to_string()); + break; + default: + log_invalid_choice_id(type_, "res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::sf_bitmap_r16_c_"); + } + j.end_obj(); +} +SRSASN_CODE res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::sf_bitmap_r16_c_::pack(bit_ref& bref) const +{ + type_.pack(bref); + switch (type_) { + case types::sf_pattern10ms: + HANDLE_CODE(c.get<fixed_bitstring<10> >().pack(bref)); + break; + case types::sf_pattern40ms: + HANDLE_CODE(c.get<fixed_bitstring<40> >().pack(bref)); + break; + default: + log_invalid_choice_id(type_, "res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::sf_bitmap_r16_c_"); + return SRSASN_ERROR_ENCODE_FAIL; + } + return SRSASN_SUCCESS; +} +SRSASN_CODE res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::sf_bitmap_r16_c_::unpack(cbit_ref& bref) +{ + types e; + e.unpack(bref); + set(e); + switch (type_) { + case types::sf_pattern10ms: + HANDLE_CODE(c.get<fixed_bitstring<10> >().unpack(bref)); + break; + case types::sf_pattern40ms: + HANDLE_CODE(c.get<fixed_bitstring<40> >().unpack(bref)); + break; + default: + log_invalid_choice_id(type_, "res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::sf_bitmap_r16_c_"); + return SRSASN_ERROR_DECODE_FAIL; + } + return SRSASN_SUCCESS; +} + +const char* res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::sf_bitmap_r16_c_::types_opts::to_string() const +{ + static const char* options[] = {"subframePattern10ms", "subframePattern40ms"}; + return convert_enum_idx(options, 2, value, "res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::sf_bitmap_r16_c_::types"); +} +uint8_t res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::sf_bitmap_r16_c_::types_opts::to_number() const +{ + static const uint8_t options[] = {10, 40}; + return map_enum_number(options, 2, value, "res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::sf_bitmap_r16_c_::types"); +} + +void res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::slot_cfg_r16_s_::slot_bitmap_r16_c_::destroy_() +{ + switch (type_) { + case types::slot_pattern10ms: + c.destroy<fixed_bitstring<20> >(); + break; + case types::slot_pattern40ms: + c.destroy<fixed_bitstring<80> >(); + break; + default: + break; + } +} +void res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::slot_cfg_r16_s_::slot_bitmap_r16_c_::set(types::options e) +{ + destroy_(); + type_ = e; + switch (type_) { + case types::slot_pattern10ms: + c.init<fixed_bitstring<20> >(); + break; + case types::slot_pattern40ms: + c.init<fixed_bitstring<80> >(); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::slot_cfg_r16_s_::slot_bitmap_r16_c_"); + } +} +res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::slot_cfg_r16_s_::slot_bitmap_r16_c_::slot_bitmap_r16_c_( + const res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::slot_cfg_r16_s_::slot_bitmap_r16_c_& other) +{ + type_ = other.type(); + switch (type_) { + case types::slot_pattern10ms: + c.init(other.c.get<fixed_bitstring<20> >()); + break; + case types::slot_pattern40ms: + c.init(other.c.get<fixed_bitstring<80> >()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::slot_cfg_r16_s_::slot_bitmap_r16_c_"); + } +} +res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::slot_cfg_r16_s_::slot_bitmap_r16_c_& +res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::slot_cfg_r16_s_::slot_bitmap_r16_c_::operator=( + const res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::slot_cfg_r16_s_::slot_bitmap_r16_c_& other) +{ + if (this == &other) { + return *this; + } + set(other.type()); + switch (type_) { + case types::slot_pattern10ms: + c.set(other.c.get<fixed_bitstring<20> >()); + break; + case types::slot_pattern40ms: + c.set(other.c.get<fixed_bitstring<80> >()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::slot_cfg_r16_s_::slot_bitmap_r16_c_"); + } + + return *this; +} +fixed_bitstring<20>& +res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::slot_cfg_r16_s_::slot_bitmap_r16_c_::set_slot_pattern10ms() +{ + set(types::slot_pattern10ms); + return c.get<fixed_bitstring<20> >(); +} +fixed_bitstring<80>& +res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::slot_cfg_r16_s_::slot_bitmap_r16_c_::set_slot_pattern40ms() +{ + set(types::slot_pattern40ms); + return c.get<fixed_bitstring<80> >(); +} +void res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::slot_cfg_r16_s_::slot_bitmap_r16_c_::to_json(json_writer& j) const +{ + j.start_obj(); + switch (type_) { + case types::slot_pattern10ms: + j.write_str("slotPattern10ms", c.get<fixed_bitstring<20> >().to_string()); + break; + case types::slot_pattern40ms: + j.write_str("slotPattern40ms", c.get<fixed_bitstring<80> >().to_string()); + break; + default: + log_invalid_choice_id(type_, "res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::slot_cfg_r16_s_::slot_bitmap_r16_c_"); + } + j.end_obj(); +} +SRSASN_CODE res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::slot_cfg_r16_s_::slot_bitmap_r16_c_::pack(bit_ref& bref) const +{ + type_.pack(bref); + switch (type_) { + case types::slot_pattern10ms: + HANDLE_CODE(c.get<fixed_bitstring<20> >().pack(bref)); + break; + case types::slot_pattern40ms: + HANDLE_CODE(c.get<fixed_bitstring<80> >().pack(bref)); + break; + default: + log_invalid_choice_id(type_, "res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::slot_cfg_r16_s_::slot_bitmap_r16_c_"); + return SRSASN_ERROR_ENCODE_FAIL; + } + return SRSASN_SUCCESS; +} +SRSASN_CODE res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::slot_cfg_r16_s_::slot_bitmap_r16_c_::unpack(cbit_ref& bref) +{ + types e; + e.unpack(bref); + set(e); + switch (type_) { + case types::slot_pattern10ms: + HANDLE_CODE(c.get<fixed_bitstring<20> >().unpack(bref)); + break; + case types::slot_pattern40ms: + HANDLE_CODE(c.get<fixed_bitstring<80> >().unpack(bref)); + break; + default: + log_invalid_choice_id(type_, "res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::slot_cfg_r16_s_::slot_bitmap_r16_c_"); + return SRSASN_ERROR_DECODE_FAIL; + } + return SRSASN_SUCCESS; +} + +const char* +res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::slot_cfg_r16_s_::slot_bitmap_r16_c_::types_opts::to_string() const +{ + static const char* options[] = {"slotPattern10ms", "slotPattern40ms"}; + return convert_enum_idx( + options, 2, value, "res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::slot_cfg_r16_s_::slot_bitmap_r16_c_::types"); +} +uint8_t res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::slot_cfg_r16_s_::slot_bitmap_r16_c_::types_opts::to_number() const +{ + static const uint8_t options[] = {10, 40}; + return map_enum_number( + options, 2, value, "res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::slot_cfg_r16_s_::slot_bitmap_r16_c_::types"); +} + +void res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::slot_cfg_r16_s_::symbol_bitmap_r16_c_::destroy_() +{ + switch (type_) { + case types::symbol_bitmap_fdd_dl: + c.destroy<symbol_bitmap_fdd_dl_s_>(); + break; + case types::symbol_bitmap_fdd_ul_or_tdd: + c.destroy<symbol_bitmap_fdd_ul_or_tdd_s_>(); + break; + default: + break; + } +} +void res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::slot_cfg_r16_s_::symbol_bitmap_r16_c_::set(types::options e) +{ + destroy_(); + type_ = e; + switch (type_) { + case types::symbol_bitmap_fdd_dl: + c.init<symbol_bitmap_fdd_dl_s_>(); + break; + case types::symbol_bitmap_fdd_ul_or_tdd: + c.init<symbol_bitmap_fdd_ul_or_tdd_s_>(); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::slot_cfg_r16_s_::symbol_bitmap_r16_c_"); + } +} +res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::slot_cfg_r16_s_::symbol_bitmap_r16_c_::symbol_bitmap_r16_c_( + const res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::slot_cfg_r16_s_::symbol_bitmap_r16_c_& other) +{ + type_ = other.type(); + switch (type_) { + case types::symbol_bitmap_fdd_dl: + c.init(other.c.get<symbol_bitmap_fdd_dl_s_>()); + break; + case types::symbol_bitmap_fdd_ul_or_tdd: + c.init(other.c.get<symbol_bitmap_fdd_ul_or_tdd_s_>()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::slot_cfg_r16_s_::symbol_bitmap_r16_c_"); + } +} +res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::slot_cfg_r16_s_::symbol_bitmap_r16_c_& +res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::slot_cfg_r16_s_::symbol_bitmap_r16_c_::operator=( + const res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::slot_cfg_r16_s_::symbol_bitmap_r16_c_& other) +{ + if (this == &other) { + return *this; + } + set(other.type()); + switch (type_) { + case types::symbol_bitmap_fdd_dl: + c.set(other.c.get<symbol_bitmap_fdd_dl_s_>()); + break; + case types::symbol_bitmap_fdd_ul_or_tdd: + c.set(other.c.get<symbol_bitmap_fdd_ul_or_tdd_s_>()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::slot_cfg_r16_s_::symbol_bitmap_r16_c_"); + } + + return *this; +} +res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::slot_cfg_r16_s_::symbol_bitmap_r16_c_::symbol_bitmap_fdd_dl_s_& +res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::slot_cfg_r16_s_::symbol_bitmap_r16_c_::set_symbol_bitmap_fdd_dl() +{ + set(types::symbol_bitmap_fdd_dl); + return c.get<symbol_bitmap_fdd_dl_s_>(); +} +res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::slot_cfg_r16_s_::symbol_bitmap_r16_c_::symbol_bitmap_fdd_ul_or_tdd_s_& +res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::slot_cfg_r16_s_::symbol_bitmap_r16_c_::set_symbol_bitmap_fdd_ul_or_tdd() +{ + set(types::symbol_bitmap_fdd_ul_or_tdd); + return c.get<symbol_bitmap_fdd_ul_or_tdd_s_>(); +} +void res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::slot_cfg_r16_s_::symbol_bitmap_r16_c_::to_json(json_writer& j) const +{ + j.start_obj(); + switch (type_) { + case types::symbol_bitmap_fdd_dl: + j.write_fieldname("symbolBitmapFddDl"); + j.start_obj(); + if (c.get<symbol_bitmap_fdd_dl_s_>().symbol_bitmap1_r16_present) { + j.write_str("symbolBitmap1-r16", c.get<symbol_bitmap_fdd_dl_s_>().symbol_bitmap1_r16.to_string()); + } + if (c.get<symbol_bitmap_fdd_dl_s_>().symbol_bitmap2_r16_present) { + j.write_str("symbolBitmap2-r16", c.get<symbol_bitmap_fdd_dl_s_>().symbol_bitmap2_r16.to_string()); + } + j.end_obj(); + break; + case types::symbol_bitmap_fdd_ul_or_tdd: + j.write_fieldname("symbolBitmapFddUlOrTdd"); + j.start_obj(); + if (c.get<symbol_bitmap_fdd_ul_or_tdd_s_>().symbol_bitmap1_r16_present) { + j.write_str("symbolBitmap1-r16", c.get<symbol_bitmap_fdd_ul_or_tdd_s_>().symbol_bitmap1_r16.to_string()); + } + if (c.get<symbol_bitmap_fdd_ul_or_tdd_s_>().symbol_bitmap2_r16_present) { + j.write_str("symbolBitmap2-r16", c.get<symbol_bitmap_fdd_ul_or_tdd_s_>().symbol_bitmap2_r16.to_string()); + } + j.end_obj(); + break; + default: + log_invalid_choice_id(type_, "res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::slot_cfg_r16_s_::symbol_bitmap_r16_c_"); + } + j.end_obj(); +} +SRSASN_CODE res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::slot_cfg_r16_s_::symbol_bitmap_r16_c_::pack(bit_ref& bref) const +{ + type_.pack(bref); + switch (type_) { + case types::symbol_bitmap_fdd_dl: + HANDLE_CODE(bref.pack(c.get<symbol_bitmap_fdd_dl_s_>().symbol_bitmap1_r16_present, 1)); + HANDLE_CODE(bref.pack(c.get<symbol_bitmap_fdd_dl_s_>().symbol_bitmap2_r16_present, 1)); + if (c.get<symbol_bitmap_fdd_dl_s_>().symbol_bitmap1_r16_present) { + HANDLE_CODE(c.get<symbol_bitmap_fdd_dl_s_>().symbol_bitmap1_r16.pack(bref)); + } + if (c.get<symbol_bitmap_fdd_dl_s_>().symbol_bitmap2_r16_present) { + HANDLE_CODE(c.get<symbol_bitmap_fdd_dl_s_>().symbol_bitmap2_r16.pack(bref)); + } + break; + case types::symbol_bitmap_fdd_ul_or_tdd: + HANDLE_CODE(bref.pack(c.get<symbol_bitmap_fdd_ul_or_tdd_s_>().symbol_bitmap1_r16_present, 1)); + HANDLE_CODE(bref.pack(c.get<symbol_bitmap_fdd_ul_or_tdd_s_>().symbol_bitmap2_r16_present, 1)); + if (c.get<symbol_bitmap_fdd_ul_or_tdd_s_>().symbol_bitmap1_r16_present) { + HANDLE_CODE(c.get<symbol_bitmap_fdd_ul_or_tdd_s_>().symbol_bitmap1_r16.pack(bref)); + } + if (c.get<symbol_bitmap_fdd_ul_or_tdd_s_>().symbol_bitmap2_r16_present) { + HANDLE_CODE(c.get<symbol_bitmap_fdd_ul_or_tdd_s_>().symbol_bitmap2_r16.pack(bref)); + } + break; + default: + log_invalid_choice_id(type_, "res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::slot_cfg_r16_s_::symbol_bitmap_r16_c_"); + return SRSASN_ERROR_ENCODE_FAIL; + } + return SRSASN_SUCCESS; +} +SRSASN_CODE res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::slot_cfg_r16_s_::symbol_bitmap_r16_c_::unpack(cbit_ref& bref) +{ + types e; + e.unpack(bref); + set(e); + switch (type_) { + case types::symbol_bitmap_fdd_dl: + HANDLE_CODE(bref.unpack(c.get<symbol_bitmap_fdd_dl_s_>().symbol_bitmap1_r16_present, 1)); + HANDLE_CODE(bref.unpack(c.get<symbol_bitmap_fdd_dl_s_>().symbol_bitmap2_r16_present, 1)); + if (c.get<symbol_bitmap_fdd_dl_s_>().symbol_bitmap1_r16_present) { + HANDLE_CODE(c.get<symbol_bitmap_fdd_dl_s_>().symbol_bitmap1_r16.unpack(bref)); + } + if (c.get<symbol_bitmap_fdd_dl_s_>().symbol_bitmap2_r16_present) { + HANDLE_CODE(c.get<symbol_bitmap_fdd_dl_s_>().symbol_bitmap2_r16.unpack(bref)); + } + break; + case types::symbol_bitmap_fdd_ul_or_tdd: + HANDLE_CODE(bref.unpack(c.get<symbol_bitmap_fdd_ul_or_tdd_s_>().symbol_bitmap1_r16_present, 1)); + HANDLE_CODE(bref.unpack(c.get<symbol_bitmap_fdd_ul_or_tdd_s_>().symbol_bitmap2_r16_present, 1)); + if (c.get<symbol_bitmap_fdd_ul_or_tdd_s_>().symbol_bitmap1_r16_present) { + HANDLE_CODE(c.get<symbol_bitmap_fdd_ul_or_tdd_s_>().symbol_bitmap1_r16.unpack(bref)); + } + if (c.get<symbol_bitmap_fdd_ul_or_tdd_s_>().symbol_bitmap2_r16_present) { + HANDLE_CODE(c.get<symbol_bitmap_fdd_ul_or_tdd_s_>().symbol_bitmap2_r16.unpack(bref)); + } + break; + default: + log_invalid_choice_id(type_, "res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::slot_cfg_r16_s_::symbol_bitmap_r16_c_"); + return SRSASN_ERROR_DECODE_FAIL; + } + return SRSASN_SUCCESS; +} + +const char* +res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::slot_cfg_r16_s_::symbol_bitmap_r16_c_::types_opts::to_string() const +{ + static const char* options[] = {"symbolBitmapFddDl", "symbolBitmapFddUlOrTdd"}; + return convert_enum_idx( + options, 2, value, "res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::slot_cfg_r16_s_::symbol_bitmap_r16_c_::types"); +} + +const char* res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::types_opts::to_string() const +{ + static const char* options[] = {"subframeBitmap-r16", "slotConfig-r16"}; + return convert_enum_idx(options, 2, value, "res_reserv_cfg_nb_r16_s::res_reserv_r16_c_::types"); +} + // RetxBSR-Timer-NB-r13 ::= ENUMERATED const char* retx_bsr_timer_nb_r13_opts::to_string() const { @@ -2246,6 +3494,37 @@ SRSASN_CODE sr_without_harq_ack_cfg_nb_r15_c::unpack(cbit_ref& bref) return SRSASN_SUCCESS; } +// SR-WithoutHARQ-ACK-Config-NB-v1700 ::= SEQUENCE +SRSASN_CODE sr_without_harq_ack_cfg_nb_v1700_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(sr_prohibit_timer_offset_r17_present, 1)); + + if (sr_prohibit_timer_offset_r17_present) { + HANDLE_CODE(sr_prohibit_timer_offset_r17.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE sr_without_harq_ack_cfg_nb_v1700_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(sr_prohibit_timer_offset_r17_present, 1)); + + if (sr_prohibit_timer_offset_r17_present) { + HANDLE_CODE(sr_prohibit_timer_offset_r17.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void sr_without_harq_ack_cfg_nb_v1700_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (sr_prohibit_timer_offset_r17_present) { + j.write_fieldname("sr-ProhibitTimerOffset-r17"); + sr_prohibit_timer_offset_r17.to_json(j); + } + j.end_obj(); +} + // SRB-ToAddMod-NB-r13 ::= SEQUENCE SRSASN_CODE srb_to_add_mod_nb_r13_s::pack(bit_ref& bref) const { @@ -2263,6 +3542,7 @@ SRSASN_CODE srb_to_add_mod_nb_r13_s::pack(bit_ref& bref) const if (ext) { ext_groups_packer_guard group_flags; group_flags[0] |= rlc_cfg_v1430.is_present(); + group_flags[1] |= rlc_cfg_v1700.is_present(); group_flags.pack(bref); if (group_flags[0]) { @@ -2273,6 +3553,14 @@ SRSASN_CODE srb_to_add_mod_nb_r13_s::pack(bit_ref& bref) const HANDLE_CODE(rlc_cfg_v1430->pack(bref)); } } + if (group_flags[1]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(rlc_cfg_v1700.is_present(), 1)); + if (rlc_cfg_v1700.is_present()) { + HANDLE_CODE(rlc_cfg_v1700->pack(bref)); + } + } } return SRSASN_SUCCESS; } @@ -2290,7 +3578,7 @@ SRSASN_CODE srb_to_add_mod_nb_r13_s::unpack(cbit_ref& bref) } if (ext) { - ext_groups_unpacker_guard group_flags(1); + ext_groups_unpacker_guard group_flags(2); group_flags.unpack(bref); if (group_flags[0]) { @@ -2303,6 +3591,16 @@ SRSASN_CODE srb_to_add_mod_nb_r13_s::unpack(cbit_ref& bref) HANDLE_CODE(rlc_cfg_v1430->unpack(bref)); } } + if (group_flags[1]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + bool rlc_cfg_v1700_present; + HANDLE_CODE(bref.unpack(rlc_cfg_v1700_present, 1)); + rlc_cfg_v1700.set_present(rlc_cfg_v1700_present); + if (rlc_cfg_v1700.is_present()) { + HANDLE_CODE(rlc_cfg_v1700->unpack(bref)); + } + } } return SRSASN_SUCCESS; } @@ -2322,6 +3620,10 @@ void srb_to_add_mod_nb_r13_s::to_json(json_writer& j) const j.write_fieldname("rlc-Config-v1430"); rlc_cfg_v1430->to_json(j); } + if (rlc_cfg_v1700.is_present()) { + j.write_fieldname("rlc-Config-v1700"); + rlc_cfg_v1700->to_json(j); + } } j.end_obj(); } @@ -2480,6 +3782,37 @@ void ul_pwr_ctrl_ded_nb_r13_s::to_json(json_writer& j) const j.end_obj(); } +// UplinkPowerControlDedicated-NB-v1700 ::= SEQUENCE +SRSASN_CODE ul_pwr_ctrl_ded_nb_v1700_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(delta_mcs_enabled_r17.pack(bref)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE ul_pwr_ctrl_ded_nb_v1700_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(delta_mcs_enabled_r17.unpack(bref)); + + return SRSASN_SUCCESS; +} +void ul_pwr_ctrl_ded_nb_v1700_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_str("deltaMCS-Enabled-r17", delta_mcs_enabled_r17.to_string()); + j.end_obj(); +} + +const char* ul_pwr_ctrl_ded_nb_v1700_s::delta_mcs_enabled_r17_opts::to_string() const +{ + static const char* options[] = {"en0", "en1"}; + return convert_enum_idx(options, 2, value, "ul_pwr_ctrl_ded_nb_v1700_s::delta_mcs_enabled_r17_e_"); +} +uint8_t ul_pwr_ctrl_ded_nb_v1700_s::delta_mcs_enabled_r17_opts::to_number() const +{ + static const uint8_t options[] = {0, 1}; + return map_enum_number(options, 2, value, "ul_pwr_ctrl_ded_nb_v1700_s::delta_mcs_enabled_r17_e_"); +} + // MAC-MainConfig-NB-r13 ::= SEQUENCE SRSASN_CODE mac_main_cfg_nb_r13_s::pack(bit_ref& bref) const { @@ -2509,6 +3842,7 @@ SRSASN_CODE mac_main_cfg_nb_r13_s::pack(bit_ref& bref) const group_flags[0] |= data_inactivity_timer_cfg_r14.is_present(); group_flags[1] |= drx_cycle_v1430_present; group_flags[2] |= ra_cfra_cfg_r14_present; + group_flags[3] |= offset_thres_ta_r17.is_present(); group_flags.pack(bref); if (group_flags[0]) { @@ -2533,6 +3867,14 @@ SRSASN_CODE mac_main_cfg_nb_r13_s::pack(bit_ref& bref) const HANDLE_CODE(bref.pack(ra_cfra_cfg_r14_present, 1)); } + if (group_flags[3]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(offset_thres_ta_r17.is_present(), 1)); + if (offset_thres_ta_r17.is_present()) { + HANDLE_CODE(offset_thres_ta_r17->pack(bref)); + } + } } return SRSASN_SUCCESS; } @@ -2559,7 +3901,7 @@ SRSASN_CODE mac_main_cfg_nb_r13_s::unpack(cbit_ref& bref) } if (ext) { - ext_groups_unpacker_guard group_flags(3); + ext_groups_unpacker_guard group_flags(4); group_flags.unpack(bref); if (group_flags[0]) { @@ -2586,6 +3928,16 @@ SRSASN_CODE mac_main_cfg_nb_r13_s::unpack(cbit_ref& bref) HANDLE_CODE(bref.unpack(ra_cfra_cfg_r14_present, 1)); } + if (group_flags[3]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + bool offset_thres_ta_r17_present; + HANDLE_CODE(bref.unpack(offset_thres_ta_r17_present, 1)); + offset_thres_ta_r17.set_present(offset_thres_ta_r17_present); + if (offset_thres_ta_r17.is_present()) { + HANDLE_CODE(offset_thres_ta_r17->unpack(bref)); + } + } } return SRSASN_SUCCESS; } @@ -2624,6 +3976,10 @@ void mac_main_cfg_nb_r13_s::to_json(json_writer& j) const if (ra_cfra_cfg_r14_present) { j.write_str("ra-CFRA-Config-r14", "true"); } + if (offset_thres_ta_r17.is_present()) { + j.write_fieldname("offsetThresholdTA-r17"); + offset_thres_ta_r17->to_json(j); + } } j.end_obj(); } @@ -2807,6 +4163,15 @@ SRSASN_CODE phys_cfg_ded_nb_r13_s::pack(bit_ref& bref) const group_flags[1] |= interference_randomisation_cfg_r14_present; group_flags[2] |= npdcch_cfg_ded_v1530.is_present(); group_flags[3] |= add_tx_sib1_cfg_v1540_present; + group_flags[4] |= npusch_cfg_ded_v1610.is_present(); + group_flags[4] |= npdsch_cfg_ded_r16.is_present(); + group_flags[4] |= res_reserv_cfg_dl_r16.is_present(); + group_flags[4] |= res_reserv_cfg_ul_r16.is_present(); + group_flags[5] |= ntn_cfg_ded_r17.is_present(); + group_flags[5] |= npdsch_cfg_ded_v1700.is_present(); + group_flags[5] |= ul_pwr_ctrl_ded_v1700.is_present(); + group_flags[6] |= ul_segmented_precompensation_gap_r17_present; + group_flags[7] |= npusch_cfg_ded_v1740.is_present(); group_flags.pack(bref); if (group_flags[0]) { @@ -2832,6 +4197,58 @@ SRSASN_CODE phys_cfg_ded_nb_r13_s::pack(bit_ref& bref) const HANDLE_CODE(bref.pack(add_tx_sib1_cfg_v1540_present, 1)); } + if (group_flags[4]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(npusch_cfg_ded_v1610.is_present(), 1)); + HANDLE_CODE(bref.pack(npdsch_cfg_ded_r16.is_present(), 1)); + HANDLE_CODE(bref.pack(res_reserv_cfg_dl_r16.is_present(), 1)); + HANDLE_CODE(bref.pack(res_reserv_cfg_ul_r16.is_present(), 1)); + if (npusch_cfg_ded_v1610.is_present()) { + HANDLE_CODE(npusch_cfg_ded_v1610->pack(bref)); + } + if (npdsch_cfg_ded_r16.is_present()) { + HANDLE_CODE(npdsch_cfg_ded_r16->pack(bref)); + } + if (res_reserv_cfg_dl_r16.is_present()) { + HANDLE_CODE(res_reserv_cfg_dl_r16->pack(bref)); + } + if (res_reserv_cfg_ul_r16.is_present()) { + HANDLE_CODE(res_reserv_cfg_ul_r16->pack(bref)); + } + } + if (group_flags[5]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(ntn_cfg_ded_r17.is_present(), 1)); + HANDLE_CODE(bref.pack(npdsch_cfg_ded_v1700.is_present(), 1)); + HANDLE_CODE(bref.pack(ul_pwr_ctrl_ded_v1700.is_present(), 1)); + if (ntn_cfg_ded_r17.is_present()) { + HANDLE_CODE(ntn_cfg_ded_r17->npusch_tx_dur_r17.pack(bref)); + } + if (npdsch_cfg_ded_v1700.is_present()) { + HANDLE_CODE(npdsch_cfg_ded_v1700->pack(bref)); + } + if (ul_pwr_ctrl_ded_v1700.is_present()) { + HANDLE_CODE(ul_pwr_ctrl_ded_v1700->pack(bref)); + } + } + if (group_flags[6]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(ul_segmented_precompensation_gap_r17_present, 1)); + if (ul_segmented_precompensation_gap_r17_present) { + HANDLE_CODE(ul_segmented_precompensation_gap_r17.pack(bref)); + } + } + if (group_flags[7]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(npusch_cfg_ded_v1740.is_present(), 1)); + if (npusch_cfg_ded_v1740.is_present()) { + HANDLE_CODE(npusch_cfg_ded_v1740->pack(bref)); + } + } } return SRSASN_SUCCESS; } @@ -2857,7 +4274,7 @@ SRSASN_CODE phys_cfg_ded_nb_r13_s::unpack(cbit_ref& bref) } if (ext) { - ext_groups_unpacker_guard group_flags(4); + ext_groups_unpacker_guard group_flags(8); group_flags.unpack(bref); if (group_flags[0]) { @@ -2885,6 +4302,74 @@ SRSASN_CODE phys_cfg_ded_nb_r13_s::unpack(cbit_ref& bref) HANDLE_CODE(bref.unpack(add_tx_sib1_cfg_v1540_present, 1)); } + if (group_flags[4]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + bool npusch_cfg_ded_v1610_present; + HANDLE_CODE(bref.unpack(npusch_cfg_ded_v1610_present, 1)); + npusch_cfg_ded_v1610.set_present(npusch_cfg_ded_v1610_present); + bool npdsch_cfg_ded_r16_present; + HANDLE_CODE(bref.unpack(npdsch_cfg_ded_r16_present, 1)); + npdsch_cfg_ded_r16.set_present(npdsch_cfg_ded_r16_present); + bool res_reserv_cfg_dl_r16_present; + HANDLE_CODE(bref.unpack(res_reserv_cfg_dl_r16_present, 1)); + res_reserv_cfg_dl_r16.set_present(res_reserv_cfg_dl_r16_present); + bool res_reserv_cfg_ul_r16_present; + HANDLE_CODE(bref.unpack(res_reserv_cfg_ul_r16_present, 1)); + res_reserv_cfg_ul_r16.set_present(res_reserv_cfg_ul_r16_present); + if (npusch_cfg_ded_v1610.is_present()) { + HANDLE_CODE(npusch_cfg_ded_v1610->unpack(bref)); + } + if (npdsch_cfg_ded_r16.is_present()) { + HANDLE_CODE(npdsch_cfg_ded_r16->unpack(bref)); + } + if (res_reserv_cfg_dl_r16.is_present()) { + HANDLE_CODE(res_reserv_cfg_dl_r16->unpack(bref)); + } + if (res_reserv_cfg_ul_r16.is_present()) { + HANDLE_CODE(res_reserv_cfg_ul_r16->unpack(bref)); + } + } + if (group_flags[5]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + bool ntn_cfg_ded_r17_present; + HANDLE_CODE(bref.unpack(ntn_cfg_ded_r17_present, 1)); + ntn_cfg_ded_r17.set_present(ntn_cfg_ded_r17_present); + bool npdsch_cfg_ded_v1700_present; + HANDLE_CODE(bref.unpack(npdsch_cfg_ded_v1700_present, 1)); + npdsch_cfg_ded_v1700.set_present(npdsch_cfg_ded_v1700_present); + bool ul_pwr_ctrl_ded_v1700_present; + HANDLE_CODE(bref.unpack(ul_pwr_ctrl_ded_v1700_present, 1)); + ul_pwr_ctrl_ded_v1700.set_present(ul_pwr_ctrl_ded_v1700_present); + if (ntn_cfg_ded_r17.is_present()) { + HANDLE_CODE(ntn_cfg_ded_r17->npusch_tx_dur_r17.unpack(bref)); + } + if (npdsch_cfg_ded_v1700.is_present()) { + HANDLE_CODE(npdsch_cfg_ded_v1700->unpack(bref)); + } + if (ul_pwr_ctrl_ded_v1700.is_present()) { + HANDLE_CODE(ul_pwr_ctrl_ded_v1700->unpack(bref)); + } + } + if (group_flags[6]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.unpack(ul_segmented_precompensation_gap_r17_present, 1)); + if (ul_segmented_precompensation_gap_r17_present) { + HANDLE_CODE(ul_segmented_precompensation_gap_r17.unpack(bref)); + } + } + if (group_flags[7]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + bool npusch_cfg_ded_v1740_present; + HANDLE_CODE(bref.unpack(npusch_cfg_ded_v1740_present, 1)); + npusch_cfg_ded_v1740.set_present(npusch_cfg_ded_v1740_present); + if (npusch_cfg_ded_v1740.is_present()) { + HANDLE_CODE(npusch_cfg_ded_v1740->unpack(bref)); + } + } } return SRSASN_SUCCESS; } @@ -2921,10 +4406,54 @@ void phys_cfg_ded_nb_r13_s::to_json(json_writer& j) const if (add_tx_sib1_cfg_v1540_present) { j.write_str("additionalTxSIB1-Config-v1540", "true"); } + if (npusch_cfg_ded_v1610.is_present()) { + j.write_fieldname("npusch-ConfigDedicated-v1610"); + npusch_cfg_ded_v1610->to_json(j); + } + if (npdsch_cfg_ded_r16.is_present()) { + j.write_fieldname("npdsch-ConfigDedicated-r16"); + npdsch_cfg_ded_r16->to_json(j); + } + if (res_reserv_cfg_dl_r16.is_present()) { + j.write_fieldname("resourceReservationConfigDL-r16"); + res_reserv_cfg_dl_r16->to_json(j); + } + if (res_reserv_cfg_ul_r16.is_present()) { + j.write_fieldname("resourceReservationConfigUL-r16"); + res_reserv_cfg_ul_r16->to_json(j); + } + if (ntn_cfg_ded_r17.is_present()) { + j.write_fieldname("ntn-ConfigDedicated-r17"); + j.start_obj(); + j.write_fieldname("npusch-TxDuration-r17"); + ntn_cfg_ded_r17->npusch_tx_dur_r17.to_json(j); + j.end_obj(); + } + if (npdsch_cfg_ded_v1700.is_present()) { + j.write_fieldname("npdsch-ConfigDedicated-v1700"); + npdsch_cfg_ded_v1700->to_json(j); + } + if (ul_pwr_ctrl_ded_v1700.is_present()) { + j.write_fieldname("uplinkPowerControlDedicated-v1700"); + ul_pwr_ctrl_ded_v1700->to_json(j); + } + if (ul_segmented_precompensation_gap_r17_present) { + j.write_str("uplinkSegmentedPrecompensationGap-r17", ul_segmented_precompensation_gap_r17.to_string()); + } + if (npusch_cfg_ded_v1740.is_present()) { + j.write_fieldname("npusch-ConfigDedicated-v1740"); + npusch_cfg_ded_v1740->to_json(j); + } } j.end_obj(); } +const char* phys_cfg_ded_nb_r13_s::ul_segmented_precompensation_gap_r17_opts::to_string() const +{ + static const char* options[] = {"sym1", "sl1", "sl2"}; + return convert_enum_idx(options, 3, value, "phys_cfg_ded_nb_r13_s::ul_segmented_precompensation_gap_r17_e_"); +} + // RLF-TimersAndConstants-NB-r13 ::= CHOICE void rlf_timers_and_consts_nb_r13_c::set(types::options e) { @@ -3187,6 +4716,20 @@ SRSASN_CODE sched_request_cfg_nb_r15_s::pack(bit_ref& bref) const HANDLE_CODE(sr_sps_bsr_cfg_r15.pack(bref)); } + if (ext) { + ext_groups_packer_guard group_flags; + group_flags[0] |= sr_without_harq_ack_cfg_v1700.is_present(); + group_flags.pack(bref); + + if (group_flags[0]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(sr_without_harq_ack_cfg_v1700.is_present(), 1)); + if (sr_without_harq_ack_cfg_v1700.is_present()) { + HANDLE_CODE(sr_without_harq_ack_cfg_v1700->pack(bref)); + } + } + } return SRSASN_SUCCESS; } SRSASN_CODE sched_request_cfg_nb_r15_s::unpack(cbit_ref& bref) @@ -3203,6 +4746,21 @@ SRSASN_CODE sched_request_cfg_nb_r15_s::unpack(cbit_ref& bref) HANDLE_CODE(sr_sps_bsr_cfg_r15.unpack(bref)); } + if (ext) { + ext_groups_unpacker_guard group_flags(1); + group_flags.unpack(bref); + + if (group_flags[0]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + bool sr_without_harq_ack_cfg_v1700_present; + HANDLE_CODE(bref.unpack(sr_without_harq_ack_cfg_v1700_present, 1)); + sr_without_harq_ack_cfg_v1700.set_present(sr_without_harq_ack_cfg_v1700_present); + if (sr_without_harq_ack_cfg_v1700.is_present()) { + HANDLE_CODE(sr_without_harq_ack_cfg_v1700->unpack(bref)); + } + } + } return SRSASN_SUCCESS; } void sched_request_cfg_nb_r15_s::to_json(json_writer& j) const @@ -3219,6 +4777,12 @@ void sched_request_cfg_nb_r15_s::to_json(json_writer& j) const j.write_fieldname("sr-SPS-BSR-Config-r15"); sr_sps_bsr_cfg_r15.to_json(j); } + if (ext) { + if (sr_without_harq_ack_cfg_v1700.is_present()) { + j.write_fieldname("sr-WithoutHARQ-ACK-Config-v1700"); + sr_without_harq_ack_cfg_v1700->to_json(j); + } + } j.end_obj(); } @@ -3255,6 +4819,7 @@ SRSASN_CODE rr_cfg_ded_nb_r13_s::pack(bit_ref& bref) const if (ext) { ext_groups_packer_guard group_flags; group_flags[0] |= sched_request_cfg_r15.is_present(); + group_flags[1] |= new_ue_id_r16_present; group_flags.pack(bref); if (group_flags[0]) { @@ -3265,6 +4830,14 @@ SRSASN_CODE rr_cfg_ded_nb_r13_s::pack(bit_ref& bref) const HANDLE_CODE(sched_request_cfg_r15->pack(bref)); } } + if (group_flags[1]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(new_ue_id_r16_present, 1)); + if (new_ue_id_r16_present) { + HANDLE_CODE(new_ue_id_r16.pack(bref)); + } + } } return SRSASN_SUCCESS; } @@ -3298,7 +4871,7 @@ SRSASN_CODE rr_cfg_ded_nb_r13_s::unpack(cbit_ref& bref) } if (ext) { - ext_groups_unpacker_guard group_flags(1); + ext_groups_unpacker_guard group_flags(2); group_flags.unpack(bref); if (group_flags[0]) { @@ -3311,6 +4884,14 @@ SRSASN_CODE rr_cfg_ded_nb_r13_s::unpack(cbit_ref& bref) HANDLE_CODE(sched_request_cfg_r15->unpack(bref)); } } + if (group_flags[1]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.unpack(new_ue_id_r16_present, 1)); + if (new_ue_id_r16_present) { + HANDLE_CODE(new_ue_id_r16.unpack(bref)); + } + } } return SRSASN_SUCCESS; } @@ -3355,6 +4936,9 @@ void rr_cfg_ded_nb_r13_s::to_json(json_writer& j) const j.write_fieldname("schedulingRequestConfig-r15"); sched_request_cfg_r15->to_json(j); } + if (new_ue_id_r16_present) { + j.write_str("newUE-Identity-r16", new_ue_id_r16.to_string()); + } } j.end_obj(); } @@ -3700,6 +5284,8 @@ SRSASN_CODE mib_nb_s::pack(bit_ref& bref) const HANDLE_CODE(bref.pack(ab_enabled_r13, 1)); HANDLE_CODE(operation_mode_info_r13.pack(bref)); HANDLE_CODE(bref.pack(add_tx_sib1_r15, 1)); + HANDLE_CODE(bref.pack(ab_enabled_minus5_gc_r16, 1)); + HANDLE_CODE(part_earfcn_minus17.pack(bref)); HANDLE_CODE(spare.pack(bref)); return SRSASN_SUCCESS; @@ -3713,6 +5299,8 @@ SRSASN_CODE mib_nb_s::unpack(cbit_ref& bref) HANDLE_CODE(bref.unpack(ab_enabled_r13, 1)); HANDLE_CODE(operation_mode_info_r13.unpack(bref)); HANDLE_CODE(bref.unpack(add_tx_sib1_r15, 1)); + HANDLE_CODE(bref.unpack(ab_enabled_minus5_gc_r16, 1)); + HANDLE_CODE(part_earfcn_minus17.unpack(bref)); HANDLE_CODE(spare.unpack(bref)); return SRSASN_SUCCESS; @@ -3728,6 +5316,9 @@ void mib_nb_s::to_json(json_writer& j) const j.write_fieldname("operationModeInfo-r13"); operation_mode_info_r13.to_json(j); j.write_bool("additionalTransmissionSIB1-r15", add_tx_sib1_r15); + j.write_bool("ab-Enabled-5GC-r16", ab_enabled_minus5_gc_r16); + j.write_fieldname("partEARFCN-17"); + part_earfcn_minus17.to_json(j); j.write_str("spare", spare.to_string()); j.end_obj(); } @@ -3930,6 +5521,140 @@ uint8_t mib_nb_s::operation_mode_info_r13_c_::types_opts::to_number() const return 0; } +void mib_nb_s::part_earfcn_minus17_c_::destroy_() +{ + switch (type_) { + case types::spare: + c.destroy<fixed_bitstring<2> >(); + break; + case types::earfcn_lsb: + c.destroy<fixed_bitstring<2> >(); + break; + default: + break; + } +} +void mib_nb_s::part_earfcn_minus17_c_::set(types::options e) +{ + destroy_(); + type_ = e; + switch (type_) { + case types::spare: + c.init<fixed_bitstring<2> >(); + break; + case types::earfcn_lsb: + c.init<fixed_bitstring<2> >(); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "mib_nb_s::part_earfcn_minus17_c_"); + } +} +mib_nb_s::part_earfcn_minus17_c_::part_earfcn_minus17_c_(const mib_nb_s::part_earfcn_minus17_c_& other) +{ + type_ = other.type(); + switch (type_) { + case types::spare: + c.init(other.c.get<fixed_bitstring<2> >()); + break; + case types::earfcn_lsb: + c.init(other.c.get<fixed_bitstring<2> >()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "mib_nb_s::part_earfcn_minus17_c_"); + } +} +mib_nb_s::part_earfcn_minus17_c_& +mib_nb_s::part_earfcn_minus17_c_::operator=(const mib_nb_s::part_earfcn_minus17_c_& other) +{ + if (this == &other) { + return *this; + } + set(other.type()); + switch (type_) { + case types::spare: + c.set(other.c.get<fixed_bitstring<2> >()); + break; + case types::earfcn_lsb: + c.set(other.c.get<fixed_bitstring<2> >()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "mib_nb_s::part_earfcn_minus17_c_"); + } + + return *this; +} +fixed_bitstring<2>& mib_nb_s::part_earfcn_minus17_c_::set_spare() +{ + set(types::spare); + return c.get<fixed_bitstring<2> >(); +} +fixed_bitstring<2>& mib_nb_s::part_earfcn_minus17_c_::set_earfcn_lsb() +{ + set(types::earfcn_lsb); + return c.get<fixed_bitstring<2> >(); +} +void mib_nb_s::part_earfcn_minus17_c_::to_json(json_writer& j) const +{ + j.start_obj(); + switch (type_) { + case types::spare: + j.write_str("spare", c.get<fixed_bitstring<2> >().to_string()); + break; + case types::earfcn_lsb: + j.write_str("earfcn-LSB", c.get<fixed_bitstring<2> >().to_string()); + break; + default: + log_invalid_choice_id(type_, "mib_nb_s::part_earfcn_minus17_c_"); + } + j.end_obj(); +} +SRSASN_CODE mib_nb_s::part_earfcn_minus17_c_::pack(bit_ref& bref) const +{ + type_.pack(bref); + switch (type_) { + case types::spare: + HANDLE_CODE(c.get<fixed_bitstring<2> >().pack(bref)); + break; + case types::earfcn_lsb: + HANDLE_CODE(c.get<fixed_bitstring<2> >().pack(bref)); + break; + default: + log_invalid_choice_id(type_, "mib_nb_s::part_earfcn_minus17_c_"); + return SRSASN_ERROR_ENCODE_FAIL; + } + return SRSASN_SUCCESS; +} +SRSASN_CODE mib_nb_s::part_earfcn_minus17_c_::unpack(cbit_ref& bref) +{ + types e; + e.unpack(bref); + set(e); + switch (type_) { + case types::spare: + HANDLE_CODE(c.get<fixed_bitstring<2> >().unpack(bref)); + break; + case types::earfcn_lsb: + HANDLE_CODE(c.get<fixed_bitstring<2> >().unpack(bref)); + break; + default: + log_invalid_choice_id(type_, "mib_nb_s::part_earfcn_minus17_c_"); + return SRSASN_ERROR_DECODE_FAIL; + } + return SRSASN_SUCCESS; +} + +const char* mib_nb_s::part_earfcn_minus17_c_::types_opts::to_string() const +{ + static const char* options[] = {"spare", "earfcn-LSB"}; + return convert_enum_idx(options, 2, value, "mib_nb_s::part_earfcn_minus17_c_::types"); +} + // BCCH-BCH-Message-NB ::= SEQUENCE SRSASN_CODE bcch_bch_msg_nb_s::pack(bit_ref& bref) const { @@ -4413,6 +6138,7 @@ SRSASN_CODE mib_tdd_nb_r15_s::pack(bit_ref& bref) const HANDLE_CODE(bref.pack(ab_enabled_r15, 1)); HANDLE_CODE(operation_mode_info_r15.pack(bref)); HANDLE_CODE(sib1_carrier_info_r15.pack(bref)); + HANDLE_CODE(bref.pack(ab_enabled_minus5_gc_r16, 1)); HANDLE_CODE(spare.pack(bref)); return SRSASN_SUCCESS; @@ -4426,6 +6152,7 @@ SRSASN_CODE mib_tdd_nb_r15_s::unpack(cbit_ref& bref) HANDLE_CODE(bref.unpack(ab_enabled_r15, 1)); HANDLE_CODE(operation_mode_info_r15.unpack(bref)); HANDLE_CODE(sib1_carrier_info_r15.unpack(bref)); + HANDLE_CODE(bref.unpack(ab_enabled_minus5_gc_r16, 1)); HANDLE_CODE(spare.unpack(bref)); return SRSASN_SUCCESS; @@ -4441,6 +6168,7 @@ void mib_tdd_nb_r15_s::to_json(json_writer& j) const j.write_fieldname("operationModeInfo-r15"); operation_mode_info_r15.to_json(j); j.write_str("sib1-CarrierInfo-r15", sib1_carrier_info_r15.to_string()); + j.write_bool("ab-Enabled-5GC-r16", ab_enabled_minus5_gc_r16); j.write_str("spare", spare.to_string()); j.end_obj(); } @@ -4712,17 +6440,69 @@ void ns_pmax_value_nb_r13_s::to_json(json_writer& j) const j.end_obj(); } +// PLMN-IdentityInfo-NB-v1700 ::= SEQUENCE +SRSASN_CODE plmn_id_info_nb_v1700_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(tracking_area_list_r17_present, 1)); + + if (tracking_area_list_r17_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, tracking_area_list_r17, 1, 12)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE plmn_id_info_nb_v1700_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(tracking_area_list_r17_present, 1)); + + if (tracking_area_list_r17_present) { + HANDLE_CODE(unpack_dyn_seq_of(tracking_area_list_r17, bref, 1, 12)); + } + + return SRSASN_SUCCESS; +} +void plmn_id_info_nb_v1700_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (tracking_area_list_r17_present) { + j.start_array("trackingAreaList-r17"); + for (const auto& e1 : tracking_area_list_r17) { + j.write_str(e1.to_string()); + } + j.end_array(); + } + j.end_obj(); +} + // SIB-Type-NB-v1530 ::= ENUMERATED const char* sib_type_nb_v1530_opts::to_string() const { - static const char* options[] = { - "sibType23-NB-r15", "spare7", "spare6", "spare5", "spare4", "spare3", "spare2", "spare1"}; + static const char* options[] = {"sibType23-NB-r15", + "sibType27-NB-r16", + "sibType31-NB-r17", + "sibType32-NB-r17", + "spare4", + "spare3", + "spare2", + "spare1"}; return convert_enum_idx(options, 8, value, "sib_type_nb_v1530_e"); } uint8_t sib_type_nb_v1530_opts::to_number() const { - static const uint8_t options[] = {23}; - return map_enum_number(options, 1, value, "sib_type_nb_v1530_e"); + static const uint8_t options[] = {23, 27, 31, 32}; + return map_enum_number(options, 4, value, "sib_type_nb_v1530_e"); +} + +// GWUS-NumGroups-NB-r16 ::= ENUMERATED +const char* gwus_num_groups_nb_r16_opts::to_string() const +{ + static const char* options[] = {"n1", "n2", "n4", "n8"}; + return convert_enum_idx(options, 4, value, "gwus_num_groups_nb_r16_e"); +} +uint8_t gwus_num_groups_nb_r16_opts::to_number() const +{ + static const uint8_t options[] = {1, 2, 4, 8}; + return map_enum_number(options, 4, value, "gwus_num_groups_nb_r16_e"); } // NSSS-RRM-Config-NB-r15 ::= SEQUENCE @@ -4780,6 +6560,181 @@ uint8_t nsss_rrm_cfg_nb_r15_s::nsss_num_occ_diff_precoders_r15_opts::to_number() return map_enum_number(options, 4, value, "nsss_rrm_cfg_nb_r15_s::nsss_num_occ_diff_precoders_r15_e_"); } +// PLMN-IdentityInfo-5GC-NB-r16 ::= SEQUENCE +SRSASN_CODE plmn_id_info_minus5_gc_nb_r16_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(ng_u_data_transfer_r16_present, 1)); + HANDLE_CODE(bref.pack(up_cio_t_minus5_gs_optim_r16_present, 1)); + + HANDLE_CODE(plmn_id_minus5_gc_r16.pack(bref)); + HANDLE_CODE(cell_reserved_for_oper_r16.pack(bref)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE plmn_id_info_minus5_gc_nb_r16_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(ng_u_data_transfer_r16_present, 1)); + HANDLE_CODE(bref.unpack(up_cio_t_minus5_gs_optim_r16_present, 1)); + + HANDLE_CODE(plmn_id_minus5_gc_r16.unpack(bref)); + HANDLE_CODE(cell_reserved_for_oper_r16.unpack(bref)); + + return SRSASN_SUCCESS; +} +void plmn_id_info_minus5_gc_nb_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_fieldname("plmn-Identity-5GC-r16"); + plmn_id_minus5_gc_r16.to_json(j); + j.write_str("cellReservedForOperatorUse-r16", cell_reserved_for_oper_r16.to_string()); + if (ng_u_data_transfer_r16_present) { + j.write_str("ng-U-DataTransfer-r16", "true"); + } + if (up_cio_t_minus5_gs_optim_r16_present) { + j.write_str("up-CIoT-5GS-Optimisation-r16", "true"); + } + j.end_obj(); +} + +void plmn_id_info_minus5_gc_nb_r16_s::plmn_id_minus5_gc_r16_c_::destroy_() +{ + switch (type_) { + case types::plmn_id_r16: + c.destroy<plmn_id_s>(); + break; + default: + break; + } +} +void plmn_id_info_minus5_gc_nb_r16_s::plmn_id_minus5_gc_r16_c_::set(types::options e) +{ + destroy_(); + type_ = e; + switch (type_) { + case types::plmn_id_r16: + c.init<plmn_id_s>(); + break; + case types::plmn_idx_r16: + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "plmn_id_info_minus5_gc_nb_r16_s::plmn_id_minus5_gc_r16_c_"); + } +} +plmn_id_info_minus5_gc_nb_r16_s::plmn_id_minus5_gc_r16_c_::plmn_id_minus5_gc_r16_c_( + const plmn_id_info_minus5_gc_nb_r16_s::plmn_id_minus5_gc_r16_c_& other) +{ + type_ = other.type(); + switch (type_) { + case types::plmn_id_r16: + c.init(other.c.get<plmn_id_s>()); + break; + case types::plmn_idx_r16: + c.init(other.c.get<uint8_t>()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "plmn_id_info_minus5_gc_nb_r16_s::plmn_id_minus5_gc_r16_c_"); + } +} +plmn_id_info_minus5_gc_nb_r16_s::plmn_id_minus5_gc_r16_c_& +plmn_id_info_minus5_gc_nb_r16_s::plmn_id_minus5_gc_r16_c_::operator=( + const plmn_id_info_minus5_gc_nb_r16_s::plmn_id_minus5_gc_r16_c_& other) +{ + if (this == &other) { + return *this; + } + set(other.type()); + switch (type_) { + case types::plmn_id_r16: + c.set(other.c.get<plmn_id_s>()); + break; + case types::plmn_idx_r16: + c.set(other.c.get<uint8_t>()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "plmn_id_info_minus5_gc_nb_r16_s::plmn_id_minus5_gc_r16_c_"); + } + + return *this; +} +plmn_id_s& plmn_id_info_minus5_gc_nb_r16_s::plmn_id_minus5_gc_r16_c_::set_plmn_id_r16() +{ + set(types::plmn_id_r16); + return c.get<plmn_id_s>(); +} +uint8_t& plmn_id_info_minus5_gc_nb_r16_s::plmn_id_minus5_gc_r16_c_::set_plmn_idx_r16() +{ + set(types::plmn_idx_r16); + return c.get<uint8_t>(); +} +void plmn_id_info_minus5_gc_nb_r16_s::plmn_id_minus5_gc_r16_c_::to_json(json_writer& j) const +{ + j.start_obj(); + switch (type_) { + case types::plmn_id_r16: + j.write_fieldname("plmn-Identity-r16"); + c.get<plmn_id_s>().to_json(j); + break; + case types::plmn_idx_r16: + j.write_int("plmn-Index-r16", c.get<uint8_t>()); + break; + default: + log_invalid_choice_id(type_, "plmn_id_info_minus5_gc_nb_r16_s::plmn_id_minus5_gc_r16_c_"); + } + j.end_obj(); +} +SRSASN_CODE plmn_id_info_minus5_gc_nb_r16_s::plmn_id_minus5_gc_r16_c_::pack(bit_ref& bref) const +{ + type_.pack(bref); + switch (type_) { + case types::plmn_id_r16: + HANDLE_CODE(c.get<plmn_id_s>().pack(bref)); + break; + case types::plmn_idx_r16: + HANDLE_CODE(pack_integer(bref, c.get<uint8_t>(), (uint8_t)1u, (uint8_t)6u)); + break; + default: + log_invalid_choice_id(type_, "plmn_id_info_minus5_gc_nb_r16_s::plmn_id_minus5_gc_r16_c_"); + return SRSASN_ERROR_ENCODE_FAIL; + } + return SRSASN_SUCCESS; +} +SRSASN_CODE plmn_id_info_minus5_gc_nb_r16_s::plmn_id_minus5_gc_r16_c_::unpack(cbit_ref& bref) +{ + types e; + e.unpack(bref); + set(e); + switch (type_) { + case types::plmn_id_r16: + HANDLE_CODE(c.get<plmn_id_s>().unpack(bref)); + break; + case types::plmn_idx_r16: + HANDLE_CODE(unpack_integer(c.get<uint8_t>(), bref, (uint8_t)1u, (uint8_t)6u)); + break; + default: + log_invalid_choice_id(type_, "plmn_id_info_minus5_gc_nb_r16_s::plmn_id_minus5_gc_r16_c_"); + return SRSASN_ERROR_DECODE_FAIL; + } + return SRSASN_SUCCESS; +} + +const char* plmn_id_info_minus5_gc_nb_r16_s::plmn_id_minus5_gc_r16_c_::types_opts::to_string() const +{ + static const char* options[] = {"plmn-Identity-r16", "plmn-Index-r16"}; + return convert_enum_idx(options, 2, value, "plmn_id_info_minus5_gc_nb_r16_s::plmn_id_minus5_gc_r16_c_::types"); +} + +const char* plmn_id_info_minus5_gc_nb_r16_s::cell_reserved_for_oper_r16_opts::to_string() const +{ + static const char* options[] = {"reserved", "notReserved"}; + return convert_enum_idx(options, 2, value, "plmn_id_info_minus5_gc_nb_r16_s::cell_reserved_for_oper_r16_e_"); +} + // EDT-TBS-NB-r15 ::= SEQUENCE SRSASN_CODE edt_tbs_nb_r15_s::pack(bit_ref& bref) const { @@ -4814,6 +6769,18 @@ uint16_t edt_tbs_nb_r15_s::edt_tbs_r15_opts::to_number() const return map_enum_number(options, 8, value, "edt_tbs_nb_r15_s::edt_tbs_r15_e_"); } +// GWUS-Paging-ProbThresh-NB-r16 ::= ENUMERATED +const char* gwus_paging_prob_thresh_nb_r16_opts::to_string() const +{ + static const char* options[] = {"p20", "p30", "p40", "p50", "p60", "p70", "p80", "p90"}; + return convert_enum_idx(options, 8, value, "gwus_paging_prob_thresh_nb_r16_e"); +} +uint8_t gwus_paging_prob_thresh_nb_r16_opts::to_number() const +{ + static const uint8_t options[] = {20, 30, 40, 50, 60, 70, 80, 90}; + return map_enum_number(options, 8, value, "gwus_paging_prob_thresh_nb_r16_e"); +} + // InterFreqNeighCellInfo-NB-v1530 ::= SEQUENCE SRSASN_CODE inter_freq_neigh_cell_info_nb_v1530_s::pack(bit_ref& bref) const { @@ -6189,6 +8156,123 @@ void sched_info_nb_v1530_s::to_json(json_writer& j) const j.end_obj(); } +// SystemInformationBlockType1-NB-v1700 ::= SEQUENCE +SRSASN_CODE sib_type1_nb_v1700_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(cell_access_related_info_ntn_r17_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + if (cell_access_related_info_ntn_r17_present) { + HANDLE_CODE(bref.pack(cell_access_related_info_ntn_r17.plmn_id_list_v1700_present, 1)); + HANDLE_CODE(cell_access_related_info_ntn_r17.cell_barred_ntn_r17.pack(bref)); + if (cell_access_related_info_ntn_r17.plmn_id_list_v1700_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, cell_access_related_info_ntn_r17.plmn_id_list_v1700, 1, 6)); + } + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE sib_type1_nb_v1700_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(cell_access_related_info_ntn_r17_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + if (cell_access_related_info_ntn_r17_present) { + HANDLE_CODE(bref.unpack(cell_access_related_info_ntn_r17.plmn_id_list_v1700_present, 1)); + HANDLE_CODE(cell_access_related_info_ntn_r17.cell_barred_ntn_r17.unpack(bref)); + if (cell_access_related_info_ntn_r17.plmn_id_list_v1700_present) { + HANDLE_CODE(unpack_dyn_seq_of(cell_access_related_info_ntn_r17.plmn_id_list_v1700, bref, 1, 6)); + } + } + + return SRSASN_SUCCESS; +} +void sib_type1_nb_v1700_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (cell_access_related_info_ntn_r17_present) { + j.write_fieldname("cellAccessRelatedInfo-NTN-r17"); + j.start_obj(); + j.write_str("cellBarred-NTN-r17", cell_access_related_info_ntn_r17.cell_barred_ntn_r17.to_string()); + if (cell_access_related_info_ntn_r17.plmn_id_list_v1700_present) { + j.start_array("plmn-IdentityList-v1700"); + for (const auto& e1 : cell_access_related_info_ntn_r17.plmn_id_list_v1700) { + e1.to_json(j); + } + j.end_array(); + } + j.end_obj(); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + j.start_obj(); + j.end_obj(); + } + j.end_obj(); +} + +const char* sib_type1_nb_v1700_s::cell_access_related_info_ntn_r17_s_::cell_barred_ntn_r17_opts::to_string() const +{ + static const char* options[] = {"barred", "notBarred"}; + return convert_enum_idx( + options, 2, value, "sib_type1_nb_v1700_s::cell_access_related_info_ntn_r17_s_::cell_barred_ntn_r17_e_"); +} + +// UAC-BarringPerCat-NB-r16 ::= SEQUENCE +SRSASN_CODE uac_barr_per_cat_nb_r16_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(pack_integer(bref, uac_access_category_r16, (uint8_t)1u, (uint8_t)63u)); + HANDLE_CODE(uac_barr_factor_r16.pack(bref)); + HANDLE_CODE(uac_barr_time_r16.pack(bref)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE uac_barr_per_cat_nb_r16_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(unpack_integer(uac_access_category_r16, bref, (uint8_t)1u, (uint8_t)63u)); + HANDLE_CODE(uac_barr_factor_r16.unpack(bref)); + HANDLE_CODE(uac_barr_time_r16.unpack(bref)); + + return SRSASN_SUCCESS; +} +void uac_barr_per_cat_nb_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_int("uac-accessCategory-r16", uac_access_category_r16); + j.write_str("uac-BarringFactor-r16", uac_barr_factor_r16.to_string()); + j.write_str("uac-BarringTime-r16", uac_barr_time_r16.to_string()); + j.end_obj(); +} + +const char* uac_barr_per_cat_nb_r16_s::uac_barr_factor_r16_opts::to_string() const +{ + static const char* options[] = { + "p00", "p05", "p10", "p15", "p20", "p25", "p30", "p40", "p50", "p60", "p70", "p75", "p80", "p85", "p90", "p95"}; + return convert_enum_idx(options, 16, value, "uac_barr_per_cat_nb_r16_s::uac_barr_factor_r16_e_"); +} +float uac_barr_per_cat_nb_r16_s::uac_barr_factor_r16_opts::to_number() const +{ + static const float options[] = {0.0, 0.5, 1.0, 1.5, 2.0, 2.5, 3.0, 4.0, 5.0, 6.0, 7.0, 7.5, 8.0, 8.5, 9.0, 9.5}; + return map_enum_number(options, 16, value, "uac_barr_per_cat_nb_r16_s::uac_barr_factor_r16_e_"); +} +const char* uac_barr_per_cat_nb_r16_s::uac_barr_factor_r16_opts::to_number_string() const +{ + static const char* options[] = { + "0.0", "0.5", "1.0", "1.5", "2.0", "2.5", "3.0", "4.0", "5.0", "6.0", "7.0", "7.5", "8.0", "8.5", "9.0", "9.5"}; + return convert_enum_idx(options, 16, value, "uac_barr_per_cat_nb_r16_s::uac_barr_factor_r16_e_"); +} + +const char* uac_barr_per_cat_nb_r16_s::uac_barr_time_r16_opts::to_string() const +{ + static const char* options[] = {"s4", "s8", "s16", "s32", "s64", "s128", "s256", "s512"}; + return convert_enum_idx(options, 8, value, "uac_barr_per_cat_nb_r16_s::uac_barr_time_r16_e_"); +} +uint16_t uac_barr_per_cat_nb_r16_s::uac_barr_time_r16_opts::to_number() const +{ + static const uint16_t options[] = {4, 8, 16, 32, 64, 128, 256, 512}; + return map_enum_number(options, 8, value, "uac_barr_per_cat_nb_r16_s::uac_barr_time_r16_e_"); +} + // WUS-MaxDurationFactor-NB-r15 ::= ENUMERATED const char* wus_max_dur_factor_nb_r15_opts::to_string() const { @@ -6681,6 +8765,64 @@ int8_t dl_carrier_cfg_common_nb_r14_s::nrs_pwr_offset_non_anchor_r14_opts::to_nu return map_enum_number(options, 8, value, "dl_carrier_cfg_common_nb_r14_s::nrs_pwr_offset_non_anchor_r14_e_"); } +// GWUS-ResourceConfig-NB-r16 ::= SEQUENCE +SRSASN_CODE gwus_res_cfg_nb_r16_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(num_groups_list_r16_present, 1)); + HANDLE_CODE(bref.pack(groups_for_service_list_r16_present, 1)); + + HANDLE_CODE(res_position_r16.pack(bref)); + if (num_groups_list_r16_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, num_groups_list_r16, 1, 2)); + } + if (groups_for_service_list_r16_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, groups_for_service_list_r16, 1, 3, integer_packer<uint8_t>(1, 15))); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE gwus_res_cfg_nb_r16_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(num_groups_list_r16_present, 1)); + HANDLE_CODE(bref.unpack(groups_for_service_list_r16_present, 1)); + + HANDLE_CODE(res_position_r16.unpack(bref)); + if (num_groups_list_r16_present) { + HANDLE_CODE(unpack_dyn_seq_of(num_groups_list_r16, bref, 1, 2)); + } + if (groups_for_service_list_r16_present) { + HANDLE_CODE(unpack_dyn_seq_of(groups_for_service_list_r16, bref, 1, 3, integer_packer<uint8_t>(1, 15))); + } + + return SRSASN_SUCCESS; +} +void gwus_res_cfg_nb_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_str("resourcePosition-r16", res_position_r16.to_string()); + if (num_groups_list_r16_present) { + j.start_array("numGroupsList-r16"); + for (const auto& e1 : num_groups_list_r16) { + j.write_str(e1.to_string()); + } + j.end_array(); + } + if (groups_for_service_list_r16_present) { + j.start_array("groupsForServiceList-r16"); + for (const auto& e1 : groups_for_service_list_r16) { + j.write_int(e1); + } + j.end_array(); + } + j.end_obj(); +} + +const char* gwus_res_cfg_nb_r16_s::res_position_r16_opts::to_string() const +{ + static const char* options[] = {"primary", "secondary"}; + return convert_enum_idx(options, 2, value, "gwus_res_cfg_nb_r16_s::res_position_r16_e_"); +} + // PCCH-Config-NB-r14 ::= SEQUENCE SRSASN_CODE pcch_cfg_nb_r14_s::pack(bit_ref& bref) const { @@ -6750,6 +8892,55 @@ uint16_t pcch_cfg_nb_r14_s::npdcch_num_repeat_paging_r14_opts::to_number() const return map_enum_number(options, 12, value, "pcch_cfg_nb_r14_s::npdcch_num_repeat_paging_r14_e_"); } +// PCCH-Config-NB-r17 ::= SEQUENCE +SRSASN_CODE pcch_cfg_nb_r17_s::pack(bit_ref& bref) const +{ + bref.pack(ext, 1); + HANDLE_CODE(bref.pack(paging_weight_r17_present, 1)); + + HANDLE_CODE(pack_integer(bref, cbp_idx_r17, (uint8_t)1u, (uint8_t)2u)); + HANDLE_CODE(npdcch_num_repeat_paging_r17.pack(bref)); + if (paging_weight_r17_present) { + HANDLE_CODE(paging_weight_r17.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE pcch_cfg_nb_r17_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(bref.unpack(paging_weight_r17_present, 1)); + + HANDLE_CODE(unpack_integer(cbp_idx_r17, bref, (uint8_t)1u, (uint8_t)2u)); + HANDLE_CODE(npdcch_num_repeat_paging_r17.unpack(bref)); + if (paging_weight_r17_present) { + HANDLE_CODE(paging_weight_r17.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void pcch_cfg_nb_r17_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_int("cbp-Index-r17", cbp_idx_r17); + j.write_str("npdcch-NumRepetitionPaging-r17", npdcch_num_repeat_paging_r17.to_string()); + if (paging_weight_r17_present) { + j.write_str("pagingWeight-r17", paging_weight_r17.to_string()); + } + j.end_obj(); +} + +const char* pcch_cfg_nb_r17_s::npdcch_num_repeat_paging_r17_opts::to_string() const +{ + static const char* options[] = {"r1", "r2", "r4", "r8", "r16", "r32", "r64", "r128"}; + return convert_enum_idx(options, 8, value, "pcch_cfg_nb_r17_s::npdcch_num_repeat_paging_r17_e_"); +} +uint8_t pcch_cfg_nb_r17_s::npdcch_num_repeat_paging_r17_opts::to_number() const +{ + static const uint8_t options[] = {1, 2, 4, 8, 16, 32, 64, 128}; + return map_enum_number(options, 8, value, "pcch_cfg_nb_r17_s::npdcch_num_repeat_paging_r17_e_"); +} + // PowerRampingParameters-NB-v1450 ::= SEQUENCE SRSASN_CODE pwr_ramp_params_nb_v1450_s::pack(bit_ref& bref) const { @@ -6848,6 +9039,83 @@ pwr_ramp_params_nb_v1450_s::pwr_ramp_params_ce1_r14_s_::preamb_init_rx_target_pw "pwr_ramp_params_nb_v1450_s::pwr_ramp_params_ce1_r14_s_::preamb_init_rx_target_pwr_ce1_r14_e_"); } +// SystemInformationBlockType1-NB-v1610 ::= SEQUENCE +SRSASN_CODE sib_type1_nb_v1610_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(cell_access_related_info_minus5_gc_r16_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + if (cell_access_related_info_minus5_gc_r16_present) { + HANDLE_CODE(bref.pack(cell_access_related_info_minus5_gc_r16.cell_id_r16_present, 1)); + HANDLE_CODE(pack_dyn_seq_of(bref, cell_access_related_info_minus5_gc_r16.plmn_id_list_r16, 1, 6)); + HANDLE_CODE(cell_access_related_info_minus5_gc_r16.tac_minus5_gc_r16.pack(bref)); + if (cell_access_related_info_minus5_gc_r16.cell_id_r16_present) { + HANDLE_CODE(cell_access_related_info_minus5_gc_r16.cell_id_r16.pack(bref)); + } + HANDLE_CODE(cell_access_related_info_minus5_gc_r16.cell_barred_minus5_gc_r16.pack(bref)); + } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE sib_type1_nb_v1610_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(cell_access_related_info_minus5_gc_r16_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + if (cell_access_related_info_minus5_gc_r16_present) { + HANDLE_CODE(bref.unpack(cell_access_related_info_minus5_gc_r16.cell_id_r16_present, 1)); + HANDLE_CODE(unpack_dyn_seq_of(cell_access_related_info_minus5_gc_r16.plmn_id_list_r16, bref, 1, 6)); + HANDLE_CODE(cell_access_related_info_minus5_gc_r16.tac_minus5_gc_r16.unpack(bref)); + if (cell_access_related_info_minus5_gc_r16.cell_id_r16_present) { + HANDLE_CODE(cell_access_related_info_minus5_gc_r16.cell_id_r16.unpack(bref)); + } + HANDLE_CODE(cell_access_related_info_minus5_gc_r16.cell_barred_minus5_gc_r16.unpack(bref)); + } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void sib_type1_nb_v1610_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (cell_access_related_info_minus5_gc_r16_present) { + j.write_fieldname("cellAccessRelatedInfo-5GC-r16"); + j.start_obj(); + j.start_array("plmn-IdentityList-r16"); + for (const auto& e1 : cell_access_related_info_minus5_gc_r16.plmn_id_list_r16) { + e1.to_json(j); + } + j.end_array(); + j.write_str("trackingAreaCode-5GC-r16", cell_access_related_info_minus5_gc_r16.tac_minus5_gc_r16.to_string()); + if (cell_access_related_info_minus5_gc_r16.cell_id_r16_present) { + j.write_str("cellIdentity-r16", cell_access_related_info_minus5_gc_r16.cell_id_r16.to_string()); + } + j.write_str("cellBarred-5GC-r16", cell_access_related_info_minus5_gc_r16.cell_barred_minus5_gc_r16.to_string()); + j.end_obj(); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + non_crit_ext.to_json(j); + } + j.end_obj(); +} + +const char* +sib_type1_nb_v1610_s::cell_access_related_info_minus5_gc_r16_s_::cell_barred_minus5_gc_r16_opts::to_string() const +{ + static const char* options[] = {"barred", "notBarred"}; + return convert_enum_idx( + options, + 2, + value, + "sib_type1_nb_v1610_s::cell_access_related_info_minus5_gc_r16_s_::cell_barred_minus5_gc_r16_e_"); +} + // TDD-Config-NB-r15 ::= SEQUENCE SRSASN_CODE tdd_cfg_nb_r15_s::pack(bit_ref& bref) const { @@ -6912,6 +9180,116 @@ void ul_ref_sigs_npusch_nb_r13_s::to_json(json_writer& j) const j.end_obj(); } +// WUS-Config-NB-r15 ::= SEQUENCE +SRSASN_CODE wus_cfg_nb_r15_s::pack(bit_ref& bref) const +{ + bref.pack(ext, 1); + HANDLE_CODE(bref.pack(num_pos_r15_present, 1)); + HANDLE_CODE(bref.pack(time_offset_e_drx_long_r15_present, 1)); + + HANDLE_CODE(max_dur_factor_r15.pack(bref)); + if (num_pos_r15_present) { + HANDLE_CODE(num_pos_r15.pack(bref)); + } + HANDLE_CODE(num_drx_cycles_relaxed_r15.pack(bref)); + HANDLE_CODE(time_offset_drx_r15.pack(bref)); + HANDLE_CODE(time_offset_e_drx_short_r15.pack(bref)); + if (time_offset_e_drx_long_r15_present) { + HANDLE_CODE(time_offset_e_drx_long_r15.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE wus_cfg_nb_r15_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(bref.unpack(num_pos_r15_present, 1)); + HANDLE_CODE(bref.unpack(time_offset_e_drx_long_r15_present, 1)); + + HANDLE_CODE(max_dur_factor_r15.unpack(bref)); + if (num_pos_r15_present) { + HANDLE_CODE(num_pos_r15.unpack(bref)); + } + HANDLE_CODE(num_drx_cycles_relaxed_r15.unpack(bref)); + HANDLE_CODE(time_offset_drx_r15.unpack(bref)); + HANDLE_CODE(time_offset_e_drx_short_r15.unpack(bref)); + if (time_offset_e_drx_long_r15_present) { + HANDLE_CODE(time_offset_e_drx_long_r15.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void wus_cfg_nb_r15_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_str("maxDurationFactor-r15", max_dur_factor_r15.to_string()); + if (num_pos_r15_present) { + j.write_str("numPOs-r15", num_pos_r15.to_string()); + } + j.write_str("numDRX-CyclesRelaxed-r15", num_drx_cycles_relaxed_r15.to_string()); + j.write_str("timeOffsetDRX-r15", time_offset_drx_r15.to_string()); + j.write_str("timeOffset-eDRX-Short-r15", time_offset_e_drx_short_r15.to_string()); + if (time_offset_e_drx_long_r15_present) { + j.write_str("timeOffset-eDRX-Long-r15", time_offset_e_drx_long_r15.to_string()); + } + j.end_obj(); +} + +const char* wus_cfg_nb_r15_s::num_pos_r15_opts::to_string() const +{ + static const char* options[] = {"n1", "n2", "n4"}; + return convert_enum_idx(options, 3, value, "wus_cfg_nb_r15_s::num_pos_r15_e_"); +} +uint8_t wus_cfg_nb_r15_s::num_pos_r15_opts::to_number() const +{ + static const uint8_t options[] = {1, 2, 4}; + return map_enum_number(options, 3, value, "wus_cfg_nb_r15_s::num_pos_r15_e_"); +} + +const char* wus_cfg_nb_r15_s::num_drx_cycles_relaxed_r15_opts::to_string() const +{ + static const char* options[] = {"n1", "n2", "n4", "n8"}; + return convert_enum_idx(options, 4, value, "wus_cfg_nb_r15_s::num_drx_cycles_relaxed_r15_e_"); +} +uint8_t wus_cfg_nb_r15_s::num_drx_cycles_relaxed_r15_opts::to_number() const +{ + static const uint8_t options[] = {1, 2, 4, 8}; + return map_enum_number(options, 4, value, "wus_cfg_nb_r15_s::num_drx_cycles_relaxed_r15_e_"); +} + +const char* wus_cfg_nb_r15_s::time_offset_drx_r15_opts::to_string() const +{ + static const char* options[] = {"ms40", "ms80", "ms160", "ms240"}; + return convert_enum_idx(options, 4, value, "wus_cfg_nb_r15_s::time_offset_drx_r15_e_"); +} +uint8_t wus_cfg_nb_r15_s::time_offset_drx_r15_opts::to_number() const +{ + static const uint8_t options[] = {40, 80, 160, 240}; + return map_enum_number(options, 4, value, "wus_cfg_nb_r15_s::time_offset_drx_r15_e_"); +} + +const char* wus_cfg_nb_r15_s::time_offset_e_drx_short_r15_opts::to_string() const +{ + static const char* options[] = {"ms40", "ms80", "ms160", "ms240"}; + return convert_enum_idx(options, 4, value, "wus_cfg_nb_r15_s::time_offset_e_drx_short_r15_e_"); +} +uint8_t wus_cfg_nb_r15_s::time_offset_e_drx_short_r15_opts::to_number() const +{ + static const uint8_t options[] = {40, 80, 160, 240}; + return map_enum_number(options, 4, value, "wus_cfg_nb_r15_s::time_offset_e_drx_short_r15_e_"); +} + +const char* wus_cfg_nb_r15_s::time_offset_e_drx_long_r15_opts::to_string() const +{ + static const char* options[] = {"ms1000", "ms2000"}; + return convert_enum_idx(options, 2, value, "wus_cfg_nb_r15_s::time_offset_e_drx_long_r15_e_"); +} +uint16_t wus_cfg_nb_r15_s::time_offset_e_drx_long_r15_opts::to_number() const +{ + static const uint16_t options[] = {1000, 2000}; + return map_enum_number(options, 2, value, "wus_cfg_nb_r15_s::time_offset_e_drx_long_r15_e_"); +} + // WUS-ConfigPerCarrier-NB-r15 ::= SEQUENCE SRSASN_CODE wus_cfg_per_carrier_nb_r15_s::pack(bit_ref& bref) const { @@ -6963,6 +9341,161 @@ uint8_t bcch_cfg_nb_r13_s::mod_period_coeff_r13_opts::to_number() const return map_enum_number(options, 4, value, "bcch_cfg_nb_r13_s::mod_period_coeff_r13_e_"); } +// CBP-Config-NB-r17 ::= SEQUENCE +SRSASN_CODE cbp_cfg_nb_r17_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(nb_r17_present, 1)); + HANDLE_CODE(bref.pack(ue_specific_drx_cycle_min_r17_present, 1)); + + HANDLE_CODE(pack_integer(bref, nrsrp_min_r17, (uint8_t)0u, (uint8_t)97u)); + if (nb_r17_present) { + HANDLE_CODE(nb_r17.pack(bref)); + } + if (ue_specific_drx_cycle_min_r17_present) { + HANDLE_CODE(ue_specific_drx_cycle_min_r17.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE cbp_cfg_nb_r17_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(nb_r17_present, 1)); + HANDLE_CODE(bref.unpack(ue_specific_drx_cycle_min_r17_present, 1)); + + HANDLE_CODE(unpack_integer(nrsrp_min_r17, bref, (uint8_t)0u, (uint8_t)97u)); + if (nb_r17_present) { + HANDLE_CODE(nb_r17.unpack(bref)); + } + if (ue_specific_drx_cycle_min_r17_present) { + HANDLE_CODE(ue_specific_drx_cycle_min_r17.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void cbp_cfg_nb_r17_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_int("nrsrpMin-r17", nrsrp_min_r17); + if (nb_r17_present) { + j.write_str("nB-r17", nb_r17.to_string()); + } + if (ue_specific_drx_cycle_min_r17_present) { + j.write_str("ue-SpecificDRX-CycleMin-r17", ue_specific_drx_cycle_min_r17.to_string()); + } + j.end_obj(); +} + +const char* cbp_cfg_nb_r17_s::nb_r17_opts::to_string() const +{ + static const char* options[] = {"fourT", + "twoT", + "oneT", + "halfT", + "quarterT", + "one8thT", + "one16thT", + "one32ndT", + "one64thT", + "one128thT", + "one256thT", + "one512thT", + "one1024thT", + "spare3", + "spare2", + "spare1"}; + return convert_enum_idx(options, 16, value, "cbp_cfg_nb_r17_s::nb_r17_e_"); +} +float cbp_cfg_nb_r17_s::nb_r17_opts::to_number() const +{ + static const float options[] = {4.0, 2.0, 1.0, 0.5, 0.25, 8.0, 16.0, 32.0, 64.0, 128.0, 256.0, 512.0, 1024.0}; + return map_enum_number(options, 13, value, "cbp_cfg_nb_r17_s::nb_r17_e_"); +} +const char* cbp_cfg_nb_r17_s::nb_r17_opts::to_number_string() const +{ + static const char* options[] = {"4", "2", "1", "0.5", "0.25", "8", "16", "32", "64", "128", "256", "512", "1024"}; + return convert_enum_idx(options, 16, value, "cbp_cfg_nb_r17_s::nb_r17_e_"); +} + +const char* cbp_cfg_nb_r17_s::ue_specific_drx_cycle_min_r17_opts::to_string() const +{ + static const char* options[] = {"rf32", "rf64", "rf128", "rf256"}; + return convert_enum_idx(options, 4, value, "cbp_cfg_nb_r17_s::ue_specific_drx_cycle_min_r17_e_"); +} +uint16_t cbp_cfg_nb_r17_s::ue_specific_drx_cycle_min_r17_opts::to_number() const +{ + static const uint16_t options[] = {32, 64, 128, 256}; + return map_enum_number(options, 4, value, "cbp_cfg_nb_r17_s::ue_specific_drx_cycle_min_r17_e_"); +} + +// CarrierFreqEUTRA-NB-r16 ::= SEQUENCE +SRSASN_CODE carrier_freq_eutra_nb_r16_s::pack(bit_ref& bref) const +{ + bref.pack(ext, 1); + HANDLE_CODE(bref.pack(sib1_r16_present, 1)); + HANDLE_CODE(bref.pack(sib1_br_r16_present, 1)); + + HANDLE_CODE(pack_integer(bref, carrier_freq_r16, (uint32_t)0u, (uint32_t)262143u)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE carrier_freq_eutra_nb_r16_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(bref.unpack(sib1_r16_present, 1)); + HANDLE_CODE(bref.unpack(sib1_br_r16_present, 1)); + + HANDLE_CODE(unpack_integer(carrier_freq_r16, bref, (uint32_t)0u, (uint32_t)262143u)); + + return SRSASN_SUCCESS; +} +void carrier_freq_eutra_nb_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_int("carrierFreq-r16", carrier_freq_r16); + if (sib1_r16_present) { + j.write_str("sib1-r16", "supported"); + } + if (sib1_br_r16_present) { + j.write_str("sib1-BR-r16", "supported"); + } + j.end_obj(); +} + +// CarrierFreqsGERAN-NB-r16 ::= SEQUENCE +SRSASN_CODE carrier_freqs_geran_nb_r16_s::pack(bit_ref& bref) const +{ + bref.pack(ext, 1); + HANDLE_CODE(bref.pack(ec_gsm_iot_r16_present, 1)); + HANDLE_CODE(bref.pack(peo_r16_present, 1)); + + HANDLE_CODE(carrier_freqs_r16.pack(bref)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE carrier_freqs_geran_nb_r16_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(bref.unpack(ec_gsm_iot_r16_present, 1)); + HANDLE_CODE(bref.unpack(peo_r16_present, 1)); + + HANDLE_CODE(carrier_freqs_r16.unpack(bref)); + + return SRSASN_SUCCESS; +} +void carrier_freqs_geran_nb_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_fieldname("carrierFreqs-r16"); + carrier_freqs_r16.to_json(j); + if (ec_gsm_iot_r16_present) { + j.write_str("ec-GSM-IOT-r16", "supported"); + } + if (peo_r16_present) { + j.write_str("peo-r16", "supported"); + } + j.end_obj(); +} + // DL-ConfigCommon-NB-r14 ::= SEQUENCE SRSASN_CODE dl_cfg_common_nb_r14_s::pack(bit_ref& bref) const { @@ -6977,6 +9510,8 @@ SRSASN_CODE dl_cfg_common_nb_r14_s::pack(bit_ref& bref) const if (ext) { ext_groups_packer_guard group_flags; group_flags[0] |= wus_cfg_r15.is_present(); + group_flags[1] |= gwus_cfg_r16.is_present(); + group_flags[2] |= pcch_cfg_r17.is_present(); group_flags.pack(bref); if (group_flags[0]) { @@ -6987,6 +9522,22 @@ SRSASN_CODE dl_cfg_common_nb_r14_s::pack(bit_ref& bref) const HANDLE_CODE(wus_cfg_r15->pack(bref)); } } + if (group_flags[1]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(gwus_cfg_r16.is_present(), 1)); + if (gwus_cfg_r16.is_present()) { + HANDLE_CODE(gwus_cfg_r16->pack(bref)); + } + } + if (group_flags[2]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(pcch_cfg_r17.is_present(), 1)); + if (pcch_cfg_r17.is_present()) { + HANDLE_CODE(pcch_cfg_r17->pack(bref)); + } + } } return SRSASN_SUCCESS; } @@ -7001,7 +9552,7 @@ SRSASN_CODE dl_cfg_common_nb_r14_s::unpack(cbit_ref& bref) } if (ext) { - ext_groups_unpacker_guard group_flags(1); + ext_groups_unpacker_guard group_flags(3); group_flags.unpack(bref); if (group_flags[0]) { @@ -7014,6 +9565,26 @@ SRSASN_CODE dl_cfg_common_nb_r14_s::unpack(cbit_ref& bref) HANDLE_CODE(wus_cfg_r15->unpack(bref)); } } + if (group_flags[1]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + bool gwus_cfg_r16_present; + HANDLE_CODE(bref.unpack(gwus_cfg_r16_present, 1)); + gwus_cfg_r16.set_present(gwus_cfg_r16_present); + if (gwus_cfg_r16.is_present()) { + HANDLE_CODE(gwus_cfg_r16->unpack(bref)); + } + } + if (group_flags[2]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + bool pcch_cfg_r17_present; + HANDLE_CODE(bref.unpack(pcch_cfg_r17_present, 1)); + pcch_cfg_r17.set_present(pcch_cfg_r17_present); + if (pcch_cfg_r17.is_present()) { + HANDLE_CODE(pcch_cfg_r17->unpack(bref)); + } + } } return SRSASN_SUCCESS; } @@ -7031,10 +9602,121 @@ void dl_cfg_common_nb_r14_s::to_json(json_writer& j) const j.write_fieldname("wus-Config-r15"); wus_cfg_r15->to_json(j); } + if (gwus_cfg_r16.is_present()) { + j.write_fieldname("gwus-Config-r16"); + gwus_cfg_r16->to_json(j); + } + if (pcch_cfg_r17.is_present()) { + j.write_fieldname("pcch-Config-r17"); + pcch_cfg_r17->to_json(j); + } } j.end_obj(); } +// GWUS-Config-NB-r16 ::= SEQUENCE +SRSASN_CODE gwus_cfg_nb_r16_s::pack(bit_ref& bref) const +{ + bref.pack(ext, 1); + HANDLE_CODE(bref.pack(group_alternation_r16_present, 1)); + HANDLE_CODE(bref.pack(common_seq_r16_present, 1)); + HANDLE_CODE(bref.pack(time_params_r16_present, 1)); + HANDLE_CODE(bref.pack(res_cfg_e_drx_short_r16_present, 1)); + HANDLE_CODE(bref.pack(res_cfg_e_drx_long_r16_present, 1)); + HANDLE_CODE(bref.pack(prob_thresh_list_r16_present, 1)); + + if (common_seq_r16_present) { + HANDLE_CODE(common_seq_r16.pack(bref)); + } + if (time_params_r16_present) { + HANDLE_CODE(time_params_r16.pack(bref)); + } + HANDLE_CODE(res_cfg_drx_r16.pack(bref)); + if (res_cfg_e_drx_short_r16_present) { + HANDLE_CODE(res_cfg_e_drx_short_r16.pack(bref)); + } + if (res_cfg_e_drx_long_r16_present) { + HANDLE_CODE(res_cfg_e_drx_long_r16.pack(bref)); + } + if (prob_thresh_list_r16_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, prob_thresh_list_r16, 1, 3)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE gwus_cfg_nb_r16_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(bref.unpack(group_alternation_r16_present, 1)); + HANDLE_CODE(bref.unpack(common_seq_r16_present, 1)); + HANDLE_CODE(bref.unpack(time_params_r16_present, 1)); + HANDLE_CODE(bref.unpack(res_cfg_e_drx_short_r16_present, 1)); + HANDLE_CODE(bref.unpack(res_cfg_e_drx_long_r16_present, 1)); + HANDLE_CODE(bref.unpack(prob_thresh_list_r16_present, 1)); + + if (common_seq_r16_present) { + HANDLE_CODE(common_seq_r16.unpack(bref)); + } + if (time_params_r16_present) { + HANDLE_CODE(time_params_r16.unpack(bref)); + } + HANDLE_CODE(res_cfg_drx_r16.unpack(bref)); + if (res_cfg_e_drx_short_r16_present) { + HANDLE_CODE(res_cfg_e_drx_short_r16.unpack(bref)); + } + if (res_cfg_e_drx_long_r16_present) { + HANDLE_CODE(res_cfg_e_drx_long_r16.unpack(bref)); + } + if (prob_thresh_list_r16_present) { + HANDLE_CODE(unpack_dyn_seq_of(prob_thresh_list_r16, bref, 1, 3)); + } + + return SRSASN_SUCCESS; +} +void gwus_cfg_nb_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (group_alternation_r16_present) { + j.write_str("groupAlternation-r16", "true"); + } + if (common_seq_r16_present) { + j.write_str("commonSequence-r16", common_seq_r16.to_string()); + } + if (time_params_r16_present) { + j.write_fieldname("timeParameters-r16"); + time_params_r16.to_json(j); + } + j.write_fieldname("resourceConfigDRX-r16"); + res_cfg_drx_r16.to_json(j); + if (res_cfg_e_drx_short_r16_present) { + j.write_fieldname("resourceConfig-eDRX-Short-r16"); + res_cfg_e_drx_short_r16.to_json(j); + } + if (res_cfg_e_drx_long_r16_present) { + j.write_fieldname("resourceConfig-eDRX-Long-r16"); + res_cfg_e_drx_long_r16.to_json(j); + } + if (prob_thresh_list_r16_present) { + j.start_array("probThreshList-r16"); + for (const auto& e1 : prob_thresh_list_r16) { + j.write_str(e1.to_string()); + } + j.end_array(); + } + j.end_obj(); +} + +const char* gwus_cfg_nb_r16_s::common_seq_r16_opts::to_string() const +{ + static const char* options[] = {"g0", "g126"}; + return convert_enum_idx(options, 2, value, "gwus_cfg_nb_r16_s::common_seq_r16_e_"); +} +uint8_t gwus_cfg_nb_r16_s::common_seq_r16_opts::to_number() const +{ + static const uint8_t options[] = {0, 126}; + return map_enum_number(options, 2, value, "gwus_cfg_nb_r16_s::common_seq_r16_e_"); +} + // InterFreqCarrierFreqInfo-NB-r13 ::= SEQUENCE SRSASN_CODE inter_freq_carrier_freq_info_nb_r13_s::pack(bit_ref& bref) const { @@ -7043,7 +9725,7 @@ SRSASN_CODE inter_freq_carrier_freq_info_nb_r13_s::pack(bit_ref& bref) const HANDLE_CODE(bref.pack(p_max_r13_present, 1)); HANDLE_CODE(bref.pack(q_offset_freq_r13_present, 1)); HANDLE_CODE(bref.pack(inter_freq_neigh_cell_list_r13_present, 1)); - HANDLE_CODE(bref.pack(inter_freq_black_cell_list_r13_present, 1)); + HANDLE_CODE(bref.pack(inter_freq_excluded_cell_list_r13_present, 1)); HANDLE_CODE(bref.pack(multi_band_info_list_r13_present, 1)); HANDLE_CODE(dl_carrier_freq_r13.pack(bref)); @@ -7060,8 +9742,8 @@ SRSASN_CODE inter_freq_carrier_freq_info_nb_r13_s::pack(bit_ref& bref) const if (inter_freq_neigh_cell_list_r13_present) { HANDLE_CODE(pack_dyn_seq_of(bref, inter_freq_neigh_cell_list_r13, 1, 16, integer_packer<uint16_t>(0, 503))); } - if (inter_freq_black_cell_list_r13_present) { - HANDLE_CODE(pack_dyn_seq_of(bref, inter_freq_black_cell_list_r13, 1, 16, integer_packer<uint16_t>(0, 503))); + if (inter_freq_excluded_cell_list_r13_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, inter_freq_excluded_cell_list_r13, 1, 16, integer_packer<uint16_t>(0, 503))); } if (multi_band_info_list_r13_present) { HANDLE_CODE(pack_dyn_seq_of(bref, multi_band_info_list_r13, 1, 8)); @@ -7127,7 +9809,7 @@ SRSASN_CODE inter_freq_carrier_freq_info_nb_r13_s::unpack(cbit_ref& bref) HANDLE_CODE(bref.unpack(p_max_r13_present, 1)); HANDLE_CODE(bref.unpack(q_offset_freq_r13_present, 1)); HANDLE_CODE(bref.unpack(inter_freq_neigh_cell_list_r13_present, 1)); - HANDLE_CODE(bref.unpack(inter_freq_black_cell_list_r13_present, 1)); + HANDLE_CODE(bref.unpack(inter_freq_excluded_cell_list_r13_present, 1)); HANDLE_CODE(bref.unpack(multi_band_info_list_r13_present, 1)); HANDLE_CODE(dl_carrier_freq_r13.unpack(bref)); @@ -7144,8 +9826,8 @@ SRSASN_CODE inter_freq_carrier_freq_info_nb_r13_s::unpack(cbit_ref& bref) if (inter_freq_neigh_cell_list_r13_present) { HANDLE_CODE(unpack_dyn_seq_of(inter_freq_neigh_cell_list_r13, bref, 1, 16, integer_packer<uint16_t>(0, 503))); } - if (inter_freq_black_cell_list_r13_present) { - HANDLE_CODE(unpack_dyn_seq_of(inter_freq_black_cell_list_r13, bref, 1, 16, integer_packer<uint16_t>(0, 503))); + if (inter_freq_excluded_cell_list_r13_present) { + HANDLE_CODE(unpack_dyn_seq_of(inter_freq_excluded_cell_list_r13, bref, 1, 16, integer_packer<uint16_t>(0, 503))); } if (multi_band_info_list_r13_present) { HANDLE_CODE(unpack_dyn_seq_of(multi_band_info_list_r13, bref, 1, 8)); @@ -7226,9 +9908,9 @@ void inter_freq_carrier_freq_info_nb_r13_s::to_json(json_writer& j) const } j.end_array(); } - if (inter_freq_black_cell_list_r13_present) { - j.start_array("interFreqBlackCellList-r13"); - for (const auto& e1 : inter_freq_black_cell_list_r13) { + if (inter_freq_excluded_cell_list_r13_present) { + j.start_array("interFreqExcludedCellList-r13"); + for (const auto& e1 : inter_freq_excluded_cell_list_r13) { j.write_int(e1); } j.end_array(); @@ -7760,6 +10442,68 @@ const char* nprach_probability_anchor_nb_r14_s::nprach_probability_anchor_r14_op return convert_enum_idx(options, 16, value, "nprach_probability_anchor_nb_r14_s::nprach_probability_anchor_r14_e_"); } +// NPRACH-TxDurationFmt01-NB-r17 ::= SEQUENCE +SRSASN_CODE nprach_tx_dur_fmt01_nb_r17_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(nprach_tx_dur_fmt01_r17.pack(bref)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE nprach_tx_dur_fmt01_nb_r17_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(nprach_tx_dur_fmt01_r17.unpack(bref)); + + return SRSASN_SUCCESS; +} +void nprach_tx_dur_fmt01_nb_r17_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_str("nprach-TxDurationFmt01-r17", nprach_tx_dur_fmt01_r17.to_string()); + j.end_obj(); +} + +const char* nprach_tx_dur_fmt01_nb_r17_s::nprach_tx_dur_fmt01_r17_opts::to_string() const +{ + static const char* options[] = {"n2", "n4", "n8", "n16", "n32", "n64"}; + return convert_enum_idx(options, 6, value, "nprach_tx_dur_fmt01_nb_r17_s::nprach_tx_dur_fmt01_r17_e_"); +} +uint8_t nprach_tx_dur_fmt01_nb_r17_s::nprach_tx_dur_fmt01_r17_opts::to_number() const +{ + static const uint8_t options[] = {2, 4, 8, 16, 32, 64}; + return map_enum_number(options, 6, value, "nprach_tx_dur_fmt01_nb_r17_s::nprach_tx_dur_fmt01_r17_e_"); +} + +// NPRACH-TxDurationFmt2-NB-r17 ::= SEQUENCE +SRSASN_CODE nprach_tx_dur_fmt2_nb_r17_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(nprach_tx_dur_fmt2_r17.pack(bref)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE nprach_tx_dur_fmt2_nb_r17_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(nprach_tx_dur_fmt2_r17.unpack(bref)); + + return SRSASN_SUCCESS; +} +void nprach_tx_dur_fmt2_nb_r17_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_str("nprach-TxDurationFmt2-r17", nprach_tx_dur_fmt2_r17.to_string()); + j.end_obj(); +} + +const char* nprach_tx_dur_fmt2_nb_r17_s::nprach_tx_dur_fmt2_r17_opts::to_string() const +{ + static const char* options[] = {"n1", "n2", "n4", "n8", "n16"}; + return convert_enum_idx(options, 5, value, "nprach_tx_dur_fmt2_nb_r17_s::nprach_tx_dur_fmt2_r17_e_"); +} +uint8_t nprach_tx_dur_fmt2_nb_r17_s::nprach_tx_dur_fmt2_r17_opts::to_number() const +{ + static const uint8_t options[] = {1, 2, 4, 8, 16}; + return map_enum_number(options, 5, value, "nprach_tx_dur_fmt2_nb_r17_s::nprach_tx_dur_fmt2_r17_e_"); +} + // NPUSCH-ConfigCommon-NB-r13 ::= SEQUENCE SRSASN_CODE npusch_cfg_common_nb_r13_s::pack(bit_ref& bref) const { @@ -8115,6 +10859,9 @@ SRSASN_CODE sib_type1_nb_v1530_s::pack(bit_ref& bref) const if (sched_info_list_v1530_present) { HANDLE_CODE(pack_dyn_seq_of(bref, sched_info_list_v1530, 1, 8)); } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } return SRSASN_SUCCESS; } @@ -8135,6 +10882,9 @@ SRSASN_CODE sib_type1_nb_v1530_s::unpack(cbit_ref& bref) if (sched_info_list_v1530_present) { HANDLE_CODE(unpack_dyn_seq_of(sched_info_list_v1530, bref, 1, 8)); } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } return SRSASN_SUCCESS; } @@ -8162,8 +10912,7 @@ void sib_type1_nb_v1530_s::to_json(json_writer& j) const } if (non_crit_ext_present) { j.write_fieldname("nonCriticalExtension"); - j.start_obj(); - j.end_obj(); + non_crit_ext.to_json(j); } j.end_obj(); } @@ -8174,6 +10923,54 @@ const char* sib_type1_nb_v1530_s::tdd_params_r15_s_::tdd_si_carrier_info_r15_opt return convert_enum_idx(options, 2, value, "sib_type1_nb_v1530_s::tdd_params_r15_s_::tdd_si_carrier_info_r15_e_"); } +// UAC-Barring-NB-r16 ::= SEQUENCE +SRSASN_CODE uac_barr_nb_r16_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(uac_barr_per_cat_list_r16_present, 1)); + HANDLE_CODE(bref.pack(uac_ac1_select_assist_info_r16_present, 1)); + + if (uac_barr_per_cat_list_r16_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, uac_barr_per_cat_list_r16, 1, 63)); + } + if (uac_ac1_select_assist_info_r16_present) { + HANDLE_CODE(uac_ac1_select_assist_info_r16.pack(bref)); + } + HANDLE_CODE(uac_barr_for_access_id_r16.pack(bref)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE uac_barr_nb_r16_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(uac_barr_per_cat_list_r16_present, 1)); + HANDLE_CODE(bref.unpack(uac_ac1_select_assist_info_r16_present, 1)); + + if (uac_barr_per_cat_list_r16_present) { + HANDLE_CODE(unpack_dyn_seq_of(uac_barr_per_cat_list_r16, bref, 1, 63)); + } + if (uac_ac1_select_assist_info_r16_present) { + HANDLE_CODE(uac_ac1_select_assist_info_r16.unpack(bref)); + } + HANDLE_CODE(uac_barr_for_access_id_r16.unpack(bref)); + + return SRSASN_SUCCESS; +} +void uac_barr_nb_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (uac_barr_per_cat_list_r16_present) { + j.start_array("uac-BarringPerCatList-r16"); + for (const auto& e1 : uac_barr_per_cat_list_r16) { + e1.to_json(j); + } + j.end_array(); + } + if (uac_ac1_select_assist_info_r16_present) { + j.write_str("uac-AC1-SelectAssistInfo-r16", uac_ac1_select_assist_info_r16.to_string()); + } + j.write_str("uac-BarringForAccessIdentity-r16", uac_barr_for_access_id_r16.to_string()); + j.end_obj(); +} + // UL-ConfigCommon-NB-r14 ::= SEQUENCE SRSASN_CODE ul_cfg_common_nb_r14_s::pack(bit_ref& bref) const { @@ -8188,6 +10985,7 @@ SRSASN_CODE ul_cfg_common_nb_r14_s::pack(bit_ref& bref) const if (ext) { ext_groups_packer_guard group_flags; group_flags[0] |= nprach_params_list_edt_r15.is_present(); + group_flags[1] |= rsrp_thress_prach_info_list_r16.is_present(); group_flags.pack(bref); if (group_flags[0]) { @@ -8198,6 +10996,14 @@ SRSASN_CODE ul_cfg_common_nb_r14_s::pack(bit_ref& bref) const HANDLE_CODE(pack_dyn_seq_of(bref, *nprach_params_list_edt_r15, 1, 3)); } } + if (group_flags[1]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(rsrp_thress_prach_info_list_r16.is_present(), 1)); + if (rsrp_thress_prach_info_list_r16.is_present()) { + HANDLE_CODE(pack_dyn_seq_of(bref, *rsrp_thress_prach_info_list_r16, 1, 2, integer_packer<uint8_t>(0, 97))); + } + } } return SRSASN_SUCCESS; } @@ -8212,7 +11018,7 @@ SRSASN_CODE ul_cfg_common_nb_r14_s::unpack(cbit_ref& bref) } if (ext) { - ext_groups_unpacker_guard group_flags(1); + ext_groups_unpacker_guard group_flags(2); group_flags.unpack(bref); if (group_flags[0]) { @@ -8225,6 +11031,16 @@ SRSASN_CODE ul_cfg_common_nb_r14_s::unpack(cbit_ref& bref) HANDLE_CODE(unpack_dyn_seq_of(*nprach_params_list_edt_r15, bref, 1, 3)); } } + if (group_flags[1]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + bool rsrp_thress_prach_info_list_r16_present; + HANDLE_CODE(bref.unpack(rsrp_thress_prach_info_list_r16_present, 1)); + rsrp_thress_prach_info_list_r16.set_present(rsrp_thress_prach_info_list_r16_present); + if (rsrp_thress_prach_info_list_r16.is_present()) { + HANDLE_CODE(unpack_dyn_seq_of(*rsrp_thress_prach_info_list_r16, bref, 1, 2, integer_packer<uint8_t>(0, 97))); + } + } } return SRSASN_SUCCESS; } @@ -8248,6 +11064,13 @@ void ul_cfg_common_nb_r14_s::to_json(json_writer& j) const } j.end_array(); } + if (rsrp_thress_prach_info_list_r16.is_present()) { + j.start_array("rsrp-ThresholdsPrachInfoList-r16"); + for (const auto& e1 : *rsrp_thress_prach_info_list_r16) { + j.write_int(e1); + } + j.end_array(); + } } j.end_obj(); } @@ -8384,116 +11207,6 @@ const char* ul_pwr_ctrl_common_nb_r13_s::alpha_r13_opts::to_number_string() cons return convert_enum_idx(options, 8, value, "ul_pwr_ctrl_common_nb_r13_s::alpha_r13_e_"); } -// WUS-Config-NB-r15 ::= SEQUENCE -SRSASN_CODE wus_cfg_nb_r15_s::pack(bit_ref& bref) const -{ - bref.pack(ext, 1); - HANDLE_CODE(bref.pack(num_pos_r15_present, 1)); - HANDLE_CODE(bref.pack(time_offset_e_drx_long_r15_present, 1)); - - HANDLE_CODE(max_dur_factor_r15.pack(bref)); - if (num_pos_r15_present) { - HANDLE_CODE(num_pos_r15.pack(bref)); - } - HANDLE_CODE(num_drx_cycles_relaxed_r15.pack(bref)); - HANDLE_CODE(time_offset_drx_r15.pack(bref)); - HANDLE_CODE(time_offset_e_drx_short_r15.pack(bref)); - if (time_offset_e_drx_long_r15_present) { - HANDLE_CODE(time_offset_e_drx_long_r15.pack(bref)); - } - - return SRSASN_SUCCESS; -} -SRSASN_CODE wus_cfg_nb_r15_s::unpack(cbit_ref& bref) -{ - bref.unpack(ext, 1); - HANDLE_CODE(bref.unpack(num_pos_r15_present, 1)); - HANDLE_CODE(bref.unpack(time_offset_e_drx_long_r15_present, 1)); - - HANDLE_CODE(max_dur_factor_r15.unpack(bref)); - if (num_pos_r15_present) { - HANDLE_CODE(num_pos_r15.unpack(bref)); - } - HANDLE_CODE(num_drx_cycles_relaxed_r15.unpack(bref)); - HANDLE_CODE(time_offset_drx_r15.unpack(bref)); - HANDLE_CODE(time_offset_e_drx_short_r15.unpack(bref)); - if (time_offset_e_drx_long_r15_present) { - HANDLE_CODE(time_offset_e_drx_long_r15.unpack(bref)); - } - - return SRSASN_SUCCESS; -} -void wus_cfg_nb_r15_s::to_json(json_writer& j) const -{ - j.start_obj(); - j.write_str("maxDurationFactor-r15", max_dur_factor_r15.to_string()); - if (num_pos_r15_present) { - j.write_str("numPOs-r15", num_pos_r15.to_string()); - } - j.write_str("numDRX-CyclesRelaxed-r15", num_drx_cycles_relaxed_r15.to_string()); - j.write_str("timeOffsetDRX-r15", time_offset_drx_r15.to_string()); - j.write_str("timeOffset-eDRX-Short-r15", time_offset_e_drx_short_r15.to_string()); - if (time_offset_e_drx_long_r15_present) { - j.write_str("timeOffset-eDRX-Long-r15", time_offset_e_drx_long_r15.to_string()); - } - j.end_obj(); -} - -const char* wus_cfg_nb_r15_s::num_pos_r15_opts::to_string() const -{ - static const char* options[] = {"n1", "n2", "n4"}; - return convert_enum_idx(options, 3, value, "wus_cfg_nb_r15_s::num_pos_r15_e_"); -} -uint8_t wus_cfg_nb_r15_s::num_pos_r15_opts::to_number() const -{ - static const uint8_t options[] = {1, 2, 4}; - return map_enum_number(options, 3, value, "wus_cfg_nb_r15_s::num_pos_r15_e_"); -} - -const char* wus_cfg_nb_r15_s::num_drx_cycles_relaxed_r15_opts::to_string() const -{ - static const char* options[] = {"n1", "n2", "n4", "n8"}; - return convert_enum_idx(options, 4, value, "wus_cfg_nb_r15_s::num_drx_cycles_relaxed_r15_e_"); -} -uint8_t wus_cfg_nb_r15_s::num_drx_cycles_relaxed_r15_opts::to_number() const -{ - static const uint8_t options[] = {1, 2, 4, 8}; - return map_enum_number(options, 4, value, "wus_cfg_nb_r15_s::num_drx_cycles_relaxed_r15_e_"); -} - -const char* wus_cfg_nb_r15_s::time_offset_drx_r15_opts::to_string() const -{ - static const char* options[] = {"ms40", "ms80", "ms160", "ms240"}; - return convert_enum_idx(options, 4, value, "wus_cfg_nb_r15_s::time_offset_drx_r15_e_"); -} -uint8_t wus_cfg_nb_r15_s::time_offset_drx_r15_opts::to_number() const -{ - static const uint8_t options[] = {40, 80, 160, 240}; - return map_enum_number(options, 4, value, "wus_cfg_nb_r15_s::time_offset_drx_r15_e_"); -} - -const char* wus_cfg_nb_r15_s::time_offset_e_drx_short_r15_opts::to_string() const -{ - static const char* options[] = {"ms40", "ms80", "ms160", "ms240"}; - return convert_enum_idx(options, 4, value, "wus_cfg_nb_r15_s::time_offset_e_drx_short_r15_e_"); -} -uint8_t wus_cfg_nb_r15_s::time_offset_e_drx_short_r15_opts::to_number() const -{ - static const uint8_t options[] = {40, 80, 160, 240}; - return map_enum_number(options, 4, value, "wus_cfg_nb_r15_s::time_offset_e_drx_short_r15_e_"); -} - -const char* wus_cfg_nb_r15_s::time_offset_e_drx_long_r15_opts::to_string() const -{ - static const char* options[] = {"ms1000", "ms2000"}; - return convert_enum_idx(options, 2, value, "wus_cfg_nb_r15_s::time_offset_e_drx_long_r15_e_"); -} -uint16_t wus_cfg_nb_r15_s::time_offset_e_drx_long_r15_opts::to_number() const -{ - static const uint16_t options[] = {1000, 2000}; - return map_enum_number(options, 2, value, "wus_cfg_nb_r15_s::time_offset_e_drx_long_r15_e_"); -} - // CellReselectionInfoCommon-NB-v1450 ::= SEQUENCE SRSASN_CODE cell_resel_info_common_nb_v1450_s::pack(bit_ref& bref) const { @@ -8588,6 +11301,120 @@ uint8_t cell_sel_info_nb_v1430_s::ce_authorisation_offset_r14_opts::to_number() return map_enum_number(options, 7, value, "cell_sel_info_nb_v1430_s::ce_authorisation_offset_r14_e_"); } +// ConnMeasConfig-NB-r17 ::= SEQUENCE +SRSASN_CODE conn_meas_cfg_nb_r17_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(s_measure_inter_r17_present, 1)); + HANDLE_CODE(bref.pack(neigh_cell_meas_criteria_r17_present, 1)); + + HANDLE_CODE(pack_integer(bref, s_measure_intra_r17, (uint8_t)0u, (uint8_t)113u)); + if (s_measure_inter_r17_present) { + HANDLE_CODE(pack_integer(bref, s_measure_inter_r17, (uint8_t)0u, (uint8_t)113u)); + } + if (neigh_cell_meas_criteria_r17_present) { + HANDLE_CODE(neigh_cell_meas_criteria_r17.s_measure_delta_p_r17.pack(bref)); + HANDLE_CODE(neigh_cell_meas_criteria_r17.t_measure_delta_p_r17.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE conn_meas_cfg_nb_r17_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(s_measure_inter_r17_present, 1)); + HANDLE_CODE(bref.unpack(neigh_cell_meas_criteria_r17_present, 1)); + + HANDLE_CODE(unpack_integer(s_measure_intra_r17, bref, (uint8_t)0u, (uint8_t)113u)); + if (s_measure_inter_r17_present) { + HANDLE_CODE(unpack_integer(s_measure_inter_r17, bref, (uint8_t)0u, (uint8_t)113u)); + } + if (neigh_cell_meas_criteria_r17_present) { + HANDLE_CODE(neigh_cell_meas_criteria_r17.s_measure_delta_p_r17.unpack(bref)); + HANDLE_CODE(neigh_cell_meas_criteria_r17.t_measure_delta_p_r17.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void conn_meas_cfg_nb_r17_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_int("s-MeasureIntra-r17", s_measure_intra_r17); + if (s_measure_inter_r17_present) { + j.write_int("s-MeasureInter-r17", s_measure_inter_r17); + } + if (neigh_cell_meas_criteria_r17_present) { + j.write_fieldname("neighCellMeasCriteria-r17"); + j.start_obj(); + j.write_str("s-MeasureDeltaP-r17", neigh_cell_meas_criteria_r17.s_measure_delta_p_r17.to_string()); + j.write_str("t-MeasureDeltaP-r17", neigh_cell_meas_criteria_r17.t_measure_delta_p_r17.to_string()); + j.end_obj(); + } + j.end_obj(); +} + +const char* conn_meas_cfg_nb_r17_s::neigh_cell_meas_criteria_r17_s_::s_measure_delta_p_r17_opts::to_string() const +{ + static const char* options[] = {"dB6", "dB9", "dB12", "dB15"}; + return convert_enum_idx( + options, 4, value, "conn_meas_cfg_nb_r17_s::neigh_cell_meas_criteria_r17_s_::s_measure_delta_p_r17_e_"); +} +uint8_t conn_meas_cfg_nb_r17_s::neigh_cell_meas_criteria_r17_s_::s_measure_delta_p_r17_opts::to_number() const +{ + static const uint8_t options[] = {6, 9, 12, 15}; + return map_enum_number( + options, 4, value, "conn_meas_cfg_nb_r17_s::neigh_cell_meas_criteria_r17_s_::s_measure_delta_p_r17_e_"); +} + +const char* conn_meas_cfg_nb_r17_s::neigh_cell_meas_criteria_r17_s_::t_measure_delta_p_r17_opts::to_string() const +{ + static const char* options[] = {"s15", "s30", "s45", "s60"}; + return convert_enum_idx( + options, 4, value, "conn_meas_cfg_nb_r17_s::neigh_cell_meas_criteria_r17_s_::t_measure_delta_p_r17_e_"); +} +uint8_t conn_meas_cfg_nb_r17_s::neigh_cell_meas_criteria_r17_s_::t_measure_delta_p_r17_opts::to_number() const +{ + static const uint8_t options[] = {15, 30, 45, 60}; + return map_enum_number( + options, 4, value, "conn_meas_cfg_nb_r17_s::neigh_cell_meas_criteria_r17_s_::t_measure_delta_p_r17_e_"); +} + +// CoverageBasedPagingConfig-NB-r17 ::= SEQUENCE +SRSASN_CODE coverage_based_paging_cfg_nb_r17_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(cbp_hyst_timer_r17.pack(bref)); + HANDLE_CODE(pack_dyn_seq_of(bref, cbp_cfg_list_r17, 1, 2)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE coverage_based_paging_cfg_nb_r17_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(cbp_hyst_timer_r17.unpack(bref)); + HANDLE_CODE(unpack_dyn_seq_of(cbp_cfg_list_r17, bref, 1, 2)); + + return SRSASN_SUCCESS; +} +void coverage_based_paging_cfg_nb_r17_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_str("cbp-HystTimer-r17", cbp_hyst_timer_r17.to_string()); + j.start_array("cbp-ConfigList-r17"); + for (const auto& e1 : cbp_cfg_list_r17) { + e1.to_json(j); + } + j.end_array(); + j.end_obj(); +} + +const char* coverage_based_paging_cfg_nb_r17_s::cbp_hyst_timer_r17_opts::to_string() const +{ + static const char* options[] = {"ms2560", "ms7680", "ms12800", "ms17920", "ms23040", "ms28160", "ms33280", "ms40960"}; + return convert_enum_idx(options, 8, value, "coverage_based_paging_cfg_nb_r17_s::cbp_hyst_timer_r17_e_"); +} +uint16_t coverage_based_paging_cfg_nb_r17_s::cbp_hyst_timer_r17_opts::to_number() const +{ + static const uint16_t options[] = {2560, 7680, 12800, 17920, 23040, 28160, 33280, 40960}; + return map_enum_number(options, 8, value, "coverage_based_paging_cfg_nb_r17_s::cbp_hyst_timer_r17_e_"); +} + // IntraFreqCellReselectionInfo-NB-v1350 ::= SEQUENCE SRSASN_CODE intra_freq_cell_resel_info_nb_v1350_s::pack(bit_ref& bref) const { @@ -8787,6 +11614,10 @@ SRSASN_CODE rr_cfg_common_sib_nb_r13_s::pack(bit_ref& bref) const group_flags[2] |= dl_gap_v1530.is_present(); group_flags[2] |= wus_cfg_r15.is_present(); group_flags[3] |= nprach_cfg_v1550.is_present(); + group_flags[4] |= gwus_cfg_r16.is_present(); + group_flags[4] |= nrs_non_anchor_cfg_r16_present; + group_flags[4] |= ue_specific_drx_cycle_min_r16_present; + group_flags[5] |= ntn_cfg_common_r17.is_present(); group_flags.pack(bref); if (group_flags[0]) { @@ -8829,6 +11660,40 @@ SRSASN_CODE rr_cfg_common_sib_nb_r13_s::pack(bit_ref& bref) const HANDLE_CODE(nprach_cfg_v1550->pack(bref)); } } + if (group_flags[4]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(gwus_cfg_r16.is_present(), 1)); + HANDLE_CODE(bref.pack(nrs_non_anchor_cfg_r16_present, 1)); + HANDLE_CODE(bref.pack(ue_specific_drx_cycle_min_r16_present, 1)); + if (gwus_cfg_r16.is_present()) { + HANDLE_CODE(gwus_cfg_r16->pack(bref)); + } + if (ue_specific_drx_cycle_min_r16_present) { + HANDLE_CODE(ue_specific_drx_cycle_min_r16.pack(bref)); + } + } + if (group_flags[5]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(ntn_cfg_common_r17.is_present(), 1)); + if (ntn_cfg_common_r17.is_present()) { + HANDLE_CODE(bref.pack(ntn_cfg_common_r17->ta_report_r17_present, 1)); + HANDLE_CODE(bref.pack(ntn_cfg_common_r17->nprach_tx_dur_fmt01_r17_present, 1)); + HANDLE_CODE(bref.pack(ntn_cfg_common_r17->nprach_tx_dur_fmt2_r17_present, 1)); + HANDLE_CODE(bref.pack(ntn_cfg_common_r17->npusch_tx_dur_r17_present, 1)); + HANDLE_CODE(ntn_cfg_common_r17->t318_r17.pack(bref)); + if (ntn_cfg_common_r17->nprach_tx_dur_fmt01_r17_present) { + HANDLE_CODE(ntn_cfg_common_r17->nprach_tx_dur_fmt01_r17.pack(bref)); + } + if (ntn_cfg_common_r17->nprach_tx_dur_fmt2_r17_present) { + HANDLE_CODE(ntn_cfg_common_r17->nprach_tx_dur_fmt2_r17.pack(bref)); + } + if (ntn_cfg_common_r17->npusch_tx_dur_r17_present) { + HANDLE_CODE(ntn_cfg_common_r17->npusch_tx_dur_r17.pack(bref)); + } + } + } } return SRSASN_SUCCESS; } @@ -8849,7 +11714,7 @@ SRSASN_CODE rr_cfg_common_sib_nb_r13_s::unpack(cbit_ref& bref) HANDLE_CODE(ul_pwr_ctrl_common_r13.unpack(bref)); if (ext) { - ext_groups_unpacker_guard group_flags(4); + ext_groups_unpacker_guard group_flags(6); group_flags.unpack(bref); if (group_flags[0]) { @@ -8904,6 +11769,44 @@ SRSASN_CODE rr_cfg_common_sib_nb_r13_s::unpack(cbit_ref& bref) HANDLE_CODE(nprach_cfg_v1550->unpack(bref)); } } + if (group_flags[4]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + bool gwus_cfg_r16_present; + HANDLE_CODE(bref.unpack(gwus_cfg_r16_present, 1)); + gwus_cfg_r16.set_present(gwus_cfg_r16_present); + HANDLE_CODE(bref.unpack(nrs_non_anchor_cfg_r16_present, 1)); + HANDLE_CODE(bref.unpack(ue_specific_drx_cycle_min_r16_present, 1)); + if (gwus_cfg_r16.is_present()) { + HANDLE_CODE(gwus_cfg_r16->unpack(bref)); + } + if (ue_specific_drx_cycle_min_r16_present) { + HANDLE_CODE(ue_specific_drx_cycle_min_r16.unpack(bref)); + } + } + if (group_flags[5]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + bool ntn_cfg_common_r17_present; + HANDLE_CODE(bref.unpack(ntn_cfg_common_r17_present, 1)); + ntn_cfg_common_r17.set_present(ntn_cfg_common_r17_present); + if (ntn_cfg_common_r17.is_present()) { + HANDLE_CODE(bref.unpack(ntn_cfg_common_r17->ta_report_r17_present, 1)); + HANDLE_CODE(bref.unpack(ntn_cfg_common_r17->nprach_tx_dur_fmt01_r17_present, 1)); + HANDLE_CODE(bref.unpack(ntn_cfg_common_r17->nprach_tx_dur_fmt2_r17_present, 1)); + HANDLE_CODE(bref.unpack(ntn_cfg_common_r17->npusch_tx_dur_r17_present, 1)); + HANDLE_CODE(ntn_cfg_common_r17->t318_r17.unpack(bref)); + if (ntn_cfg_common_r17->nprach_tx_dur_fmt01_r17_present) { + HANDLE_CODE(ntn_cfg_common_r17->nprach_tx_dur_fmt01_r17.unpack(bref)); + } + if (ntn_cfg_common_r17->nprach_tx_dur_fmt2_r17_present) { + HANDLE_CODE(ntn_cfg_common_r17->nprach_tx_dur_fmt2_r17.unpack(bref)); + } + if (ntn_cfg_common_r17->npusch_tx_dur_r17_present) { + HANDLE_CODE(ntn_cfg_common_r17->npusch_tx_dur_r17.unpack(bref)); + } + } + } } return SRSASN_SUCCESS; } @@ -8953,10 +11856,63 @@ void rr_cfg_common_sib_nb_r13_s::to_json(json_writer& j) const j.write_fieldname("nprach-Config-v1550"); nprach_cfg_v1550->to_json(j); } + if (gwus_cfg_r16.is_present()) { + j.write_fieldname("gwus-Config-r16"); + gwus_cfg_r16->to_json(j); + } + if (nrs_non_anchor_cfg_r16_present) { + j.write_str("nrs-NonAnchorConfig-r16", "true"); + } + if (ue_specific_drx_cycle_min_r16_present) { + j.write_str("ue-SpecificDRX-CycleMin-r16", ue_specific_drx_cycle_min_r16.to_string()); + } + if (ntn_cfg_common_r17.is_present()) { + j.write_fieldname("ntn-ConfigCommon-r17"); + j.start_obj(); + if (ntn_cfg_common_r17->ta_report_r17_present) { + j.write_str("ta-Report-r17", "enabled"); + } + j.write_str("t318-r17", ntn_cfg_common_r17->t318_r17.to_string()); + if (ntn_cfg_common_r17->nprach_tx_dur_fmt01_r17_present) { + j.write_fieldname("nprach-TxDurationFmt01-r17"); + ntn_cfg_common_r17->nprach_tx_dur_fmt01_r17.to_json(j); + } + if (ntn_cfg_common_r17->nprach_tx_dur_fmt2_r17_present) { + j.write_fieldname("nprach-TxDurationFmt2-r17"); + ntn_cfg_common_r17->nprach_tx_dur_fmt2_r17.to_json(j); + } + if (ntn_cfg_common_r17->npusch_tx_dur_r17_present) { + j.write_fieldname("npusch-TxDuration-r17"); + ntn_cfg_common_r17->npusch_tx_dur_r17.to_json(j); + } + j.end_obj(); + } } j.end_obj(); } +const char* rr_cfg_common_sib_nb_r13_s::ue_specific_drx_cycle_min_r16_opts::to_string() const +{ + static const char* options[] = {"rf32", "rf64", "rf128", "rf256", "rf512", "rf1024"}; + return convert_enum_idx(options, 6, value, "rr_cfg_common_sib_nb_r13_s::ue_specific_drx_cycle_min_r16_e_"); +} +uint16_t rr_cfg_common_sib_nb_r13_s::ue_specific_drx_cycle_min_r16_opts::to_number() const +{ + static const uint16_t options[] = {32, 64, 128, 256, 512, 1024}; + return map_enum_number(options, 6, value, "rr_cfg_common_sib_nb_r13_s::ue_specific_drx_cycle_min_r16_e_"); +} + +const char* rr_cfg_common_sib_nb_r13_s::ntn_cfg_common_r17_s_::t318_r17_opts::to_string() const +{ + static const char* options[] = {"ms0", "ms200", "ms500", "ms1000", "ms2000", "ms4000", "ms8000"}; + return convert_enum_idx(options, 7, value, "rr_cfg_common_sib_nb_r13_s::ntn_cfg_common_r17_s_::t318_r17_e_"); +} +uint16_t rr_cfg_common_sib_nb_r13_s::ntn_cfg_common_r17_s_::t318_r17_opts::to_number() const +{ + static const uint16_t options[] = {0, 200, 500, 1000, 2000, 4000, 8000}; + return map_enum_number(options, 7, value, "rr_cfg_common_sib_nb_r13_s::ntn_cfg_common_r17_s_::t318_r17_e_"); +} + // SC-MCCH-SchedulingInfo-NB-r14 ::= SEQUENCE SRSASN_CODE sc_mcch_sched_info_nb_r14_s::pack(bit_ref& bref) const { @@ -9509,6 +12465,145 @@ uint8_t t_resel_nb_r13_opts::to_number() const return map_enum_number(options, 8, value, "t_resel_nb_r13_e"); } +// UAC-Param-NB-r16 ::= CHOICE +void uac_param_nb_r16_c::destroy_() +{ + switch (type_) { + case types::uac_barr_common: + c.destroy<uac_barr_nb_r16_s>(); + break; + case types::uac_barr_per_plmn_list: + c.destroy<uac_barr_per_plmn_list_l_>(); + break; + default: + break; + } +} +void uac_param_nb_r16_c::set(types::options e) +{ + destroy_(); + type_ = e; + switch (type_) { + case types::uac_barr_common: + c.init<uac_barr_nb_r16_s>(); + break; + case types::uac_barr_per_plmn_list: + c.init<uac_barr_per_plmn_list_l_>(); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "uac_param_nb_r16_c"); + } +} +uac_param_nb_r16_c::uac_param_nb_r16_c(const uac_param_nb_r16_c& other) +{ + type_ = other.type(); + switch (type_) { + case types::uac_barr_common: + c.init(other.c.get<uac_barr_nb_r16_s>()); + break; + case types::uac_barr_per_plmn_list: + c.init(other.c.get<uac_barr_per_plmn_list_l_>()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "uac_param_nb_r16_c"); + } +} +uac_param_nb_r16_c& uac_param_nb_r16_c::operator=(const uac_param_nb_r16_c& other) +{ + if (this == &other) { + return *this; + } + set(other.type()); + switch (type_) { + case types::uac_barr_common: + c.set(other.c.get<uac_barr_nb_r16_s>()); + break; + case types::uac_barr_per_plmn_list: + c.set(other.c.get<uac_barr_per_plmn_list_l_>()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "uac_param_nb_r16_c"); + } + + return *this; +} +uac_barr_nb_r16_s& uac_param_nb_r16_c::set_uac_barr_common() +{ + set(types::uac_barr_common); + return c.get<uac_barr_nb_r16_s>(); +} +uac_param_nb_r16_c::uac_barr_per_plmn_list_l_& uac_param_nb_r16_c::set_uac_barr_per_plmn_list() +{ + set(types::uac_barr_per_plmn_list); + return c.get<uac_barr_per_plmn_list_l_>(); +} +void uac_param_nb_r16_c::to_json(json_writer& j) const +{ + j.start_obj(); + switch (type_) { + case types::uac_barr_common: + j.write_fieldname("uac-BarringCommon"); + c.get<uac_barr_nb_r16_s>().to_json(j); + break; + case types::uac_barr_per_plmn_list: + j.start_array("uac-BarringPerPLMN-List"); + for (const auto& e1 : c.get<uac_barr_per_plmn_list_l_>()) { + e1.to_json(j); + } + j.end_array(); + break; + default: + log_invalid_choice_id(type_, "uac_param_nb_r16_c"); + } + j.end_obj(); +} +SRSASN_CODE uac_param_nb_r16_c::pack(bit_ref& bref) const +{ + type_.pack(bref); + switch (type_) { + case types::uac_barr_common: + HANDLE_CODE(c.get<uac_barr_nb_r16_s>().pack(bref)); + break; + case types::uac_barr_per_plmn_list: + HANDLE_CODE(pack_dyn_seq_of(bref, c.get<uac_barr_per_plmn_list_l_>(), 1, 6)); + break; + default: + log_invalid_choice_id(type_, "uac_param_nb_r16_c"); + return SRSASN_ERROR_ENCODE_FAIL; + } + return SRSASN_SUCCESS; +} +SRSASN_CODE uac_param_nb_r16_c::unpack(cbit_ref& bref) +{ + types e; + e.unpack(bref); + set(e); + switch (type_) { + case types::uac_barr_common: + HANDLE_CODE(c.get<uac_barr_nb_r16_s>().unpack(bref)); + break; + case types::uac_barr_per_plmn_list: + HANDLE_CODE(unpack_dyn_seq_of(c.get<uac_barr_per_plmn_list_l_>(), bref, 1, 6)); + break; + default: + log_invalid_choice_id(type_, "uac_param_nb_r16_c"); + return SRSASN_ERROR_DECODE_FAIL; + } + return SRSASN_SUCCESS; +} + +const char* uac_param_nb_r16_c::types_opts::to_string() const +{ + static const char* options[] = {"uac-BarringCommon", "uac-BarringPerPLMN-List"}; + return convert_enum_idx(options, 2, value, "uac_param_nb_r16_c::types"); +} + // UE-TimersAndConstants-NB-r13 ::= SEQUENCE SRSASN_CODE ue_timers_and_consts_nb_r13_s::pack(bit_ref& bref) const { @@ -9939,6 +13034,7 @@ SRSASN_CODE sib_type14_nb_r13_s::pack(bit_ref& bref) const if (ext) { ext_groups_packer_guard group_flags; group_flags[0] |= ab_per_nrsrp_r15_present; + group_flags[1] |= uac_param_r16.is_present(); group_flags.pack(bref); if (group_flags[0]) { @@ -9949,6 +13045,14 @@ SRSASN_CODE sib_type14_nb_r13_s::pack(bit_ref& bref) const HANDLE_CODE(ab_per_nrsrp_r15.pack(bref)); } } + if (group_flags[1]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(uac_param_r16.is_present(), 1)); + if (uac_param_r16.is_present()) { + HANDLE_CODE(uac_param_r16->pack(bref)); + } + } } return SRSASN_SUCCESS; } @@ -9966,7 +13070,7 @@ SRSASN_CODE sib_type14_nb_r13_s::unpack(cbit_ref& bref) } if (ext) { - ext_groups_unpacker_guard group_flags(1); + ext_groups_unpacker_guard group_flags(2); group_flags.unpack(bref); if (group_flags[0]) { @@ -9977,6 +13081,16 @@ SRSASN_CODE sib_type14_nb_r13_s::unpack(cbit_ref& bref) HANDLE_CODE(ab_per_nrsrp_r15.unpack(bref)); } } + if (group_flags[1]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + bool uac_param_r16_present; + HANDLE_CODE(bref.unpack(uac_param_r16_present, 1)); + uac_param_r16.set_present(uac_param_r16_present); + if (uac_param_r16.is_present()) { + HANDLE_CODE(uac_param_r16->unpack(bref)); + } + } } return SRSASN_SUCCESS; } @@ -9994,6 +13108,10 @@ void sib_type14_nb_r13_s::to_json(json_writer& j) const if (ab_per_nrsrp_r15_present) { j.write_str("ab-PerNRSRP-r15", ab_per_nrsrp_r15.to_string()); } + if (uac_param_r16.is_present()) { + j.write_fieldname("uac-Param-r16"); + uac_param_r16->to_json(j); + } } j.end_obj(); } @@ -10242,6 +13360,14 @@ SRSASN_CODE sib_type2_nb_r13_s::pack(bit_ref& bref) const group_flags[2] |= freq_info_v1530.is_present(); group_flags[2] |= cp_edt_r15_present; group_flags[2] |= up_edt_r15_present; + group_flags[3] |= early_security_reactivation_r16_present; + group_flags[3] |= cp_edt_minus5_gc_r16_present; + group_flags[3] |= up_edt_minus5_gc_r16_present; + group_flags[3] |= cp_pur_epc_r16_present; + group_flags[3] |= up_pur_epc_r16_present; + group_flags[3] |= cp_pur_minus5_gc_r16_present; + group_flags[3] |= up_pur_minus5_gc_r16_present; + group_flags[3] |= rai_activation_enh_r16_present; group_flags.pack(bref); if (group_flags[0]) { @@ -10266,6 +13392,18 @@ SRSASN_CODE sib_type2_nb_r13_s::pack(bit_ref& bref) const HANDLE_CODE(freq_info_v1530->tdd_ul_dl_align_offset_r15.pack(bref)); } } + if (group_flags[3]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(early_security_reactivation_r16_present, 1)); + HANDLE_CODE(bref.pack(cp_edt_minus5_gc_r16_present, 1)); + HANDLE_CODE(bref.pack(up_edt_minus5_gc_r16_present, 1)); + HANDLE_CODE(bref.pack(cp_pur_epc_r16_present, 1)); + HANDLE_CODE(bref.pack(up_pur_epc_r16_present, 1)); + HANDLE_CODE(bref.pack(cp_pur_minus5_gc_r16_present, 1)); + HANDLE_CODE(bref.pack(up_pur_minus5_gc_r16_present, 1)); + HANDLE_CODE(bref.pack(rai_activation_enh_r16_present, 1)); + } } return SRSASN_SUCCESS; } @@ -10291,7 +13429,7 @@ SRSASN_CODE sib_type2_nb_r13_s::unpack(cbit_ref& bref) } if (ext) { - ext_groups_unpacker_guard group_flags(3); + ext_groups_unpacker_guard group_flags(4); group_flags.unpack(bref); if (group_flags[0]) { @@ -10318,6 +13456,18 @@ SRSASN_CODE sib_type2_nb_r13_s::unpack(cbit_ref& bref) HANDLE_CODE(freq_info_v1530->tdd_ul_dl_align_offset_r15.unpack(bref)); } } + if (group_flags[3]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.unpack(early_security_reactivation_r16_present, 1)); + HANDLE_CODE(bref.unpack(cp_edt_minus5_gc_r16_present, 1)); + HANDLE_CODE(bref.unpack(up_edt_minus5_gc_r16_present, 1)); + HANDLE_CODE(bref.unpack(cp_pur_epc_r16_present, 1)); + HANDLE_CODE(bref.unpack(up_pur_epc_r16_present, 1)); + HANDLE_CODE(bref.unpack(cp_pur_minus5_gc_r16_present, 1)); + HANDLE_CODE(bref.unpack(up_pur_minus5_gc_r16_present, 1)); + HANDLE_CODE(bref.unpack(rai_activation_enh_r16_present, 1)); + } } return SRSASN_SUCCESS; } @@ -10372,6 +13522,30 @@ void sib_type2_nb_r13_s::to_json(json_writer& j) const if (up_edt_r15_present) { j.write_str("up-EDT-r15", "true"); } + if (early_security_reactivation_r16_present) { + j.write_str("earlySecurityReactivation-r16", "true"); + } + if (cp_edt_minus5_gc_r16_present) { + j.write_str("cp-EDT-5GC-r16", "true"); + } + if (up_edt_minus5_gc_r16_present) { + j.write_str("up-EDT-5GC-r16", "true"); + } + if (cp_pur_epc_r16_present) { + j.write_str("cp-PUR-EPC-r16", "true"); + } + if (up_pur_epc_r16_present) { + j.write_str("up-PUR-EPC-r16", "true"); + } + if (cp_pur_minus5_gc_r16_present) { + j.write_str("cp-PUR-5GC-r16", "true"); + } + if (up_pur_minus5_gc_r16_present) { + j.write_str("up-PUR-5GC-r16", "true"); + } + if (rai_activation_enh_r16_present) { + j.write_str("rai-ActivationEnh-r16", "true"); + } } j.end_obj(); } @@ -10637,6 +13811,7 @@ SRSASN_CODE sib_type22_nb_r14_s::pack(bit_ref& bref) const ext_groups_packer_guard group_flags; group_flags[0] |= mixed_operation_mode_cfg_r15.is_present(); group_flags[0] |= ul_cfg_list_r15.is_present(); + group_flags[1] |= coverage_based_paging_cfg_r17.is_present(); group_flags.pack(bref); if (group_flags[0]) { @@ -10660,6 +13835,14 @@ SRSASN_CODE sib_type22_nb_r14_s::pack(bit_ref& bref) const HANDLE_CODE(pack_dyn_seq_of(bref, *ul_cfg_list_r15, 1, 15)); } } + if (group_flags[1]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(coverage_based_paging_cfg_r17.is_present(), 1)); + if (coverage_based_paging_cfg_r17.is_present()) { + HANDLE_CODE(coverage_based_paging_cfg_r17->pack(bref)); + } + } } return SRSASN_SUCCESS; } @@ -10689,7 +13872,7 @@ SRSASN_CODE sib_type22_nb_r14_s::unpack(cbit_ref& bref) } if (ext) { - ext_groups_unpacker_guard group_flags(1); + ext_groups_unpacker_guard group_flags(2); group_flags.unpack(bref); if (group_flags[0]) { @@ -10717,6 +13900,16 @@ SRSASN_CODE sib_type22_nb_r14_s::unpack(cbit_ref& bref) HANDLE_CODE(unpack_dyn_seq_of(*ul_cfg_list_r15, bref, 1, 15)); } } + if (group_flags[1]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + bool coverage_based_paging_cfg_r17_present; + HANDLE_CODE(bref.unpack(coverage_based_paging_cfg_r17_present, 1)); + coverage_based_paging_cfg_r17.set_present(coverage_based_paging_cfg_r17_present); + if (coverage_based_paging_cfg_r17.is_present()) { + HANDLE_CODE(coverage_based_paging_cfg_r17->unpack(bref)); + } + } } return SRSASN_SUCCESS; } @@ -10783,6 +13976,10 @@ void sib_type22_nb_r14_s::to_json(json_writer& j) const } j.end_array(); } + if (coverage_based_paging_cfg_r17.is_present()) { + j.write_fieldname("coverageBasedPagingConfig-r17"); + coverage_based_paging_cfg_r17->to_json(j); + } } j.end_obj(); } @@ -10849,6 +14046,68 @@ void sib_type23_nb_r15_s::to_json(json_writer& j) const j.end_obj(); } +// SystemInformationBlockType27-NB-r16 ::= SEQUENCE +SRSASN_CODE sib_type27_nb_r16_s::pack(bit_ref& bref) const +{ + bref.pack(ext, 1); + HANDLE_CODE(bref.pack(carrier_freq_list_eutra_r16_present, 1)); + HANDLE_CODE(bref.pack(carrier_freqs_list_geran_r16_present, 1)); + HANDLE_CODE(bref.pack(late_non_crit_ext_present, 1)); + + if (carrier_freq_list_eutra_r16_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, carrier_freq_list_eutra_r16, 1, 8)); + } + if (carrier_freqs_list_geran_r16_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, carrier_freqs_list_geran_r16, 1, 8)); + } + if (late_non_crit_ext_present) { + HANDLE_CODE(late_non_crit_ext.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE sib_type27_nb_r16_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(bref.unpack(carrier_freq_list_eutra_r16_present, 1)); + HANDLE_CODE(bref.unpack(carrier_freqs_list_geran_r16_present, 1)); + HANDLE_CODE(bref.unpack(late_non_crit_ext_present, 1)); + + if (carrier_freq_list_eutra_r16_present) { + HANDLE_CODE(unpack_dyn_seq_of(carrier_freq_list_eutra_r16, bref, 1, 8)); + } + if (carrier_freqs_list_geran_r16_present) { + HANDLE_CODE(unpack_dyn_seq_of(carrier_freqs_list_geran_r16, bref, 1, 8)); + } + if (late_non_crit_ext_present) { + HANDLE_CODE(late_non_crit_ext.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void sib_type27_nb_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (carrier_freq_list_eutra_r16_present) { + j.start_array("carrierFreqListEUTRA-r16"); + for (const auto& e1 : carrier_freq_list_eutra_r16) { + e1.to_json(j); + } + j.end_array(); + } + if (carrier_freqs_list_geran_r16_present) { + j.start_array("carrierFreqsListGERAN-r16"); + for (const auto& e1 : carrier_freqs_list_geran_r16) { + e1.to_json(j); + } + j.end_array(); + } + if (late_non_crit_ext_present) { + j.write_str("lateNonCriticalExtension", late_non_crit_ext.to_string()); + } + j.end_obj(); +} + // SystemInformationBlockType3-NB-r13 ::= SEQUENCE SRSASN_CODE sib_type3_nb_r13_s::pack(bit_ref& bref) const { @@ -10888,6 +14147,8 @@ SRSASN_CODE sib_type3_nb_r13_s::pack(bit_ref& bref) const group_flags[3] |= cell_resel_info_common_v1450.is_present(); group_flags[4] |= nsss_rrm_cfg_r15.is_present(); group_flags[4] |= npbch_rrm_cfg_r15_present; + group_flags[5] |= conn_meas_cfg_r17.is_present(); + group_flags[5] |= t_service_r17_present; group_flags.pack(bref); if (group_flags[0]) { @@ -10931,6 +14192,18 @@ SRSASN_CODE sib_type3_nb_r13_s::pack(bit_ref& bref) const HANDLE_CODE(nsss_rrm_cfg_r15->pack(bref)); } } + if (group_flags[5]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(conn_meas_cfg_r17.is_present(), 1)); + HANDLE_CODE(bref.pack(t_service_r17_present, 1)); + if (conn_meas_cfg_r17.is_present()) { + HANDLE_CODE(conn_meas_cfg_r17->pack(bref)); + } + if (t_service_r17_present) { + HANDLE_CODE(pack_integer(bref, t_service_r17, (uint32_t)0u, (uint32_t)1048575u)); + } + } } return SRSASN_SUCCESS; } @@ -10965,7 +14238,7 @@ SRSASN_CODE sib_type3_nb_r13_s::unpack(cbit_ref& bref) } if (ext) { - ext_groups_unpacker_guard group_flags(5); + ext_groups_unpacker_guard group_flags(6); group_flags.unpack(bref); if (group_flags[0]) { @@ -11019,6 +14292,20 @@ SRSASN_CODE sib_type3_nb_r13_s::unpack(cbit_ref& bref) HANDLE_CODE(nsss_rrm_cfg_r15->unpack(bref)); } } + if (group_flags[5]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + bool conn_meas_cfg_r17_present; + HANDLE_CODE(bref.unpack(conn_meas_cfg_r17_present, 1)); + conn_meas_cfg_r17.set_present(conn_meas_cfg_r17_present); + HANDLE_CODE(bref.unpack(t_service_r17_present, 1)); + if (conn_meas_cfg_r17.is_present()) { + HANDLE_CODE(conn_meas_cfg_r17->unpack(bref)); + } + if (t_service_r17_present) { + HANDLE_CODE(unpack_integer(t_service_r17, bref, (uint32_t)0u, (uint32_t)1048575u)); + } + } } return SRSASN_SUCCESS; } @@ -11090,6 +14377,13 @@ void sib_type3_nb_r13_s::to_json(json_writer& j) const if (npbch_rrm_cfg_r15_present) { j.write_str("npbch-RRM-Config-r15", "enabled"); } + if (conn_meas_cfg_r17.is_present()) { + j.write_fieldname("connMeasConfig-r17"); + conn_meas_cfg_r17->to_json(j); + } + if (t_service_r17_present) { + j.write_int("t-Service-r17", t_service_r17); + } } j.end_obj(); } @@ -11120,19 +14414,102 @@ uint8_t sib_type3_nb_r13_s::cell_resel_info_common_r13_s_::q_hyst_r13_opts::to_n return map_enum_number(options, 16, value, "sib_type3_nb_r13_s::cell_resel_info_common_r13_s_::q_hyst_r13_e_"); } +// SystemInformationBlockType31-NB-r17 ::= SEQUENCE +SRSASN_CODE sib_type31_nb_r17_s::pack(bit_ref& bref) const +{ + bref.pack(ext, 1); + HANDLE_CODE(bref.pack(late_non_crit_ext_present, 1)); + + HANDLE_CODE(serving_satellite_info_r17.pack(bref)); + if (late_non_crit_ext_present) { + HANDLE_CODE(late_non_crit_ext.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE sib_type31_nb_r17_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(bref.unpack(late_non_crit_ext_present, 1)); + + HANDLE_CODE(serving_satellite_info_r17.unpack(bref)); + if (late_non_crit_ext_present) { + HANDLE_CODE(late_non_crit_ext.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void sib_type31_nb_r17_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_fieldname("servingSatelliteInfo-r17"); + serving_satellite_info_r17.to_json(j); + if (late_non_crit_ext_present) { + j.write_str("lateNonCriticalExtension", late_non_crit_ext.to_string()); + } + j.end_obj(); +} + +// SystemInformationBlockType32-NB-r17 ::= SEQUENCE +SRSASN_CODE sib_type32_nb_r17_s::pack(bit_ref& bref) const +{ + bref.pack(ext, 1); + HANDLE_CODE(bref.pack(satellite_info_list_r17_present, 1)); + HANDLE_CODE(bref.pack(late_non_crit_ext_present, 1)); + + if (satellite_info_list_r17_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, satellite_info_list_r17, 1, 4)); + } + if (late_non_crit_ext_present) { + HANDLE_CODE(late_non_crit_ext.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE sib_type32_nb_r17_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(bref.unpack(satellite_info_list_r17_present, 1)); + HANDLE_CODE(bref.unpack(late_non_crit_ext_present, 1)); + + if (satellite_info_list_r17_present) { + HANDLE_CODE(unpack_dyn_seq_of(satellite_info_list_r17, bref, 1, 4)); + } + if (late_non_crit_ext_present) { + HANDLE_CODE(late_non_crit_ext.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void sib_type32_nb_r17_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (satellite_info_list_r17_present) { + j.start_array("satelliteInfoList-r17"); + for (const auto& e1 : satellite_info_list_r17) { + e1.to_json(j); + } + j.end_array(); + } + if (late_non_crit_ext_present) { + j.write_str("lateNonCriticalExtension", late_non_crit_ext.to_string()); + } + j.end_obj(); +} + // SystemInformationBlockType4-NB-r13 ::= SEQUENCE SRSASN_CODE sib_type4_nb_r13_s::pack(bit_ref& bref) const { bref.pack(ext, 1); HANDLE_CODE(bref.pack(intra_freq_neigh_cell_list_r13_present, 1)); - HANDLE_CODE(bref.pack(intra_freq_black_cell_list_r13_present, 1)); + HANDLE_CODE(bref.pack(intra_freq_excluded_cell_list_r13_present, 1)); HANDLE_CODE(bref.pack(late_non_crit_ext_present, 1)); if (intra_freq_neigh_cell_list_r13_present) { HANDLE_CODE(pack_dyn_seq_of(bref, intra_freq_neigh_cell_list_r13, 1, 16)); } - if (intra_freq_black_cell_list_r13_present) { - HANDLE_CODE(pack_dyn_seq_of(bref, intra_freq_black_cell_list_r13, 1, 16)); + if (intra_freq_excluded_cell_list_r13_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, intra_freq_excluded_cell_list_r13, 1, 16)); } if (late_non_crit_ext_present) { HANDLE_CODE(late_non_crit_ext.pack(bref)); @@ -11163,14 +14540,14 @@ SRSASN_CODE sib_type4_nb_r13_s::unpack(cbit_ref& bref) { bref.unpack(ext, 1); HANDLE_CODE(bref.unpack(intra_freq_neigh_cell_list_r13_present, 1)); - HANDLE_CODE(bref.unpack(intra_freq_black_cell_list_r13_present, 1)); + HANDLE_CODE(bref.unpack(intra_freq_excluded_cell_list_r13_present, 1)); HANDLE_CODE(bref.unpack(late_non_crit_ext_present, 1)); if (intra_freq_neigh_cell_list_r13_present) { HANDLE_CODE(unpack_dyn_seq_of(intra_freq_neigh_cell_list_r13, bref, 1, 16)); } - if (intra_freq_black_cell_list_r13_present) { - HANDLE_CODE(unpack_dyn_seq_of(intra_freq_black_cell_list_r13, bref, 1, 16)); + if (intra_freq_excluded_cell_list_r13_present) { + HANDLE_CODE(unpack_dyn_seq_of(intra_freq_excluded_cell_list_r13, bref, 1, 16)); } if (late_non_crit_ext_present) { HANDLE_CODE(late_non_crit_ext.unpack(bref)); @@ -11209,9 +14586,9 @@ void sib_type4_nb_r13_s::to_json(json_writer& j) const } j.end_array(); } - if (intra_freq_black_cell_list_r13_present) { - j.start_array("intraFreqBlackCellList-r13"); - for (const auto& e1 : intra_freq_black_cell_list_r13) { + if (intra_freq_excluded_cell_list_r13_present) { + j.start_array("intraFreqExcludedCellList-r13"); + for (const auto& e1 : intra_freq_excluded_cell_list_r13) { e1.to_json(j); } j.end_array(); @@ -11386,6 +14763,15 @@ void sys_info_nb_r13_ies_s::sib_type_and_info_r13_item_c_::destroy_() case types::sib23_v1530: c.destroy<sib_type23_nb_r15_s>(); break; + case types::sib27_v1610: + c.destroy<sib_type27_nb_r16_s>(); + break; + case types::sib31_v1700: + c.destroy<sib_type31_nb_r17_s>(); + break; + case types::sib32_v1700: + c.destroy<sib_type32_nb_r17_s>(); + break; default: break; } @@ -11425,6 +14811,15 @@ void sys_info_nb_r13_ies_s::sib_type_and_info_r13_item_c_::set(types::options e) case types::sib23_v1530: c.init<sib_type23_nb_r15_s>(); break; + case types::sib27_v1610: + c.init<sib_type27_nb_r16_s>(); + break; + case types::sib31_v1700: + c.init<sib_type31_nb_r17_s>(); + break; + case types::sib32_v1700: + c.init<sib_type32_nb_r17_s>(); + break; case types::nulltype: break; default: @@ -11466,6 +14861,15 @@ sys_info_nb_r13_ies_s::sib_type_and_info_r13_item_c_::sib_type_and_info_r13_item case types::sib23_v1530: c.init(other.c.get<sib_type23_nb_r15_s>()); break; + case types::sib27_v1610: + c.init(other.c.get<sib_type27_nb_r16_s>()); + break; + case types::sib31_v1700: + c.init(other.c.get<sib_type31_nb_r17_s>()); + break; + case types::sib32_v1700: + c.init(other.c.get<sib_type32_nb_r17_s>()); + break; case types::nulltype: break; default: @@ -11510,6 +14914,15 @@ sys_info_nb_r13_ies_s::sib_type_and_info_r13_item_c_& sys_info_nb_r13_ies_s::sib case types::sib23_v1530: c.set(other.c.get<sib_type23_nb_r15_s>()); break; + case types::sib27_v1610: + c.set(other.c.get<sib_type27_nb_r16_s>()); + break; + case types::sib31_v1700: + c.set(other.c.get<sib_type31_nb_r17_s>()); + break; + case types::sib32_v1700: + c.set(other.c.get<sib_type32_nb_r17_s>()); + break; case types::nulltype: break; default: @@ -11568,6 +14981,21 @@ sib_type23_nb_r15_s& sys_info_nb_r13_ies_s::sib_type_and_info_r13_item_c_::set_s set(types::sib23_v1530); return c.get<sib_type23_nb_r15_s>(); } +sib_type27_nb_r16_s& sys_info_nb_r13_ies_s::sib_type_and_info_r13_item_c_::set_sib27_v1610() +{ + set(types::sib27_v1610); + return c.get<sib_type27_nb_r16_s>(); +} +sib_type31_nb_r17_s& sys_info_nb_r13_ies_s::sib_type_and_info_r13_item_c_::set_sib31_v1700() +{ + set(types::sib31_v1700); + return c.get<sib_type31_nb_r17_s>(); +} +sib_type32_nb_r17_s& sys_info_nb_r13_ies_s::sib_type_and_info_r13_item_c_::set_sib32_v1700() +{ + set(types::sib32_v1700); + return c.get<sib_type32_nb_r17_s>(); +} void sys_info_nb_r13_ies_s::sib_type_and_info_r13_item_c_::to_json(json_writer& j) const { j.start_obj(); @@ -11612,6 +15040,18 @@ void sys_info_nb_r13_ies_s::sib_type_and_info_r13_item_c_::to_json(json_writer& j.write_fieldname("sib23-v1530"); c.get<sib_type23_nb_r15_s>().to_json(j); break; + case types::sib27_v1610: + j.write_fieldname("sib27-v1610"); + c.get<sib_type27_nb_r16_s>().to_json(j); + break; + case types::sib31_v1700: + j.write_fieldname("sib31-v1700"); + c.get<sib_type31_nb_r17_s>().to_json(j); + break; + case types::sib32_v1700: + j.write_fieldname("sib32-v1700"); + c.get<sib_type32_nb_r17_s>().to_json(j); + break; default: log_invalid_choice_id(type_, "sys_info_nb_r13_ies_s::sib_type_and_info_r13_item_c_"); } @@ -11655,6 +15095,18 @@ SRSASN_CODE sys_info_nb_r13_ies_s::sib_type_and_info_r13_item_c_::pack(bit_ref& varlength_field_pack_guard varlen_scope(bref, false); HANDLE_CODE(c.get<sib_type23_nb_r15_s>().pack(bref)); } break; + case types::sib27_v1610: { + varlength_field_pack_guard varlen_scope(bref, false); + HANDLE_CODE(c.get<sib_type27_nb_r16_s>().pack(bref)); + } break; + case types::sib31_v1700: { + varlength_field_pack_guard varlen_scope(bref, false); + HANDLE_CODE(c.get<sib_type31_nb_r17_s>().pack(bref)); + } break; + case types::sib32_v1700: { + varlength_field_pack_guard varlen_scope(bref, false); + HANDLE_CODE(c.get<sib_type32_nb_r17_s>().pack(bref)); + } break; default: log_invalid_choice_id(type_, "sys_info_nb_r13_ies_s::sib_type_and_info_r13_item_c_"); return SRSASN_ERROR_ENCODE_FAIL; @@ -11701,6 +15153,18 @@ SRSASN_CODE sys_info_nb_r13_ies_s::sib_type_and_info_r13_item_c_::unpack(cbit_re varlength_field_unpack_guard varlen_scope(bref, false); HANDLE_CODE(c.get<sib_type23_nb_r15_s>().unpack(bref)); } break; + case types::sib27_v1610: { + varlength_field_unpack_guard varlen_scope(bref, false); + HANDLE_CODE(c.get<sib_type27_nb_r16_s>().unpack(bref)); + } break; + case types::sib31_v1700: { + varlength_field_unpack_guard varlen_scope(bref, false); + HANDLE_CODE(c.get<sib_type31_nb_r17_s>().unpack(bref)); + } break; + case types::sib32_v1700: { + varlength_field_unpack_guard varlen_scope(bref, false); + HANDLE_CODE(c.get<sib_type32_nb_r17_s>().unpack(bref)); + } break; default: log_invalid_choice_id(type_, "sys_info_nb_r13_ies_s::sib_type_and_info_r13_item_c_"); return SRSASN_ERROR_DECODE_FAIL; @@ -11719,13 +15183,16 @@ const char* sys_info_nb_r13_ies_s::sib_type_and_info_r13_item_c_::types_opts::to "sib15-v1430", "sib20-v1430", "sib22-v1430", - "sib23-v1530"}; - return convert_enum_idx(options, 10, value, "sys_info_nb_r13_ies_s::sib_type_and_info_r13_item_c_::types"); + "sib23-v1530", + "sib27-v1610", + "sib31-v1700", + "sib32-v1700"}; + return convert_enum_idx(options, 13, value, "sys_info_nb_r13_ies_s::sib_type_and_info_r13_item_c_::types"); } uint8_t sys_info_nb_r13_ies_s::sib_type_and_info_r13_item_c_::types_opts::to_number() const { - static const uint8_t options[] = {2, 3, 4, 5, 14, 16, 15, 20, 22, 23}; - return map_enum_number(options, 10, value, "sys_info_nb_r13_ies_s::sib_type_and_info_r13_item_c_::types"); + static const uint8_t options[] = {2, 3, 4, 5, 14, 16, 15, 20, 22, 23, 27, 31, 32}; + return map_enum_number(options, 13, value, "sys_info_nb_r13_ies_s::sib_type_and_info_r13_item_c_::types"); } // SystemInformationBlockType1-NB-v1350 ::= SEQUENCE @@ -12363,6 +15830,43 @@ void bcch_dl_sch_msg_nb_s::to_json(json_writer& j) const j.end_array(); } +// RRCEarlyDataComplete-NB-v1700-IEs ::= SEQUENCE +SRSASN_CODE rrc_early_data_complete_nb_v1700_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(cbp_idx_r17_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + if (cbp_idx_r17_present) { + HANDLE_CODE(pack_integer(bref, cbp_idx_r17, (uint8_t)1u, (uint8_t)2u)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE rrc_early_data_complete_nb_v1700_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(cbp_idx_r17_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + if (cbp_idx_r17_present) { + HANDLE_CODE(unpack_integer(cbp_idx_r17, bref, (uint8_t)1u, (uint8_t)2u)); + } + + return SRSASN_SUCCESS; +} +void rrc_early_data_complete_nb_v1700_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (cbp_idx_r17_present) { + j.write_int("cbp-Index-r17", cbp_idx_r17); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + j.start_obj(); + j.end_obj(); + } + j.end_obj(); +} + // RRCConnectionReestablishment-NB-v1430-IEs ::= SEQUENCE SRSASN_CODE rrc_conn_reest_nb_v1430_ies_s::pack(bit_ref& bref) const { @@ -12400,6 +15904,43 @@ void rrc_conn_reest_nb_v1430_ies_s::to_json(json_writer& j) const j.end_obj(); } +// RRCConnectionSetup-NB-v1610-IEs ::= SEQUENCE +SRSASN_CODE rrc_conn_setup_nb_v1610_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(ded_info_nas_r16_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + if (ded_info_nas_r16_present) { + HANDLE_CODE(ded_info_nas_r16.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE rrc_conn_setup_nb_v1610_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(ded_info_nas_r16_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + if (ded_info_nas_r16_present) { + HANDLE_CODE(ded_info_nas_r16.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void rrc_conn_setup_nb_v1610_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (ded_info_nas_r16_present) { + j.write_str("dedicatedInfoNAS-r16", ded_info_nas_r16.to_string()); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + j.start_obj(); + j.end_obj(); + } + j.end_obj(); +} + // RRCEarlyDataComplete-NB-v1590-IEs ::= SEQUENCE SRSASN_CODE rrc_early_data_complete_nb_v1590_ies_s::pack(bit_ref& bref) const { @@ -12409,6 +15950,9 @@ SRSASN_CODE rrc_early_data_complete_nb_v1590_ies_s::pack(bit_ref& bref) const if (late_non_crit_ext_present) { HANDLE_CODE(late_non_crit_ext.pack(bref)); } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } return SRSASN_SUCCESS; } @@ -12420,6 +15964,9 @@ SRSASN_CODE rrc_early_data_complete_nb_v1590_ies_s::unpack(cbit_ref& bref) if (late_non_crit_ext_present) { HANDLE_CODE(late_non_crit_ext.unpack(bref)); } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } return SRSASN_SUCCESS; } @@ -12431,8 +15978,7 @@ void rrc_early_data_complete_nb_v1590_ies_s::to_json(json_writer& j) const } if (non_crit_ext_present) { j.write_fieldname("nonCriticalExtension"); - j.start_obj(); - j.end_obj(); + non_crit_ext.to_json(j); } j.end_obj(); } @@ -12603,6 +16149,9 @@ SRSASN_CODE rrc_conn_setup_nb_r13_ies_s::pack(bit_ref& bref) const if (late_non_crit_ext_present) { HANDLE_CODE(late_non_crit_ext.pack(bref)); } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } return SRSASN_SUCCESS; } @@ -12615,6 +16164,9 @@ SRSASN_CODE rrc_conn_setup_nb_r13_ies_s::unpack(cbit_ref& bref) if (late_non_crit_ext_present) { HANDLE_CODE(late_non_crit_ext.unpack(bref)); } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } return SRSASN_SUCCESS; } @@ -12628,8 +16180,7 @@ void rrc_conn_setup_nb_r13_ies_s::to_json(json_writer& j) const } if (non_crit_ext_present) { j.write_fieldname("nonCriticalExtension"); - j.start_obj(); - j.end_obj(); + non_crit_ext.to_json(j); } j.end_obj(); } @@ -13625,12 +17176,1045 @@ void dl_ccch_msg_nb_s::to_json(json_writer& j) const j.end_array(); } +// NRSRP-ChangeThresh-NB-r16 ::= ENUMERATED +const char* nrsrp_change_thresh_nb_r16_opts::to_string() const +{ + static const char* options[] = {"dB4", + "dB6", + "dB8", + "dB10", + "dB14", + "dB18", + "dB22", + "dB26", + "dB30", + "dB34", + "spare6", + "spare5", + "spare4", + "spare3", + "spare2", + "spare1"}; + return convert_enum_idx(options, 16, value, "nrsrp_change_thresh_nb_r16_e"); +} +uint8_t nrsrp_change_thresh_nb_r16_opts::to_number() const +{ + static const uint8_t options[] = {4, 6, 8, 10, 14, 18, 22, 26, 30, 34}; + return map_enum_number(options, 10, value, "nrsrp_change_thresh_nb_r16_e"); +} + +// PUR-NRSRP-ChangeThreshold-NB-r16 ::= SEQUENCE +SRSASN_CODE pur_nrsrp_change_thres_nb_r16_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(decrease_thresh_r16_present, 1)); + + HANDLE_CODE(increase_thresh_r16.pack(bref)); + if (decrease_thresh_r16_present) { + HANDLE_CODE(decrease_thresh_r16.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE pur_nrsrp_change_thres_nb_r16_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(decrease_thresh_r16_present, 1)); + + HANDLE_CODE(increase_thresh_r16.unpack(bref)); + if (decrease_thresh_r16_present) { + HANDLE_CODE(decrease_thresh_r16.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void pur_nrsrp_change_thres_nb_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_str("increaseThresh-r16", increase_thresh_r16.to_string()); + if (decrease_thresh_r16_present) { + j.write_str("decreaseThresh-r16", decrease_thresh_r16.to_string()); + } + j.end_obj(); +} + +// PUR-PeriodicityAndOffset-NB-r16 ::= CHOICE +void pur_periodicity_and_offset_nb_r16_c::destroy_() {} +void pur_periodicity_and_offset_nb_r16_c::set(types::options e) +{ + destroy_(); + type_ = e; +} +pur_periodicity_and_offset_nb_r16_c::pur_periodicity_and_offset_nb_r16_c( + const pur_periodicity_and_offset_nb_r16_c& other) +{ + type_ = other.type(); + switch (type_) { + case types::periodicity8: + c.init(other.c.get<uint8_t>()); + break; + case types::periodicity16: + c.init(other.c.get<uint8_t>()); + break; + case types::periodicity32: + c.init(other.c.get<uint8_t>()); + break; + case types::periodicity64: + c.init(other.c.get<uint8_t>()); + break; + case types::periodicity128: + c.init(other.c.get<uint8_t>()); + break; + case types::periodicity256: + c.init(other.c.get<uint16_t>()); + break; + case types::periodicity512: + c.init(other.c.get<uint16_t>()); + break; + case types::periodicity1024: + c.init(other.c.get<uint16_t>()); + break; + case types::periodicity2048: + c.init(other.c.get<uint16_t>()); + break; + case types::periodicity4096: + c.init(other.c.get<uint16_t>()); + break; + case types::periodicity8192: + c.init(other.c.get<uint16_t>()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "pur_periodicity_and_offset_nb_r16_c"); + } +} +pur_periodicity_and_offset_nb_r16_c& +pur_periodicity_and_offset_nb_r16_c::operator=(const pur_periodicity_and_offset_nb_r16_c& other) +{ + if (this == &other) { + return *this; + } + set(other.type()); + switch (type_) { + case types::periodicity8: + c.set(other.c.get<uint8_t>()); + break; + case types::periodicity16: + c.set(other.c.get<uint8_t>()); + break; + case types::periodicity32: + c.set(other.c.get<uint8_t>()); + break; + case types::periodicity64: + c.set(other.c.get<uint8_t>()); + break; + case types::periodicity128: + c.set(other.c.get<uint8_t>()); + break; + case types::periodicity256: + c.set(other.c.get<uint16_t>()); + break; + case types::periodicity512: + c.set(other.c.get<uint16_t>()); + break; + case types::periodicity1024: + c.set(other.c.get<uint16_t>()); + break; + case types::periodicity2048: + c.set(other.c.get<uint16_t>()); + break; + case types::periodicity4096: + c.set(other.c.get<uint16_t>()); + break; + case types::periodicity8192: + c.set(other.c.get<uint16_t>()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "pur_periodicity_and_offset_nb_r16_c"); + } + + return *this; +} +uint8_t& pur_periodicity_and_offset_nb_r16_c::set_periodicity8() +{ + set(types::periodicity8); + return c.get<uint8_t>(); +} +uint8_t& pur_periodicity_and_offset_nb_r16_c::set_periodicity16() +{ + set(types::periodicity16); + return c.get<uint8_t>(); +} +uint8_t& pur_periodicity_and_offset_nb_r16_c::set_periodicity32() +{ + set(types::periodicity32); + return c.get<uint8_t>(); +} +uint8_t& pur_periodicity_and_offset_nb_r16_c::set_periodicity64() +{ + set(types::periodicity64); + return c.get<uint8_t>(); +} +uint8_t& pur_periodicity_and_offset_nb_r16_c::set_periodicity128() +{ + set(types::periodicity128); + return c.get<uint8_t>(); +} +uint16_t& pur_periodicity_and_offset_nb_r16_c::set_periodicity256() +{ + set(types::periodicity256); + return c.get<uint16_t>(); +} +uint16_t& pur_periodicity_and_offset_nb_r16_c::set_periodicity512() +{ + set(types::periodicity512); + return c.get<uint16_t>(); +} +uint16_t& pur_periodicity_and_offset_nb_r16_c::set_periodicity1024() +{ + set(types::periodicity1024); + return c.get<uint16_t>(); +} +uint16_t& pur_periodicity_and_offset_nb_r16_c::set_periodicity2048() +{ + set(types::periodicity2048); + return c.get<uint16_t>(); +} +uint16_t& pur_periodicity_and_offset_nb_r16_c::set_periodicity4096() +{ + set(types::periodicity4096); + return c.get<uint16_t>(); +} +uint16_t& pur_periodicity_and_offset_nb_r16_c::set_periodicity8192() +{ + set(types::periodicity8192); + return c.get<uint16_t>(); +} +void pur_periodicity_and_offset_nb_r16_c::to_json(json_writer& j) const +{ + j.start_obj(); + switch (type_) { + case types::periodicity8: + j.write_int("periodicity8", c.get<uint8_t>()); + break; + case types::periodicity16: + j.write_int("periodicity16", c.get<uint8_t>()); + break; + case types::periodicity32: + j.write_int("periodicity32", c.get<uint8_t>()); + break; + case types::periodicity64: + j.write_int("periodicity64", c.get<uint8_t>()); + break; + case types::periodicity128: + j.write_int("periodicity128", c.get<uint8_t>()); + break; + case types::periodicity256: + j.write_int("periodicity256", c.get<uint16_t>()); + break; + case types::periodicity512: + j.write_int("periodicity512", c.get<uint16_t>()); + break; + case types::periodicity1024: + j.write_int("periodicity1024", c.get<uint16_t>()); + break; + case types::periodicity2048: + j.write_int("periodicity2048", c.get<uint16_t>()); + break; + case types::periodicity4096: + j.write_int("periodicity4096", c.get<uint16_t>()); + break; + case types::periodicity8192: + j.write_int("periodicity8192", c.get<uint16_t>()); + break; + default: + log_invalid_choice_id(type_, "pur_periodicity_and_offset_nb_r16_c"); + } + j.end_obj(); +} +SRSASN_CODE pur_periodicity_and_offset_nb_r16_c::pack(bit_ref& bref) const +{ + type_.pack(bref); + switch (type_) { + case types::periodicity8: + HANDLE_CODE(pack_integer(bref, c.get<uint8_t>(), (uint8_t)1u, (uint8_t)7u)); + break; + case types::periodicity16: + HANDLE_CODE(pack_integer(bref, c.get<uint8_t>(), (uint8_t)1u, (uint8_t)15u)); + break; + case types::periodicity32: + HANDLE_CODE(pack_integer(bref, c.get<uint8_t>(), (uint8_t)1u, (uint8_t)31u)); + break; + case types::periodicity64: + HANDLE_CODE(pack_integer(bref, c.get<uint8_t>(), (uint8_t)1u, (uint8_t)63u)); + break; + case types::periodicity128: + HANDLE_CODE(pack_integer(bref, c.get<uint8_t>(), (uint8_t)1u, (uint8_t)127u)); + break; + case types::periodicity256: + HANDLE_CODE(pack_integer(bref, c.get<uint16_t>(), (uint16_t)1u, (uint16_t)257u)); + break; + case types::periodicity512: + HANDLE_CODE(pack_integer(bref, c.get<uint16_t>(), (uint16_t)1u, (uint16_t)511u)); + break; + case types::periodicity1024: + HANDLE_CODE(pack_integer(bref, c.get<uint16_t>(), (uint16_t)1u, (uint16_t)1023u)); + break; + case types::periodicity2048: + HANDLE_CODE(pack_integer(bref, c.get<uint16_t>(), (uint16_t)1u, (uint16_t)2047u)); + break; + case types::periodicity4096: + HANDLE_CODE(pack_integer(bref, c.get<uint16_t>(), (uint16_t)1u, (uint16_t)4095u)); + break; + case types::periodicity8192: + HANDLE_CODE(pack_integer(bref, c.get<uint16_t>(), (uint16_t)1u, (uint16_t)8191u)); + break; + default: + log_invalid_choice_id(type_, "pur_periodicity_and_offset_nb_r16_c"); + return SRSASN_ERROR_ENCODE_FAIL; + } + return SRSASN_SUCCESS; +} +SRSASN_CODE pur_periodicity_and_offset_nb_r16_c::unpack(cbit_ref& bref) +{ + types e; + e.unpack(bref); + set(e); + switch (type_) { + case types::periodicity8: + HANDLE_CODE(unpack_integer(c.get<uint8_t>(), bref, (uint8_t)1u, (uint8_t)7u)); + break; + case types::periodicity16: + HANDLE_CODE(unpack_integer(c.get<uint8_t>(), bref, (uint8_t)1u, (uint8_t)15u)); + break; + case types::periodicity32: + HANDLE_CODE(unpack_integer(c.get<uint8_t>(), bref, (uint8_t)1u, (uint8_t)31u)); + break; + case types::periodicity64: + HANDLE_CODE(unpack_integer(c.get<uint8_t>(), bref, (uint8_t)1u, (uint8_t)63u)); + break; + case types::periodicity128: + HANDLE_CODE(unpack_integer(c.get<uint8_t>(), bref, (uint8_t)1u, (uint8_t)127u)); + break; + case types::periodicity256: + HANDLE_CODE(unpack_integer(c.get<uint16_t>(), bref, (uint16_t)1u, (uint16_t)257u)); + break; + case types::periodicity512: + HANDLE_CODE(unpack_integer(c.get<uint16_t>(), bref, (uint16_t)1u, (uint16_t)511u)); + break; + case types::periodicity1024: + HANDLE_CODE(unpack_integer(c.get<uint16_t>(), bref, (uint16_t)1u, (uint16_t)1023u)); + break; + case types::periodicity2048: + HANDLE_CODE(unpack_integer(c.get<uint16_t>(), bref, (uint16_t)1u, (uint16_t)2047u)); + break; + case types::periodicity4096: + HANDLE_CODE(unpack_integer(c.get<uint16_t>(), bref, (uint16_t)1u, (uint16_t)4095u)); + break; + case types::periodicity8192: + HANDLE_CODE(unpack_integer(c.get<uint16_t>(), bref, (uint16_t)1u, (uint16_t)8191u)); + break; + default: + log_invalid_choice_id(type_, "pur_periodicity_and_offset_nb_r16_c"); + return SRSASN_ERROR_DECODE_FAIL; + } + return SRSASN_SUCCESS; +} + +const char* pur_periodicity_and_offset_nb_r16_c::types_opts::to_string() const +{ + static const char* options[] = {"periodicity8", + "periodicity16", + "periodicity32", + "periodicity64", + "periodicity128", + "periodicity256", + "periodicity512", + "periodicity1024", + "periodicity2048", + "periodicity4096", + "periodicity8192"}; + return convert_enum_idx(options, 11, value, "pur_periodicity_and_offset_nb_r16_c::types"); +} +uint16_t pur_periodicity_and_offset_nb_r16_c::types_opts::to_number() const +{ + static const uint16_t options[] = {8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192}; + return map_enum_number(options, 11, value, "pur_periodicity_and_offset_nb_r16_c::types"); +} + +// PUR-UL-16QAM-Config-NB-r17 ::= SEQUENCE +SRSASN_CODE pur_ul_minus16_qam_cfg_nb_r17_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(ul_pwr_ctrl_ded_r17.pack(bref)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE pur_ul_minus16_qam_cfg_nb_r17_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(ul_pwr_ctrl_ded_r17.unpack(bref)); + + return SRSASN_SUCCESS; +} +void pur_ul_minus16_qam_cfg_nb_r17_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_fieldname("uplinkPowerControlDedicated-r17"); + ul_pwr_ctrl_ded_r17.to_json(j); + j.end_obj(); +} + +// PUR-Config-NB-r16 ::= SEQUENCE +SRSASN_CODE pur_cfg_nb_r16_s::pack(bit_ref& bref) const +{ + bref.pack(ext, 1); + HANDLE_CODE(bref.pack(pur_cfg_id_r16_present, 1)); + HANDLE_CODE(bref.pack(pur_time_align_timer_r16_present, 1)); + HANDLE_CODE(bref.pack(pur_nrsrp_change_thres_r16_present, 1)); + HANDLE_CODE(bref.pack(pur_implicit_release_after_r16_present, 1)); + HANDLE_CODE(bref.pack(pur_rnti_r16_present, 1)); + HANDLE_CODE(bref.pack(pur_resp_win_timer_r16_present, 1)); + HANDLE_CODE(bref.pack(pur_start_time_params_r16_present, 1)); + HANDLE_CODE(bref.pack(pur_phys_cfg_r16_present, 1)); + + if (pur_cfg_id_r16_present) { + HANDLE_CODE(pur_cfg_id_r16.pack(bref)); + } + if (pur_time_align_timer_r16_present) { + HANDLE_CODE(pack_integer(bref, pur_time_align_timer_r16, (uint8_t)1u, (uint8_t)8u)); + } + if (pur_nrsrp_change_thres_r16_present) { + HANDLE_CODE(pur_nrsrp_change_thres_r16.pack(bref)); + } + if (pur_implicit_release_after_r16_present) { + HANDLE_CODE(pur_implicit_release_after_r16.pack(bref)); + } + if (pur_rnti_r16_present) { + HANDLE_CODE(pur_rnti_r16.pack(bref)); + } + if (pur_resp_win_timer_r16_present) { + HANDLE_CODE(pur_resp_win_timer_r16.pack(bref)); + } + if (pur_start_time_params_r16_present) { + HANDLE_CODE(pur_start_time_params_r16.periodicity_and_offset_r16.pack(bref)); + HANDLE_CODE(pack_integer(bref, pur_start_time_params_r16.start_sfn_r16, (uint16_t)0u, (uint16_t)1023u)); + HANDLE_CODE(pack_integer(bref, pur_start_time_params_r16.start_sf_r16, (uint8_t)0u, (uint8_t)9u)); + HANDLE_CODE(pur_start_time_params_r16.hsfn_lsb_info_r16.pack(bref)); + } + HANDLE_CODE(pur_num_occasions_r16.pack(bref)); + if (pur_phys_cfg_r16_present) { + HANDLE_CODE(pur_phys_cfg_r16.carrier_cfg_r16.pack(bref)); + HANDLE_CODE(pack_integer(bref, pur_phys_cfg_r16.npusch_num_rus_idx_r16, (uint8_t)0u, (uint8_t)7u)); + HANDLE_CODE(pack_integer(bref, pur_phys_cfg_r16.npusch_num_repeats_idx_r16, (uint8_t)0u, (uint8_t)7u)); + HANDLE_CODE(pur_phys_cfg_r16.npusch_sub_carrier_set_idx_r16.pack(bref)); + HANDLE_CODE(pur_phys_cfg_r16.npusch_mcs_r16.pack(bref)); + HANDLE_CODE(pack_integer(bref, pur_phys_cfg_r16.p0_ue_npusch_r16, (int8_t)-8, (int8_t)7)); + HANDLE_CODE(pur_phys_cfg_r16.alpha_r16.pack(bref)); + HANDLE_CODE(pur_phys_cfg_r16.npusch_cyclic_shift_r16.pack(bref)); + HANDLE_CODE(pur_phys_cfg_r16.npdcch_cfg_r16.pack(bref)); + } + + if (ext) { + ext_groups_packer_guard group_flags; + group_flags[0] |= pur_phys_cfg_v1650.is_present(); + group_flags[1] |= pur_phys_cfg_v1700.is_present(); + group_flags.pack(bref); + + if (group_flags[0]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(pur_phys_cfg_v1650.is_present(), 1)); + if (pur_phys_cfg_v1650.is_present()) { + HANDLE_CODE(pur_phys_cfg_v1650->ack_nack_num_repeats_r16.pack(bref)); + } + } + if (group_flags[1]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(pur_phys_cfg_v1700.is_present(), 1)); + if (pur_phys_cfg_v1700.is_present()) { + HANDLE_CODE(bref.pack(pur_phys_cfg_v1700->pur_ul_minus16_qam_cfg_r17_present, 1)); + HANDLE_CODE(bref.pack(pur_phys_cfg_v1700->pur_dl_minus16_qam_cfg_r17_present, 1)); + if (pur_phys_cfg_v1700->pur_ul_minus16_qam_cfg_r17_present) { + HANDLE_CODE(pur_phys_cfg_v1700->pur_ul_minus16_qam_cfg_r17.pack(bref)); + } + if (pur_phys_cfg_v1700->pur_dl_minus16_qam_cfg_r17_present) { + HANDLE_CODE(pur_phys_cfg_v1700->pur_dl_minus16_qam_cfg_r17.pack(bref)); + } + } + } + } + return SRSASN_SUCCESS; +} +SRSASN_CODE pur_cfg_nb_r16_s::unpack(cbit_ref& bref) +{ + bref.unpack(ext, 1); + HANDLE_CODE(bref.unpack(pur_cfg_id_r16_present, 1)); + HANDLE_CODE(bref.unpack(pur_time_align_timer_r16_present, 1)); + HANDLE_CODE(bref.unpack(pur_nrsrp_change_thres_r16_present, 1)); + HANDLE_CODE(bref.unpack(pur_implicit_release_after_r16_present, 1)); + HANDLE_CODE(bref.unpack(pur_rnti_r16_present, 1)); + HANDLE_CODE(bref.unpack(pur_resp_win_timer_r16_present, 1)); + HANDLE_CODE(bref.unpack(pur_start_time_params_r16_present, 1)); + HANDLE_CODE(bref.unpack(pur_phys_cfg_r16_present, 1)); + + if (pur_cfg_id_r16_present) { + HANDLE_CODE(pur_cfg_id_r16.unpack(bref)); + } + if (pur_time_align_timer_r16_present) { + HANDLE_CODE(unpack_integer(pur_time_align_timer_r16, bref, (uint8_t)1u, (uint8_t)8u)); + } + if (pur_nrsrp_change_thres_r16_present) { + HANDLE_CODE(pur_nrsrp_change_thres_r16.unpack(bref)); + } + if (pur_implicit_release_after_r16_present) { + HANDLE_CODE(pur_implicit_release_after_r16.unpack(bref)); + } + if (pur_rnti_r16_present) { + HANDLE_CODE(pur_rnti_r16.unpack(bref)); + } + if (pur_resp_win_timer_r16_present) { + HANDLE_CODE(pur_resp_win_timer_r16.unpack(bref)); + } + if (pur_start_time_params_r16_present) { + HANDLE_CODE(pur_start_time_params_r16.periodicity_and_offset_r16.unpack(bref)); + HANDLE_CODE(unpack_integer(pur_start_time_params_r16.start_sfn_r16, bref, (uint16_t)0u, (uint16_t)1023u)); + HANDLE_CODE(unpack_integer(pur_start_time_params_r16.start_sf_r16, bref, (uint8_t)0u, (uint8_t)9u)); + HANDLE_CODE(pur_start_time_params_r16.hsfn_lsb_info_r16.unpack(bref)); + } + HANDLE_CODE(pur_num_occasions_r16.unpack(bref)); + if (pur_phys_cfg_r16_present) { + HANDLE_CODE(pur_phys_cfg_r16.carrier_cfg_r16.unpack(bref)); + HANDLE_CODE(unpack_integer(pur_phys_cfg_r16.npusch_num_rus_idx_r16, bref, (uint8_t)0u, (uint8_t)7u)); + HANDLE_CODE(unpack_integer(pur_phys_cfg_r16.npusch_num_repeats_idx_r16, bref, (uint8_t)0u, (uint8_t)7u)); + HANDLE_CODE(pur_phys_cfg_r16.npusch_sub_carrier_set_idx_r16.unpack(bref)); + HANDLE_CODE(pur_phys_cfg_r16.npusch_mcs_r16.unpack(bref)); + HANDLE_CODE(unpack_integer(pur_phys_cfg_r16.p0_ue_npusch_r16, bref, (int8_t)-8, (int8_t)7)); + HANDLE_CODE(pur_phys_cfg_r16.alpha_r16.unpack(bref)); + HANDLE_CODE(pur_phys_cfg_r16.npusch_cyclic_shift_r16.unpack(bref)); + HANDLE_CODE(pur_phys_cfg_r16.npdcch_cfg_r16.unpack(bref)); + } + + if (ext) { + ext_groups_unpacker_guard group_flags(2); + group_flags.unpack(bref); + + if (group_flags[0]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + bool pur_phys_cfg_v1650_present; + HANDLE_CODE(bref.unpack(pur_phys_cfg_v1650_present, 1)); + pur_phys_cfg_v1650.set_present(pur_phys_cfg_v1650_present); + if (pur_phys_cfg_v1650.is_present()) { + HANDLE_CODE(pur_phys_cfg_v1650->ack_nack_num_repeats_r16.unpack(bref)); + } + } + if (group_flags[1]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + bool pur_phys_cfg_v1700_present; + HANDLE_CODE(bref.unpack(pur_phys_cfg_v1700_present, 1)); + pur_phys_cfg_v1700.set_present(pur_phys_cfg_v1700_present); + if (pur_phys_cfg_v1700.is_present()) { + HANDLE_CODE(bref.unpack(pur_phys_cfg_v1700->pur_ul_minus16_qam_cfg_r17_present, 1)); + HANDLE_CODE(bref.unpack(pur_phys_cfg_v1700->pur_dl_minus16_qam_cfg_r17_present, 1)); + if (pur_phys_cfg_v1700->pur_ul_minus16_qam_cfg_r17_present) { + HANDLE_CODE(pur_phys_cfg_v1700->pur_ul_minus16_qam_cfg_r17.unpack(bref)); + } + if (pur_phys_cfg_v1700->pur_dl_minus16_qam_cfg_r17_present) { + HANDLE_CODE(pur_phys_cfg_v1700->pur_dl_minus16_qam_cfg_r17.unpack(bref)); + } + } + } + } + return SRSASN_SUCCESS; +} +void pur_cfg_nb_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (pur_cfg_id_r16_present) { + j.write_str("pur-ConfigID-r16", pur_cfg_id_r16.to_string()); + } + if (pur_time_align_timer_r16_present) { + j.write_int("pur-TimeAlignmentTimer-r16", pur_time_align_timer_r16); + } + if (pur_nrsrp_change_thres_r16_present) { + j.write_fieldname("pur-NRSRP-ChangeThreshold-r16"); + pur_nrsrp_change_thres_r16.to_json(j); + } + if (pur_implicit_release_after_r16_present) { + j.write_str("pur-ImplicitReleaseAfter-r16", pur_implicit_release_after_r16.to_string()); + } + if (pur_rnti_r16_present) { + j.write_str("pur-RNTI-r16", pur_rnti_r16.to_string()); + } + if (pur_resp_win_timer_r16_present) { + j.write_str("pur-ResponseWindowTimer-r16", pur_resp_win_timer_r16.to_string()); + } + if (pur_start_time_params_r16_present) { + j.write_fieldname("pur-StartTimeParameters-r16"); + j.start_obj(); + j.write_fieldname("periodicityAndOffset-r16"); + pur_start_time_params_r16.periodicity_and_offset_r16.to_json(j); + j.write_int("startSFN-r16", pur_start_time_params_r16.start_sfn_r16); + j.write_int("startSubframe-r16", pur_start_time_params_r16.start_sf_r16); + j.write_str("hsfn-LSB-Info-r16", pur_start_time_params_r16.hsfn_lsb_info_r16.to_string()); + j.end_obj(); + } + j.write_str("pur-NumOccasions-r16", pur_num_occasions_r16.to_string()); + if (pur_phys_cfg_r16_present) { + j.write_fieldname("pur-PhysicalConfig-r16"); + j.start_obj(); + j.write_fieldname("carrierConfig-r16"); + pur_phys_cfg_r16.carrier_cfg_r16.to_json(j); + j.write_int("npusch-NumRUsIndex-r16", pur_phys_cfg_r16.npusch_num_rus_idx_r16); + j.write_int("npusch-NumRepetitionsIndex-r16", pur_phys_cfg_r16.npusch_num_repeats_idx_r16); + j.write_fieldname("npusch-SubCarrierSetIndex-r16"); + pur_phys_cfg_r16.npusch_sub_carrier_set_idx_r16.to_json(j); + j.write_fieldname("npusch-MCS-r16"); + pur_phys_cfg_r16.npusch_mcs_r16.to_json(j); + j.write_int("p0-UE-NPUSCH-r16", pur_phys_cfg_r16.p0_ue_npusch_r16); + j.write_str("alpha-r16", pur_phys_cfg_r16.alpha_r16.to_string()); + j.write_str("npusch-CyclicShift-r16", pur_phys_cfg_r16.npusch_cyclic_shift_r16.to_string()); + j.write_fieldname("npdcch-Config-r16"); + pur_phys_cfg_r16.npdcch_cfg_r16.to_json(j); + j.end_obj(); + } + if (ext) { + if (pur_phys_cfg_v1650.is_present()) { + j.write_fieldname("pur-PhysicalConfig-v1650"); + j.start_obj(); + j.write_str("ack-NACK-NumRepetitions-r16", pur_phys_cfg_v1650->ack_nack_num_repeats_r16.to_string()); + j.end_obj(); + } + if (pur_phys_cfg_v1700.is_present()) { + j.write_fieldname("pur-PhysicalConfig-v1700"); + j.start_obj(); + if (pur_phys_cfg_v1700->pur_ul_minus16_qam_cfg_r17_present) { + j.write_fieldname("pur-UL-16QAM-Config-r17"); + pur_phys_cfg_v1700->pur_ul_minus16_qam_cfg_r17.to_json(j); + } + if (pur_phys_cfg_v1700->pur_dl_minus16_qam_cfg_r17_present) { + j.write_fieldname("pur-DL-16QAM-Config-r17"); + pur_phys_cfg_v1700->pur_dl_minus16_qam_cfg_r17.to_json(j); + } + j.end_obj(); + } + } + j.end_obj(); +} + +const char* pur_cfg_nb_r16_s::pur_implicit_release_after_r16_opts::to_string() const +{ + static const char* options[] = {"n2", "n4", "n8", "spare"}; + return convert_enum_idx(options, 4, value, "pur_cfg_nb_r16_s::pur_implicit_release_after_r16_e_"); +} +uint8_t pur_cfg_nb_r16_s::pur_implicit_release_after_r16_opts::to_number() const +{ + static const uint8_t options[] = {2, 4, 8}; + return map_enum_number(options, 3, value, "pur_cfg_nb_r16_s::pur_implicit_release_after_r16_e_"); +} + +const char* pur_cfg_nb_r16_s::pur_resp_win_timer_r16_opts::to_string() const +{ + static const char* options[] = {"pp1", "pp2", "pp3", "pp4", "pp8", "pp16", "pp32", "pp64"}; + return convert_enum_idx(options, 8, value, "pur_cfg_nb_r16_s::pur_resp_win_timer_r16_e_"); +} +uint8_t pur_cfg_nb_r16_s::pur_resp_win_timer_r16_opts::to_number() const +{ + static const uint8_t options[] = {1, 2, 3, 4, 8, 16, 32, 64}; + return map_enum_number(options, 8, value, "pur_cfg_nb_r16_s::pur_resp_win_timer_r16_e_"); +} + +const char* pur_cfg_nb_r16_s::pur_num_occasions_r16_opts::to_string() const +{ + static const char* options[] = {"one", "infinite"}; + return convert_enum_idx(options, 2, value, "pur_cfg_nb_r16_s::pur_num_occasions_r16_e_"); +} +uint8_t pur_cfg_nb_r16_s::pur_num_occasions_r16_opts::to_number() const +{ + static const uint8_t options[] = {1}; + return map_enum_number(options, 1, value, "pur_cfg_nb_r16_s::pur_num_occasions_r16_e_"); +} + +void pur_cfg_nb_r16_s::pur_phys_cfg_r16_s_::npusch_sub_carrier_set_idx_r16_c_::destroy_() {} +void pur_cfg_nb_r16_s::pur_phys_cfg_r16_s_::npusch_sub_carrier_set_idx_r16_c_::set(types::options e) +{ + destroy_(); + type_ = e; +} +pur_cfg_nb_r16_s::pur_phys_cfg_r16_s_::npusch_sub_carrier_set_idx_r16_c_::npusch_sub_carrier_set_idx_r16_c_( + const pur_cfg_nb_r16_s::pur_phys_cfg_r16_s_::npusch_sub_carrier_set_idx_r16_c_& other) +{ + type_ = other.type(); + switch (type_) { + case types::khz15: + c.init(other.c.get<uint8_t>()); + break; + case types::khz3dot75: + c.init(other.c.get<uint8_t>()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "pur_cfg_nb_r16_s::pur_phys_cfg_r16_s_::npusch_sub_carrier_set_idx_r16_c_"); + } +} +pur_cfg_nb_r16_s::pur_phys_cfg_r16_s_::npusch_sub_carrier_set_idx_r16_c_& +pur_cfg_nb_r16_s::pur_phys_cfg_r16_s_::npusch_sub_carrier_set_idx_r16_c_::operator=( + const pur_cfg_nb_r16_s::pur_phys_cfg_r16_s_::npusch_sub_carrier_set_idx_r16_c_& other) +{ + if (this == &other) { + return *this; + } + set(other.type()); + switch (type_) { + case types::khz15: + c.set(other.c.get<uint8_t>()); + break; + case types::khz3dot75: + c.set(other.c.get<uint8_t>()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "pur_cfg_nb_r16_s::pur_phys_cfg_r16_s_::npusch_sub_carrier_set_idx_r16_c_"); + } + + return *this; +} +uint8_t& pur_cfg_nb_r16_s::pur_phys_cfg_r16_s_::npusch_sub_carrier_set_idx_r16_c_::set_khz15() +{ + set(types::khz15); + return c.get<uint8_t>(); +} +uint8_t& pur_cfg_nb_r16_s::pur_phys_cfg_r16_s_::npusch_sub_carrier_set_idx_r16_c_::set_khz3dot75() +{ + set(types::khz3dot75); + return c.get<uint8_t>(); +} +void pur_cfg_nb_r16_s::pur_phys_cfg_r16_s_::npusch_sub_carrier_set_idx_r16_c_::to_json(json_writer& j) const +{ + j.start_obj(); + switch (type_) { + case types::khz15: + j.write_int("khz15", c.get<uint8_t>()); + break; + case types::khz3dot75: + j.write_int("khz3dot75", c.get<uint8_t>()); + break; + default: + log_invalid_choice_id(type_, "pur_cfg_nb_r16_s::pur_phys_cfg_r16_s_::npusch_sub_carrier_set_idx_r16_c_"); + } + j.end_obj(); +} +SRSASN_CODE pur_cfg_nb_r16_s::pur_phys_cfg_r16_s_::npusch_sub_carrier_set_idx_r16_c_::pack(bit_ref& bref) const +{ + type_.pack(bref); + switch (type_) { + case types::khz15: + HANDLE_CODE(pack_integer(bref, c.get<uint8_t>(), (uint8_t)0u, (uint8_t)18u)); + break; + case types::khz3dot75: + HANDLE_CODE(pack_integer(bref, c.get<uint8_t>(), (uint8_t)0u, (uint8_t)47u)); + break; + default: + log_invalid_choice_id(type_, "pur_cfg_nb_r16_s::pur_phys_cfg_r16_s_::npusch_sub_carrier_set_idx_r16_c_"); + return SRSASN_ERROR_ENCODE_FAIL; + } + return SRSASN_SUCCESS; +} +SRSASN_CODE pur_cfg_nb_r16_s::pur_phys_cfg_r16_s_::npusch_sub_carrier_set_idx_r16_c_::unpack(cbit_ref& bref) +{ + types e; + e.unpack(bref); + set(e); + switch (type_) { + case types::khz15: + HANDLE_CODE(unpack_integer(c.get<uint8_t>(), bref, (uint8_t)0u, (uint8_t)18u)); + break; + case types::khz3dot75: + HANDLE_CODE(unpack_integer(c.get<uint8_t>(), bref, (uint8_t)0u, (uint8_t)47u)); + break; + default: + log_invalid_choice_id(type_, "pur_cfg_nb_r16_s::pur_phys_cfg_r16_s_::npusch_sub_carrier_set_idx_r16_c_"); + return SRSASN_ERROR_DECODE_FAIL; + } + return SRSASN_SUCCESS; +} + +const char* pur_cfg_nb_r16_s::pur_phys_cfg_r16_s_::npusch_sub_carrier_set_idx_r16_c_::types_opts::to_string() const +{ + static const char* options[] = {"khz15", "khz3dot75"}; + return convert_enum_idx( + options, 2, value, "pur_cfg_nb_r16_s::pur_phys_cfg_r16_s_::npusch_sub_carrier_set_idx_r16_c_::types"); +} +float pur_cfg_nb_r16_s::pur_phys_cfg_r16_s_::npusch_sub_carrier_set_idx_r16_c_::types_opts::to_number() const +{ + static const float options[] = {15.0, 3.75}; + return map_enum_number( + options, 2, value, "pur_cfg_nb_r16_s::pur_phys_cfg_r16_s_::npusch_sub_carrier_set_idx_r16_c_::types"); +} +const char* +pur_cfg_nb_r16_s::pur_phys_cfg_r16_s_::npusch_sub_carrier_set_idx_r16_c_::types_opts::to_number_string() const +{ + static const char* options[] = {"15", "3.75"}; + return convert_enum_idx( + options, 2, value, "pur_cfg_nb_r16_s::pur_phys_cfg_r16_s_::npusch_sub_carrier_set_idx_r16_c_::types"); +} + +void pur_cfg_nb_r16_s::pur_phys_cfg_r16_s_::npusch_mcs_r16_c_::destroy_() {} +void pur_cfg_nb_r16_s::pur_phys_cfg_r16_s_::npusch_mcs_r16_c_::set(types::options e) +{ + destroy_(); + type_ = e; +} +pur_cfg_nb_r16_s::pur_phys_cfg_r16_s_::npusch_mcs_r16_c_::npusch_mcs_r16_c_( + const pur_cfg_nb_r16_s::pur_phys_cfg_r16_s_::npusch_mcs_r16_c_& other) +{ + type_ = other.type(); + switch (type_) { + case types::single_tone: + c.init(other.c.get<uint8_t>()); + break; + case types::multi_tone: + c.init(other.c.get<uint8_t>()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "pur_cfg_nb_r16_s::pur_phys_cfg_r16_s_::npusch_mcs_r16_c_"); + } +} +pur_cfg_nb_r16_s::pur_phys_cfg_r16_s_::npusch_mcs_r16_c_& +pur_cfg_nb_r16_s::pur_phys_cfg_r16_s_::npusch_mcs_r16_c_::operator=( + const pur_cfg_nb_r16_s::pur_phys_cfg_r16_s_::npusch_mcs_r16_c_& other) +{ + if (this == &other) { + return *this; + } + set(other.type()); + switch (type_) { + case types::single_tone: + c.set(other.c.get<uint8_t>()); + break; + case types::multi_tone: + c.set(other.c.get<uint8_t>()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "pur_cfg_nb_r16_s::pur_phys_cfg_r16_s_::npusch_mcs_r16_c_"); + } + + return *this; +} +uint8_t& pur_cfg_nb_r16_s::pur_phys_cfg_r16_s_::npusch_mcs_r16_c_::set_single_tone() +{ + set(types::single_tone); + return c.get<uint8_t>(); +} +uint8_t& pur_cfg_nb_r16_s::pur_phys_cfg_r16_s_::npusch_mcs_r16_c_::set_multi_tone() +{ + set(types::multi_tone); + return c.get<uint8_t>(); +} +void pur_cfg_nb_r16_s::pur_phys_cfg_r16_s_::npusch_mcs_r16_c_::to_json(json_writer& j) const +{ + j.start_obj(); + switch (type_) { + case types::single_tone: + j.write_int("singleTone", c.get<uint8_t>()); + break; + case types::multi_tone: + j.write_int("multiTone", c.get<uint8_t>()); + break; + default: + log_invalid_choice_id(type_, "pur_cfg_nb_r16_s::pur_phys_cfg_r16_s_::npusch_mcs_r16_c_"); + } + j.end_obj(); +} +SRSASN_CODE pur_cfg_nb_r16_s::pur_phys_cfg_r16_s_::npusch_mcs_r16_c_::pack(bit_ref& bref) const +{ + type_.pack(bref); + switch (type_) { + case types::single_tone: + HANDLE_CODE(pack_integer(bref, c.get<uint8_t>(), (uint8_t)0u, (uint8_t)10u)); + break; + case types::multi_tone: + HANDLE_CODE(pack_integer(bref, c.get<uint8_t>(), (uint8_t)0u, (uint8_t)13u)); + break; + default: + log_invalid_choice_id(type_, "pur_cfg_nb_r16_s::pur_phys_cfg_r16_s_::npusch_mcs_r16_c_"); + return SRSASN_ERROR_ENCODE_FAIL; + } + return SRSASN_SUCCESS; +} +SRSASN_CODE pur_cfg_nb_r16_s::pur_phys_cfg_r16_s_::npusch_mcs_r16_c_::unpack(cbit_ref& bref) +{ + types e; + e.unpack(bref); + set(e); + switch (type_) { + case types::single_tone: + HANDLE_CODE(unpack_integer(c.get<uint8_t>(), bref, (uint8_t)0u, (uint8_t)10u)); + break; + case types::multi_tone: + HANDLE_CODE(unpack_integer(c.get<uint8_t>(), bref, (uint8_t)0u, (uint8_t)13u)); + break; + default: + log_invalid_choice_id(type_, "pur_cfg_nb_r16_s::pur_phys_cfg_r16_s_::npusch_mcs_r16_c_"); + return SRSASN_ERROR_DECODE_FAIL; + } + return SRSASN_SUCCESS; +} + +const char* pur_cfg_nb_r16_s::pur_phys_cfg_r16_s_::npusch_mcs_r16_c_::types_opts::to_string() const +{ + static const char* options[] = {"singleTone", "multiTone"}; + return convert_enum_idx(options, 2, value, "pur_cfg_nb_r16_s::pur_phys_cfg_r16_s_::npusch_mcs_r16_c_::types"); +} + +const char* pur_cfg_nb_r16_s::pur_phys_cfg_r16_s_::alpha_r16_opts::to_string() const +{ + static const char* options[] = {"al0", "al04", "al05", "al06", "al07", "al08", "al09", "al1"}; + return convert_enum_idx(options, 8, value, "pur_cfg_nb_r16_s::pur_phys_cfg_r16_s_::alpha_r16_e_"); +} +float pur_cfg_nb_r16_s::pur_phys_cfg_r16_s_::alpha_r16_opts::to_number() const +{ + static const float options[] = {0.0, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0}; + return map_enum_number(options, 8, value, "pur_cfg_nb_r16_s::pur_phys_cfg_r16_s_::alpha_r16_e_"); +} +const char* pur_cfg_nb_r16_s::pur_phys_cfg_r16_s_::alpha_r16_opts::to_number_string() const +{ + static const char* options[] = {"0", "0.4", "0.5", "0.6", "0.7", "0.8", "0.9", "1"}; + return convert_enum_idx(options, 8, value, "pur_cfg_nb_r16_s::pur_phys_cfg_r16_s_::alpha_r16_e_"); +} + +const char* pur_cfg_nb_r16_s::pur_phys_cfg_r16_s_::npusch_cyclic_shift_r16_opts::to_string() const +{ + static const char* options[] = {"n0", "n6"}; + return convert_enum_idx(options, 2, value, "pur_cfg_nb_r16_s::pur_phys_cfg_r16_s_::npusch_cyclic_shift_r16_e_"); +} +uint8_t pur_cfg_nb_r16_s::pur_phys_cfg_r16_s_::npusch_cyclic_shift_r16_opts::to_number() const +{ + static const uint8_t options[] = {0, 6}; + return map_enum_number(options, 2, value, "pur_cfg_nb_r16_s::pur_phys_cfg_r16_s_::npusch_cyclic_shift_r16_e_"); +} + +// RRCConnectionRelease-NB-v1700-IEs ::= SEQUENCE +SRSASN_CODE rrc_conn_release_nb_v1700_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(cbp_idx_r17_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + if (cbp_idx_r17_present) { + HANDLE_CODE(pack_integer(bref, cbp_idx_r17, (uint8_t)1u, (uint8_t)2u)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE rrc_conn_release_nb_v1700_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(cbp_idx_r17_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + if (cbp_idx_r17_present) { + HANDLE_CODE(unpack_integer(cbp_idx_r17, bref, (uint8_t)1u, (uint8_t)2u)); + } + + return SRSASN_SUCCESS; +} +void rrc_conn_release_nb_v1700_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (cbp_idx_r17_present) { + j.write_int("cbp-Index-r17", cbp_idx_r17); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + j.start_obj(); + j.end_obj(); + } + j.end_obj(); +} + +// RRCConnectionRelease-NB-v1610-IEs ::= SEQUENCE +SRSASN_CODE rrc_conn_release_nb_v1610_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(resume_id_r16_present, 1)); + HANDLE_CODE(bref.pack(anr_meas_cfg_r16_present, 1)); + HANDLE_CODE(bref.pack(pur_cfg_r16_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + if (resume_id_r16_present) { + HANDLE_CODE(resume_id_r16.pack(bref)); + } + if (anr_meas_cfg_r16_present) { + HANDLE_CODE(anr_meas_cfg_r16.pack(bref)); + } + if (pur_cfg_r16_present) { + HANDLE_CODE(pur_cfg_r16.pack(bref)); + } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE rrc_conn_release_nb_v1610_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(resume_id_r16_present, 1)); + HANDLE_CODE(bref.unpack(anr_meas_cfg_r16_present, 1)); + HANDLE_CODE(bref.unpack(pur_cfg_r16_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + if (resume_id_r16_present) { + HANDLE_CODE(resume_id_r16.unpack(bref)); + } + if (anr_meas_cfg_r16_present) { + HANDLE_CODE(anr_meas_cfg_r16.unpack(bref)); + } + if (pur_cfg_r16_present) { + HANDLE_CODE(pur_cfg_r16.unpack(bref)); + } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void rrc_conn_release_nb_v1610_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (resume_id_r16_present) { + j.write_str("resumeIdentity-r16", resume_id_r16.to_string()); + } + if (anr_meas_cfg_r16_present) { + j.write_fieldname("anr-MeasConfig-r16"); + anr_meas_cfg_r16.to_json(j); + } + if (pur_cfg_r16_present) { + j.write_fieldname("pur-Config-r16"); + pur_cfg_r16.to_json(j); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + non_crit_ext.to_json(j); + } + j.end_obj(); +} + // RRCConnectionRelease-NB-v15b0-IEs ::= SEQUENCE SRSASN_CODE rrc_conn_release_nb_v15b0_ies_s::pack(bit_ref& bref) const { HANDLE_CODE(bref.pack(no_last_cell_upd_r15_present, 1)); HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } + return SRSASN_SUCCESS; } SRSASN_CODE rrc_conn_release_nb_v15b0_ies_s::unpack(cbit_ref& bref) @@ -13638,6 +18222,10 @@ SRSASN_CODE rrc_conn_release_nb_v15b0_ies_s::unpack(cbit_ref& bref) HANDLE_CODE(bref.unpack(no_last_cell_upd_r15_present, 1)); HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } + return SRSASN_SUCCESS; } void rrc_conn_release_nb_v15b0_ies_s::to_json(json_writer& j) const @@ -13648,8 +18236,7 @@ void rrc_conn_release_nb_v15b0_ies_s::to_json(json_writer& j) const } if (non_crit_ext_present) { j.write_fieldname("nonCriticalExtension"); - j.start_obj(); - j.end_obj(); + non_crit_ext.to_json(j); } j.end_obj(); } @@ -13798,6 +18385,35 @@ void rrc_conn_release_nb_v1430_ies_s::to_json(json_writer& j) const j.end_obj(); } +// RRCConnectionResume-NB-v1610-IEs ::= SEQUENCE +SRSASN_CODE rrc_conn_resume_nb_v1610_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(full_cfg_r16_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE rrc_conn_resume_nb_v1610_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(full_cfg_r16_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + return SRSASN_SUCCESS; +} +void rrc_conn_resume_nb_v1610_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (full_cfg_r16_present) { + j.write_str("fullConfig-r16", "true"); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + j.start_obj(); + j.end_obj(); + } + j.end_obj(); +} + // ReleaseCause-NB-r13 ::= ENUMERATED const char* release_cause_nb_r13_opts::to_string() const { @@ -14008,6 +18624,9 @@ SRSASN_CODE rrc_conn_resume_nb_r13_ies_s::pack(bit_ref& bref) const if (late_non_crit_ext_present) { HANDLE_CODE(late_non_crit_ext.pack(bref)); } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } return SRSASN_SUCCESS; } @@ -14025,6 +18644,9 @@ SRSASN_CODE rrc_conn_resume_nb_r13_ies_s::unpack(cbit_ref& bref) if (late_non_crit_ext_present) { HANDLE_CODE(late_non_crit_ext.unpack(bref)); } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } return SRSASN_SUCCESS; } @@ -14044,8 +18666,7 @@ void rrc_conn_resume_nb_r13_ies_s::to_json(json_writer& j) const } if (non_crit_ext_present) { j.write_fieldname("nonCriticalExtension"); - j.start_obj(); - j.end_obj(); + non_crit_ext.to_json(j); } j.end_obj(); } @@ -14087,6 +18708,52 @@ void ue_cap_enquiry_nb_r13_ies_s::to_json(json_writer& j) const j.end_obj(); } +// UEInformationRequest-NB-r16-IEs ::= SEQUENCE +SRSASN_CODE ue_info_request_nb_r16_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(late_non_crit_ext_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + HANDLE_CODE(bref.pack(rach_report_req_r16, 1)); + HANDLE_CODE(bref.pack(rlf_report_req_r16, 1)); + HANDLE_CODE(bref.pack(anr_report_req_r16, 1)); + if (late_non_crit_ext_present) { + HANDLE_CODE(late_non_crit_ext.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE ue_info_request_nb_r16_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(late_non_crit_ext_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + HANDLE_CODE(bref.unpack(rach_report_req_r16, 1)); + HANDLE_CODE(bref.unpack(rlf_report_req_r16, 1)); + HANDLE_CODE(bref.unpack(anr_report_req_r16, 1)); + if (late_non_crit_ext_present) { + HANDLE_CODE(late_non_crit_ext.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void ue_info_request_nb_r16_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_bool("rach-ReportReq-r16", rach_report_req_r16); + j.write_bool("rlf-ReportReq-r16", rlf_report_req_r16); + j.write_bool("anr-ReportReq-r16", anr_report_req_r16); + if (late_non_crit_ext_present) { + j.write_str("lateNonCriticalExtension", late_non_crit_ext.to_string()); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + j.start_obj(); + j.end_obj(); + } + j.end_obj(); +} + // DLInformationTransfer-NB ::= SEQUENCE SRSASN_CODE dl_info_transfer_nb_s::pack(bit_ref& bref) const { @@ -14847,6 +19514,97 @@ const char* ue_cap_enquiry_nb_s::crit_exts_c_::c1_c_::types_opts::to_string() co return convert_enum_idx(options, 2, value, "ue_cap_enquiry_nb_s::crit_exts_c_::c1_c_::types"); } +// UEInformationRequest-NB-r16 ::= SEQUENCE +SRSASN_CODE ue_info_request_nb_r16_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(pack_integer(bref, rrc_transaction_id, (uint8_t)0u, (uint8_t)3u)); + HANDLE_CODE(crit_exts.pack(bref)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE ue_info_request_nb_r16_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(unpack_integer(rrc_transaction_id, bref, (uint8_t)0u, (uint8_t)3u)); + HANDLE_CODE(crit_exts.unpack(bref)); + + return SRSASN_SUCCESS; +} +void ue_info_request_nb_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_int("rrc-TransactionIdentifier", rrc_transaction_id); + j.write_fieldname("criticalExtensions"); + crit_exts.to_json(j); + j.end_obj(); +} + +void ue_info_request_nb_r16_s::crit_exts_c_::set(types::options e) +{ + type_ = e; +} +ue_info_request_nb_r16_ies_s& ue_info_request_nb_r16_s::crit_exts_c_::set_ue_info_request_r16() +{ + set(types::ue_info_request_r16); + return c; +} +void ue_info_request_nb_r16_s::crit_exts_c_::set_crit_exts_future() +{ + set(types::crit_exts_future); +} +void ue_info_request_nb_r16_s::crit_exts_c_::to_json(json_writer& j) const +{ + j.start_obj(); + switch (type_) { + case types::ue_info_request_r16: + j.write_fieldname("ueInformationRequest-r16"); + c.to_json(j); + break; + case types::crit_exts_future: + break; + default: + log_invalid_choice_id(type_, "ue_info_request_nb_r16_s::crit_exts_c_"); + } + j.end_obj(); +} +SRSASN_CODE ue_info_request_nb_r16_s::crit_exts_c_::pack(bit_ref& bref) const +{ + type_.pack(bref); + switch (type_) { + case types::ue_info_request_r16: + HANDLE_CODE(c.pack(bref)); + break; + case types::crit_exts_future: + break; + default: + log_invalid_choice_id(type_, "ue_info_request_nb_r16_s::crit_exts_c_"); + return SRSASN_ERROR_ENCODE_FAIL; + } + return SRSASN_SUCCESS; +} +SRSASN_CODE ue_info_request_nb_r16_s::crit_exts_c_::unpack(cbit_ref& bref) +{ + types e; + e.unpack(bref); + set(e); + switch (type_) { + case types::ue_info_request_r16: + HANDLE_CODE(c.unpack(bref)); + break; + case types::crit_exts_future: + break; + default: + log_invalid_choice_id(type_, "ue_info_request_nb_r16_s::crit_exts_c_"); + return SRSASN_ERROR_DECODE_FAIL; + } + return SRSASN_SUCCESS; +} + +const char* ue_info_request_nb_r16_s::crit_exts_c_::types_opts::to_string() const +{ + static const char* options[] = {"ueInformationRequest-r16", "criticalExtensionsFuture"}; + return convert_enum_idx(options, 2, value, "ue_info_request_nb_r16_s::crit_exts_c_::types"); +} + // DL-DCCH-MessageType-NB ::= CHOICE void dl_dcch_msg_type_nb_c::set(types::options e) { @@ -14930,6 +19688,9 @@ void dl_dcch_msg_type_nb_c::c1_c_::destroy_() case types::rrc_conn_resume_r13: c.destroy<rrc_conn_resume_nb_s>(); break; + case types::ue_info_request_r16: + c.destroy<ue_info_request_nb_r16_s>(); + break; default: break; } @@ -14957,7 +19718,8 @@ void dl_dcch_msg_type_nb_c::c1_c_::set(types::options e) case types::rrc_conn_resume_r13: c.init<rrc_conn_resume_nb_s>(); break; - case types::spare2: + case types::ue_info_request_r16: + c.init<ue_info_request_nb_r16_s>(); break; case types::spare1: break; @@ -14989,7 +19751,8 @@ dl_dcch_msg_type_nb_c::c1_c_::c1_c_(const dl_dcch_msg_type_nb_c::c1_c_& other) case types::rrc_conn_resume_r13: c.init(other.c.get<rrc_conn_resume_nb_s>()); break; - case types::spare2: + case types::ue_info_request_r16: + c.init(other.c.get<ue_info_request_nb_r16_s>()); break; case types::spare1: break; @@ -15024,7 +19787,8 @@ dl_dcch_msg_type_nb_c::c1_c_& dl_dcch_msg_type_nb_c::c1_c_::operator=(const dl_d case types::rrc_conn_resume_r13: c.set(other.c.get<rrc_conn_resume_nb_s>()); break; - case types::spare2: + case types::ue_info_request_r16: + c.set(other.c.get<ue_info_request_nb_r16_s>()); break; case types::spare1: break; @@ -15066,9 +19830,10 @@ rrc_conn_resume_nb_s& dl_dcch_msg_type_nb_c::c1_c_::set_rrc_conn_resume_r13() set(types::rrc_conn_resume_r13); return c.get<rrc_conn_resume_nb_s>(); } -void dl_dcch_msg_type_nb_c::c1_c_::set_spare2() +ue_info_request_nb_r16_s& dl_dcch_msg_type_nb_c::c1_c_::set_ue_info_request_r16() { - set(types::spare2); + set(types::ue_info_request_r16); + return c.get<ue_info_request_nb_r16_s>(); } void dl_dcch_msg_type_nb_c::c1_c_::set_spare1() { @@ -15102,7 +19867,9 @@ void dl_dcch_msg_type_nb_c::c1_c_::to_json(json_writer& j) const j.write_fieldname("rrcConnectionResume-r13"); c.get<rrc_conn_resume_nb_s>().to_json(j); break; - case types::spare2: + case types::ue_info_request_r16: + j.write_fieldname("ueInformationRequest-r16"); + c.get<ue_info_request_nb_r16_s>().to_json(j); break; case types::spare1: break; @@ -15133,7 +19900,8 @@ SRSASN_CODE dl_dcch_msg_type_nb_c::c1_c_::pack(bit_ref& bref) const case types::rrc_conn_resume_r13: HANDLE_CODE(c.get<rrc_conn_resume_nb_s>().pack(bref)); break; - case types::spare2: + case types::ue_info_request_r16: + HANDLE_CODE(c.get<ue_info_request_nb_r16_s>().pack(bref)); break; case types::spare1: break; @@ -15167,7 +19935,8 @@ SRSASN_CODE dl_dcch_msg_type_nb_c::c1_c_::unpack(cbit_ref& bref) case types::rrc_conn_resume_r13: HANDLE_CODE(c.get<rrc_conn_resume_nb_s>().unpack(bref)); break; - case types::spare2: + case types::ue_info_request_r16: + HANDLE_CODE(c.get<ue_info_request_nb_r16_s>().unpack(bref)); break; case types::spare1: break; @@ -15186,7 +19955,7 @@ const char* dl_dcch_msg_type_nb_c::c1_c_::types_opts::to_string() const "securityModeCommand-r13", "ueCapabilityEnquiry-r13", "rrcConnectionResume-r13", - "spare2", + "ueInformationRequest-r16", "spare1"}; return convert_enum_idx(options, 8, value, "dl_dcch_msg_type_nb_c::c1_c_::types"); } @@ -15261,13 +20030,13 @@ void supported_band_nb_r13_s::to_json(json_writer& j) const // AccessStratumRelease-NB-r13 ::= ENUMERATED const char* access_stratum_release_nb_r13_opts::to_string() const { - static const char* options[] = {"rel13", "rel14", "rel15", "spare5", "spare4", "spare3", "spare2", "spare1"}; + static const char* options[] = {"rel13", "rel14", "rel15", "rel16", "rel17", "spare3", "spare2", "spare1"}; return convert_enum_idx(options, 8, value, "access_stratum_release_nb_r13_e"); } uint8_t access_stratum_release_nb_r13_opts::to_number() const { - static const uint8_t options[] = {13, 14, 15}; - return map_enum_number(options, 3, value, "access_stratum_release_nb_r13_e"); + static const uint8_t options[] = {13, 14, 15, 16, 17}; + return map_enum_number(options, 5, value, "access_stratum_release_nb_r13_e"); } // HandoverPreparationInformation-NB-Ext-r14-IEs ::= SEQUENCE @@ -15810,26 +20579,164 @@ const char* ho_prep_info_nb_s::crit_exts_c_::c1_c_::types_opts::to_string() cons return convert_enum_idx(options, 4, value, "ho_prep_info_nb_s::crit_exts_c_::c1_c_::types"); } -// MeasResultServCell-NB-r14 ::= SEQUENCE -SRSASN_CODE meas_result_serv_cell_nb_r14_s::pack(bit_ref& bref) const +// InitialUE-Identity-5GC-NB-r16 ::= CHOICE +void init_ue_id_minus5_gc_nb_r16_c::destroy_() { - HANDLE_CODE(pack_integer(bref, nrsrp_result_r14, (uint8_t)0u, (uint8_t)113u)); - HANDLE_CODE(pack_integer(bref, nrsrq_result_r14, (int8_t)-30, (int8_t)46)); + switch (type_) { + case types::ng_minus5_g_s_tmsi_r16: + c.destroy<fixed_bitstring<48> >(); + break; + case types::random_value: + c.destroy<fixed_bitstring<48> >(); + break; + default: + break; + } +} +void init_ue_id_minus5_gc_nb_r16_c::set(types::options e) +{ + destroy_(); + type_ = e; + switch (type_) { + case types::ng_minus5_g_s_tmsi_r16: + c.init<fixed_bitstring<48> >(); + break; + case types::random_value: + c.init<fixed_bitstring<48> >(); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "init_ue_id_minus5_gc_nb_r16_c"); + } +} +init_ue_id_minus5_gc_nb_r16_c::init_ue_id_minus5_gc_nb_r16_c(const init_ue_id_minus5_gc_nb_r16_c& other) +{ + type_ = other.type(); + switch (type_) { + case types::ng_minus5_g_s_tmsi_r16: + c.init(other.c.get<fixed_bitstring<48> >()); + break; + case types::random_value: + c.init(other.c.get<fixed_bitstring<48> >()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "init_ue_id_minus5_gc_nb_r16_c"); + } +} +init_ue_id_minus5_gc_nb_r16_c& init_ue_id_minus5_gc_nb_r16_c::operator=(const init_ue_id_minus5_gc_nb_r16_c& other) +{ + if (this == &other) { + return *this; + } + set(other.type()); + switch (type_) { + case types::ng_minus5_g_s_tmsi_r16: + c.set(other.c.get<fixed_bitstring<48> >()); + break; + case types::random_value: + c.set(other.c.get<fixed_bitstring<48> >()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "init_ue_id_minus5_gc_nb_r16_c"); + } + return *this; +} +fixed_bitstring<48>& init_ue_id_minus5_gc_nb_r16_c::set_ng_minus5_g_s_tmsi_r16() +{ + set(types::ng_minus5_g_s_tmsi_r16); + return c.get<fixed_bitstring<48> >(); +} +fixed_bitstring<48>& init_ue_id_minus5_gc_nb_r16_c::set_random_value() +{ + set(types::random_value); + return c.get<fixed_bitstring<48> >(); +} +void init_ue_id_minus5_gc_nb_r16_c::to_json(json_writer& j) const +{ + j.start_obj(); + switch (type_) { + case types::ng_minus5_g_s_tmsi_r16: + j.write_str("ng-5G-S-TMSI-r16", c.get<fixed_bitstring<48> >().to_string()); + break; + case types::random_value: + j.write_str("randomValue", c.get<fixed_bitstring<48> >().to_string()); + break; + default: + log_invalid_choice_id(type_, "init_ue_id_minus5_gc_nb_r16_c"); + } + j.end_obj(); +} +SRSASN_CODE init_ue_id_minus5_gc_nb_r16_c::pack(bit_ref& bref) const +{ + type_.pack(bref); + switch (type_) { + case types::ng_minus5_g_s_tmsi_r16: + HANDLE_CODE(c.get<fixed_bitstring<48> >().pack(bref)); + break; + case types::random_value: + HANDLE_CODE(c.get<fixed_bitstring<48> >().pack(bref)); + break; + default: + log_invalid_choice_id(type_, "init_ue_id_minus5_gc_nb_r16_c"); + return SRSASN_ERROR_ENCODE_FAIL; + } return SRSASN_SUCCESS; } -SRSASN_CODE meas_result_serv_cell_nb_r14_s::unpack(cbit_ref& bref) +SRSASN_CODE init_ue_id_minus5_gc_nb_r16_c::unpack(cbit_ref& bref) { - HANDLE_CODE(unpack_integer(nrsrp_result_r14, bref, (uint8_t)0u, (uint8_t)113u)); - HANDLE_CODE(unpack_integer(nrsrq_result_r14, bref, (int8_t)-30, (int8_t)46)); + types e; + e.unpack(bref); + set(e); + switch (type_) { + case types::ng_minus5_g_s_tmsi_r16: + HANDLE_CODE(c.get<fixed_bitstring<48> >().unpack(bref)); + break; + case types::random_value: + HANDLE_CODE(c.get<fixed_bitstring<48> >().unpack(bref)); + break; + default: + log_invalid_choice_id(type_, "init_ue_id_minus5_gc_nb_r16_c"); + return SRSASN_ERROR_DECODE_FAIL; + } + return SRSASN_SUCCESS; +} + +const char* init_ue_id_minus5_gc_nb_r16_c::types_opts::to_string() const +{ + static const char* options[] = {"ng-5G-S-TMSI-r16", "randomValue"}; + return convert_enum_idx(options, 2, value, "init_ue_id_minus5_gc_nb_r16_c::types"); +} +int8_t init_ue_id_minus5_gc_nb_r16_c::types_opts::to_number() const +{ + static const int8_t options[] = {-5}; + return map_enum_number(options, 1, value, "init_ue_id_minus5_gc_nb_r16_c::types"); +} + +// PagingRecord-NB-v1610 ::= SEQUENCE +SRSASN_CODE paging_record_nb_v1610_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(mt_edt_r16_present, 1)); return SRSASN_SUCCESS; } -void meas_result_serv_cell_nb_r14_s::to_json(json_writer& j) const +SRSASN_CODE paging_record_nb_v1610_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(mt_edt_r16_present, 1)); + + return SRSASN_SUCCESS; +} +void paging_record_nb_v1610_s::to_json(json_writer& j) const { j.start_obj(); - j.write_int("nrsrpResult-r14", nrsrp_result_r14); - j.write_int("nrsrqResult-r14", nrsrq_result_r14); + if (mt_edt_r16_present) { + j.write_str("mt-EDT-r16", "true"); + } j.end_obj(); } @@ -15856,6 +20763,47 @@ void paging_record_nb_r13_s::to_json(json_writer& j) const j.end_obj(); } +// Paging-NB-v1610-IEs ::= SEQUENCE +SRSASN_CODE paging_nb_v1610_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(paging_record_list_v1610_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + if (paging_record_list_v1610_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, paging_record_list_v1610, 1, 16)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE paging_nb_v1610_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(paging_record_list_v1610_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + if (paging_record_list_v1610_present) { + HANDLE_CODE(unpack_dyn_seq_of(paging_record_list_v1610, bref, 1, 16)); + } + + return SRSASN_SUCCESS; +} +void paging_nb_v1610_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (paging_record_list_v1610_present) { + j.start_array("pagingRecordList-v1610"); + for (const auto& e1 : paging_record_list_v1610) { + e1.to_json(j); + } + j.end_array(); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + j.start_obj(); + j.end_obj(); + } + j.end_obj(); +} + // Paging-NB ::= SEQUENCE SRSASN_CODE paging_nb_s::pack(bit_ref& bref) const { @@ -15867,6 +20815,9 @@ SRSASN_CODE paging_nb_s::pack(bit_ref& bref) const if (paging_record_list_r13_present) { HANDLE_CODE(pack_dyn_seq_of(bref, paging_record_list_r13, 1, 16)); } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } return SRSASN_SUCCESS; } @@ -15880,6 +20831,9 @@ SRSASN_CODE paging_nb_s::unpack(cbit_ref& bref) if (paging_record_list_r13_present) { HANDLE_CODE(unpack_dyn_seq_of(paging_record_list_r13, bref, 1, 16)); } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } return SRSASN_SUCCESS; } @@ -15901,8 +20855,7 @@ void paging_nb_s::to_json(json_writer& j) const } if (non_crit_ext_present) { j.write_fieldname("nonCriticalExtension"); - j.start_obj(); - j.end_obj(); + non_crit_ext.to_json(j); } j.end_obj(); } @@ -16067,6 +21020,310 @@ void pci_arfcn_nb_r14_s::to_json(json_writer& j) const j.end_obj(); } +// PUR-ConfigRequest-NB-r16 ::= CHOICE +void pur_cfg_request_nb_r16_c::set(types::options e) +{ + type_ = e; +} +void pur_cfg_request_nb_r16_c::set_pur_release_request() +{ + set(types::pur_release_request); +} +pur_cfg_request_nb_r16_c::pur_setup_request_s_& pur_cfg_request_nb_r16_c::set_pur_setup_request() +{ + set(types::pur_setup_request); + return c; +} +void pur_cfg_request_nb_r16_c::to_json(json_writer& j) const +{ + j.start_obj(); + switch (type_) { + case types::pur_release_request: + break; + case types::pur_setup_request: + j.write_fieldname("pur-SetupRequest"); + j.start_obj(); + j.write_str("requestedNumOccasions-r16", c.requested_num_occasions_r16.to_string()); + j.write_fieldname("requestedPeriodicityAndOffset-r16"); + c.requested_periodicity_and_offset_r16.to_json(j); + j.write_str("requestedTBS-r16", c.requested_tbs_r16.to_string()); + if (c.rrc_ack_r16_present) { + j.write_str("rrc-ACK-r16", "true"); + } + j.end_obj(); + break; + default: + log_invalid_choice_id(type_, "pur_cfg_request_nb_r16_c"); + } + j.end_obj(); +} +SRSASN_CODE pur_cfg_request_nb_r16_c::pack(bit_ref& bref) const +{ + type_.pack(bref); + switch (type_) { + case types::pur_release_request: + break; + case types::pur_setup_request: + HANDLE_CODE(bref.pack(c.rrc_ack_r16_present, 1)); + HANDLE_CODE(c.requested_num_occasions_r16.pack(bref)); + HANDLE_CODE(c.requested_periodicity_and_offset_r16.pack(bref)); + HANDLE_CODE(c.requested_tbs_r16.pack(bref)); + break; + default: + log_invalid_choice_id(type_, "pur_cfg_request_nb_r16_c"); + return SRSASN_ERROR_ENCODE_FAIL; + } + return SRSASN_SUCCESS; +} +SRSASN_CODE pur_cfg_request_nb_r16_c::unpack(cbit_ref& bref) +{ + types e; + e.unpack(bref); + set(e); + switch (type_) { + case types::pur_release_request: + break; + case types::pur_setup_request: + HANDLE_CODE(bref.unpack(c.rrc_ack_r16_present, 1)); + HANDLE_CODE(c.requested_num_occasions_r16.unpack(bref)); + HANDLE_CODE(c.requested_periodicity_and_offset_r16.unpack(bref)); + HANDLE_CODE(c.requested_tbs_r16.unpack(bref)); + break; + default: + log_invalid_choice_id(type_, "pur_cfg_request_nb_r16_c"); + return SRSASN_ERROR_DECODE_FAIL; + } + return SRSASN_SUCCESS; +} + +const char* pur_cfg_request_nb_r16_c::pur_setup_request_s_::requested_num_occasions_r16_opts::to_string() const +{ + static const char* options[] = {"one", "infinite"}; + return convert_enum_idx( + options, 2, value, "pur_cfg_request_nb_r16_c::pur_setup_request_s_::requested_num_occasions_r16_e_"); +} +uint8_t pur_cfg_request_nb_r16_c::pur_setup_request_s_::requested_num_occasions_r16_opts::to_number() const +{ + static const uint8_t options[] = {1}; + return map_enum_number( + options, 1, value, "pur_cfg_request_nb_r16_c::pur_setup_request_s_::requested_num_occasions_r16_e_"); +} + +const char* pur_cfg_request_nb_r16_c::pur_setup_request_s_::requested_tbs_r16_opts::to_string() const +{ + static const char* options[] = {"b328", "b376", "b424", "b472", "b504", "b552", "b584", "b616", + "b680", "b744", "b776", "b808", "b872", "b904", "b936", "b968", + "b1000", "b1032", "b1096", "b1128", "b1192", "b1224", "b1256", "b1352", + "b1384", "b1544", "b1608", "b1736", "b1800", "b2024", "b2280", "b2536"}; + return convert_enum_idx(options, 32, value, "pur_cfg_request_nb_r16_c::pur_setup_request_s_::requested_tbs_r16_e_"); +} +uint16_t pur_cfg_request_nb_r16_c::pur_setup_request_s_::requested_tbs_r16_opts::to_number() const +{ + static const uint16_t options[] = {328, 376, 424, 472, 504, 552, 584, 616, 680, 744, 776, + 808, 872, 904, 936, 968, 1000, 1032, 1096, 1128, 1192, 1224, + 1256, 1352, 1384, 1544, 1608, 1736, 1800, 2024, 2280, 2536}; + return map_enum_number(options, 32, value, "pur_cfg_request_nb_r16_c::pur_setup_request_s_::requested_tbs_r16_e_"); +} + +const char* pur_cfg_request_nb_r16_c::types_opts::to_string() const +{ + static const char* options[] = {"pur-ReleaseRequest", "pur-SetupRequest"}; + return convert_enum_idx(options, 2, value, "pur_cfg_request_nb_r16_c::types"); +} + +// PURConfigurationRequest-NB-r16-IEs ::= SEQUENCE +SRSASN_CODE pur_cfg_request_nb_r16_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(pur_cfg_request_r16_present, 1)); + HANDLE_CODE(bref.pack(late_non_crit_ext_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + if (pur_cfg_request_r16_present) { + HANDLE_CODE(pur_cfg_request_r16.pack(bref)); + } + if (late_non_crit_ext_present) { + HANDLE_CODE(late_non_crit_ext.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE pur_cfg_request_nb_r16_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(pur_cfg_request_r16_present, 1)); + HANDLE_CODE(bref.unpack(late_non_crit_ext_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + if (pur_cfg_request_r16_present) { + HANDLE_CODE(pur_cfg_request_r16.unpack(bref)); + } + if (late_non_crit_ext_present) { + HANDLE_CODE(late_non_crit_ext.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void pur_cfg_request_nb_r16_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (pur_cfg_request_r16_present) { + j.write_fieldname("pur-ConfigRequest-r16"); + pur_cfg_request_r16.to_json(j); + } + if (late_non_crit_ext_present) { + j.write_str("lateNonCriticalExtension", late_non_crit_ext.to_string()); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + j.start_obj(); + j.end_obj(); + } + j.end_obj(); +} + +// PURConfigurationRequest-NB-r16 ::= SEQUENCE +SRSASN_CODE pur_cfg_request_nb_r16_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(crit_exts.pack(bref)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE pur_cfg_request_nb_r16_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(crit_exts.unpack(bref)); + + return SRSASN_SUCCESS; +} +void pur_cfg_request_nb_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_fieldname("criticalExtensions"); + crit_exts.to_json(j); + j.end_obj(); +} + +void pur_cfg_request_nb_r16_s::crit_exts_c_::set(types::options e) +{ + type_ = e; +} +pur_cfg_request_nb_r16_ies_s& pur_cfg_request_nb_r16_s::crit_exts_c_::set_pur_cfg_request_r16() +{ + set(types::pur_cfg_request_r16); + return c; +} +void pur_cfg_request_nb_r16_s::crit_exts_c_::set_crit_exts_future() +{ + set(types::crit_exts_future); +} +void pur_cfg_request_nb_r16_s::crit_exts_c_::to_json(json_writer& j) const +{ + j.start_obj(); + switch (type_) { + case types::pur_cfg_request_r16: + j.write_fieldname("purConfigurationRequest-r16"); + c.to_json(j); + break; + case types::crit_exts_future: + break; + default: + log_invalid_choice_id(type_, "pur_cfg_request_nb_r16_s::crit_exts_c_"); + } + j.end_obj(); +} +SRSASN_CODE pur_cfg_request_nb_r16_s::crit_exts_c_::pack(bit_ref& bref) const +{ + type_.pack(bref); + switch (type_) { + case types::pur_cfg_request_r16: + HANDLE_CODE(c.pack(bref)); + break; + case types::crit_exts_future: + break; + default: + log_invalid_choice_id(type_, "pur_cfg_request_nb_r16_s::crit_exts_c_"); + return SRSASN_ERROR_ENCODE_FAIL; + } + return SRSASN_SUCCESS; +} +SRSASN_CODE pur_cfg_request_nb_r16_s::crit_exts_c_::unpack(cbit_ref& bref) +{ + types e; + e.unpack(bref); + set(e); + switch (type_) { + case types::pur_cfg_request_r16: + HANDLE_CODE(c.unpack(bref)); + break; + case types::crit_exts_future: + break; + default: + log_invalid_choice_id(type_, "pur_cfg_request_nb_r16_s::crit_exts_c_"); + return SRSASN_ERROR_DECODE_FAIL; + } + return SRSASN_SUCCESS; +} + +const char* pur_cfg_request_nb_r16_s::crit_exts_c_::types_opts::to_string() const +{ + static const char* options[] = {"purConfigurationRequest-r16", "criticalExtensionsFuture"}; + return convert_enum_idx(options, 2, value, "pur_cfg_request_nb_r16_s::crit_exts_c_::types"); +} + +// SupportedBand-NB-v1710 ::= SEQUENCE +SRSASN_CODE supported_band_nb_v1710_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(npusch_minus16_qam_r17_present, 1)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE supported_band_nb_v1710_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(npusch_minus16_qam_r17_present, 1)); + + return SRSASN_SUCCESS; +} +void supported_band_nb_v1710_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (npusch_minus16_qam_r17_present) { + j.write_str("npusch-16QAM-r17", "supported"); + } + j.end_obj(); +} + +// RF-Parameters-NB-v1710 ::= SEQUENCE +SRSASN_CODE rf_params_nb_v1710_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(supported_band_list_v1710_present, 1)); + + if (supported_band_list_v1710_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, supported_band_list_v1710, 1, 64)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE rf_params_nb_v1710_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(supported_band_list_v1710_present, 1)); + + if (supported_band_list_v1710_present) { + HANDLE_CODE(unpack_dyn_seq_of(supported_band_list_v1710, bref, 1, 64)); + } + + return SRSASN_SUCCESS; +} +void rf_params_nb_v1710_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (supported_band_list_v1710_present) { + j.start_array("supportedBandList-v1710"); + for (const auto& e1 : supported_band_list_v1710) { + e1.to_json(j); + } + j.end_array(); + } + j.end_obj(); +} + // RRCConnectionReconfigurationComplete-NB-r13-IEs ::= SEQUENCE SRSASN_CODE rrc_conn_recfg_complete_nb_r13_ies_s::pack(bit_ref& bref) const { @@ -16195,6 +21452,84 @@ const char* rrc_conn_recfg_complete_nb_s::crit_exts_c_::types_opts::to_string() return convert_enum_idx(options, 2, value, "rrc_conn_recfg_complete_nb_s::crit_exts_c_::types"); } +// RRCConnectionReestablishmentComplete-NB-v1710-IEs ::= SEQUENCE +SRSASN_CODE rrc_conn_reest_complete_nb_v1710_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(gnss_validity_dur_r17_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + if (gnss_validity_dur_r17_present) { + HANDLE_CODE(gnss_validity_dur_r17.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE rrc_conn_reest_complete_nb_v1710_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(gnss_validity_dur_r17_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + if (gnss_validity_dur_r17_present) { + HANDLE_CODE(gnss_validity_dur_r17.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void rrc_conn_reest_complete_nb_v1710_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (gnss_validity_dur_r17_present) { + j.write_str("gnss-ValidityDuration-r17", gnss_validity_dur_r17.to_string()); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + j.start_obj(); + j.end_obj(); + } + j.end_obj(); +} + +// RRCConnectionReestablishmentComplete-NB-v1610-IEs ::= SEQUENCE +SRSASN_CODE rrc_conn_reest_complete_nb_v1610_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(rlf_info_available_r16_present, 1)); + HANDLE_CODE(bref.pack(anr_info_available_r16_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE rrc_conn_reest_complete_nb_v1610_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(rlf_info_available_r16_present, 1)); + HANDLE_CODE(bref.unpack(anr_info_available_r16_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void rrc_conn_reest_complete_nb_v1610_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (rlf_info_available_r16_present) { + j.write_str("rlf-InfoAvailable-r16", "true"); + } + if (anr_info_available_r16_present) { + j.write_str("anr-InfoAvailable-r16", "true"); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + non_crit_ext.to_json(j); + } + j.end_obj(); +} + // RRCConnectionReestablishmentComplete-NB-v1470-IEs ::= SEQUENCE SRSASN_CODE rrc_conn_reest_complete_nb_v1470_ies_s::pack(bit_ref& bref) const { @@ -16204,6 +21539,9 @@ SRSASN_CODE rrc_conn_reest_complete_nb_v1470_ies_s::pack(bit_ref& bref) const if (meas_result_serv_cell_r14_present) { HANDLE_CODE(meas_result_serv_cell_r14.pack(bref)); } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } return SRSASN_SUCCESS; } @@ -16215,6 +21553,9 @@ SRSASN_CODE rrc_conn_reest_complete_nb_v1470_ies_s::unpack(cbit_ref& bref) if (meas_result_serv_cell_r14_present) { HANDLE_CODE(meas_result_serv_cell_r14.unpack(bref)); } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } return SRSASN_SUCCESS; } @@ -16227,8 +21568,7 @@ void rrc_conn_reest_complete_nb_v1470_ies_s::to_json(json_writer& j) const } if (non_crit_ext_present) { j.write_fieldname("nonCriticalExtension"); - j.start_obj(); - j.end_obj(); + non_crit_ext.to_json(j); } j.end_obj(); } @@ -16366,25 +21706,6 @@ const char* rrc_conn_reest_complete_nb_s::crit_exts_c_::types_opts::to_string() return convert_enum_idx(options, 2, value, "rrc_conn_reest_complete_nb_s::crit_exts_c_::types"); } -// CQI-NPDCCH-NB-r14 ::= ENUMERATED -const char* cqi_npdcch_nb_r14_opts::to_string() const -{ - static const char* options[] = {"noMeasurements", - "candidateRep-A", - "candidateRep-B", - "candidateRep-C", - "candidateRep-D", - "candidateRep-E", - "candidateRep-F", - "candidateRep-G", - "candidateRep-H", - "candidateRep-I", - "candidateRep-J", - "candidateRep-K", - "candidateRep-L"}; - return convert_enum_idx(options, 13, value, "cqi_npdcch_nb_r14_e"); -} - // CQI-NPDCCH-Short-NB-r14 ::= ENUMERATED const char* cqi_npdcch_short_nb_r14_opts::to_string() const { @@ -16406,6 +21727,88 @@ int8_t cqi_npdcch_short_nb_r14_opts::to_number() const return 0; } +// ReestabUE-Identity-CP-5GC-NB-r16 ::= SEQUENCE +SRSASN_CODE reestab_ue_id_cp_minus5_gc_nb_r16_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(truncated5_g_s_tmsi_r16.pack(bref)); + HANDLE_CODE(ul_nas_mac_r16.pack(bref)); + HANDLE_CODE(ul_nas_count_r16.pack(bref)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE reestab_ue_id_cp_minus5_gc_nb_r16_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(truncated5_g_s_tmsi_r16.unpack(bref)); + HANDLE_CODE(ul_nas_mac_r16.unpack(bref)); + HANDLE_CODE(ul_nas_count_r16.unpack(bref)); + + return SRSASN_SUCCESS; +} +void reestab_ue_id_cp_minus5_gc_nb_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_str("truncated5G-S-TMSI-r16", truncated5_g_s_tmsi_r16.to_string()); + j.write_str("ul-NAS-MAC-r16", ul_nas_mac_r16.to_string()); + j.write_str("ul-NAS-Count-r16", ul_nas_count_r16.to_string()); + j.end_obj(); +} + +// ReestablishmentCause-NB-r13 ::= ENUMERATED +const char* reest_cause_nb_r13_opts::to_string() const +{ + static const char* options[] = {"reconfigurationFailure", "otherFailure", "spare2", "spare1"}; + return convert_enum_idx(options, 4, value, "reest_cause_nb_r13_e"); +} + +// RRCConnectionReestablishmentRequest-5GC-NB-r16-IEs ::= SEQUENCE +SRSASN_CODE rrc_conn_reest_request_minus5_gc_nb_r16_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(ue_id_r16.pack(bref)); + HANDLE_CODE(reest_cause_r16.pack(bref)); + HANDLE_CODE(cqi_npdcch_r16.pack(bref)); + HANDLE_CODE(spare.pack(bref)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE rrc_conn_reest_request_minus5_gc_nb_r16_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(ue_id_r16.unpack(bref)); + HANDLE_CODE(reest_cause_r16.unpack(bref)); + HANDLE_CODE(cqi_npdcch_r16.unpack(bref)); + HANDLE_CODE(spare.unpack(bref)); + + return SRSASN_SUCCESS; +} +void rrc_conn_reest_request_minus5_gc_nb_r16_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_fieldname("ue-Identity-r16"); + ue_id_r16.to_json(j); + j.write_str("reestablishmentCause-r16", reest_cause_r16.to_string()); + j.write_str("cqi-NPDCCH-r16", cqi_npdcch_r16.to_string()); + j.write_str("spare", spare.to_string()); + j.end_obj(); +} + +// CQI-NPDCCH-NB-r14 ::= ENUMERATED +const char* cqi_npdcch_nb_r14_opts::to_string() const +{ + static const char* options[] = {"noMeasurements", + "candidateRep-A", + "candidateRep-B", + "candidateRep-C", + "candidateRep-D", + "candidateRep-E", + "candidateRep-F", + "candidateRep-G", + "candidateRep-H", + "candidateRep-I", + "candidateRep-J", + "candidateRep-K", + "candidateRep-L"}; + return convert_enum_idx(options, 13, value, "cqi_npdcch_nb_r14_e"); +} + // ReestabUE-Identity-CP-NB-r14 ::= SEQUENCE SRSASN_CODE reestab_ue_id_cp_nb_r14_s::pack(bit_ref& bref) const { @@ -16433,13 +21836,6 @@ void reestab_ue_id_cp_nb_r14_s::to_json(json_writer& j) const j.end_obj(); } -// ReestablishmentCause-NB-r13 ::= ENUMERATED -const char* reest_cause_nb_r13_opts::to_string() const -{ - static const char* options[] = {"reconfigurationFailure", "otherFailure", "spare2", "spare1"}; - return convert_enum_idx(options, 4, value, "reest_cause_nb_r13_e"); -} - // RRCConnectionReestablishmentRequest-NB-r13-IEs ::= SEQUENCE SRSASN_CODE rrc_conn_reest_request_nb_r13_ies_s::pack(bit_ref& bref) const { @@ -16657,19 +22053,86 @@ SRSASN_CODE rrc_conn_reest_request_nb_s::crit_exts_c_::unpack(cbit_ref& bref) return SRSASN_SUCCESS; } +void rrc_conn_reest_request_nb_s::crit_exts_c_::later_c_::destroy_() +{ + switch (type_) { + case types::rrc_conn_reest_request_r14: + c.destroy<rrc_conn_reest_request_nb_r14_ies_s>(); + break; + case types::later: + c.destroy<later_c__>(); + break; + default: + break; + } +} void rrc_conn_reest_request_nb_s::crit_exts_c_::later_c_::set(types::options e) { + destroy_(); type_ = e; + switch (type_) { + case types::rrc_conn_reest_request_r14: + c.init<rrc_conn_reest_request_nb_r14_ies_s>(); + break; + case types::later: + c.init<later_c__>(); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "rrc_conn_reest_request_nb_s::crit_exts_c_::later_c_"); + } +} +rrc_conn_reest_request_nb_s::crit_exts_c_::later_c_::later_c_( + const rrc_conn_reest_request_nb_s::crit_exts_c_::later_c_& other) +{ + type_ = other.type(); + switch (type_) { + case types::rrc_conn_reest_request_r14: + c.init(other.c.get<rrc_conn_reest_request_nb_r14_ies_s>()); + break; + case types::later: + c.init(other.c.get<later_c__>()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "rrc_conn_reest_request_nb_s::crit_exts_c_::later_c_"); + } +} +rrc_conn_reest_request_nb_s::crit_exts_c_::later_c_& rrc_conn_reest_request_nb_s::crit_exts_c_::later_c_::operator=( + const rrc_conn_reest_request_nb_s::crit_exts_c_::later_c_& other) +{ + if (this == &other) { + return *this; + } + set(other.type()); + switch (type_) { + case types::rrc_conn_reest_request_r14: + c.set(other.c.get<rrc_conn_reest_request_nb_r14_ies_s>()); + break; + case types::later: + c.set(other.c.get<later_c__>()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "rrc_conn_reest_request_nb_s::crit_exts_c_::later_c_"); + } + + return *this; } rrc_conn_reest_request_nb_r14_ies_s& rrc_conn_reest_request_nb_s::crit_exts_c_::later_c_::set_rrc_conn_reest_request_r14() { set(types::rrc_conn_reest_request_r14); - return c; + return c.get<rrc_conn_reest_request_nb_r14_ies_s>(); } -void rrc_conn_reest_request_nb_s::crit_exts_c_::later_c_::set_crit_exts_future() +rrc_conn_reest_request_nb_s::crit_exts_c_::later_c_::later_c__& +rrc_conn_reest_request_nb_s::crit_exts_c_::later_c_::set_later() { - set(types::crit_exts_future); + set(types::later); + return c.get<later_c__>(); } void rrc_conn_reest_request_nb_s::crit_exts_c_::later_c_::to_json(json_writer& j) const { @@ -16677,9 +22140,11 @@ void rrc_conn_reest_request_nb_s::crit_exts_c_::later_c_::to_json(json_writer& j switch (type_) { case types::rrc_conn_reest_request_r14: j.write_fieldname("rrcConnectionReestablishmentRequest-r14"); - c.to_json(j); + c.get<rrc_conn_reest_request_nb_r14_ies_s>().to_json(j); break; - case types::crit_exts_future: + case types::later: + j.write_fieldname("later"); + c.get<later_c__>().to_json(j); break; default: log_invalid_choice_id(type_, "rrc_conn_reest_request_nb_s::crit_exts_c_::later_c_"); @@ -16691,9 +22156,10 @@ SRSASN_CODE rrc_conn_reest_request_nb_s::crit_exts_c_::later_c_::pack(bit_ref& b type_.pack(bref); switch (type_) { case types::rrc_conn_reest_request_r14: - HANDLE_CODE(c.pack(bref)); + HANDLE_CODE(c.get<rrc_conn_reest_request_nb_r14_ies_s>().pack(bref)); break; - case types::crit_exts_future: + case types::later: + HANDLE_CODE(c.get<later_c__>().pack(bref)); break; default: log_invalid_choice_id(type_, "rrc_conn_reest_request_nb_s::crit_exts_c_::later_c_"); @@ -16708,20 +22174,89 @@ SRSASN_CODE rrc_conn_reest_request_nb_s::crit_exts_c_::later_c_::unpack(cbit_ref set(e); switch (type_) { case types::rrc_conn_reest_request_r14: + HANDLE_CODE(c.get<rrc_conn_reest_request_nb_r14_ies_s>().unpack(bref)); + break; + case types::later: + HANDLE_CODE(c.get<later_c__>().unpack(bref)); + break; + default: + log_invalid_choice_id(type_, "rrc_conn_reest_request_nb_s::crit_exts_c_::later_c_"); + return SRSASN_ERROR_DECODE_FAIL; + } + return SRSASN_SUCCESS; +} + +void rrc_conn_reest_request_nb_s::crit_exts_c_::later_c_::later_c__::set(types::options e) +{ + type_ = e; +} +rrc_conn_reest_request_minus5_gc_nb_r16_ies_s& +rrc_conn_reest_request_nb_s::crit_exts_c_::later_c_::later_c__::set_rrc_conn_reest_request_r16() +{ + set(types::rrc_conn_reest_request_r16); + return c; +} +void rrc_conn_reest_request_nb_s::crit_exts_c_::later_c_::later_c__::set_crit_exts_future() +{ + set(types::crit_exts_future); +} +void rrc_conn_reest_request_nb_s::crit_exts_c_::later_c_::later_c__::to_json(json_writer& j) const +{ + j.start_obj(); + switch (type_) { + case types::rrc_conn_reest_request_r16: + j.write_fieldname("rrcConnectionReestablishmentRequest-r16"); + c.to_json(j); + break; + case types::crit_exts_future: + break; + default: + log_invalid_choice_id(type_, "rrc_conn_reest_request_nb_s::crit_exts_c_::later_c_::later_c__"); + } + j.end_obj(); +} +SRSASN_CODE rrc_conn_reest_request_nb_s::crit_exts_c_::later_c_::later_c__::pack(bit_ref& bref) const +{ + type_.pack(bref); + switch (type_) { + case types::rrc_conn_reest_request_r16: + HANDLE_CODE(c.pack(bref)); + break; + case types::crit_exts_future: + break; + default: + log_invalid_choice_id(type_, "rrc_conn_reest_request_nb_s::crit_exts_c_::later_c_::later_c__"); + return SRSASN_ERROR_ENCODE_FAIL; + } + return SRSASN_SUCCESS; +} +SRSASN_CODE rrc_conn_reest_request_nb_s::crit_exts_c_::later_c_::later_c__::unpack(cbit_ref& bref) +{ + types e; + e.unpack(bref); + set(e); + switch (type_) { + case types::rrc_conn_reest_request_r16: HANDLE_CODE(c.unpack(bref)); break; case types::crit_exts_future: break; default: - log_invalid_choice_id(type_, "rrc_conn_reest_request_nb_s::crit_exts_c_::later_c_"); + log_invalid_choice_id(type_, "rrc_conn_reest_request_nb_s::crit_exts_c_::later_c_::later_c__"); return SRSASN_ERROR_DECODE_FAIL; } return SRSASN_SUCCESS; } +const char* rrc_conn_reest_request_nb_s::crit_exts_c_::later_c_::later_c__::types_opts::to_string() const +{ + static const char* options[] = {"rrcConnectionReestablishmentRequest-r16", "criticalExtensionsFuture"}; + return convert_enum_idx(options, 2, value, "rrc_conn_reest_request_nb_s::crit_exts_c_::later_c_::later_c__::types"); +} + const char* rrc_conn_reest_request_nb_s::crit_exts_c_::later_c_::types_opts::to_string() const { - static const char* options[] = {"rrcConnectionReestablishmentRequest-r14", "criticalExtensionsFuture"}; + static const char* options[] = {"rrcConnectionReestablishmentRequest-r14", "later"}; return convert_enum_idx(options, 2, value, "rrc_conn_reest_request_nb_s::crit_exts_c_::later_c_::types"); } @@ -16731,6 +22266,43 @@ const char* rrc_conn_reest_request_nb_s::crit_exts_c_::types_opts::to_string() c return convert_enum_idx(options, 2, value, "rrc_conn_reest_request_nb_s::crit_exts_c_::types"); } +// RRCConnectionRequest-5GC-NB-r16-IEs ::= SEQUENCE +SRSASN_CODE rrc_conn_request_minus5_gc_nb_r16_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(ue_id_r16.pack(bref)); + HANDLE_CODE(establishment_cause_r16.pack(bref)); + HANDLE_CODE(cqi_npdcch_r16.pack(bref)); + HANDLE_CODE(spare.pack(bref)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE rrc_conn_request_minus5_gc_nb_r16_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(ue_id_r16.unpack(bref)); + HANDLE_CODE(establishment_cause_r16.unpack(bref)); + HANDLE_CODE(cqi_npdcch_r16.unpack(bref)); + HANDLE_CODE(spare.unpack(bref)); + + return SRSASN_SUCCESS; +} +void rrc_conn_request_minus5_gc_nb_r16_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_fieldname("ue-Identity-r16"); + ue_id_r16.to_json(j); + j.write_str("establishmentCause-r16", establishment_cause_r16.to_string()); + j.write_str("cqi-NPDCCH-r16", cqi_npdcch_r16.to_string()); + j.write_str("spare", spare.to_string()); + j.end_obj(); +} + +const char* rrc_conn_request_minus5_gc_nb_r16_ies_s::establishment_cause_r16_opts::to_string() const +{ + static const char* options[] = { + "mt-Access", "mo-Signalling", "mo-Data", "mo-ExceptionData", "spare4", "spare3", "spare2", "spare1"}; + return convert_enum_idx(options, 8, value, "rrc_conn_request_minus5_gc_nb_r16_ies_s::establishment_cause_r16_e_"); +} + // EstablishmentCause-NB-r13 ::= ENUMERATED const char* establishment_cause_nb_r13_opts::to_string() const { @@ -16739,7 +22311,7 @@ const char* establishment_cause_nb_r13_opts::to_string() const "mo-Data", "mo-ExceptionData", "delayTolerantAccess-v1330", - "spare3", + "mt-EDT-v1610", "spare2", "spare1"}; return convert_enum_idx(options, 8, value, "establishment_cause_nb_r13_e"); @@ -16811,18 +22383,83 @@ void rrc_conn_request_nb_s::to_json(json_writer& j) const j.end_obj(); } +void rrc_conn_request_nb_s::crit_exts_c_::destroy_() +{ + switch (type_) { + case types::rrc_conn_request_r13: + c.destroy<rrc_conn_request_nb_r13_ies_s>(); + break; + case types::later: + c.destroy<later_c_>(); + break; + default: + break; + } +} void rrc_conn_request_nb_s::crit_exts_c_::set(types::options e) { + destroy_(); type_ = e; + switch (type_) { + case types::rrc_conn_request_r13: + c.init<rrc_conn_request_nb_r13_ies_s>(); + break; + case types::later: + c.init<later_c_>(); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "rrc_conn_request_nb_s::crit_exts_c_"); + } +} +rrc_conn_request_nb_s::crit_exts_c_::crit_exts_c_(const rrc_conn_request_nb_s::crit_exts_c_& other) +{ + type_ = other.type(); + switch (type_) { + case types::rrc_conn_request_r13: + c.init(other.c.get<rrc_conn_request_nb_r13_ies_s>()); + break; + case types::later: + c.init(other.c.get<later_c_>()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "rrc_conn_request_nb_s::crit_exts_c_"); + } +} +rrc_conn_request_nb_s::crit_exts_c_& +rrc_conn_request_nb_s::crit_exts_c_::operator=(const rrc_conn_request_nb_s::crit_exts_c_& other) +{ + if (this == &other) { + return *this; + } + set(other.type()); + switch (type_) { + case types::rrc_conn_request_r13: + c.set(other.c.get<rrc_conn_request_nb_r13_ies_s>()); + break; + case types::later: + c.set(other.c.get<later_c_>()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "rrc_conn_request_nb_s::crit_exts_c_"); + } + + return *this; } rrc_conn_request_nb_r13_ies_s& rrc_conn_request_nb_s::crit_exts_c_::set_rrc_conn_request_r13() { set(types::rrc_conn_request_r13); - return c; + return c.get<rrc_conn_request_nb_r13_ies_s>(); } -void rrc_conn_request_nb_s::crit_exts_c_::set_crit_exts_future() +rrc_conn_request_nb_s::crit_exts_c_::later_c_& rrc_conn_request_nb_s::crit_exts_c_::set_later() { - set(types::crit_exts_future); + set(types::later); + return c.get<later_c_>(); } void rrc_conn_request_nb_s::crit_exts_c_::to_json(json_writer& j) const { @@ -16830,9 +22467,11 @@ void rrc_conn_request_nb_s::crit_exts_c_::to_json(json_writer& j) const switch (type_) { case types::rrc_conn_request_r13: j.write_fieldname("rrcConnectionRequest-r13"); - c.to_json(j); + c.get<rrc_conn_request_nb_r13_ies_s>().to_json(j); break; - case types::crit_exts_future: + case types::later: + j.write_fieldname("later"); + c.get<later_c_>().to_json(j); break; default: log_invalid_choice_id(type_, "rrc_conn_request_nb_s::crit_exts_c_"); @@ -16844,9 +22483,10 @@ SRSASN_CODE rrc_conn_request_nb_s::crit_exts_c_::pack(bit_ref& bref) const type_.pack(bref); switch (type_) { case types::rrc_conn_request_r13: - HANDLE_CODE(c.pack(bref)); + HANDLE_CODE(c.get<rrc_conn_request_nb_r13_ies_s>().pack(bref)); break; - case types::crit_exts_future: + case types::later: + HANDLE_CODE(c.get<later_c_>().pack(bref)); break; default: log_invalid_choice_id(type_, "rrc_conn_request_nb_s::crit_exts_c_"); @@ -16861,23 +22501,169 @@ SRSASN_CODE rrc_conn_request_nb_s::crit_exts_c_::unpack(cbit_ref& bref) set(e); switch (type_) { case types::rrc_conn_request_r13: + HANDLE_CODE(c.get<rrc_conn_request_nb_r13_ies_s>().unpack(bref)); + break; + case types::later: + HANDLE_CODE(c.get<later_c_>().unpack(bref)); + break; + default: + log_invalid_choice_id(type_, "rrc_conn_request_nb_s::crit_exts_c_"); + return SRSASN_ERROR_DECODE_FAIL; + } + return SRSASN_SUCCESS; +} + +void rrc_conn_request_nb_s::crit_exts_c_::later_c_::set(types::options e) +{ + type_ = e; +} +rrc_conn_request_minus5_gc_nb_r16_ies_s& rrc_conn_request_nb_s::crit_exts_c_::later_c_::set_rrc_conn_request_r16() +{ + set(types::rrc_conn_request_r16); + return c; +} +void rrc_conn_request_nb_s::crit_exts_c_::later_c_::set_crit_exts_future() +{ + set(types::crit_exts_future); +} +void rrc_conn_request_nb_s::crit_exts_c_::later_c_::to_json(json_writer& j) const +{ + j.start_obj(); + switch (type_) { + case types::rrc_conn_request_r16: + j.write_fieldname("rrcConnectionRequest-r16"); + c.to_json(j); + break; + case types::crit_exts_future: + break; + default: + log_invalid_choice_id(type_, "rrc_conn_request_nb_s::crit_exts_c_::later_c_"); + } + j.end_obj(); +} +SRSASN_CODE rrc_conn_request_nb_s::crit_exts_c_::later_c_::pack(bit_ref& bref) const +{ + type_.pack(bref); + switch (type_) { + case types::rrc_conn_request_r16: + HANDLE_CODE(c.pack(bref)); + break; + case types::crit_exts_future: + break; + default: + log_invalid_choice_id(type_, "rrc_conn_request_nb_s::crit_exts_c_::later_c_"); + return SRSASN_ERROR_ENCODE_FAIL; + } + return SRSASN_SUCCESS; +} +SRSASN_CODE rrc_conn_request_nb_s::crit_exts_c_::later_c_::unpack(cbit_ref& bref) +{ + types e; + e.unpack(bref); + set(e); + switch (type_) { + case types::rrc_conn_request_r16: HANDLE_CODE(c.unpack(bref)); break; case types::crit_exts_future: break; default: - log_invalid_choice_id(type_, "rrc_conn_request_nb_s::crit_exts_c_"); + log_invalid_choice_id(type_, "rrc_conn_request_nb_s::crit_exts_c_::later_c_"); return SRSASN_ERROR_DECODE_FAIL; } return SRSASN_SUCCESS; } +const char* rrc_conn_request_nb_s::crit_exts_c_::later_c_::types_opts::to_string() const +{ + static const char* options[] = {"rrcConnectionRequest-r16", "criticalExtensionsFuture"}; + return convert_enum_idx(options, 2, value, "rrc_conn_request_nb_s::crit_exts_c_::later_c_::types"); +} + const char* rrc_conn_request_nb_s::crit_exts_c_::types_opts::to_string() const { - static const char* options[] = {"rrcConnectionRequest-r13", "criticalExtensionsFuture"}; + static const char* options[] = {"rrcConnectionRequest-r13", "later"}; return convert_enum_idx(options, 2, value, "rrc_conn_request_nb_s::crit_exts_c_::types"); } +// RRCConnectionResumeComplete-NB-v1710-IEs ::= SEQUENCE +SRSASN_CODE rrc_conn_resume_complete_nb_v1710_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(gnss_validity_dur_r17_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + if (gnss_validity_dur_r17_present) { + HANDLE_CODE(gnss_validity_dur_r17.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE rrc_conn_resume_complete_nb_v1710_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(gnss_validity_dur_r17_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + if (gnss_validity_dur_r17_present) { + HANDLE_CODE(gnss_validity_dur_r17.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void rrc_conn_resume_complete_nb_v1710_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (gnss_validity_dur_r17_present) { + j.write_str("gnss-ValidityDuration-r17", gnss_validity_dur_r17.to_string()); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + j.start_obj(); + j.end_obj(); + } + j.end_obj(); +} + +// RRCConnectionResumeComplete-NB-v1610-IEs ::= SEQUENCE +SRSASN_CODE rrc_conn_resume_complete_nb_v1610_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(rlf_info_available_r16_present, 1)); + HANDLE_CODE(bref.pack(anr_info_available_r16_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE rrc_conn_resume_complete_nb_v1610_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(rlf_info_available_r16_present, 1)); + HANDLE_CODE(bref.unpack(anr_info_available_r16_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void rrc_conn_resume_complete_nb_v1610_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (rlf_info_available_r16_present) { + j.write_str("rlf-InfoAvailable-r16", "true"); + } + if (anr_info_available_r16_present) { + j.write_str("anr-InfoAvailable-r16", "true"); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + non_crit_ext.to_json(j); + } + j.end_obj(); +} + // RRCConnectionResumeComplete-NB-v1470-IEs ::= SEQUENCE SRSASN_CODE rrc_conn_resume_complete_nb_v1470_ies_s::pack(bit_ref& bref) const { @@ -16887,6 +22673,9 @@ SRSASN_CODE rrc_conn_resume_complete_nb_v1470_ies_s::pack(bit_ref& bref) const if (meas_result_serv_cell_r14_present) { HANDLE_CODE(meas_result_serv_cell_r14.pack(bref)); } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } return SRSASN_SUCCESS; } @@ -16898,6 +22687,9 @@ SRSASN_CODE rrc_conn_resume_complete_nb_v1470_ies_s::unpack(cbit_ref& bref) if (meas_result_serv_cell_r14_present) { HANDLE_CODE(meas_result_serv_cell_r14.unpack(bref)); } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } return SRSASN_SUCCESS; } @@ -16910,8 +22702,7 @@ void rrc_conn_resume_complete_nb_v1470_ies_s::to_json(json_writer& j) const } if (non_crit_ext_present) { j.write_fieldname("nonCriticalExtension"); - j.start_obj(); - j.end_obj(); + non_crit_ext.to_json(j); } j.end_obj(); } @@ -17071,6 +22862,38 @@ const char* rrc_conn_resume_complete_nb_s::crit_exts_c_::types_opts::to_string() return convert_enum_idx(options, 2, value, "rrc_conn_resume_complete_nb_s::crit_exts_c_::types"); } +// RRCConnectionResumeRequest-5GC-NB-r16-IEs ::= SEQUENCE +SRSASN_CODE rrc_conn_resume_request_minus5_gc_nb_r16_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(resume_id_r16.pack(bref)); + HANDLE_CODE(short_resume_mac_i_r16.pack(bref)); + HANDLE_CODE(resume_cause_r16.pack(bref)); + HANDLE_CODE(cqi_npdcch_r16.pack(bref)); + HANDLE_CODE(spare.pack(bref)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE rrc_conn_resume_request_minus5_gc_nb_r16_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(resume_id_r16.unpack(bref)); + HANDLE_CODE(short_resume_mac_i_r16.unpack(bref)); + HANDLE_CODE(resume_cause_r16.unpack(bref)); + HANDLE_CODE(cqi_npdcch_r16.unpack(bref)); + HANDLE_CODE(spare.unpack(bref)); + + return SRSASN_SUCCESS; +} +void rrc_conn_resume_request_minus5_gc_nb_r16_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_str("resumeID-r16", resume_id_r16.to_string()); + j.write_str("shortResumeMAC-I-r16", short_resume_mac_i_r16.to_string()); + j.write_str("resumeCause-r16", resume_cause_r16.to_string()); + j.write_str("cqi-NPDCCH-r16", cqi_npdcch_r16.to_string()); + j.write_str("spare", spare.to_string()); + j.end_obj(); +} + // RRCConnectionResumeRequest-NB-r13-IEs ::= SEQUENCE SRSASN_CODE rrc_conn_resume_request_nb_r13_ies_s::pack(bit_ref& bref) const { @@ -17079,6 +22902,7 @@ SRSASN_CODE rrc_conn_resume_request_nb_r13_ies_s::pack(bit_ref& bref) const HANDLE_CODE(resume_cause_r13.pack(bref)); HANDLE_CODE(bref.pack(early_contention_resolution_r14, 1)); HANDLE_CODE(cqi_npdcch_r14.pack(bref)); + HANDLE_CODE(bref.pack(anr_info_available_r16, 1)); HANDLE_CODE(spare.pack(bref)); return SRSASN_SUCCESS; @@ -17090,6 +22914,7 @@ SRSASN_CODE rrc_conn_resume_request_nb_r13_ies_s::unpack(cbit_ref& bref) HANDLE_CODE(resume_cause_r13.unpack(bref)); HANDLE_CODE(bref.unpack(early_contention_resolution_r14, 1)); HANDLE_CODE(cqi_npdcch_r14.unpack(bref)); + HANDLE_CODE(bref.unpack(anr_info_available_r16, 1)); HANDLE_CODE(spare.unpack(bref)); return SRSASN_SUCCESS; @@ -17102,6 +22927,7 @@ void rrc_conn_resume_request_nb_r13_ies_s::to_json(json_writer& j) const j.write_str("resumeCause-r13", resume_cause_r13.to_string()); j.write_bool("earlyContentionResolution-r14", early_contention_resolution_r14); j.write_str("cqi-NPDCCH-r14", cqi_npdcch_r14.to_string()); + j.write_bool("anr-InfoAvailable-r16", anr_info_available_r16); j.write_str("spare", spare.to_string()); j.end_obj(); } @@ -17127,18 +22953,83 @@ void rrc_conn_resume_request_nb_s::to_json(json_writer& j) const j.end_obj(); } +void rrc_conn_resume_request_nb_s::crit_exts_c_::destroy_() +{ + switch (type_) { + case types::rrc_conn_resume_request_r13: + c.destroy<rrc_conn_resume_request_nb_r13_ies_s>(); + break; + case types::later: + c.destroy<later_c_>(); + break; + default: + break; + } +} void rrc_conn_resume_request_nb_s::crit_exts_c_::set(types::options e) { + destroy_(); type_ = e; + switch (type_) { + case types::rrc_conn_resume_request_r13: + c.init<rrc_conn_resume_request_nb_r13_ies_s>(); + break; + case types::later: + c.init<later_c_>(); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "rrc_conn_resume_request_nb_s::crit_exts_c_"); + } +} +rrc_conn_resume_request_nb_s::crit_exts_c_::crit_exts_c_(const rrc_conn_resume_request_nb_s::crit_exts_c_& other) +{ + type_ = other.type(); + switch (type_) { + case types::rrc_conn_resume_request_r13: + c.init(other.c.get<rrc_conn_resume_request_nb_r13_ies_s>()); + break; + case types::later: + c.init(other.c.get<later_c_>()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "rrc_conn_resume_request_nb_s::crit_exts_c_"); + } +} +rrc_conn_resume_request_nb_s::crit_exts_c_& +rrc_conn_resume_request_nb_s::crit_exts_c_::operator=(const rrc_conn_resume_request_nb_s::crit_exts_c_& other) +{ + if (this == &other) { + return *this; + } + set(other.type()); + switch (type_) { + case types::rrc_conn_resume_request_r13: + c.set(other.c.get<rrc_conn_resume_request_nb_r13_ies_s>()); + break; + case types::later: + c.set(other.c.get<later_c_>()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "rrc_conn_resume_request_nb_s::crit_exts_c_"); + } + + return *this; } rrc_conn_resume_request_nb_r13_ies_s& rrc_conn_resume_request_nb_s::crit_exts_c_::set_rrc_conn_resume_request_r13() { set(types::rrc_conn_resume_request_r13); - return c; + return c.get<rrc_conn_resume_request_nb_r13_ies_s>(); } -void rrc_conn_resume_request_nb_s::crit_exts_c_::set_crit_exts_future() +rrc_conn_resume_request_nb_s::crit_exts_c_::later_c_& rrc_conn_resume_request_nb_s::crit_exts_c_::set_later() { - set(types::crit_exts_future); + set(types::later); + return c.get<later_c_>(); } void rrc_conn_resume_request_nb_s::crit_exts_c_::to_json(json_writer& j) const { @@ -17146,9 +23037,11 @@ void rrc_conn_resume_request_nb_s::crit_exts_c_::to_json(json_writer& j) const switch (type_) { case types::rrc_conn_resume_request_r13: j.write_fieldname("rrcConnectionResumeRequest-r13"); - c.to_json(j); + c.get<rrc_conn_resume_request_nb_r13_ies_s>().to_json(j); break; - case types::crit_exts_future: + case types::later: + j.write_fieldname("later"); + c.get<later_c_>().to_json(j); break; default: log_invalid_choice_id(type_, "rrc_conn_resume_request_nb_s::crit_exts_c_"); @@ -17160,9 +23053,10 @@ SRSASN_CODE rrc_conn_resume_request_nb_s::crit_exts_c_::pack(bit_ref& bref) cons type_.pack(bref); switch (type_) { case types::rrc_conn_resume_request_r13: - HANDLE_CODE(c.pack(bref)); + HANDLE_CODE(c.get<rrc_conn_resume_request_nb_r13_ies_s>().pack(bref)); break; - case types::crit_exts_future: + case types::later: + HANDLE_CODE(c.get<later_c_>().pack(bref)); break; default: log_invalid_choice_id(type_, "rrc_conn_resume_request_nb_s::crit_exts_c_"); @@ -17177,23 +23071,251 @@ SRSASN_CODE rrc_conn_resume_request_nb_s::crit_exts_c_::unpack(cbit_ref& bref) set(e); switch (type_) { case types::rrc_conn_resume_request_r13: + HANDLE_CODE(c.get<rrc_conn_resume_request_nb_r13_ies_s>().unpack(bref)); + break; + case types::later: + HANDLE_CODE(c.get<later_c_>().unpack(bref)); + break; + default: + log_invalid_choice_id(type_, "rrc_conn_resume_request_nb_s::crit_exts_c_"); + return SRSASN_ERROR_DECODE_FAIL; + } + return SRSASN_SUCCESS; +} + +void rrc_conn_resume_request_nb_s::crit_exts_c_::later_c_::set(types::options e) +{ + type_ = e; +} +rrc_conn_resume_request_minus5_gc_nb_r16_ies_s& +rrc_conn_resume_request_nb_s::crit_exts_c_::later_c_::set_rrc_conn_resume_request_r16() +{ + set(types::rrc_conn_resume_request_r16); + return c; +} +void rrc_conn_resume_request_nb_s::crit_exts_c_::later_c_::set_crit_exts_future() +{ + set(types::crit_exts_future); +} +void rrc_conn_resume_request_nb_s::crit_exts_c_::later_c_::to_json(json_writer& j) const +{ + j.start_obj(); + switch (type_) { + case types::rrc_conn_resume_request_r16: + j.write_fieldname("rrcConnectionResumeRequest-r16"); + c.to_json(j); + break; + case types::crit_exts_future: + break; + default: + log_invalid_choice_id(type_, "rrc_conn_resume_request_nb_s::crit_exts_c_::later_c_"); + } + j.end_obj(); +} +SRSASN_CODE rrc_conn_resume_request_nb_s::crit_exts_c_::later_c_::pack(bit_ref& bref) const +{ + type_.pack(bref); + switch (type_) { + case types::rrc_conn_resume_request_r16: + HANDLE_CODE(c.pack(bref)); + break; + case types::crit_exts_future: + break; + default: + log_invalid_choice_id(type_, "rrc_conn_resume_request_nb_s::crit_exts_c_::later_c_"); + return SRSASN_ERROR_ENCODE_FAIL; + } + return SRSASN_SUCCESS; +} +SRSASN_CODE rrc_conn_resume_request_nb_s::crit_exts_c_::later_c_::unpack(cbit_ref& bref) +{ + types e; + e.unpack(bref); + set(e); + switch (type_) { + case types::rrc_conn_resume_request_r16: HANDLE_CODE(c.unpack(bref)); break; case types::crit_exts_future: break; default: - log_invalid_choice_id(type_, "rrc_conn_resume_request_nb_s::crit_exts_c_"); + log_invalid_choice_id(type_, "rrc_conn_resume_request_nb_s::crit_exts_c_::later_c_"); return SRSASN_ERROR_DECODE_FAIL; } return SRSASN_SUCCESS; } +const char* rrc_conn_resume_request_nb_s::crit_exts_c_::later_c_::types_opts::to_string() const +{ + static const char* options[] = {"rrcConnectionResumeRequest-r16", "criticalExtensionsFuture"}; + return convert_enum_idx(options, 2, value, "rrc_conn_resume_request_nb_s::crit_exts_c_::later_c_::types"); +} + const char* rrc_conn_resume_request_nb_s::crit_exts_c_::types_opts::to_string() const { - static const char* options[] = {"rrcConnectionResumeRequest-r13", "criticalExtensionsFuture"}; + static const char* options[] = {"rrcConnectionResumeRequest-r13", "later"}; return convert_enum_idx(options, 2, value, "rrc_conn_resume_request_nb_s::crit_exts_c_::types"); } +// RRCConnectionSetupComplete-NB-v1710-IEs ::= SEQUENCE +SRSASN_CODE rrc_conn_setup_complete_nb_v1710_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(gnss_validity_dur_r17_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + if (gnss_validity_dur_r17_present) { + HANDLE_CODE(gnss_validity_dur_r17.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE rrc_conn_setup_complete_nb_v1710_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(gnss_validity_dur_r17_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + if (gnss_validity_dur_r17_present) { + HANDLE_CODE(gnss_validity_dur_r17.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void rrc_conn_setup_complete_nb_v1710_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (gnss_validity_dur_r17_present) { + j.write_str("gnss-ValidityDuration-r17", gnss_validity_dur_r17.to_string()); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + j.start_obj(); + j.end_obj(); + } + j.end_obj(); +} + +// RRCConnectionSetupComplete-NB-v1610-IEs ::= SEQUENCE +SRSASN_CODE rrc_conn_setup_complete_nb_v1610_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(ng_minus5_g_s_tmsi_r16_present, 1)); + HANDLE_CODE(bref.pack(registered_amf_r16_present, 1)); + HANDLE_CODE(bref.pack(gummei_type_v1610_present, 1)); + HANDLE_CODE(bref.pack(guami_type_r16_present, 1)); + HANDLE_CODE(bref.pack(s_nssai_list_r16_present, 1)); + HANDLE_CODE(bref.pack(ng_u_data_transfer_r16_present, 1)); + HANDLE_CODE(bref.pack(up_cio_t_minus5_gs_optim_r16_present, 1)); + HANDLE_CODE(bref.pack(rlf_info_available_r16_present, 1)); + HANDLE_CODE(bref.pack(anr_info_available_r16_present, 1)); + HANDLE_CODE(bref.pack(pur_cfg_id_r16_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + if (ng_minus5_g_s_tmsi_r16_present) { + HANDLE_CODE(ng_minus5_g_s_tmsi_r16.pack(bref)); + } + if (registered_amf_r16_present) { + HANDLE_CODE(registered_amf_r16.pack(bref)); + } + if (guami_type_r16_present) { + HANDLE_CODE(guami_type_r16.pack(bref)); + } + if (s_nssai_list_r16_present) { + HANDLE_CODE(pack_dyn_seq_of(bref, s_nssai_list_r16, 1, 8)); + } + if (pur_cfg_id_r16_present) { + HANDLE_CODE(pur_cfg_id_r16.pack(bref)); + } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE rrc_conn_setup_complete_nb_v1610_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(ng_minus5_g_s_tmsi_r16_present, 1)); + HANDLE_CODE(bref.unpack(registered_amf_r16_present, 1)); + HANDLE_CODE(bref.unpack(gummei_type_v1610_present, 1)); + HANDLE_CODE(bref.unpack(guami_type_r16_present, 1)); + HANDLE_CODE(bref.unpack(s_nssai_list_r16_present, 1)); + HANDLE_CODE(bref.unpack(ng_u_data_transfer_r16_present, 1)); + HANDLE_CODE(bref.unpack(up_cio_t_minus5_gs_optim_r16_present, 1)); + HANDLE_CODE(bref.unpack(rlf_info_available_r16_present, 1)); + HANDLE_CODE(bref.unpack(anr_info_available_r16_present, 1)); + HANDLE_CODE(bref.unpack(pur_cfg_id_r16_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + if (ng_minus5_g_s_tmsi_r16_present) { + HANDLE_CODE(ng_minus5_g_s_tmsi_r16.unpack(bref)); + } + if (registered_amf_r16_present) { + HANDLE_CODE(registered_amf_r16.unpack(bref)); + } + if (guami_type_r16_present) { + HANDLE_CODE(guami_type_r16.unpack(bref)); + } + if (s_nssai_list_r16_present) { + HANDLE_CODE(unpack_dyn_seq_of(s_nssai_list_r16, bref, 1, 8)); + } + if (pur_cfg_id_r16_present) { + HANDLE_CODE(pur_cfg_id_r16.unpack(bref)); + } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void rrc_conn_setup_complete_nb_v1610_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (ng_minus5_g_s_tmsi_r16_present) { + j.write_str("ng-5G-S-TMSI-r16", ng_minus5_g_s_tmsi_r16.to_string()); + } + if (registered_amf_r16_present) { + j.write_fieldname("registeredAMF-r16"); + registered_amf_r16.to_json(j); + } + if (gummei_type_v1610_present) { + j.write_str("gummei-Type-v1610", "mappedFrom5G"); + } + if (guami_type_r16_present) { + j.write_str("guami-Type-r16", guami_type_r16.to_string()); + } + if (s_nssai_list_r16_present) { + j.start_array("s-NSSAI-list-r16"); + for (const auto& e1 : s_nssai_list_r16) { + e1.to_json(j); + } + j.end_array(); + } + if (ng_u_data_transfer_r16_present) { + j.write_str("ng-U-DataTransfer-r16", "true"); + } + if (up_cio_t_minus5_gs_optim_r16_present) { + j.write_str("up-CIoT-5GS-Optimisation-r16", "true"); + } + if (rlf_info_available_r16_present) { + j.write_str("rlf-InfoAvailable-r16", "true"); + } + if (anr_info_available_r16_present) { + j.write_str("anr-InfoAvailable-r16", "true"); + } + if (pur_cfg_id_r16_present) { + j.write_str("pur-ConfigID-r16", pur_cfg_id_r16.to_string()); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + non_crit_ext.to_json(j); + } + j.end_obj(); +} + +const char* rrc_conn_setup_complete_nb_v1610_ies_s::guami_type_r16_opts::to_string() const +{ + static const char* options[] = {"native", "mapped"}; + return convert_enum_idx(options, 2, value, "rrc_conn_setup_complete_nb_v1610_ies_s::guami_type_r16_e_"); +} + // RRCConnectionSetupComplete-NB-v1470-IEs ::= SEQUENCE SRSASN_CODE rrc_conn_setup_complete_nb_v1470_ies_s::pack(bit_ref& bref) const { @@ -17203,6 +23325,9 @@ SRSASN_CODE rrc_conn_setup_complete_nb_v1470_ies_s::pack(bit_ref& bref) const if (meas_result_serv_cell_r14_present) { HANDLE_CODE(meas_result_serv_cell_r14.pack(bref)); } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } return SRSASN_SUCCESS; } @@ -17214,6 +23339,9 @@ SRSASN_CODE rrc_conn_setup_complete_nb_v1470_ies_s::unpack(cbit_ref& bref) if (meas_result_serv_cell_r14_present) { HANDLE_CODE(meas_result_serv_cell_r14.unpack(bref)); } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } return SRSASN_SUCCESS; } @@ -17226,8 +23354,7 @@ void rrc_conn_setup_complete_nb_v1470_ies_s::to_json(json_writer& j) const } if (non_crit_ext_present) { j.write_fieldname("nonCriticalExtension"); - j.start_obj(); - j.end_obj(); + non_crit_ext.to_json(j); } j.end_obj(); } @@ -17452,6 +23579,70 @@ const char* rrc_conn_setup_complete_nb_s::crit_exts_c_::types_opts::to_string() return convert_enum_idx(options, 2, value, "rrc_conn_setup_complete_nb_s::crit_exts_c_::types"); } +// RRCEarlyDataRequest-5GC-NB-r16-IEs ::= SEQUENCE +SRSASN_CODE rrc_early_data_request_minus5_gc_nb_r16_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(cqi_npdcch_r16_present, 1)); + HANDLE_CODE(bref.pack(late_non_crit_ext_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + HANDLE_CODE(ng_minus5_g_s_tmsi_r16.pack(bref)); + HANDLE_CODE(establishment_cause_r16.pack(bref)); + if (cqi_npdcch_r16_present) { + HANDLE_CODE(cqi_npdcch_r16.pack(bref)); + } + HANDLE_CODE(ded_info_nas_r16.pack(bref)); + if (late_non_crit_ext_present) { + HANDLE_CODE(late_non_crit_ext.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE rrc_early_data_request_minus5_gc_nb_r16_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(cqi_npdcch_r16_present, 1)); + HANDLE_CODE(bref.unpack(late_non_crit_ext_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + HANDLE_CODE(ng_minus5_g_s_tmsi_r16.unpack(bref)); + HANDLE_CODE(establishment_cause_r16.unpack(bref)); + if (cqi_npdcch_r16_present) { + HANDLE_CODE(cqi_npdcch_r16.unpack(bref)); + } + HANDLE_CODE(ded_info_nas_r16.unpack(bref)); + if (late_non_crit_ext_present) { + HANDLE_CODE(late_non_crit_ext.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void rrc_early_data_request_minus5_gc_nb_r16_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_str("ng-5G-S-TMSI-r16", ng_minus5_g_s_tmsi_r16.to_string()); + j.write_str("establishmentCause-r16", establishment_cause_r16.to_string()); + if (cqi_npdcch_r16_present) { + j.write_str("cqi-NPDCCH-r16", cqi_npdcch_r16.to_string()); + } + j.write_str("dedicatedInfoNAS-r16", ded_info_nas_r16.to_string()); + if (late_non_crit_ext_present) { + j.write_str("lateNonCriticalExtension", late_non_crit_ext.to_string()); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + j.start_obj(); + j.end_obj(); + } + j.end_obj(); +} + +const char* rrc_early_data_request_minus5_gc_nb_r16_ies_s::establishment_cause_r16_opts::to_string() const +{ + static const char* options[] = {"mo-Data", "mo-ExceptionData", "mt-Access", "spare1"}; + return convert_enum_idx( + options, 4, value, "rrc_early_data_request_minus5_gc_nb_r16_ies_s::establishment_cause_r16_e_"); +} + // RRCEarlyDataRequest-NB-v1590-IEs ::= SEQUENCE SRSASN_CODE rrc_early_data_request_nb_v1590_ies_s::pack(bit_ref& bref) const { @@ -17543,7 +23734,7 @@ void rrc_early_data_request_nb_r15_ies_s::to_json(json_writer& j) const const char* rrc_early_data_request_nb_r15_ies_s::establishment_cause_r15_opts::to_string() const { - static const char* options[] = {"mo-Data", "mo-ExceptionData", "delayTolerantAccess", "spare1"}; + static const char* options[] = {"mo-Data", "mo-ExceptionData", "delayTolerantAccess", "mt-Access-v1610"}; return convert_enum_idx(options, 4, value, "rrc_early_data_request_nb_r15_ies_s::establishment_cause_r15_e_"); } @@ -17568,18 +23759,83 @@ void rrc_early_data_request_nb_r15_s::to_json(json_writer& j) const j.end_obj(); } +void rrc_early_data_request_nb_r15_s::crit_exts_c_::destroy_() +{ + switch (type_) { + case types::rrc_early_data_request_r15: + c.destroy<rrc_early_data_request_nb_r15_ies_s>(); + break; + case types::later: + c.destroy<later_c_>(); + break; + default: + break; + } +} void rrc_early_data_request_nb_r15_s::crit_exts_c_::set(types::options e) { + destroy_(); type_ = e; + switch (type_) { + case types::rrc_early_data_request_r15: + c.init<rrc_early_data_request_nb_r15_ies_s>(); + break; + case types::later: + c.init<later_c_>(); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "rrc_early_data_request_nb_r15_s::crit_exts_c_"); + } +} +rrc_early_data_request_nb_r15_s::crit_exts_c_::crit_exts_c_(const rrc_early_data_request_nb_r15_s::crit_exts_c_& other) +{ + type_ = other.type(); + switch (type_) { + case types::rrc_early_data_request_r15: + c.init(other.c.get<rrc_early_data_request_nb_r15_ies_s>()); + break; + case types::later: + c.init(other.c.get<later_c_>()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "rrc_early_data_request_nb_r15_s::crit_exts_c_"); + } +} +rrc_early_data_request_nb_r15_s::crit_exts_c_& +rrc_early_data_request_nb_r15_s::crit_exts_c_::operator=(const rrc_early_data_request_nb_r15_s::crit_exts_c_& other) +{ + if (this == &other) { + return *this; + } + set(other.type()); + switch (type_) { + case types::rrc_early_data_request_r15: + c.set(other.c.get<rrc_early_data_request_nb_r15_ies_s>()); + break; + case types::later: + c.set(other.c.get<later_c_>()); + break; + case types::nulltype: + break; + default: + log_invalid_choice_id(type_, "rrc_early_data_request_nb_r15_s::crit_exts_c_"); + } + + return *this; } rrc_early_data_request_nb_r15_ies_s& rrc_early_data_request_nb_r15_s::crit_exts_c_::set_rrc_early_data_request_r15() { set(types::rrc_early_data_request_r15); - return c; + return c.get<rrc_early_data_request_nb_r15_ies_s>(); } -void rrc_early_data_request_nb_r15_s::crit_exts_c_::set_crit_exts_future() +rrc_early_data_request_nb_r15_s::crit_exts_c_::later_c_& rrc_early_data_request_nb_r15_s::crit_exts_c_::set_later() { - set(types::crit_exts_future); + set(types::later); + return c.get<later_c_>(); } void rrc_early_data_request_nb_r15_s::crit_exts_c_::to_json(json_writer& j) const { @@ -17587,9 +23843,11 @@ void rrc_early_data_request_nb_r15_s::crit_exts_c_::to_json(json_writer& j) cons switch (type_) { case types::rrc_early_data_request_r15: j.write_fieldname("rrcEarlyDataRequest-r15"); - c.to_json(j); + c.get<rrc_early_data_request_nb_r15_ies_s>().to_json(j); break; - case types::crit_exts_future: + case types::later: + j.write_fieldname("later"); + c.get<later_c_>().to_json(j); break; default: log_invalid_choice_id(type_, "rrc_early_data_request_nb_r15_s::crit_exts_c_"); @@ -17601,9 +23859,10 @@ SRSASN_CODE rrc_early_data_request_nb_r15_s::crit_exts_c_::pack(bit_ref& bref) c type_.pack(bref); switch (type_) { case types::rrc_early_data_request_r15: - HANDLE_CODE(c.pack(bref)); + HANDLE_CODE(c.get<rrc_early_data_request_nb_r15_ies_s>().pack(bref)); break; - case types::crit_exts_future: + case types::later: + HANDLE_CODE(c.get<later_c_>().pack(bref)); break; default: log_invalid_choice_id(type_, "rrc_early_data_request_nb_r15_s::crit_exts_c_"); @@ -17618,20 +23877,89 @@ SRSASN_CODE rrc_early_data_request_nb_r15_s::crit_exts_c_::unpack(cbit_ref& bref set(e); switch (type_) { case types::rrc_early_data_request_r15: + HANDLE_CODE(c.get<rrc_early_data_request_nb_r15_ies_s>().unpack(bref)); + break; + case types::later: + HANDLE_CODE(c.get<later_c_>().unpack(bref)); + break; + default: + log_invalid_choice_id(type_, "rrc_early_data_request_nb_r15_s::crit_exts_c_"); + return SRSASN_ERROR_DECODE_FAIL; + } + return SRSASN_SUCCESS; +} + +void rrc_early_data_request_nb_r15_s::crit_exts_c_::later_c_::set(types::options e) +{ + type_ = e; +} +rrc_early_data_request_minus5_gc_nb_r16_ies_s& +rrc_early_data_request_nb_r15_s::crit_exts_c_::later_c_::set_rrc_early_data_request_r16() +{ + set(types::rrc_early_data_request_r16); + return c; +} +void rrc_early_data_request_nb_r15_s::crit_exts_c_::later_c_::set_crit_exts_future() +{ + set(types::crit_exts_future); +} +void rrc_early_data_request_nb_r15_s::crit_exts_c_::later_c_::to_json(json_writer& j) const +{ + j.start_obj(); + switch (type_) { + case types::rrc_early_data_request_r16: + j.write_fieldname("rrcEarlyDataRequest-r16"); + c.to_json(j); + break; + case types::crit_exts_future: + break; + default: + log_invalid_choice_id(type_, "rrc_early_data_request_nb_r15_s::crit_exts_c_::later_c_"); + } + j.end_obj(); +} +SRSASN_CODE rrc_early_data_request_nb_r15_s::crit_exts_c_::later_c_::pack(bit_ref& bref) const +{ + type_.pack(bref); + switch (type_) { + case types::rrc_early_data_request_r16: + HANDLE_CODE(c.pack(bref)); + break; + case types::crit_exts_future: + break; + default: + log_invalid_choice_id(type_, "rrc_early_data_request_nb_r15_s::crit_exts_c_::later_c_"); + return SRSASN_ERROR_ENCODE_FAIL; + } + return SRSASN_SUCCESS; +} +SRSASN_CODE rrc_early_data_request_nb_r15_s::crit_exts_c_::later_c_::unpack(cbit_ref& bref) +{ + types e; + e.unpack(bref); + set(e); + switch (type_) { + case types::rrc_early_data_request_r16: HANDLE_CODE(c.unpack(bref)); break; case types::crit_exts_future: break; default: - log_invalid_choice_id(type_, "rrc_early_data_request_nb_r15_s::crit_exts_c_"); + log_invalid_choice_id(type_, "rrc_early_data_request_nb_r15_s::crit_exts_c_::later_c_"); return SRSASN_ERROR_DECODE_FAIL; } return SRSASN_SUCCESS; } +const char* rrc_early_data_request_nb_r15_s::crit_exts_c_::later_c_::types_opts::to_string() const +{ + static const char* options[] = {"rrcEarlyDataRequest-r16", "criticalExtensionsFuture"}; + return convert_enum_idx(options, 2, value, "rrc_early_data_request_nb_r15_s::crit_exts_c_::later_c_::types"); +} + const char* rrc_early_data_request_nb_r15_s::crit_exts_c_::types_opts::to_string() const { - static const char* options[] = {"rrcEarlyDataRequest-r15", "criticalExtensionsFuture"}; + static const char* options[] = {"rrcEarlyDataRequest-r15", "later"}; return convert_enum_idx(options, 2, value, "rrc_early_data_request_nb_r15_s::crit_exts_c_::types"); } @@ -18369,6 +24697,61 @@ const char* sc_mtch_info_nb_r14_s::npdcch_offset_sc_mtch_r14_opts::to_number_str return convert_enum_idx(options, 8, value, "sc_mtch_info_nb_r14_s::npdcch_offset_sc_mtch_r14_e_"); } +// SCPTMConfiguration-NB-v1610 ::= SEQUENCE +SRSASN_CODE scptm_cfg_nb_v1610_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(multi_tb_gap_r16_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + HANDLE_CODE(pack_dyn_seq_of(bref, sc_mtch_info_list_multi_tb_r16, 0, 64)); + if (multi_tb_gap_r16_present) { + HANDLE_CODE(multi_tb_gap_r16.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE scptm_cfg_nb_v1610_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(multi_tb_gap_r16_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + HANDLE_CODE(unpack_dyn_seq_of(sc_mtch_info_list_multi_tb_r16, bref, 0, 64)); + if (multi_tb_gap_r16_present) { + HANDLE_CODE(multi_tb_gap_r16.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void scptm_cfg_nb_v1610_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.start_array("sc-mtch-InfoListMultiTB-r16"); + for (const auto& e1 : sc_mtch_info_list_multi_tb_r16) { + e1.to_json(j); + } + j.end_array(); + if (multi_tb_gap_r16_present) { + j.write_str("multiTB-Gap-r16", multi_tb_gap_r16.to_string()); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + j.start_obj(); + j.end_obj(); + } + j.end_obj(); +} + +const char* scptm_cfg_nb_v1610_s::multi_tb_gap_r16_opts::to_string() const +{ + static const char* options[] = {"sf16", "sf32", "sf64", "sf128"}; + return convert_enum_idx(options, 4, value, "scptm_cfg_nb_v1610_s::multi_tb_gap_r16_e_"); +} +uint8_t scptm_cfg_nb_v1610_s::multi_tb_gap_r16_opts::to_number() const +{ + static const uint8_t options[] = {16, 32, 64, 128}; + return map_enum_number(options, 4, value, "scptm_cfg_nb_v1610_s::multi_tb_gap_r16_e_"); +} + // SCPTMConfiguration-NB-r14 ::= SEQUENCE SRSASN_CODE scptm_cfg_nb_r14_s::pack(bit_ref& bref) const { @@ -18383,6 +24766,9 @@ SRSASN_CODE scptm_cfg_nb_r14_s::pack(bit_ref& bref) const if (late_non_crit_ext_present) { HANDLE_CODE(late_non_crit_ext.pack(bref)); } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } return SRSASN_SUCCESS; } @@ -18399,6 +24785,9 @@ SRSASN_CODE scptm_cfg_nb_r14_s::unpack(cbit_ref& bref) if (late_non_crit_ext_present) { HANDLE_CODE(late_non_crit_ext.unpack(bref)); } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } return SRSASN_SUCCESS; } @@ -18422,8 +24811,7 @@ void scptm_cfg_nb_r14_s::to_json(json_writer& j) const } if (non_crit_ext_present) { j.write_fieldname("nonCriticalExtension"); - j.start_obj(); - j.end_obj(); + non_crit_ext.to_json(j); } j.end_obj(); } @@ -18690,6 +25078,667 @@ void tdd_ue_cap_nb_r15_s::to_json(json_writer& j) const j.end_obj(); } +// PhyLayerParameters-NB-v1700 ::= SEQUENCE +SRSASN_CODE phy_layer_params_nb_v1700_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(npdsch_minus16_qam_r17_present, 1)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE phy_layer_params_nb_v1700_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(npdsch_minus16_qam_r17_present, 1)); + + return SRSASN_SUCCESS; +} +void phy_layer_params_nb_v1700_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (npdsch_minus16_qam_r17_present) { + j.write_str("npdsch-16QAM-r17", "supported"); + } + j.end_obj(); +} + +// TDD-UE-Capability-NB-v1710 ::= SEQUENCE +SRSASN_CODE tdd_ue_cap_nb_v1710_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(phy_layer_params_v1710_present, 1)); + + if (phy_layer_params_v1710_present) { + HANDLE_CODE(phy_layer_params_v1710.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE tdd_ue_cap_nb_v1710_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(phy_layer_params_v1710_present, 1)); + + if (phy_layer_params_v1710_present) { + HANDLE_CODE(phy_layer_params_v1710.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void tdd_ue_cap_nb_v1710_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (phy_layer_params_v1710_present) { + j.write_fieldname("phyLayerParameters-v1710"); + phy_layer_params_v1710.to_json(j); + } + j.end_obj(); +} + +// NTN-Parameters-NB-v1720 ::= SEQUENCE +SRSASN_CODE ntn_params_nb_v1720_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(ntn_segmented_precompensation_gaps_r17_present, 1)); + + if (ntn_segmented_precompensation_gaps_r17_present) { + HANDLE_CODE(ntn_segmented_precompensation_gaps_r17.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE ntn_params_nb_v1720_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(ntn_segmented_precompensation_gaps_r17_present, 1)); + + if (ntn_segmented_precompensation_gaps_r17_present) { + HANDLE_CODE(ntn_segmented_precompensation_gaps_r17.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void ntn_params_nb_v1720_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (ntn_segmented_precompensation_gaps_r17_present) { + j.write_str("ntn-SegmentedPrecompensationGaps-r17", ntn_segmented_precompensation_gaps_r17.to_string()); + } + j.end_obj(); +} + +const char* ntn_params_nb_v1720_s::ntn_segmented_precompensation_gaps_r17_opts::to_string() const +{ + static const char* options[] = {"sym1", "sl1", "sl2"}; + return convert_enum_idx(options, 3, value, "ntn_params_nb_v1720_s::ntn_segmented_precompensation_gaps_r17_e_"); +} + +// MeasParameters-NB-v1710 ::= SEQUENCE +SRSASN_CODE meas_params_nb_v1710_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(conn_mode_meas_intra_freq_r17_present, 1)); + HANDLE_CODE(bref.pack(conn_mode_meas_inter_freq_r17_present, 1)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE meas_params_nb_v1710_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(conn_mode_meas_intra_freq_r17_present, 1)); + HANDLE_CODE(bref.unpack(conn_mode_meas_inter_freq_r17_present, 1)); + + return SRSASN_SUCCESS; +} +void meas_params_nb_v1710_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (conn_mode_meas_intra_freq_r17_present) { + j.write_str("connModeMeasIntraFreq-r17", "supported"); + } + if (conn_mode_meas_inter_freq_r17_present) { + j.write_str("connModeMeasInterFreq-r17", "supported"); + } + j.end_obj(); +} + +// UE-Capability-NB-v1720-IEs ::= SEQUENCE +SRSASN_CODE ue_cap_nb_v1720_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + HANDLE_CODE(ntn_params_v1720.pack(bref)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE ue_cap_nb_v1720_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + HANDLE_CODE(ntn_params_v1720.unpack(bref)); + + return SRSASN_SUCCESS; +} +void ue_cap_nb_v1720_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_fieldname("ntn-Parameters-v1720"); + ntn_params_v1720.to_json(j); + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + j.start_obj(); + j.end_obj(); + } + j.end_obj(); +} + +// NTN-Parameters-NB-r17 ::= SEQUENCE +SRSASN_CODE ntn_params_nb_r17_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(ntn_connect_epc_r17_present, 1)); + HANDLE_CODE(bref.pack(ntn_ta_report_r17_present, 1)); + HANDLE_CODE(bref.pack(ntn_pur_timer_delay_r17_present, 1)); + HANDLE_CODE(bref.pack(ntn_offset_timing_enh_r17_present, 1)); + HANDLE_CODE(bref.pack(ntn_scenario_support_r17_present, 1)); + + if (ntn_scenario_support_r17_present) { + HANDLE_CODE(ntn_scenario_support_r17.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE ntn_params_nb_r17_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(ntn_connect_epc_r17_present, 1)); + HANDLE_CODE(bref.unpack(ntn_ta_report_r17_present, 1)); + HANDLE_CODE(bref.unpack(ntn_pur_timer_delay_r17_present, 1)); + HANDLE_CODE(bref.unpack(ntn_offset_timing_enh_r17_present, 1)); + HANDLE_CODE(bref.unpack(ntn_scenario_support_r17_present, 1)); + + if (ntn_scenario_support_r17_present) { + HANDLE_CODE(ntn_scenario_support_r17.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void ntn_params_nb_r17_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (ntn_connect_epc_r17_present) { + j.write_str("ntn-Connectivity-EPC-r17", "supported"); + } + if (ntn_ta_report_r17_present) { + j.write_str("ntn-TA-Report-r17", "supported"); + } + if (ntn_pur_timer_delay_r17_present) { + j.write_str("ntn-PUR-TimerDelay-r17", "supported"); + } + if (ntn_offset_timing_enh_r17_present) { + j.write_str("ntn-OffsetTimingEnh-r17", "supported"); + } + if (ntn_scenario_support_r17_present) { + j.write_str("ntn-ScenarioSupport-r17", ntn_scenario_support_r17.to_string()); + } + j.end_obj(); +} + +const char* ntn_params_nb_r17_s::ntn_scenario_support_r17_opts::to_string() const +{ + static const char* options[] = {"ngso", "gso"}; + return convert_enum_idx(options, 2, value, "ntn_params_nb_r17_s::ntn_scenario_support_r17_e_"); +} + +// UE-Capability-NB-v1710-IEs ::= SEQUENCE +SRSASN_CODE ue_cap_nb_v1710_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(meas_params_v1710_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + if (meas_params_v1710_present) { + HANDLE_CODE(meas_params_v1710.pack(bref)); + } + HANDLE_CODE(rf_params_v1710.pack(bref)); + HANDLE_CODE(tdd_ue_cap_v1710.pack(bref)); + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE ue_cap_nb_v1710_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(meas_params_v1710_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + if (meas_params_v1710_present) { + HANDLE_CODE(meas_params_v1710.unpack(bref)); + } + HANDLE_CODE(rf_params_v1710.unpack(bref)); + HANDLE_CODE(tdd_ue_cap_v1710.unpack(bref)); + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void ue_cap_nb_v1710_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (meas_params_v1710_present) { + j.write_fieldname("measParameters-v1710"); + meas_params_v1710.to_json(j); + } + j.write_fieldname("rf-Parameters-v1710"); + rf_params_v1710.to_json(j); + j.write_fieldname("tdd-UE-Capability-v1710"); + tdd_ue_cap_v1710.to_json(j); + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + non_crit_ext.to_json(j); + } + j.end_obj(); +} + +// UE-Capability-NB-v1700-IEs ::= SEQUENCE +SRSASN_CODE ue_cap_nb_v1700_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(coverage_based_paging_r17_present, 1)); + HANDLE_CODE(bref.pack(ntn_params_r17_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + HANDLE_CODE(phy_layer_params_v1700.pack(bref)); + if (ntn_params_r17_present) { + HANDLE_CODE(ntn_params_r17.pack(bref)); + } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE ue_cap_nb_v1700_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(coverage_based_paging_r17_present, 1)); + HANDLE_CODE(bref.unpack(ntn_params_r17_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + HANDLE_CODE(phy_layer_params_v1700.unpack(bref)); + if (ntn_params_r17_present) { + HANDLE_CODE(ntn_params_r17.unpack(bref)); + } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void ue_cap_nb_v1700_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (coverage_based_paging_r17_present) { + j.write_str("coverageBasedPaging-r17", "supported"); + } + j.write_fieldname("phyLayerParameters-v1700"); + phy_layer_params_v1700.to_json(j); + if (ntn_params_r17_present) { + j.write_fieldname("ntn-Parameters-r17"); + ntn_params_r17.to_json(j); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + non_crit_ext.to_json(j); + } + j.end_obj(); +} + +// MAC-Parameters-NB-v1610 ::= SEQUENCE +SRSASN_CODE mac_params_nb_v1610_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(rai_support_enh_r16_present, 1)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE mac_params_nb_v1610_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(rai_support_enh_r16_present, 1)); + + return SRSASN_SUCCESS; +} +void mac_params_nb_v1610_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (rai_support_enh_r16_present) { + j.write_str("rai-SupportEnh-r16", "supported"); + } + j.end_obj(); +} + +// MeasParameters-NB-r16 ::= SEQUENCE +SRSASN_CODE meas_params_nb_r16_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(dl_ch_quality_report_r16_present, 1)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE meas_params_nb_r16_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(dl_ch_quality_report_r16_present, 1)); + + return SRSASN_SUCCESS; +} +void meas_params_nb_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (dl_ch_quality_report_r16_present) { + j.write_str("dl-ChannelQualityReporting-r16", "supported"); + } + j.end_obj(); +} + +// PUR-Parameters-NB-r16 ::= SEQUENCE +SRSASN_CODE pur_params_nb_r16_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(pur_cp_epc_r16_present, 1)); + HANDLE_CODE(bref.pack(pur_cp_minus5_gc_r16_present, 1)); + HANDLE_CODE(bref.pack(pur_up_epc_r16_present, 1)); + HANDLE_CODE(bref.pack(pur_up_minus5_gc_r16_present, 1)); + HANDLE_CODE(bref.pack(pur_nrsrp_validation_r16_present, 1)); + HANDLE_CODE(bref.pack(pur_cp_l1_ack_r16_present, 1)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE pur_params_nb_r16_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(pur_cp_epc_r16_present, 1)); + HANDLE_CODE(bref.unpack(pur_cp_minus5_gc_r16_present, 1)); + HANDLE_CODE(bref.unpack(pur_up_epc_r16_present, 1)); + HANDLE_CODE(bref.unpack(pur_up_minus5_gc_r16_present, 1)); + HANDLE_CODE(bref.unpack(pur_nrsrp_validation_r16_present, 1)); + HANDLE_CODE(bref.unpack(pur_cp_l1_ack_r16_present, 1)); + + return SRSASN_SUCCESS; +} +void pur_params_nb_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (pur_cp_epc_r16_present) { + j.write_str("pur-CP-EPC-r16", "supported"); + } + if (pur_cp_minus5_gc_r16_present) { + j.write_str("pur-CP-5GC-r16", "supported"); + } + if (pur_up_epc_r16_present) { + j.write_str("pur-UP-EPC-r16", "supported"); + } + if (pur_up_minus5_gc_r16_present) { + j.write_str("pur-UP-5GC-r16", "supported"); + } + if (pur_nrsrp_validation_r16_present) { + j.write_str("pur-NRSRP-Validation-r16", "supported"); + } + if (pur_cp_l1_ack_r16_present) { + j.write_str("pur-CP-L1Ack-r16", "supported"); + } + j.end_obj(); +} + +// PhyLayerParameters-NB-v1610 ::= SEQUENCE +SRSASN_CODE phy_layer_params_nb_v1610_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(npdsch_multi_tb_r16_present, 1)); + HANDLE_CODE(bref.pack(npdsch_multi_tb_interleaving_r16_present, 1)); + HANDLE_CODE(bref.pack(npusch_multi_tb_r16_present, 1)); + HANDLE_CODE(bref.pack(npusch_multi_tb_interleaving_r16_present, 1)); + HANDLE_CODE(bref.pack(multi_tb_harq_ack_bundling_r16_present, 1)); + HANDLE_CODE(bref.pack(slot_symbol_res_resv_dl_r16_present, 1)); + HANDLE_CODE(bref.pack(slot_symbol_res_resv_ul_r16_present, 1)); + HANDLE_CODE(bref.pack(sf_res_resv_dl_r16_present, 1)); + HANDLE_CODE(bref.pack(sf_res_resv_ul_r16_present, 1)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE phy_layer_params_nb_v1610_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(npdsch_multi_tb_r16_present, 1)); + HANDLE_CODE(bref.unpack(npdsch_multi_tb_interleaving_r16_present, 1)); + HANDLE_CODE(bref.unpack(npusch_multi_tb_r16_present, 1)); + HANDLE_CODE(bref.unpack(npusch_multi_tb_interleaving_r16_present, 1)); + HANDLE_CODE(bref.unpack(multi_tb_harq_ack_bundling_r16_present, 1)); + HANDLE_CODE(bref.unpack(slot_symbol_res_resv_dl_r16_present, 1)); + HANDLE_CODE(bref.unpack(slot_symbol_res_resv_ul_r16_present, 1)); + HANDLE_CODE(bref.unpack(sf_res_resv_dl_r16_present, 1)); + HANDLE_CODE(bref.unpack(sf_res_resv_ul_r16_present, 1)); + + return SRSASN_SUCCESS; +} +void phy_layer_params_nb_v1610_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (npdsch_multi_tb_r16_present) { + j.write_str("npdsch-MultiTB-r16", "supported"); + } + if (npdsch_multi_tb_interleaving_r16_present) { + j.write_str("npdsch-MultiTB-Interleaving-r16", "supported"); + } + if (npusch_multi_tb_r16_present) { + j.write_str("npusch-MultiTB-r16", "supported"); + } + if (npusch_multi_tb_interleaving_r16_present) { + j.write_str("npusch-MultiTB-Interleaving-r16", "supported"); + } + if (multi_tb_harq_ack_bundling_r16_present) { + j.write_str("multiTB-HARQ-AckBundling-r16", "supported"); + } + if (slot_symbol_res_resv_dl_r16_present) { + j.write_str("slotSymbolResourceResvDL-r16", "supported"); + } + if (slot_symbol_res_resv_ul_r16_present) { + j.write_str("slotSymbolResourceResvUL-r16", "supported"); + } + if (sf_res_resv_dl_r16_present) { + j.write_str("subframeResourceResvDL-r16", "supported"); + } + if (sf_res_resv_ul_r16_present) { + j.write_str("subframeResourceResvUL-r16", "supported"); + } + j.end_obj(); +} + +// SON-Parameters-NB-r16 ::= SEQUENCE +SRSASN_CODE son_params_nb_r16_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(anr_report_r16_present, 1)); + HANDLE_CODE(bref.pack(rach_report_r16_present, 1)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE son_params_nb_r16_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(anr_report_r16_present, 1)); + HANDLE_CODE(bref.unpack(rach_report_r16_present, 1)); + + return SRSASN_SUCCESS; +} +void son_params_nb_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (anr_report_r16_present) { + j.write_str("anr-Report-r16", "supported"); + } + if (rach_report_r16_present) { + j.write_str("rach-Report-r16", "supported"); + } + j.end_obj(); +} + +// TDD-UE-Capability-NB-v1610 ::= SEQUENCE +SRSASN_CODE tdd_ue_cap_nb_v1610_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(slot_symbol_res_resv_dl_r16_present, 1)); + HANDLE_CODE(bref.pack(slot_symbol_res_resv_ul_r16_present, 1)); + HANDLE_CODE(bref.pack(sf_res_resv_dl_r16_present, 1)); + HANDLE_CODE(bref.pack(sf_res_resv_ul_r16_present, 1)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE tdd_ue_cap_nb_v1610_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(slot_symbol_res_resv_dl_r16_present, 1)); + HANDLE_CODE(bref.unpack(slot_symbol_res_resv_ul_r16_present, 1)); + HANDLE_CODE(bref.unpack(sf_res_resv_dl_r16_present, 1)); + HANDLE_CODE(bref.unpack(sf_res_resv_ul_r16_present, 1)); + + return SRSASN_SUCCESS; +} +void tdd_ue_cap_nb_v1610_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (slot_symbol_res_resv_dl_r16_present) { + j.write_str("slotSymbolResourceResvDL-r16", "supported"); + } + if (slot_symbol_res_resv_ul_r16_present) { + j.write_str("slotSymbolResourceResvUL-r16", "supported"); + } + if (sf_res_resv_dl_r16_present) { + j.write_str("subframeResourceResvDL-r16", "supported"); + } + if (sf_res_resv_ul_r16_present) { + j.write_str("subframeResourceResvUL-r16", "supported"); + } + j.end_obj(); +} + +// UE-Capability-NB-v16x0-IEs ::= SEQUENCE +SRSASN_CODE ue_cap_nb_v16x0_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(late_non_crit_ext_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + if (late_non_crit_ext_present) { + HANDLE_CODE(late_non_crit_ext.pack(bref)); + } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE ue_cap_nb_v16x0_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(late_non_crit_ext_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + if (late_non_crit_ext_present) { + HANDLE_CODE(late_non_crit_ext.unpack(bref)); + } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void ue_cap_nb_v16x0_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (late_non_crit_ext_present) { + j.write_str("lateNonCriticalExtension", late_non_crit_ext.to_string()); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + non_crit_ext.to_json(j); + } + j.end_obj(); +} + +// UE-Capability-NB-v1610-IEs ::= SEQUENCE +SRSASN_CODE ue_cap_nb_v1610_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(early_security_reactivation_r16_present, 1)); + HANDLE_CODE(bref.pack(early_data_up_minus5_gc_r16_present, 1)); + HANDLE_CODE(bref.pack(pur_params_r16_present, 1)); + HANDLE_CODE(bref.pack(phy_layer_params_v1610_present, 1)); + HANDLE_CODE(bref.pack(son_params_r16_present, 1)); + HANDLE_CODE(bref.pack(tdd_ue_cap_v1610_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + if (pur_params_r16_present) { + HANDLE_CODE(pur_params_r16.pack(bref)); + } + HANDLE_CODE(mac_params_v1610.pack(bref)); + if (phy_layer_params_v1610_present) { + HANDLE_CODE(phy_layer_params_v1610.pack(bref)); + } + if (son_params_r16_present) { + HANDLE_CODE(son_params_r16.pack(bref)); + } + HANDLE_CODE(meas_params_r16.pack(bref)); + if (tdd_ue_cap_v1610_present) { + HANDLE_CODE(tdd_ue_cap_v1610.pack(bref)); + } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE ue_cap_nb_v1610_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(early_security_reactivation_r16_present, 1)); + HANDLE_CODE(bref.unpack(early_data_up_minus5_gc_r16_present, 1)); + HANDLE_CODE(bref.unpack(pur_params_r16_present, 1)); + HANDLE_CODE(bref.unpack(phy_layer_params_v1610_present, 1)); + HANDLE_CODE(bref.unpack(son_params_r16_present, 1)); + HANDLE_CODE(bref.unpack(tdd_ue_cap_v1610_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + if (pur_params_r16_present) { + HANDLE_CODE(pur_params_r16.unpack(bref)); + } + HANDLE_CODE(mac_params_v1610.unpack(bref)); + if (phy_layer_params_v1610_present) { + HANDLE_CODE(phy_layer_params_v1610.unpack(bref)); + } + if (son_params_r16_present) { + HANDLE_CODE(son_params_r16.unpack(bref)); + } + HANDLE_CODE(meas_params_r16.unpack(bref)); + if (tdd_ue_cap_v1610_present) { + HANDLE_CODE(tdd_ue_cap_v1610.unpack(bref)); + } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void ue_cap_nb_v1610_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (early_security_reactivation_r16_present) { + j.write_str("earlySecurityReactivation-r16", "supported"); + } + if (early_data_up_minus5_gc_r16_present) { + j.write_str("earlyData-UP-5GC-r16", "supported"); + } + if (pur_params_r16_present) { + j.write_fieldname("pur-Parameters-r16"); + pur_params_r16.to_json(j); + } + j.write_fieldname("mac-Parameters-v1610"); + mac_params_v1610.to_json(j); + if (phy_layer_params_v1610_present) { + j.write_fieldname("phyLayerParameters-v1610"); + phy_layer_params_v1610.to_json(j); + } + if (son_params_r16_present) { + j.write_fieldname("son-Parameters-r16"); + son_params_r16.to_json(j); + } + j.write_fieldname("measParameters-r16"); + meas_params_r16.to_json(j); + if (tdd_ue_cap_v1610_present) { + j.write_fieldname("tdd-UE-Capability-v1610"); + tdd_ue_cap_v1610.to_json(j); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + non_crit_ext.to_json(j); + } + j.end_obj(); +} + // MAC-Parameters-NB-v1530 ::= SEQUENCE SRSASN_CODE mac_params_nb_v1530_s::pack(bit_ref& bref) const { @@ -18734,6 +25783,48 @@ void rlc_params_nb_r15_s::to_json(json_writer& j) const j.end_obj(); } +// UE-Capability-NB-v15x0-IEs ::= SEQUENCE +SRSASN_CODE ue_cap_nb_v15x0_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(late_non_crit_ext_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + if (late_non_crit_ext_present) { + HANDLE_CODE(late_non_crit_ext.pack(bref)); + } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE ue_cap_nb_v15x0_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(late_non_crit_ext_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + if (late_non_crit_ext_present) { + HANDLE_CODE(late_non_crit_ext.unpack(bref)); + } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void ue_cap_nb_v15x0_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (late_non_crit_ext_present) { + j.write_str("lateNonCriticalExtension", late_non_crit_ext.to_string()); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + non_crit_ext.to_json(j); + } + j.end_obj(); +} + // UE-Capability-NB-v1530-IEs ::= SEQUENCE SRSASN_CODE ue_cap_nb_v1530_ies_s::pack(bit_ref& bref) const { @@ -18750,6 +25841,9 @@ SRSASN_CODE ue_cap_nb_v1530_ies_s::pack(bit_ref& bref) const if (tdd_ue_cap_r15_present) { HANDLE_CODE(tdd_ue_cap_r15.pack(bref)); } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } return SRSASN_SUCCESS; } @@ -18768,6 +25862,9 @@ SRSASN_CODE ue_cap_nb_v1530_ies_s::unpack(cbit_ref& bref) if (tdd_ue_cap_r15_present) { HANDLE_CODE(tdd_ue_cap_r15.unpack(bref)); } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } return SRSASN_SUCCESS; } @@ -18791,8 +25888,7 @@ void ue_cap_nb_v1530_ies_s::to_json(json_writer& j) const } if (non_crit_ext_present) { j.write_fieldname("nonCriticalExtension"); - j.start_obj(); - j.end_obj(); + non_crit_ext.to_json(j); } j.end_obj(); } @@ -19030,6 +26126,9 @@ SRSASN_CODE ue_radio_paging_info_nb_r13_s::pack(bit_ref& bref) const group_flags[1] |= wake_up_signal_r15_present; group_flags[1] |= wake_up_signal_min_gap_e_drx_r15_present; group_flags[1] |= multi_carrier_paging_tdd_r15_present; + group_flags[2] |= ue_category_nb_r16_present; + group_flags[2] |= group_wake_up_signal_r16_present; + group_flags[2] |= group_wake_up_signal_alternation_r16_present; group_flags.pack(bref); if (group_flags[0]) { @@ -19048,6 +26147,13 @@ SRSASN_CODE ue_radio_paging_info_nb_r13_s::pack(bit_ref& bref) const HANDLE_CODE(wake_up_signal_min_gap_e_drx_r15.pack(bref)); } } + if (group_flags[2]) { + varlength_field_pack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.pack(ue_category_nb_r16_present, 1)); + HANDLE_CODE(bref.pack(group_wake_up_signal_r16_present, 1)); + HANDLE_CODE(bref.pack(group_wake_up_signal_alternation_r16_present, 1)); + } } return SRSASN_SUCCESS; } @@ -19057,7 +26163,7 @@ SRSASN_CODE ue_radio_paging_info_nb_r13_s::unpack(cbit_ref& bref) HANDLE_CODE(bref.unpack(ue_category_nb_r13_present, 1)); if (ext) { - ext_groups_unpacker_guard group_flags(2); + ext_groups_unpacker_guard group_flags(3); group_flags.unpack(bref); if (group_flags[0]) { @@ -19076,6 +26182,13 @@ SRSASN_CODE ue_radio_paging_info_nb_r13_s::unpack(cbit_ref& bref) HANDLE_CODE(wake_up_signal_min_gap_e_drx_r15.unpack(bref)); } } + if (group_flags[2]) { + varlength_field_unpack_guard varlen_scope(bref, false); + + HANDLE_CODE(bref.unpack(ue_category_nb_r16_present, 1)); + HANDLE_CODE(bref.unpack(group_wake_up_signal_r16_present, 1)); + HANDLE_CODE(bref.unpack(group_wake_up_signal_alternation_r16_present, 1)); + } } return SRSASN_SUCCESS; } @@ -19101,6 +26214,15 @@ void ue_radio_paging_info_nb_r13_s::to_json(json_writer& j) const if (multi_carrier_paging_tdd_r15_present) { j.write_str("multiCarrierPagingTDD-r15", "true"); } + if (ue_category_nb_r16_present) { + j.write_str("ue-Category-NB-r16", "nb2"); + } + if (group_wake_up_signal_r16_present) { + j.write_str("groupWakeUpSignal-r16", "true"); + } + if (group_wake_up_signal_alternation_r16_present) { + j.write_str("groupWakeUpSignalAlternation-r16", "true"); + } } j.end_obj(); } @@ -19286,6 +26408,236 @@ const char* ue_cap_info_nb_s::crit_exts_c_::types_opts::to_string() const return convert_enum_idx(options, 2, value, "ue_cap_info_nb_s::crit_exts_c_::types"); } +// RACH-Report-NB-r16 ::= SEQUENCE +SRSASN_CODE rach_report_nb_r16_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(pack_integer(bref, nof_preambs_sent_r16, (uint8_t)1u, (uint8_t)64u)); + HANDLE_CODE(bref.pack(contention_detected_r16, 1)); + HANDLE_CODE(pack_integer(bref, init_nrsrp_level_r16, (uint8_t)0u, (uint8_t)2u)); + HANDLE_CODE(bref.pack(edt_fallback_r16, 1)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE rach_report_nb_r16_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(unpack_integer(nof_preambs_sent_r16, bref, (uint8_t)1u, (uint8_t)64u)); + HANDLE_CODE(bref.unpack(contention_detected_r16, 1)); + HANDLE_CODE(unpack_integer(init_nrsrp_level_r16, bref, (uint8_t)0u, (uint8_t)2u)); + HANDLE_CODE(bref.unpack(edt_fallback_r16, 1)); + + return SRSASN_SUCCESS; +} +void rach_report_nb_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_int("numberOfPreamblesSent-r16", nof_preambs_sent_r16); + j.write_bool("contentionDetected-r16", contention_detected_r16); + j.write_int("initialNRSRP-Level-r16", init_nrsrp_level_r16); + j.write_bool("edt-Fallback-r16", edt_fallback_r16); + j.end_obj(); +} + +// UEInformationResponse-NB-r16-IEs ::= SEQUENCE +SRSASN_CODE ue_info_resp_nb_r16_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(rach_report_r16_present, 1)); + HANDLE_CODE(bref.pack(rlf_report_r16_present, 1)); + HANDLE_CODE(bref.pack(anr_meas_report_r16_present, 1)); + HANDLE_CODE(bref.pack(late_non_crit_ext_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + if (rach_report_r16_present) { + HANDLE_CODE(rach_report_r16.pack(bref)); + } + if (rlf_report_r16_present) { + HANDLE_CODE(rlf_report_r16.pack(bref)); + } + if (anr_meas_report_r16_present) { + HANDLE_CODE(anr_meas_report_r16.pack(bref)); + } + if (late_non_crit_ext_present) { + HANDLE_CODE(late_non_crit_ext.pack(bref)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE ue_info_resp_nb_r16_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(rach_report_r16_present, 1)); + HANDLE_CODE(bref.unpack(rlf_report_r16_present, 1)); + HANDLE_CODE(bref.unpack(anr_meas_report_r16_present, 1)); + HANDLE_CODE(bref.unpack(late_non_crit_ext_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + if (rach_report_r16_present) { + HANDLE_CODE(rach_report_r16.unpack(bref)); + } + if (rlf_report_r16_present) { + HANDLE_CODE(rlf_report_r16.unpack(bref)); + } + if (anr_meas_report_r16_present) { + HANDLE_CODE(anr_meas_report_r16.unpack(bref)); + } + if (late_non_crit_ext_present) { + HANDLE_CODE(late_non_crit_ext.unpack(bref)); + } + + return SRSASN_SUCCESS; +} +void ue_info_resp_nb_r16_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (rach_report_r16_present) { + j.write_fieldname("rach-Report-r16"); + rach_report_r16.to_json(j); + } + if (rlf_report_r16_present) { + j.write_fieldname("rlf-Report-r16"); + rlf_report_r16.to_json(j); + } + if (anr_meas_report_r16_present) { + j.write_fieldname("anr-MeasReport-r16"); + anr_meas_report_r16.to_json(j); + } + if (late_non_crit_ext_present) { + j.write_str("lateNonCriticalExtension", late_non_crit_ext.to_string()); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + j.start_obj(); + j.end_obj(); + } + j.end_obj(); +} + +// UEInformationResponse-NB-r16 ::= SEQUENCE +SRSASN_CODE ue_info_resp_nb_r16_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(pack_integer(bref, rrc_transaction_id, (uint8_t)0u, (uint8_t)3u)); + HANDLE_CODE(crit_exts.pack(bref)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE ue_info_resp_nb_r16_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(unpack_integer(rrc_transaction_id, bref, (uint8_t)0u, (uint8_t)3u)); + HANDLE_CODE(crit_exts.unpack(bref)); + + return SRSASN_SUCCESS; +} +void ue_info_resp_nb_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_int("rrc-TransactionIdentifier", rrc_transaction_id); + j.write_fieldname("criticalExtensions"); + crit_exts.to_json(j); + j.end_obj(); +} + +void ue_info_resp_nb_r16_s::crit_exts_c_::set(types::options e) +{ + type_ = e; +} +ue_info_resp_nb_r16_ies_s& ue_info_resp_nb_r16_s::crit_exts_c_::set_ue_info_resp_r16() +{ + set(types::ue_info_resp_r16); + return c; +} +void ue_info_resp_nb_r16_s::crit_exts_c_::set_crit_exts_future() +{ + set(types::crit_exts_future); +} +void ue_info_resp_nb_r16_s::crit_exts_c_::to_json(json_writer& j) const +{ + j.start_obj(); + switch (type_) { + case types::ue_info_resp_r16: + j.write_fieldname("ueInformationResponse-r16"); + c.to_json(j); + break; + case types::crit_exts_future: + break; + default: + log_invalid_choice_id(type_, "ue_info_resp_nb_r16_s::crit_exts_c_"); + } + j.end_obj(); +} +SRSASN_CODE ue_info_resp_nb_r16_s::crit_exts_c_::pack(bit_ref& bref) const +{ + type_.pack(bref); + switch (type_) { + case types::ue_info_resp_r16: + HANDLE_CODE(c.pack(bref)); + break; + case types::crit_exts_future: + break; + default: + log_invalid_choice_id(type_, "ue_info_resp_nb_r16_s::crit_exts_c_"); + return SRSASN_ERROR_ENCODE_FAIL; + } + return SRSASN_SUCCESS; +} +SRSASN_CODE ue_info_resp_nb_r16_s::crit_exts_c_::unpack(cbit_ref& bref) +{ + types e; + e.unpack(bref); + set(e); + switch (type_) { + case types::ue_info_resp_r16: + HANDLE_CODE(c.unpack(bref)); + break; + case types::crit_exts_future: + break; + default: + log_invalid_choice_id(type_, "ue_info_resp_nb_r16_s::crit_exts_c_"); + return SRSASN_ERROR_DECODE_FAIL; + } + return SRSASN_SUCCESS; +} + +const char* ue_info_resp_nb_r16_s::crit_exts_c_::types_opts::to_string() const +{ + static const char* options[] = {"ueInformationResponse-r16", "criticalExtensionsFuture"}; + return convert_enum_idx(options, 2, value, "ue_info_resp_nb_r16_s::crit_exts_c_::types"); +} + +// UEPagingCoverageInformation-NB-v1700-IEs ::= SEQUENCE +SRSASN_CODE ue_paging_coverage_info_nb_v1700_ies_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(bref.pack(cbp_idx_r17_present, 1)); + HANDLE_CODE(bref.pack(non_crit_ext_present, 1)); + + if (cbp_idx_r17_present) { + HANDLE_CODE(pack_integer(bref, cbp_idx_r17, (uint8_t)1u, (uint8_t)2u)); + } + + return SRSASN_SUCCESS; +} +SRSASN_CODE ue_paging_coverage_info_nb_v1700_ies_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(bref.unpack(cbp_idx_r17_present, 1)); + HANDLE_CODE(bref.unpack(non_crit_ext_present, 1)); + + if (cbp_idx_r17_present) { + HANDLE_CODE(unpack_integer(cbp_idx_r17, bref, (uint8_t)1u, (uint8_t)2u)); + } + + return SRSASN_SUCCESS; +} +void ue_paging_coverage_info_nb_v1700_ies_s::to_json(json_writer& j) const +{ + j.start_obj(); + if (cbp_idx_r17_present) { + j.write_int("cbp-Index-r17", cbp_idx_r17); + } + if (non_crit_ext_present) { + j.write_fieldname("nonCriticalExtension"); + j.start_obj(); + j.end_obj(); + } + j.end_obj(); +} + // UEPagingCoverageInformation-NB-IEs ::= SEQUENCE SRSASN_CODE ue_paging_coverage_info_nb_ies_s::pack(bit_ref& bref) const { @@ -19295,6 +26647,9 @@ SRSASN_CODE ue_paging_coverage_info_nb_ies_s::pack(bit_ref& bref) const if (npdcch_num_repeat_paging_r13_present) { HANDLE_CODE(pack_integer(bref, npdcch_num_repeat_paging_r13, (uint16_t)1u, (uint16_t)2048u)); } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.pack(bref)); + } return SRSASN_SUCCESS; } @@ -19306,6 +26661,9 @@ SRSASN_CODE ue_paging_coverage_info_nb_ies_s::unpack(cbit_ref& bref) if (npdcch_num_repeat_paging_r13_present) { HANDLE_CODE(unpack_integer(npdcch_num_repeat_paging_r13, bref, (uint16_t)1u, (uint16_t)2048u)); } + if (non_crit_ext_present) { + HANDLE_CODE(non_crit_ext.unpack(bref)); + } return SRSASN_SUCCESS; } @@ -19317,8 +26675,7 @@ void ue_paging_coverage_info_nb_ies_s::to_json(json_writer& j) const } if (non_crit_ext_present) { j.write_fieldname("nonCriticalExtension"); - j.start_obj(); - j.end_obj(); + non_crit_ext.to_json(j); } j.end_obj(); } @@ -20484,6 +27841,12 @@ void ul_dcch_msg_type_nb_c::c1_c_::destroy_() case types::rrc_conn_resume_complete_r13: c.destroy<rrc_conn_resume_complete_nb_s>(); break; + case types::ue_info_resp_r16: + c.destroy<ue_info_resp_nb_r16_s>(); + break; + case types::pur_cfg_request_r16: + c.destroy<pur_cfg_request_nb_r16_s>(); + break; default: break; } @@ -20517,9 +27880,11 @@ void ul_dcch_msg_type_nb_c::c1_c_::set(types::options e) case types::rrc_conn_resume_complete_r13: c.init<rrc_conn_resume_complete_nb_s>(); break; - case types::spare8: + case types::ue_info_resp_r16: + c.init<ue_info_resp_nb_r16_s>(); break; - case types::spare7: + case types::pur_cfg_request_r16: + c.init<pur_cfg_request_nb_r16_s>(); break; case types::spare6: break; @@ -20567,9 +27932,11 @@ ul_dcch_msg_type_nb_c::c1_c_::c1_c_(const ul_dcch_msg_type_nb_c::c1_c_& other) case types::rrc_conn_resume_complete_r13: c.init(other.c.get<rrc_conn_resume_complete_nb_s>()); break; - case types::spare8: + case types::ue_info_resp_r16: + c.init(other.c.get<ue_info_resp_nb_r16_s>()); break; - case types::spare7: + case types::pur_cfg_request_r16: + c.init(other.c.get<pur_cfg_request_nb_r16_s>()); break; case types::spare6: break; @@ -20620,9 +27987,11 @@ ul_dcch_msg_type_nb_c::c1_c_& ul_dcch_msg_type_nb_c::c1_c_::operator=(const ul_d case types::rrc_conn_resume_complete_r13: c.set(other.c.get<rrc_conn_resume_complete_nb_s>()); break; - case types::spare8: + case types::ue_info_resp_r16: + c.set(other.c.get<ue_info_resp_nb_r16_s>()); break; - case types::spare7: + case types::pur_cfg_request_r16: + c.set(other.c.get<pur_cfg_request_nb_r16_s>()); break; case types::spare6: break; @@ -20684,13 +28053,15 @@ rrc_conn_resume_complete_nb_s& ul_dcch_msg_type_nb_c::c1_c_::set_rrc_conn_resume set(types::rrc_conn_resume_complete_r13); return c.get<rrc_conn_resume_complete_nb_s>(); } -void ul_dcch_msg_type_nb_c::c1_c_::set_spare8() +ue_info_resp_nb_r16_s& ul_dcch_msg_type_nb_c::c1_c_::set_ue_info_resp_r16() { - set(types::spare8); + set(types::ue_info_resp_r16); + return c.get<ue_info_resp_nb_r16_s>(); } -void ul_dcch_msg_type_nb_c::c1_c_::set_spare7() +pur_cfg_request_nb_r16_s& ul_dcch_msg_type_nb_c::c1_c_::set_pur_cfg_request_r16() { - set(types::spare7); + set(types::pur_cfg_request_r16); + return c.get<pur_cfg_request_nb_r16_s>(); } void ul_dcch_msg_type_nb_c::c1_c_::set_spare6() { @@ -20752,9 +28123,13 @@ void ul_dcch_msg_type_nb_c::c1_c_::to_json(json_writer& j) const j.write_fieldname("rrcConnectionResumeComplete-r13"); c.get<rrc_conn_resume_complete_nb_s>().to_json(j); break; - case types::spare8: + case types::ue_info_resp_r16: + j.write_fieldname("ueInformationResponse-r16"); + c.get<ue_info_resp_nb_r16_s>().to_json(j); break; - case types::spare7: + case types::pur_cfg_request_r16: + j.write_fieldname("purConfigurationRequest-r16"); + c.get<pur_cfg_request_nb_r16_s>().to_json(j); break; case types::spare6: break; @@ -20801,9 +28176,11 @@ SRSASN_CODE ul_dcch_msg_type_nb_c::c1_c_::pack(bit_ref& bref) const case types::rrc_conn_resume_complete_r13: HANDLE_CODE(c.get<rrc_conn_resume_complete_nb_s>().pack(bref)); break; - case types::spare8: + case types::ue_info_resp_r16: + HANDLE_CODE(c.get<ue_info_resp_nb_r16_s>().pack(bref)); break; - case types::spare7: + case types::pur_cfg_request_r16: + HANDLE_CODE(c.get<pur_cfg_request_nb_r16_s>().pack(bref)); break; case types::spare6: break; @@ -20853,9 +28230,11 @@ SRSASN_CODE ul_dcch_msg_type_nb_c::c1_c_::unpack(cbit_ref& bref) case types::rrc_conn_resume_complete_r13: HANDLE_CODE(c.get<rrc_conn_resume_complete_nb_s>().unpack(bref)); break; - case types::spare8: + case types::ue_info_resp_r16: + HANDLE_CODE(c.get<ue_info_resp_nb_r16_s>().unpack(bref)); break; - case types::spare7: + case types::pur_cfg_request_r16: + HANDLE_CODE(c.get<pur_cfg_request_nb_r16_s>().unpack(bref)); break; case types::spare6: break; @@ -20886,8 +28265,8 @@ const char* ul_dcch_msg_type_nb_c::c1_c_::types_opts::to_string() const "ueCapabilityInformation-r13", "ulInformationTransfer-r13", "rrcConnectionResumeComplete-r13", - "spare8", - "spare7", + "ueInformationResponse-r16", + "purConfigurationRequest-r16", "spare6", "spare5", "spare4", @@ -20936,3 +28315,72 @@ void ul_dcch_msg_nb_s::to_json(json_writer& j) const j.end_obj(); j.end_array(); } + +// VarANR-MeasConfig-NB-r16 ::= SEQUENCE +SRSASN_CODE var_anr_meas_cfg_nb_r16_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(pack_integer(bref, anr_quality_thres_r16, (uint8_t)0u, (uint8_t)113u)); + HANDLE_CODE(pack_dyn_seq_of(bref, anr_carrier_list_r16, 1, 2)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE var_anr_meas_cfg_nb_r16_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(unpack_integer(anr_quality_thres_r16, bref, (uint8_t)0u, (uint8_t)113u)); + HANDLE_CODE(unpack_dyn_seq_of(anr_carrier_list_r16, bref, 1, 2)); + + return SRSASN_SUCCESS; +} +void var_anr_meas_cfg_nb_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.write_int("anr-QualityThreshold-r16", anr_quality_thres_r16); + j.start_array("anr-CarrierList-r16"); + for (const auto& e1 : anr_carrier_list_r16) { + e1.to_json(j); + } + j.end_array(); + j.end_obj(); +} + +// VarANR-MeasReport-NB-r16 ::= SEQUENCE +SRSASN_CODE var_anr_meas_report_nb_r16_s::pack(bit_ref& bref) const +{ + HANDLE_CODE(pack_dyn_seq_of(bref, plmn_id_list_r16, 1, 16)); + HANDLE_CODE(serv_cell_id_r16.pack(bref)); + HANDLE_CODE(meas_result_serv_cell_r16.pack(bref)); + HANDLE_CODE(pack_integer(bref, relative_time_stamp_r16, (uint8_t)0u, (uint8_t)95u)); + HANDLE_CODE(pack_dyn_seq_of(bref, meas_result_list_r16, 1, 2)); + + return SRSASN_SUCCESS; +} +SRSASN_CODE var_anr_meas_report_nb_r16_s::unpack(cbit_ref& bref) +{ + HANDLE_CODE(unpack_dyn_seq_of(plmn_id_list_r16, bref, 1, 16)); + HANDLE_CODE(serv_cell_id_r16.unpack(bref)); + HANDLE_CODE(meas_result_serv_cell_r16.unpack(bref)); + HANDLE_CODE(unpack_integer(relative_time_stamp_r16, bref, (uint8_t)0u, (uint8_t)95u)); + HANDLE_CODE(unpack_dyn_seq_of(meas_result_list_r16, bref, 1, 2)); + + return SRSASN_SUCCESS; +} +void var_anr_meas_report_nb_r16_s::to_json(json_writer& j) const +{ + j.start_obj(); + j.start_array("plmn-IdentityList-r16"); + for (const auto& e1 : plmn_id_list_r16) { + e1.to_json(j); + } + j.end_array(); + j.write_fieldname("servCellIdentity-r16"); + serv_cell_id_r16.to_json(j); + j.write_fieldname("measResultServCell-r16"); + meas_result_serv_cell_r16.to_json(j); + j.write_int("relativeTimeStamp-r16", relative_time_stamp_r16); + j.start_array("measResultList-r16"); + for (const auto& e1 : meas_result_list_r16) { + e1.to_json(j); + } + j.end_array(); + j.end_obj(); +} diff --git a/lib/src/asn1/rrc_utils.cc b/lib/src/asn1/rrc_utils.cc index 8b688d070..af9b23832 100644 --- a/lib/src/asn1/rrc_utils.cc +++ b/lib/src/asn1/rrc_utils.cc @@ -1205,7 +1205,7 @@ sib13_t make_sib13(const asn1::rrc::sib_type13_r9_s& asn1_type) ASN1_OBJ_ID_DEFINE(asn1::rrc::srb_to_add_mod_s, srb_id); ASN1_OBJ_ID_DEFINE(asn1::rrc::drb_to_add_mod_s, drb_id); -ASN1_OBJ_ID_DEFINE(asn1::rrc::black_cells_to_add_mod_s, cell_idx); +ASN1_OBJ_ID_DEFINE(asn1::rrc::excluded_cells_to_add_mod_s, cell_idx); ASN1_OBJ_ID_DEFINE(asn1::rrc::cells_to_add_mod_s, cell_idx); ASN1_OBJ_ID_DEFINE(asn1::rrc::cells_to_add_mod_nr_r15_s, cell_idx_r15); ASN1_OBJ_ID_DEFINE(asn1::rrc::meas_obj_to_add_mod_s, meas_obj_id); diff --git a/srsenb/src/enb_cfg_parser.cc b/srsenb/src/enb_cfg_parser.cc index dea5dfc36..3183eb89f 100644 --- a/srsenb/src/enb_cfg_parser.cc +++ b/srsenb/src/enb_cfg_parser.cc @@ -156,21 +156,21 @@ int field_intra_neigh_cell_list::parse(libconfig::Setting& root) int field_intra_black_cell_list::parse(libconfig::Setting& root) { - data->intra_freq_black_cell_list.resize((uint32_t)root.getLength()); - data->intra_freq_black_cell_list_present = data->intra_freq_black_cell_list.size() > 0; - for (uint32_t i = 0; i < data->intra_freq_black_cell_list.size() && i < ASN1_RRC_MAX_CELL_BLACK; i++) { - if (not parse_enum_by_number(data->intra_freq_black_cell_list[i].range, "range", root[i])) { - fprintf(stderr, "Missing field range in black_cell=%d\n", i); + data->intra_freq_excluded_cell_list.resize((uint32_t)root.getLength()); + data->intra_freq_excluded_cell_list_present = data->intra_freq_excluded_cell_list.size() > 0; + for (uint32_t i = 0; i < data->intra_freq_excluded_cell_list.size() && i < ASN1_RRC_MAX_EXCLUDED_CELL; i++) { + if (not parse_enum_by_number(data->intra_freq_excluded_cell_list[i].range, "range", root[i])) { + fprintf(stderr, "Missing field range in excluded_cell=%d\n", i); return SRSRAN_ERROR; } - data->intra_freq_black_cell_list[i].range_present = true; + data->intra_freq_excluded_cell_list[i].range_present = true; int start = 0; if (!root[i].lookupValue("start", start)) { - fprintf(stderr, "Missing field start in black_cell=%d\n", i); + fprintf(stderr, "Missing field start in excluded_cell=%d\n", i); return SRSRAN_ERROR; } - data->intra_freq_black_cell_list[i].start = (uint16)start; + data->intra_freq_excluded_cell_list[i].start = (uint16)start; } return 0; } @@ -288,7 +288,7 @@ int field_inter_freq_neigh_cell_list::parse(libconfig::Setting& root) { data->inter_freq_neigh_cell_list.resize((uint32_t)root.getLength()); data->inter_freq_neigh_cell_list_present = data->inter_freq_neigh_cell_list.size() > 0; - for (uint32_t i = 0; i < data->inter_freq_neigh_cell_list.size() && i < ASN1_RRC_MAX_CELL_BLACK; i++) { + for (uint32_t i = 0; i < data->inter_freq_neigh_cell_list.size() && i < ASN1_RRC_MAX_EXCLUDED_CELL; i++) { if (not parse_enum_by_number(data->inter_freq_neigh_cell_list[i].q_offset_cell, "q_offset_cell", root[i])) { ERROR("Missing field q_offset_cell in neigh_cell=%d\n", i); return SRSRAN_ERROR; @@ -306,21 +306,21 @@ int field_inter_freq_neigh_cell_list::parse(libconfig::Setting& root) int field_inter_freq_black_cell_list::parse(libconfig::Setting& root) { - data->inter_freq_black_cell_list.resize((uint32_t)root.getLength()); - data->inter_freq_black_cell_list_present = data->inter_freq_black_cell_list.size() > 0; - for (uint32_t i = 0; i < data->inter_freq_black_cell_list.size() && i < ASN1_RRC_MAX_CELL_BLACK; i++) { - if (not parse_enum_by_number(data->inter_freq_black_cell_list[i].range, "range", root[i])) { - ERROR("Missing field range in black_cell=%d\n", i); + data->inter_freq_excluded_cell_list.resize((uint32_t)root.getLength()); + data->inter_freq_excluded_cell_list_present = data->inter_freq_excluded_cell_list.size() > 0; + for (uint32_t i = 0; i < data->inter_freq_excluded_cell_list.size() && i < ASN1_RRC_MAX_EXCLUDED_CELL; i++) { + if (not parse_enum_by_number(data->inter_freq_excluded_cell_list[i].range, "range", root[i])) { + ERROR("Missing field range in excluded_cell=%d\n", i); return SRSRAN_ERROR; } - data->inter_freq_black_cell_list[i].range_present = true; + data->inter_freq_excluded_cell_list[i].range_present = true; unsigned int start = 0; if (!root[i].lookupValue("start", start)) { - ERROR("Missing field start in black_cell=%d\n", i); + ERROR("Missing field start in excluded_cell=%d\n", i); return SRSRAN_ERROR; } - data->inter_freq_black_cell_list[i].start = (uint16)start; + data->inter_freq_excluded_cell_list[i].start = (uint16)start; } return 0; } diff --git a/srsue/hdr/stack/rrc/rrc_cell.h b/srsue/hdr/stack/rrc/rrc_cell.h index 3999f4602..4091d8f07 100644 --- a/srsue/hdr/stack/rrc/rrc_cell.h +++ b/srsue/hdr/stack/rrc/rrc_cell.h @@ -31,6 +31,9 @@ inline std::string to_string(const phy_cell_t& c) return {buffer}; } +/// \brief Helper function to get the SIB number from the SIB type. +unsigned get_sib_number(const asn1::rrc::sib_type_e& sib); + class meas_cell { public: @@ -129,7 +132,7 @@ public: std::string to_string() const; - asn1::rrc_nr::sib1_s sib1 = {}; + asn1::rrc_nr::sib1_s sib1 = {}; }; class meas_cell_eutra : public meas_cell @@ -138,9 +141,9 @@ public: explicit meas_cell_eutra(srsran::unique_timer timer) : meas_cell(std::move(timer)){}; meas_cell_eutra(const phy_cell_t& phy_cell_, srsran::unique_timer timer) : meas_cell(phy_cell_, std::move(timer)){}; - bool has_plmn_id(asn1::rrc::plmn_id_s plmn_id) const; - uint32_t nof_plmns() const { return has_sib1() ? sib1.cell_access_related_info.plmn_id_list.size() : 0; } - srsran::plmn_id_t get_plmn(uint32_t idx) const; + bool has_plmn_id(asn1::rrc::plmn_id_s plmn_id) const; + uint32_t nof_plmns() const { return has_sib1() ? sib1.cell_access_related_info.plmn_id_list.size() : 0; } + srsran::plmn_id_t get_plmn(uint32_t idx) const; asn1::rrc::plmn_id_s get_plmn_asn1(uint32_t idx) const; uint16_t get_tac() const { return has_sib1() ? (uint16_t)sib1.cell_access_related_info.tac.to_number() : 0; } @@ -155,7 +158,7 @@ public: const asn1::rrc::sib_type3_s* sib3ptr() const { return has_sib3() ? &sib3 : nullptr; } const asn1::rrc::sib_type13_r9_s* sib13ptr() const { return has_sib13() ? &sib13 : nullptr; } - uint32_t get_cell_id() const { return (uint32_t)sib1.cell_access_related_info.cell_id.to_number(); } + uint32_t get_cell_id() const { return (uint32_t)sib1.cell_access_related_info.cell_id.to_number(); } asn1::fixed_bitstring<28> get_cell_id_bit() const { return sib1.cell_access_related_info.cell_id; } uint16_t get_mcc() const; diff --git a/srsue/src/stack/rrc/rrc.cc b/srsue/src/stack/rrc/rrc.cc index 6acc06af3..5450e488e 100644 --- a/srsue/src/stack/rrc/rrc.cc +++ b/srsue/src/stack/rrc/rrc.cc @@ -1361,6 +1361,21 @@ void rrc::write_pdu_bcch_dlsch(unique_byte_buffer_t pdu) parse_pdu_bcch_dlsch(std::move(pdu)); } +/// \brief Helper function to get the SIB number from the SIB type. +static unsigned get_sib_number(const asn1::rrc::sib_info_item_c::types& sib) +{ + unsigned sib_n = 2 + (unsigned)sib.value; + if (sib_n > 21) { + // sib22 and sib23 skipped. + sib_n += 2; + if (sib_n > 26) { + // account for sib26a. + sib_n--; + } + } + return sib_n; +} + void rrc::parse_pdu_bcch_dlsch(unique_byte_buffer_t pdu) { // Stop BCCH search after successful reception of 1 BCCH block @@ -1386,7 +1401,7 @@ void rrc::parse_pdu_bcch_dlsch(unique_byte_buffer_t pdu) sys_info_r8_ies_s::sib_type_and_info_l_& sib_list = dlsch_msg.msg.c1().sys_info().crit_exts.sys_info_r8().sib_type_and_info; for (uint32_t i = 0; i < sib_list.size(); ++i) { - logger.info("Processing SIB%d (%d/%d)", sib_list[i].type().to_number(), i, sib_list.size()); + logger.info("Processing SIB%d (%d/%d)", get_sib_number(sib_list[i].type()), i, sib_list.size()); switch (sib_list[i].type().value) { case sib_info_item_c::types::sib2: if (not meas_cells.serving_cell().has_sib2()) { @@ -1410,7 +1425,7 @@ void rrc::parse_pdu_bcch_dlsch(unique_byte_buffer_t pdu) si_acquirer.trigger(si_acquire_proc::sib_received_ev{}); break; default: - logger.warning("SIB%d is not supported", sib_list[i].type().to_number()); + logger.warning("SIB%d is not supported", get_sib_number(sib_list[i].type())); } } } @@ -1429,7 +1444,7 @@ void rrc::handle_sib1() si_periodicity_r12_e p = sib1->sched_info_list[i].si_periodicity; for (uint32_t j = 0; j < sib1->sched_info_list[i].sib_map_info.size(); ++j) { sib_type_e t = sib1->sched_info_list[i].sib_map_info[j]; - logger.debug("SIB scheduling info, sib_type=%d, si_periodicity=%d", t.to_number(), p.to_number()); + logger.debug("SIB scheduling info, sib_type=%d, si_periodicity=%d", get_sib_number(t), p.to_number()); } } diff --git a/srsue/src/stack/rrc/rrc_cell.cc b/srsue/src/stack/rrc/rrc_cell.cc index 94410f0d7..baac7f3c2 100644 --- a/srsue/src/stack/rrc/rrc_cell.cc +++ b/srsue/src/stack/rrc/rrc_cell.cc @@ -14,6 +14,20 @@ namespace srsue { +/// \brief Helper function to get the SIB number from the SIB type. +unsigned get_sib_number(const asn1::rrc::sib_type_e& sib) +{ + unsigned sib_number = 3 + (unsigned)sib.value; + if (sib_number > 21) { + // skip sib22 and sib23 + sib_number += 2; + if (sib_number > 26) { + sib_number--; + } + } + return sib_number; +} + meas_cell::meas_cell(srsran::unique_timer timer_) : timer(std::move(timer_)) { timer.set(neighbour_timeout_ms); @@ -50,7 +64,7 @@ void meas_cell_eutra::set_sib1(const asn1::rrc::sib_type1_s& sib1_) sib_info_map.clear(); for (uint32_t i = 0; i < sib1.sched_info_list.size(); ++i) { for (uint32_t j = 0; j < sib1.sched_info_list[i].sib_map_info.size(); ++j) { - sib_info_map.insert(std::make_pair(sib1.sched_info_list[i].sib_map_info[j].to_number() - 1, i)); + sib_info_map.insert(std::make_pair(get_sib_number(sib1.sched_info_list[i].sib_map_info[j]) - 1, i)); } } } diff --git a/srsue/src/stack/rrc/rrc_meas.cc b/srsue/src/stack/rrc/rrc_meas.cc index 985dbf904..a5fdd9c61 100644 --- a/srsue/src/stack/rrc/rrc_meas.cc +++ b/srsue/src/stack/rrc/rrc_meas.cc @@ -1219,17 +1219,17 @@ void rrc::rrc_meas::var_meas_cfg::measObject_addmod_eutra(const meas_obj_to_add_ } } - // Do the same with black list + // Do the same with excluded list { - if (cfg_obj.black_cells_to_rem_list_present) { - apply_remlist_diff(local_obj.black_cells_to_add_mod_list, - cfg_obj.black_cells_to_rem_list, - local_obj.black_cells_to_add_mod_list); + if (cfg_obj.excluded_cells_to_rem_list_present) { + apply_remlist_diff(local_obj.excluded_cells_to_add_mod_list, + cfg_obj.excluded_cells_to_rem_list, + local_obj.excluded_cells_to_add_mod_list); } - if (cfg_obj.black_cells_to_add_mod_list_present) { - apply_addmodlist_diff(local_obj.black_cells_to_add_mod_list, - cfg_obj.black_cells_to_add_mod_list, - local_obj.black_cells_to_add_mod_list); + if (cfg_obj.excluded_cells_to_add_mod_list_present) { + apply_addmodlist_diff(local_obj.excluded_cells_to_add_mod_list, + cfg_obj.excluded_cells_to_add_mod_list, + local_obj.excluded_cells_to_add_mod_list); } } @@ -1241,19 +1241,19 @@ void rrc::rrc_meas::var_meas_cfg::measObject_addmod_eutra(const meas_obj_to_add_ } } - logger.info("MEAS: %s objectId=%d, carrier_freq=%d, %u cells, %u black-listed cells", + logger.info("MEAS: %s objectId=%d, carrier_freq=%d, %u cells, %u excluded-listed cells", !entry_exists ? "Added" : "Modified", l.meas_obj_id, local_obj.carrier_freq, local_obj.cells_to_add_mod_list.size(), - local_obj.black_cells_to_add_mod_list.size()); + local_obj.excluded_cells_to_add_mod_list.size()); if (logger.debug.enabled()) { for (auto& c : local_obj.cells_to_add_mod_list) { logger.debug( "MEAS: cell idx=%d, pci=%d, q_offset=%d", c.cell_idx, c.pci, c.cell_individual_offset.to_number()); } - for (auto& b : local_obj.black_cells_to_add_mod_list) { - logger.debug("MEAS: black-listed cell idx=%d", b.cell_idx); + for (auto& b : local_obj.excluded_cells_to_add_mod_list) { + logger.debug("MEAS: excluded-listed cell idx=%d", b.cell_idx); } } } @@ -1275,17 +1275,17 @@ void rrc::rrc_meas::var_meas_cfg::measObject_addmod_nr_r15(const meas_obj_to_add local_obj.carrier_freq_r15 = cfg_obj.carrier_freq_r15; // Combine the new cells with the existing ones and remove the cells indicated in config - // Do the same with black list + // Do the same with excluded list { - if (cfg_obj.black_cells_to_rem_list_r15_present) { - apply_remlist_diff(local_obj.black_cells_to_add_mod_list_r15, - cfg_obj.black_cells_to_rem_list_r15, - local_obj.black_cells_to_add_mod_list_r15); + if (cfg_obj.excluded_cells_to_rem_list_r15_present) { + apply_remlist_diff(local_obj.excluded_cells_to_add_mod_list_r15, + cfg_obj.excluded_cells_to_rem_list_r15, + local_obj.excluded_cells_to_add_mod_list_r15); } - if (cfg_obj.black_cells_to_add_mod_list_r15_present) { - apply_addmodlist_diff(local_obj.black_cells_to_add_mod_list_r15, - cfg_obj.black_cells_to_add_mod_list_r15, - local_obj.black_cells_to_add_mod_list_r15); + if (cfg_obj.excluded_cells_to_add_mod_list_r15_present) { + apply_addmodlist_diff(local_obj.excluded_cells_to_add_mod_list_r15, + cfg_obj.excluded_cells_to_add_mod_list_r15, + local_obj.excluded_cells_to_add_mod_list_r15); } } // for each measId associated with this measObjectId in the measIdList within the VarMeasConfig @@ -1296,14 +1296,14 @@ void rrc::rrc_meas::var_meas_cfg::measObject_addmod_nr_r15(const meas_obj_to_add } } - logger.info("MEAS (NR R15): %s objectId=%d, carrier_freq=%d, %u black-listed cells", + logger.info("MEAS (NR R15): %s objectId=%d, carrier_freq=%d, %u excluded-listed cells", !entry_exists ? "Added" : "Modified", l.meas_obj_id, local_obj.carrier_freq_r15, - local_obj.black_cells_to_add_mod_list_r15.size()); + local_obj.excluded_cells_to_add_mod_list_r15.size()); if (logger.debug.enabled()) { - for (auto& b : local_obj.black_cells_to_add_mod_list_r15) { - logger.debug("MEAS: black-listed cell idx=%d", b.cell_idx_r15); + for (auto& b : local_obj.excluded_cells_to_add_mod_list_r15) { + logger.debug("MEAS: excluded-listed cell idx=%d", b.cell_idx_r15); } } } diff --git a/srsue/src/stack/rrc/rrc_procedures.cc b/srsue/src/stack/rrc/rrc_procedures.cc index 8b954370f..e6b413501 100644 --- a/srsue/src/stack/rrc/rrc_procedures.cc +++ b/srsue/src/stack/rrc/rrc_procedures.cc @@ -191,7 +191,7 @@ std::pair<uint32_t, int32_t> compute_si_periodicity_and_idx(uint32_t sib_index, // SIB3+ scheduling Section 5.2.3 for (uint32_t i = 0; i < sib1->sched_info_list.size(); ++i) { for (uint32_t j = 0; j < sib1->sched_info_list[i].sib_map_info.size(); ++j) { - if (sib1->sched_info_list[i].sib_map_info[j].to_number() == sib_index + 1) { + if (get_sib_number(sib1->sched_info_list[i].sib_map_info[j]) == sib_index + 1) { return {sib1->sched_info_list[i].si_periodicity.to_number(), i}; } } |
