defmodule BH1750 do
@moduledoc """
Use BH1750 16-bit ambient light sensor in Elixir.
"""
use GenServer
@type option() :: {:name, GenServer.name()} | BH1750.Sensor.option()
@doc """
Instantiates a BH1750 sensor.
"""
def start_link(args \\ []) do
GenServer.start_link(__MODULE__, args, name: args[:name])
end
@doc """
Powers down the BH1750 sensor.
"""
@spec power_down(GenServer.server()) :: :ok | {:error, any}
def power_down(server \\ BH1750), do: GenServer.call(server, :power_down)
@doc """
Measures the ambient light.
"""
@spec measure(GenServer.server()) :: {:ok, 0..0xFFFF} | {:error, any}
def measure(server \\ BH1750), do: GenServer.call(server, :measure)
@impl GenServer
def init(args) do
{:ok, BH1750.Sensor.new(args)}
end
@impl GenServer
def handle_call(fn_name, _from, sensor) do
{:reply, apply(BH1750.Sensor, fn_name, [sensor]), sensor}
end
end