Add new field to bot state
bot_state.location_data.axis_states now contains a vec3 of strings of current axis statespull/974/head
parent
4a8689f206
commit
4dcc20fda7
|
@ -34,16 +34,20 @@ defmodule FarmbotCore.BotState do
|
|||
GenServer.call(bot_state_server, {:set_encoders_scaled, x, y, z})
|
||||
end
|
||||
|
||||
@doc "Sets pins.pin.value"
|
||||
def set_pin_value(bot_state_server \\ __MODULE__, pin, value) do
|
||||
GenServer.call(bot_state_server, {:set_pin_value, pin, value})
|
||||
end
|
||||
|
||||
@doc "Sets the location_data.encoders_raw"
|
||||
def set_encoders_raw(bot_state_server \\ __MODULE__, x, y, z) do
|
||||
GenServer.call(bot_state_server, {:set_encoders_raw, x, y, z})
|
||||
end
|
||||
|
||||
def set_axis_state(bot_state_server \\ __MODULE__, axis, state) do
|
||||
GenServer.call(bot_state_server, {:set_axis_state, axis, state})
|
||||
end
|
||||
|
||||
@doc "Sets pins.pin.value"
|
||||
def set_pin_value(bot_state_server \\ __MODULE__, pin, value) do
|
||||
GenServer.call(bot_state_server, {:set_pin_value, pin, value})
|
||||
end
|
||||
|
||||
@doc "Sets mcu_params[param] = value"
|
||||
def set_firmware_config(bot_state_server \\ __MODULE__, param, value) do
|
||||
GenServer.call(bot_state_server, {:set_firmware_config, param, value})
|
||||
|
@ -220,6 +224,22 @@ defmodule FarmbotCore.BotState do
|
|||
{:reply, reply, state}
|
||||
end
|
||||
|
||||
def handle_call({:set_axis_state, axis, axis_state}, _from, state) do
|
||||
change = %{
|
||||
location_data: %{
|
||||
axis_states: %{
|
||||
state.location_data.axis_states | axis => to_string(axis_state)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
{reply, state} =
|
||||
BotStateNG.changeset(state.tree, change)
|
||||
|> dispatch_and_apply(state)
|
||||
|
||||
{:reply, reply, state}
|
||||
end
|
||||
|
||||
def handle_call({:set_pin_value, pin, value}, _from, state) do
|
||||
{reply, state} =
|
||||
BotStateNG.add_or_update_pin(state.tree, pin, -1, value)
|
||||
|
|
|
@ -1,48 +1,17 @@
|
|||
defmodule FarmbotCore.BotStateNG.LocationData do
|
||||
@moduledoc false
|
||||
alias FarmbotCore.BotStateNG.LocationData
|
||||
alias LocationData.{Vec3, Vec3String}
|
||||
use Ecto.Schema
|
||||
import Ecto.Changeset
|
||||
|
||||
@primary_key false
|
||||
|
||||
defmodule Vec3 do
|
||||
@moduledoc false
|
||||
use Ecto.Schema
|
||||
import Ecto.Changeset
|
||||
|
||||
@primary_key false
|
||||
|
||||
embedded_schema do
|
||||
field(:x, :float)
|
||||
field(:y, :float)
|
||||
field(:z, :float)
|
||||
end
|
||||
|
||||
def new do
|
||||
%__MODULE__{}
|
||||
|> changeset(%{x: -1, y: -1, z: -1})
|
||||
|> apply_changes()
|
||||
end
|
||||
|
||||
def view(vec3) do
|
||||
%{
|
||||
x: vec3.x,
|
||||
y: vec3.y,
|
||||
z: vec3.z
|
||||
}
|
||||
end
|
||||
|
||||
def changeset(vec3, params \\ %{}) do
|
||||
vec3
|
||||
|> cast(params, [:x, :y, :z])
|
||||
end
|
||||
end
|
||||
|
||||
embedded_schema do
|
||||
embeds_one(:scaled_encoders, Vec3, on_replace: :update)
|
||||
embeds_one(:raw_encoders, Vec3, on_replace: :update)
|
||||
embeds_one(:position, Vec3, on_replace: :update)
|
||||
embeds_one(:axis_states, Vec3String, on_replace: :update)
|
||||
end
|
||||
|
||||
def new do
|
||||
|
@ -51,6 +20,7 @@ defmodule FarmbotCore.BotStateNG.LocationData do
|
|||
|> put_embed(:scaled_encoders, Vec3.new(), [])
|
||||
|> put_embed(:raw_encoders, Vec3.new(), [])
|
||||
|> put_embed(:position, Vec3.new(), [])
|
||||
|> put_embed(:axis_states, Vec3String.new(), [])
|
||||
|> apply_changes()
|
||||
end
|
||||
|
||||
|
@ -58,7 +28,8 @@ defmodule FarmbotCore.BotStateNG.LocationData do
|
|||
%{
|
||||
scaled_encoders: Vec3.view(location_data.scaled_encoders),
|
||||
raw_encoders: Vec3.view(location_data.raw_encoders),
|
||||
position: Vec3.view(location_data.position)
|
||||
position: Vec3.view(location_data.position),
|
||||
axis_states: Vec3String.view(location_data.axis_states)
|
||||
}
|
||||
end
|
||||
|
||||
|
@ -68,5 +39,6 @@ defmodule FarmbotCore.BotStateNG.LocationData do
|
|||
|> cast_embed(:scaled_encoders)
|
||||
|> cast_embed(:raw_encoders)
|
||||
|> cast_embed(:position)
|
||||
|> cast_embed(:axis_states)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -0,0 +1,32 @@
|
|||
defmodule FarmbotCore.BotStateNG.LocationData.Vec3 do
|
||||
@moduledoc false
|
||||
use Ecto.Schema
|
||||
import Ecto.Changeset
|
||||
|
||||
@primary_key false
|
||||
|
||||
embedded_schema do
|
||||
field(:x, :float)
|
||||
field(:y, :float)
|
||||
field(:z, :float)
|
||||
end
|
||||
|
||||
def new do
|
||||
%__MODULE__{}
|
||||
|> changeset(%{x: -1, y: -1, z: -1})
|
||||
|> apply_changes()
|
||||
end
|
||||
|
||||
def view(vec3) do
|
||||
%{
|
||||
x: vec3.x,
|
||||
y: vec3.y,
|
||||
z: vec3.z
|
||||
}
|
||||
end
|
||||
|
||||
def changeset(vec3, params \\ %{}) do
|
||||
vec3
|
||||
|> cast(params, [:x, :y, :z])
|
||||
end
|
||||
end
|
|
@ -0,0 +1,32 @@
|
|||
defmodule FarmbotCore.BotStateNG.LocationData.Vec3String do
|
||||
@moduledoc false
|
||||
use Ecto.Schema
|
||||
import Ecto.Changeset
|
||||
|
||||
@primary_key false
|
||||
|
||||
embedded_schema do
|
||||
field(:x, :string)
|
||||
field(:y, :string)
|
||||
field(:z, :string)
|
||||
end
|
||||
|
||||
def new do
|
||||
%__MODULE__{}
|
||||
|> changeset(%{x: "unknown", y: "unknown", z: "unknown"})
|
||||
|> apply_changes()
|
||||
end
|
||||
|
||||
def view(vec3) do
|
||||
%{
|
||||
x: vec3.x,
|
||||
y: vec3.y,
|
||||
z: vec3.z
|
||||
}
|
||||
end
|
||||
|
||||
def changeset(vec3, params \\ %{}) do
|
||||
vec3
|
||||
|> cast(params, [:x, :y, :z])
|
||||
end
|
||||
end
|
|
@ -16,8 +16,8 @@ defmodule FarmbotCore.FirmwareSideEffects do
|
|||
end
|
||||
|
||||
@impl FarmbotFirmware.SideEffects
|
||||
def handle_axis_state([{_axis, _state}]) do
|
||||
:noop
|
||||
def handle_axis_state([{axis, state}]) do
|
||||
BotState.set_axis_state(axis, state)
|
||||
end
|
||||
|
||||
@impl FarmbotFirmware.SideEffects
|
||||
|
|
Loading…
Reference in New Issue