// ******************************************************************************************
// **                                                                                       **
// **      RAYTHEON PROPRIETARY: THIS DOCUMENT CONTAINS DATA OR INFORMATION                 **
// **      PROPRIETARY TO RAYTHEON COMPANY AND IS RESTRICTED TO USE ONLY BY PERSONS         **
// **      AUTHORIZED BY RAYTHEON COMPANY IN WRITING TO USE IT.DISCLOSURE TO                **
// **      UNAUTHORIZED PERSONS WOULD LIKELY CAUSE SUBSTANTIAL COMPETITIVE HARM TO          **
// **      RAYTHEON COMPANY'S BUSINESS POSITION. NEITHER SAID DOCUMENT NOR ITS              **
// **      CONTENTS SHALL BE FURNISHED OR DISCLOSED TO OR COPIED OR USED BY PERSONS         **
// **      OUTSIDE RAYTHEON COMPANY WITHOUT THE EXPRESS WRITTEN APPROVAL OF RAYTHEON        **
// **      COMPANY.                                                                         **
// **                                                                                       **
// **      THIS PROPRIETARY NOTICE IS NOT APPLICABLE IF DELIVERED TO THE U.S.               **
// **      GOVERNMENT.                                                                      **
// **                                                                                       **
// **      UNPUBLISHED WORK - COPYRIGHT RAYTHEON COMPANY.                                   **
// **                                                                                       **
// **      WARNING: THIS DOCUMENT CONTAINS TECHNICAL DATA AND / OR TECHNOLOGY WHOSE         **
// **      EXPORT OR DISCLOSURE TO NON-U.S.PERSONS, WHEREVER LOCATED, IS RESTRICTED         **
// **      BY THE INTERNATIONAL TRAFFIC IN ARMS REGULATIONS (ITAR) (22 C.F.R.SECTION        **
// **      120-130) OR THE EXPORT ADMINISTRATION REGULATIONS(EAR) (15 C.F.R.SECTION         **
// **      730-774). THIS DOCUMENT CANNOT BE EXPORTED(E.G., PROVIDED TO A SUPPLIER          **
// **      OUTSIDE OF THE UNITED STATES) OR DISCLOSED TO A NON-U.S.PERSON, WHEREVER         **
// **      LOCATED, UNTIL A FINAL JURISDICTION AND CLASSIFICATION DETERMINATION HAS         **
// **      BEEN COMPLETED AND APPROVED BY RAYTHEON, AND ANY REQUIRED U.S.GOVERNMENT         **
// **      APPROVALS HAVE BEEN OBTAINED. VIOLATIONS ARE SUBJECT TO SEVERE CRIMINAL          **
// **      PENALTIES.                                                                       **
// **                                                                                       **
// **      CAPITAL EQUIPMENT/SOFTWARE: THIS TECHNICAL DATA WAS DEVELOPED OR ACQUIRED        **
// **      EXCLUSIVELY AT CONTRACTOR EXPENSE AND IS INTENDED FOR USE ON MULTIPLE            **
// **      PROJECTS/PROGRAMS.                                                               **
// **                                                                                       **
// *******************************************************************************************

using Raytheon.Communication;
using Raytheon.Instruments.LSPS;
using Raytheon.Units;
using System;
using System.Collections.Generic;
using System.Runtime.Serialization;

namespace Raytheon.Instruments
{  
   [UmsContract]
   public interface ILspsChamber : IInstrument
   {
      #region AutoFill Functions
      [UmsCommand("ILspsChamber.AutoFillCoolDown")]
      void AutoFillCoolDown();

      [UmsCommand("ILspsChamber.AutoFillWarmUp")]
      void AutoFillWarmUp();

      [UmsCommand("ILspsChamber.AutoFillForce")]
      void AutoFillForce();

      [UmsCommand("ILspsChamber.AutoFillTurnOff")]
      void AutoFillTurnOff();

      [UmsCommand("ILspsChamber.GetAutoFillState")]
      LSPS.AutoFillState GetAutoFillState();

      [UmsCommand("ILspsChamber.GetTimeToFill")]
      double GetTimeToFill();
      #endregion

      #region NIF Functions
      [UmsCommand("ILspsChamber.CloseLspsGateValve")]
      void CloseLspsGateValve();

      [UmsCommand("ILspsChamber.OpenLspsGateValve")]
      void OpenLspsGateValve();

      [UmsCommand("ILspsChamber.GetLspsGateValvePosition")]
      GateValvePosition GetLspsGateValvePosition();

      [UmsCommand("ILspsChamber.GetTemperature")]
      double GetTemperature(LSPS.TemperatureIndex tempIndex);

      [UmsCommand("ILspsChamber.GetInputIndex")]
      int GetInputIndex(int inputIndex);
      #endregion

      #region RIO Functions
      [UmsCommand("ILspsChamber.CloseVhfGateValve")]
      void CloseVhfGateValve();

      [UmsCommand("ILspsChamber.OpenVhfGateValve")]
      void OpenVhfGateValve();

      [UmsCommand("ILspsChamber.GetVhfGateValveChamberPressure")]
      double GetVhfGateValveChamberPressure();

      [UmsCommand("ILspsChamber.GetVhfGateValveUutPressure")]
      double GetVhfGateValveUutPressure();

      [UmsCommand("ILspsChamber.GetVhfGateValveClosedInput")]
      int GetVhfGateValveClosedInput();

      [UmsCommand("ILspsChamber.GetVhfGateValveOpenInput")]
      int GetVhfGateValveOpenInput();
      #endregion

      #region Chamber Vacuum Functions
      [UmsCommand("ILspsChamber.GetLspsChamberPressure")]
      double GetLspsChamberPressure();

