diff --git a/VERSION b/VERSION index 45acc9e6..fcecff17 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -9.2.1 +9.2.2-rc7 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 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/platform/target/gpio/circuits_gpio_handler.ex b/farmbot_os/platform/target/gpio/circuits_gpio_handler.ex index 1f6cf268..b45050f4 100644 --- a/farmbot_os/platform/target/gpio/circuits_gpio_handler.ex +++ b/farmbot_os/platform/target/gpio/circuits_gpio_handler.ex @@ -23,7 +23,7 @@ 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. + # 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 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..cb6e0ed7 --- /dev/null +++ b/farmbot_os/test/farmbot_os/lua/ext/firmware_test.exs @@ -0,0 +1,75 @@ +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 + + 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/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 diff --git a/farmbot_os/test/test_helper.exs b/farmbot_os/test/test_helper.exs index d0d5f4ed..3230c076 100644 --- a/farmbot_os/test/test_helper.exs +++ b/farmbot_os/test/test_helper.exs @@ -1,20 +1,26 @@ 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()