Allow a `none` option for fbos_config.firmware_hardware

pull/974/head
Connor Rigby 2019-07-15 10:24:25 -07:00
parent 3569a21c72
commit 4bba6dea11
No known key found for this signature in database
GPG Key ID: 29A88B24B70456E0
3 changed files with 27 additions and 2 deletions

View File

@ -85,6 +85,12 @@ defimpl FarmbotCore.AssetWorker, for: FarmbotCore.Asset.FbosConfig do
{:noreply, %{state | fbos_config: new_fbos_config}}
end
def maybe_flash_firmware(%{firmware_hardware: "none"} = _new_fbow_config, _ = _old_fbos_config) do
Config.update_config_value(:bool, "settings", "firmware_needs_flash", false)
Config.update_config_value(:bool, "settings", "firmware_needs_open", true)
:ok
end
def maybe_flash_firmware(%{firmware_hardware: new_hardware} = new_fbos_config, %{firmware_hardware: old_hardware}) do
force? = Config.get_config_value(:bool, "settings", "firmware_needs_flash")
cond do

View File

@ -7,7 +7,7 @@ defmodule FarmbotCore.FirmwareOpenTask do
use GenServer
require FarmbotCore.Logger
alias FarmbotFirmware.UARTTransport
alias FarmbotFirmware.{UARTTransport, StubTransport}
alias FarmbotCore.{Asset, Config}
@attempt_threshold Application.get_env(:farmbot_core, __MODULE__)[:attempt_threshold]
@attempt_threshold || Mix.raise """
@ -32,6 +32,14 @@ defmodule FarmbotCore.FirmwareOpenTask do
FarmbotFirmware.open_transport(UARTTransport, device: tty)
end
def unswap_transport() do
Application.put_env(:farmbot_firmware, FarmbotFirmware, transport: StubTransport)
# Swap transport on FW module.
# Close tranpsort if it is open currently.
_ = FarmbotFirmware.close_transport()
FarmbotFirmware.open_transport(StubTransport, [])
end
@impl GenServer
def init(_args) do
send(self(), :open)
@ -51,6 +59,7 @@ defmodule FarmbotCore.FirmwareOpenTask do
needs_flash? = Config.get_config_value(:bool, "settings", "firmware_needs_flash")
needs_open? = Config.get_config_value(:bool, "settings", "firmware_needs_open")
firmware_path = Asset.fbos_config(:firmware_path)
firmware_hardware = Asset.fbos_config(:firmware_hardware)
cond do
needs_flash? ->
FarmbotCore.Logger.debug 3, "Firmware needs flash still. Not opening"
@ -62,6 +71,13 @@ defmodule FarmbotCore.FirmwareOpenTask do
timer = Process.send_after(self(), :open, 5000)
{:noreply, increment_attempts(%{state | timer: timer})}
firmware_hardware == "none" && needs_open? ->
FarmbotCore.Logger.debug 3, "Firmware needs to be closed"
unswap_transport()
Config.update_config_value(:bool, "settings", "firmware_needs_open", false)
timer = Process.send_after(self(), :open, 5000)
{:noreply, %{state | timer: timer, attempts: 0}}
needs_open? ->
FarmbotCore.Logger.debug 3, "Firmware needs to be opened"
case swap_transport(firmware_path) do
@ -74,11 +90,13 @@ defmodule FarmbotCore.FirmwareOpenTask do
timer = Process.send_after(self(), :open, 5000)
{:noreply, %{state | timer: timer, attempts: 0}}
end
needs_open? == false ->
# Firmware should probably already be opened here.
# Can just ignore
timer = Process.send_after(self(), :open, 5000)
{:noreply, %{state | timer: timer}}
true ->
FarmbotCore.Logger.debug 3, """
Unknown firmware open state:

View File

@ -71,7 +71,8 @@ defmodule FarmbotCore.FirmwareSideEffects do
[_, _, _, "E"] ->
:ok = BotState.set_firmware_hardware("express_k10")
[_, _, _, "S"] ->
:ok = BotState.set_firmware_hardware("stubduino")
:ok = BotState.set_firmware_version("none")
:ok = BotState.set_firmware_hardware("none")
end
end