defmodule Grizzly.ZWave.CommandClasses.Antitheft do
@moduledoc """
"Antitheft" Command Class
This Command Class is used to lock (and possibly unlock) a node.
"""
@behaviour Grizzly.ZWave.CommandClass
alias Grizzly.ZWave.DecodeError
@type lock_state :: :locked | :unlocked
@type status ::
:protection_disabled_unlocked
| :protection_enabled_locked_fully_functional
| :protection_enabled_locked_restricted
@impl true
def byte(), do: 0x5D
@impl true
def name(), do: :antitheft
def state_to_bit(:unlocked), do: 0x00
def state_to_bit(:locked), do: 0x01
def state_from_bit(0x00), do: :unlocked
def state_from_bit(0x01), do: :locked
def status_to_byte(:protection_disabled_unlocked), do: 0x01
def status_to_byte(:protection_enabled_locked_fully_functional), do: 0x02
def status_to_byte(:protection_enabled_locked_restricted), do: 0x03
def status_from_byte(0x01), do: {:ok, :protection_disabled_unlocked}
def status_from_byte(0x02), do: {:ok, :protection_enabled_locked_fully_functional}
def status_from_byte(0x03), do: {:ok, :protection_enabled_locked_restricted}
def status_from_byte(byte), do: {:error, %DecodeError{value: byte, param: :status}}
def validate_magic_code_or_hint(magic_code_or_hint) when is_binary(magic_code_or_hint) do
true = String.length(magic_code_or_hint) in 1..10
magic_code_or_hint
end
end