/// <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); }
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); } }
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); } }