// 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 = 10;
const uint32 KEYBOARD_MAX_PRESSED_KEYS = 15;

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