using System; using System.Collections.Generic; namespace DatabaseImport { public sealed class SerializedSettings { public enum Keys { IgnorePowerMode, UseUserCodes, NumberRealtimeCharts, UseCircBufTriggerCheck, TriggerCheckPostRealtime, DeriveROIFromAll, // ReSharper disable once InconsistentNaming CRIBCOM, LastEventStartTime, ExportINIFile, ShowISOCodes, UseMeterModeTable, AutoArmDiagLevel, AutoArmDiagDelayMS, RealtimeSampleRates, RealtimeSampleRate, OverheadPercent, AutozeroRealtime, AllowCalculatedChannels, AllowLevelTriggerUI, TDASCalPeriod, G5CalPeriod, Slice1CalPeriod, Slice1_5CalPeriod, Slice2_CalPeriod, CalWarningPeriod, CalHWGracePeriod, HardwareCalPolicy, DefaultRecordingMode, DefaultIsoChannelSensorCompatibilityLevel, AllowAdvancedRecordingModes, AllowTSRAIRRecordingModes, IncludeGroupNameInISOExport, WarnIfTestCancelledWithoutExport, DiademChannelName200Option, DiademUserComment201Option, StartingTestSetup, SensitivityDisplayFormat, TriggerSecondsDisplayFormat, NonLinearDisplayFormat, CapacityRangeDisplayFormat, TestSetupDefaultAutomaticMode, CommonStatusLine, AutomaticModeDelayMS, IsoSupportLevel, TriggerCheckQuickMode, Diagnostics_TDAS_TimeoutSec, Diagnostics_SLICE_TimeoutSec, ResolveChannels_TDAS_QueryDownloadTimeoutSec, ResolveChannels_SLICE_QueryDownloadTimeoutSec, ResolveChannels_TDAS_QueryConfigTimeoutSec, ResolveChannels_SLICE_QueryConfigTimeoutSec, SLICE_CONNECT_ALLOWED_SECONDS, TDAS_CONNECT_ALLOWED_SECONDS, ISOSupport_Allow_Transitional, ISOSupport_Allow_NonISO, TestSetup_AllowQuickTestSetup, Graphs_PFSZoomValues, AutoAdd_ArmChecklist, TESTSETUP_WARNBATFAIL, TESTSETUPDEFAULT_DONTALLOWOUTOFCALSENSOR, SPSINDICE_COUNT, TDAS_MAXAAFRATE, G5_MAXAAFRATE, DefaultDigitalOutMode, DownloadMode, SLICE_Distributor_PowerSetting, TDAS_Pro_Rack_PowerSetting, G5VDS_PowerSetting, SLICE1_5_Nano_Base_PowerSetting, SLICE_Micro_Base_PowerSetting, SLICE_NANO_Base_PowerSetting, SLICE2_SIM_PowerSetting, SLICE2_DIM_PowerSetting, SLICE2_TOM_PowerSetting, G5INDUMMY_PowerSetting, SLICE_EthernetController_PowerSetting, SLICE1_5_Micro_Base_PowerSetting, SLICE_LabEthernet_PowerSetting, SLICE2_SLS_PowerSetting, SLICE1_G5Stack_PowerSetting, SLICE2_SLT_PowerSetting, SLICE2_SLD_PowerSetting, RealtimeSampleRateSliceUSB, RealtimeSampleRateSliceIP, RealtimeSampleRateTDASG5, MaxParallelTDASDownloads, UseTestSetupNameForTestIDHeaderInCSVExport, TestIDPrefixSuffixValues, SLICE6_PowerSetting, SLICE6_CalPeriod, WarnOnEIDPositionSwap, AllowEIDSensorsOutOfPlace, SLICE6MulticastResponsePort, SLICE6MulticastCommandPort, SLICE6MulticastAddress, ClearDBBeforeTSFImport, SLICE6Db_PowerSetting, UseLegacyTOMCFC, UseLegacyTDCSoftwareFilterAdjustment, AllowModify, ApplyShiftT0ModsTestOnly, POWERPRO_CalPeriod, SLICE6Air_CalPeriod, SLICE6DB_CalPeriod, TSRAir_CalPeriod, LevelTriggerMaxPercentage, LevelTriggerMinPercentage } public const string ExportINIFileDefault = ""; /// /// the location of the export INI file in use. /// This is used by GMMilford to control the directories of some export files /// public static string ExportINIFile { get => SettingsDB.GetGlobalValue(Keys.ExportINIFile.ToString(), ExportINIFileDefault); set => SettingsDB.SetGlobalValue(Keys.ExportINIFile.ToString(), value); } public static IsoChannelSensorCompatibilityLevels IsoChannelSensorCompatibilityLevelDefault = IsoChannelSensorCompatibilityLevels.Warn; public static IsoChannelSensorCompatibilityLevels IsoChannelSensorCompatibilityLevel { get { var s = SettingsDB.GetGlobalValue(Keys.DefaultIsoChannelSensorCompatibilityLevel.ToString(), IsoChannelSensorCompatibilityLevelDefault.ToString()); return !Enum.TryParse(s, out IsoChannelSensorCompatibilityLevels isoChannelSensorCompatibilityLevel) ? IsoChannelSensorCompatibilityLevelDefault : isoChannelSensorCompatibilityLevel; } set => SettingsDB.SetGlobalValue(Keys.DefaultIsoChannelSensorCompatibilityLevel.ToString(), value.ToString()); } public enum ISOSupportLevels { ISO_ONLY, //channels named by iso TRANSITORY, //UserValue1 for JCODE/Chimchim/etc, which takes the place of isocode in multiple places NO_ISO //channels named by user only } public const ISOSupportLevels ISOSupportLevelDefault = ISOSupportLevels.ISO_ONLY; public static ISOSupportLevels ISOSupportLevel { get { var s = SettingsDB.GetGlobalValue(Keys.IsoSupportLevel.ToString(), ISOSupportLevelDefault.ToString()); ISOSupportLevels level; return !Enum.TryParse(s, out level) ? ISOSupportLevels.ISO_ONLY : level; } set => SettingsDB.SetGlobalValue(Keys.IsoSupportLevel.ToString(), value.ToString()); } /// /// returns a dictionary of sensor type to iso physical dimension /// /// public static Dictionary GetAllSensorTypeToDimensionMappings() { var d = new Dictionary(); foreach (var m in AllSensorTypeToDimensions) { if (!d.ContainsKey(m.Code)) { d[m.Code] = m.Dimension; } } return d; } // key for how many mappings are present private const string NUM_SENSORTYPE_MAPPINGS = "NUM_SENSORTYPE_MAPPINGS"; // key for each individual mapping private const string SENSORTYPE_MAPPING_PRE = "SENSORTYPE_"; /// /// returns all Sensor type to ISO physical dimension mappings /// public static SensorTypeToDimension[] AllSensorTypeToDimensions { get { var sMappings = SettingsDB.GetGlobalValue(NUM_SENSORTYPE_MAPPINGS, "7"); var iMappings = 7; int.TryParse(sMappings, out iMappings); var mappings = new List(); for (var i = 0; i < iMappings; i++) { var s = GetSensorTypeMapping(i); if (null != s) { mappings.Add(s); } } return mappings.ToArray(); } set { for (var i = 0; i < value.Length; i++) { SetSensorTypeMapping(i, value[i]); } SettingsDB.SetGlobalValue(NUM_SENSORTYPE_MAPPINGS, value.Length.ToString()); } } /// /// stores one sensor type to iso physical dimension /// used by AllSensorTypeToDimensions /// /// /// private static void SetSensorTypeMapping(int index, SensorTypeToDimension dim) { var s = string.Format("{0}{1}{2}{1}{3}", dim.Code, (char)149, dim.Name, dim.Dimension); SettingsDB.SetGlobalValue(string.Format("{0}{1}", SENSORTYPE_MAPPING_PRE, index), s); } private static SensorTypeToDimension GetSensorTypeMapping(int index) { switch (index) { case 0: return GetSensorTypeMapping(index, "D", "Acceleration", "AC"); case 1: return GetSensorTypeMapping(index, "F", "Force", "FO"); case 2: return GetSensorTypeMapping(index, "M", "Momentum", "MO"); case 3: return GetSensorTypeMapping(index, "S", "Displacement", "DS"); case 4: return GetSensorTypeMapping(index, "W", "Angular Acceleration", "AA"); case 5: return GetSensorTypeMapping(index, "A", "Angle", "AN"); case 6: return GetSensorTypeMapping(index, "B", "Voltage", "VO"); default: return GetSensorTypeMapping(index, "", "", ""); } } /// /// retrieves an individual sensor type to iso code mapping (or null if there isn't such a mapping) /// /// /// /// /// /// private static SensorTypeToDimension GetSensorTypeMapping(int index, string code, string name, string dimension) { var s = SettingsDB.GetGlobalValue(string.Format("{0}{1}", SENSORTYPE_MAPPING_PRE, index), string.Format("{0}{1}{2}{1}{3}", code, (char)149, name, dimension)); var tokens = s.Split(new char[] { (char)149 }); if (tokens.Length < 3) { return null; } var s1 = tokens[0]; var s2 = tokens[1]; var s3 = tokens[2]; if (string.IsNullOrWhiteSpace(s1) || string.IsNullOrWhiteSpace(s2) || string.IsNullOrWhiteSpace(s3)) { return null; } return new SensorTypeToDimension(code, name, dimension); } public class SensorTypeToDimension : Tuple { public SensorTypeToDimension(string sensorType, string name, string dimension) : base(sensorType, name, dimension) { } public string Code => Item1; public string Name => Item2; public string Dimension => Item3; } public const bool TestSetupDefaultDontAllowOutOfCalSensorsDefault = false; public static bool TestSetupDefaultDontAllowOutOfCalSensors { get => SettingsDB.GetGlobalValueBool(Keys.TESTSETUPDEFAULT_DONTALLOWOUTOFCALSENSOR.ToString(), TestSetupDefaultDontAllowOutOfCalSensorsDefault); set => SettingsDB.SetGlobalValueBoolean(Keys.TESTSETUPDEFAULT_DONTALLOWOUTOFCALSENSOR.ToString(), value); } } }