defmodule Grizzly.ZWave.CommandClasses.ZwaveplusInfo do @moduledoc """ "ZwaveplusInfo" Command Class The Z-Wave Plus Info Command Class is used to differentiate between Z-Wave Plus, Z-Wave for IP and Z-Wave devices. """ @behaviour Grizzly.ZWave.CommandClass alias Grizzly.ZWave.DecodeError @type role_type :: :central_static_controller | :sub_static_controller | :portable_controller | :reporting_portable_controller | :portable_slave | :always_on_slave | :reporting_sleeping_slave | :listening_sleeping_slave | :network_aware_slave @type node_type :: :zwaveplus_node | :zwaveplus_for_ip_gateway @impl true def byte(), do: 0x5E @impl true def name(), do: :zwaveplus_info def role_type_to_byte(:central_static_controller), do: 0x00 def role_type_to_byte(:sub_static_controller), do: 0x01 def role_type_to_byte(:portable_controller), do: 0x02 def role_type_to_byte(:reporting_portable_controller), do: 0x03 def role_type_to_byte(:portable_slave), do: 0x04 def role_type_to_byte(:always_on_slave), do: 0x05 def role_type_to_byte(:reporting_sleeping_slave), do: 0x06 def role_type_to_byte(:listening_sleeping_slave), do: 0x07 def role_type_to_byte(:network_aware_slave), do: 0x08 def role_type_from_byte(0x00), do: {:ok, :central_static_controller} def role_type_from_byte(0x01), do: {:ok, :sub_static_controller} def role_type_from_byte(0x02), do: {:ok, :portable_controller} def role_type_from_byte(0x03), do: {:ok, :reporting_portable_controller} def role_type_from_byte(0x04), do: {:ok, :portable_slave} def role_type_from_byte(0x05), do: {:ok, :always_on_slave} def role_type_from_byte(0x06), do: {:ok, :reporting_sleeping_slave} def role_type_from_byte(0x07), do: {:ok, :listening_sleeping_slave} def role_type_from_byte(0x08), do: {:ok, :network_aware_slave} def role_type_from_byte(byte), do: {:error, %DecodeError{param: :role_type, value: byte}} def node_type_to_byte(:zwaveplus_node), do: 0x00 def node_type_to_byte(:zwaveplus_for_ip_gateway), do: 0x02 def node_type_from_byte(0x00), do: {:ok, :zwaveplus_node} def node_type_from_byte(0x02), do: {:ok, :zwaveplus_for_ip_gateway} def node_type_from_byte(byte), do: {:error, %DecodeError{param: :node_type, value: byte}} end