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
rustler_btleplug lib btleclient.ex.txt
Raw

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