private void InitializeGpio() { _gpioController = GpioController.GetDefault(); List <int> keysToRemove = new List <int>(); foreach (int key in GpioPinDictionary.Keys) { GpioPin gpioPin; GpioOpenStatus status; _gpioController.TryOpenPin(key, GpioSharingMode.SharedReadOnly, out gpioPin, out status); if (status == GpioOpenStatus.PinOpened) { Pin pin = GpioPinDictionary[key]; pin.GpioPin = gpioPin; pin.IsActive = gpioPin.Read() == GpioPinValue.High; gpioPin.ValueChanged += GpioPinOnValueChanged; } else if (status == GpioOpenStatus.PinUnavailable) { keysToRemove.Add(key); } } foreach (int i in keysToRemove) { GpioPinDictionary[i].IsUnavailable = true; GpioPinDictionary.Remove(i); } }
private async void GpioPinOnValueChanged(GpioPin sender, GpioPinValueChangedEventArgs args) { Pin pin; if (!GpioPinDictionary.TryGetValue(sender.PinNumber, out pin)) { return; } bool isActive = args.Edge == GpioPinEdge.RisingEdge; await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => { pin.IsActive = isActive; }); }