MusicKit  0.0.0
PerformMIDI.h
00001 /*
00002   $Id$
00003   Defined In: The MusicKit
00004 
00005   Description:
00006     MIDI driver typedefs, defines, and functions exported to other MusicKit frameworks.
00007     See the HeaderDoc header below.
00008 
00009   Original Author of MacOS X version: Leigh M. Smith
00010 
00011   Copyright (c) 2000-2004 The MusicKit Project.
00012 */
00033 #ifndef _MKMD_
00034 #define _MKMD_
00035 
00036 #import <Foundation/Foundation.h>
00037 #import <mach/kern_return.h>
00038 
00045 #define PERFORM_API
00046 
00047 // kludge around type definitions. This should be replaced.
00048 typedef int msg_header_t;  // mach_msg_header_t
00049 
00057 #define MKMDPort int
00058 
00066 #define MKMDOwnerPort int
00067 
00077 #define MKMDReplyPort int
00078 
00083 typedef int MKMDReturn;
00084 
00096 #define MKMD_RECEPTION_USING_PORTS 0
00097 
00102 #define MKMD_PORT_NULL 0
00103 
00107 typedef struct {
00109     int time;
00111     unsigned char byte;
00112 } MKMDRawEvent;
00113 
00118 typedef MKMDRawEvent *MKMDRawEventPtr;
00119 
00124 #define MKMD_MAX_EVENT 100
00125    
00130 #define MKMD_MAX_MSG_SIZE 1024  // More than enough
00131 
00136 #define MKMD_CLOCK_MODE_INTERNAL 0
00137 
00142 #define MKMD_CLOCK_MODE_MTC_SYNC 1
00143 
00144 /* error codes */
00149 #define MKMD_SUCCESS KERN_SUCCESS  // use this until all the MKMidi checks have been converted to MKMD_SUCCESS.
00150 //#define MKMD_SUCCESS 0
00151 #define MKMD_ERROR_BUSY              100
00152 #define MKMD_ERROR_NOT_OWNER         101
00153 #define MKMD_ERROR_QUEUE_FULL        102
00154 #define MKMD_ERROR_BAD_MODE          103
00155 #define MKMD_ERROR_UNIT_UNAVAILABLE  104
00156 #define MKMD_ERROR_ILLEGAL_OPERATION 105
00157 #define MKMD_ERROR_UNKNOWN_ERROR     106
00158 
00159 /* exception codes */
00160 #define MKMD_EXCEPTION_MTC_STOPPED 1
00161 #define MKMD_EXCEPTION_MTC_STARTED_FORWARD 2
00162 #define MKMD_EXCEPTION_MTC_STARTED_REVERSE 3
00163 
00164 /* Defines for system ignores. */
00165 #define MKMD_IGNORE_CLOCK        0x0100
00166 #define MKMD_IGNORE_START        0x0400
00167 #define MKMD_IGNORE_CONTINUE     0x0800
00168 #define MKMD_IGNORE_STOP         0x1000
00169 #define MKMD_IGNORE_ACTIVE       0x4000
00170 #define MKMD_IGNORE_RESET        0x8000
00171 #define MKMD_IGNORE_REAL_TIME    0xdd00  /* All of the above */
00172 
00177 #define MKMD_PORT_A_UNIT 0
00178 
00183 #define MKMD_PORT_B_UNIT 1
00184 
00185 /* Reply function types. */
00194 typedef void (*MKMDDataReplyFunction) (void *userData, short unit, MKMDRawEvent *events, unsigned int count);
00195 
00203 typedef void (*MKMDAlarmReplyFunction) (MKMDReplyPort replyPort, int requestedTime, int actualTime);
00204 
00211 typedef void (*MKMDExceptionReplyFunction) (MKMDReplyPort replyPort, int exception);
00212 
00220 typedef void (*MKMDQueueReplyFunction) (MKMDReplyPort replyPort, short unit);
00221 
00231 typedef struct _MKMDReplyFunctions {
00232     MKMDDataReplyFunction dataReply;           
00233     MKMDAlarmReplyFunction alarmReply;         
00234     MKMDExceptionReplyFunction exceptionReply; 
00235     MKMDQueueReplyFunction queueReply;         
00236 } MKMDReplyFunctions;
00237 
00245 PERFORM_API MKMDPort
00246     MKMDGetMIDIDeviceOnHost(const char *hostname);
00247 
00256 PERFORM_API MKMDReturn 
00257     MKMDBecomeOwner(MKMDPort mididriver_port, MKMDOwnerPort owner_port, MKMDReplyFunctions *replyFunctions);
00258 
00266 PERFORM_API MKMDReturn 
00267     MKMDReleaseOwnership(MKMDPort mididriver_port, MKMDOwnerPort owner_port);
00268 
00279 PERFORM_API MKMDReturn 
00280     MKMDClaimUnit(BOOL input, MKMDPort driver, MKMDOwnerPort owner, short unit, void *userData);
00281 
00291 PERFORM_API MKMDReturn 
00292     MKMDReleaseUnit(BOOL input, MKMDPort driver, MKMDOwnerPort owner, short unit, void *userData);
00293 
00303 PERFORM_API MKMDReturn 
00304     MKMDSetClockMode(MKMDPort driver, MKMDOwnerPort owner, short synchUnit, int mode);
00305 
00314 PERFORM_API MKMDReturn 
00315     MKMDSetClockQuantum(MKMDPort driver, MKMDOwnerPort owner, int microseconds);
00316 
00325 PERFORM_API MKMDReturn 
00326     MKMDSetClockTime(MKMDPort driver, MKMDOwnerPort owner, int time);
00327 
00336 PERFORM_API MKMDReturn 
00337     MKMDGetClockTime(MKMDPort driver, MKMDOwnerPort owner, int *time);
00338 
00354 PERFORM_API MKMDReturn 
00355     MKMDGetMTCTime(MKMDPort driver, MKMDOwnerPort owner, short *format, short *hours, short *minutes, short *seconds, short *frames);
00356 
00364 PERFORM_API MKMDReturn 
00365     MKMDStartClock(MKMDPort driver, MKMDOwnerPort owner);
00366 
00374 PERFORM_API MKMDReturn 
00375     MKMDStopClock(MKMDPort driver, MKMDOwnerPort owner);
00376 
00386 PERFORM_API MKMDReturn 
00387     MKMDRequestData(MKMDPort driver, MKMDOwnerPort owner, short unit, MKMDReplyPort replyPort);
00388 
00398 PERFORM_API MKMDReturn 
00399     MKMDRequestAlarm(MKMDPort driver, MKMDOwnerPort owner, MKMDReplyPort replyPort, int time);
00400 
00409 PERFORM_API MKMDReturn 
00410     MKMDRequestExceptions(MKMDPort driver, MKMDOwnerPort owner, MKMDReplyPort exceptionPort);
00411 
00423 PERFORM_API MKMDReturn 
00424     MKMDRequestQueueNotification(MKMDPort driver, MKMDOwnerPort owner, short unit, MKMDReplyPort notificationPort, int size);
00425 
00426 /****************** Receiving asynchronous messages *******************/
00427 
00436 PERFORM_API MKMDReturn 
00437     MKMDAwaitReply(MKMDReplyPort ports, MKMDReplyFunctions *funcs, int timeout);
00438 
00443 #define MKMD_NO_TIMEOUT (-1)
00444 
00452 PERFORM_API MKMDReturn 
00453     MKMDHandleReply(void *userData, MKMDReplyFunctions *funcs);
00454 
00465 PERFORM_API MKMDReturn MKMDSetReplyCallback (
00466  MKMDPort mididriver_port,
00467     MKMDOwnerPort owner_port,
00468     short unit,
00469     void (*newCallbackFn)(void *),
00470         void *newCallbackParam);
00471 
00483 PERFORM_API MKMDReturn 
00484     MKMDSendData(MKMDPort driver, MKMDOwnerPort owner, short unit, MKMDRawEvent *data, unsigned int count);
00485 
00495 PERFORM_API MKMDReturn 
00496     MKMDGetAvailableQueueSize(MKMDPort driver, MKMDOwnerPort owner, short unit, int *size);
00497 
00506 PERFORM_API MKMDReturn 
00507     MKMDClearQueue(MKMDPort driver, MKMDOwnerPort owner, short unit);
00508 
00517 PERFORM_API MKMDReturn 
00518     MKMDFlushQueue(MKMDPort device_port, MKMDOwnerPort owner_port, short unit);
00519 
00528 PERFORM_API MKMDReturn 
00529     MKMDDownloadDLSInstruments(unsigned int *patches, int patchCount);
00530 
00541 PERFORM_API const char **
00542     MKMDGetAvailableDrivers(BOOL inputDrivers, unsigned int *selectedDriver);
00543 
00554 PERFORM_API MKMDReturn 
00555     MKMDFilterMessage(MKMDPort driver, MKMDOwnerPort owner, short unit, unsigned char statusByte, boolean_t filterIt);
00556 
00566 PERFORM_API MKMDReturn 
00567     MKMDParseInput(MKMDPort driver, MKMDOwnerPort owner, short unit, boolean_t parseIt);
00568 
00575 PERFORM_API char *MKMDErrorString(MKMDReturn errorCode);
00576 
00586 PERFORM_API MKMDReturn 
00587     MKMDSetSystemIgnores(MKMDPort driver, MKMDOwnerPort owner, short unit, unsigned int ignoreBits);
00588 
00589 #endif _MKMD_
00590