Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

v9.0.1-rc2 #1107

Merged
merged 5 commits into from Jan 9, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 1 addition & 1 deletion VERSION
@@ -1 +1 @@
9.0.1-rc1
9.0.1-rc2
13 changes: 10 additions & 3 deletions farmbot_core/lib/farmbot_core/firmware_side_effects.ex
Expand Up @@ -27,7 +27,7 @@ defmodule FarmbotCore.FirmwareSideEffects do

@impl FarmbotFirmware.SideEffects
def handle_axis_timeout(axis) do
FarmbotCore.Logger.error 1, "Axis #{axis} timed out waiting for movement to complete"
FarmbotCore.Logger.error(1, "Axis #{axis} timed out waiting for movement to complete")
:noop
end

Expand All @@ -48,7 +48,7 @@ defmodule FarmbotCore.FirmwareSideEffects do

# this is a bug in the firmware code i think
def handle_encoders_scaled([]), do: :noop

@impl FarmbotFirmware.SideEffects
def handle_encoders_raw(x: x, y: y, z: z) do
:ok = BotState.set_encoders_raw(x, y, z)
Expand All @@ -64,6 +64,7 @@ defmodule FarmbotCore.FirmwareSideEffects do
%{param => value}
|> Asset.update_firmware_config!()
|> Asset.Private.mark_dirty!(%{})

:ok
end

Expand All @@ -75,27 +76,33 @@ defmodule FarmbotCore.FirmwareSideEffects do
@impl FarmbotFirmware.SideEffects
def handle_software_version([version]) do
:ok = BotState.set_firmware_version(version)

case String.split(version, ".") do
# Ramps
[_, _, _, "R"] ->
_ = Leds.red(:solid)
:ok = BotState.set_firmware_hardware("arduino")

# Farmduino
[_, _, _, "F"] ->
_ = Leds.red(:solid)
:ok = BotState.set_firmware_hardware("farmduino")

# Farmduino V14
[_, _, _, "G"] ->
_ = Leds.red(:solid)
:ok = BotState.set_firmware_hardware("farmduino_k14")

# Farmduino V15
[_, _, _, "H"] ->
_ = Leds.red(:solid)
:ok = BotState.set_firmware_hardware("farmduino_k15")

# Express V10
[_, _, _, "E"] ->
_ = Leds.red(:solid)
:ok = BotState.set_firmware_hardware("express_k10")

[_, _, _, "S"] ->
_ = Leds.red(:slow_blink)
:ok = BotState.set_firmware_version("none")
Expand Down Expand Up @@ -159,7 +166,7 @@ defmodule FarmbotCore.FirmwareSideEffects do
@impl FarmbotFirmware.SideEffects
def handle_debug_message([message]) do
fbos_config = Asset.fbos_config()
should_log? = fbos_config.firmware_debug_log || fbos_config.arduino_debug_messages
should_log? = fbos_config.firmware_debug_log || fbos_config.arduino_debug_messages
should_log? && FarmbotCore.Logger.debug(3, "Firmware debug message: " <> message)
end

Expand Down
2 changes: 1 addition & 1 deletion farmbot_ext/lib/farmbot_ext/jwt.ex
Expand Up @@ -37,7 +37,7 @@ defmodule FarmbotExt.JWT do
{:ok, jwt}
else
:error -> {:error, "base64_decode_fail"}
{:error, _resson} -> {:error, "json_decode_error"}
{:error, _reason} -> {:error, "json_decode_error"}
end
end

Expand Down
11 changes: 8 additions & 3 deletions farmbot_firmware/lib/farmbot_firmware.ex
Expand Up @@ -241,7 +241,7 @@ defmodule FarmbotFirmware do
args = Keyword.merge(args, global)
transport = Keyword.fetch!(args, :transport)
side_effects = Keyword.get(args, :side_effects)
reset = Keyword.fetch!(args, :reset)
reset = Keyword.get(args, :reset) || __MODULE__

vcr_fd =
case Keyword.get(args, :vcr_path) do
Expand Down Expand Up @@ -290,6 +290,11 @@ defmodule FarmbotFirmware do
Logger.debug("Firmware reset #{state.reset} started. #{inspect(state.transport_args)}")
{:noreply, %{state | reset_pid: pid}}

# TODO(Rick): I have no idea what's going on here.
{:error, {:already_started, pid}} ->
Logger.debug("Firmware reset complete. #{inspect(state.transport_args)}")
{:noreply, %{state | reset_pid: pid}}

