home *** CD-ROM | disk | FTP | other *** search
/ NeXTSTEP 3.0 / NeXTSTEP3.0.iso / NextDeveloper / Headers / mididriver / midi_driver.h next >
Text File  |  1991-11-14  |  5KB  |  143 lines

  1. /*
  2.  *    File:    <midi/midi_driver.h>
  3.  *    Author:    David Jaffe
  4.  *    Copyright (C) 1991, NeXT Computer, Inc.
  5.  *
  6.  *      MIDI driver typedefs, defines, and functions
  7.  */
  8.  
  9.  
  10. #ifndef _MIDI_DRIVER_
  11. #define _MIDI_DRIVER_
  12.  
  13. #import <mach/kern_return.h>
  14. #import <mach/message.h>
  15. #import <mach/port.h>
  16.  
  17. /* Each event consists of a byte and a time stamp. */
  18. typedef struct {
  19.     int time;             /* Absolute time in quanta */
  20.     unsigned char byte;   /* The byte */
  21. } MIDIRawEvent;
  22.  
  23. /* MIDI_MAX_EVENT is the maximum number of events that can be
  24.  * sent to or received from the driver in a single package. 
  25.  */
  26. #define MIDI_MAX_EVENT 100
  27.    
  28. /* MIDI_MAX_MSG_SIZE is the maximum size of the message you
  29.  * can receive from the driver. 
  30.  */
  31. #define MIDI_MAX_MSG_SIZE 1024  // More than enough
  32.  
  33. /* Clock modes */
  34. #dAe MIDI_CLOCK_MODE_INTERNAL 0
  35. #define MIDI_CLOCK_MODE_MTC_SYNC 1
  36.  
  37. /* error codes */
  38. #define MIDI_ERROR_BUSY 100
  39. #define MIDI_ERROR_NOT_OWNER 101
  40. #define MIDI_ERROR_QUEUE_FULL 102
  41. #define MIDI_ERROR_BAD_MODE 103
  42. #define MIDI_ERROR_UNIT_UNAVAILABLE 104
  43. #define MIDI_ERROR_ILLEGAL_OPERATION 105
  44. #define MIDI_ERROR_UNKNOWN_ERROR 106
  45.  
  46. /* exception codes */
  47. #define MIDI_EXCEPTION_MTC_STOPPED 1
  48. #define MIDI_EXCEPTION_MTC_STARTED_FORWARD 2
  49. #define MIDI_EXCEPTION_MTC_STARTED_REVERSE 3
  50.  
  51. /* Defines for system ignores. */
  52. #define MIDI_IGNORE_CLOCK     0x0100
  53. #define MIDI_IGNORE_START     0x0400
  54. #define MIDI_IGNORE_CONTINUE     0x0800
  55. #define MIDI_IGNORE_STOP     0x1000
  56. #define MIDI_IGNORE_ACTIVE     0x4000
  57. #define MIDI_IGNORE_RESET     0x8000
  58. #define MIDI_IGNORE_REAL_TIME    0xdd00  /* All of the above */
  59.  
  60. #define MIDI_PORT_A_UNIT 0
  61. #define MIDI_PORT_B_UNIT 1
  62.  
  63. /* Reply function types. */
  64. typedef void (*MIDIDataReplyFunction)
  65.     (port_t replyPort, short unit, MIDIRawEvent *events, unsigned int count);
  66. typedef void (*MIDIAlarmReplyFunction)
  67.     (port_t replyPort, int requestedTime, int actualTime);
  68. typedef void (*MIDIExceptionReplyFunction)
  69.     (port_t replyPort, int exception);
  70. typedef void (*MIDIQueueReplyFunction)
  71.     (port_t replyPort, short unit);
  72.  
  73. /* Struct for passing reply functions to mididriver library. */
  74. typedef struct _MIDIReplyFunctions {
  75.     MIDIDataReplyFunction dataReply;
  76.     MIDIAlarmReplyFunction alarmReply;
  77.     MIDIExceptionReplyFunction exceptionReply;
  78.     MIDIQueueReplyFunction queueReply;
  79. } MIDIReplyFunctions;
  80.  
  81. /******* Managing ownership of the driver ********/
  82. extern kern_return_t 
  83.     MIDIBecomeOwner(port_t driver, port_t owner);
  84. extern kern_return_t 
  85.     MIDIReleaseOwnership(port_t driver, port_t owner);
  86.  
  87. /*** Claiming a particular serial port (ownership of driver required) *****/
  88. extern kern_return_t 
  89.     MIDIClaimUnit(port_t driver, port_t owner, short unit);
  90. extern kern_return_t 
  91.     MIDIReleaseUnit(port_t driver, port_t owner, short unit);
  92.  
  93. /******** Controlling the clock ****************/
  94. extern kern_return_t 
  95.     MIDISetClockMode(port_t driver, port_t owner, short synchUnit, int mode);
  96. extern kern_return_t 
  97.     MIDISetClockQuantum(port_t driver, port_t owner, int microseconds);
  98. extern kern_return_t 
  99.     MIDISetClockTime(port_t driver, port_t owner, int time);
  100. extern kern_return_t 
  101.     MIDIGetClockTime(port_tBver, port_t owner, int *time);
  102. extern kern_return_t 
  103.     MIDIGetMTCTime(port_t driver, port_t owner, short *format, short *hours, short *minutes, short *seconds, short *frames);
  104. extern kern_return_t 
  105.     MIDIStartClock(port_t driver, port_t owner);
  106. extern kern_return_t 
  107.     MIDIStopClock(port_t driver, port_t owner);
  108.  
  109. /****************** Requesting asynchronous messages *******************/
  110. extern kern_return_t 
  111.     MIDIRequestData(port_t driver, port_t owner, short unit, port_t replyPort);
  112. extern kern_return_t 
  113.     MIDIRequestAlarm(port_t driver, port_t owner, port_t replyPort, int time);
  114. extern kern_return_t 
  115.     MIDIRequestExceptions(port_t driver, port_t owner, port_t exceptionPort);
  116. extern kern_return_t 
  117.     MIDIRequestQueueNotification(port_t driver, port_t owner, short unit, port_t notificationPort, int size);
  118.  
  119. /****************** Receiving asynchronous messages *******************/
  120. extern kern_return_t 
  121.     MIDIAwaitReply(port_t ports, MIDIReplyFunctions *funcs, int timeout);
  122.  
  123. #define MIDI_NO_TIMEOUT (-1)
  124.  
  125. extern kern_return_t 
  126.     MIDIHandleReply(msg_header_t *msg,MIDIReplyFunctions *funcs);
  127.  
  128. /****************** Writing MIDI data to the driver *********************/
  129. extern kern_return_t 
  130.     MIDISendData(port_t driver, port_t owner, short unit, MIDIRawEvent *data, unsigned int count);
  131. extern kern_return_t 
  132.     MIDIGetAvailableQueueSize(port_t driver, port_t owner, short unit, int *size);
  133. extern kern_return_t 
  134.     MIDIClearQueue(port_t driver, port_t owner, short unit);
  135. extern kern_return_t 
  136.     MIDIFlushQueue(port_t device_port, port_name_t owner_port, short unit);
  137.  
  138. /********************* Filtering MIDI system real time messages. *************/
  139. extern kern_return_t 
  140.     MIDISetSystemIgnores(port_t driver, port_t owner, short unit, unsigned int ignoreBits);
  141.  
  142. #endif _MIDI_DRIVER_
  143.