Packages
grizzly
8.7.0
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/command_classes/mailbox.ex
defmodule Grizzly.ZWave.CommandClasses.Mailbox do
@moduledoc """
Mailbox Command Class
See Sections 5.2.3 and 5.2.4 of the Z-Wave Specification.
"""
import Bitwise
@behaviour Grizzly.ZWave.CommandClass
@type mode :: :disabled | :service | :proxy
@type supported_mode :: :service | :proxy
@impl Grizzly.ZWave.CommandClass
def byte(), do: 0x69
@impl Grizzly.ZWave.CommandClass
def name(), do: :mailbox
@spec encode_mode(mode()) :: 0..2
def encode_mode(:disabled), do: 0x00
def encode_mode(:service), do: 0x01
def encode_mode(:proxy), do: 0x02
@spec decode_mode(0..2) :: mode()
def decode_mode(0x00), do: :disabled
def decode_mode(0x01), do: :service
def decode_mode(0x02), do: :proxy
@doc """
Encodes a list of supported modes into a single byte.
## Examples
iex> encode_supported_modes([:service, :proxy])
3
iex> encode_supported_modes([:proxy])
2
iex> encode_supported_modes([:service])
1
iex> encode_supported_modes([])
0
"""
@spec encode_supported_modes([supported_mode()]) :: 0..3
def encode_supported_modes(modes) do
modes
|> Enum.map(&encode_mode/1)
|> Enum.reduce(0, fn mode, acc -> acc ||| mode end)
end
@doc """
Encodes a list of supported modes from a single byte.
## Examples
iex> decode_supported_modes(3)
[:service, :proxy]
iex> decode_supported_modes(2)
[:proxy]
iex> decode_supported_modes(1)
[:service]
iex> decode_supported_modes(0)
[]
"""
@spec decode_supported_modes(0..3) :: [supported_mode()]
def decode_supported_modes(3), do: [:service, :proxy]
def decode_supported_modes(2), do: [:proxy]
def decode_supported_modes(1), do: [:service]
def decode_supported_modes(0), do: []
end