public bool SetGpioValue(int pin, GpioPinState state)
        {
            if (!PinController.IsValidPin(pin))
            {
                return(false);
            }

            try {
                GpioPin GpioPin = (GpioPin)Pi.Gpio[pin];

                if (GpioPin.PinMode == GpioPinDriveMode.Output)
                {
                    GpioPin.Write((GpioPinValue)state);
                    CastDriver <IGpioControllerDriver>(this).Logger.Trace($"Configured ({pin}) gpio pin to ({state.ToString()}) state.");
                    CastDriver <IGpioControllerDriver>(this).UpdatePinConfig(new Pin(pin, state));
                    return(true);
                }

                return(false);
            }
            finally {
                Pin?pinConfig = GetPinConfig(pin);
                if (pinConfig != null)
                {
                    CastDriver <IGpioControllerDriver>(this).UpdatePinConfig(pinConfig);
                }
            }
        }
Ejemplo n.º 2
0
        public bool GpioDigitalRead(int pin)
        {
            if (!IsWiringPiInstalled())
            {
                return(false);
            }

            if (!PiGpioController.IsAllowedToExecute || !IsDriverProperlyInitialized)
            {
                return(false);
            }

            if (!PinController.IsValidPin(pin))
            {
                CastDriver <IGpioControllerDriver>(this)?.Logger.Log("The specified pin is invalid.");
                return(false);
            }

            try {
                return(ReadState(pin) == Enums.GpioPinState.Off ? false : true);
            }
            finally {
                Pin?pinConfig = GetPinConfig(pin);
                if (pinConfig != null)
                {
                    CastDriver <IGpioControllerDriver>(this).UpdatePinConfig(pinConfig);
                }
            }
        }
Ejemplo n.º 3
0
        private void OnEventResult(ref PinEventConfiguration config)
        {
            if (config == null || !PinController.IsValidPin(config.GpioPin))
            {
                return;
            }

            if (config.Current.Equals(config.Previous))
            {
                return;
            }

            OnValueChangedEventArgs onValueChangedEventArgs = new OnValueChangedEventArgs(config.GpioPin, (CurrentValue)config.Current, (PreviousValue)config.Previous);

            switch (config.EventState)
            {
            case PinEventState.Activated when config.Current.DigitalValue:
                OnActivatedEventArgs onActivatedEventArgs = new OnActivatedEventArgs(config.GpioPin, (CurrentValue)config.Current);
                ParallelExecuteOnEach(config.EventState, (p) => p.OnActivated(this, onActivatedEventArgs)).RunSynchronously();
                break;

            case PinEventState.Deactivated when !config.Current.DigitalValue:
                OnDeactivatedEventArgs onDeactivatedEventArgs = new OnDeactivatedEventArgs(config.GpioPin, (CurrentValue)config.Current);
                ParallelExecuteOnEach(config.EventState, (p) => p.OnDeactivated(this, onDeactivatedEventArgs)).RunSynchronously();
                break;

            case PinEventState.Both:
                break;
            }

            ParallelExecuteOnEach(config.EventState, (p) => p.OnValueChanged(this, onValueChangedEventArgs)).RunSynchronously();
        }
Ejemplo n.º 4
0
        internal override bool SetGpioValue(int pin, GpioPinState state)
        {
            if (!IsWiringPiInstalled())
            {
                return(false);
            }

            if (!GpioCore.IsAllowedToExecute || !IsDriverInitialized)
            {
                return(false);
            }

            if (!PinController.IsValidPin(pin))
            {
                return(false);
            }

            Pin pinConfig = GetPinConfig(pin);

            if (pinConfig.Mode != GpioPinMode.Output)
            {
                return(false);
            }

            return(WriteValue(pin, state));
        }
Ejemplo n.º 5
0
        internal override bool GpioDigitalRead(int pin)
        {
            if (!PinController.IsValidPin(pin) || !IsDriverInitialized)
            {
                return(false);
            }

            try {
                if (DriverController == null)
                {
                    return(false);
                }

                if (!DriverController.IsPinOpen(pin))
                {
                    DriverController.OpenPin(pin);
                }

                if (!DriverController.IsPinOpen(pin))
                {
                    return(false);
                }

                return(!(DriverController.Read(pin) == PinValue.High));
            }
            finally {
                ClosePin(pin);
            }
        }
