/*
 * Generated by asn1c-0.9.29 (http://lionet.info/asn1c)
 * From ASN.1 module "X2AP-IEs"
 * 	found in "Spec/e2_and_x2-combined-and-minimized.asn1"
 * 	`asn1c -pdu=auto -fincludes-quoted -fcompound-names -fno-include-deps -gen-PER -no-gen-OER -no-gen-example`
 */

#ifndef	_PA_Values_H_
#define	_PA_Values_H_


#include "asn_application.h"

/* Including external dependencies */
#include "NativeEnumerated.h"

#ifdef __cplusplus
extern "C" {
#endif

/* Dependencies */
typedef enum PA_Values {
	PA_Values_dB_6	= 0,
	PA_Values_dB_4dot77	= 1,
	PA_Values_dB_3	= 2,
	PA_Values_dB_1dot77	= 3,
	PA_Values_dB0	= 4,
	PA_Values_dB1	= 5,
	PA_Values_dB2	= 6,
	PA_Values_dB3	= 7
	/*
	 * Enumeration is extensible
	 */
} e_PA_Values;

/* PA-Values */
typedef long	 PA_Values_t;

/* Implementation */
extern asn_per_constraints_t asn_PER_type_PA_Values_constr_1;
extern asn_TYPE_descriptor_t asn_DEF_PA_Values;
extern const asn_INTEGER_specifics_t asn_SPC_PA_Values_specs_1;
asn_struct_free_f PA_Values_free;
asn_struct_print_f PA_Values_print;
asn_constr_check_f PA_Values_constraint;
ber_type_decoder_f PA_Values_decode_ber;
der_type_encoder_f PA_Values_encode_der;
xer_type_decoder_f PA_Values_decode_xer;
xer_type_encoder_f PA_Values_encode_xer;
per_type_decoder_f PA_Values_decode_uper;
per_type_encoder_f PA_Values_encode_uper;
per_type_decoder_f PA_Values_decode_aper;
per_type_encoder_f PA_Values_encode_aper;

#ifdef __cplusplus
}
#endif

#endif	/* _PA_Values_H_ */
#include "asn_internal.h"
