/src/ocudu/include/ocudu/asn1/nrppa/nrppa.h
Line | Count | Source |
1 | | // SPDX-FileCopyrightText: Copyright (C) 2021-2026 Software Radio Systems Limited |
2 | | // SPDX-FileCopyrightText: Copyright (C) 2026 OCUDU contributors |
3 | | // SPDX-License-Identifier: BSD-3-Clause-Open-MPI |
4 | | // Portions of this file may implement 3GPP specifications, which may be subject to additional licensing requirements. |
5 | | |
6 | | /******************************************************************************* |
7 | | * |
8 | | * 3GPP TS ASN1 NRPPA v18.7.0 (2025-12) |
9 | | * |
10 | | ******************************************************************************/ |
11 | | |
12 | | #pragma once |
13 | | |
14 | | #include "ocudu/asn1/asn1_ap_utils.h" |
15 | | |
16 | | namespace asn1 { |
17 | | namespace nrppa { |
18 | | |
19 | | struct e_c_id_meas_initiation_request_ies_container; |
20 | | using e_c_id_meas_initiation_request_s = elementary_procedure_option<e_c_id_meas_initiation_request_ies_container>; |
21 | | struct otdoa_info_request_ies_o; |
22 | | using otdoa_info_request_s = elementary_procedure_option<protocol_ie_container_l<otdoa_info_request_ies_o>>; |
23 | | struct positioning_info_request_ies_container; |
24 | | using positioning_info_request_s = elementary_procedure_option<positioning_info_request_ies_container>; |
25 | | struct meas_request_ies_container; |
26 | | using meas_request_s = elementary_procedure_option<meas_request_ies_container>; |
27 | | struct trp_info_request_ies_container; |
28 | | using trp_info_request_s = elementary_procedure_option<trp_info_request_ies_container>; |
29 | | struct positioning_activation_request_ies_container; |
30 | | using positioning_activation_request_s = elementary_procedure_option<positioning_activation_request_ies_container>; |
31 | | struct prs_cfg_request_ies_container; |
32 | | using prs_cfg_request_s = elementary_procedure_option<prs_cfg_request_ies_container>; |
33 | | struct meas_precfg_required_ies_o; |
34 | | using meas_precfg_required_s = elementary_procedure_option<protocol_ie_container_l<meas_precfg_required_ies_o>>; |
35 | | struct e_c_id_meas_fail_ind_ies_container; |
36 | | using e_c_id_meas_fail_ind_s = elementary_procedure_option<e_c_id_meas_fail_ind_ies_container>; |
37 | | struct e_c_id_meas_report_ies_container; |
38 | | using e_c_id_meas_report_s = elementary_procedure_option<e_c_id_meas_report_ies_container>; |
39 | | struct e_c_id_meas_termination_cmd_ies_container; |
40 | | using e_c_id_meas_termination_cmd_s = elementary_procedure_option<e_c_id_meas_termination_cmd_ies_container>; |
41 | | struct error_ind_ies_container; |
42 | | using error_ind_s = elementary_procedure_option<error_ind_ies_container>; |
43 | | struct private_msg_s; |
44 | | struct assist_info_ctrl_ies_container; |
45 | | using assist_info_ctrl_s = elementary_procedure_option<assist_info_ctrl_ies_container>; |
46 | | struct assist_info_feedback_ies_container; |
47 | | using assist_info_feedback_s = elementary_procedure_option<assist_info_feedback_ies_container>; |
48 | | struct positioning_info_upd_ies_container; |
49 | | using positioning_info_upd_s = elementary_procedure_option<positioning_info_upd_ies_container>; |
50 | | struct meas_report_ies_container; |
51 | | using meas_report_s = elementary_procedure_option<meas_report_ies_container>; |
52 | | struct meas_upd_ies_container; |
53 | | using meas_upd_s = elementary_procedure_option<meas_upd_ies_container>; |
54 | | struct meas_abort_ies_container; |
55 | | using meas_abort_s = elementary_procedure_option<meas_abort_ies_container>; |
56 | | struct meas_fail_ind_ies_container; |
57 | | using meas_fail_ind_s = elementary_procedure_option<meas_fail_ind_ies_container>; |
58 | | struct positioning_deactivation_ies_o; |
59 | | using positioning_deactivation_s = elementary_procedure_option<protocol_ie_container_l<positioning_deactivation_ies_o>>; |
60 | | struct meas_activation_ies_container; |
61 | | using meas_activation_s = elementary_procedure_option<meas_activation_ies_container>; |
62 | | struct srs_info_reserv_notif_ies_container; |
63 | | using srs_info_reserv_notif_s = elementary_procedure_option<srs_info_reserv_notif_ies_container>; |
64 | | struct e_c_id_meas_initiation_resp_ies_container; |
65 | | using e_c_id_meas_initiation_resp_s = elementary_procedure_option<e_c_id_meas_initiation_resp_ies_container>; |
66 | | struct otdoa_info_resp_ies_container; |
67 | | using otdoa_info_resp_s = elementary_procedure_option<otdoa_info_resp_ies_container>; |
68 | | struct positioning_info_resp_ies_container; |
69 | | using positioning_info_resp_s = elementary_procedure_option<positioning_info_resp_ies_container>; |
70 | | struct meas_resp_ies_container; |
71 | | using meas_resp_s = elementary_procedure_option<meas_resp_ies_container>; |
72 | | struct trp_info_resp_ies_container; |
73 | | using trp_info_resp_s = elementary_procedure_option<trp_info_resp_ies_container>; |
74 | | struct positioning_activation_resp_ies_container; |
75 | | using positioning_activation_resp_s = elementary_procedure_option<positioning_activation_resp_ies_container>; |
76 | | struct prs_cfg_resp_ies_container; |
77 | | using prs_cfg_resp_s = elementary_procedure_option<prs_cfg_resp_ies_container>; |
78 | | struct meas_precfg_confirm_ies_container; |
79 | | using meas_precfg_confirm_s = elementary_procedure_option<meas_precfg_confirm_ies_container>; |
80 | | struct e_c_id_meas_initiation_fail_ies_container; |
81 | | using e_c_id_meas_initiation_fail_s = elementary_procedure_option<e_c_id_meas_initiation_fail_ies_container>; |
82 | | struct otdoa_info_fail_ies_container; |
83 | | using otdoa_info_fail_s = elementary_procedure_option<otdoa_info_fail_ies_container>; |
84 | | struct positioning_info_fail_ies_container; |
85 | | using positioning_info_fail_s = elementary_procedure_option<positioning_info_fail_ies_container>; |
86 | | struct meas_fail_ies_container; |
87 | | using meas_fail_s = elementary_procedure_option<meas_fail_ies_container>; |
88 | | struct trp_info_fail_ies_container; |
89 | | using trp_info_fail_s = elementary_procedure_option<trp_info_fail_ies_container>; |
90 | | struct positioning_activation_fail_ies_container; |
91 | | using positioning_activation_fail_s = elementary_procedure_option<positioning_activation_fail_ies_container>; |
92 | | struct prs_cfg_fail_ies_container; |
93 | | using prs_cfg_fail_s = elementary_procedure_option<prs_cfg_fail_ies_container>; |
94 | | struct meas_precfg_refuse_ies_container; |
95 | | using meas_precfg_refuse_s = elementary_procedure_option<meas_precfg_refuse_ies_container>; |
96 | | |
97 | | /******************************************************************************* |
98 | | * Struct Definitions |
99 | | ******************************************************************************/ |
100 | | |
101 | | // NRPPA-ELEMENTARY-PROCEDURES ::= OBJECT SET OF NRPPA-ELEMENTARY-PROCEDURE |
102 | | struct nr_ppa_elem_procs_o { |
103 | | // InitiatingMessage ::= OPEN TYPE |
104 | | struct init_msg_c { |
105 | | struct types_opts { |
106 | | enum options { |
107 | | e_c_id_meas_initiation_request, |
108 | | otdoa_info_request, |
109 | | positioning_info_request, |
110 | | meas_request, |
111 | | trp_info_request, |
112 | | positioning_activation_request, |
113 | | prs_cfg_request, |
114 | | meas_precfg_required, |
115 | | e_c_id_meas_fail_ind, |
116 | | e_c_id_meas_report, |
117 | | e_c_id_meas_termination_cmd, |
118 | | error_ind, |
119 | | private_msg, |
120 | | assist_info_ctrl, |
121 | | assist_info_feedback, |
122 | | positioning_info_upd, |
123 | | meas_report, |
124 | | meas_upd, |
125 | | meas_abort, |
126 | | meas_fail_ind, |
127 | | positioning_deactivation, |
128 | | meas_activation, |
129 | | srs_info_reserv_notif, |
130 | | nulltype |
131 | | } value; |
132 | | |
133 | | const char* to_string() const; |
134 | | }; |
135 | | using types = enumerated<types_opts>; |
136 | | |
137 | | // choice methods |
138 | 590 | init_msg_c() = default; |
139 | | void set(types::options e = types::nulltype); |
140 | 375 | types type() const { return type_; } |
141 | | OCUDUASN_CODE pack(bit_ref& bref) const; |
142 | | OCUDUASN_CODE unpack(cbit_ref& bref); |
143 | | void to_json(json_writer& j) const; |
144 | | // getters |
145 | | e_c_id_meas_initiation_request_s& e_c_id_meas_initiation_request(); |
146 | | otdoa_info_request_s& otdoa_info_request(); |
147 | | positioning_info_request_s& positioning_info_request(); |
148 | | meas_request_s& meas_request(); |
149 | | trp_info_request_s& trp_info_request(); |
150 | | positioning_activation_request_s& positioning_activation_request(); |
151 | | prs_cfg_request_s& prs_cfg_request(); |
152 | | meas_precfg_required_s& meas_precfg_required(); |
153 | | e_c_id_meas_fail_ind_s& e_c_id_meas_fail_ind(); |
154 | | e_c_id_meas_report_s& e_c_id_meas_report(); |
155 | | e_c_id_meas_termination_cmd_s& e_c_id_meas_termination_cmd(); |
156 | | error_ind_s& error_ind(); |
157 | | private_msg_s& private_msg(); |
158 | | assist_info_ctrl_s& assist_info_ctrl(); |
159 | | assist_info_feedback_s& assist_info_feedback(); |
160 | | positioning_info_upd_s& positioning_info_upd(); |
161 | | meas_report_s& meas_report(); |
162 | | meas_upd_s& meas_upd(); |
163 | | meas_abort_s& meas_abort(); |
164 | | meas_fail_ind_s& meas_fail_ind(); |
165 | | positioning_deactivation_s& positioning_deactivation(); |
166 | | meas_activation_s& meas_activation(); |
167 | | srs_info_reserv_notif_s& srs_info_reserv_notif(); |
168 | | const e_c_id_meas_initiation_request_s& e_c_id_meas_initiation_request() const; |
169 | | const otdoa_info_request_s& otdoa_info_request() const; |
170 | | const positioning_info_request_s& positioning_info_request() const; |
171 | | const meas_request_s& meas_request() const; |
172 | | const trp_info_request_s& trp_info_request() const; |
173 | | const positioning_activation_request_s& positioning_activation_request() const; |
174 | | const prs_cfg_request_s& prs_cfg_request() const; |
175 | | const meas_precfg_required_s& meas_precfg_required() const; |
176 | | const e_c_id_meas_fail_ind_s& e_c_id_meas_fail_ind() const; |
177 | | const e_c_id_meas_report_s& e_c_id_meas_report() const; |
178 | | const e_c_id_meas_termination_cmd_s& e_c_id_meas_termination_cmd() const; |
179 | | const error_ind_s& error_ind() const; |
180 | | const private_msg_s& private_msg() const; |
181 | | const assist_info_ctrl_s& assist_info_ctrl() const; |
182 | | const assist_info_feedback_s& assist_info_feedback() const; |
183 | | const positioning_info_upd_s& positioning_info_upd() const; |
184 | | const meas_report_s& meas_report() const; |
185 | | const meas_upd_s& meas_upd() const; |
186 | | const meas_abort_s& meas_abort() const; |
187 | | const meas_fail_ind_s& meas_fail_ind() const; |
188 | | const positioning_deactivation_s& positioning_deactivation() const; |
189 | | const meas_activation_s& meas_activation() const; |
190 | | const srs_info_reserv_notif_s& srs_info_reserv_notif() const; |
191 | | |
192 | | private: |
193 | | types type_; |
194 | | choice_buffer_ptr c; |
195 | | }; |
196 | | // SuccessfulOutcome ::= OPEN TYPE |
197 | | struct successful_outcome_c { |
198 | | struct types_opts { |
199 | | enum options { |
200 | | e_c_id_meas_initiation_resp, |
201 | | otdoa_info_resp, |
202 | | positioning_info_resp, |
203 | | meas_resp, |
204 | | trp_info_resp, |
205 | | positioning_activation_resp, |
206 | | prs_cfg_resp, |
207 | | meas_precfg_confirm, |
208 | | nulltype |
209 | | } value; |
210 | | |
211 | | const char* to_string() const; |
212 | | }; |
213 | | using types = enumerated<types_opts>; |
214 | | |
215 | | // choice methods |
216 | 186 | successful_outcome_c() = default; |
217 | | void set(types::options e = types::nulltype); |
218 | 18 | types type() const { return type_; } |
219 | | OCUDUASN_CODE pack(bit_ref& bref) const; |
220 | | OCUDUASN_CODE unpack(cbit_ref& bref); |
221 | | void to_json(json_writer& j) const; |
222 | | // getters |
223 | | e_c_id_meas_initiation_resp_s& e_c_id_meas_initiation_resp(); |
224 | | otdoa_info_resp_s& otdoa_info_resp(); |
225 | | positioning_info_resp_s& positioning_info_resp(); |
226 | | meas_resp_s& meas_resp(); |
227 | | trp_info_resp_s& trp_info_resp(); |
228 | | positioning_activation_resp_s& positioning_activation_resp(); |
229 | | prs_cfg_resp_s& prs_cfg_resp(); |
230 | | meas_precfg_confirm_s& meas_precfg_confirm(); |
231 | | const e_c_id_meas_initiation_resp_s& e_c_id_meas_initiation_resp() const; |
232 | | const otdoa_info_resp_s& otdoa_info_resp() const; |
233 | | const positioning_info_resp_s& positioning_info_resp() const; |
234 | | const meas_resp_s& meas_resp() const; |
235 | | const trp_info_resp_s& trp_info_resp() const; |
236 | | const positioning_activation_resp_s& positioning_activation_resp() const; |
237 | | const prs_cfg_resp_s& prs_cfg_resp() const; |
238 | | const meas_precfg_confirm_s& meas_precfg_confirm() const; |
239 | | |
240 | | private: |
241 | | types type_; |
242 | | choice_buffer_ptr c; |
243 | | }; |
244 | | // UnsuccessfulOutcome ::= OPEN TYPE |
245 | | struct unsuccessful_outcome_c { |
246 | | struct types_opts { |
247 | | enum options { |
248 | | e_c_id_meas_initiation_fail, |
249 | | otdoa_info_fail, |
250 | | positioning_info_fail, |
251 | | meas_fail, |
252 | | trp_info_fail, |
253 | | positioning_activation_fail, |
254 | | prs_cfg_fail, |
255 | | meas_precfg_refuse, |
256 | | nulltype |
257 | | } value; |
258 | | |
259 | | const char* to_string() const; |
260 | | }; |
261 | | using types = enumerated<types_opts>; |
262 | | |
263 | | // choice methods |
264 | 93 | unsuccessful_outcome_c() = default; |
265 | | void set(types::options e = types::nulltype); |
266 | 0 | types type() const { return type_; } |
267 | | OCUDUASN_CODE pack(bit_ref& bref) const; |
268 | | OCUDUASN_CODE unpack(cbit_ref& bref); |
269 | | void to_json(json_writer& j) const; |
270 | | // getters |
271 | | e_c_id_meas_initiation_fail_s& e_c_id_meas_initiation_fail(); |
272 | | otdoa_info_fail_s& otdoa_info_fail(); |
273 | | positioning_info_fail_s& positioning_info_fail(); |
274 | | meas_fail_s& meas_fail(); |
275 | | trp_info_fail_s& trp_info_fail(); |
276 | | positioning_activation_fail_s& positioning_activation_fail(); |
277 | | prs_cfg_fail_s& prs_cfg_fail(); |
278 | | meas_precfg_refuse_s& meas_precfg_refuse(); |
279 | | const e_c_id_meas_initiation_fail_s& e_c_id_meas_initiation_fail() const; |
280 | | const otdoa_info_fail_s& otdoa_info_fail() const; |
281 | | const positioning_info_fail_s& positioning_info_fail() const; |
282 | | const meas_fail_s& meas_fail() const; |
283 | | const trp_info_fail_s& trp_info_fail() const; |
284 | | const positioning_activation_fail_s& positioning_activation_fail() const; |
285 | | const prs_cfg_fail_s& prs_cfg_fail() const; |
286 | | const meas_precfg_refuse_s& meas_precfg_refuse() const; |
287 | | |
288 | | private: |
289 | | types type_; |
290 | | choice_buffer_ptr c; |
291 | | }; |
292 | | |
293 | | // members lookup methods |
294 | | static uint16_t idx_to_proc_code(uint32_t idx); |
295 | | static bool is_proc_code_valid(const uint16_t& proc_code); |
296 | | static init_msg_c get_init_msg(const uint16_t& proc_code); |
297 | | static successful_outcome_c get_successful_outcome(const uint16_t& proc_code); |
298 | | static unsuccessful_outcome_c get_unsuccessful_outcome(const uint16_t& proc_code); |
299 | | static crit_e get_crit(const uint16_t& proc_code); |
300 | | }; |
301 | | |
302 | | // InitiatingMessage ::= SEQUENCE{{NRPPA-ELEMENTARY-PROCEDURE}} |
303 | | struct init_msg_s { |
304 | | uint16_t proc_code = 0; |
305 | | crit_e crit; |
306 | | uint16_t nrppatransaction_id = 0; |
307 | | nr_ppa_elem_procs_o::init_msg_c value; |
308 | | |
309 | | OCUDUASN_CODE pack(bit_ref& bref) const; |
310 | | OCUDUASN_CODE unpack(cbit_ref& bref); |
311 | | void to_json(json_writer& j) const; |
312 | | bool load_info_obj(const uint16_t& proc_code_); |
313 | | }; |
314 | | |
315 | | // SuccessfulOutcome ::= SEQUENCE{{NRPPA-ELEMENTARY-PROCEDURE}} |
316 | | struct successful_outcome_s { |
317 | | uint16_t proc_code = 0; |
318 | | crit_e crit; |
319 | | uint16_t nrppatransaction_id = 0; |
320 | | nr_ppa_elem_procs_o::successful_outcome_c value; |
321 | | |
322 | | OCUDUASN_CODE pack(bit_ref& bref) const; |
323 | | OCUDUASN_CODE unpack(cbit_ref& bref); |
324 | | void to_json(json_writer& j) const; |
325 | | bool load_info_obj(const uint16_t& proc_code_); |
326 | | }; |
327 | | |
328 | | // UnsuccessfulOutcome ::= SEQUENCE{{NRPPA-ELEMENTARY-PROCEDURE}} |
329 | | struct unsuccessful_outcome_s { |
330 | | uint16_t proc_code = 0; |
331 | | crit_e crit; |
332 | | uint16_t nrppatransaction_id = 0; |
333 | | nr_ppa_elem_procs_o::unsuccessful_outcome_c value; |
334 | | |
335 | | OCUDUASN_CODE pack(bit_ref& bref) const; |
336 | | OCUDUASN_CODE unpack(cbit_ref& bref); |
337 | | void to_json(json_writer& j) const; |
338 | | bool load_info_obj(const uint16_t& proc_code_); |
339 | | }; |
340 | | |
341 | | // NRPPA-PDU ::= CHOICE |
342 | | struct nr_ppa_pdu_c { |
343 | | struct types_opts { |
344 | | enum options { init_msg, successful_outcome, unsuccessful_outcome, /*...*/ nulltype } value; |
345 | | |
346 | | const char* to_string() const; |
347 | | }; |
348 | | using types = enumerated<types_opts, true>; |
349 | | |
350 | | // choice methods |
351 | 501 | nr_ppa_pdu_c() = default; |
352 | | nr_ppa_pdu_c(const nr_ppa_pdu_c& other); |
353 | | nr_ppa_pdu_c& operator=(const nr_ppa_pdu_c& other); |
354 | 501 | ~nr_ppa_pdu_c() { destroy_(); } |
355 | | void set(types::options e = types::nulltype); |
356 | 393 | types type() const { return type_; } |
357 | | OCUDUASN_CODE pack(bit_ref& bref) const; |
358 | | OCUDUASN_CODE unpack(cbit_ref& bref); |
359 | | void to_json(json_writer& j) const; |
360 | | // getters |
361 | | init_msg_s& init_msg() |
362 | 125 | { |
363 | 125 | assert_choice_type(types::init_msg, type_, "NRPPA-PDU"); |
364 | 125 | return c.get<init_msg_s>(); |
365 | 125 | } |
366 | | successful_outcome_s& successful_outcome() |
367 | 6 | { |
368 | 6 | assert_choice_type(types::successful_outcome, type_, "NRPPA-PDU"); |
369 | 6 | return c.get<successful_outcome_s>(); |
370 | 6 | } |
371 | | unsuccessful_outcome_s& unsuccessful_outcome() |
372 | 0 | { |
373 | 0 | assert_choice_type(types::unsuccessful_outcome, type_, "NRPPA-PDU"); |
374 | 0 | return c.get<unsuccessful_outcome_s>(); |
375 | 0 | } |
376 | | const init_msg_s& init_msg() const |
377 | 125 | { |
378 | 125 | assert_choice_type(types::init_msg, type_, "NRPPA-PDU"); |
379 | 125 | return c.get<init_msg_s>(); |
380 | 125 | } |
381 | | const successful_outcome_s& successful_outcome() const |
382 | 6 | { |
383 | 6 | assert_choice_type(types::successful_outcome, type_, "NRPPA-PDU"); |
384 | 6 | return c.get<successful_outcome_s>(); |
385 | 6 | } |
386 | | const unsuccessful_outcome_s& unsuccessful_outcome() const |
387 | 0 | { |
388 | 0 | assert_choice_type(types::unsuccessful_outcome, type_, "NRPPA-PDU"); |
389 | 0 | return c.get<unsuccessful_outcome_s>(); |
390 | 0 | } |
391 | | init_msg_s& set_init_msg(); |
392 | | successful_outcome_s& set_successful_outcome(); |
393 | | unsuccessful_outcome_s& set_unsuccessful_outcome(); |
394 | | |
395 | | private: |
396 | | types type_; |
397 | | choice_buffer_t<init_msg_s, successful_outcome_s, unsuccessful_outcome_s> c; |
398 | | |
399 | | void destroy_(); |
400 | | }; |
401 | | |
402 | | } // namespace nrppa |
403 | | } // namespace asn1 |