00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef _MD_
00024 #define _MD_
00025
00026 #import <mach/kern_return.h>
00027 #import <mach/message.h>
00028 #import <mach/port.h>
00029 #import <mach/boolean.h>
00030
00031 #define MD_NAME @"Mididriver"
00032
00033
00034 typedef struct {
00035 int time;
00036 unsigned char byte;
00037 } MDRawEvent;
00038
00039
00040
00041
00042 #define MD_MAX_EVENT 100
00043
00044
00045
00046
00047 #define MD_MAX_MSG_SIZE 1024 // More than enough
00048
00049
00050 #define MD_CLOCK_MODE_INTERNAL 0
00051 #define MD_CLOCK_MODE_MTC_SYNC 1
00052
00053
00054 #define MD_ERROR_BUSY 100
00055 #define MD_ERROR_NOT_OWNER 101
00056 #define MD_ERROR_QUEUE_FULL 102
00057 #define MD_ERROR_BAD_MODE 103
00058 #define MD_ERROR_UNIT_UNAVAILABLE 104
00059 #define MD_ERROR_ILLEGAL_OPERATION 105
00060 #define MD_ERROR_UNKNOWN_ERROR 106
00061
00062
00063 #define MD_EXCEPTION_MTC_STOPPED 1
00064 #define MD_EXCEPTION_MTC_STARTED_FORWARD 2
00065 #define MD_EXCEPTION_MTC_STARTED_REVERSE 3
00066
00067
00068 #define MD_IGNORE_CLOCK 0x0100
00069 #define MD_IGNORE_START 0x0400
00070 #define MD_IGNORE_CONTINUE 0x0800
00071 #define MD_IGNORE_STOP 0x1000
00072 #define MD_IGNORE_ACTIVE 0x4000
00073 #define MD_IGNORE_RESET 0x8000
00074 #define MD_IGNORE_REAL_TIME 0xdd00
00075
00076 #define MD_PORT_A_UNIT 0
00077 #define MD_PORT_B_UNIT 1
00078
00079
00080 typedef void (*MDDataReplyFunction)
00081 (port_t replyPort, short unit, MDRawEvent *events, unsigned int count);
00082 typedef void (*MDAlarmReplyFunction)
00083 (port_t replyPort, int requestedTime, int actualTime);
00084 typedef void (*MDExceptionReplyFunction)
00085 (port_t replyPort, int exception);
00086 typedef void (*MDQueueReplyFunction)
00087 (port_t replyPort, short unit);
00088
00089
00090 typedef struct _MDReplyFunctions {
00091 MDDataReplyFunction dataReply;
00092 MDAlarmReplyFunction alarmReply;
00093 MDExceptionReplyFunction exceptionReply;
00094 MDQueueReplyFunction queueReply;
00095 } MDReplyFunctions;
00096
00097
00098 extern kern_return_t
00099 MDBecomeOwner(port_t driver, port_t owner);
00100 extern kern_return_t
00101 MDReleaseOwnership(port_t driver, port_t owner);
00102
00103
00104 extern kern_return_t
00105 MDClaimUnit(port_t driver, port_t owner, short unit);
00106 extern kern_return_t
00107 MDReleaseUnit(port_t driver, port_t owner, short unit);
00108
00109
00110 extern kern_return_t
00111 MDSetClockMode(port_t driver, port_t owner, short synchUnit, int mode);
00112 extern kern_return_t
00113 MDSetClockQuantum(port_t driver, port_t owner, int microseconds);
00114 extern kern_return_t
00115 MDSetClockTime(port_t driver, port_t owner, int time);
00116 extern kern_return_t
00117 MDGetClockTime(port_t driver, port_t owner, int *time);
00118 extern kern_return_t
00119 MDGetMTCTime(port_t driver, port_t owner, short *format, short *hours, short *minutes, short *seconds, short *frames);
00120 extern kern_return_t
00121 MDStartClock(port_t driver, port_t owner);
00122 extern kern_return_t
00123 MDStopClock(port_t driver, port_t owner);
00124
00125
00126 extern kern_return_t
00127 MDRequestData(port_t driver, port_t owner, short unit, port_t replyPort);
00128 extern kern_return_t
00129 MDRequestAlarm(port_t driver, port_t owner, port_t replyPort, int time);
00130 extern kern_return_t
00131 MDRequestExceptions(port_t driver, port_t owner, port_t exceptionPort);
00132 extern kern_return_t
00133 MDRequestQueueNotification(port_t driver, port_t owner, short unit, port_t notificationPort, int size);
00134
00135
00136 extern kern_return_t
00137 MDAwaitReply(port_t ports, MDReplyFunctions *funcs, int timeout);
00138
00139 #define MD_NO_TIMEOUT (-1)
00140
00141 extern kern_return_t
00142 MDHandleReply(msg_header_t *msg,MDReplyFunctions *funcs);
00143
00144
00145 extern kern_return_t
00146 MDSendData(port_t driver, port_t owner, short unit, MDRawEvent *data, unsigned int count);
00147 extern kern_return_t
00148 MDGetAvailableQueueSize(port_t driver, port_t owner, short unit, int *size);
00149 extern kern_return_t
00150 MDClearQueue(port_t driver, port_t owner, short unit);
00151 extern kern_return_t
00152 MDFlushQueue(port_t device_port, port_name_t owner_port, short unit);
00153 extern kern_return_t
00154 MIDIDownloadDLSInstruments(unsigned int *patches, int patchCount);
00155 extern char **MIDIGetAvailableDrivers(unsigned int *selectedDriver);
00156
00157
00158 extern kern_return_t
00159 MDFilterMessage(port_t driver, port_t owner, short unit, unsigned char statusByte, boolean_t filterIt);
00160 extern kern_return_t
00161 MDParseInput(port_t driver, port_t owner, short unit, boolean_t parseIt);
00162
00163
00164 extern kern_return_t
00165 MDSetSystemIgnores(port_t driver, port_t owner, short unit, unsigned int ignoreBits);
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182
00183 #if !m68k
00184
00185 #define MIDIRawEvent MDRawEvent
00186 #define MIDI_MAX_EVENT MD_MAX_EVENT
00187 #define MIDI_MAX_MSG_SIZE MD_MAX_MSG_SIZE
00188 #define MIDI_CLOCK_MODE_INTERNAL MD_CLOCK_MODE_INTERNAL
00189 #define MIDI_CLOCK_MODE_MTC_SYNC MD_CLOCK_MODE_MTC_SYNC
00190 #define MIDI_ERROR_BUSY MD_ERROR_BUSY
00191 #define MIDI_ERROR_NOT_OWNER MD_ERROR_NOT_OWNER
00192 #define MIDI_ERROR_QUEUE_FULL MD_ERROR_QUEUE_FULL
00193 #define MIDI_ERROR_BAD_MODE MD_ERROR_BAD_MODE
00194 #define MIDI_ERROR_UNIT_UNAVAILABLE MD_ERROR_UNIT_UNAVAILABLE
00195 #define MIDI_ERROR_ILLEGAL_OPERATION MD_ERROR_ILLEGAL_OPERATION
00196 #define MIDI_ERROR_UNKNOWN_ERROR MD_ERROR_UNKNOWN_ERROR
00197 #define MIDI_EXCEPTION_MTC_STOPPED MD_EXCEPTION_MTC_STOPPED
00198 #define MIDI_EXCEPTION_MTC_STARTED_FORWARD MD_EXCEPTION_MTC_STARTED_FORWARD
00199 #define MIDI_EXCEPTION_MTC_STARTED_REVERSE MD_EXCEPTION_MTC_STARTED_REVERSE
00200 #define MIDI_PORT_A_UNIT MD_PORT_A_UNIT
00201 #define MIDI_PORT_B_UNIT MD_PORT_B_UNIT
00202 #define MIDI_IGNORE_CLOCK MD_IGNORE_CLOCK
00203 #define MIDI_IGNORE_START MD_IGNORE_START
00204 #define MIDI_IGNORE_CONTINUE MD_IGNORE_CONTINUE
00205 #define MIDI_IGNORE_STOP MD_IGNORE_STOP
00206 #define MIDI_IGNORE_ACTIVE MD_IGNORE_ACTIVE
00207 #define MIDI_IGNORE_RESET MD_IGNORE_RESET
00208 #define MIDI_IGNORE_REAL_TIME MD_IGNORE_REAL_TIME
00209 #define MIDIDataReplyFunction MDDataReplyFunction
00210 #define MIDIAlarmReplyFunction MDAlarmReplyFunction
00211 #define MIDIExceptionReplyFunction MDExceptionReplyFunction
00212 #define MIDIQueueReplyFunction MDQueueReplyFunction
00213 #define MIDIReplyFunctions MDReplyFunctions
00214 #define MIDIBecomeOwner MDBecomeOwner
00215 #define MIDIReleaseOwnership MDReleaseOwnership
00216 #define MIDIClaimUnit MDClaimUnit
00217 #define MIDIReleaseUnit MDReleaseUnit
00218 #define MIDISetClockMode MDSetClockMode
00219 #define MIDISetClockQuantum MDSetClockQuantum
00220 #define MIDISetClockTime MDSetClockTime
00221 #define MIDIGetClockTime MDGetClockTime
00222 #define MIDIGetMTCTime MDGetMTCTime
00223 #define MIDIStartClock MDStartClock
00224 #define MIDIStopClock MDStopClock
00225 #define MIDISetSystemIgnores MDSetSystemIgnores
00226 #define MIDIRequestData MDRequestData
00227 #define MIDIRequestAlarm MDRequestAlarm
00228 #define MIDIRequestExceptions MDRequestExceptions
00229 #define MIDIRequestQueueNotification MDRequestQueueNotification
00230 #define MIDIAwaitReply MDAwaitReply
00231 #define MIDI_NO_TIMEOUT MD_NO_TIMEOUT
00232 #define MIDIHandleReply MDHandleReply
00233 #define MIDISendData MDSendData
00234 #define MIDIGetAvailableQueueSize MDGetAvailableQueueSize
00235 #define MIDIClearQueue MDClearQueue
00236 #define MIDIFlushQueue MDFlushQueue
00237 #define MIDIFilterMessage MDFilterMessage
00238 #define MIDIParseInput MDParseInput
00239 #endif // !m68K compatability
00240
00241 #endif _MD_
00242