예제 #1
0
 /// <summary>
 /// Сброс "захвата" оси
 /// </summary>
 public void Reset()
 {
     lock (_syncRoot)
     {
         _currentControlProcessorHardware = new ControlProcessorHardware();
         _previousAxisValues.Clear();
     }
 }
예제 #2
0
 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);
 }
예제 #3
0
        /// <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);
        }
예제 #4
0
        /// <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));
            }
        }
예제 #5
0
 public abstract Capacity GetCapacity(ControlProcessorHardware cph, DeviceSubType deviceSubType);