Lookup pins before read_pin

This will create sensor_values even if `NamedPin`
is not used
pull/974/head
Connor Rigby 2019-06-12 14:11:37 -07:00
parent 5ed88ccb40
commit c7f509d7a3
No known key found for this signature in database
GPG Key ID: 29A88B24B70456E0
2 changed files with 27 additions and 3 deletions

View File

@ -238,6 +238,10 @@ defmodule FarmbotCore.Asset do
Repo.get_by(Peripheral, args)
end
def get_peripheral_by_pin(pin) do
Repo.get_by(Peripheral, pin: pin)
end
## End Peripheral
## Begin Sensor
@ -246,6 +250,10 @@ defmodule FarmbotCore.Asset do
Repo.get_by(Sensor, id: id)
end
def get_sensor_by_pin(pin) do
Repo.get_by(Sensor, pin: pin)
end
def new_sensor!(params) do
Sensor.changeset(%Sensor{}, params)
|> Repo.insert!()

View File

@ -98,11 +98,11 @@ defmodule FarmbotOS.SysCalls do
end
def read_pin({:peripheral, %{pin: pin}}, mode) do
read_pin(pin, mode)
do_read_pin(pin, mode)
end
def read_pin({:sensor, %{pin: pin}}, mode) do
case read_pin(pin, mode) do
case do_read_pin(pin, mode) do
{:error, _} = error ->
error
@ -128,7 +128,23 @@ defmodule FarmbotOS.SysCalls do
1
end
def read_pin(pin_number, mode) do
def read_pin(pin_number, mode) when is_number(pin_number) do
sensor = Asset.get_sensor_by_pin(pin_number)
peripheral = Asset.get_peripheral_by_pin(pin_number)
cond do
is_map(sensor) ->
read_pin({:sensor, sensor}, mode)
is_map(peripheral) ->
read_pin({:peripheral, peripheral}, mode)
true ->
do_read_pin(pin_number, mode)
end
end
defp do_read_pin(pin_number, mode) do
case FarmbotFirmware.request({:pin_read, [p: pin_number, m: mode]}) do
{:ok, {_, {:report_pin_value, [p: _, v: val]}}} ->
val