Ejemplo n.º 6
0
        public bool RegisterEvent(EventConfig config)
        {
            if (!PinController.IsValidPin(config.GpioPin))
            {
                Logger.Warning("The specified pin is invalid.");
                return(false);
            }

            Generator gen = new Generator(config);

            gen.Poll();

            for (int i = 0; i < 5; i++)
            {
                if (gen.IsEventRegistered)
                {
                    break;
                }

                Task.Delay(30).Wait();
            }

            if (!gen.IsEventRegistered)
            {
                return(false);
            }

            Events.Add(config.GpioPin, gen);
            return(gen.IsEventRegistered);
        }
Ejemplo n.º 7
0
        internal override int GpioPhysicalPinNumber(int bcmPin)
        {
            if (!PinController.IsValidPin(bcmPin) || !IsDriverInitialized)
            {
                return(-1);
            }

            try {
                if (DriverController == null)
                {
                    return(-1);
                }

                if (!DriverController.IsPinOpen(bcmPin))
                {
                    DriverController.OpenPin(bcmPin);
                }

                if (!DriverController.IsPinOpen(bcmPin))
                {
                    return(-1);
                }

                return(-1);
            }
            finally {
                ClosePin(bcmPin);
            }
        }
Ejemplo n.º 8
0
        internal override bool SetGpioValue(int pin, GpioPinState state)
        {
            if (!PinController.IsValidPin(pin) || !IsDriverInitialized)
            {
                return(false);
            }

            try {
                if (DriverController == null)
                {
                    return(false);
                }

                if (!DriverController.IsPinOpen(pin))
                {
                    DriverController.OpenPin(pin);
                }

                if (!DriverController.IsPinOpen(pin))
                {
                    return(false);
                }

                DriverController.Write(pin, state == GpioPinState.Off ? PinValue.High : PinValue.Low);
                return(true);
            }
            finally {
                ClosePin(pin);
            }
        }
Ejemplo n.º 9
0
        internal override bool SetGpioValue(int pin, GpioPinMode mode)
        {
            if (!PinController.IsValidPin(pin) || !IsDriverInitialized)
            {
                return(false);
            }

            try {
                if (DriverController == null)
                {
                    return(false);
                }

                if (!DriverController.IsPinModeSupported(pin, (PinMode)mode))
                {
                    return(false);
                }

                if (!DriverController.IsPinOpen(pin))
                {
                    DriverController.OpenPin(pin);
                }

                if (!DriverController.IsPinOpen(pin))
                {
                    return(false);
                }

                DriverController.SetPinMode(pin, (PinMode)mode);
                return(true);
            }
            finally {
                ClosePin(pin);
            }
        }
Ejemplo n.º 10
0
        internal override Pin GetPinConfig(int pinNumber)
        {
            if (!PinController.IsValidPin(pinNumber) || DriverController == null || !IsDriverInitialized)
            {
                return(new Pin());
            }

            if (DriverController == null)
            {
                return(new Pin());
            }

            try {
                if (!DriverController.IsPinOpen(pinNumber))
                {
                    DriverController.OpenPin(pinNumber);
                }

                if (!DriverController.IsPinOpen(pinNumber))
                {
                    return(new Pin());
                }

                PinValue value  = DriverController.Read(pinNumber);
                PinMode  mode   = DriverController.GetPinMode(pinNumber);
                Pin      config = new Pin(pinNumber, value == PinValue.High ? GpioPinState.Off : GpioPinState.On, mode == PinMode.Input ? GpioPinMode.Input : GpioPinMode.Output);
                return(config);
            }
            finally {
                ClosePin(pinNumber);
            }
        }
Ejemplo n.º 11
0
        public bool SetGpioValue(int pin, Enums.GpioPinMode mode, Enums.GpioPinState state)
        {
            if (!IsWiringPiInstalled())
            {
                return(false);
            }

            if (!PiGpioController.IsAllowedToExecute || !IsDriverProperlyInitialized)
            {
                return(false);
            }

            if (!PinController.IsValidPin(pin))
            {
                CastDriver <IGpioControllerDriver>(this)?.Logger.Log("The specified pin is invalid.");
                return(false);
            }

            try {
                if (SetMode(pin, mode))
                {
                    return(WriteValue(pin, state));
                }

                return(false);
            }
            finally {
                Pin?pinConfig = GetPinConfig(pin);
                if (pinConfig != null)
                {
                    CastDriver <IGpioControllerDriver>(this).UpdatePinConfig(pinConfig);
                }
            }
        }
