home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
NeXTSTEP 3.0
/
NeXTSTEP3.0.iso
/
NextDeveloper
/
Headers
/
mididriver
/
midi_driver.h
next >
Wrap
Text File
|
1991-11-14
|
5KB
|
143 lines
/*
* File: <midi/midi_driver.h>
* Author: David Jaffe
* Copyright (C) 1991, NeXT Computer, Inc.
*
* MIDI driver typedefs, defines, and functions
*/
#ifndef _MIDI_DRIVER_
#define _MIDI_DRIVER_
#import <mach/kern_return.h>
#import <mach/message.h>
#import <mach/port.h>
/* Each event consists of a byte and a time stamp. */
typedef struct {
int time; /* Absolute time in quanta */
unsigned char byte; /* The byte */
} MIDIRawEvent;
/* MIDI_MAX_EVENT is the maximum number of events that can be
* sent to or received from the driver in a single package.
*/
#define MIDI_MAX_EVENT 100
/* MIDI_MAX_MSG_SIZE is the maximum size of the message you
* can receive from the driver.
*/
#define MIDI_MAX_MSG_SIZE 1024 // More than enough
/* Clock modes */
#dAe MIDI_CLOCK_MODE_INTERNAL 0
#define MIDI_CLOCK_MODE_MTC_SYNC 1
/* error codes */
#define MIDI_ERROR_BUSY 100
#define MIDI_ERROR_NOT_OWNER 101
#define MIDI_ERROR_QUEUE_FULL 102
#define MIDI_ERROR_BAD_MODE 103
#define MIDI_ERROR_UNIT_UNAVAILABLE 104
#define MIDI_ERROR_ILLEGAL_OPERATION 105
#define MIDI_ERROR_UNKNOWN_ERROR 106
/* exception codes */
#define MIDI_EXCEPTION_MTC_STOPPED 1
#define MIDI_EXCEPTION_MTC_STARTED_FORWARD 2
#define MIDI_EXCEPTION_MTC_STARTED_REVERSE 3
/* Defines for system ignores. */
#define MIDI_IGNORE_CLOCK 0x0100
#define MIDI_IGNORE_START 0x0400
#define MIDI_IGNORE_CONTINUE 0x0800
#define MIDI_IGNORE_STOP 0x1000
#define MIDI_IGNORE_ACTIVE 0x4000
#define MIDI_IGNORE_RESET 0x8000
#define MIDI_IGNORE_REAL_TIME 0xdd00 /* All of the above */
#define MIDI_PORT_A_UNIT 0
#define MIDI_PORT_B_UNIT 1
/* Reply function types. */
typedef void (*MIDIDataReplyFunction)
(port_t replyPort, short unit, MIDIRawEvent *events, unsigned int count);
typedef void (*MIDIAlarmReplyFunction)
(port_t replyPort, int requestedTime, int actualTime);
typedef void (*MIDIExceptionReplyFunction)
(port_t replyPort, int exception);
typedef void (*MIDIQueueReplyFunction)
(port_t replyPort, short unit);
/* Struct for passing reply functions to mididriver library. */
typedef struct _MIDIReplyFunctions {
MIDIDataReplyFunction dataReply;
MIDIAlarmReplyFunction alarmReply;
MIDIExceptionReplyFunction exceptionReply;
MIDIQueueReplyFunction queueReply;
} MIDIReplyFunctions;
/******* Managing ownership of the driver ********/
extern kern_return_t
MIDIBecomeOwner(port_t driver, port_t owner);
extern kern_return_t
MIDIReleaseOwnership(port_t driver, port_t owner);
/*** Claiming a particular serial port (ownership of driver required) *****/
extern kern_return_t
MIDIClaimUnit(port_t driver, port_t owner, short unit);
extern kern_return_t
MIDIReleaseUnit(port_t driver, port_t owner, short unit);
/******** Controlling the clock ****************/
extern kern_return_t
MIDISetClockMode(port_t driver, port_t owner, short synchUnit, int mode);
extern kern_return_t
MIDISetClockQuantum(port_t driver, port_t owner, int microseconds);
extern kern_return_t
MIDISetClockTime(port_t driver, port_t owner, int time);
extern kern_return_t
MIDIGetClockTime(port_tBver, port_t owner, int *time);
extern kern_return_t
MIDIGetMTCTime(port_t driver, port_t owner, short *format, short *hours, short *minutes, short *seconds, short *frames);
extern kern_return_t
MIDIStartClock(port_t driver, port_t owner);
extern kern_return_t
MIDIStopClock(port_t driver, port_t owner);
/****************** Requesting asynchronous messages *******************/
extern kern_return_t
MIDIRequestData(port_t driver, port_t owner, short unit, port_t replyPort);
extern kern_return_t
MIDIRequestAlarm(port_t driver, port_t owner, port_t replyPort, int time);
extern kern_return_t
MIDIRequestExceptions(port_t driver, port_t owner, port_t exceptionPort);
extern kern_return_t
MIDIRequestQueueNotification(port_t driver, port_t owner, short unit, port_t notificationPort, int size);
/****************** Receiving asynchronous messages *******************/
extern kern_return_t
MIDIAwaitReply(port_t ports, MIDIReplyFunctions *funcs, int timeout);
#define MIDI_NO_TIMEOUT (-1)
extern kern_return_t
MIDIHandleReply(msg_header_t *msg,MIDIReplyFunctions *funcs);
/****************** Writing MIDI data to the driver *********************/
extern kern_return_t
MIDISendData(port_t driver, port_t owner, short unit, MIDIRawEvent *data, unsigned int count);
extern kern_return_t
MIDIGetAvailableQueueSize(port_t driver, port_t owner, short unit, int *size);
extern kern_return_t
MIDIClearQueue(port_t driver, port_t owner, short unit);
extern kern_return_t
MIDIFlushQueue(port_t device_port, port_name_t owner_port, short unit);
/********************* Filtering MIDI system real time messages. *************/
extern kern_return_t
MIDISetSystemIgnores(port_t driver, port_t owner, short unit, unsigned int ignoreBits);
#endif _MIDI_DRIVER_