public virtual void SetPin(GpioConfiguration.Target target, bool isOn)
		{
			if (target != null && _pins != null)
			{
				_log.Info(string.Format("Setting pin {0} [{1}] to {2}", target.PinName, target.Pin, target.IsReverse));
				_driver.Write(_pins[target.PinName], target.IsReverse ? !isOn : isOn);
				return;
			}
			_log.Warn("Could not find that pin sorry ");		
		}
		private void SetupPins(GpioConfiguration gpioConfiguration)
		{
			if (!PlatformHelper.IsLinux) return;
			_log.Info("Default driver");
			_driver = GpioConnectionSettings.DefaultDriver;
			_pins = new Dictionary<PinName, ProcessorPin>();
			foreach (var target in gpioConfiguration.Targets)
			{
				var processorPin = GetPin(target.Pin);
				_pins.Add(target.PinName, processorPin);
				_log.Info(string.Format("Add pin output {0}", target.PinName));
				_driver.Allocate(processorPin, PinDirection.Output);
				SetPin(target, false);
			}

			foreach (var target in gpioConfiguration.Buttons)
			{	
				var processorPin = GetPin(target.Pin);
				_pins.Add(PinName.MainButton, processorPin);
				_log.Info(string.Format("Add pin Input {0}", PinName.MainButton));
				_driver.Allocate(processorPin, PinDirection.Input);
			}	
		}
		public PinManager(GpioConfiguration configuration)
		{
			_configuration = configuration;
			SetupPins(_configuration);
		}