Packages
grizzly
8.6.9
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/commands/mailbox_queue.ex
defmodule Grizzly.ZWave.Commands.MailboxQueue do
@moduledoc """
The Mailbox Queue Command is a container for various operations between a
mailbox proxy and a Mailbox Service.
Params:
* `last` - Indicates if this is the last command in the queue. Only applies when
the operation is `:pop`.
* `operation` - The operation to perform.
* `handle` - Used along with the message's source IP address to identify the
queue the message belongs to.
* `entry` - The message to be operated upon.
"""
@behaviour Grizzly.ZWave.Command
import Grizzly.ZWave.Encoding
alias Grizzly.ZWave.Command
alias Grizzly.ZWave.CommandClasses.Mailbox
@type operation :: :push | :pop | :waiting | :ping | :ack | :nack | :queue_full
@type param ::
{:last, boolean()} | {:operation, operation()} | {:handle, byte()} | {:entry, binary()}
@impl Grizzly.ZWave.Command
@spec new([param()]) :: {:ok, Command.t()}
def new(params) do
command = %Command{
name: :mailbox_queue,
command_byte: 0x04,
command_class: Mailbox,
params: params,
impl: __MODULE__
}
{:ok, command}
end
@impl Grizzly.ZWave.Command
@spec encode_params(Command.t()) :: binary()
def encode_params(command) do
last = Command.param(command, :last, false)
operation = Command.param!(command, :operation)
handle = Command.param!(command, :handle)
entry = Command.param!(command, :entry)
<<0::4, bool_to_bit(last)::1, encode_operation(operation)::3, handle::8>> <> entry
end
@impl Grizzly.ZWave.Command
@spec decode_params(binary()) :: {:ok, [param()]}
def decode_params(<<_reserved::4, last::1, operation::3, handle::8, entry::binary>>) do
{:ok,
[
last: bit_to_bool(last),
operation: decode_operation(operation),
handle: handle,
entry: entry
]}
end
defp encode_operation(:push), do: 0
defp encode_operation(:pop), do: 1
defp encode_operation(:waiting), do: 2
defp encode_operation(:ping), do: 3
defp encode_operation(:ack), do: 4
defp encode_operation(:nack), do: 5
defp encode_operation(:queue_full), do: 6
defp decode_operation(0), do: :push
defp decode_operation(1), do: :pop
defp decode_operation(2), do: :waiting
defp decode_operation(3), do: :ping
defp decode_operation(4), do: :ack
defp decode_operation(5), do: :nack
defp decode_operation(6), do: :queue_full
end