1 /* 2 * Copyright (C) 2016 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #import <Foundation/Foundation.h> 18 19 @class MIDIClient; 20 @class MIDIDestination; 21 @class MIDISource; 22 23 extern NSString * const MIDIClientErrorDomain; 24 25 /** 26 * Callbacks for MIDIClient changes. 27 * 28 * Note that these methods may not be called on the main thread. 29 */ 30 @protocol MIDIClientDelegate <NSObject> 31 /** Called when a MIDIClient receives data from a connected source. */ 32 - (void)MIDIClient:(MIDIClient *)client receivedData:(NSData *)message; 33 34 @optional 35 /** Called when a MIDI I/O error occurs on the client's endpoints. */ 36 - (void)MIDIClient:(MIDIClient *)client receivedError:(NSError *)error; 37 38 /** Called when a MIDI endpoint has been added to the system. */ 39 - (void)MIDIClientEndpointAdded:(MIDIClient *)client; 40 41 /** Called when a MIDI endpoint has been removed to the system. */ 42 - (void)MIDIClientEndpointRemoved:(MIDIClient *)client; 43 44 /** Called when the configuration of a MIDI object attached to the system has changed. */ 45 - (void)MIDIClientConfigurationChanged:(MIDIClient *)client; 46 @end 47 48 /** A MIDI client that can read data from a MIDI source and write data to a MIDI destination. */ 49 @interface MIDIClient : NSObject 50 /** The source attached by -connectToSource:error:. */ 51 @property (readonly, nonatomic) MIDISource *source; 52 53 /** The destination attached by -connectToDestination:error:. */ 54 @property (readonly, nonatomic) MIDIDestination *destination; 55 56 @property (nonatomic, weak) id<MIDIClientDelegate> delegate; 57 58 /** 59 * Creates a new MIDI client with a friendly name. 60 * 61 * If an error occurs, nil is returned and the error is populated with a description of the issue. 62 */ 63 - (instancetype)initWithName:(NSString *)name error:(NSError **)error; 64 65 /** Attaches an input source to the client. */ 66 - (BOOL)connectToSource:(MIDISource *)source error:(NSError **)error; 67 68 /** Attaches an output destination to the client. */ 69 - (BOOL)connectToDestination:(MIDIDestination *)destination error:(NSError **)error; 70 71 /** Sends a MIDI packet of data to the client's output destination. */ 72 - (BOOL)sendData:(NSData *)data error:(NSError **)error; 73 @end 74