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

/**
 * This file defines the <code>PPB_Gamepad</code> interface, which
 * provides access to gamepad devices.
 */

[generate_thunk]

label Chrome {
  M19 = 1.0
};

/**
 * The data for one gamepad device.
 */
[assert_size(472)]
struct PP_GamepadSampleData {
    /**
     * Number of valid elements in the |axes| array.
     */
    uint32_t axes_length;

    /**
     * Normalized values for the axes, indices valid up to |axes_length|-1. Axis
     * values range from -1..1, and are in order of "importance".
     */
    float_t[16] axes;

    /**
     * Number of valid elements in the |buttons| array.
     */
    uint32_t buttons_length;

    /**
     * Normalized values for the buttons, indices valid up to |buttons_length|
     * - 1. Button values range from 0..1, and are in order of importance.
     */
    float_t[32] buttons;

    /**
     * Monotonically increasing value that is incremented when the data have
     * been updated.
     */
    double_t timestamp;

    /**
     * Identifier for the type of device/manufacturer.
     */
    uint16_t[128] id;

    /**
     * Is there a gamepad connected at this index? If this is false, no other
     * data in this structure is valid.
     */
    PP_Bool connected;

    /* Padding to make the struct the same size between 64 and 32. */
    int8_t[4] unused_pad_;
};

/**
 * The data for all gamepads connected to the system.
 */
[assert_size(1896)]
struct PP_GamepadsSampleData {
    /**
     * Number of valid elements in the |items| array.
     */
    uint32_t length;

    /* Padding to make the struct the same size between 64 and 32. */
    int8_t[4] unused_pad_;

    /**
     * Data for an individual gamepad device connected to the system.
     */
    PP_GamepadSampleData[4] items;
};

/**
 * The <code>PPB_Gamepad</code> interface allows retrieving data from
 * gamepad/joystick devices that are connected to the system.
 */
[version=1.0, macro="PPB_GAMEPAD_INTERFACE", singleton]
interface PPB_Gamepad {
  /**
   * Samples the current state of the available gamepads.
   */
  [always_set_output_parameters]
  void Sample(
      [in] PP_Instance instance,
      [out] PP_GamepadsSampleData data);
};
