diff --git a/farmbot_core/lib/farmbot_core/leds/leds.ex b/farmbot_core/lib/farmbot_core/leds/leds.ex index d12c866e..d1b92402 100644 --- a/farmbot_core/lib/farmbot_core/leds/leds.ex +++ b/farmbot_core/lib/farmbot_core/leds/leds.ex @@ -3,7 +3,7 @@ defmodule FarmbotCore.Leds do @led_handler Application.get_env(:farmbot_core, __MODULE__)[:gpio_handler] @led_handler || Mix.raise("You forgot a led handler!") - @valid_status [:off, :solid, :slow_blink, :fast_blink] + @valid_status [:off, :solid, :slow_blink, :fast_blink, :really_fast_blink] def red(status) when status in @valid_status, do: led_handler().red(status) def blue(status) when status in @valid_status, do: led_handler().blue(status) diff --git a/farmbot_core/lib/farmbot_core/leds/stub_handler.ex b/farmbot_core/lib/farmbot_core/leds/stub_handler.ex index 8fe0100e..d56aa4e9 100644 --- a/farmbot_core/lib/farmbot_core/leds/stub_handler.ex +++ b/farmbot_core/lib/farmbot_core/leds/stub_handler.ex @@ -27,10 +27,12 @@ defmodule FarmbotCore.Leds.StubHandler do defp status_in(:slow_blink), do: IO.ANSI.blink_slow() defp status_in(:fast_blink), do: IO.ANSI.blink_rapid() + defp status_in(:really_fast_blink), do: IO.ANSI.blink_rapid() defp status_in(_), do: "" defp status_out(:slow_blink), do: IO.ANSI.blink_off() defp status_out(:fast_blink), do: IO.ANSI.blink_off() + defp status_out(:really_fast_blink), do: IO.ANSI.blink_off() defp status_out(_), do: "" def start_link(_args) do diff --git a/farmbot_ext/lib/farmbot_ext/amqp/auto_sync_channel.ex b/farmbot_ext/lib/farmbot_ext/amqp/auto_sync_channel.ex index 3efc49cc..3c2e294c 100644 --- a/farmbot_ext/lib/farmbot_ext/amqp/auto_sync_channel.ex +++ b/farmbot_ext/lib/farmbot_ext/amqp/auto_sync_channel.ex @@ -77,7 +77,7 @@ defmodule FarmbotExt.AMQP.AutoSyncChannel do end def handle_info(:preload, state) do - _ = Leds.green(:fast_blink) + _ = Leds.green(:really_fast_blink) with :ok <- Preloader.preload_all() do if Asset.Query.auto_sync?() do @@ -159,7 +159,7 @@ defmodule FarmbotExt.AMQP.AutoSyncChannel do def handle_asset(asset_kind, id, params) do if Asset.Query.auto_sync?() do :ok = BotState.set_sync_status("syncing") - _ = Leds.green(:fast_blink) + _ = Leds.green(:really_fast_blink) # Logger.info "Syncing #{asset_kind} #{id} #{inspect(params)}" Asset.Command.update(asset_kind, id, params) :ok = BotState.set_sync_status("synced") diff --git a/farmbot_os/lib/farmbot_os/sys_calls.ex b/farmbot_os/lib/farmbot_os/sys_calls.ex index fe14c6c7..a275785e 100644 --- a/farmbot_os/lib/farmbot_os/sys_calls.ex +++ b/farmbot_os/lib/farmbot_os/sys_calls.ex @@ -408,7 +408,7 @@ defmodule FarmbotOS.SysCalls do with {:ok, sync_changeset} <- API.get_changeset(Sync), :ok <- BotState.set_sync_status("syncing"), - _ <- Leds.green(:fast_blink), + _ <- Leds.green(:really_fast_blink), sync_changeset <- Reconciler.sync_group(sync_changeset, SyncGroup.group_0()), sync_changeset <- Reconciler.sync_group(sync_changeset, SyncGroup.group_1()), sync_changeset <- Reconciler.sync_group(sync_changeset, SyncGroup.group_2()), diff --git a/farmbot_os/platform/target/gpio/circuits_leds_handler.ex b/farmbot_os/platform/target/gpio/circuits_leds_handler.ex index ad8a8706..4e26f41d 100644 --- a/farmbot_os/platform/target/gpio/circuits_leds_handler.ex +++ b/farmbot_os/platform/target/gpio/circuits_leds_handler.ex @@ -6,8 +6,7 @@ defmodule FarmbotOS.Platform.Target.Leds.CircuitsHandler do @slow_blink_speed 1000 @fast_blink_speed 250 - - # @valid_status [:off, :solid, :slow_blink, :fast_blink] + @really_fast_blink_speed 100 @moduledoc false def red(status) do @@ -103,6 +102,13 @@ defmodule FarmbotOS.Platform.Target.Leds.CircuitsHandler do update_color(state, color, %{state[color] | blink_timer: timer, status: :fast_blink})} end + def handle_call({color, :really_fast_blink}, _from, state) do + timer = restart_timer(state[color].blink_timer, color, @really_fast_blink_speed) + + {:reply, :ok, + update_color(state, color, %{state[color] | blink_timer: timer, status: :really_fast_blink})} + end + def handle_info({:blink_timer, color}, state) do new_state = case state[color] do @@ -120,6 +126,20 @@ defmodule FarmbotOS.Platform.Target.Leds.CircuitsHandler do n = %{state[color] | state: new_led_state, blink_timer: timer, status: :fast_blink} update_color(state, color, n) + %{status: :really_fast_blink} -> + new_led_state = invert(state[color].state) + :ok = GPIO.write(state[color].ref, new_led_state) + timer = restart_timer(state[color].blink_timer, color, @really_fast_blink_speed) + + n = %{ + state[color] + | state: new_led_state, + blink_timer: timer, + status: :really_fast_blink + } + + update_color(state, color, n) + _ -> state end