/*
 * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
 * From ASN.1 module "X2AP-CommonDataTypes"
 * 	found in "Spec/e2ap-v031ex.asn"
 * 	`asn1c -fcompound-names -fno-include-deps -findirect-choice -gen-PER`
 */

#ifndef	_ProcedureCode_H_
#define	_ProcedureCode_H_


#include <asn_application.h>

/* Including external dependencies */
#include <NativeInteger.h>

#ifdef __cplusplus
extern "C" {
#endif

/* ProcedureCode */
typedef long	 ProcedureCode_t;

/* Implementation */
#define ProcedureCode_id_ricSubscription	((ProcedureCode_t)201)
#define ProcedureCode_id_ricSubscriptionDelete	((ProcedureCode_t)202)
#define ProcedureCode_id_ricServiceUpdate	((ProcedureCode_t)203)
#define ProcedureCode_id_ricControl	((ProcedureCode_t)204)
#define ProcedureCode_id_ricIndication	((ProcedureCode_t)205)
#define ProcedureCode_id_ricServiceQuery	((ProcedureCode_t)206)
extern asn_per_constraints_t asn_PER_type_ProcedureCode_constr_1;
extern asn_TYPE_descriptor_t asn_DEF_ProcedureCode;
asn_struct_free_f ProcedureCode_free;
asn_struct_print_f ProcedureCode_print;
asn_constr_check_f ProcedureCode_constraint;
ber_type_decoder_f ProcedureCode_decode_ber;
der_type_encoder_f ProcedureCode_encode_der;
xer_type_decoder_f ProcedureCode_decode_xer;
xer_type_encoder_f ProcedureCode_encode_xer;
oer_type_decoder_f ProcedureCode_decode_oer;
oer_type_encoder_f ProcedureCode_encode_oer;
per_type_decoder_f ProcedureCode_decode_uper;
per_type_encoder_f ProcedureCode_encode_uper;
per_type_decoder_f ProcedureCode_decode_aper;
per_type_encoder_f ProcedureCode_encode_aper;
#define ProcedureCode_id_handoverPreparation	((ProcedureCode_t)0)
#define ProcedureCode_id_handoverCancel	((ProcedureCode_t)1)
#define ProcedureCode_id_loadIndication	((ProcedureCode_t)2)
#define ProcedureCode_id_errorIndication	((ProcedureCode_t)3)
#define ProcedureCode_id_snStatusTransfer	((ProcedureCode_t)4)
#define ProcedureCode_id_uEContextRelease	((ProcedureCode_t)5)
#define ProcedureCode_id_x2Setup	((ProcedureCode_t)6)
#define ProcedureCode_id_reset	((ProcedureCode_t)7)
#define ProcedureCode_id_eNBConfigurationUpdate	((ProcedureCode_t)8)
#define ProcedureCode_id_resourceStatusReportingInitiation	((ProcedureCode_t)9)
#define ProcedureCode_id_resourceStatusReporting	((ProcedureCode_t)10)
#define ProcedureCode_id_privateMessage	((ProcedureCode_t)11)
#define ProcedureCode_id_mobilitySettingsChange	((ProcedureCode_t)12)
#define ProcedureCode_id_rLFIndication	((ProcedureCode_t)13)
#define ProcedureCode_id_handoverReport	((ProcedureCode_t)14)
#define ProcedureCode_id_cellActivation	((ProcedureCode_t)15)
#define ProcedureCode_id_x2Release	((ProcedureCode_t)16)
#define ProcedureCode_id_x2APMessageTransfer	((ProcedureCode_t)17)
#define ProcedureCode_id_x2Removal	((ProcedureCode_t)18)
#define ProcedureCode_id_seNBAdditionPreparation	((ProcedureCode_t)19)
#define ProcedureCode_id_seNBReconfigurationCompletion	((ProcedureCode_t)20)
#define ProcedureCode_id_meNBinitiatedSeNBModificationPreparation	((ProcedureCode_t)21)
#define ProcedureCode_id_seNBinitiatedSeNBModification	((ProcedureCode_t)22)
#define ProcedureCode_id_meNBinitiatedSeNBRelease	((ProcedureCode_t)23)
#define ProcedureCode_id_seNBinitiatedSeNBRelease	((ProcedureCode_t)24)
#define ProcedureCode_id_seNBCounterCheck	((ProcedureCode_t)25)
#define ProcedureCode_id_retrieveUEContext	((ProcedureCode_t)26)
#define ProcedureCode_id_sgNBAdditionPreparation	((ProcedureCode_t)27)
#define ProcedureCode_id_sgNBReconfigurationCompletion	((ProcedureCode_t)28)
#define ProcedureCode_id_meNBinitiatedSgNBModificationPreparation	((ProcedureCode_t)29)
#define ProcedureCode_id_sgNBinitiatedSgNBModification	((ProcedureCode_t)30)
#define ProcedureCode_id_meNBinitiatedSgNBRelease	((ProcedureCode_t)31)
#define ProcedureCode_id_sgNBinitiatedSgNBRelease	((ProcedureCode_t)32)
#define ProcedureCode_id_sgNBCounterCheck	((ProcedureCode_t)33)
#define ProcedureCode_id_sgNBChange	((ProcedureCode_t)34)
#define ProcedureCode_id_rRCTransfer	((ProcedureCode_t)35)
#define ProcedureCode_id_endcX2Setup	((ProcedureCode_t)36)
#define ProcedureCode_id_endcConfigurationUpdate	((ProcedureCode_t)37)
#define ProcedureCode_id_secondaryRATDataUsageReport	((ProcedureCode_t)38)
#define ProcedureCode_id_endcCellActivation	((ProcedureCode_t)39)
#define ProcedureCode_id_endcPartialReset	((ProcedureCode_t)40)
#define ProcedureCode_id_eUTRANRCellResourceCoordination	((ProcedureCode_t)41)
#define ProcedureCode_id_SgNBActivityNotification	((ProcedureCode_t)42)
#define ProcedureCode_id_endcX2Removal	((ProcedureCode_t)43)
#define ProcedureCode_id_dataForwardingAddressIndication	((ProcedureCode_t)44)
#define ProcedureCode_id_gNBStatusIndication	((ProcedureCode_t)45)

#ifdef __cplusplus
}
#endif

#endif	/* _ProcedureCode_H_ */
#include <asn_internal.h>
