blob: a1a8d9b5f506745c56eb33cdc97fb3ac430a1cbd [file] [log] [blame]
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Next MinVersion: 3
// This file defines the mojo interface between Android, Chrome and the
// Chrome OS daemon for the MIDI implementation used in ARC.
module arc.mojom;
// This struct is used to send information to the client regarding a device
// which has been (dis)connected, and which the client can use to request
// subdevice ports from the daemon.
struct MidisDeviceInfo {
uint32 card;
uint32 device_num;
uint32 num_subdevices;
uint32 flags;
string name;
string manufacturer;
};
// This struct is used by the client to both request a subdevice port FD, as
// well as to close all its connections to a particular device. In the latter
// case, the |subdevice_num| field is left unused.
struct MidisRequest {
uint32 card;
uint32 device_num;
uint32 subdevice_num;
};
// This interface is used by the server to send device and other information
// to the client. It should be implemented by the client, and a handle to it
// should be passed to the server.
// Next Method ID: 2
interface MidisClient {
OnDeviceAdded@0(MidisDeviceInfo device);
OnDeviceRemoved@1(MidisDeviceInfo device);
};
// This interface is used by the client to send messages / requests to the
// daemon. This should be implemented by midis.
// Next Method ID: 4
interface MidisServer {
// Used to list out the MIDI devices that are currently connected to the
// midis daemon.
ListDevices@0() => (array<MidisDeviceInfo> devices);
// This function returns a handle(a Unix FD wrapped in a Mojo Handle)
// for a subdevice specified by |request|.
// In the event of an error, returns an empty handle.
// DEPRECATED: Please use RequestPort@4 instead.
RequestPortDeprecated@1(MidisRequest request) => (handle port_handle);
[MinVersion=2]
RequestPort@3(MidisRequest request) => (handle? port_handle);
// This function closes all open FDs the client may have on the specified
// device, and removes the client from the device's data structure.
CloseDevice@2(MidisRequest request);
};
// This interface is needed to get the midis server interface handle.
// It is also used to send a handle to the midis client interface (this is
// used to send messages to the client, and the interface is implemented
// by the client).
// Next Method ID: 1
interface MidisHost {
Connect@0(MidisServer& server, MidisClient client);
};
// MidisInstance is implemented in the ARC MIDI JNI code that
// runs in Android and handles the Android side of the ArcBridge connection.
// Next Method ID: 2
interface MidisInstance {
// DEPRECATED: Please use Init@1 instead.
InitDeprecated@0(MidisHost host_ptr);
// Establishes full-duplex communication with the host.
[MinVersion=1] Init@1(MidisHost host_ptr) => ();
};