| // 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) => (); |
| }; |