defmodule Tello do @moduledoc """ An unofficial Ryze Tech Tello SDK """ alias Tello.{Manager, Client, Controller, StatusListener} @default_arg [ controller: [ip: {192, 168, 10, 1}, port: 8889, receiver: nil], status_listener: [port: 8890, handler: nil] ] @spec start(Client.init_arg()) :: {:ok, client :: pid, controller :: pid, status_listener :: nil | pid} @doc """ Start a new `Tello.Client`. ``` {:ok, tello_client, controller, status_listener} = Tello.start() ``` """ def start(init_arg \\ @default_arg) do spec = {Tello.Client, init_arg} case DynamicSupervisor.start_child(Manager, spec) do {:ok, client_pid} -> controller_pid = Tello.Client.pid_for(client_pid, Controller) status_listener_pid = Tello.Client.pid_for(client_pid, StatusListener) {:ok, client_pid, controller_pid, status_listener_pid} other -> other end end @doc """ Terminate a `Tello.Client` and it's children. """ @spec terminate(pid) :: :ok | {:error, :not_found} def terminate(client_pid) do DynamicSupervisor.terminate_child(Manager, client_pid) end end