error ->
Logger.error("Error starting Firmware Reset: #{inspect(error)}")
Process.send_after(self(), :timeout, @transport_init_error_retry_ms)
Expand Down Expand Up @@ -631,15 +636,15 @@ defmodule FarmbotFirmware do
{:noreply, goto(state, :busy)}
end

def handle_report({:report_error, []} = code, %{status: :configuration} = state) do
def handle_report({:report_error, _} = code, %{status: :configuration} = state) do
if state.caller_pid, do: send(state.caller_pid, {state.tag, code})
for {pid, _code} <- state.command_queue, do: send(pid, {state.tag, {:report_busy, []}})

side_effects(state, :handle_busy, [false])
{:stop, {:error, state.current}, state}
end

def handle_report({:report_error, []} = code, state) do
def handle_report({:report_error, _} = code, state) do
if state.caller_pid, do: send(state.caller_pid, {state.tag, code})
for {pid, _code} <- state.command_queue, do: send(pid, {state.tag, {:report_busy, []}})

Expand Down
2 changes: 1 addition & 1 deletion farmbot_firmware/lib/farmbot_firmware/command.ex
Expand Up @@ -46,7 +46,7 @@ defmodule FarmbotFirmware.Command do
debug_log("#{GCODE.encode(code)} position change")
wait_for_command_result(tag, code, retries, error)

{_, {:report_error, []}} ->
{_, {:report_error, _}} ->
debug_log("#{GCODE.encode(code)} firmware error")
if err, do: {:error, err}, else: {:error, :firmware_error}

Expand Down
4 changes: 4 additions & 0 deletions farmbot_firmware/lib/farmbot_firmware/gcode/decoder.ex
Expand Up @@ -91,6 +91,10 @@ defmodule FarmbotFirmware.GCODE.Decoder do
def decode_error(["V14"]), do: [:invalid_command]
def decode_error(["V15"]), do: [:no_config]
def decode_error([unk]), do: [unknown_error: unk]
# TODO(Rick): This is a guess. Can be removed if
# better solution is found.
# FarmBot/farmbot_os/issues/1105#issuecomment-572381069
def decode_error(unk), do: [unknown_error: [unk]]

defp decode_floats(list, acc \\ [])

Expand Down
6 changes: 5 additions & 1 deletion farmbot_firmware/lib/farmbot_firmware/gcode/encoder.ex
Expand Up @@ -8,7 +8,10 @@ defmodule FarmbotFirmware.GCODE.Encoder do
def do_encode(:report_idle, []), do: "R00"
def do_encode(:report_begin, []), do: "R01"
def do_encode(:report_success, []), do: "R02"
def do_encode(:report_error, []), do: "R03"
# TODO(Rick): Why are some `:report_error`s sending
# tuples instead of lists??
# https://github.com/FarmBot/farmbot_os/issues/1105#issuecomment-572381069
def do_encode(:report_error, _), do: "R03"
def do_encode(:report_busy, []), do: "R04"

def do_encode(:report_axis_state, xyz), do: "R05 " <> encode_axis_state(xyz)
Expand Down Expand Up @@ -84,6 +87,7 @@ defmodule FarmbotFirmware.GCODE.Encoder do

def do_encode(:command_emergency_unlock, _), do: "F09"
def do_encode(:command_emergency_lock, _), do: "E"
def do_encode(), do: "R03"

@spec encode_floats([{Param.t(), float()}]) :: binary()
defp encode_floats(args) do
Expand Down
2 changes: 1 addition & 1 deletion farmbot_firmware/lib/farmbot_firmware/request.ex
Expand Up @@ -65,7 +65,7 @@ defmodule FarmbotFirmware.Request do
do: {:ok, {tag, result}},
else: wait_for_request_result(tag, code, result)

{_, {:report_error, []}} ->
{_, {:report_error, _}} ->
{:error, :firmware_error}

{_, {:report_invalid, []}} ->
Expand Down
Expand Up @@ -14,7 +14,7 @@ defmodule FarmbotFirmware.UARTTransport do
def init(args) do
device = Keyword.fetch!(args, :device)
handle_gcode = Keyword.fetch!(args, :handle_gcode)
reset = Keyword.fetch!(args, :reset)
reset = Keyword.get(args, :reset)
{:ok, uart} = UART.start_link()
{:ok, %{uart: uart, device: device, open: false, handle_gcode: handle_gcode, reset: reset}, 0}
end
Expand Down