defmodule Hamlib do
@moduledoc """
Elixir bindings for [Hamlib](https://hamlib.github.io/), the Ham Radio
Control Library.
This module is the convenience entry point. For controlling an actual radio,
use `Hamlib.Rig`, which owns a rig handle in a process (one controlling
process per serial line). For the raw 1:1 binding, see `Hamlib.Nif`.
## Model numbers
Hamlib identifies each supported radio by an integer model number (e.g. 1 is
the dummy/test rig, 2 is NET rigctl, the Icom/Yaesu/Kenwood/Elecraft families
occupy their own number ranges). `Hamlib.Rig.start_link/1` takes a `:model`.
A few common ones are exposed as `model/1` shortcuts; for the rest, pass the
integer directly (see `rigctl -l` or the Hamlib `riglist.h`).
"""
@doc "The Hamlib library version string, e.g. \"Hamlib 4.6.5\"."
@spec version() :: String.t()
defdelegate version(), to: Hamlib.Nif
@doc """
Set Hamlib's global debug verbosity. The NIF defaults this to `0` (silent) at
load to keep Hamlib's chatty stdout logging out of the BEAM console; raise it
when diagnosing rig issues.
Hamlib.set_debug(4) # verbose
"""
@spec set_debug(0..5) :: :ok
defdelegate set_debug(level), to: Hamlib.Nif
@doc """
Convenience model-number lookup for a few common targets. Returns the integer
Hamlib model number. Pass the integer directly for anything not listed.
* `:dummy` — model 1, the virtual test rig (no hardware)
* `:netrigctl` — model 2, talk to an external `rigctld` over TCP
"""
@spec model(atom()) :: integer()
def model(:dummy), do: 1
def model(:netrigctl), do: 2
end