internal static void OpenPin(GpioController controller, int pinNumber, bool asOutput, ref GpioPin pin) { GpioOpenStatus statusResult; if (!controller.TryOpenPin(pinNumber, GpioSharingMode.Exclusive, out pin, out statusResult)) throw new Exception(string.Format("There was an exception opening GPIO pin {0}. The operation returned a status of {1}", pinNumber, statusResult.ToString())); // Pins default to open as input. if (asOutput) { pin.SetDriveMode(GpioPinDriveMode.Output); pin.Write(GpioPinValue.High); } else pin.SetDriveMode(GpioPinDriveMode.InputPullUp); }
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); } }