00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
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
00048 typedef int 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
00149 #define MKMD_SUCCESS KERN_SUCCESS // use this until all the MKMidi checks have been converted to MKMD_SUCCESS.
00150
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
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
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
00172
00177 #define MKMD_PORT_A_UNIT 0
00178
00183 #define MKMD_PORT_B_UNIT 1
00184
00185
00194 typedef void (*MKMDDataReplyFunction) (MKMDReplyPort replyPort, 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
00255 PERFORM_API MKMDReturn
00256 MKMDBecomeOwner(MKMDPort mididriver_port, MKMDOwnerPort owner_port);
00257
00265 PERFORM_API MKMDReturn
00266 MKMDReleaseOwnership(MKMDPort mididriver_port, MKMDOwnerPort owner_port);
00267
00277 PERFORM_API MKMDReturn
00278 MKMDClaimUnit(BOOL input, MKMDPort driver, MKMDOwnerPort owner, short unit);
00279
00288 PERFORM_API MKMDReturn
00289 MKMDReleaseUnit(BOOL input, MKMDPort driver, MKMDOwnerPort owner, short unit);
00290
00300 PERFORM_API MKMDReturn
00301 MKMDSetClockMode(MKMDPort driver, MKMDOwnerPort owner, short synchUnit, int mode);
00302
00311 PERFORM_API MKMDReturn
00312 MKMDSetClockQuantum(MKMDPort driver, MKMDOwnerPort owner, int microseconds);
00313
00322 PERFORM_API MKMDReturn
00323 MKMDSetClockTime(MKMDPort driver, MKMDOwnerPort owner, int time);
00324
00333 PERFORM_API MKMDReturn
00334 MKMDGetClockTime(MKMDPort driver, MKMDOwnerPort owner, int *time);
00335
00351 PERFORM_API MKMDReturn
00352 MKMDGetMTCTime(MKMDPort driver, MKMDOwnerPort owner, short *format, short *hours, short *minutes, short *seconds, short *frames);
00353
00361 PERFORM_API MKMDReturn
00362 MKMDStartClock(MKMDPort driver, MKMDOwnerPort owner);
00363
00371 PERFORM_API MKMDReturn
00372 MKMDStopClock(MKMDPort driver, MKMDOwnerPort owner);
00373
00383 PERFORM_API MKMDReturn
00384 MKMDRequestData(MKMDPort driver, MKMDOwnerPort owner, short unit, MKMDReplyPort replyPort);
00385
00395 PERFORM_API MKMDReturn
00396 MKMDRequestAlarm(MKMDPort driver, MKMDOwnerPort owner, MKMDReplyPort replyPort, int time);
00397
00406 PERFORM_API MKMDReturn
00407 MKMDRequestExceptions(MKMDPort driver, MKMDOwnerPort owner, MKMDReplyPort exceptionPort);
00408
00420 PERFORM_API MKMDReturn
00421 MKMDRequestQueueNotification(MKMDPort driver, MKMDOwnerPort owner, short unit, MKMDReplyPort notificationPort, int size);
00422
00423
00424
00433 PERFORM_API MKMDReturn
00434 MKMDAwaitReply(MKMDReplyPort ports, MKMDReplyFunctions *funcs, int timeout);
00435
00440 #define MKMD_NO_TIMEOUT (-1)
00441
00449 PERFORM_API MKMDReturn
00450 MKMDHandleReply(msg_header_t *msg, MKMDReplyFunctions *funcs);
00451
00462 PERFORM_API MKMDReturn MKMDSetReplyCallback (
00463 MKMDPort mididriver_port,
00464 MKMDOwnerPort owner_port,
00465 short unit,
00466 void (*newCallbackFn)(void *),
00467 void *newCallbackParam);
00468
00480 PERFORM_API MKMDReturn
00481 MKMDSendData(MKMDPort driver, MKMDOwnerPort owner, short unit, MKMDRawEvent *data, unsigned int count);
00482
00492 PERFORM_API MKMDReturn
00493 MKMDGetAvailableQueueSize(MKMDPort driver, MKMDOwnerPort owner, short unit, int *size);
00494
00503 PERFORM_API MKMDReturn
00504 MKMDClearQueue(MKMDPort driver, MKMDOwnerPort owner, short unit);
00505
00514 PERFORM_API MKMDReturn
00515 MKMDFlushQueue(MKMDPort device_port, MKMDOwnerPort owner_port, short unit);
00516
00525 PERFORM_API MKMDReturn
00526 MKMDDownloadDLSInstruments(unsigned int *patches, int patchCount);
00527
00538 PERFORM_API const char **
00539 MKMDGetAvailableDrivers(BOOL inputDrivers, unsigned int *selectedDriver);
00540
00551 PERFORM_API MKMDReturn
00552 MKMDFilterMessage(MKMDPort driver, MKMDOwnerPort owner, short unit, unsigned char statusByte, boolean_t filterIt);
00553
00563 PERFORM_API MKMDReturn
00564 MKMDParseInput(MKMDPort driver, MKMDOwnerPort owner, short unit, boolean_t parseIt);
00565
00572 PERFORM_API char *MKMDErrorString(MKMDReturn errorCode);
00573
00583 PERFORM_API MKMDReturn
00584 MKMDSetSystemIgnores(MKMDPort driver, MKMDOwnerPort owner, short unit, unsigned int ignoreBits);
00585
00586 #endif _MKMD_
00587