Packages
grizzly
7.1.4
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/zwave/commands/user_code_capabilities_report.ex
defmodule Grizzly.ZWave.Commands.UserCodeCapabilitiesReport do
@moduledoc """
This command is used to advertise User Code capabilities.
## Params
* `:admin_code_supported?` - Whether the lock supports admin code functionality.
* `:admin_code_deactivation_supported?` - Whether the lock supports deactivating an admin code.
* `:user_code_checksum_supported?` - Whether the lock supports user code checksum functionality.
* `:multi_user_code_report_supported?` - Whether the lock supports reporting multiple user codes
via the Extended User Code Report command.
* `:multi_user_code_set_supported?` - Whether the lock supports setting multiple user codes via
the Extended User Code Set command.
* `:supported_user_id_statuses` - A list of supported user ID statuses.
* `:supported_keypad_modes` - A list of supported keypad modes.
* `:supported_keypad_keys` - A list of supported keypad keys.
"""
@behaviour Grizzly.ZWave.Command
import Grizzly.ZWave.Encoding
alias Grizzly.ZWave.{Command, DecodeError}
alias Grizzly.ZWave.CommandClasses.UserCode
@type ascii_char :: 0..127
@type param ::
{:admin_code_supported?, boolean()}
| {:admin_code_deactivation_supported?, boolean()}
| {:user_code_checksum_supported?, boolean()}
| {:multi_user_code_report_supported?, boolean()}
| {:multi_user_code_set_supported?, boolean()}
| {:supported_user_id_statuses, [UserCode.user_id_status()]}
| {:supported_keypad_modes, [UserCode.keypad_mode()]}
| {:supported_keypad_keys, [ascii_char()]}
@impl Grizzly.ZWave.Command
@spec new([param()]) :: {:ok, Command.t()}
def new(params) do
command = %Command{
name: :user_code_capabilities_report,
command_byte: 0x07,
command_class: UserCode,
params: params,
impl: __MODULE__
}
{:ok, command}
end
@impl Grizzly.ZWave.Command
@spec encode_params(Command.t()) :: binary()
def encode_params(command) do
mc = Command.param(command, :admin_code_supported?, false) |> bool_to_bit()
mcd = Command.param(command, :admin_code_deactivation_supported?, false) |> bool_to_bit()
ucc = Command.param(command, :user_code_checksum_supported?, false) |> bool_to_bit()
mucr = Command.param(command, :multi_user_code_report_supported?, false) |> bool_to_bit()
mucs = Command.param(command, :multi_user_code_set_supported?, false) |> bool_to_bit()
supported_user_id_statuses =
Command.param(command, :supported_user_id_statuses, [])
|> Enum.map(&UserCode.user_id_status_to_byte/1)
|> encode_bitmask()
supported_keypad_modes =
Command.param(command, :supported_keypad_modes, [])
|> Enum.map(&UserCode.keypad_mode_to_byte/1)
|> encode_bitmask()
supported_keypad_keys =
Command.param(command, :supported_keypad_keys, [])
|> encode_bitmask()
<<mc::1, mcd::1, 0::1, byte_size(supported_user_id_statuses)::5>> <>
supported_user_id_statuses <>
<<ucc::1, mucr::1, mucs::1, byte_size(supported_keypad_modes)::5>> <>
supported_keypad_modes <>
<<0::3, byte_size(supported_keypad_keys)::5>> <>
supported_keypad_keys
end
@impl Grizzly.ZWave.Command
@spec decode_params(binary()) :: {:ok, [param()]} | {:error, DecodeError.t()}
def decode_params(
<<mc_support::1, mcd_support::1, _reserved::1, user_id_status_len::5,
supported_user_id_statuses::binary-size(user_id_status_len), ucc_support::1,
mucr_support::1, mucs_support::1, keypad_modes_len::5,
supported_keypad_modes::binary-size(keypad_modes_len), _reserved2::3,
supported_keypad_keys_len::5,
supported_keypad_keys_bitmask::binary-size(supported_keypad_keys_len)>>
) do
user_id_statuses =
supported_user_id_statuses
|> decode_bitmask()
|> Enum.map(&UserCode.user_id_status_from_byte/1)
|> Enum.reject(&(&1 == :unknown))
keypad_modes =
supported_keypad_modes
|> decode_bitmask()
|> Enum.map(&UserCode.keypad_mode_from_byte/1)
|> Enum.reject(&(&1 == :unknown))
{:ok,
[
admin_code_supported?: mc_support == 1,
admin_code_deactivation_supported?: mcd_support == 1,
user_code_checksum_supported?: ucc_support == 1,
multi_user_code_report_supported?: mucr_support == 1,
multi_user_code_set_supported?: mucs_support == 1,
supported_user_id_statuses: user_id_statuses,
supported_keypad_modes: keypad_modes,
supported_keypad_keys: decode_bitmask(supported_keypad_keys_bitmask)
]}
end
end