      [UmsCommand("ILspsChamber.GetLspsUutPressure")]
      double GetLspsUutPressure();
      #endregion

      #region GALIL Functions
      [UmsCommand("ILspsChamber.FilterWheelHome")]
      void FilterWheelHome();

      [UmsCommand("ILspsChamber.SetFilterWheelPosition")]
      void SetFilterWheelPosition(int position);

      [UmsCommand("ILspsChamber.GetFilterWheelPosition")]
      int GetFilterWheelPosition();

      [UmsCommand("ILspsChamber.GetFilterWheelStatus")]
      LSPS.TargetAndFilterWheelStatus GetFilterWheelStatus();

      [UmsCommand("ILspsChamber.TargetWheelHome")]
      void TargetWheelHome();

      [UmsCommand("ILspsChamber.SetTargetWheelPosition")]
      void SetTargetWheelPosition(int position);

      [UmsCommand("ILspsChamber.GetTargetWheelPosition")]
      int GetTargetWheelPosition();

      [UmsCommand("ILspsChamber.GetTargetWheelStatus")]
      LSPS.TargetAndFilterWheelStatus GetTargetWheelStatus();

      [UmsCommand("ILspsChamber.SteeringMirrorHome")]
      void SteeringMirrorHome();

      [UmsCommand("ILspsChamber.SteeringMirrorStop")]
      void SteeringMirrorStop();

      [UmsCommand("ILspsChamber.SteeringMirrorMove")]
      void SteeringMirrorMove(double az, double el, double speed);

      [UmsCommand("ILspsChamber.SteeringMirrorGetBeamAngles")]
      Tuple<double, double> SteeringMirrorGetBeamAngles();

      [UmsCommand("ILspsChamber.SteeringMirrorSetBeamSpeed")]
      void SteeringMirrorSetBeamSpeed(double speed);

      [UmsCommand("ILspsChamber.SteeringMirrorSetRightLeftArrowAngle")]
      void SteeringMirrorSetRightLeftArrowAngle(double angle);

      [UmsCommand("ILspsChamber.SteeringMirrorSetUpDownArrowAngle")]
      void SteeringMirrorSetUpDownArrowAngle(double angle);

      [UmsCommand("ILspsChamber.GetSteeringMirrorStatus")]
      Tuple<LSPS.SteeringMirrorStatus, LSPS.SteeringMirrorStatus> GetSteeringMirrorStatus();

      [UmsCommand("ILspsChamber.SteeringMirrorLoadProfile")]
      void SteeringMirrorLoadProfileFromFile(string profileFilePath);

      [UmsCommand("ILspsChamber.SteeringMirrorLoadProfileStep")]
      void SteeringMirrorLoadProfileStep(double az, double el, double speed);

      [UmsCommand("ILspsChamber.SteeringMirrorResetProfile")]
      void SteeringMirrorResetProfile();

      [UmsCommand("ILspsChamber.SteeringMirrorRunProfile")]
      void SteeringMirrorRunProfile(LSPS.SteeringMirrorProfileMode profileMode = LSPS.SteeringMirrorProfileMode.LEARNED, 
         LSPS.SteeringMirrorMovementMode movementMode = LSPS.SteeringMirrorMovementMode.ABSOLUTE);

      [UmsCommand("ILspsChamber.SteeringMirrorMoveToBeginningOfProfile")]
      void SteeringMirrorMoveToBeginningOfProfile();

      [UmsCommand("ILspsChamber.SteeringMirrorRunNextStepInProfile")]
      void SteeringMirrorRunNextStepInProfile();
      #endregion

      #region BlackBody Functions
      [UmsCommand("ILspsChamber.SetBlackBodySetpointTemperature")]
      void SetBlackBodySetpointTemperature(double temperature);

      [UmsCommand("ILspsChamber.GetBlackbodyHeaterPercent")]
      double GetBlackbodyHeaterPercent();

      [UmsCommand("ILspsChamber.GetBlackbodySetpoint")]
      double GetBlackbodySetpoint();

      [UmsCommand("ILspsChamber.GetBlackbodyStability")]
      Tuple<LSPS.Stability, LSPS.Stability> GetBlackbodyStability(int? logRateInMs = null);

      [UmsCommand("ILspsChamber.GetBlackbodyControlState")]
      LSPS.BlackBodyControlState GetBlackbodyControlState();

      [UmsCommand("ILspsChamber.GetBlackbodyRateOfChange")]
      double GetBlackbodyRateOfChange();

      [UmsCommand("ILspsChamber.GetBlackbodyTemperature")]
      Tuple<double, double> GetBlackbodyTemperature();

      [UmsCommand("ILspsChamber.GetBlackbodyBIT")]
      int GetBlackbodyBIT();
      #endregion

      #region Chopper Functions
      [UmsCommand("ILspsChamber.SetChopperFrequency")]
      void SetChopperFrequency(double frequency);

      [UmsCommand("ILspsChamber.GetChopperFrequency")]
      double GetChopperFrequency();

      [UmsCommand("ILspsChamber.TurnOffChopperWheel")]
      void TurnOffChopperWheel();

      [UmsCommand("ILspsChamber.SetStopOpen")]
      void SetStopOpen();

      [UmsCommand("ILspsChamber.SetStopClosed")]
      void SetStopClosed();

      [UmsCommand("ILspsChamber.GetChopperStability")]
      LSPS.Stability GetChopperStability();

      [UmsCommand("ILspsChamber.GetChopperState")]
      LSPS.ChopperState GetChopperState();
      #endregion

      #region Misc Functions
      [UmsCommand("ILspsChamber.SendACommand")]
      void SendACommand(string command);
      #endregion
   }
}
