chromium/services/device/public/mojom/usb_manager.mojom

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

module device.mojom;

import "services/device/public/mojom/usb_device.mojom";
import "services/device/public/mojom/usb_enumeration_options.mojom";
import "services/device/public/mojom/usb_manager_client.mojom";
import "mojo/public/mojom/base/file.mojom";

interface UsbDeviceManager {
  // Retrieves information about all devices available to the DeviceManager
  // implementation and set client for device added/*removed events.
  EnumerateDevicesAndSetClient(
      pending_associated_remote<UsbDeviceManagerClient> client)
          => (array<UsbDeviceInfo> results);

  // Retrieves devices information filtered by |options| to the DeviceManager
  // implementation.
  GetDevices(UsbEnumerationOptions? options) => (array<UsbDeviceInfo> results);

  // Requests a device by guid.
  GetDevice(string guid, array<uint8> blocked_interface_classes,
            pending_receiver<UsbDevice> device_receiver,
            pending_remote<UsbDeviceClient>? device_client);

  // Requests a device by guid. The returned device will be permitted to send
  // control transfers that attempt to configure an AOA[1] version that
  // indicates a security key request. See comment in
  // |UsbControlTransferParams|.
  GetSecurityKeyDevice(string guid, pending_receiver<UsbDevice> device_receiver,
                       pending_remote<UsbDeviceClient>? device_client);

  // Check Android permissions to access the device identified by |guid|. If
  // necessary the user is prompted to grant this access. If access is granted
  // the device information is refreshed to include data not previously
  // accessible.
  [EnableIf=is_android]
  RefreshDeviceInfo(string guid) => (UsbDeviceInfo? device_info);

  // Check whether permission_broker will allow a future Open call for
  // a given USB device to succeed.
  [EnableIf=is_chromeos]
  CheckAccess(string guid) => (bool success);

  // Attempt to open a USB device using permission_broker and return
  // a file descriptor. Allow access only to interfaces specified in
  // |allowed_interfaces_mask|. The |lifeline_fd| should be the remote end of
  // a pipe created locally, and when this pipe is closed permission_broker
  // reattaches any kernel drivers that may have been detached when opening.
  [EnableIf=is_chromeos]
  OpenFileDescriptor(string guid, uint32 allowed_interfaces_mask,
                     handle<platform> lifeline_fd)
      => (mojo_base.mojom.File? fd);

  // Sets the client for this DeviceManager service. The service will notify its
  // client of device events such as connection and disconnection.
  SetClient(pending_associated_remote<UsbDeviceManagerClient> client);
};