lib/reset.ex

defmodule NervesBackdoor.Reset do
  use GenServer

  def start_link(_opts \\ []) do
    init_args = []
    GenServer.start_link(__MODULE__, init_args, name: :nbd_reset)
  end

  @impl true
  def init(_args) do
    io = NervesBackdoor.io_btn()
    {:ok, gpio} = NervesBackdoor.Gpio.io_input(io)
    :ok = NervesBackdoor.Gpio.io_rising(gpio)
    {:ok, gpio}
  end

  @impl true
  def terminate(_reason, gpio) do
    :ok = NervesBackdoor.Gpio.io_close(gpio)
  end

  @impl true
  def handle_info({:circuits_gpio, _, _, _}, gpio) do
    NervesBackdoor.pass_reset()
    {:noreply, gpio}
  end
end