/*
 * Generated by asn1c-0.9.28 (http://lionet.info/asn1c)
 * From ASN.1 module "RANAP-IEs"
 * 	found in "../../asn1/ranap/RANAP-IEs.asn"
 */

#ifndef	_RANAP_ReportInterval_H_
#define	_RANAP_ReportInterval_H_


#include <asn_application.h>

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

#ifdef __cplusplus
extern "C" {
#endif

/* Dependencies */
typedef enum RANAP_ReportInterval {
	RANAP_ReportInterval_ms250	= 0,
	RANAP_ReportInterval_ms500	= 1,
	RANAP_ReportInterval_ms1000	= 2,
	RANAP_ReportInterval_ms2000	= 3,
	RANAP_ReportInterval_ms3000	= 4,
	RANAP_ReportInterval_ms4000	= 5,
	RANAP_ReportInterval_ms6000	= 6,
	RANAP_ReportInterval_ms12000	= 7,
	RANAP_ReportInterval_ms16000	= 8,
	RANAP_ReportInterval_ms20000	= 9,
	RANAP_ReportInterval_ms24000	= 10,
	RANAP_ReportInterval_ms32000	= 11,
	RANAP_ReportInterval_ms64000	= 12,
	/*
	 * Enumeration is extensible
	 */
	RANAP_ReportInterval_ms8000	= 13,
	RANAP_ReportInterval_ms28000	= 14
} e_RANAP_ReportInterval;

/* RANAP_ReportInterval */
typedef long	 RANAP_ReportInterval_t;

/* Implementation */
extern asn_TYPE_descriptor_t asn_DEF_RANAP_ReportInterval;
asn_struct_free_f RANAP_ReportInterval_free;
asn_struct_print_f RANAP_ReportInterval_print;
asn_constr_check_f RANAP_ReportInterval_constraint;
ber_type_decoder_f RANAP_ReportInterval_decode_ber;
der_type_encoder_f RANAP_ReportInterval_encode_der;
xer_type_decoder_f RANAP_ReportInterval_decode_xer;
xer_type_encoder_f RANAP_ReportInterval_encode_xer;
per_type_decoder_f RANAP_ReportInterval_decode_uper;
per_type_encoder_f RANAP_ReportInterval_encode_uper;
per_type_decoder_f RANAP_ReportInterval_decode_aper;
per_type_encoder_f RANAP_ReportInterval_encode_aper;

#ifdef __cplusplus
}
#endif

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