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); } }
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 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); }
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))); }
private async Task SetEdge(GpioEdge edge) { await _driver.SetEdge(_pin, edge); }
public GpioValueChangedEventArgs(GpioEdge e) { Edge = e; }