| // Copyright 2019 The Fuchsia Authors. All rights reserved. | 
 | // Use of this source code is governed by a BSD-style license that can be | 
 | // found in the LICENSE file. | 
 | library fuchsia.input.report; | 
 |  | 
 | /// A hardcoded number of max mouse buttons. This should be increased in the future | 
 | /// if we ever see mice with more buttons. | 
 | const MOUSE_MAX_NUM_BUTTONS uint32 = 32; | 
 |  | 
 | /// Describes the format of the input report that will be sent from the mouse | 
 | /// to the device. | 
 | type MouseInputDescriptor = table { | 
 |     /// The range of relative X movement. | 
 |     1: movement_x Axis; | 
 |  | 
 |     /// The range of relative Y movement. | 
 |     2: movement_y Axis; | 
 |  | 
 |     /// The range of the position of X. | 
 |     /// The main use of position is from virtual mice like over VNC. | 
 |     6: position_x Axis; | 
 |  | 
 |     /// The range of the position of Y. | 
 |     /// The main use of position is from virtual mice like over VNC. | 
 |     7: position_y Axis; | 
 |  | 
 |     /// The range of relative vertical scroll. | 
 |     3: scroll_v Axis; | 
 |  | 
 |     /// The range of relative horizontal scroll. | 
 |     4: scroll_h Axis; | 
 |  | 
 |     /// This is a vector of ids for the mouse buttons. | 
 |     5: buttons vector<uint8>:MOUSE_MAX_NUM_BUTTONS; | 
 | }; | 
 |  | 
 | /// The capabilities of a mouse device. | 
 | type MouseDescriptor = table { | 
 |     1: input MouseInputDescriptor; | 
 | }; | 
 |  | 
 | /// `MouseReport` gives the relative movement of the mouse and currently | 
 | /// pressed buttons. Relative means the movement seen between the previous | 
 | /// report and this report. The client is responsible for tracking this and | 
 | /// converting it to absolute movement. | 
 | type MouseInputReport = table { | 
 |     /// Relative X positional displacement. | 
 |     1: movement_x int64; | 
 |     /// Relative Y positional displacement. | 
 |     2: movement_y int64; | 
 |  | 
 |     /// The position of X. | 
 |     /// The main use of position is from virtual mice like over VNC. | 
 |     6: position_x int64; | 
 |  | 
 |     /// The position of Y. | 
 |     /// The main use of position is from virtual mice like over VNC. | 
 |     7: position_y int64; | 
 |  | 
 |     /// Relative vertical scrolling displacement. | 
 |     3: scroll_v int64; | 
 |     /// Relative horizontal scrolling displacement. | 
 |     4: scroll_h int64; | 
 |  | 
 |     /// A list of currently pressed buttons. | 
 |     5: pressed_buttons vector<uint8>:MOUSE_MAX_NUM_BUTTONS; | 
 | }; |