Пример #1
0
        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);
            }
        }
Пример #2
0
        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; });
        }