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 23extern 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