/// <summary> /// Сброс "захвата" оси /// </summary> public void Reset() { lock (_syncRoot) { _currentControlProcessorHardware = new ControlProcessorHardware(); _previousAxisValues.Clear(); } }
public bool Equals(ControlProcessorHardware other) { if (ReferenceEquals(null, other)) { return(false); } if (ReferenceEquals(this, other)) { return(true); } return(other.MotherBoardId == MotherBoardId && other.ModuleId == ModuleId && other.ControlId == ControlId && other.ModuleType == ModuleType && other.BlockId == BlockId); }
/// <summary> /// Сгенерировать класс на базе guid-строки /// </summary> /// <param name="guid">guid-строка</param> /// <returns>экземпляр класса</returns> public static ControlProcessorHardware GenerateByGuid(string guid) { var cph = new ControlProcessorHardware(); var s = guid.Split('|'); if (s.Length == 4) { cph.MotherBoardId = s[0]; cph.ModuleType = GetHardwareModuleTypeByName(s[1]); cph.ModuleId = uint.Parse(s[2]); cph.ControlId = uint.Parse(s[3]); return(cph); } if (s.Length == 5) { foreach (var sub in s) { if (sub.StartsWith(TagForMotherboard)) { cph.MotherBoardId = sub.Remove(0, TagForMotherboard.Length); } if (sub.StartsWith(TagForModuleType)) { cph.ModuleType = GetHardwareModuleTypeByName(sub.Remove(0, TagForModuleType.Length)); } if (sub.StartsWith(TagForExtensionModule)) { cph.ModuleId = uint.Parse(sub.Remove(0, TagForExtensionModule.Length)); } if (sub.StartsWith(TagForBlock)) { cph.BlockId = uint.Parse(sub.Remove(0, TagForBlock.Length)); } if (sub.StartsWith(TagForControl)) { cph.ControlId = uint.Parse(sub.Remove(0, TagForControl.Length)); } } return(cph); } return(null); }
/// <summary> /// Следует ли обрабатывать событие для визуализации и назначения оси /// </summary> /// <param name="controlEvent">событие</param> /// <param name="thresholdPercentage">порог, после которого наступает "захват" оси. После чего её показания можно демонстрировать</param> /// <returns>true - обрабатывать, false - пропустить</returns> public bool IsNeedToProcessAxisEvent(AxisEvent controlEvent, double thresholdPercentage) { lock (_syncRoot) { // Логика ниже работает следующим образом: для того, чтобы интерфейс работал с конкретной осью, а не со всеми сразу (из-за дребезга) // ось сначала нужно "захватить", то есть передвинуть на 1/10 хода. // После этого отображаются данные только этой оси до следующего "захвата" интерфейса другой осью var key = controlEvent.Hardware.GetHardwareGuid(); if (!_previousAxisValues.ContainsKey(key)) { _previousAxisValues.Add(key, controlEvent.Position); // Здесь возвращается true для того, чтобы оси можно было сдампить. То есть, в первый раз дребезг не учитывается. return(true); } var threshold = Math.Abs(controlEvent.MaximumValue - controlEvent.MinimumValue) / 100 * thresholdPercentage; if (controlEvent.Position > _previousAxisValues[key] + threshold || controlEvent.Position < _previousAxisValues[key] - threshold) { _currentControlProcessorHardware = controlEvent.Hardware; _previousAxisValues[key] = controlEvent.Position; } return(controlEvent.Hardware.Equals(_currentControlProcessorHardware)); } }
public abstract Capacity GetCapacity(ControlProcessorHardware cph, DeviceSubType deviceSubType);