Coverage Report

Created: 2026-10-28 07:21

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/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