farmbot_os/farmbot_core/lib/pin_binding/stub_handler.ex

51 lines
1.1 KiB
Elixir

defmodule Farmbot.PinBinding.StubHandler do
@moduledoc "Stub for handling PinBinding."
@behaviour Farmbot.PinBinding.Handler
use GenServer
def test_fire(pin) do
GenServer.call(__MODULE__, {:test_fire, pin})
end
def register_pin(num) do
GenServer.call(__MODULE__, {:register_pin, num})
end
def unregister_pin(num) do
GenServer.call(__MODULE__, {:unregister_pin, num})
end
def start_link do
GenServer.start_link(__MODULE__, [], name: __MODULE__)
end
def init([]) do
{:ok, %{}}
end
def handle_call({:register_pin, num}, _from, state) do
{:reply, :ok, Map.put(state, num, :enabled)}
end
def handle_call({:unregister_pin, num}, _from, state) do
{:reply, :ok, Map.delete(state, num)}
end
def handle_call({:test_fire, pin}, _from, state) do
case state[pin] do
nil ->
{:reply, :error, state}
:enabled ->
send(self(), {:do_test_fire, pin})
{:reply, :ok, state}
end
end
def handle_info({:do_test_fire, pin}, state) do
Farmbot.PinBinding.Manager.trigger(pin, :rising)
Farmbot.PinBinding.Manager.trigger(pin, :falling)
{:noreply, state}
end
end