| // Copyright 2019 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| library fuchsia.hardware.midi; |
| |
| using zx; |
| |
| /// Describes what type of MIDI device an implementation of Device represents |
| type Info = struct { |
| /// Whether or not this device is a MIDI sink |
| is_sink bool; |
| /// Whether or not this device is a MIDI source |
| is_source bool; |
| }; |
| |
| const READ_SIZE uint32 = 3; |
| |
| closed protocol Device { |
| /// Get information about the type of MIDI device |
| strict GetInfo() -> (struct { |
| info Info; |
| }); |
| |
| /// Reads data from the midi device. Only applicable if GetInfo returns |
| /// is_source. |
| strict Read() -> (struct { |
| event vector<uint8>:READ_SIZE; |
| }) error zx.Status; |
| |
| /// Writes data to the midi device. Only applicable if GetInfo returns |
| /// is_sink. |
| strict Write(struct { |
| data vector<uint8>:MAX; |
| }) -> () error zx.Status; |
| }; |
| |
| closed protocol Controller { |
| /// Opens a new session on the device. |
| /// |
| /// At most one session is permitted at one time; the server end will be |
| /// closed with `ZX_ERR_ALREADY_BOUND` if a session already exists. |
| strict OpenSession(resource struct { |
| session server_end:Device; |
| }); |
| }; |