Major upgrade

This commit is contained in:
Duc
2025-10-24 15:18:11 -07:00
parent fd85735c93
commit ce583d1664
478 changed files with 237518 additions and 47610 deletions

View File

@@ -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
}
}