MusicKit
0.0.0
|
00001 /* 00002 $Id$ 00003 Defined In: The MusicKit 00004 00005 Description: MIDI driver typedefs, defines, and functions 00006 Original Author: David Jaffe 00007 00008 Copyright (c) 1988-1992, NeXT Computer, Inc. 00009 Portions Copyright (c) 1994 NeXT Computer, Inc. and reproduced under license from NeXT 00010 Portions Copyright (c) 1994 Stanford University 00011 */ 00012 /* 00013 Modification history: 00014 00015 $Log$ 00016 Revision 1.1 1999/11/17 17:57:14 leigh 00017 Initial revision 00018 00019 Revision 1.2 1999/07/29 01:26:06 leigh 00020 Added Win32 compatibility, CVS logs, SBs changes 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" /* Name of driver (append unit number to use) */ 00032 00033 /* Each event consists of a byte and a time stamp. */ 00034 typedef struct { 00035 int time; /* Absolute time in quanta */ 00036 unsigned char byte; /* The byte */ 00037 } MDRawEvent; 00038 00039 /* MD_MAX_EVENT is the maximum number of events that can be 00040 * sent to or received from the driver in a single package. 00041 */ 00042 #define MD_MAX_EVENT 100 00043 00044 /* MD_MAX_MSG_SIZE is the maximum size of the message you 00045 * can receive from the driver. 00046 */ 00047 #define MD_MAX_MSG_SIZE 1024 // More than enough 00048 00049 /* Clock modes */ 00050 #define MD_CLOCK_MODE_INTERNAL 0 00051 #define MD_CLOCK_MODE_MTC_SYNC 1 00052 00053 /* error codes */ 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 /* exception codes */ 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 /* Defines for system ignores. */ 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 /* All of the above */ 00075 00076 #define MD_PORT_A_UNIT 0 00077 #define MD_PORT_B_UNIT 1 00078 00079 /* Reply function types. */ 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 /* Struct for passing reply functions to midi_driver library. */ 00090 typedef struct _MDReplyFunctions { 00091 MDDataReplyFunction dataReply; 00092 MDAlarmReplyFunction alarmReply; 00093 MDExceptionReplyFunction exceptionReply; 00094 MDQueueReplyFunction queueReply; 00095 } MDReplyFunctions; 00096 00097 /******* Managing ownership of the driver ********/ 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 /*** Claiming a particular serial port (ownership of driver required) *****/ 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 /******** Controlling the clock ****************/ 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 /****************** Requesting asynchronous messages *******************/ 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 /****************** Receiving asynchronous messages *******************/ 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 /****************** Writing MD data to the driver *********************/ 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 /********************* Controling how incoming data is formated ***********/ 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 /* This will be obsolete soon: */ 00164 extern kern_return_t 00165 MDSetSystemIgnores(port_t driver, port_t owner, short unit, unsigned int ignoreBits); 00166 00167 /* 00168 * Originally from <MusicKit/midi_driver_compatability.h 00169 * Author: David Jaffe 00170 * CCRMA, Stanford University, 1994. 00171 * 00172 * This file provides compatability between the Music Kit 00173 * Intel MIDI driver and the NeXT hardware driver. If you 00174 * want your software to run on both architectures, include 00175 * this file before <mididriver/midi_driver.h> or anything else 00176 * that includes <mididriver/midi_driver.h>. 00177 * 00178 * 31/12/98 Actually, now we only use the mididriver versions 00179 * for NeXT hardware, and all other architectures use DriverKit 00180 * MusicKit MIDI drivers. 00181 */ 00182 00183 #if !m68k 00184 /* These macros make the musickit functions and macros look like those in libdsp. */ 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