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