コード例 #1
0
        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);
        }
コード例 #2
0
        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();
                    }
                }
            }
        }