Exemple #1
0
        private async Task PollAsync()
        {
            if (!IsPossible)
            {
                Logger.Log("An error occurred. Check if the specified pin is valid.", LogLevels.Warn);
                return;
            }

            Config.SetEventRegisteredStatus(true);
            await Sync.WaitAsync().ConfigureAwait(false);

            Logger.Log($"Started '{(Config.PinMode == GpioPinMode.Input ? "Input" : "Output")}' pin polling for {Config.GpioPin}.", LogLevels.Trace);

            try {
                do
                {
                    bool         currentValue = Driver.GpioDigitalRead(Config.GpioPin);
                    GpioPinState currentState = currentValue ? GpioPinState.Off : GpioPinState.On;
                    OnPollResult(currentValue, currentState);
                    await Task.Delay(POLL_DELAY);
                } while (!OverridePolling);
            }
            finally {
                Config.SetEventRegisteredStatus(false);
                Logger.Log($"Polling for '{Config.GpioPin}' has been stopped.", LogLevels.Trace);
                Sync.Release();
            }
        }
        public bool SetGpioWithTimeout(int pin, GpioPinMode mode, GpioPinState state, TimeSpan duration)
        {
            if (!PiController.IsValidPin(pin))
            {
                Logger.Log("The specified pin is invalid.");
                return(false);
            }

            if (PiController.PinConfigCollection.Count > 0 && PiController.PinConfigCollection.Where(x => x.Pin == pin && x.IsDelayedTaskSet).Any())
            {
                return(false);
            }

            if (SetGpioValue(pin, mode, state))
            {
                UpdatePinConfig(pin, mode, state, duration);

                Extensions.Helpers.ScheduleTask(() => {
                    if (SetGpioValue(pin, mode, GpioPinState.Off))
                    {
                        UpdatePinConfig(pin, mode, GpioPinState.Off, TimeSpan.Zero);
                    }
                }, duration);

                return(true);
            }

            return(false);
        }
        public void UpdatePinConfig(int pin, GpioPinMode mode, GpioPinState value, TimeSpan duration)
        {
            if (!PiController.IsValidPin(pin))
            {
                Logger.Log("The specified pin is invalid.");
                return;
            }

            if (PiController.PinConfigCollection.Count <= 0)
            {
                return;
            }

            foreach (GpioPinConfig config in PiController.PinConfigCollection)
            {
                if (config.Pin == pin)
                {
                    config.IsDelayedTaskSet    = duration != TimeSpan.Zero;
                    config.TaskSetAfterMinutes = duration != TimeSpan.Zero ? duration.Minutes : 0;
                    config.Mode     = mode;
                    config.PinValue = value;
                    break;
                }
            }
        }
Exemple #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));
        }
Exemple #5
0
 internal PinValueBase(GpioPinState state, bool digitalValue, GpioPinMode pinMode, PinEventState eventState)
 {
     State        = state;
     DigitalValue = digitalValue;
     PinMode      = pinMode;
     EventState   = eventState;
 }
        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);
                }
            }
        }
Exemple #7
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);
            }
        }
Exemple #8
0
        private void OnPollResult(bool currentValue, GpioPinState currentState)
        {
            if (!IsPossible)
            {
                return;
            }

            bool isSame    = PreviousValue.PinState == currentState;
            Pin  pinConfig = Driver.GetPinConfig(Config.GpioPin);
            OnValueChangedEventArgs args;

            switch (Config.PinEventState)
            {
            case PinEventStates.Activated when currentState == GpioPinState.On && !isSame:
                args = new OnValueChangedEventArgs(Config.GpioPin, currentState, currentValue,
                                                   Config.PinMode, PinEventStates.Activated, PreviousValue.PinState, PreviousValue.DigitalValue);
                Config.OnEvent?.Invoke(args);
                break;

            case PinEventStates.Deactivated when currentState == GpioPinState.Off && !isSame:
                args = new OnValueChangedEventArgs(Config.GpioPin, currentState, currentValue,
                                                   Config.PinMode, PinEventStates.Deactivated, PreviousValue.PinState, PreviousValue.DigitalValue);
                Config.OnEvent?.Invoke(args);
                break;

            case PinEventStates.Both when PreviousValue.PinState != currentState:
                args = new OnValueChangedEventArgs(Config.GpioPin, currentState, currentValue,
                                                   Config.PinMode, PinEventStates.Both, PreviousValue.PinState, PreviousValue.DigitalValue);
                Config.OnEvent?.Invoke(args);
                break;
            }

            PreviousValue.Set(currentState, currentValue);
        }
