55 lines
1.6 KiB
Elixir
55 lines
1.6 KiB
Elixir
defmodule AugieWeb.ServoLive do
|
|
use Phoenix.LiveView
|
|
alias Augie.Firmata.Commands
|
|
alias Phoenix.PubSub
|
|
|
|
@moduledoc false
|
|
|
|
def mount(_params, %{"driver" => driver}, socket) do
|
|
driver_as_atom = String.to_atom(driver)
|
|
driver_name = String.capitalize(driver)
|
|
|
|
if connected?(socket) do
|
|
PubSub.subscribe(Augie.PubSub, "command.servo_get_enable_#{driver}")
|
|
IO.inspect({:wat, driver_as_atom})
|
|
Commands.servo_get_enable(driver_as_atom)
|
|
end
|
|
|
|
{:ok,
|
|
assign(socket,
|
|
driver: driver_as_atom,
|
|
driver_name: driver_name,
|
|
switch_id: "#{driver}",
|
|
state_known: false,
|
|
enabled: false
|
|
)}
|
|
end
|
|
|
|
def handle_info({:servo_get_enable_port, <<0, 0>>}, socket) do
|
|
{:noreply, assign(socket, state_known: true, enabled: false)}
|
|
end
|
|
|
|
def handle_info({:servo_get_enable_port, <<1, 0>>}, socket) do
|
|
{:noreply, assign(socket, state_known: true, enabled: true)}
|
|
end
|
|
|
|
def handle_info({:servo_get_enable_starboard, <<0, 0>>}, socket) do
|
|
{:noreply, assign(socket, state_known: true, enabled: false)}
|
|
end
|
|
|
|
def handle_info({:servo_get_enable_starboard, <<1, 0>>}, socket) do
|
|
{:noreply, assign(socket, state_known: true, enabled: true)}
|
|
end
|
|
|
|
def handle_event("enable-servos", _, %{assigns: %{driver: driver}} = socket) do
|
|
Commands.servo_set_enable(driver, true)
|
|
Commands.servo_get_enable(driver)
|
|
{:noreply, socket}
|
|
end
|
|
|
|
def handle_event("disable-servos", _, %{assigns: %{driver: driver}} = socket) do
|
|
Commands.servo_set_enable(driver, false)
|
|
Commands.servo_get_enable(driver)
|
|
{:noreply, socket}
|
|
end
|
|
end
|