// 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;

using fuchsia.ui.input2;
using fuchsia.input;

/// Hardcoded max sizes for keyboard vectors. These sizes should be increased
/// if we ever see keyboards with more objects than can be represented.
const uint32 KEYBOARD_MAX_NUM_KEYS = 256;
const uint32 KEYBOARD_MAX_NUM_LEDS = 256;
const uint32 KEYBOARD_MAX_PRESSED_KEYS = 256;

/// Describes the format of the input report that will be sent from the keyboard
/// to the device.
table KeyboardInputDescriptor {
    /// The list of keys that this keyboard contains.
    /// Deprecated: in process of migration to input3.
    1: vector<fuchsia.ui.input2.Key>:KEYBOARD_MAX_NUM_KEYS keys;

    /// The list of keys that this keyboard contains.
    2: vector<fuchsia.input.Key>:KEYBOARD_MAX_NUM_KEYS keys3;
};

/// Describes the format of the output report that can be sent to the keyboard..
table KeyboardOutputDescriptor {
    /// The list of keyboard LEDs that can be toggled.
    1: vector<LedType>:KEYBOARD_MAX_NUM_LEDS leds;
};

/// The capabilities of a keyboard device.
table KeyboardDescriptor {
    1: KeyboardInputDescriptor input;
    2: KeyboardOutputDescriptor output;
};

/// A single report created by a keyboard device.
table KeyboardInputReport {
    /// The list of keys that are currently pressed down.
    /// Deprecated: in process of migration to input3.
    1: vector<fuchsia.ui.input2.Key>:KEYBOARD_MAX_PRESSED_KEYS pressed_keys;

    /// The list of keys that are currently pressed down.
    2: vector<fuchsia.input.Key>:KEYBOARD_MAX_PRESSED_KEYS pressed_keys3;
};

/// A single report containing output information for a keyboard.
table KeyboardOutputReport {
    /// Each LED in this list will be turned on. Any LED not in this list will be
    /// turned off.
    1: vector<LedType>:KEYBOARD_MAX_NUM_LEDS enabled_leds;
};
