defmodule Grizzly.ZWave.CommandClasses.NodeProvisioning do
@moduledoc """
NodeProvisioning Command Class
The Node Provisioning command class is used to manage a list of unique nodes,
called the "Node Provisioning List", in SmartStart controller or gateway.
"""
@behaviour Grizzly.ZWave.CommandClass
alias Grizzly.ZWave.DSK
alias Grizzly.ZWave.SmartStart.MetaExtension
@impl true
def byte(), do: 0x78
@impl true
def name(), do: :node_provisioning
def encode_meta_extensions(meta_extensions),
do:
Enum.reduce(meta_extensions, <<>>, fn extension, extensions_bin ->
extensions_bin <> MetaExtension.encode(extension)
end)
@doc """
Get the binary representation of the dsk
If the DSK is `nil` then this will return an empty binary.
"""
@spec optional_dsk_to_binary(DSK.t() | nil) :: binary()
def optional_dsk_to_binary(nil) do
<<>>
end
def optional_dsk_to_binary(dsk) do
dsk.raw
end
@doc """
Get the DSK from a raw binary
If the binary is empty this will return `{:ok, #DSK<00000-00000-00000-00000-00000-00000-00000-00000>}`.
"""
@spec optional_binary_to_dsk(binary()) :: DSK.t()
def optional_binary_to_dsk(binary) do
DSK.new(binary)
end
end