Packages
grizzly
0.8.1
9.1.4
9.1.2
9.1.1
9.1.0
9.0.0
8.15.3
8.15.2
8.15.1
8.15.0
8.14.0
8.13.0
8.12.0
8.11.3
8.11.2
8.11.1
8.11.0
8.10.0
8.9.0
8.8.1
8.8.0
8.7.1
8.7.0
8.6.12
8.6.11
8.6.10
8.6.9
8.6.8
8.6.7
retired
8.6.6
8.6.5
8.6.4
8.6.3
8.6.2
8.6.1
8.6.0
8.5.3
8.5.2
8.5.1
8.5.0
8.4.0
8.3.0
8.2.3
8.2.2
8.2.1
8.2.0
8.1.0
8.0.1
8.0.0
7.4.3
7.4.2
7.4.1
7.4.0
7.3.0
7.2.0
7.1.4
7.1.3
7.1.2
7.1.1
7.1.0
7.0.4
7.0.3
7.0.2
7.0.1
7.0.0
6.8.8
6.8.7
6.8.6
6.8.5
6.8.4
6.8.3
6.8.2
6.8.1
6.8.0
6.7.1
6.7.0
6.6.1
6.6.0
6.5.1
6.5.0
6.4.0
6.3.0
6.2.0
6.1.1
6.1.0
6.0.1
6.0.0
5.4.1
5.4.0
5.3.0
5.2.8
5.2.7
5.2.6
5.2.5
5.2.4
5.2.3
5.2.2
5.2.1
5.2.0
5.1.2
5.1.1
5.1.0
5.0.2
5.0.1
5.0.0
4.0.1
4.0.0
3.0.0
2.1.0
2.0.0
1.0.1
1.0.0
0.22.7
0.22.6
0.22.5
0.22.4
0.22.3
0.22.2
0.22.1
0.22.0
0.21.1
0.21.0
0.20.2
0.20.1
0.20.0
0.19.1
0.19.0
0.18.3
0.18.2
0.18.1
0.18.0
0.17.7
0.17.6
0.17.5
0.17.4
0.17.3
0.17.2
0.17.1
0.17.0
0.16.2
0.16.1
0.16.0
0.15.11
0.15.10
0.15.9
0.15.8
0.15.7
0.15.6
0.15.5
0.15.4
0.15.3
0.15.2
0.15.1
0.15.0
0.14.8
0.14.7
0.14.6
0.14.5
0.14.4
0.14.3
0.14.2
0.14.1
0.14.0
0.13.0
0.12.3
0.12.2
0.12.1
0.12.0
0.11.0
0.10.3
0.10.2
0.10.1
0.10.0
0.9.0
0.9.0-rc.4
0.9.0-rc.3
0.9.0-rc.2
0.9.0-rc.1
0.9.0-rc.0
0.8.8
0.8.7
0.8.6
0.8.5
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.7.0
0.6.6
0.6.5
0.6.4
0.6.3
0.6.2
0.6.1
0.6.0
0.5.0
0.4.3
0.4.2
Elixir Z-Wave library
Current section
Files
Jump to
Current section
Files
lib/grizzly/command_class/network_management_basic.ex
defmodule Grizzly.CommandClass.NetworkManagementBasic do
alias Grizzly.DSK
@type default_set_status :: :done | :busy
@type learn_mode_status :: :done | :failed | :failed_security
@type learn_mode :: :enable | :disable | :enable_routed
@type learn_mode_byte :: 0x00 | 0x01 | 0x02
@type add_mode :: :learn | :add
@type add_mode_byte :: 0x00 | 0x01
@type dsk_get_report :: %{
add_mode: add_mode(),
dsk: binary()
}
@spec encode_learn_mode(learn_mode) :: {:ok, learn_mode_byte} | {:error, :invalid_arg, any()}
def encode_learn_mode(mode) do
case mode do
# ZW_SET_LEARN_MODE_CLASSIC - accept inclusion in direct range only
:enable -> {:ok, 0x01}
# ZW_SET_LEARN_MODE_DISABLE - stop learn mode
:disable -> {:ok, 0x00}
# ZW_SET_LEARN_MODE_NWI - accept routed inclusion
:enable_routed -> {:ok, 0x02}
other -> {:error, :invalid_arg, other}
end
end
@doc """
Encode the add mode `:learn` or `:add` into a byte
"""
@spec encode_add_mode(add_mode()) :: {:ok, add_mode_byte()} | {:error, :invalid_arg, any()}
def encode_add_mode(:learn), do: {:ok, 0x00}
def encode_add_mode(:add), do: {:ok, 0x01}
def encode_add_mode(other), do: {:error, :invalid_arg, other}
@doc """
Take the byte of the add mode and decode it into `:learn` or `:add`.
"""
@spec add_mode_from_byte(byte()) :: add_mode()
def add_mode_from_byte(byte) do
<<_::size(7), add_mode_bit::size(1)>> = <<byte>>
case add_mode_bit do
0 ->
:learn
1 ->
:add
end
end
@spec decode_default_set_status(0x06 | 0x07) :: default_set_status
def decode_default_set_status(0x06), do: :done
def decode_default_set_status(0x07), do: :busy
@spec decode_learn_mode_set_status(0x06 | 0x07 | 0x09, non_neg_integer) :: %{
status: learn_mode_status(),
new_node_id: non_neg_integer()
}
def decode_learn_mode_set_status(0x06, new_node_id) do
%{status: :done, new_node_id: new_node_id}
end
def decode_learn_mode_set_status(0x07, _new_node_id) do
%{status: :failed, new_node_id: 0}
end
def decode_learn_mode_set_status(0x09, _new_node_id) do
%{status: :security_failed, new_node_id: 0}
end
@doc """
Decode the bytestring that is returned from Z-Wave that has the DSK
report
"""
@spec decode_dsk_report(binary()) :: dsk_get_report()
def decode_dsk_report(<<add_mode, dsk::binary-size(16)>>) do
{:ok, dsk} = DSK.binary_to_string(dsk)
%{
add_mode: add_mode_from_byte(add_mode),
dsk: dsk
}
end
end