1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
|
/*
**********************************************************************
* isblive_mid.h
* Copyright 1999, 2000 Creative Labs, Inc.
*
**********************************************************************
*
* Date Author Summary of changes
* ---- ------ ------------------
* October 20, 1999 Bertrand Lee base code release
*
**********************************************************************
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public
* License along with this program; if not, write to the Free
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139,
* USA.
*
**********************************************************************
*/
#ifndef _ICARDMIDI_H
#define _ICARDMIDI_H
/* MIDI defines */
#define MIDI_DATA_FIRST 0x00
#define MIDI_DATA_LAST 0x7F
#define MIDI_STATUS_FIRST 0x80
#define MIDI_STATUS_LAST 0xFF
/* Channel status bytes */
#define MIDI_STATUS_CHANNEL_FIRST 0x80
#define MIDI_STATUS_CHANNEL_LAST 0xE0
#define MIDI_STATUS_CHANNEL_MASK 0xF0
/* Channel voice messages */
#define MIDI_VOICE_NOTE_OFF 0x80
#define MIDI_VOICE_NOTE_ON 0x90
#define MIDI_VOICE_POLY_PRESSURE 0xA0
#define MIDI_VOICE_CONTROL_CHANGE 0xB0
#define MIDI_VOICE_PROGRAM_CHANGE 0xC0
#define MIDI_VOICE_CHANNEL_PRESSURE 0xD0
#define MIDI_VOICE_PITCH_BEND 0xE0
/* Channel mode messages */
#define MIDI_MODE_CHANNEL MIDI_VOICE_CONTROL_CHANGE
/* System status bytes */
#define MIDI_STATUS_SYSTEM_FIRST 0xF0
#define MIDI_STATUS_SYSTEM_LAST 0xFF
/* System exclusive messages */
#define MIDI_SYSEX_BEGIN 0xF0
#define MIDI_SYSEX_EOX 0xF7
/* System common messages */
#define MIDI_COMMON_TCQF 0xF1 /* Time code quarter frame */
#define MIDI_COMMON_SONG_POSITION 0xF2
#define MIDI_COMMON_SONG_SELECT 0xF3
#define MIDI_COMMON_UNDEFINED_F4 0xF4
#define MIDI_COMMON_UNDEFINED_F5 0xF5
#define MIDI_COMMON_TUNE_REQUEST 0xF6
/* System real-time messages */
#define MIDI_RTIME_TIMING_CLOCK 0xF8
#define MIDI_RTIME_UNDEFINED_F9 0xF9
#define MIDI_RTIME_START 0xFA
#define MIDI_RTIME_CONTINUE 0xFB
#define MIDI_RTIME_STOP 0xFC
#define MIDI_RTIME_UNDEFINED_FD 0xFD
#define MIDI_RTIME_ACTIVE_SENSING 0xFE
#define MIDI_RTIME_SYSTEM_RESET 0xFF
/* Flags for flags parm of midiOutCachePatches(), midiOutCacheDrumPatches() */
#define MIDI_CACHE_ALL 1
#define MIDI_CACHE_BESTFIT 2
#define MIDI_CACHE_QUERY 3
#define MIDI_UNCACHE 4
/* Event declarations for MPU IRQ Callbacks */
#define ICARDMIDI_INLONGDATA 0x00000001 /* MIM_LONGDATA */
#define ICARDMIDI_INLONGERROR 0x00000002 /* MIM_LONGERROR */
#define ICARDMIDI_OUTLONGDATA 0x00000004 /* MOM_DONE for MPU OUT buffer */
#define ICARDMIDI_INDATA 0x00000010 /* MIM_DATA */
#define ICARDMIDI_INDATAERROR 0x00000020 /* MIM_ERROR */
/* Declaration for flags in CARDMIDIBUFFERHDR */
/* Make it the same as MHDR_DONE, MHDR_INQUEUE in mmsystem.h */
#define MIDIBUF_DONE 0x00000001
#define MIDIBUF_INQUEUE 0x00000004
/* Declaration for msg parameter in midiCallbackFn */
#define ICARDMIDI_OUTBUFFEROK 0x00000001
#define ICARDMIDI_INMIDIOK 0x00000002
/* Declaration for technology in struct midi_caps */
#define MT_MIDIPORT 0x00000001 /* In original MIDIOUTCAPS structure */
#define MT_FMSYNTH 0x00000004 /* In original MIDIOUTCAPS structure */
#define MT_AWESYNTH 0x00001000
#define MT_PCISYNTH 0x00002000
#define MT_PCISYNTH64 0x00004000
#define CARDMIDI_AWEMASK 0x0000F000
enum LocalErrorCode
{
CTSTATUS_NOTENABLED = 0x7000,
CTSTATUS_READY,
CTSTATUS_BUSY,
CTSTATUS_DATAAVAIL,
CTSTATUS_NODATA,
CTSTATUS_NEXT_BYTE
};
/* MIDI data block header */
struct midi_hdr
{
u8 *reserved; /* Pointer to original locked data block */
u32 bufferlength; /* Length of data in data block */
u32 bytesrecorded; /* Used for input only */
u32 user; /* For client's use */
u32 flags; /* Assorted flags (see defines) */
struct list_head list; /* Reserved for driver */
u8 *data; /* Second copy of first pointer */
};
/* Enumeration for SetControl */
enum
{
MIDIOBJVOLUME = 0x1,
MIDIQUERYACTIVEINST
};
struct midi_queue
{
struct midi_queue *next;
u32 qtype; /* 0 = short message, 1 = long data */
u32 length;
u32 sizeLeft;
u8 *midibyte;
unsigned long refdata;
};
struct midi_openinfo
{
u32 cbsize;
u32 flags;
unsigned long refdata;
u32 streamid;
};
int emu10k1_midi_callback(unsigned long , unsigned long, unsigned long *);
#endif /* _ICARDMIDI_H */
|