/*
 * Generated by asn1c-0.9.21 (http://lionet.info/asn1c)
 * From ASN.1 module "MMS"
 * 	found in "../mms-extended.asn"
 * 	`asn1c -fskeletons-copy`
 */

#ifndef	_AlternateAccessSelection_H_
#define	_AlternateAccessSelection_H_


#include <asn_application.h>

/* Including external dependencies */
#include "Identifier.h"
#include "Unsigned32.h"
#include <NULL.h>
#include <constr_SEQUENCE.h>
#include <constr_CHOICE.h>

#ifdef __cplusplus
extern "C" {
#endif

/* Dependencies */
typedef enum AlternateAccessSelection_PR {
	AlternateAccessSelection_PR_NOTHING,	/* No components present */
	AlternateAccessSelection_PR_selectAlternateAccess,
	AlternateAccessSelection_PR_selectAccess
} AlternateAccessSelection_PR;
typedef enum AlternateAccessSelection__selectAlternateAccess__accessSelection_PR {
	AlternateAccessSelection__selectAlternateAccess__accessSelection_PR_NOTHING,	/* No components present */
	AlternateAccessSelection__selectAlternateAccess__accessSelection_PR_component,
	AlternateAccessSelection__selectAlternateAccess__accessSelection_PR_index,
	AlternateAccessSelection__selectAlternateAccess__accessSelection_PR_indexRange,
	AlternateAccessSelection__selectAlternateAccess__accessSelection_PR_allElements
} AlternateAccessSelection__selectAlternateAccess__accessSelection_PR;
typedef enum AlternateAccessSelection__selectAccess_PR {
	AlternateAccessSelection__selectAccess_PR_NOTHING,	/* No components present */
	AlternateAccessSelection__selectAccess_PR_component,
	AlternateAccessSelection__selectAccess_PR_index,
	AlternateAccessSelection__selectAccess_PR_indexRange,
	AlternateAccessSelection__selectAccess_PR_allElements
} AlternateAccessSelection__selectAccess_PR;

/* Forward declarations */
struct AlternateAccess;

/* AlternateAccessSelection */
typedef struct AlternateAccessSelection {
	AlternateAccessSelection_PR present;
	union AlternateAccessSelection_u {
		struct AlternateAccessSelection__selectAlternateAccess {
			struct AlternateAccessSelection__selectAlternateAccess__accessSelection {
				AlternateAccessSelection__selectAlternateAccess__accessSelection_PR present;
				union AlternateAccessSelection__selectAlternateAccess__accessSelection_u {
					Identifier_t	 component;
					Unsigned32_t	 index;
					struct AlternateAccessSelection__selectAlternateAccess__accessSelection__indexRange {
						Unsigned32_t	 lowIndex;
						Unsigned32_t	 numberOfElements;
						
						/* Context for parsing across buffer boundaries */
						asn_struct_ctx_t _asn_ctx;
					} indexRange;
					NULL_t	 allElements;
				} choice;
				
				/* Context for parsing across buffer boundaries */
				asn_struct_ctx_t _asn_ctx;
			} accessSelection;
			struct AlternateAccess	*alternateAccess;
			
			/* Context for parsing across buffer boundaries */
			asn_struct_ctx_t _asn_ctx;
		} selectAlternateAccess;
		struct AlternateAccessSelection__selectAccess {
			AlternateAccessSelection__selectAccess_PR present;
			union AlternateAccessSelection__selectAccess_u {
				Identifier_t	 component;
				Unsigned32_t	 index;
				struct AlternateAccessSelection__selectAccess__indexRange {
					Unsigned32_t	 lowIndex;
					Unsigned32_t	 numberOfElements;
					
					/* Context for parsing across buffer boundaries */
					asn_struct_ctx_t _asn_ctx;
				} indexRange;
				NULL_t	 allElements;
			} choice;
			
			/* Context for parsing across buffer boundaries */
			asn_struct_ctx_t _asn_ctx;
		} selectAccess;
	} choice;
	
	/* Context for parsing across buffer boundaries */
	asn_struct_ctx_t _asn_ctx;
} AlternateAccessSelection_t;

/* Implementation */
LIB61850_INTERNAL extern asn_TYPE_descriptor_t asn_DEF_AlternateAccessSelection;

#ifdef __cplusplus
}
#endif

/* Referred external types */
#include "AlternateAccess.h"

#endif	/* _AlternateAccessSelection_H_ */
