-- CS module extracted from ITU-T Z.165.1 (05/2012)
namespace Etsi.Ttcn3.XTri
{
    public interface ITriBoolean
    {
        bool BooleanValue { get; set; }
    }
    public interface IQualifiedName
    {
        string ModuleName { get; }
        string BaseName { get; }
        bool Equals(IQualifiedName name);
    }
    public interface ITriPortId
    {
        string PortName { get; }
        ITriComponentId Component { get; }
        bool IsArray { get; }
        int PortIndex { get; }
        IQualifiedName PortTypeName { get; }
    }
    public interface ITriPortIdList
        : System.Collections.IEnumerable
    {
        int Size { get; }
        bool IsEmpty { get; }
        ITriPortId this[int index] { get; }
    }
    public interface ITriComponentId
    {
        string ComponentId { get; }
        string ComponentName { get; }
        IQualifiedName ComponentTypeName { get; }
        bool Equals(ITriComponentId comp);
    }
    public interface ITriComponentIdList : System.Collections.IEnumerable
    {
        int Size { get; }
        bool IsEmpty { get; }
        ITriComponentId this[int index] { get; }
        void Clear();
        void Add(ITriComponentId comp);
    }
    public interface ITriMessage
    {
        byte[] EncodedMessage { get; set; }
        int NumberOfBits { get; }
        void SetEncodedMessage(byte[] data, int numberOfBits);
        bool Equals(ITriMessage msg);
    }
    public interface ITriAddress
    {
        byte[] EncodedAddress { get; set; }
        bool Equals(ITriAddress addr);
    }
    public interface ITriAddressList : System.Collections.IEnumerable
    {
        int Size { get; }
        bool IsEmpty { get; }
        ITriAddress this[int index] { get; }
        void Clear();
        void Add(ITriAddress addr);
    }
    public interface ITriSignatureId : IQualifiedName { }
    public interface ITriParameter
    {
        string ParameterName { get; set; }
        TriParameterPassingMode ParameterPassingMode { get; set; }
        byte[] EncodedParameter { get; set; }
    }
    public interface ITriParameterList : System.Collections.IEnumerable
    {
        int Size { get; }
        bool IsEmpty { get; }
        ITriParameterId this[int index] { get; }
        void Clear();
        void Add(ITriParameter comp);
    }
    public interface ITriException
    {
        byte[] EncodedException { get; set; }
        bool Equals(ITriException exception);
    }
    public interface ITriTimerId
    {
        string TimerName { get;	}
        bool Equals(ITriTimerId timer);
    }
    public interface ITriTimerDuration
    {
        double Duration { get; set; }
        bool Equals(ITriTimerDuration duration);
    }
    public interface ITriFunctionId : IQualifiedName { }
    public interface ITriTestCaseId : IQualifiedName { }
    public enum TriStatus
    {
        TriOk = 0,
        TriError = -1
    }
	public interface IXTriCommunicationSA {
	// Reset operation
	// Ref: TRI-Definition 5.5.1
	TriStatus XTriMapParam(ITriPortId compPortId, ITriPortId tsiPortId,
		ITciValueList parameterList);
	// Ref: TRI-Definition 5.5.2.3
	TriStatus XTriUnmapParam(ITriPortId compPortId, ITriPortId tsiPortId,
		ITciValueList parameterList);
	// Ref: TRI-Definition 5.5.2.4
	// Message based communication operations
	// Ref: TRI-Definition 5.5.3.1
	TriStatus XTriSend(ITriComponentId componentId, ITriPortId tsiPortId,
		ITciValue address, ITciValue sentMessage);
	// Ref: TRI-Definition 5.5.3.2
	TriStatus XTriSendBC(ITriComponentId componentId, ITriPortId tsiPortId,
		ITciValue sentMessage);
	// Ref: TRI-Definition 5.5.3.3
	TriStatus XTriSendMC(ITriComponentId componentId, ITriPortId tsiPortId,
		ITciValueList addresses, ITciValue sentMessage);
	// Procedure based communication operations
	// Ref: TRI-Definition 5.5.4.1
	TriStatus XTriCall(ITriComponentId componentId, ITriPortId tsiPortId,
		ITciValue sutAddress, ITriSignatureId signatureId,
		ITciValueList parameterList);
	// Ref: TRI-Definition 5.5.4.2
	TriStatus XTriCallBC(ITriComponentId componentId, ITriPortId tsiPortId,
		ITriSignatureId signatureId, ITciValueList parameterList);
	// Ref: TRI-Definition 5.5.4.3
	TriStatus XTriCallMC(ITriComponentId componentId, ITriPortId tsiPortId,
		ITciValueList sutAddresses, ITriSignatureId signatureId,
		ITciValueList parameterList);
	// Ref: TRI-Definition 5.5.4.4
	TriStatus XTriReply(ITriComponentId componentId, ITriPortId tsiPortId,
		ITciValue sutAddress, ITriSignatureId signatureId,
		ITciValueList parameterList, ITciValue returnValue);
	// Ref: TRI-Definition 5.5.4.5
	TriStatus XTriReplyBC(ITriComponentId componentId, ITriPortId tsiPortId,
		ITriSignatureId signatureId, ITciValueList parameterList,
		ITciValue returnValue);
	// Ref: TRI-Definition 5.5.4.6
	TriStatus XTriReplyMC(ITriComponentId componentId, ITriPortId tsiPortId,
		ITciValueList sutAddresses, ITriSignatureId signatureId,
		ITciValueList parameterList, ITciValue returnValue);
	// Ref: TRI-Definition 5.5.4.7
	TriStatus XTriRaise(ITriComponentId componentId, ITriPortId tsiPortId,
		ITciValue sutAddress, ITriSignatureId signatureId,
		ITciValue exc);
	// Ref: TRI-Definition 5.5.4.8
	TriStatus XTriRaiseBC(ITriComponentId componentId, ITriPortId tsiPortId,
		ITriSignatureId signatureId, ITciValue exc);
	// Ref: TRI-Definition 5.5.4.9
	TriStatus XTriRaiseMC(ITriComponentId componentId, ITriPortId tsiPortId,
		ITciValueList sutAddresses, ITriSignatureId signatureId,
		ITciValue exc);
	}
	
