using System; using System.Collections.Generic; using DTS.Common.Interface.DASFactory; using DTS.Common.Utilities.Logging; using DTS.DASLib.Service; using System.Threading; using DTS.Common.DataModel.Common; using DTS.Common; using DTS.Common.Enums.TSRAIRGo; using System.Windows.Forms; using DTS.Common.DataModel.Classes.TSRAIRGo; namespace DataPROWin7.DataModel.Classes { public class Configuration { public Configuration() { } public void SetConfig(DataModel.TestTemplate currentTest, List dasList, bool calledDuringDiagnostics, StatusHelpers.SetProgressValueDelegate setProgressFunction) { lock (DASHardware.GetArmStatusLock) { foreach (var das in dasList) { var type = das.GetHardwareType(); das.MinimumValidInputVoltage = Convert.ToSingle(DataModel.BatteryAndInputVoltageDefaults.InputAndBatterySettings.GetValue(type.ToString(), DataModel.BatteryAndInputVoltageDefaults.DasBatteryInputSettings.Settings.MinimumValidInputThreshold)); das.MaximumValidInputVoltage = Convert.ToSingle(DataModel.BatteryAndInputVoltageDefaults.InputAndBatterySettings.GetValue(type.ToString(), DataModel.BatteryAndInputVoltageDefaults.DasBatteryInputSettings.Settings.MaximumValidInputThreshold)); das.MinimumValidBatteryVoltage = Convert.ToSingle(DataModel.BatteryAndInputVoltageDefaults.InputAndBatterySettings.GetValue(type.ToString(), DataModel.BatteryAndInputVoltageDefaults.DasBatteryInputSettings.Settings.MinimumValidBatteryThreshold)); das.MaximumValidBatteryVoltage = Convert.ToSingle(DataModel.BatteryAndInputVoltageDefaults.InputAndBatterySettings.GetValue(type.ToString(), DataModel.BatteryAndInputVoltageDefaults.DasBatteryInputSettings.Settings.MaximumValidBatteryThreshold)); StatusHelpers.SetStatus2(das, 0, TSRAIRGoStatus.StatusTypes.UPDATING_DAS_CONFIG, setProgressFunction); if (calledDuringDiagnostics) { das.BatteryHighVoltage = Convert.ToSingle(DataModel.BatteryAndInputVoltageDefaults.InputAndBatterySettings.GetValue(type.ToString(), DataModel.BatteryAndInputVoltageDefaults.DasBatteryInputSettings.Settings.BatteryHighDiagnosticsThreshold)); das.BatteryMediumVoltage = Convert.ToSingle(DataModel.BatteryAndInputVoltageDefaults.InputAndBatterySettings.GetValue(type.ToString(), DataModel.BatteryAndInputVoltageDefaults.DasBatteryInputSettings.Settings.BatteryMediumDiagnosticsThreshold)); das.BatteryLowVoltage = Convert.ToSingle(DataModel.BatteryAndInputVoltageDefaults.InputAndBatterySettings.GetValue(type.ToString(), DataModel.BatteryAndInputVoltageDefaults.DasBatteryInputSettings.Settings.BatteryLowDiagnosticsThreshold)); das.InputHighVoltage = Convert.ToSingle(DataModel.BatteryAndInputVoltageDefaults.InputAndBatterySettings.GetValue(type.ToString(), DataModel.BatteryAndInputVoltageDefaults.DasBatteryInputSettings.Settings.InputHighDiagnosticsThreshold)); das.InputMediumVoltage = Convert.ToSingle(DataModel.BatteryAndInputVoltageDefaults.InputAndBatterySettings.GetValue(type.ToString(), DataModel.BatteryAndInputVoltageDefaults.DasBatteryInputSettings.Settings.InputMediumDiagnosticsThreshold)); das.InputLowVoltage = Convert.ToSingle(DataModel.BatteryAndInputVoltageDefaults.InputAndBatterySettings.GetValue(type.ToString(), DataModel.BatteryAndInputVoltageDefaults.DasBatteryInputSettings.Settings.InputLowDiagnosticsThreshold)); } else { das.BatteryHighVoltage = Convert.ToSingle(DataModel.BatteryAndInputVoltageDefaults.InputAndBatterySettings.GetValue(type.ToString(), DataModel.BatteryAndInputVoltageDefaults.DasBatteryInputSettings.Settings.BatteryHighArmedThreshold)); das.BatteryMediumVoltage = Convert.ToSingle(DataModel.BatteryAndInputVoltageDefaults.InputAndBatterySettings.GetValue(type.ToString(), DataModel.BatteryAndInputVoltageDefaults.DasBatteryInputSettings.Settings.BatteryMediumArmedThreshold)); das.BatteryLowVoltage = Convert.ToSingle(DataModel.BatteryAndInputVoltageDefaults.InputAndBatterySettings.GetValue(type.ToString(), DataModel.BatteryAndInputVoltageDefaults.DasBatteryInputSettings.Settings.BatteryLowArmedThreshold)); das.InputHighVoltage = Convert.ToSingle(DataModel.BatteryAndInputVoltageDefaults.InputAndBatterySettings.GetValue(type.ToString(), DataModel.BatteryAndInputVoltageDefaults.DasBatteryInputSettings.Settings.InputHighArmedThreshold)); das.InputMediumVoltage = Convert.ToSingle(DataModel.BatteryAndInputVoltageDefaults.InputAndBatterySettings.GetValue(type.ToString(), DataModel.BatteryAndInputVoltageDefaults.DasBatteryInputSettings.Settings.InputMediumArmedThreshold)); das.InputLowVoltage = Convert.ToSingle(DataModel.BatteryAndInputVoltageDefaults.InputAndBatterySettings.GetValue(type.ToString(), DataModel.BatteryAndInputVoltageDefaults.DasBatteryInputSettings.Settings.InputLowArmedThreshold)); } } //setting the configuration checks the hardware lines //so make sure we reset them prior to setting configuration using (var configService = new ConfigurationService()) { var mreLocal = new ManualResetEvent(false); configService.ResetHardwareLines(dasList, delegate (ServiceBase.CallbackData cbd) { switch (cbd.Status) { case ServiceBase.CallbackData.CallbackStatus.AllFinished: mreLocal.Set(); break; } }, dasList); mreLocal.WaitOne(); } using (var config = new ConfigurationService()) { config.AggregateProgress = false; var done = new ManualResetEvent(false); var elapsed = 0; try { config.SetConfiguration(dasList, true, true, delegate (ServiceBase.CallbackData cbd) { switch (cbd.Status) { case ServiceBase.CallbackData.CallbackStatus.Progress: StatusHelpers.SetStatus2(cbd.Target, cbd.ProgressValue, TSRAIRGoStatus.StatusTypes.UPDATING_DAS_CONFIG, setProgressFunction); break; case ServiceBase.CallbackData.CallbackStatus.Success: case ServiceBase.CallbackData.CallbackStatus.Failure: break; case ServiceBase.CallbackData.CallbackStatus.AllFinished: done.Set(); break; } }, dasList, ErrorCallback, calledDuringDiagnostics, new double[] { Common.SerializedSettings.MaxAAFRate_TDAS, Common.SerializedSettings.MaxAAFRate_G5 }, true, true, Common.SerializedSettings.GetDefaultDSP(), true ); while (!done.WaitOne(50, false)) { elapsed += 50; } CopyGlobalConfigsToLocalFolder(currentTest, dasList); } catch (Exception ex) { APILogger.Log(ex); throw; } } } } public static DialogResult ErrorCallback(string errorString, string units) { APILogger.Log("error setting configuration", errorString); return DialogResult.OK; //Fix this } private void CopyGlobalConfigsToLocalFolder(DataModel.TestTemplate currentTest, List dasList) { var sourcePath = System.IO.Path.Combine(Environment.CurrentDirectory, Constants.DAS_CONFIGS); var destPath = System.IO.Path.Combine(currentTest.TestDirectory.Trim(), Constants.DAS_CONFIGS); try { if (!System.IO.Directory.Exists(destPath)) { System.IO.Directory.CreateDirectory(destPath); } foreach (var das in dasList) { //Copy the entire das config var sourceFileName = System.IO.Path.Combine(sourcePath, $"{((InfoResult)das.DASInfo).OwningDAS}.xml"); var destFileName = System.IO.Path.Combine(destPath, $"{((InfoResult)das.DASInfo).OwningDAS}.xml"); if (System.IO.File.Exists(sourceFileName)) { System.IO.File.Copy(sourceFileName, destFileName, true); } foreach (var module in das.DASInfo.Modules) { //Copy each module config sourceFileName = System.IO.Path.Combine(sourcePath, $"{module.SerialNumber}.xml"); if (!System.IO.File.Exists(sourceFileName)) continue; destFileName = System.IO.Path.Combine(destPath, $"{module.SerialNumber}.xml"); System.IO.File.Copy(sourceFileName, destFileName, true); } } } catch (Exception ex) { APILogger.Log(ex); } } } }