Packages
grizzly
0.8.8
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/user_code.ex
defmodule Grizzly.CommandClass.UserCode do
@type slot_id :: pos_integer
@type slot_status :: :occupied | :available
@type user_code :: String.t()
@doc """
The default empty code to be sent.
This function is useful to use when trying to set a user code
slot from occupied to available
"""
@spec empty_code :: [0, ...]
def empty_code() do
[0, 0, 0, 0, 0, 0, 0, 0]
end
@spec encode_status(slot_status, map) :: {:ok, 0x01 | 0x00} | {:error, :invalid_arg, any()}
def encode_status(:occupied, %{slot_id: 0}), do: {:error, :invalid_arg, :occupied}
def encode_status(:occupied, _), do: {:ok, 0x01}
def encode_status(:available, _), do: {:ok, 0x00}
def encode_status(other), do: {:error, :invalid_arg, other}
@spec decode_slot_status(0x01 | 0x00) :: slot_status
def decode_slot_status(0x01), do: :occupied
def decode_slot_status(0x00), do: :available
@spec encode_user_code(user_code, map) :: {:ok, [0x30..0x39]} | {:error, :invalid_arg, any()}
def encode_user_code(_user_code, %{slot_id: 0}), do: {:ok, :erlang.list_to_binary(empty_code())}
def encode_user_code(_user_code, %{slot_status: :available}),
do: {:ok, :erlang.list_to_binary(empty_code())}
def encode_user_code(user_code, _) do
ascii_digits = :erlang.binary_to_list(user_code)
if Enum.all?(ascii_digits, &(&1 in 0x30..0x39)) do
{:ok, :erlang.list_to_binary(ascii_digits)}
else
{:error, :invalid_arg, user_code}
end
end
end