defmodule Grizzly.ZWave.CommandClasses.Configuration do
@moduledoc """
Configuration command class
This command class is used to configure manufacturer specific configuration
parameters
"""
@behaviour Grizzly.ZWave.CommandClass
alias Grizzly.ZWave.DecodeError
@type format :: :signed_integer | :unsigned_integer | :enumerated | :bit_field
@impl true
def byte(), do: 0x70
@impl true
def name(), do: :configuration
def format_to_byte(:signed_integer), do: 0x00
def format_to_byte(:unsigned_integer), do: 0x01
def format_to_byte(:enumerated), do: 0x02
def format_to_byte(:bit_field), do: 0x03
def format_from_byte(0x00), do: {:ok, :signed_integer}
def format_from_byte(0x01), do: {:ok, :unsigned_integer}
def format_from_byte(0x02), do: {:ok, :enumerated}
def format_from_byte(0x03), do: {:ok, :bit_field}
def format_from_byte(byte), do: {:error, %DecodeError{param: :format, value: byte}}
def validate_size(size) when size in [0, 1, 2, 4], do: size
def boolean_to_bit(false), do: 0
def boolean_to_bit(true), do: 1
def boolean_from_bit(0), do: false
def boolean_from_bit(1), do: true
end