public GpioSubscriber(int gpioNumber, GpioEdge edge)
 {
     m_callback   = EdgeDetected;
     m_gpioNumber = gpioNumber;
     m_edge       = edge;
     m_event      = new ManualResetEvent(false);
 }
        public void WaitForEdge(int gpioNum, GpioEdge edge, int maxWaitingTimeInMs)
        {
            if (!m_run)
            {
                throw new Exception("GPIO Listener Thread not started!");
            }
            var tmpSubscriber = new GpioSubscriber(gpioNum, edge);
            int hash          = AddChangeSubscriber(tmpSubscriber);
            var result        = tmpSubscriber.WaitForChange(maxWaitingTimeInMs);

            RemoveChangeSubscriber(hash);
            if (!result)
            {
                throw new TimeoutException("Timeout waiting for level change on GPIO " + gpioNum);
            }
        }
Beispiel #3
0
        public async Task SetEdge(string pin, GpioEdge edge)
        {
            string edgeValue;

            switch (edge)
            {
            case GpioEdge.None:
                edgeValue = "none";
                break;

            case GpioEdge.Both:
                edgeValue = "both";
                break;

            case GpioEdge.Rising:
                edgeValue = "rising";
                break;

            case GpioEdge.Falling:
                edgeValue = "falling";
                break;

            default:
                throw new ArgumentException("Requires a direction");
            }

            try
            {
                using (var writer = new StreamWriter(GpioPath.EdgePath(pin), false))
                {
                    await writer.WriteAsync(edgeValue);

                    return;
                }
            }
            catch (UnauthorizedAccessException)
            {
                // User is not root and the permissions have not been set yet. Need to wait.
                Thread.Sleep(TimeSpan.FromSeconds(0.5));
            }

            using (var writer = new StreamWriter(GpioPath.EdgePath(pin), false))
                await writer.WriteAsync(edgeValue);
        }
Beispiel #4
0
        public static async Task <InputPort> Create(int pin, GpioEdge edge, IGpioDriver driver = null)
        {
            var port = new InputPort(pin, driver ?? new FileDriver());

            // If port already exists delete and recreate it
            if (Directory.Exists(GpioPath.Path(pin)))
            {
                await port.UnAssignPin();
            }
            await port.AssignPin();

            await port.SetDirection();

            await port.SetEdge(edge);

            port.SetupInterrupt();

            return(port);
        }
Beispiel #5
0
        public async Task SetEdge(string pin, GpioEdge edge)
        {
            string edgeValue;
            switch (edge)
            {
                case GpioEdge.None:
                    edgeValue = "none";
                    break;
                case GpioEdge.Both:
                    edgeValue = "both";
                    break;
                case GpioEdge.Rising:
                    edgeValue = "rising";
                    break;
                case GpioEdge.Falling:
                    edgeValue = "falling";
                    break;
                default:
                    throw new ArgumentException("Requires a direction");
            }

            try
            {
                using (var writer = new StreamWriter(GpioPath.EdgePath(pin), false))
                {
                    await writer.WriteAsync(edgeValue);
                    return;
                }
            }
            catch (UnauthorizedAccessException)
            {
                // User is not root and the permissions have not been set yet. Need to wait.
                Thread.Sleep(TimeSpan.FromSeconds(0.5));
            }

            using (var writer = new StreamWriter(GpioPath.EdgePath(pin), false))
                await writer.WriteAsync(edgeValue);
        }
 public GpioSubscriber(int gpioNumber, GpioEdge edge, GpioLevelChangeHandler callback)
 {
     m_callback   = callback;
     m_gpioNumber = gpioNumber;
     m_edge       = edge;
 }
 public int RegisterLevelChangeCallback(int gpioNum, GpioEdge edge, GpioLevelChangeHandler callback)
 {
     return(AddChangeSubscriber(new GpioSubscriber(gpioNum, edge, callback)));
 }
Beispiel #8
0
 private async Task SetEdge(GpioEdge edge)
 {
     await _driver.SetEdge(_pin, edge);
 }
 public GpioValueChangedEventArgs(GpioEdge e)
 {
     Edge = e;
 }