// **********************************************************************************************************
//    IBit.cs
//    6/21/2022
//    NGI - Next Generation Interceptor
//    
//    Contract No. HQ0856-21-C-0003/1022000209
//    
//    THIS DOCUMENT DOES NOT CONTAIN TECHNOLOGY OR TECHNICAL DATA CONTROLLED UNDER EITHER THE U.S. 
//    INTERNATIONAL TRAFFIC IN ARMS REGULATIONS OR THE U.S. EXPORT ADMINISTRATION REGULATIONS.
//    
//    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.
//    
//    UNPUBLISHED WORK - COPYRIGHT RAYTHEON COMPANY.
//    
//    DESTRUCTION NOTICE: FOR CLASSIFIED DOCUMENTS FOLLOW THE PROCEDURES IN DOD 5220.22-M, 
//    NATIONAL INDUSTRIAL SECURITY PROGRAM OPERATING MANUAL, FEBRUARY 2006, 
//    INCORPORATING CHANGE 1, MARCH 28, 2013, CHAPTER 5, SECTION 7, OR DODM 5200.01-VOLUME 3, 
//    DOD INFORMATION SECURITY PROGRAM: PROTECTION OF CLASSIFIED INFORMATION, ENCLOSURE 3, 
//    SECTION 17. FOR CONTROLLED UNCLASSIFIED INFORMATION FOLLOW THE PROCEDURES IN DODM 5200.01-VOLUME 4, 
//    INFORMATION SECURITY PROGRAM: CONTROLLED UNCLASSIFIED INFORMATION.
//    
//    CONTROLLED BY: MISSILE DEFENSE AGENCY
//    CONTROLLED BY: GROUND-BASED MIDCOURSE DEFENSE PROGRAM OFFICE
//    CUI CATEGORY: CTI 
//    DISTRIBUTION/DISSEMINATION CONTROL: F 
//    POC: Alex Kravchenko (1118268)
// **********************************************************************************************************
using Raytheon.Communication;
using System.Collections.Generic;

namespace Raytheon.Instruments
{
   [UmsContract]
   public interface IBit : IInstrument
   {
      /// <summary>
      /// Open the communication interface
      /// </summary>
      [UmsCommand( "IBit.Open" )]
      void Open( );

      /// <summary>
      /// Close the communication interface
      /// </summary>
      [UmsCommand( "IBit.Close" )]
      void Close( );

      /// <summary>
      /// Starts execution of the Built In Test
      /// </summary>
      /// <param name="messageId">could be either a label or message name</param>
      /// <param name="timeoutInMs">how log to wait in milliseconds</param>
      /// <param name="messageParams"></param>
      /// <returns></returns>
      [UmsCommand( "IBit.RunBIT" )]
      bool RunBIT( string messageId, uint timeoutInMs, IEnumerable<KeyValuePair<string, string>> messageParams );


      /// <summary>
      /// Starts execution of the Built In Test and waits for result
      /// </summary>
      /// <param name="messageIdOut">could be either a label or message name</param>
      /// <param name="messageIdIn">could be either a label or message name</param>
      /// <param name="timeoutInMs">how log to wait in milliseconds</param>
      /// <param name="messageParams"></param>
      /// <returns></returns>
      [UmsCommand( "IBit.RunBITWaitForResults" )]
      BitTestResults RunBITWaitForResults( string messageIdOut, string messageIdIn, uint timeoutInMs, IEnumerable<KeyValuePair<string, string>> messageParams );


      /// <summary>
      /// Retrieve resutls from previously started test
      /// </summary>
      /// <param name="messageId">could be either a label or message name</param>
      /// <returns></returns>
      [UmsCommand( "IBit.GetBITResults" )]
      BitTestResults GetBITResults( string messageId );
   }
}
