Add "really fast blink" for syncing led

pull/981/head
connor rigby 2019-09-17 11:26:04 -07:00 committed by Connor Rigby
parent 52f5a25367
commit c03e62bdfe
5 changed files with 28 additions and 6 deletions

View File

@ -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)

View File

@ -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

View File

@ -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")

View File

@ -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()),

View File

@ -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