defmodule Grizzly.ZWave.CommandClasses.NetworkManagementBasicNode do
@moduledoc """
Command class for working with Z-Wave network updates and resetting the
controller back to the factor defaults
"""
alias Grizzly.ZWave.DecodeError
@behaviour Grizzly.ZWave.CommandClass
@type add_mode :: :learn | :add
@type network_update_request_status :: :done | :abort | :wait | :disabled | :overflow
@impl true
def byte(), do: 0x4D
@impl true
def name(), do: :network_management_basic_node
@spec add_mode_to_byte(add_mode()) :: byte()
def add_mode_to_byte(:learn), do: 0x00
def add_mode_to_byte(:add), do: 0x01
@spec add_mode_from_bit(0 | 1) :: add_mode()
def add_mode_from_bit(0), do: :learn
def add_mode_from_bit(1), do: :add
@spec network_update_request_status_to_byte(network_update_request_status) :: byte
def network_update_request_status_to_byte(:done), do: 0x00
def network_update_request_status_to_byte(:abort), do: 0x01
def network_update_request_status_to_byte(:wait), do: 0x02
def network_update_request_status_to_byte(:disabled), do: 0x03
def network_update_request_status_to_byte(:overflow), do: 0x04
@spec network_update_request_status_from_byte(byte) ::
{:ok, network_update_request_status} | {:error, Grizzly.ZWave.DecodeError.t()}
def network_update_request_status_from_byte(0x00), do: {:ok, :done}
def network_update_request_status_from_byte(0x01), do: {:ok, :abort}
def network_update_request_status_from_byte(0x02), do: {:ok, :wait}
def network_update_request_status_from_byte(0x03), do: {:ok, :disabled}
def network_update_request_status_from_byte(0x04), do: {:ok, :overflow}
def network_update_request_status_from_byte(byte),
do: {:error, %DecodeError{param: :status, value: byte}}
end