Packages
grizzly
6.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/commands/version_zwave_software_report.ex
defmodule Grizzly.ZWave.Commands.VersionZWaveSoftwareReport do
@moduledoc """
This module implements command VERSION_ZWAVE_SOFTWARE_REPORT of command class
COMMAND_CLASS_VERSION
Params: - none -
"""
@behaviour Grizzly.ZWave.Command
alias Grizzly.ZWave.Command
alias Grizzly.ZWave.CommandClasses.Version, as: CCVersion
@impl Grizzly.ZWave.Command
def new(params) do
command = %Command{
name: :version_zwave_software_report,
command_byte: 0x18,
command_class: CCVersion,
params: params,
impl: __MODULE__
}
{:ok, command}
end
@impl Grizzly.ZWave.Command
def encode_params(command) do
sdk_version = Command.param(command, :sdk_version)
app_framework_api_version = Command.param(command, :application_framework_api_version)
app_framework_build_number = Command.param(command, :application_framework_build_number)
host_interface_version = Command.param(command, :host_interface_version)
host_interface_build_number = Command.param(command, :host_interface_build_number)
zwave_protocol_version = Command.param(command, :zwave_protocol_version)
zwave_protocol_build_number = Command.param(command, :zwave_protocol_build_number)
application_version = Command.param(command, :application_version)
application_build_number = Command.param(command, :application_build_number)
encode_version(sdk_version) <>
encode_version(app_framework_api_version, app_framework_build_number) <>
encode_version(host_interface_version, host_interface_build_number) <>
encode_version(zwave_protocol_version, zwave_protocol_build_number) <>
encode_version(application_version, application_build_number)
end
@impl Grizzly.ZWave.Command
def decode_params(
<<sdk_version::24, app_framework_api_version::24, application_framework_build_number::16,
host_interface_version::24, host_interface_build_number::16, zwave_protocol_version::24,
zwave_protocol_build_number::16, application_version::24, application_build_number::16>>
) do
{:ok,
[
sdk_version: decode_version(<<sdk_version::24>>),
application_framework_api_version: decode_version(<<app_framework_api_version::24>>),
application_framework_build_number: application_framework_build_number,
host_interface_version: decode_version(<<host_interface_version::24>>),
host_interface_build_number: host_interface_build_number,
zwave_protocol_version: decode_version(<<zwave_protocol_version::24>>),
zwave_protocol_build_number: zwave_protocol_build_number,
application_version: decode_version(<<application_version::24>>),
application_build_number: application_build_number
]}
end
defp encode_version(nil), do: <<0, 0, 0>>
defp encode_version(version) do
case Version.parse(version) do
{:ok, %Version{major: major, minor: minor, patch: patch}} ->
<<major::integer-size(8), minor::integer-size(8), patch::integer-size(8)>>
:error ->
<<0, 0, 0>>
end
end
defp encode_version(version, build_number) do
encode_version(version) <> <<build_number::integer-size(16)>>
end
defp decode_version(<<major::8, minor::8, patch::8>>), do: "#{major}.#{minor}.#{patch}"
end