Home | History | Annotate | Download | only in WALT
      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