229 lines
9.5 KiB
C#
229 lines
9.5 KiB
C#
// **********************************************************************************************************
|
|
// coeTimer.cs
|
|
// 6/1/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)
|
|
// **********************************************************************************************************
|
|
|
|
//\\<Unclassified>
|
|
//----------------------------------------------------------------------------//
|
|
// UNCLASSIFIED //
|
|
//----------------------------------------------------------------------------//
|
|
//\\<\Unclassified>
|
|
|
|
//\\<UnlimitedRights>
|
|
//----------------------------------------------------------------------------//
|
|
// Copyright %(copyright)s Raytheon Company. //
|
|
// This software was developed pursuant to Contract Number %(contractNumber)s //
|
|
// with the U.S. government. The U.S. government's rights in and to this //
|
|
// copyrighted software are as specified in DFARS 252.227-7014 which was made //
|
|
// part of the above contract. //
|
|
//----------------------------------------------------------------------------//
|
|
//\\<\UnlimitedRights>
|
|
|
|
//\\<EximUndetermined>
|
|
//----------------------------------------------------------------------------//
|
|
// 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. //
|
|
//----------------------------------------------------------------------------//
|
|
//\\<\EximUndetermined>
|
|
|
|
using System;
|
|
using System.Runtime.InteropServices;
|
|
|
|
namespace Raytheon.Common.Coe
|
|
{
|
|
//
|
|
//
|
|
//
|
|
// Timer
|
|
//
|
|
//
|
|
//
|
|
public class coeTimer : IDisposable
|
|
{
|
|
|
|
#region DLLImports
|
|
[DllImport(coe.coeDLL, CallingConvention = CallingConvention.Cdecl, EntryPoint = "OE_Timer_Create_Dynamic")]
|
|
private static extern IntPtr OE_Timer_Create_Dynamic(IntPtr Name,
|
|
coe.ScopeType Scope,
|
|
uint TimerFormat,
|
|
TimerType TimerKind,
|
|
IntPtr Clock,
|
|
IntPtr ApplicationContext,
|
|
out coe.Status Status);
|
|
|
|
[DllImport(coe.coeDLL, CallingConvention = CallingConvention.Cdecl, EntryPoint = "OE_Timer_Delete")]
|
|
public static extern coe.Status OE_Timer_Delete(IntPtr _obj);
|
|
|
|
[DllImport(coe.coeDLL, CallingConvention = CallingConvention.Cdecl, EntryPoint = "OE_Timer_Associate")]
|
|
private static extern coe.Status OE_Timer_Associate(IntPtr _obj,
|
|
IntPtr Event,
|
|
TriggerType Trigger);
|
|
|
|
[DllImport(coe.coeDLL, CallingConvention = CallingConvention.Cdecl, EntryPoint = "OE_Timer_Set_Relative")]
|
|
private static extern coe.Status OE_Timer_Set_Relative(IntPtr _obj,
|
|
uint TimeInterval);
|
|
|
|
[DllImport(coe.coeDLL, CallingConvention = CallingConvention.Cdecl, EntryPoint = "OE_Timer_Resume")]
|
|
private static extern coe.Status OE_Timer_Resume(IntPtr _obj);
|
|
|
|
[DllImport(coe.coeDLL, CallingConvention = CallingConvention.Cdecl, EntryPoint = "OE_Timer_Cancel")]
|
|
private static extern coe.Status OE_Timer_Cancel(IntPtr _obj);
|
|
|
|
[DllImport(coe.coeDLL, CallingConvention = CallingConvention.Cdecl, EntryPoint = "OE_Environment_get_The_System_Clock_Handler")]
|
|
private static extern IntPtr OE_Environment_get_The_System_Clock_Handler();
|
|
|
|
[DllImport(coe.coeDLL, CallingConvention = CallingConvention.Cdecl, EntryPoint = "OE_Clock_Handler_Convert_To_Time_Interval")]
|
|
private static extern IntPtr OE_Clock_Handler_Convert_To_Time_Interval(IntPtr _obj,
|
|
uint Interval,
|
|
TimerResolutionType Resolution,
|
|
out uint TimeInterval);
|
|
#endregion
|
|
|
|
public enum TriggerType : int
|
|
{
|
|
TIMER_EXPIRED = 1
|
|
};
|
|
|
|
public enum TimerType : int
|
|
{
|
|
PERIODIC = 0,
|
|
ONE_SHOT = 1
|
|
};
|
|
|
|
public enum TimerResolutionType : int
|
|
{
|
|
MINUTE = 0,
|
|
SECOND = 1,
|
|
MILLISECOND = 2,
|
|
MICROSECOND = 3,
|
|
FRAME = 4
|
|
};
|
|
|
|
private bool _disposed = false;
|
|
private IntPtr _handle = IntPtr.Zero;
|
|
private const uint _timerRelative = 1;
|
|
private readonly coeEvent _timerEvent;
|
|
|
|
public coeTimer(TimerType Type)
|
|
{
|
|
_handle = OE_Timer_Create_Dynamic(IntPtr.Zero, coe.ScopeType.OE_Local, _timerRelative, Type, OE_Environment_get_The_System_Clock_Handler(), IntPtr.Zero, out coe.Status oe_status);
|
|
if (oe_status != coe.Status.SUCCESS)
|
|
{
|
|
_handle = IntPtr.Zero;
|
|
throw new Exception("Unable to create OE_Timer. Error = " + oe_status);
|
|
}
|
|
else
|
|
{
|
|
_timerEvent = new coeEvent();
|
|
}
|
|
}
|
|
|
|
~coeTimer()
|
|
{
|
|
Dispose(false);
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
Dispose(true);
|
|
GC.SuppressFinalize(this);
|
|
}
|
|
|
|
protected void Dispose(bool disposing)
|
|
{
|
|
if (_disposed) return;
|
|
|
|
if (disposing)
|
|
{
|
|
}
|
|
if (_handle != IntPtr.Zero)
|
|
{
|
|
_timerEvent.Disable();
|
|
OE_Timer_Delete(_handle);
|
|
_handle = IntPtr.Zero;
|
|
}
|
|
_disposed = true;
|
|
}
|
|
|
|
internal IntPtr Handle
|
|
{
|
|
get { return _handle; }
|
|
}
|
|
|
|
public coe.Status Set(uint interval, TimerResolutionType resolution)
|
|
{
|
|
OE_Clock_Handler_Convert_To_Time_Interval(OE_Environment_get_The_System_Clock_Handler(), interval, resolution, out uint timerInterval);
|
|
return OE_Timer_Set_Relative(_handle, timerInterval);
|
|
}
|
|
|
|
public coe.Status Set(uint Interval)
|
|
{
|
|
return Set(Interval, TimerResolutionType.MILLISECOND);
|
|
}
|
|
|
|
public coe.Status Resume()
|
|
{
|
|
return OE_Timer_Resume(_handle);
|
|
}
|
|
|
|
public coe.Status Cancel()
|
|
{
|
|
return OE_Timer_Cancel(_handle);
|
|
}
|
|
|
|
public coe.Status Associate(coeEventFlag eventFlag, uint mask, TriggerType trigger)
|
|
{
|
|
coe.Status Status;
|
|
|
|
_timerEvent.SetNotification(eventFlag, mask);
|
|
Status = OE_Timer_Associate(_handle, _timerEvent.Handle, trigger);
|
|
_timerEvent.Enable();
|
|
return Status;
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
//\\<Unclassified>
|
|
//----------------------------------------------------------------------------//
|
|
// UNCLASSIFIED //
|
|
//----------------------------------------------------------------------------//
|
|
//\\<\Unclassified>
|
|
|