farmbot_os/farmbot_os/platform/target/firmware_reset/gpio.ex

35 lines
832 B
Elixir

defmodule FarmbotOS.Platform.Target.FirmwareReset.GPIO do
@moduledoc """
Uses GPIO pin 19 to reset the firmware.
"""
@behaviour FarmbotFirmware.Reset
use GenServer
require Logger
@impl FarmbotFirmware.Reset
def reset(server \\ __MODULE__) do
Logger.debug("calling gpio reset/0")
GenServer.call(server, :reset)
end
@impl GenServer
def init(_args) do
Logger.debug("initializing gpio thing for firmware reset")
{:ok, gpio} = Circuits.GPIO.open(19, :output)
{:ok, %{gpio: gpio}}
end
@impl GenServer
def handle_call(:reset, _from, state) do
Logger.warn("doing firmware gpio reset")
with :ok <- Circuits.GPIO.write(state.gpio, 1),
:ok <- Circuits.GPIO.write(state.gpio, 0) do
{:reply, :ok, state}
else
error -> {:reply, error, state}
end
end
end