Exemple #9
0
 public Pin(int pin, GpioPinState state, bool available = true, string?jobName = null)
 {
     PinNumber   = pin;
     PinState    = state;
     IsAvailable = available;
     JobName     = jobName;
 }
Exemple #10
0
 internal Pin(int pin, GpioPinState state, bool available = true, string?jobName = null)
 {
     PinNumber   = pin;
     PinState    = state;
     Mode        = GpioPinMode.Input;
     IsAvailable = available;
     JobName     = jobName;
 }
Exemple #11
0
 public Pin(int pin, GpioPinMode mode, bool available = true, string?jobName = null)
 {
     PinNumber   = pin;
     PinState    = GpioPinState.Off;
     Mode        = mode;
     IsAvailable = available;
     JobName     = jobName;
 }
Exemple #12
0
 public GpioPinConfig(int _pin, GpioPinState _pinValue, GpioPinMode _mode, bool _isDelayedTaskSet, int _taskSetAfterMinutes)
 {
     this.Pin            = _pin;
     PinValue            = _pinValue;
     this.Mode           = _mode;
     IsDelayedTaskSet    = _isDelayedTaskSet;
     TaskSetAfterMinutes = _taskSetAfterMinutes;
 }
Exemple #13
0
        private bool WriteValue(int pinNumber, GpioPinState state)
        {
            if (!PinController.IsValidPin(pinNumber))
            {
                return(false);
            }

            CommandLine.Execute(COMMAND_KEY + $" write {pinNumber} {(int) state}");
            return(true);
        }
 public OnValueChangedEventArgs(int _pinNumber, GpioPinState _pinState,
                                bool _pinCurrentDigitalValue, GpioPinMode _pinDriveMode,
                                GpioPinState _previousPinState, bool _previousDigitalValue)
 {
     Pin                  = _pinNumber;
     CurrentState         = _pinState;
     CurrentDigitalValue  = _pinCurrentDigitalValue;
     CurrentMode          = _pinDriveMode;
     EventTime            = DateTime.Now;
     PreviousPinState     = _previousPinState;
     PreviousDigitalValue = _previousDigitalValue;
 }
 public GpioPinValueChangedEventArgs(int _pinNumber, GpioPinState _pinState,
                                     GpioPinState _pinPreviousState, bool _pinCurrentDigitalValue, bool _pinPreviousDigitalValue,
                                     GpioPinMode _pinDriveMode, int _gpioPhysicalPinNumber)
 {
     PinNumber               = _pinNumber;
     PinState                = _pinState;
     PinPreviousState        = _pinPreviousState;
     PinCurrentDigitalValue  = _pinCurrentDigitalValue;
     PinPreviousDigitalValue = _pinPreviousDigitalValue;
     PinDriveMode            = _pinDriveMode;
     GpioPhysicalPinNumber   = _gpioPhysicalPinNumber;
 }
 internal OnValueChangedEventArgs(int _pinNumber, GpioPinState _pinState,
                                  bool _pinCurrentDigitalValue, GpioPinMode _pinDriveMode, PinEventStates _state,
                                  GpioPinState _previousPinState, bool _previousDigitalValue)
 {
     Pin                  = _pinNumber;
     CurrentState         = _pinState;
     CurrentDigitalValue  = _pinCurrentDigitalValue;
     CurrentMode          = _pinDriveMode;
     TimeStamp            = DateTime.Now;
     PreviousPinState     = _previousPinState;
     PreviousDigitalValue = _previousDigitalValue;
     CurrentEventState    = _state;
 }
Exemple #17
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);
                }
            }
        }
Exemple #18
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);
        }
        public bool SetGpioValue(int pin, GpioPinState state)
        {
            if (!PiController.IsValidPin(pin))
            {
                return(false);
            }

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

            if (GpioPin.PinMode == GpioPinDriveMode.Output)
            {
                GpioPin.Write((GpioPinValue)state);
                Logger.Trace($"Configured ({pin}) gpio pin to ({state.ToString()}) state.");
                return(true);
            }

            return(false);
        }
Exemple #20
0
        internal override bool SetGpioValue(int pin, GpioPinMode mode, GpioPinState state)
        {
            if (!IsWiringPiInstalled())
            {
                return(false);
            }

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

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

            return(SetMode(pin, mode) ? WriteValue(pin, state) : false);
        }
