/* Copyright (c) 2012 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.
 */

/**
 * 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. */
    char[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. */
    char[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);
};
