Exemplo n.º 1
0
        /// <inheritdoc/>
        protected override void Dispose(bool disposing)
        {
            if (_pinNumberToEventHandler != null)
            {
                foreach (KeyValuePair <int, LibGpiodDriverEventHandler> kv in _pinNumberToEventHandler)
                {
                    LibGpiodDriverEventHandler eventHandler = kv.Value;
                    eventHandler.Dispose();
                }

                _pinNumberToEventHandler.Clear();
            }

            if (_pinNumberToSafeLineHandle != null)
            {
                foreach (int pin in _pinNumberToSafeLineHandle.Keys)
                {
                    if (_pinNumberToSafeLineHandle.TryGetValue(pin, out SafeLineHandle pinHandle))
                    {
                        pinHandle?.Dispose();
                    }
                }

                _pinNumberToSafeLineHandle.Clear();
            }

            _chip?.Dispose();
            _chip = null;

            base.Dispose(disposing);
        }
Exemplo n.º 2
0
        protected internal override WaitForEventResult WaitForEvent(int pinNumber, PinEventTypes eventTypes, CancellationToken cancellationToken)
        {
            if (eventTypes.HasFlag(PinEventTypes.Rising) || eventTypes.HasFlag(PinEventTypes.Falling))
            {
                LibGpiodDriverEventHandler eventHandler = _pinNumberToEventHandler.GetOrAdd(pinNumber, PopulateEventHandler);

                if (eventTypes.HasFlag(PinEventTypes.Rising))
                {
                    eventHandler.ValueRising += callback;
                }
                else if (eventTypes.HasFlag(PinEventTypes.Falling))
                {
                    eventHandler.ValueFalling += callback;
                }

                bool eventOccured = false;
                void callback(object o, PinValueChangedEventArgs e)
                {
                    eventOccured = true;
                }

                WaitForEventResult(cancellationToken, eventHandler.CancellationTokenSource.Token, ref eventOccured);
                RemoveCallbackForPinValueChangedEvent(pinNumber, callback);

                return(new WaitForEventResult
                {
                    TimedOut = !eventOccured,
                    EventTypes = eventTypes
                });
            }
            else
            {
                throw ExceptionHelper.GetArgumentException(ExceptionResource.InvalidEventType);
            }
        }
Exemplo n.º 3
0
        protected internal override void AddCallbackForPinValueChangedEvent(int pinNumber, PinEventTypes eventTypes, PinChangeEventHandler callback)
        {
            if (eventTypes.HasFlag(PinEventTypes.Rising) || eventTypes.HasFlag(PinEventTypes.Falling))
            {
                LibGpiodDriverEventHandler eventHandler = _pinNumberToEventHandler.GetOrAdd(pinNumber, PopulateEventHandler);

                if (eventTypes.HasFlag(PinEventTypes.Rising))
                {
                    eventHandler.ValueRising += callback;
                }
                else if (eventTypes.HasFlag(PinEventTypes.Falling))
                {
                    eventHandler.ValueFalling += callback;
                }
            }
            else
            {
                throw ExceptionHelper.GetArgumentException(ExceptionResource.InvalidEventType);
            }
        }