using System;
using System.Collections.Generic;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;

namespace UnifiedPOS.Biometrics.V1_4
{
    [ServiceContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/")]
    public interface Biometrics
    {
        #region Version 1.1

        //
        // Common Properties
        //

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetAutoDisable", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetAutoDisableResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        bool GetAutoDisable(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/SetAutoDisable", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/SetAutoDisableResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        void SetAutoDisable(string ConsumerID, bool AutoDisable);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetCapCompareFirmwareVersion", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetCapCompareFirmwareVersionResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        bool GetCapCompareFirmwareVersion(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetCapPowerReporting", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetCapPowerReportingResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        PowerReporting GetCapPowerReporting(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetCapStatisticsReporting", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetCapStatisticsReportingResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        bool GetCapStatisticsReporting(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetCapUpdateFirmware", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetCapUpdateFirmwareResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        bool GetCapUpdateFirmware(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetCapUpdateStatistics", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetCapUpdateStatisticsResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        bool GetCapUpdateStatistics(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetCheckHealthText", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetCheckHealthTextResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        string GetCheckHealthText(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetClaimed", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetClaimedResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        bool GetClaimed(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetDataCount", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetDataCountResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        int GetDataCount(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetDataEventEnabled", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetDataEventEnabledResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        bool GetDataEventEnabled(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/SetDataEventEnabled", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/SetDataEventEnabledResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        void SetDataEventEnabled(string ConsumerID, bool DataEventEnabled);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetDeviceEnabled", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetDeviceEnabledResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        bool GetDeviceEnabled(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/SetDeviceEnabled", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/SetDeviceEnabledResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        void SetDeviceEnabled(string ConsumerID, bool DeviceEnabled);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetFreezeEvents", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetFreezeEventsResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        bool GetFreezeEvents(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/SetFreezeEvents", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/SetFreezeEventsResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        void SetFreezeEvents(string ConsumerID, bool FreezeEvents);

        //[OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetOutputID", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetOutputIDResponse")]
        //[FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        //int GetOutputID(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetPowerNotify", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetPowerNotifyResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        PowerNotification GetPowerNotify(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/SetPowerNotify", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/SetPowerNotifyResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        void SetPowerNotify(string ConsumerID, PowerNotification PowerNotify);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetPowerState", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetPowerStateResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        PowerState GetPowerState(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetState", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetStateResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        ControlState GetState(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetDeviceControlDescription", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetDeviceControlDescriptionResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        string GetDeviceControlDescription(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetDeviceControlVersion", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetDeviceControlVersionResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        UposVersion GetDeviceControlVersion(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetDeviceServiceDescription", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetDeviceServiceDescriptionResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        string GetDeviceServiceDescription(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetDeviceServiceVersion", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetDeviceServiceVersionResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        UposVersion GetDeviceServiceVersion(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetPhysicalDeviceDescription", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetPhysicalDeviceDescriptionResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        string GetPhysicalDeviceDescription(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetPhysicalDeviceName", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetPhysicalDeviceNameResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        string GetPhysicalDeviceName(string ConsumerID);

        //
        // Specific Properties
        //

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetAlgorithm", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetAlgorithmResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        int GetAlgorithm(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/SetAlgorithm", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/SetAlgorithmResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        void SetAlgorithm(string ConsumerID, int Algorithm);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetAlgorithmList", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetAlgorithmListResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        AlgorithmList GetAlgorithmList(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetBIR", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetBIRResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        BiometricsInformationRecord GetBIR(string ConsumerID);
        
        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetCapPrematchData", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetCapPrematchDataResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        bool GetCapPrematchData(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetCapRawSensorData", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetGetCapRawSensorDataResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        bool GetCapRawSensorData(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetCapRealTimeData", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetCapRealTimeDataResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        bool GetCapRealTimeData(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetCapSensorColor", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetCapSensorColorResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        int GetCapSensorColor(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetCapSensorOrientation", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetCapSensorOrientationResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        int GetCapSensorOrientation(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetCapSensorType", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetCapSensorTypeResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        int GetCapSensorType(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetCapTemplateAdaptation", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetCapTemplateAdaptationResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        bool GetCapTemplateAdaptation(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetRawSensorData", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetRawSensorDataResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        byte[] GetRawSensorData(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetRealTimeDataEnabled", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetRealTimeDataEnabledResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        bool GetRealTimeDataEnabled(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/SetRealTimeDataEnabled", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/SetRealTimeDataEnabledResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        void SetRealTimeDataEnabled(string ConsumerID, bool RealTimeDataEnabled);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetSensorBPP", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetSensorBPPResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        int GetSensorBPP(string ConsumerID);
        
        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetSensorColor", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetSensorColorResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        SensorColor GetSensorColor(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/SetSensorColor", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/SetSensorColorResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        void SetSensorColor(string ConsumerID, SensorColor SensorColor);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetSensorHeight", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetSensorHeightResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        int GetSensorHeight(string ConsumerID);
        
        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetSensorOrientation", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetSensorOrientationResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        SensorOrientation GetSensorOrientation(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/SetSensorOrientation", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/SetSensorOrientationResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        void SetSensorOrientation(string ConsumerID, SensorOrientation SensorOrientation);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetSensorType", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetSensorTypeResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        SensorType GetSensorType(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/SetSensorType", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/SetSensorTypeResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        void SetSensorType(string ConsumerID, SensorType SensorType);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetSensorWidth", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetSensorWidth")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        int GetSensorWidth(string ConsumerID);
        
        //
        // Common Methods
        //

        //[OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/Open", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/OpenResponse")]
        //[FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        //void Open(string ConsumerID, string EndpointAddress);

        //[OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/Close", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/CloseResponse")]
        //[FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        //void Close(string ConsumerID, string EndpointAddress);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/Claim", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/ClaimResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        void Claim(string ConsumerID, int Timeout);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/Release", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/ReleaseResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        void Release(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/CheckHealth", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/CheckHealthResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        void CheckHealth(string ConsumerID, HealthCheckLevel Level);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/ClearInput", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/ClearInputResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        void ClearInput(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/ClearInputProperties", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/ClearInputPropertiesResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        void ClearInputProperties(string ConsumerID);

        //[OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/ClearOutput", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/ClearOutputResponse")]
        //[FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        //void ClearOutput(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/DirectIO", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/DirectIOResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        DirectIOData DirectIO(string ConsumerID, int Command, int Data, object Obj);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/CompareFirmwareVersion", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/CompareFirmwareVersionResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        CompareFirmwareResult CompareFirmwareVersion(string ConsumerID, string FirmwareFileName);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/ResetStatistics", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/ResetStatisticsResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        void ResetStatistics(string ConsumerID, StatisticList StatisticsBuffer);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/RetrieveStatistics", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/RetrieveStatisticsResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        string RetrieveStatistics(string ConsumerID, StatisticList StatisticsBuffer);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UpdateFirmware", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UpdateFirmwareResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        void UpdateFirmware(string ConsumerID, string FirmwareFileName);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UpdateStatistics", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UpdateStatisticsResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        void UpdateStatistics(string ConsumerID, StatisticList StatisticsBuffer);

        //
        // Specific Methods
        //

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/BeginEnrollCapture", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/BeginEnrollCaptureResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        void BeginEnrollCapture(string ConsumerID, BiometricsInformationRecord ReferenceBIR, byte[] Payload);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/BeginVerifyCapture", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/BeginVerifyCaptureResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        void BeginVerifyCapture(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/EndCapture", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/EndCaptureResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        void EndCapture(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/Identify", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/IdentifyResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        IdentifyList Identify(string ConsumerID, int MaxFARRequested, int MaxFRRRequested, bool FARPrecedence, BiometricsInformationRecordList ReferenceBIRPopulation, int Timeout);
        
        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/IdentifyMatch", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/IdentifyMatchResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        IdentifyMatchList IdentifyMatch(string ConsumerID, int MaxFARRequested, int MaxFRRRequested, bool FARPrecedence, BiometricsInformationRecord SampleBIR, BiometricsInformationRecordList ReferenceBIRPopulation);
        
        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/ProcessPrematchData", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/ProcessPrematchDataResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        BiometricsInformationRecord ProcessPrematchData(string ConsumerID, BiometricsInformationRecord SampleBIR, BiometricsInformationRecord PrematchDataBIR);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/Verify", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/VerifyResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        BiometricsVerifyResult Verify(string ConsumerID, int MaxFARRequested, int MaxFRRRequested, bool FARPrecedence, BiometricsInformationRecord ReferenceBIR, bool AdaptBIR, int Timeout);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/VerifyMatch", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/VerifyMatchResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        BiometricsVerifyResult VerifyMatch(string ConsumerID, int MaxFARRequested, int MaxFRRRequested, bool FARPrecedence, BiometricsInformationRecord SampleBIR, BiometricsInformationRecord ReferenceBIR, bool AdaptBIR);

        #endregion

        #region Version 1.2

        //
        // Session Management
        //

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetWSPOSVersion", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetWSPOSVersionResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        UposVersion GetWSPOSVersion();

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GenerateConsumerID", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GenerateConsumerIDResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        string GenerateConsumerID();

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/OpenSession", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/OpenSessionResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        void OpenSession(string ConsumerID, string EndpointAddress);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/CloseSession", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/CloseSessionResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        void CloseSession(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetProviderSessionTimeout", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetProviderSessionTimeoutResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        int GetProviderSessionTimeout(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/KeepAlive", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/KeepAliveResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        void KeepAlive(string ConsumerID);

        //
        // Device Control
        // 

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/OpenDevice", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/OpenDeviceResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        void OpenDevice(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/CloseDevice", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/CloseDeviceResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        void CloseDevice(string ConsumerID);

        //
        // Event Polling
        //

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/PollForUPOSEvent", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/PollForUPOSEventResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        BiometricsEvent PollForUPOSEvent(string ConsumerID);

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/SetEventResponse", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/SetEventResponseResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        void SetEventResponse(string ConsumerID, BiometricsEventResponse EventResponse);

        #endregion

        #region Version 1.3

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetEncryptedClaimedConsumerID", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/GetEncryptedClaimedConsumerIDResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        string GetEncryptedClaimedConsumerID();

        [OperationContract(Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/SetEventRequestProperties", ReplyAction = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/SetEventRequestPropertiesResponse")]
        [FaultContract(typeof(UposException), Action = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/UposException", Name = "UposException")]
        void SetEventRequestProperties(string ConsumerID, PropertyNameList list);

        #endregion
    }

    #region Version 1.1

    //
    // Common Data Types
    //

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/")]
    public class DirectIOData
    {
        [DataMember]
        public int Data { get; set; }
        [DataMember]
        public object Obj { get; set; }
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/")]
    public class UposException
    {
        [DataMember]
        public ErrorCode ErrorCode { get; set; }
        [DataMember]
        public int ErrorCodeExtended { get; set; }
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/")]
    public class UposVersion
    {
        [DataMember]
        public int Major { get; set; }
        [DataMember]
        public int Minor { get; set; }
        [DataMember]
        public int Build { get; set; }
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/")]
    public class Statistic
    {
        [DataMember]
        public string Name { get; set; }
        [DataMember]
        public string Value { get; set; }
    }

    [CollectionDataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/", ItemName = "Statistic")]
    public class StatisticList : List<Statistic>
    {
    }

    //
    // Common Enumerations
    //

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/")]
    public enum CompareFirmwareResult
    {
        [EnumMember]
        CFV_FIRMWARE_OLDER,
        [EnumMember]
        CFV_FIRMWARE_SAME,
        [EnumMember]
        CFV_FIRMWARE_NEWER,
        [EnumMember]
        CFV_FIRMWARE_DIFFERENT,
        [EnumMember]
        CFV_FIRMWARE_UNKNOWN,
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/")]
    public enum ControlState
    {
        [EnumMember]
        S_CLOSED,
        [EnumMember]
        S_IDLE,
        [EnumMember]
        S_BUSY,
        [EnumMember]
        S_ERROR,
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/")]
    public enum ErrorCode
    {
        [EnumMember]
        E_CLOSED,
        [EnumMember]
        E_CLAIMED,
        [EnumMember]
        E_NOTCLAIMED,
        [EnumMember]
        E_NOSERVICE,
        [EnumMember]
        E_DISABLED,
        [EnumMember]
        E_ILLEGAL,
        [EnumMember]
        E_NOHARDWARE,
        [EnumMember]
        E_OFFLINE,
        [EnumMember]
        E_NOEXIST,
        [EnumMember]
        E_EXISTS,
        [EnumMember]
        E_FAILURE,
        [EnumMember]
        E_TIMEOUT,
        [EnumMember]
        E_BUSY,
        [EnumMember]
        E_EXTENDED,
        [EnumMember]
        E_DEPRECATED,
    }


    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/")]
    public enum HealthCheckLevel
    {
        [EnumMember]
        CH_INTERNAL,
        [EnumMember]
        CH_EXTERNAL,
        [EnumMember]
        CH_INTERACTIVE,
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/")]
    public enum PowerNotification
    {
        [EnumMember]
        PN_DISABLED,
        [EnumMember]
        PN_ENABLED,
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/")]
    public enum PowerReporting
    {
        [EnumMember]
        PR_NONE,
        [EnumMember]
        PR_STANDARD,
        [EnumMember]
        PR_ADVANCED,
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/")]
    public enum PowerState
    {
        [EnumMember]
        PS_UNKNOWN,
        [EnumMember]
        PS_ONLINE,
        [EnumMember]
        PS_OFF,
        [EnumMember]
        PS_OFFLINE,
        [EnumMember]
        PS_OFF_OFFLINE,
    }

    /*
    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/")]
    public enum StatisticCategories
    {
        [EnumMember]
        All,
        [EnumMember]
        Manufacturer,
        [EnumMember]
        Upos,
    }
    */
    public class StatisticCategories
    {
        public const string All = "";
        public const string Manufacturer = "M_";
        public const string Upos = "U_";
    }

    //
    // Specific Data Types
    //

    [CollectionDataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/", ItemName = "Identify")]
    public class IdentifyList : List<int>
    {
    }

    [CollectionDataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/", ItemName = "IdentifyMatch")]
    public class IdentifyMatchList : List<int>
    {
    }

    [CollectionDataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/", ItemName = "Algorithm")]
    public class AlgorithmList : List<string>
    {
    }

    [CollectionDataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/", ItemName = "CandidateRanking")]
    public class CandidateRankingList : List<int>
    {
    }

    [CollectionDataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/", ItemName = "BiometricsInformationRecord")]
    public class BiometricsInformationRecordList : List<BiometricsInformationRecord>
    {
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/")]
    public class BiometricsInformationRecord
    {
        [DataMember]
        public int BiometricDataBlockSize { get; set; }
        [DataMember]
        public DateTime CreatedTime { get; set; }
        [DataMember]
        public int DataType { get; set; }
        [DataMember]
        public int FormatId { get; set; }
        [DataMember]
        public int FormatOwner { get; set; }
        [DataMember]
        public BIRPurpose Purpose { get; set; }
        [DataMember]
        public SensorType SensorType { get; set; }
        [DataMember]
        public UposVersion Version { get; set; }
        [DataMember]
        public byte[] BiometricDataBlock { get; set; }

    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/")]
    public class BiometricsVerifyResult
    {
        [DataMember]
        public BiometricsInformationRecord AdaptedBIR { get; set; }
        [DataMember]
        public int FARAchieved { get; set; }
        [DataMember]
        public int FRRAchieved { get; set; }
        [DataMember]
        public bool Result { get; set; }
        [DataMember]
        public byte[] Payload { get; set; }
    }

    //
    // Specific Enumerations
    //

    //[DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/")]
    //public enum CapSensorColors
    //{
    //    [EnumMember]
    //    Color16,
    //    [EnumMember]
    //    Color256,
    //    [EnumMember]
    //    Full,
    //    [EnumMember]
    //    Grayscale,
    //    [EnumMember]
    //    Mono,
    //    [EnumMember]
    //    None,
    //}
    //[DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/")]
    public class CapSensorColors
    {
        public const int None = 0;
        public const int BIO_CSC_MONO = 1;
        public const int BIO_CSC_GRAYSCALE = 2;
        public const int BIO_CSC_16 = 4;
        public const int BIO_CSC_256 = 8;
        public const int BIO_CSC_FULL = 16;
    }


    //[DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/")]
    //public enum CapSensorOrientations
    //{
    //    [EnumMember]
    //    Inverted,
    //    [EnumMember]
    //    Left,
    //    [EnumMember]
    //    None,
    //    [EnumMember]
    //    Normal,
    //    [EnumMember]
    //    Right,
    //}
    //[DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/")]
    public class CapSensorOrientations
    {
        public const int None = 0;
        public const int BIO_CSO_NORMAL = 1;
        public const int BIO_SO_RIGHT = 2;
        public const int BIO_SO_INVERTED = 4;
        public const int BIO_SO_LEFT = 8;
    }

    //[DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/")]
    //public enum CapSensorTypes
    //{
    //    [EnumMember]
    //    FacialFeatures,
    //    [EnumMember]
    //    Fingerprint,
    //    [EnumMember]
    //    Gait,
    //    [EnumMember]
    //    HandGeometry,
    //    [EnumMember]
    //    Iris,
    //    [EnumMember]
    //    KeystrokeDynamics,
    //    [EnumMember]
    //    LipMovement,
    //    [EnumMember]
    //    None,
    //    [EnumMember]
    //    Password,
    //    [EnumMember]
    //    Retina,
    //    [EnumMember]
    //    SignatureDynamics,
    //    [EnumMember]
    //    ThermalFaceImage,
    //    [EnumMember]
    //    ThermalHandImage,
    //    [EnumMember]
    //    Voice,
    //}
    //[DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/")]
    public class CapSensorTypes
    {
        public const int None = 0;
        public const int BIO_CST_FACIAL_FEATURES = 1;
        public const int BIO_CST_VOICE = 2;
        public const int BIO_CST_FINGERPRINT = 4;
        public const int BIO_CST_IRIS = 8;
        public const int BIO_CST_RETINA = 16;
        public const int BIO_CST_HAND_GEOMETRY = 32;
        public const int BIO_CST_SIGNATURE_DYNAMICS = 64;
        public const int BIO_CST_KEYSTOKE_DYNAMICS = 128;
        public const int BIO_CST_LIP_MOVEMENT = 256;
        public const int BIO_CST_THERMAL_FACE_IMAGE = 512;
        public const int BIO_CST_THERMAL_HAND_IMAGE = 1024;
        public const int BIO_CST_GAIT = 2048;
        public const int BIO_CST_PASSWORD = 4096;
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/")]
    public enum SensorColor
    {
        [EnumMember]
        BIO_SC_MONO,
        [EnumMember]
        BIO_SC_GRAYSCALE,
        [EnumMember]
        BIO_SC_16,
        [EnumMember]
        BIO_SC_256,
        [EnumMember]
        BIO_SC_FULL,
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/")]
    public enum SensorOrientation
    {
        [EnumMember]
        BIO_SO_NORMAL,
        [EnumMember]
        BIO_SO_RIGHT,
        [EnumMember]
        BIO_SO_INVERTED,
        [EnumMember]
        BIO_SO_LEFT,
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/")]
    public enum SensorType
    {
        [EnumMember]
        BIO_ST_FACIAL_FEATURES,
        [EnumMember]
        BIO_ST_VOICE,
        [EnumMember]
        BIO_ST_FINGERPRINT,
        [EnumMember]
        BIO_ST_IRIS,
        [EnumMember]
        BIO_ST_RETINA,
        [EnumMember]
        BIO_ST_HAND_GEOMETRY,
        [EnumMember]
        BIO_ST_SIGNATURE_DYNAMICS,
        [EnumMember]
        BIO_ST_KEYSTOKE_DYNAMICS,
        [EnumMember]
        BIO_ST_LIP_MOVEMENT,
        [EnumMember]
        BIO_ST_THERMAL_FACE_IMAGE,
        [EnumMember]
        BIO_ST_THERMAL_HAND_IMAGE,
        [EnumMember]
        BIO_ST_GAIT,
        [EnumMember]
        BIO_ST_PASSWORD,
    }

    /*
    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/")]
    public enum BIRDataTypes
    {
        [EnumMember]
        Encrypted,
        [EnumMember]
        Intermediate,
        [EnumMember]
        Processed,
        [EnumMember]
        Raw,
        [EnumMember]
        Signed,
    }
    */
    public class BIRDataTypes
    {
        public const int Encrypted = 8;
        public const int Intermediate = 2;
        public const int Processed = 4;
        public const int Raw = 1;
        public const int Signed = 16;
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/")]
    public enum BIRPurpose
    {
        [EnumMember]
        Unspecified,
        [EnumMember]
        Verify,
        [EnumMember]
        Identify,
        [EnumMember]
        Enroll,
        [EnumMember]
        EnrollForVerificationOnly,
        [EnumMember]
        EnrollForIdentificationOnly,
        [EnumMember]
        Audit,
    }


    //
    // Constants
    //

    public class ExtendedError
    {
        public const int EFIRMWARE_BAD_FILE = 281;
        public const int ESTATS_ERROR = 280;
        public const int ESTATS_DEPENDENCY = 282;
    }

    public class StatisticProperties
    {
        public const string AverageFalseAcceptRate = "AverageFAR";
        public const string AverageFalseRejectRate = "AverageFRR";
        public const string SuccessfulMatchCount = "SuccessfulMatchCount";
        public const string UnsuccessfulMatchCount = "UnsuccessfulMatchCount";
        public const string CommunicationErrorCount = "CommunicationErrorCount";
        public const string DeviceCategory = "DeviceCategory";
        public const string FirmwareRevision = "FirmwareRevision";
        public const string HoursPoweredCount = "HoursPoweredCount";
        public const string InstallationDate = "InstallationDate";
        public const string Interface = "Interface";
        public const string ManufactureDate = "ManufactureDate";
        public const string ManufacturerName = "ManufacturerName";
        public const string MechanicalRevision = "MechanicalRevision";
        public const string ModelName = "ModelName";
        public const string SerialNumber = "SerialNumber";
        public const string UnifiedPOSVersion = "UnifiedPOSVersion";
    }

    public class Wait
    {
        public const int FOREVER = -1;
    }

    #endregion

    #region Version 1.2

    //
    // Event Polling
    //

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/")]
    public class BiometricsEvent
    {
        [DataMember]
        public DataEvent DataEvent { get; set; }
        [DataMember]
        public DirectIOEvent DirectIOEvent { get; set; }
        [DataMember]
        public ErrorEvent ErrorEvent { get; set; }
        //[DataMember]
        //public OutputCompleteEvent OutputCompleteEvent { get; set; }
        [DataMember]
        public StatusUpdateEvent StatusUpdateEvent { get; set; }
        [DataMember]
        public DataContainedEvent DataContainedEvent { get; set; }
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/")]
    public class BiometricsEventResponse
    {
        [DataMember]
        public DataEventResponse DataEventResponse { get; set; }
        [DataMember]
        public DataContainedEventResponse DataContainedEventResponse { get; set; }
        [DataMember]
        public DirectIOEventResponse DirectIOEventResponse { get; set; }
        [DataMember]
        public ErrorEventResponse ErrorEventResponse { get; set; }
        //[DataMember]
        //public OutputCompleteEventResponse OutputCompleteEventResponse { get; set; }
        [DataMember]
        public StatusUpdateEventResponse StatusUpdateEventResponse { get; set; }
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/")]
    public class DataEvent
    {
        [DataMember]
        public string Source { get; set; }
        [DataMember]
        public int EventID { get; set; }
        [DataMember]
        public DateTime TimeStamp { get; set; }
        [DataMember]
        public int Status { get; set; }
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/")]
    public class DataEventResponse
    {
        [DataMember]
        public int EventID { get; set; }
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/")]
    public class DirectIOEvent
    {
        [DataMember]
        public string Source { get; set; }
        [DataMember]
        public int EventID { get; set; }
        [DataMember]
        public DateTime TimeStamp { get; set; }
        [DataMember]
        public int EventNumber { get; set; }
        [DataMember]
        public int Data { get; set; }
        [DataMember]
        public object Obj { get; set; }
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/")]
    public class DirectIOEventResponse
    {
        [DataMember]
        public int EventID { get; set; }
        [DataMember]
        public DirectIOData DirectIOData { get; set; }
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/")]
    public class ErrorEvent
    {
        [DataMember]
        public string Source { get; set; }
        [DataMember]
        public int EventID { get; set; }
        [DataMember]
        public DateTime TimeStamp { get; set; }
        [DataMember]
        public ErrorCode ErrorCode { get; set; }
        [DataMember]
        public int ErrorCodeExtended { get; set; }
        [DataMember]
        public ErrorLocus ErrorLocus { get; set; }
        [DataMember]
        public ErrorResponse ErrorResponse { get; set; }
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/")]
    public class ErrorEventResponse
    {
        [DataMember]
        public int EventID { get; set; }
        [DataMember]
        public ErrorResponse ErrorResponse { get; set; }
    }
    /*
    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/")]
    public class OutputCompleteEvent
    {
        [DataMember]
        public string Source { get; set; }
        [DataMember]
        public int EventID { get; set; }
        [DataMember]
        public DateTime TimeStamp { get; set; }
        [DataMember]
        int OutputID { get; set; }
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/")]
    public class OutputCompleteEventResponse
    {
        [DataMember]
        public int EventID { get; set; }
    }
    */
    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/")]
    public class StatusUpdateEvent
    {
        [DataMember]
        public string Source { get; set; }
        [DataMember]
        public int EventID { get; set; }
        [DataMember]
        public DateTime TimeStamp { get; set; }
        [DataMember]
        public int Status { get; set; }
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/")]
    public class StatusUpdateEventResponse
    {
        [DataMember]
        public int EventID { get; set; }
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/")]
    public enum ErrorLocus
    {
        [EnumMember]
        EL_INPUT,
        [EnumMember]
        EL_INPUT_DATA,
        [EnumMember]
        EL_OUTPUT,
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/")]
    public enum ErrorResponse
    {
        [EnumMember]
        ER_CLEAR,
        [EnumMember]
        ER_CONTINUEINPUT,
        [EnumMember]
        ER_RETRY,
    }

    #endregion

    #region Version 1.3

    [CollectionDataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/", ItemName = "PropertyName")]
    public class PropertyNameList : List<string>
    {
    }



    [CollectionDataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/", ItemName = "Parameter")]
    public class ParameterList : Dictionary<string, object>
    {
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/")]
    public class DataContainedEvent
    {
        [DataMember]
        public string Source { get; set; }
        [DataMember]
        public int EventID { get; set; }
        [DataMember]
        public DateTime TimeStamp { get; set; }
        [DataMember]
        public int Status { get; set; }
        [DataMember]
        public ParameterList Parameters { get; set; }
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/")]
    public class DataContainedEventData
    {
        [DataMember]
        public int EventID { get; set; }
        [DataMember]
        public bool SetDataEventEnabled { get; set; }
        [DataMember]
        public bool CallClearInputProperties { get; set; }
    }

    [DataContract(Namespace = "http://www.nrf-arts.org/UnifiedPOS/Biometrics/")]
    public class DataContainedEventResponse
    {
        [DataMember]
        public int EventID { get; set; }
        [DataMember]
        public bool SetDataEventEnabled { get; set; }
        [DataMember]
        public bool CallClearInputProperties { get; set; }
    }

    #endregion
}
