From 7d437d64f4a1f81aa18da5130c1c875ebed22e48 Mon Sep 17 00:00:00 2001 From: Rick Carlino Date: Wed, 8 Apr 2020 15:58:13 -0500 Subject: [PATCH 01/12] Add logger --- farmbot_os/platform/target/gpio/circuits_gpio_handler.ex | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/farmbot_os/platform/target/gpio/circuits_gpio_handler.ex b/farmbot_os/platform/target/gpio/circuits_gpio_handler.ex index 1f6cf268..7ab83aa7 100644 --- a/farmbot_os/platform/target/gpio/circuits_gpio_handler.ex +++ b/farmbot_os/platform/target/gpio/circuits_gpio_handler.ex @@ -22,10 +22,12 @@ defmodule FarmbotOS.Platform.Target.PinBindingWorker.CircuitsGPIOHandler do Logger.info("CircuitsGPIOHandler #{pin_number} init") {:ok, pin} = GPIO.open(pin_number, :input) :ok = GPIO.set_interrupts(pin, :rising) - # this has been checked on v1.3 and v1.5 hardware - # and it seems to be fine. + # this has been checked on v1.3 and v1.5 hardware and it seems to be fine. :ok = GPIO.set_pull_mode(pin, :pulldown) - {:ok, %{pin_number: pin_number, pin: pin, fun: fun, debounce: nil}} + result = %{pin_number: pin_number, pin: pin, fun: fun, debounce: nil} + str = "*** " <> inspect(result) + FarmbotCore.Logger.info(1, str) + {:ok, result} end def handle_info(:timeout, state) do From d091f5237108908b4e7b56c53ec3d7c9680379c8 Mon Sep 17 00:00:00 2001 From: Rick Carlino Date: Wed, 8 Apr 2020 16:01:03 -0500 Subject: [PATCH 02/12] Bump VERSION --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 45acc9e6..14b78637 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -9.2.1 +9.2.2-rc1 From 0a7803e202ebe03b3ed94c0473d85f1ce0ab021c Mon Sep 17 00:00:00 2001 From: Rick Carlino Date: Wed, 8 Apr 2020 16:05:17 -0500 Subject: [PATCH 03/12] require FarmbotCore.Logger --- farmbot_os/platform/target/gpio/circuits_gpio_handler.ex | 1 + 1 file changed, 1 insertion(+) diff --git a/farmbot_os/platform/target/gpio/circuits_gpio_handler.ex b/farmbot_os/platform/target/gpio/circuits_gpio_handler.ex index 7ab83aa7..66ca2fd2 100644 --- a/farmbot_os/platform/target/gpio/circuits_gpio_handler.ex +++ b/farmbot_os/platform/target/gpio/circuits_gpio_handler.ex @@ -3,6 +3,7 @@ defmodule FarmbotOS.Platform.Target.PinBindingWorker.CircuitsGPIOHandler do @behaviour FarmbotCore.AssetWorker.FarmbotCore.Asset.PinBinding require Logger + require FarmbotCore.Logger use GenServer alias Circuits.GPIO From 939afb52a4a6294eb9ce29cc657e180875bd9133 Mon Sep 17 00:00:00 2001 From: Rick Carlino Date: Wed, 8 Apr 2020 16:51:14 -0500 Subject: [PATCH 04/12] Updates to firmware handler --- VERSION | 2 +- farmbot_firmware/lib/farmbot_firmware.ex | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/VERSION b/VERSION index 14b78637..2d96fe43 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -9.2.2-rc1 +9.2.2-rc2 diff --git a/farmbot_firmware/lib/farmbot_firmware.ex b/farmbot_firmware/lib/farmbot_firmware.ex index 7af0d7b8..f33cc397 100644 --- a/farmbot_firmware/lib/farmbot_firmware.ex +++ b/farmbot_firmware/lib/farmbot_firmware.ex @@ -541,7 +541,7 @@ defmodule FarmbotFirmware do # If not in an acceptable state, return an error immediately. def handle_command(_, _, %{status: s} = state) - when s in [:transport_boot, :boot, :no_config, :configuration] do + when s in [:boot, :no_config] do {:reply, {:error, "Can't send command when in #{inspect(s)} state"}, state} end From 5b5101313b7df981c1d72fe9526ed0ffec5939be Mon Sep 17 00:00:00 2001 From: Rick Carlino Date: Wed, 8 Apr 2020 18:21:08 -0500 Subject: [PATCH 05/12] Version bump --- VERSION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/VERSION b/VERSION index 2d96fe43..029dcbba 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -9.2.2-rc2 +9.2.2-rc3 From 298334aac559d153645839971c644d9dc422e0fc Mon Sep 17 00:00:00 2001 From: Rick Carlino Date: Wed, 8 Apr 2020 18:31:44 -0500 Subject: [PATCH 06/12] :none pullup mode --- VERSION | 2 +- farmbot_os/platform/target/gpio/circuits_gpio_handler.ex | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/VERSION b/VERSION index 029dcbba..69fb4cbf 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -9.2.2-rc3 +9.2.2-rc4 diff --git a/farmbot_os/platform/target/gpio/circuits_gpio_handler.ex b/farmbot_os/platform/target/gpio/circuits_gpio_handler.ex index 66ca2fd2..aeaea7ae 100644 --- a/farmbot_os/platform/target/gpio/circuits_gpio_handler.ex +++ b/farmbot_os/platform/target/gpio/circuits_gpio_handler.ex @@ -24,7 +24,8 @@ defmodule FarmbotOS.Platform.Target.PinBindingWorker.CircuitsGPIOHandler do {:ok, pin} = GPIO.open(pin_number, :input) :ok = GPIO.set_interrupts(pin, :rising) # this has been checked on v1.3 and v1.5 hardware and it seems to be fine. - :ok = GPIO.set_pull_mode(pin, :pulldown) + # but that was with `:pulldown`. + :ok = GPIO.set_pull_mode(pin, :none) result = %{pin_number: pin_number, pin: pin, fun: fun, debounce: nil} str = "*** " <> inspect(result) FarmbotCore.Logger.info(1, str) From ebc371c4d0a64c26f722ff9d224c93188335a813 Mon Sep 17 00:00:00 2001 From: Rick Carlino Date: Wed, 8 Apr 2020 18:53:23 -0500 Subject: [PATCH 07/12] :pullup pullup mode --- VERSION | 2 +- farmbot_os/platform/target/gpio/circuits_gpio_handler.ex | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/VERSION b/VERSION index 69fb4cbf..9b1292d8 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -9.2.2-rc4 +9.2.2-rc5 diff --git a/farmbot_os/platform/target/gpio/circuits_gpio_handler.ex b/farmbot_os/platform/target/gpio/circuits_gpio_handler.ex index aeaea7ae..a4d96038 100644 --- a/farmbot_os/platform/target/gpio/circuits_gpio_handler.ex +++ b/farmbot_os/platform/target/gpio/circuits_gpio_handler.ex @@ -25,7 +25,7 @@ defmodule FarmbotOS.Platform.Target.PinBindingWorker.CircuitsGPIOHandler do :ok = GPIO.set_interrupts(pin, :rising) # this has been checked on v1.3 and v1.5 hardware and it seems to be fine. # but that was with `:pulldown`. - :ok = GPIO.set_pull_mode(pin, :none) + :ok = GPIO.set_pull_mode(pin, :pullup) result = %{pin_number: pin_number, pin: pin, fun: fun, debounce: nil} str = "*** " <> inspect(result) FarmbotCore.Logger.info(1, str) From 6e674d0e3103504e98b4c9d392b447677d6aac40 Mon Sep 17 00:00:00 2001 From: Rick Carlino Date: Wed, 8 Apr 2020 19:05:14 -0500 Subject: [PATCH 08/12] :none pullup mode again --- VERSION | 2 +- farmbot_os/platform/target/gpio/circuits_gpio_handler.ex | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/VERSION b/VERSION index 9b1292d8..0bbd88ac 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -9.2.2-rc5 +9.2.2-rc6 diff --git a/farmbot_os/platform/target/gpio/circuits_gpio_handler.ex b/farmbot_os/platform/target/gpio/circuits_gpio_handler.ex index a4d96038..aeaea7ae 100644 --- a/farmbot_os/platform/target/gpio/circuits_gpio_handler.ex +++ b/farmbot_os/platform/target/gpio/circuits_gpio_handler.ex @@ -25,7 +25,7 @@ defmodule FarmbotOS.Platform.Target.PinBindingWorker.CircuitsGPIOHandler do :ok = GPIO.set_interrupts(pin, :rising) # this has been checked on v1.3 and v1.5 hardware and it seems to be fine. # but that was with `:pulldown`. - :ok = GPIO.set_pull_mode(pin, :pullup) + :ok = GPIO.set_pull_mode(pin, :none) result = %{pin_number: pin_number, pin: pin, fun: fun, debounce: nil} str = "*** " <> inspect(result) FarmbotCore.Logger.info(1, str) From b6e2b839038f7036739b6611961f3c93969c9405 Mon Sep 17 00:00:00 2001 From: Rick Carlino Date: Thu, 9 Apr 2020 09:21:14 -0500 Subject: [PATCH 09/12] Revert GPIO changes --- VERSION | 2 +- .../platform/target/gpio/circuits_gpio_handler.ex | 12 ++++-------- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/VERSION b/VERSION index 0bbd88ac..fcecff17 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -9.2.2-rc6 +9.2.2-rc7 diff --git a/farmbot_os/platform/target/gpio/circuits_gpio_handler.ex b/farmbot_os/platform/target/gpio/circuits_gpio_handler.ex index aeaea7ae..b45050f4 100644 --- a/farmbot_os/platform/target/gpio/circuits_gpio_handler.ex +++ b/farmbot_os/platform/target/gpio/circuits_gpio_handler.ex @@ -3,7 +3,6 @@ defmodule FarmbotOS.Platform.Target.PinBindingWorker.CircuitsGPIOHandler do @behaviour FarmbotCore.AssetWorker.FarmbotCore.Asset.PinBinding require Logger - require FarmbotCore.Logger use GenServer alias Circuits.GPIO @@ -23,13 +22,10 @@ defmodule FarmbotOS.Platform.Target.PinBindingWorker.CircuitsGPIOHandler do Logger.info("CircuitsGPIOHandler #{pin_number} init") {:ok, pin} = GPIO.open(pin_number, :input) :ok = GPIO.set_interrupts(pin, :rising) - # this has been checked on v1.3 and v1.5 hardware and it seems to be fine. - # but that was with `:pulldown`. - :ok = GPIO.set_pull_mode(pin, :none) - result = %{pin_number: pin_number, pin: pin, fun: fun, debounce: nil} - str = "*** " <> inspect(result) - FarmbotCore.Logger.info(1, str) - {:ok, result} + # this has been checked on v1.3 and v1.5 hardware + # and it seems to be fine. + :ok = GPIO.set_pull_mode(pin, :pulldown) + {:ok, %{pin_number: pin_number, pin: pin, fun: fun, debounce: nil}} end def handle_info(:timeout, state) do From 1749830a316c9836fab043d4f7ca4269e51d4fdf Mon Sep 17 00:00:00 2001 From: Rick Carlino Date: Thu, 9 Apr 2020 09:53:17 -0500 Subject: [PATCH 10/12] Fix misconfigured mock --- farmbot_os/test/farmbot_os/syscalls/pin_control_test.exs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/farmbot_os/test/farmbot_os/syscalls/pin_control_test.exs b/farmbot_os/test/farmbot_os/syscalls/pin_control_test.exs index 0a311b9e..038e1259 100644 --- a/farmbot_os/test/farmbot_os/syscalls/pin_control_test.exs +++ b/farmbot_os/test/farmbot_os/syscalls/pin_control_test.exs @@ -75,15 +75,14 @@ defmodule FarmbotOS.SysCalls.PinControlTest do end test "set_servo_angle" do - expect(FarmbotFirmware, :command, 1, fn + expect(FarmbotFirmware, :command, 2, fn {:servo_write, [p: 20, v: 90]} -> {:error, "opps"} {:servo_write, [p: 40, v: 180]} -> :ok end) assert :ok = PinControl.set_servo_angle(40, 180) - message = - "Firmware error @ \"set_servo_angle\": \"Can't send command when in :transport_boot state\"" + message = "Firmware error @ \"set_servo_angle\": \"opps\"" assert {:error, ^message} = PinControl.set_servo_angle(20, 90) end From 726da83ed1951addbb239c36e0faa4b18d78024a Mon Sep 17 00:00:00 2001 From: Rick Carlino Date: Thu, 9 Apr 2020 10:47:14 -0500 Subject: [PATCH 11/12] Begin tests for FarmbotOS.Lua.Ext.FirmwareTest --- .../test/farmbot_os/lua/ext/firmware_test.exs | 19 +++++++++ farmbot_os/test/test_helper.exs | 41 +++++++++++-------- 2 files changed, 42 insertions(+), 18 deletions(-) create mode 100644 farmbot_os/test/farmbot_os/lua/ext/firmware_test.exs diff --git a/farmbot_os/test/farmbot_os/lua/ext/firmware_test.exs b/farmbot_os/test/farmbot_os/lua/ext/firmware_test.exs new file mode 100644 index 00000000..1f657c0e --- /dev/null +++ b/farmbot_os/test/farmbot_os/lua/ext/firmware_test.exs @@ -0,0 +1,19 @@ +defmodule FarmbotOS.Lua.Ext.FirmwareTest do + alias FarmbotOS.Lua.Ext.Firmware + use ExUnit.Case + use Mimic + setup :verify_on_exit! + + test "calibrate/2" do + msg = "expected stub error" + lua = "return" + + expect(FarmbotCeleryScript.SysCalls, :calibrate, 2, fn + "x" -> :ok + _ -> {:error, msg} + end) + + assert {[true], ^lua} = Firmware.calibrate(["x"], lua) + assert {[nil, ^msg], ^lua} = Firmware.calibrate(["y"], lua) + end +end diff --git a/farmbot_os/test/test_helper.exs b/farmbot_os/test/test_helper.exs index d0d5f4ed..e8937831 100644 --- a/farmbot_os/test/test_helper.exs +++ b/farmbot_os/test/test_helper.exs @@ -1,20 +1,25 @@ Application.ensure_all_started(:mimic) -Mimic.copy(FarmbotCore.Asset.Device) -Mimic.copy(FarmbotCore.Asset.FbosConfig) -Mimic.copy(FarmbotCore.Asset.FirmwareConfig) -Mimic.copy(FarmbotCore.Asset) -Mimic.copy(FarmbotCore.BotState) -Mimic.copy(FarmbotCore.Config) -Mimic.copy(FarmbotCore.FarmwareRuntime) -Mimic.copy(FarmbotCore.LogExecutor) -Mimic.copy(FarmbotExt.API.Reconciler) -Mimic.copy(FarmbotExt.API) -Mimic.copy(FarmbotFirmware) -Mimic.copy(FarmbotOS.Configurator.ConfigDataLayer) -Mimic.copy(FarmbotOS.Configurator.DetsTelemetryLayer) -Mimic.copy(FarmbotOS.Configurator.FakeNetworkLayer) -Mimic.copy(FarmbotOS.SysCalls.Movement) -Mimic.copy(FarmbotOS.SysCalls) -Mimic.copy(File) -Mimic.copy(MuonTrap) + +[ + FarmbotCore.Asset.Device, + FarmbotCore.Asset.FbosConfig, + FarmbotCore.Asset.FirmwareConfig, + FarmbotCore.Asset, + FarmbotCore.BotState, + FarmbotCore.Config, + FarmbotCore.FarmwareRuntime, + FarmbotCore.LogExecutor, + FarmbotExt.API.Reconciler, + FarmbotExt.API, + FarmbotFirmware, + FarmbotOS.Configurator.ConfigDataLayer, + FarmbotOS.Configurator.DetsTelemetryLayer, + FarmbotOS.Configurator.FakeNetworkLayer, + FarmbotOS.SysCalls.Movement, + FarmbotOS.SysCalls, + File, + MuonTrap, + FarmbotCeleryScript.SysCalls +] |> Enum.map(&Mimic.copy/1) + ExUnit.start() From abd67494345e7a5fd3887c2eee88f41d12219103 Mon Sep 17 00:00:00 2001 From: Rick Carlino Date: Thu, 9 Apr 2020 11:27:32 -0500 Subject: [PATCH 12/12] Tests for FarmbotOS.Lua.Ext.FirmwareTest --- farmbot_os/lib/farmbot_os/lua/ext/firmware.ex | 2 +- .../test/farmbot_os/lua/ext/firmware_test.exs | 56 +++++++++++++++++++ farmbot_os/test/test_helper.exs | 3 +- 3 files changed, 59 insertions(+), 2 deletions(-) diff --git a/farmbot_os/lib/farmbot_os/lua/ext/firmware.ex b/farmbot_os/lib/farmbot_os/lua/ext/firmware.ex index d371a3d9..fcb56d5a 100644 --- a/farmbot_os/lib/farmbot_os/lua/ext/firmware.ex +++ b/farmbot_os/lib/farmbot_os/lua/ext/firmware.ex @@ -1,6 +1,6 @@ defmodule FarmbotOS.Lua.Ext.Firmware do @moduledoc """ - Lua extensions for interacting with the Firmware + Lua extensions for interacting with the Firmware """ alias FarmbotCeleryScript.SysCalls diff --git a/farmbot_os/test/farmbot_os/lua/ext/firmware_test.exs b/farmbot_os/test/farmbot_os/lua/ext/firmware_test.exs index 1f657c0e..cb6e0ed7 100644 --- a/farmbot_os/test/farmbot_os/lua/ext/firmware_test.exs +++ b/farmbot_os/test/farmbot_os/lua/ext/firmware_test.exs @@ -16,4 +16,60 @@ defmodule FarmbotOS.Lua.Ext.FirmwareTest do assert {[true], ^lua} = Firmware.calibrate(["x"], lua) assert {[nil, ^msg], ^lua} = Firmware.calibrate(["y"], lua) end + + test "move_absolute/2" do + msg = "expected stub error" + lua = "return" + + expect(FarmbotCeleryScript.SysCalls, :move_absolute, 4, fn + (1, _, _, _) -> :ok + (_, _, _, _) -> {:error, msg} + end) + + assert {[true], ^lua} = Firmware.move_absolute([1,2,3,4], lua) + assert {[nil, ^msg], ^lua} = Firmware.move_absolute([5,6,7,8], lua) + assert {[true], ^lua} = Firmware.move_absolute([1,2,3], lua) + assert {[nil, ^msg], ^lua} = Firmware.move_absolute([5,6,7], lua) + end + + test "find_home/2" do + msg = "expected stub error" + lua = "return" + + expect(FarmbotCeleryScript.SysCalls, :find_home, 2, fn + "x" -> :ok + _ -> {:error, msg} + end) + + assert {[true], ^lua} = Firmware.find_home(["x"], lua) + assert {[nil, ^msg], ^lua} = Firmware.find_home(["y"], lua) + end + + test "emergency_lock/2" do + msg = "expected stub error" + lua = "return" + + expect(FarmbotCeleryScript.SysCalls, :emergency_lock, 1, fn -> :ok end) + assert {[true], ^lua} = Firmware.emergency_lock(:ok, lua) + + expect(FarmbotCeleryScript.SysCalls, :emergency_lock, 1, fn -> + {:error, msg} + end) + + assert {[nil, ^msg], ^lua} = Firmware.emergency_lock(nil, lua) + end + + test "emergency_unlock/2" do + msg = "expected stub error" + lua = "return" + + expect(FarmbotCeleryScript.SysCalls, :emergency_unlock, 1, fn -> :ok end) + assert {[true], ^lua} = Firmware.emergency_unlock(:ok, lua) + + expect(FarmbotCeleryScript.SysCalls, :emergency_unlock, 1, fn -> + {:error, msg} + end) + + assert {[nil, ^msg], ^lua} = Firmware.emergency_unlock(nil, lua) + end end diff --git a/farmbot_os/test/test_helper.exs b/farmbot_os/test/test_helper.exs index e8937831..3230c076 100644 --- a/farmbot_os/test/test_helper.exs +++ b/farmbot_os/test/test_helper.exs @@ -20,6 +20,7 @@ Application.ensure_all_started(:mimic) File, MuonTrap, FarmbotCeleryScript.SysCalls -] |> Enum.map(&Mimic.copy/1) +] +|> Enum.map(&Mimic.copy/1) ExUnit.start()