private string EventKindToStringValue(EventKind kind) { string result; if (kind == EventKind.None) { result = "none"; } else if (kind.HasFlag(EventKind.EdgeBoth)) { result = "both"; } else if (kind.HasFlag(EventKind.RisingEdge)) { result = "rising"; } else if (kind.HasFlag(EventKind.FallingEdge)) { result = "falling"; } else { throw new NotSupportedEventKindException(kind); } return(result); }
protected internal override void SetEventsToDetect(int bcmPinNumber, EventKind events) { if (bcmPinNumber < 0 || bcmPinNumber >= PinCount) { throw new ArgumentOutOfRangeException(nameof(bcmPinNumber)); } Initialize(); EventKind kind = EventKind.Low; bool enabled = events.HasFlag(kind); SetEventDetection(bcmPinNumber, kind, enabled); kind = EventKind.High; enabled = events.HasFlag(kind); SetEventDetection(bcmPinNumber, kind, enabled); kind = EventKind.SyncRisingEdge; enabled = events.HasFlag(kind); SetEventDetection(bcmPinNumber, kind, enabled); kind = EventKind.SyncFallingEdge; enabled = events.HasFlag(kind); SetEventDetection(bcmPinNumber, kind, enabled); kind = EventKind.AsyncRisingEdge; enabled = events.HasFlag(kind); SetEventDetection(bcmPinNumber, kind, enabled); kind = EventKind.AsyncFallingEdge; enabled = events.HasFlag(kind); SetEventDetection(bcmPinNumber, kind, enabled); ClearDetectedEvent(bcmPinNumber); bool eventDetectionEnabled = _pinsToDetectEvents[bcmPinNumber]; if (events == EventKind.None) { if (eventDetectionEnabled) { _pinsToDetectEvents.Set(bcmPinNumber, false); _pinsToDetectEventsCount--; } } else { if (!eventDetectionEnabled) { _pinsToDetectEvents.Set(bcmPinNumber, true); _pinsToDetectEventsCount++; if (_eventDetectionThread.ThreadState != ThreadState.Running) { _eventDetectionThread.Start(); } } } }