Packages
grizzly
8.6.7
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
Retired package: Release invalid - Mistakenly published with unstaged changes
Current section
Files
Jump to
Current section
Files
lib/grizzly/zwave/command_classes/multi_channel_association.ex
defmodule Grizzly.ZWave.CommandClasses.MultiChannelAssociation do
@moduledoc """
"MultiChannelAssociation" Command Class
The Multi Channel Association Command Class is used to manage associations to Multi Channel End
Point destinations as well as to NodeID destinations.
"""
@behaviour Grizzly.ZWave.CommandClass
alias Grizzly.ZWave
@marker 0x00
@type node_endpoint :: [node: ZWave.node_id(), bit_address: 0 | 1, endpoint: 1..127]
@impl Grizzly.ZWave.CommandClass
def byte(), do: 0x8E
@impl Grizzly.ZWave.CommandClass
def name(), do: :multi_channel_association
@spec encode_node_endpoints([node_endpoint]) :: binary
def encode_node_endpoints(node_endpoints) do
for node_endpoint <- node_endpoints, into: <<>> do
node_id = Keyword.fetch!(node_endpoint, :node)
bit_address = Keyword.fetch!(node_endpoint, :bit_address)
endpoint = Keyword.fetch!(node_endpoint, :endpoint)
<<node_id, bit_address::1, endpoint::7>>
end
end
@spec decode_nodes_and_node_endpoints(binary) :: {[ZWave.node_id()], [node_endpoint]}
def decode_nodes_and_node_endpoints(binary) do
bin_list = :erlang.binary_to_list(binary)
marker_index = Enum.find_index(bin_list, &(&1 == @marker))
if marker_index == nil do
{bin_list, []}
else
{node_ids, [_ | node_endpoint_bytes]} = Enum.split(bin_list, marker_index)
node_endpoints =
for [node_id, endpoint_byte] <- Enum.chunk_every(node_endpoint_bytes, 2) do
<<bit_address::1, endpoint::7>> = <<endpoint_byte>>
[node: node_id, bit_address: bit_address, endpoint: endpoint]
end
{node_ids, node_endpoints}
end
end
end