Exemple #21
0
        internal override bool SetGpioValue(int pin, GpioPinMode mode, GpioPinState state)
        {
            if (!PinController.IsValidPin(pin) || !IsDriverInitialized)
            {
                return(false);
            }

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

            GpioPin.PinMode = (GpioPinDriveMode)mode;

            if (mode == GpioPinMode.Output)
            {
                GpioPin.Write((GpioPinValue)state);
                return(true);
            }

            return(true);
        }
Exemple #22
0
        /// <summary>
        /// Sets the specified pin to specified mode and state for duration TimeSpan, after which, the pin will return to its previous state.
        /// <br><b>NOTE: This will block the calling thread until the timespan expires.</b></br>
        /// </summary>
        /// <param name="pin">The pin to configure</param>
        /// <param name="mode">The mode to set the pin into</param>
        /// <param name="state">The state to set the pin into</param>
        /// <param name="duration">The TimeSpan duration after which the pin returns to the initial state</param>
        /// <param name="shouldBlockThread">Specifies if the method should wait until the duration expires.</param>
        /// <returns>Status of the configuration</returns>
        internal virtual bool SetGpioValue(int pin, GpioPinMode mode, GpioPinState state, TimeSpan duration, bool shouldBlockThread = false)
        {
            if (!PreExecValidation(pin))
            {
                return(false);
            }

            if (SetGpioValue(pin, mode, state))
            {
                bool set = false;

                Helpers.ScheduleTask(() => {
                    SetGpioValue(pin, mode, GpioPinState.Off);
                    set = true;
                }, duration);

                Helpers.WaitWhile(() => shouldBlockThread && !set);
                return(true);
            }

            return(false);
        }
 private void OnProbeRecieved()
 {
     Console.WriteLine("StatusProbe RECIEVED ");
     try
     {
         GpioDeviceState data = new GpioDeviceState();
         for (int i = 1; i <= 40; i++)
         {
             GpioId currentPinId = GpioPinMapping.GetGpioId(i);
             if (currentPinId != GpioId.GPIOUnknown)
             {
                 //_manager.SelectPin (GpioPinMapping.GetGPIOId (i));
                 GpioPinState state = _manager.ReadFromPin(currentPinId);
                 data.GpioPinStates.Add(currentPinId, state);
                 //_manager.ReleasePin (currentPinId);
             }
         }
         data.TimeStamp = DateTime.UtcNow.Ticks;
         PiotHubProxy.Invoke <string>("CurrentStatus", data).ContinueWith(sendStatusTask =>
         {
             if (sendStatusTask.IsFaulted)
             {
                 Console.WriteLine("There was an error opening the connection:{0}",
                                   sendStatusTask.Exception.GetBaseException());
             }
             else
             {
                 Console.WriteLine(string.Format("Probe data sent: {0}", new DateTime(data.TimeStamp).ToLongDateString()));
             }
         });
     }
     catch (Exception ex)
     {
         Console.WriteLine("Exception : {0}" + ex.Message);
     }
 }
        public bool SetGpioValue(int pin, GpioPinMode mode, GpioPinState state)
        {
            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);
                DriverController.Write(pin, state == GpioPinState.Off ? PinValue.High : PinValue.Low);
                return(true);
            }
            finally {
                ClosePin(pin);
            }
        }
Exemple #25
0
 public bool SetGpioWithTimeout(int pin, GpioPinMode mode, GpioPinState state, TimeSpan duration)
 {
     throw new NotImplementedException();
 }
Exemple #26
0
 internal GeneratedValue(GpioPinState _state, bool _digitalValue)
 {
     PinState     = _state;
     DigitalValue = _digitalValue;
 }
Exemple #27
0
 public bool SetGpioValue(int pin, GpioPinState state)
 {
     throw new NotImplementedException();
 }
Exemple #28
0
 internal void Set(GpioPinState _state, bool _digitalValue)
 {
     PinState     = _state;
     DigitalValue = _digitalValue;
 }
Exemple #29
0
 internal void SetState(GpioPinState _state)
 {
     PinState = _state;
 }
Exemple #30
0
 public void UpdatePinConfig(int pin, GpioPinMode mode, GpioPinState value, TimeSpan duration)
 {
     throw new NotImplementedException();
 }