protected override void OnNewControlEvent(ControlEventBase controlEvent) { var ev = (ButtonEvent)controlEvent; var hw = controlEvent.Hardware.GetHardwareGuid(); // Если такое железо не назначено - прекращаем обработку if (!_usedHardware.ContainsKey(hw)) { return; } _usedHardware[hw] = ev.IsPressed; if (!((DescriptorBase)AccessDescriptor).IsPowerOn()) { return; } var stateId = GetActivatedStateId(); if (stateId != -1) { AccessDescriptor.SetState(stateId); } else { AccessDescriptor.SetDefaultState(); } }
protected override void OnNewControlEvent(ControlEventBase controlEvent) { var ev = controlEvent as ButtonEvent; var hardwareId = controlEvent.Hardware.GetHardwareGuid(); var button = (AssignmentForButton)Connections.FirstOrDefault(hw => hw.GetAssignedHardware() == hardwareId); var direction = button.GetInverseState() ? !ev.IsPressed : ev.IsPressed; if (_emulateToggle) { var action = button.Toggle(direction); if (action == ToggleState.MakeOn) { AccessDescriptor.SetState(button.GetConnector().Id); _lastStateId = button.GetConnector().Id; button.IsOn = true; } if (action == ToggleState.MakeOff) { button.IsOn = false; } } else { if (direction) { AccessDescriptor.SetState(button.GetConnector().Id); _lastStateId = button.GetConnector().Id; button.IsOn = true; } else { button.IsOn = false; _lastStateId = -1; } } // Для дампа кнопок с первого раза (без AllKeys, затем PressedKeysOnly) нужно игнорировать события отжатых кнопок, если одна из кнопок уже нажата if (Connections.Any(bi => ((AssignmentForButton)bi).IsOn)) { return; } _lastStateId = -1; AccessDescriptor.SetDefaultState(); }
protected override void OnTick() { if (!(AccessDescriptor is IRepeaterInDescriptor)) { return; } var repeaterIsOn = ((DescriptorMultistateBase)AccessDescriptor).IsRepeaterOn(); if (!repeaterIsOn || _lastStateId == -1) { return; } if (_lastStatePeriod == false) { AccessDescriptor.SetDefaultState(); } else { AccessDescriptor.SetState(_lastStateId); } _lastStatePeriod = !_lastStatePeriod; }