chromium/services/device/public/cpp/hid/hid_report_utils.h

// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef SERVICES_DEVICE_PUBLIC_CPP_HID_HID_REPORT_UTILS_H_
#define SERVICES_DEVICE_PUBLIC_CPP_HID_HID_REPORT_UTILS_H_

#include "services/device/public/cpp/hid/hid_report_type.h"
#include "services/device/public/mojom/hid.mojom.h"

namespace device {

// Indicates whether reports of type `report_type` that appear in a top-level
// collection with usage `hid_usage_and_page` should be blocked.
bool IsAlwaysProtected(const mojom::HidUsageAndPage& hid_usage_and_page,
                       HidReportType report_type);

// Returns true if `collection` contains any unprotected reports, or false if
// all its reports are always protected.
bool CollectionHasUnprotectedReports(
    const mojom::HidCollectionInfo& collection);

// Returns the collection in `device` containing a report with ID `report_id`
// and type `report_type`, or nullptr if there is no matching report.
const mojom::HidCollectionInfo* FindCollectionWithReport(
    const mojom::HidDeviceInfo& device,
    uint8_t report_id,
    HidReportType report_type);

}  // namespace device

#endif  // SERVICES_DEVICE_PUBLIC_CPP_HID_HID_REPORT_UTILS_H_