Major upgrade
This commit is contained in:
@@ -15,26 +15,24 @@ GOVERNMENT.
|
||||
UNPUBLISHED WORK - COPYRIGHT RAYTHEON COMPANY.
|
||||
-------------------------------------------------------------------------*/
|
||||
|
||||
using NLog;
|
||||
using Raytheon.Common;
|
||||
using Raytheon.Instruments;
|
||||
using Raytheon.Instruments.GeneralIO;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Configuration;
|
||||
using System.IO;
|
||||
using System.Reflection;
|
||||
using System.Linq;
|
||||
using System.Threading;
|
||||
using NLog;
|
||||
using Raytheon.Instruments;
|
||||
|
||||
namespace MeasurementManagerLib
|
||||
{
|
||||
/// <summary>
|
||||
/// This class manages IDIO instruments and provides an abstraction
|
||||
/// This class manages DIO instruments and provides an abstraction
|
||||
/// </summary>
|
||||
public class DioMeasurementManager : IDisposable
|
||||
{
|
||||
#region PrivateClassMembers
|
||||
private SortedDictionary<string, IGeneralIO> _signalNameToObjectMap = new SortedDictionary<string, IGeneralIO>();
|
||||
{
|
||||
#region PrivateClassMembers
|
||||
private SortedDictionary<string, IGeneralIO> _signalNameToDioModuleMap = new SortedDictionary<string, IGeneralIO>();
|
||||
|
||||
public Dictionary<string, IODatatypes.DIOChannelInfo> SignalNameToChannelInfoMap { get; private set; }
|
||||
|
||||
private static NLog.ILogger _logger;
|
||||
#endregion
|
||||
@@ -49,22 +47,27 @@ namespace MeasurementManagerLib
|
||||
{
|
||||
_logger = LogManager.GetCurrentClassLogger();
|
||||
|
||||
SignalNameToChannelInfoMap = new Dictionary<string, IODatatypes.DIOChannelInfo>();
|
||||
|
||||
ICollection<object> dioModuleList = instrumentManager.GetInstruments(typeof(IGeneralIO));
|
||||
// populate the maps
|
||||
foreach (IGeneralIO dioModule in dioModuleList)
|
||||
{
|
||||
dioModule.Initialize();
|
||||
|
||||
List<string> signalNames = dioModule.GetSignalNames();
|
||||
Dictionary<string, IODatatypes.DIOChannelInfo> signalNameToChannelInfoMap = dioModule.GetAllSignals();
|
||||
|
||||
foreach (string signalName in signalNames)
|
||||
{
|
||||
if (_signalNameToObjectMap.ContainsKey(signalName.ToUpper()))
|
||||
// add signal map for this DIO module to master signal map
|
||||
signalNameToChannelInfoMap.ToList().ForEach(x => SignalNameToChannelInfoMap.Add(x.Key, x.Value));
|
||||
|
||||
foreach (KeyValuePair<string, IODatatypes.DIOChannelInfo> item in signalNameToChannelInfoMap)
|
||||
{
|
||||
if (_signalNameToDioModuleMap.ContainsKey(item.Key.ToUpper()))
|
||||
{
|
||||
throw new Exception("There is more than 1 DIO card that have the same signal name: " + signalName);
|
||||
throw new Exception("There is more than 1 DIO card that have the same signal name: " + item.Key);
|
||||
}
|
||||
|
||||
_signalNameToObjectMap[signalName.ToUpper()] = dioModule;
|
||||
_signalNameToDioModuleMap[item.Key.ToUpper()] = dioModule;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -100,7 +103,7 @@ namespace MeasurementManagerLib
|
||||
/// <returns>0 if the signal is low, 1 if the signal is high</returns>
|
||||
public IODatatypes.BitState GetInputSignalState(string signalName)
|
||||
{
|
||||
return _signalNameToObjectMap[signalName.ToUpper()].GetBitState(signalName);
|
||||
return _signalNameToDioModuleMap[signalName.ToUpper()].GetBitState(signalName);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
@@ -111,7 +114,7 @@ namespace MeasurementManagerLib
|
||||
/// <param name="timeToSleepMs">number of ms to wait after setting signal</param>
|
||||
public void SetOutputSignalState(string signalName, IODatatypes.BitState state, uint timeToSleepMs = 100)
|
||||
{
|
||||
_signalNameToObjectMap[signalName.ToUpper()].SetBit(signalName, state);
|
||||
_signalNameToDioModuleMap[signalName.ToUpper()].SetBit(signalName, state);
|
||||
|
||||
// wait a bit
|
||||
Thread.Sleep((int)timeToSleepMs);
|
||||
@@ -125,40 +128,24 @@ namespace MeasurementManagerLib
|
||||
/// The Finalizer
|
||||
/// </summary>
|
||||
~DioMeasurementManager()
|
||||
{
|
||||
Dispose(false);
|
||||
}
|
||||
{
|
||||
Dispose(false);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="disposing"></param>
|
||||
protected virtual void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing)
|
||||
{
|
||||
foreach (KeyValuePair<string, IGeneralIO> entry in _signalNameToObjectMap)
|
||||
{
|
||||
try
|
||||
{
|
||||
entry.Value.Shutdown();
|
||||
}
|
||||
catch (Exception err)
|
||||
{
|
||||
_logger?.Error(err.Message + "\r\n" + err.StackTrace);
|
||||
}
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
ErrorLogger.Instance().Dispose();
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
// nothing to do
|
||||
}
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="disposing"></param>
|
||||
protected virtual void Dispose(bool disposing)
|
||||
{
|
||||
if (disposing)
|
||||
{
|
||||
foreach (KeyValuePair<string, IGeneralIO> entry in _signalNameToDioModuleMap)
|
||||
{
|
||||
entry.Value.Shutdown();
|
||||
}
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user