//                           UNCLASSIFIED
/*-------------------------------------------------------------------------
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.
-------------------------------------------------------------------------*/

using Raytheon.Communication;
using Raytheon.Units;
using System.Collections.Generic;

namespace Raytheon.Instruments
{
	/// <summary>
	/// An interface for power supplies to implement.
	/// </summary>
	[UmsContract]
	public interface IELoadSystem : IInstrument
	{

		[UmsCommand("IELoadSystem.AddEloadChannel")]
		void AddEloadChannel(string name, int channelNumber, EloadModuleMode mode, double setpoint, Current overCurrentProtection, Voltage overVoltageProtection);

		[UmsCommand("IELoadSystem.GetErrorCode")]
		string GetErrorCode(out int errorCode);

		[UmsCommand("IELoadSystem.GetModuleNames")]
		List<string> GetModuleNames();

		[UmsCommand("IELoadSystem.GetSystemName")]
		string GetSystemName();

      [UmsCommand( "IELoadSystem.IOQuery" )]
      string IOQuery( string channelName, string command );

      [UmsCommand( "IELoadSystem.IOWrite" )]
      void IOWrite( string channelName, string command );

      [UmsCommand("IELoadSystem.IsInputOn")]
		bool IsInputOn(string channelName);

		[UmsCommand("IELoadSystem.Enable")]
		void Enable(string channelName);

		[UmsCommand("IELoadSystem.Disable")]
		void Disable(string channelName);

		[UmsCommand("IELoadSystem.ReadCurrent")]
		Current ReadCurrent(string channelName);

		[UmsCommand("IELoadSystem.ReadData")]
		void ReadData(string channelName, out Voltage voltage, out Current current, out Resistance resistance, out double setpoint, out bool isInputOn, out EloadModuleMode mode, out ushort status);

		[UmsCommand("IELoadSystem.ReadMode")]
		EloadModuleMode ReadMode(string channelName);

		[UmsCommand("IELoadSystem.ReadOverCurrentProtection")]
      Current ReadOverCurrentProtection(string channelName);

		[UmsCommand("IELoadSystem.ReadOverVoltageProtection")]
		Voltage ReadOverVoltageProtection(string channelName);

		[UmsCommand("IELoadSystem.ReadProtectionStatus")]
		ushort ReadProtectionStatus(string channelName);

		[UmsCommand("IELoadSystem.ReadResistance")]
		Resistance ReadResistance(string channelName);

		[UmsCommand("IELoadSystem.ReadSetpoint")]
		double ReadSetpoint(string channelName);

		[UmsCommand("IELoadSystem.ReadVoltage")]
		Voltage ReadVoltage(string channelName);

		[UmsCommand("IELoadSystem.Selftest")]
		void Selftest();

		[UmsCommand("IELoadSystem.SetInitialSetting")]
		void SetInitialSetting(string module);

		[UmsCommand("IELoadSystem.SetInitialSettingAll")]
		void SetInitialSettingAll();

		[UmsCommand("IELoadSystem.SetMode")]
		void SetMode(string channelName, EloadModuleMode mode);

		[UmsCommand("IELoadSystem.SetSetpoint")]
		void SetSetpoint(string channelName, double newSetpoint, EloadModuleMode mode);
	}
}
