| /* |
| * Copyright (C) 2016 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| #import <Foundation/Foundation.h> |
| |
| @class MIDIClient; |
| @class MIDIDestination; |
| @class MIDISource; |
| |
| extern NSString * const MIDIClientErrorDomain; |
| |
| /** |
| * Callbacks for MIDIClient changes. |
| * |
| * Note that these methods may not be called on the main thread. |
| */ |
| @protocol MIDIClientDelegate <NSObject> |
| /** Called when a MIDIClient receives data from a connected source. */ |
| - (void)MIDIClient:(MIDIClient *)client receivedData:(NSData *)message; |
| |
| @optional |
| /** Called when a MIDI I/O error occurs on the client's endpoints. */ |
| - (void)MIDIClient:(MIDIClient *)client receivedError:(NSError *)error; |
| |
| /** Called when a MIDI endpoint has been added to the system. */ |
| - (void)MIDIClientEndpointAdded:(MIDIClient *)client; |
| |
| /** Called when a MIDI endpoint has been removed to the system. */ |
| - (void)MIDIClientEndpointRemoved:(MIDIClient *)client; |
| |
| /** Called when the configuration of a MIDI object attached to the system has changed. */ |
| - (void)MIDIClientConfigurationChanged:(MIDIClient *)client; |
| @end |
| |
| /** A MIDI client that can read data from a MIDI source and write data to a MIDI destination. */ |
| @interface MIDIClient : NSObject |
| /** The source attached by -connectToSource:error:. */ |
| @property (readonly, nonatomic) MIDISource *source; |
| |
| /** The destination attached by -connectToDestination:error:. */ |
| @property (readonly, nonatomic) MIDIDestination *destination; |
| |
| @property (nonatomic, weak) id<MIDIClientDelegate> delegate; |
| |
| /** |
| * Creates a new MIDI client with a friendly name. |
| * |
| * If an error occurs, nil is returned and the error is populated with a description of the issue. |
| */ |
| - (instancetype)initWithName:(NSString *)name error:(NSError **)error; |
| |
| /** Attaches an input source to the client. */ |
| - (BOOL)connectToSource:(MIDISource *)source error:(NSError **)error; |
| |
| /** Attaches an output destination to the client. */ |
| - (BOOL)connectToDestination:(MIDIDestination *)destination error:(NSError **)error; |
| |
| /** Sends a MIDI packet of data to the client's output destination. */ |
| - (BOOL)sendData:(NSData *)data error:(NSError **)error; |
| @end |