blob: b1e3b35685bfa485d616e54adba37b5d57ab7bc0 [file] [log] [blame]
// 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.
#ifndef SRC_UI_LIB_HID_INPUT_REPORT_FIDL_H_
#define SRC_UI_LIB_HID_INPUT_REPORT_FIDL_H_
#include <fuchsia/input/report/llcpp/fidl.h>
#include <fuchsia/ui/input2/cpp/fidl.h>
#include "src/ui/lib/hid-input-report/descriptors.h"
namespace hid_input_report {
struct FidlMouseInputDescriptor {
fuchsia_input_report::MouseInputDescriptor descriptor;
fuchsia_input_report::MouseInputDescriptor::UnownedBuilder builder;
fidl::VectorView<uint8_t> buttons_view;
MouseInputDescriptor data;
};
struct FidlMouseDescriptor {
fuchsia_input_report::MouseDescriptor descriptor;
fuchsia_input_report::MouseDescriptor::UnownedBuilder builder;
FidlMouseInputDescriptor input;
};
struct FidlSensorInputDescriptor {
fuchsia_input_report::SensorInputDescriptor descriptor;
fuchsia_input_report::SensorInputDescriptor::UnownedBuilder builder;
fidl::VectorView<fuchsia_input_report::SensorAxis> values_view;
SensorInputDescriptor data;
};
struct FidlSensorDescriptor {
fuchsia_input_report::SensorDescriptor descriptor;
fuchsia_input_report::SensorDescriptor::UnownedBuilder builder;
FidlSensorInputDescriptor input;
};
struct FidlContactInputDescriptor {
fuchsia_input_report::ContactInputDescriptor::UnownedBuilder builder;
};
struct FidlTouchInputDescriptor {
fuchsia_input_report::TouchInputDescriptor descriptor;
fuchsia_input_report::TouchInputDescriptor::UnownedBuilder builder;
fidl::VectorView<fuchsia_input_report::ContactInputDescriptor> contacts_view;
std::array<fuchsia_input_report::ContactInputDescriptor, fuchsia_input_report::TOUCH_MAX_CONTACTS>
contacts_built;
std::array<FidlContactInputDescriptor, fuchsia_input_report::TOUCH_MAX_CONTACTS> contacts_builder;
TouchInputDescriptor data;
};
struct FidlTouchDescriptor {
fuchsia_input_report::TouchDescriptor descriptor;
fuchsia_input_report::TouchDescriptor::UnownedBuilder builder;
FidlTouchInputDescriptor input;
};
struct FidlKeyboardInputDescriptor {
fuchsia_input_report::KeyboardInputDescriptor descriptor;
fuchsia_input_report::KeyboardInputDescriptor::UnownedBuilder builder;
fidl::VectorView<::llcpp::fuchsia::ui::input2::Key> keys_view;
KeyboardInputDescriptor data;
};
struct FidlKeyboardOutputDescriptor {
fuchsia_input_report::KeyboardOutputDescriptor descriptor;
fuchsia_input_report::KeyboardOutputDescriptor::UnownedBuilder builder;
fidl::VectorView<fuchsia_input_report::LedType> leds_view;
KeyboardOutputDescriptor data;
};
struct FidlKeyboardDescriptor {
fuchsia_input_report::KeyboardDescriptor descriptor;
fuchsia_input_report::KeyboardDescriptor::UnownedBuilder builder;
FidlKeyboardInputDescriptor input;
FidlKeyboardOutputDescriptor output;
};
struct FidlDescriptor {
fuchsia_input_report::DeviceDescriptor::UnownedBuilder builder;
FidlMouseDescriptor mouse;
FidlSensorDescriptor sensor;
FidlTouchDescriptor touch;
FidlKeyboardDescriptor keyboard;
};
struct FidlMouseInputReport {
fuchsia_input_report::MouseInputReport report;
fuchsia_input_report::MouseInputReport::UnownedBuilder builder;
fidl::VectorView<uint8_t> buttons_view;
// Holds the actual data that the builders/views point to.
MouseInputReport data;
};
struct FidlSensorInputReport {
fuchsia_input_report::SensorInputReport report;
fuchsia_input_report::SensorInputReport::UnownedBuilder builder;
fidl::VectorView<int64_t> values_view;
// Holds the actual data that the builders/views point to.
SensorInputReport data;
};
struct FidlContactInputReport {
fuchsia_input_report::ContactInputReport::UnownedBuilder builder;
};
struct FidlTouchInputReport {
fuchsia_input_report::TouchInputReport report;
fuchsia_input_report::TouchInputReport::UnownedBuilder builder;
std::array<FidlContactInputReport, fuchsia_input_report::TOUCH_MAX_CONTACTS> contacts;
std::array<fuchsia_input_report::ContactInputReport, fuchsia_input_report::TOUCH_MAX_CONTACTS>
contacts_built;
fidl::VectorView<fuchsia_input_report::ContactInputReport> contacts_view;
// Holds the actual data that the builders/views point to.
TouchInputReport data;
};
struct FidlKeyboardInputReport {
fuchsia_input_report::KeyboardInputReport report;
fuchsia_input_report::KeyboardInputReport::UnownedBuilder builder;
fidl::VectorView<::llcpp::fuchsia::ui::input2::Key> pressed_keys_view;
KeyboardInputReport data;
};
struct FidlInputReport {
fuchsia_input_report::InputReport::UnownedBuilder builder;
zx_time_t time;
std::variant<FidlMouseInputReport, FidlSensorInputReport, FidlTouchInputReport,
FidlKeyboardInputReport>
report;
};
// Builds the |FidlDescriptor| object from the |ReportDescriptor|.
zx_status_t SetFidlDescriptor(const ReportDescriptor& hid_descriptor, FidlDescriptor* descriptor);
// Builds the |FidlReport| object from the |Report|.
zx_status_t SetFidlInputReport(const InputReport& hid_report, FidlInputReport* report);
// Creates a statically sized descriptor from a Fidl Descriptor.
MouseDescriptor ToMouseDescriptor(const fuchsia_input_report::MouseDescriptor& fidl_descriptor);
KeyboardDescriptor ToKeyboardDescriptor(
const fuchsia_input_report::KeyboardDescriptor& fidl_descriptor);
TouchDescriptor ToTouchDescriptor(const fuchsia_input_report::TouchDescriptor& fidl_descriptor);
SensorDescriptor ToSensorDescriptor(const fuchsia_input_report::SensorDescriptor& fidl_descriptor);
// Creates a statically sized report from a Fidl Report.
InputReport ToInputReport(const fuchsia_input_report::InputReport& fidl_report);
} // namespace hid_input_report
#endif // SRC_UI_LIB_HID_INPUT_REPORT_FIDL_H_