	public interface IXTriCommunicationTE {
	// Message based communication operations
	// Ref: TRI-Definition 5.5.3.4
	void XTriEnqueueMessage(ITriPortId tsiPortId, Object sutAddress,
		ITriComponentId componentId, Object msg);
	// Procedure based communication operations
	// Ref: TRI-Definition 5.5.4.10
	void XTriEnqueueCall(ITriPortId tsiPortId, Object sutAddress,
		ITriComponentId componentId, ITriSignatureId signatureId, 
		ITciValueList parameterList);
	// Ref: TRI-Definition 5.5.4.10
	void XTriEnqueueReply(ITriPortId tsiPortId, Object sutAddress,
		ITriComponentId componentId, ITriSignatureId signatureId, 
		ITciValueList parameterList, ITciValue returnValue);
	// Ref: TRI-Definition 5.5.4.11
	void XTriEnqueueException(ITriPortId tsiPortId, Object sutAddress,
		ITriComponentId componentId, ITriSignatureId signatureId, 
		Object exc);
	// Ref: TRI Definition 5.5.3.5
	ITciValue XTriConvert(Object value, ITciType typeHypothesis);
	}
	public interface IXTriPlatformPA {
	// Ref: TRI-Definition 5.6.1	// Miscellaneous operations
	// Ref: TRI-Definition 5.6.3.1
	TriStatus XTriExternalFunction(ITriFunctionId functionId, 
		ITciValueList parameterList, ITciValue returnValue);
	}
    public interface ITriPlatformTE
    {
        // Ref: TRI-Definition 5.6.2.5
        void TriTimeout(ITriTimerId timerId);
    }
}