lib/media/ver10/profile/ptz_configuration.ex

defmodule Onvif.Media.Ver10.Profile.PtzConfiguration do
  @moduledoc """
  Optional configuration of the pan tilt zoom unit.
  """

  use Ecto.Schema

  @derive Jason.Encoder
  embedded_schema do
    field(:reference_token, :string)
    field(:name, :string)
    field(:use_count, :integer)
    field(:move_ramp, :integer)
    field(:preset_ramp, :integer)
    field(:preset_tour_ramp, :integer)
    field(:node_token, :string)
    field(:default_absolute_pant_tilt_position_space, :string)
    field(:default_absolute_zoom_position_space, :string)
    field(:default_relative_pan_tilt_translation_space, :string)
    field(:default_relative_zoom_translation_space, :string)
    field(:default_continuous_pan_tilt_velocity_space, :string)
    field(:default_continuous_zoom_velocity_space, :string)
    field(:default_ptz_timeout, :string)

    embeds_one :default_ptz_speed, DefaultPtzSpeed do
      @derive Jason.Encoder
      field(:pan_tilt, :string)
      field(:zoom, :string)
    end

    embeds_one :pan_tilt_limits, PanTiltLimits do
      @derive Jason.Encoder
      embeds_one :range, Range do
        @derive Jason.Encoder
        field(:uri, :string)

        embeds_one :x_range, XRange do
          @derive Jason.Encoder
          field(:min, :float)
          field(:max, :float)
        end

        embeds_one :y_range, YRange do
          @derive Jason.Encoder
          field(:min, :float)
          field(:max, :float)
        end
      end
    end

    embeds_one :zoom_limits, ZoomLimits do
      @derive Jason.Encoder
      embeds_one :range, Range do
        @derive Jason.Encoder
        field(:uri, :string)

        embeds_one :x_range, XRange do
          @derive Jason.Encoder
          field(:min, :float)
          field(:max, :float)
        end
      end
    end

    embeds_one :extension, Extension do
      @derive Jason.Encoder
      embeds_one :pt_control_direction, PtControlDirection do
        @derive Jason.Encoder
        embeds_one :e_flip, EFlip do
          @derive Jason.Encoder
          field(:mode, Ecto.Enum, values: [on: "ON", off: "OFF", extended: "Extended"])
        end

        embeds_one :reverse, Reverse do
          @derive Jason.Encoder
          field(:mode, Ecto.Enum,
            values: [on: "ON", off: "OFF", auto: "AUTO", extended: "Extended"]
          )
        end
      end
    end
  end
end