Ejemplo n.º 12
0
        public int GpioPhysicalPinNumber(int bcmPin)
        {
            if (!PinController.IsValidPin(bcmPin) || !IsDriverProperlyInitialized)
            {
                CastDriver <IGpioControllerDriver>(this)?.Logger.Log("The specified pin is invalid.");
                return(-1);
            }

            try {
                if (DriverController == null)
                {
                    return(-1);
                }

                DriverController.OpenPin(bcmPin);

                if (!DriverController.IsPinOpen(bcmPin))
                {
                    return(-1);
                }

                CastDriver <IGpioControllerDriver>(this)?.Logger.Info("System.Devices.Gpio driver doesn't support PhysicalPinNumber conversion.");
                return(-1);
            }
            finally {
                if (DriverController != null)
                {
                    if (DriverController.IsPinOpen(bcmPin))
                    {
                        DriverController.ClosePin(bcmPin);
                    }
                }
            }
        }
Ejemplo n.º 13
0
        internal override GpioPinState GpioPinStateRead(int pin)
        {
            if (!PinController.IsValidPin(pin) || !IsDriverInitialized)
            {
                return(GpioPinState.Off);
            }

            try {
                if (DriverController == null)
                {
                    return(GpioPinState.Off);
                }

                if (!DriverController.IsPinOpen(pin))
                {
                    DriverController.OpenPin(pin);
                }

                if (!DriverController.IsPinOpen(pin))
                {
                    return(GpioPinState.Off);
                }

                return(DriverController.Read(pin) == PinValue.High ? GpioPinState.Off : GpioPinState.On);
            }
            finally {
                ClosePin(pin);
            }
        }
Ejemplo n.º 14
0
        internal override bool GpioDigitalRead(int pin)
        {
            if (!PinController.IsValidPin(pin) || !IsDriverInitialized)
            {
                return(false);
            }

            return(((GpioPin)Pi.Gpio[pin]).Read());
        }
Ejemplo n.º 15
0
        private bool WriteValue(int pinNumber, GpioPinState state)
        {
            if (!PinController.IsValidPin(pinNumber))
            {
                return(false);
            }

            CommandLine.Execute(COMMAND_KEY + $" write {pinNumber} {(int) state}");
            return(true);
        }
Ejemplo n.º 16
0
        public bool TogglePinState(int pinNumber)
        {
            if (!PinController.IsValidPin(pinNumber))
            {
                return(false);
            }

            (COMMAND_KEY + $" toggle {pinNumber}").ExecuteBash(false);
            return(true);
        }
Ejemplo n.º 17
0
        internal override bool TogglePinState(int pinNumber)
        {
            if (!PinController.IsValidPin(pinNumber))
            {
                return(false);
            }

            CommandLine.Execute(COMMAND_KEY + $" toggle {pinNumber}");
            return(true);
        }
Ejemplo n.º 18
0
        private bool TogglePin(int pinNumber)
        {
            if (!PinController.IsValidPin(pinNumber))
            {
                CastDriver <IGpioControllerDriver>(this)?.Logger.Log("The specified pin is invalid.");
                return(false);
            }

            (COMMAND_KEY + $" toggle {pinNumber}").ExecuteBash(false);
            return(true);
        }
Ejemplo n.º 19
0
        private bool WriteValue(int pinNumber, Enums.GpioPinState state)
        {
            if (!PinController.IsValidPin(pinNumber))
            {
                CastDriver <IGpioControllerDriver>(this)?.Logger.Log("The specified pin is invalid.");
                return(false);
            }

            (COMMAND_KEY + $" write {pinNumber} {(int) state}").ExecuteBash(false);
            return(true);
        }
Ejemplo n.º 20
0
        internal override int GpioPhysicalPinNumber(int bcmPin)
        {
            if (!PinController.IsValidPin(bcmPin))
            {
                return(-1);
            }

            GpioPin GpioPin = (GpioPin)Pi.Gpio[bcmPin];

            return(GpioPin.PhysicalPinNumber);
        }
Ejemplo n.º 21
0
        internal override GpioPinState GpioPinStateRead(int pin)
        {
            if (!PinController.IsValidPin(pin) || !IsDriverInitialized)
            {
                return(GpioPinState.Off);
            }

            GpioPin gpioPin = (GpioPin)Pi.Gpio[pin];

            return((GpioPinState)gpioPin.ReadValue());
        }
Ejemplo n.º 22
0
        private bool SetMode(int pinNumber, GpioPinMode mode)
        {
            if (!PinController.IsValidPin(pinNumber))
            {
                return(false);
            }

            string pinMode = mode == GpioPinMode.Input ? "in" : "out";

            CommandLine.Execute(COMMAND_KEY + $" mode {pinNumber} {pinMode}");
            return(true);
        }
