Packages
circuits_gpio
2.0.1
2.3.0
2.2.0
2.1.3
2.1.2
retired
2.1.1
retired
2.1.0
retired
2.0.2
retired
2.0.1
retired
2.0.0
retired
2.0.0-pre.6
retired
2.0.0-pre.5
retired
2.0.0-pre.4
retired
2.0.0-pre.3
retired
2.0.0-pre.2
retired
2.0.0-pre.1
retired
2.0.0-pre.0
retired
1.2.2
1.2.1
1.2.0
1.1.0
1.0.1
1.0.0
0.4.8
0.4.7
0.4.6
0.4.5
0.4.4
0.4.3
0.4.2
0.4.1
0.4.0
0.3.1
0.3.0
0.2.0
0.1.0
Use GPIOs in Elixir
Retired package: Release invalid - Contains severe bug affecting interrupts. Upgrade to >=2.1.3
Current section
Files
Jump to
Current section
Files
lib/gpio/gpio_nif.ex
# SPDX-FileCopyrightText: 2018 Frank Hunleth, Mark Sebald, Matt Ludwigs
#
# SPDX-License-Identifier: Apache-2.0
defmodule Circuits.GPIO.Nif do
@moduledoc false
defp load_nif_and_apply(fun, args) do
nif_binary = Application.app_dir(:circuits_gpio, "priv/gpio_nif")
# Optimistically load the NIF. Handle the possible race.
case :erlang.load_nif(to_charlist(nif_binary), 0) do
:ok -> apply(__MODULE__, fun, args)
{:error, {:reload, _}} -> apply(__MODULE__, fun, args)
error -> error
end
end
def open(gpio_spec, resolved_gpio_spec, direction, initial_value, pull_mode) do
load_nif_and_apply(:open, [
gpio_spec,
resolved_gpio_spec,
direction,
initial_value,
pull_mode
])
end
def close(_gpio), do: :erlang.nif_error(:nif_not_loaded)
def read(_gpio), do: :erlang.nif_error(:nif_not_loaded)
def write(_gpio, _value), do: :erlang.nif_error(:nif_not_loaded)
def set_interrupts(_gpio, _trigger, _suppress_glitches, _process),
do: :erlang.nif_error(:nif_not_loaded)
def set_direction(_gpio, _direction), do: :erlang.nif_error(:nif_not_loaded)
def set_pull_mode(_gpio, _pull_mode), do: :erlang.nif_error(:nif_not_loaded)
def info(_gpio), do: :erlang.nif_error(:nif_not_loaded)
def status(resolved_gpio_spec) do
load_nif_and_apply(:status, [resolved_gpio_spec])
end
def backend_info() do
load_nif_and_apply(:backend_info, [])
end
def enumerate() do
load_nif_and_apply(:enumerate, [])
end
end