chromium/third_party/blink/public/mojom/serial/serial.mojom

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

module blink.mojom;

import "device/bluetooth/public/mojom/uuid.mojom";
import "mojo/public/mojom/base/unguessable_token.mojom";
import "services/device/public/mojom/serial.mojom";

struct SerialPortInfo {
  // Opaque identifier for this port.
  mojo_base.mojom.UnguessableToken token;

  // USB device properties.
  uint16 usb_vendor_id;
  bool has_usb_vendor_id = false;
  uint16 usb_product_id;
  bool has_usb_product_id = false;

  // Bluetooth service class UUID if the port is from a Bluetooth device.
  bluetooth.mojom.UUID? bluetooth_service_class_id;

  // True if the serial port was connected when the SerialPortInfo was returned
  // from the SerialService. SerialServiceClients are notified on port connected
  // state changes.
  //
  // A wired serial port is considered connected if it is physically attached
  // to the system.
  //
  // A wireless serial port is considered connected if the wireless device
  // hosting the port has any active connections to the system.
  bool connected;
};

struct SerialPortFilter {
  // USB or Bluetooth device vendor and product IDs.
  uint32 vendor_id;
  bool has_vendor_id;
  uint16 product_id;
  bool has_product_id;

  // Bluetooth service class UUID.
  bluetooth.mojom.UUID? bluetooth_service_class_id;
};

// This interface must be provided by the browser process in order for the
// renderer process to implement the navigator.serial API.
interface SerialService {
  // Sets the client which will receive notifications of events from this
  // service, such as when ports are added and removed from the system.
  SetClient(pending_remote<SerialServiceClient> client);

  // Retrieves information about all ports available to this client.
  GetPorts() => (array<SerialPortInfo> ports);

  // Requests permission to access a port.
  RequestPort(array<SerialPortFilter> filters,
              array<bluetooth.mojom.UUID> allowed_bluetooth_service_class_ids)
      => (SerialPortInfo? port);

  // Opens the port represented by |token| using |options| and returns a
  // connection to it in |port|.
  OpenPort(mojo_base.mojom.UnguessableToken token,
           device.mojom.SerialConnectionOptions options,
           pending_remote<device.mojom.SerialPortClient> client)
      => (pending_remote<device.mojom.SerialPort>? port);

  // Attempts to revoke the permission to the device by |token|.
  // It will fail silently if the permission cannot be revoked.
  ForgetPort(mojo_base.mojom.UnguessableToken token) => ();
};

// Client interface for receiving events from SerialService.
interface SerialServiceClient {
  // Called when a port described by |port_info| is connected or disconnected.
  OnPortConnectedStateChanged(SerialPortInfo port_info);
};