Ejemplo n.º 23
0
        private void ClosePin(int pinNumber)
        {
            if (DriverController == null)
            {
                return;
            }

            if (PinController.IsValidPin(pinNumber) && DriverController.IsPinOpen(pinNumber))
            {
                DriverController.ClosePin(pinNumber);
            }
        }
Ejemplo n.º 24
0
        internal override bool SetGpioValue(int pin, GpioPinMode mode)
        {
            if (!PinController.IsValidPin(pin))
            {
                return(false);
            }

            GpioPin GpioPin = (GpioPin)Pi.Gpio[pin];

            GpioPin.PinMode = (GpioPinDriveMode)mode;
            return(true);
        }
Ejemplo n.º 25
0
        public int GpioPhysicalPinNumber(int bcmPin)
        {
            if (!PinController.IsValidPin(bcmPin))
            {
                CastDriver <IGpioControllerDriver>(this)?.Logger.Log("The specified pin is invalid.");
                return(0);
            }

            GpioPin GpioPin = (GpioPin)Pi.Gpio[bcmPin];

            return(GpioPin.PhysicalPinNumber);
        }
Ejemplo n.º 26
0
        private bool SetMode(int pinNumber, Enums.GpioPinMode mode)
        {
            if (!PinController.IsValidPin(pinNumber))
            {
                CastDriver <IGpioControllerDriver>(this)?.Logger.Log("The specified pin is invalid.");
                return(false);
            }

            string pinMode = mode == Enums.GpioPinMode.Input ? "in" : "out";

            (COMMAND_KEY + $" mode {pinNumber} {pinMode}").ExecuteBash(false);
            return(true);
        }
Ejemplo n.º 27
0
        public Pin?GetPinConfig(int pinNumber)
        {
            if (!PinController.IsValidPin(pinNumber) || DriverController == null || !IsDriverProperlyInitialized)
            {
                return(null);
            }

            PinValue value  = DriverController.Read(pinNumber);
            PinMode  mode   = DriverController.GetPinMode(pinNumber);
            Pin      config = new Pin(pinNumber, value == PinValue.High ? GpioPinState.Off : GpioPinState.On, mode == PinMode.Input ? GpioPinMode.Input : GpioPinMode.Output);

            return(config);
        }
Ejemplo n.º 28
0
        internal override Pin GetPinConfig(int pinNumber)
        {
            if (!GpioCore.IsAllowedToExecute || !IsDriverInitialized)
            {
                return(new Pin());
            }

            if (!PinController.IsValidPin(pinNumber))
            {
                return(new Pin());
            }

            GpioPin pin = (GpioPin)Pi.Gpio[pinNumber];

            return(new Pin(pinNumber, (GpioPinState)pin.ReadValue(), (GpioPinMode)pin.PinMode));
        }
Ejemplo n.º 29
0
        public bool SetGpioValue(int pin, GpioPinMode mode, GpioPinState state)
        {
            if (!PinController.IsValidPin(pin) || !IsDriverProperlyInitialized)
            {
                return(false);
            }

            try {
                if (DriverController == null)
                {
                    return(false);
                }

                if (!DriverController.IsPinModeSupported(pin, (PinMode)mode))
                {
                    return(false);
                }

                DriverController.OpenPin(pin);

                if (!DriverController.IsPinOpen(pin))
                {
                    return(false);
                }

                DriverController.SetPinMode(pin, (PinMode)mode);
                DriverController.Write(pin, state == GpioPinState.Off ? PinValue.High : PinValue.Low);
                CastDriver <IGpioControllerDriver>(this)?.Logger.Trace($"Configured ({pin}) gpio pin to ({state.ToString()}) state with ({mode.ToString()}) mode.");
                CastDriver <IGpioControllerDriver>(this)?.UpdatePinConfig(new Pin(pin, state, mode));
                return(true);
            }
            finally {
                if (DriverController != null)
                {
                    if (DriverController.IsPinOpen(pin))
                    {
                        DriverController.ClosePin(pin);
                    }
                }

                Pin?pinConfig = GetPinConfig(pin);
                if (pinConfig != null)
                {
                    CastDriver <IGpioControllerDriver>(this).UpdatePinConfig(pinConfig);
                }
            }
        }
Ejemplo n.º 30
0
        internal override bool SetGpioValue(int pin, GpioPinState state)
        {
            if (!PinController.IsValidPin(pin))
            {
                return(false);
            }

            GpioPin GpioPin = (GpioPin)Pi.Gpio[pin];

            if (GpioPin.PinMode != GpioPinDriveMode.Output)
            {
                return(false);
            }

            GpioPin.Write((GpioPinValue)state);
            return(true);
        }