Packages
grizzly
6.8.4
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
"""
defmodule Generate do
@moduledoc false
import Grizzly.ZWave.GeneratedMappings,
only: [
basic_device_class_mappings: 0,
generic_device_class_mappings: 0,
specific_device_class_mappings: 0
]
defmacro __before_compile__(_) do
basic_mappings = basic_device_class_mappings()
generic_mappings = generic_device_class_mappings()
specific_mappings = specific_device_class_mappings()
basic_device_class_from_byte =
for {byte, device_class} <- basic_mappings do
quote do
def basic_device_class_from_byte(unquote(byte)), do: {:ok, unquote(device_class)}
end
end
basic_device_class_to_byte =
for {byte, device_class} <- basic_mappings do
quote do
def basic_device_class_to_byte(unquote(device_class)), do: unquote(byte)
end
end
generic_device_class_from_byte =
for {byte, device_class} <- generic_mappings do
quote do
def generic_device_class_from_byte(unquote(byte)), do: {:ok, unquote(device_class)}
end
end
generic_device_class_to_byte =
for {byte, device_class} <- generic_mappings do
quote do
def generic_device_class_to_byte(unquote(device_class)), do: unquote(byte)
end
end
specific_device_class_from_byte =
for {gen_class, byte, spec_class} <- specific_mappings do
quote do
def specific_device_class_from_byte(unquote(gen_class), unquote(byte)),
do: {:ok, unquote(spec_class)}
end
end
specific_device_class_to_byte =
for {gen_class, byte, spec_class} <- specific_mappings do
quote do
def specific_device_class_to_byte(unquote(gen_class), unquote(spec_class)),
do: unquote(byte)
end
end
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]})
quote do
@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}
unquote(basic_device_class_from_byte)
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()
unquote(basic_device_class_to_byte)
@doc """
Try to get the generic device class for the byte
"""
@spec generic_device_class_from_byte(byte()) ::
{:ok, generic_device_class()} | {:ok, :unknown}
unquote(generic_device_class_from_byte)
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()
unquote(generic_device_class_to_byte)
@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}
unquote(specific_device_class_from_byte)
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()
unquote(specific_device_class_to_byte)
end
end
end
@before_compile Generate
end