Packages
Elixir library providing Bluetooth Low Energy (BLE) client functionality through a Rustler NIF. Uses the btleplug crate to scan for, connect to, and interact with BLE peripherals. POC basic functionality and only client (central) mode is supported resp. usable currently.
Current section
Files
Jump to
Current section
Files
lib/btleclient.ex.txt
defmodule RustlerBtleplug.Client do
require Logger
def init(opts \\ %{}) do
case RustlerBtleplug.Native.init(opts) do
{:ok, result} ->
Logger.info("Rustler init #{inspect(result)}")
{:error, err} ->
{:error, err}
# res -> {:ok, NifIo.FileHandle.wrap_resource(res)}
number ->
{:ok, number}
end
end
def add(a, b) do
case RustlerBtleplug.Native.add(a, b) do
{:ok, result} ->
Logger.info("Rustler add #{inspect(result)}")
{:error, err} ->
{:error, err}
# res -> {:ok, NifIo.FileHandle.wrap_resource(res)}
number ->
{:ok, number}
end
end
def get_map() do
case RustlerBtleplug.Native.get_map() do
{:ok, result} ->
Logger.info("Rustler add #{inspect(result)}")
{:error, err} ->
{:error, err}
# res -> {:ok, NifIo.FileHandle.wrap_resource(res)}
number ->
{:ok, number}
end
end
def new_ble_resource() do
case RustlerBtleplug.Client.new_ble_resource() do
{:ok, btle_manager} ->
{:ok, btle_manager}
{:error, reason} ->
{:error, reason}
end
end
def scan(btle_manager) do
case RustlerBtleplug.Client.scan(btle_manager) do
{:ok, btle_manager} ->
{:ok, btle_manager}
{:error, reason} ->
{:error, reason}
end
end
def connect(btle_manager, device_id) do
case RustlerBtleplug.Client.connect(btle_manager, device_id) do
{:ok, _} ->
{:ok, :device_connected}
{:error, reason} ->
{:error, reason}
end
end
def disconnect(btle_manager, device_id) do
case RustlerBtleplug.Client.disconnect(btle_manager, device_id) do
{:ok, _} ->
{:ok, :device_disconnected}
{:error, reason} ->
{:error, reason}
end
end
def child_spec(opts) do
%{
id: __MODULE__,
start: {__MODULE__, :start_link, [opts]},
type: :worker,
restart: :permanent,
shutdown: 500
}
end
end