Packages
grizzly
8.11.3
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/device_classes.ex
defmodule Grizzly.ZWave.DeviceClasses do
@moduledoc """
Z-Wave device classes
"""
import Grizzly.ZWave.GeneratedMappings,
only: [
basic_device_class_mappings: 0,
generic_device_class_mappings: 0,
specific_device_class_mappings: 0
]
basic_mappings = basic_device_class_mappings()
generic_mappings = generic_device_class_mappings()
specific_mappings = specific_device_class_mappings()
basic_classes_union =
basic_mappings
|> Enum.map(&elem(&1, 1))
|> Enum.reverse()
|> Enum.reduce(&{:|, [], [&1, &2]})
generic_classes_union =
generic_mappings
|> Enum.map(&elem(&1, 1))
|> Enum.reverse()
|> Enum.reduce(&{:|, [], [&1, &2]})
specific_classes_union =
specific_mappings
|> Enum.map(&elem(&1, 2))
|> Enum.reverse()
|> Enum.uniq()
|> Enum.reduce(&{:|, [], [&1, &2]})
@type basic_device_class :: unquote(basic_classes_union)
@type generic_device_class :: unquote(generic_classes_union)
@type specific_device_class :: unquote(specific_classes_union)
@doc """
Try to make a basic device class from a byte
"""
@spec basic_device_class_from_byte(byte()) :: {:ok, basic_device_class()} | {:ok, :unknown}
for {byte, device_class} <- basic_mappings do
def basic_device_class_from_byte(unquote(byte)), do: {:ok, unquote(device_class)}
end
def basic_device_class_from_byte(_byte), do: {:ok, :unknown}
@doc """
Make a byte from a device class
"""
@spec basic_device_class_to_byte(basic_device_class()) :: byte()
for {byte, device_class} <- basic_mappings do
def basic_device_class_to_byte(unquote(device_class)), do: unquote(byte)
end
@doc """
Try to get the generic device class for the byte
"""
@spec generic_device_class_from_byte(byte()) :: {:ok, generic_device_class()} | {:ok, :unknown}
for {byte, device_class} <- generic_mappings do
def generic_device_class_from_byte(unquote(byte)), do: {:ok, unquote(device_class)}
end
def generic_device_class_from_byte(_byte), do: {:ok, :unknown}
@doc """
Turn the generic device class into a byte
"""
@spec generic_device_class_to_byte(generic_device_class()) :: byte()
for {byte, device_class} <- generic_mappings do
def generic_device_class_to_byte(unquote(device_class)), do: unquote(byte)
end
@doc """
Try to get the specific device class from the byte given the generic device class
"""
@spec specific_device_class_from_byte(generic_device_class(), byte()) ::
{:ok, specific_device_class()} | {:ok, :unknown}
for {gen_class, byte, spec_class} <- specific_mappings do
def specific_device_class_from_byte(unquote(gen_class), unquote(byte)),
do: {:ok, unquote(spec_class)}
end
def specific_device_class_from_byte(_, _byte), do: {:ok, :unknown}
@doc """
Make the specific device class into a byte
"""
@spec specific_device_class_to_byte(generic_device_class(), specific_device_class()) :: byte()
for {gen_class, byte, spec_class} <- specific_mappings do
def specific_device_class_to_byte(unquote(gen_class), unquote(spec_class)),
do: unquote(byte)
end
end