// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Webcam Private API.
namespace webcamPrivate {
  enum PanDirection { stop, right, left };
  enum TiltDirection { stop, up, down };
  enum Protocol { visca };

  dictionary ProtocolConfiguration {
    Protocol? protocol;
  };

  dictionary WebcamConfiguration {
    double? pan;
    double? panSpeed;
    PanDirection? panDirection;
    double? tilt;
    double? tiltSpeed;
    TiltDirection? tiltDirection;
    double? zoom;
  };

  callback WebcamIdCallback = void(DOMString webcamId);
  callback WebcamConfigurationCallback =
      void(WebcamConfiguration configuration);

  interface Functions {
    // Open a serial port that controls a webcam.
    static void openSerialWebcam(DOMString path, ProtocolConfiguration protocol,
                                 WebcamIdCallback callback);

    // Close a serial port connection to a webcam.
    static void closeWebcam(DOMString webcamId);

    static void get(DOMString webcamId, WebcamConfigurationCallback callback);
    static void set(DOMString webcamId, WebcamConfiguration config);
    
    // Reset a webcam. Note: the value of the parameter have no effect, it's the
    // presence of the parameter that matters. E.g.: reset(webcamId, {pan: 0, 
    // tilt: 1}); will reset pan & tilt, but not zoom.
    static void reset(DOMString webcamId, WebcamConfiguration config);
  };
};

