Packages
grizzly
7.4.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/firmware_updates/firmware_update_supervisor.ex
defmodule Grizzly.FirmwareUpdates.FirmwareUpdateRunnerSupervisor do
@moduledoc false
use DynamicSupervisor
alias Grizzly.{FirmwareUpdates, Options}
alias Grizzly.FirmwareUpdates.FirmwareUpdateRunner
@spec start_link(Options.t()) :: Supervisor.on_start()
def start_link(options) do
DynamicSupervisor.start_link(__MODULE__, options, name: __MODULE__)
end
@doc """
Start a firmware runner process to manage the firmware update
"""
@spec start_runner([FirmwareUpdates.opt()]) :: DynamicSupervisor.on_start_child()
def start_runner(opts \\ []) do
opts = ensure_handler(opts)
child_spec = FirmwareUpdateRunner.child_spec(opts)
DynamicSupervisor.start_child(__MODULE__, child_spec)
end
@doc """
Get the controller firmware upgrade info.
Note: The FirmwareUpdateRunnerSupervisor runs the only process that has this information once the hub is fully started.
"""
@spec controller_firmware_upgrade_info :: [Grizzly.Options.zwave_firmware_options()]
def controller_firmware_upgrade_info() do
state = :sys.get_state(__MODULE__)
Map.get(state.args, :zwave_firmware, [])
end
@impl DynamicSupervisor
def init(grizzly_options) do
# Only one firmware update runner can be running at a time
DynamicSupervisor.init(
strategy: :one_for_one,
max_children: 1,
extra_arguments: [grizzly_options]
)
end
defp ensure_handler(opts) do
Keyword.put_new_lazy(opts, :handler, &get_firmware_update_handler/0)
end
defp get_firmware_update_handler() do
case Application.get_env(:grizzly, :handlers) do
nil ->
self()
handlers ->
Map.get(handlers, :firmware_update, self())
end
end
end