1 // Copyright © 2015, Peter Atashian
2 // Licensed under the MIT License <LICENSE.md>
3 //! MM procedure declarations, constant definitions and macros
4 //109 (Win 7 SDK)
5 pub type MMVERSION = ::UINT;
6 pub type MMRESULT = ::UINT;
7 STRUCT!{struct MMTIME {
8     wType: ::UINT,
9     u: MMTIME_u,
10 }}
11 pub type PMMTIME = *mut MMTIME;
12 pub type NPMMTIME = *mut MMTIME;
13 pub type LPMMTIME = *mut MMTIME;
14 STRUCT!{struct MMTIME_u {
15     data: [u8; 8],
16 }}
17 UNION!(MMTIME_u, data, ms, ms_mut, ::DWORD);
18 UNION!(MMTIME_u, data, sample, sample_mut, ::DWORD);
19 UNION!(MMTIME_u, data, cb, cb_mut, ::DWORD);
20 UNION!(MMTIME_u, data, ticks, ticks_mut, ::DWORD);
21 UNION!(MMTIME_u, data, smpte, smpte_mut, MMTIME_smpte);
22 UNION!(MMTIME_u, data, midi, midi_mut, MMTIME_midi);
23 STRUCT!{struct MMTIME_smpte {
24     hour: ::BYTE,
25     min: ::BYTE,
26     sec: ::BYTE,
27     frame: ::BYTE,
28     fps: ::BYTE,
29     dummy: ::BYTE,
30     pad: [::BYTE; 2],
31 }}
32 STRUCT!{struct MMTIME_midi {
33     songptrpos: ::DWORD,
34 }}
35 pub const TIME_MS: ::UINT = 0x0001;
36 pub const TIME_SAMPLES: ::UINT = 0x0002;
37 pub const TIME_BYTES: ::UINT = 0x0004;
38 pub const TIME_SMPTE: ::UINT = 0x0008;
39 pub const TIME_MIDI: ::UINT = 0x0010;
40 pub const TIME_TICKS: ::UINT = 0x0020;
41 pub const MM_JOY1MOVE: ::UINT = 0x3A0;
42 pub const MM_JOY2MOVE: ::UINT = 0x3A1;
43 pub const MM_JOY1ZMOVE: ::UINT = 0x3A2;
44 pub const MM_JOY2ZMOVE: ::UINT = 0x3A3;
45 pub const MM_JOY1BUTTONDOWN: ::UINT = 0x3B5;
46 pub const MM_JOY2BUTTONDOWN: ::UINT = 0x3B6;
47 pub const MM_JOY1BUTTONUP: ::UINT = 0x3B7;
48 pub const MM_JOY2BUTTONUP: ::UINT = 0x3B8;
49 pub const MM_MCINOTIFY: ::UINT = 0x3B9;
50 pub const MM_WOM_OPEN: ::UINT = 0x3BB;
51 pub const MM_WOM_CLOSE: ::UINT = 0x3BC;
52 pub const MM_WOM_DONE: ::UINT = 0x3BD;
53 pub const MM_WIM_OPEN: ::UINT = 0x3BE;
54 pub const MM_WIM_CLOSE: ::UINT = 0x3BF;
55 pub const MM_WIM_DATA: ::UINT = 0x3C0;
56 pub const MM_MIM_OPEN: ::UINT = 0x3C1;
57 pub const MM_MIM_CLOSE: ::UINT = 0x3C2;
58 pub const MM_MIM_DATA: ::UINT = 0x3C3;
59 pub const MM_MIM_LONGDATA: ::UINT = 0x3C4;
60 pub const MM_MIM_ERROR: ::UINT = 0x3C5;
61 pub const MM_MIM_LONGERROR: ::UINT = 0x3C6;
62 pub const MM_MOM_OPEN: ::UINT = 0x3C7;
63 pub const MM_MOM_CLOSE: ::UINT = 0x3C8;
64 pub const MM_MOM_DONE: ::UINT = 0x3C9;
65 pub const MMSYSERR_BASE: MMRESULT = 0;
66 pub const WAVERR_BASE: MMRESULT = 32;
67 pub const MIDIERR_BASE: MMRESULT = 64;
68 pub const TIMERR_BASE: MMRESULT = 96;
69 pub const JOYERR_BASE: MMRESULT = 160;
70 pub const MCIERR_BASE: MMRESULT = 256;
71 pub const MIXERR_BASE: MMRESULT = 1024;
72 pub const MMSYSERR_NOERROR: MMRESULT = 0;
73 pub const MMSYSERR_ERROR: MMRESULT = MMSYSERR_BASE + 1;
74 pub const MMSYSERR_BADDEVICEID: MMRESULT = MMSYSERR_BASE + 2;
75 pub const MMSYSERR_NOTENABLED: MMRESULT = MMSYSERR_BASE + 3;
76 pub const MMSYSERR_ALLOCATED: MMRESULT = MMSYSERR_BASE + 4;
77 pub const MMSYSERR_INVALHANDLE: MMRESULT = MMSYSERR_BASE + 5;
78 pub const MMSYSERR_NODRIVER: MMRESULT = MMSYSERR_BASE + 6;
79 pub const MMSYSERR_NOMEM: MMRESULT = MMSYSERR_BASE + 7;
80 pub const MMSYSERR_NOTSUPPORTED: MMRESULT = MMSYSERR_BASE + 8;
81 pub const MMSYSERR_BADERRNUM: MMRESULT = MMSYSERR_BASE + 9;
82 pub const MMSYSERR_INVALFLAG: MMRESULT = MMSYSERR_BASE + 10;
83 pub const MMSYSERR_INVALPARAM: MMRESULT = MMSYSERR_BASE + 11;
84 pub const MMSYSERR_HANDLEBUSY: MMRESULT = MMSYSERR_BASE + 12;
85 pub const MMSYSERR_INVALIDALIAS: MMRESULT = MMSYSERR_BASE + 13;
86 pub const MMSYSERR_BADDB: MMRESULT = MMSYSERR_BASE + 14;
87 pub const MMSYSERR_KEYNOTFOUND: MMRESULT = MMSYSERR_BASE + 15;
88 pub const MMSYSERR_READERROR: MMRESULT = MMSYSERR_BASE + 16;
89 pub const MMSYSERR_WRITEERROR: MMRESULT = MMSYSERR_BASE + 17;
90 pub const MMSYSERR_DELETEERROR: MMRESULT = MMSYSERR_BASE + 18;
91 pub const MMSYSERR_VALNOTFOUND: MMRESULT = MMSYSERR_BASE + 19;
92 pub const MMSYSERR_NODRIVERCB: MMRESULT = MMSYSERR_BASE + 20;
93 pub const MMSYSERR_MOREDATA: MMRESULT = MMSYSERR_BASE + 21;
94 pub const MMSYSERR_LASTERROR: MMRESULT = MMSYSERR_BASE + 21;
95 pub const MIDIERR_UNPREPARED: MMRESULT = MIDIERR_BASE + 0;
96 pub const MIDIERR_STILLPLAYING: MMRESULT = MIDIERR_BASE + 1;
97 pub const MIDIERR_NOMAP: MMRESULT = MIDIERR_BASE + 2;
98 pub const MIDIERR_NOTREADY: MMRESULT = MIDIERR_BASE + 3;
99 pub const MIDIERR_NODEVICE: MMRESULT = MIDIERR_BASE + 4;
100 pub const MIDIERR_INVALIDSETUP: MMRESULT = MIDIERR_BASE + 5;
101 pub const MIDIERR_BADOPENMODE: MMRESULT = MIDIERR_BASE + 6;
102 pub const MIDIERR_DONT_CONTINUE: MMRESULT = MIDIERR_BASE + 7;
103 pub const MIDIERR_LASTERROR: MMRESULT = MIDIERR_BASE + 7;
104 pub const CALLBACK_TYPEMASK: ::DWORD = 0x00070000;
105 pub const CALLBACK_NULL: ::DWORD = 0x00000000;
106 pub const CALLBACK_WINDOW: ::DWORD = 0x00010000;
107 pub const CALLBACK_TASK: ::DWORD = 0x00020000;
108 pub const CALLBACK_FUNCTION: ::DWORD = 0x00030000;
109 pub const CALLBACK_THREAD: ::DWORD = CALLBACK_TASK;
110 pub const CALLBACK_EVENT: ::DWORD = 0x00050000;
111 //497 (Win 7 SDK)
112 pub const WAVERR_BADFORMAT: MMRESULT = WAVERR_BASE + 0;
113 pub const WAVERR_STILLPLAYING: MMRESULT = WAVERR_BASE + 1;
114 pub const WAVERR_UNPREPARED: MMRESULT = WAVERR_BASE + 2;
115 pub const WAVERR_SYNC: MMRESULT = WAVERR_BASE + 3;
116 pub const WAVERR_LASTERROR: MMRESULT = WAVERR_BASE + 3;
117 DECLARE_HANDLE!(HWAVEIN, HWAVEIN__);
118 DECLARE_HANDLE!(HWAVEOUT, HWAVEOUT__);
119 pub type LPHWAVEIN = *mut HWAVEIN;
120 pub type LPHWAVEOUT = *mut HWAVEOUT;
121 pub const WOM_OPEN: ::UINT = MM_WOM_OPEN;
122 pub const WOM_CLOSE: ::UINT = MM_WOM_CLOSE;
123 pub const WOM_DONE: ::UINT = MM_WOM_DONE;
124 pub const WIM_OPEN: ::UINT = MM_WIM_OPEN;
125 pub const WIM_CLOSE: ::UINT = MM_WIM_CLOSE;
126 pub const WIM_DATA: ::UINT = MM_WIM_DATA;
127 pub const WAVE_MAPPER: ::UINT = 0xFFFFFFFF;
128 pub const WAVE_FORMAT_QUERY: ::DWORD = 0x0001;
129 pub const WAVE_ALLOWSYNC: ::DWORD = 0x0002;
130 pub const WAVE_MAPPED: ::DWORD = 0x0004;
131 pub const WAVE_FORMAT_DIRECT: ::DWORD = 0x0008;
132 pub const WAVE_FORMAT_DIRECT_QUERY: ::DWORD = WAVE_FORMAT_QUERY | WAVE_FORMAT_DIRECT;
133 pub const WAVE_MAPPED_DEFAULT_COMMUNICATION_DEVICE: ::DWORD = 0x0010;
134 STRUCT!{struct WAVEHDR {
135     lpData: ::LPSTR,
136     dwBufferLength: ::DWORD,
137     dwBytesRecorded: ::DWORD,
138     dwUser: ::DWORD_PTR,
139     dwFlags: ::DWORD,
140     dwLoops: ::DWORD,
141     lpNext: *mut WAVEHDR,
142     reserved: ::DWORD_PTR,
143 }}
144 pub type PWAVEHDR = *mut WAVEHDR;
145 pub type NPWAVEHDR = *mut WAVEHDR;
146 pub type LPWAVEHDR = *mut WAVEHDR;
147 STRUCT!{struct WAVEOUTCAPSW {
148     wMid: ::WORD,
149     wPid: ::WORD,
150     vDriverVersion: MMVERSION,
151     szPname: [::WCHAR; 32],
152     dwFormats: ::DWORD,
153     wChannels: ::WORD,
154     wReserved1: ::WORD,
155     dwSupport: ::DWORD,
156 }}
157 pub type PWAVEOUTCAPSW = *mut WAVEOUTCAPSW;
158 pub type NPWAVEOUTCAPSW = *mut WAVEOUTCAPSW;
159 pub type LPWAVEOUTCAPSW = *mut WAVEOUTCAPSW;
160 STRUCT!{struct WAVEINCAPSW {
161     wMid: ::WORD,
162     wPid: ::WORD,
163     vDriverVersion: MMVERSION,
164     szPname: [::WCHAR; 32],
165     dwFormats: ::DWORD,
166     wChannels: ::WORD,
167     wReserved1: ::WORD,
168 }}
169 pub type PWAVEINCAPSW = *mut WAVEINCAPSW;
170 pub type NPWAVEINCAPSW = *mut WAVEINCAPSW;
171 pub type LPWAVEINCAPSW = *mut WAVEINCAPSW;
172 pub const WAVE_INVALIDFORMAT: ::DWORD = 0x00000000;
173 pub const WAVE_FORMAT_1M08: ::DWORD = 0x00000001;
174 pub const WAVE_FORMAT_1S08: ::DWORD = 0x00000002;
175 pub const WAVE_FORMAT_1M16: ::DWORD = 0x00000004;
176 pub const WAVE_FORMAT_1S16: ::DWORD = 0x00000008;
177 pub const WAVE_FORMAT_2M08: ::DWORD = 0x00000010;
178 pub const WAVE_FORMAT_2S08: ::DWORD = 0x00000020;
179 pub const WAVE_FORMAT_2M16: ::DWORD = 0x00000040;
180 pub const WAVE_FORMAT_2S16: ::DWORD = 0x00000080;
181 pub const WAVE_FORMAT_4M08: ::DWORD = 0x00000100;
182 pub const WAVE_FORMAT_4S08: ::DWORD = 0x00000200;
183 pub const WAVE_FORMAT_4M16: ::DWORD = 0x00000400;
184 pub const WAVE_FORMAT_4S16: ::DWORD = 0x00000800;
185 pub const WAVE_FORMAT_44M08: ::DWORD = 0x00000100;
186 pub const WAVE_FORMAT_44S08: ::DWORD = 0x00000200;
187 pub const WAVE_FORMAT_44M16: ::DWORD = 0x00000400;
188 pub const WAVE_FORMAT_44S16: ::DWORD = 0x00000800;
189 pub const WAVE_FORMAT_48M08: ::DWORD = 0x00001000;
190 pub const WAVE_FORMAT_48S08: ::DWORD = 0x00002000;
191 pub const WAVE_FORMAT_48M16: ::DWORD = 0x00004000;
192 pub const WAVE_FORMAT_48S16: ::DWORD = 0x00008000;
193 pub const WAVE_FORMAT_96M08: ::DWORD = 0x00010000;
194 pub const WAVE_FORMAT_96S08: ::DWORD = 0x00020000;
195 pub const WAVE_FORMAT_96M16: ::DWORD = 0x00040000;
196 pub const WAVE_FORMAT_96S16: ::DWORD = 0x00080000;
197 //782 (Win 7 SDK)
198 pub type PWAVEFORMATEX = *mut ::WAVEFORMATEX;
199 pub type NPWAVEFORMATEX = *mut ::WAVEFORMATEX;
200 pub type LPWAVEFORMATEX = *mut ::WAVEFORMATEX;
201 pub type LPCWAVEFORMATEX = *const ::WAVEFORMATEX;
202 //2170 (Win 7 SDK)
203 pub const TIMERR_NOERROR: ::MMRESULT = 0;
204 pub const TIMERR_NOCANDO: ::MMRESULT = TIMERR_BASE + 1;
205 pub const TIMERR_STRUCT: ::MMRESULT = TIMERR_BASE + 33;
206 //2198 (Win 7 SDK)
207 STRUCT!{struct TIMECAPS {
208     wPeriodMin: ::UINT,
209     wPeriodMax: ::UINT,
210 }}
211 pub type PTIMECAPS = *mut TIMECAPS;
212 pub type NPTIMECAPS = *mut TIMECAPS;
213 pub type LPTIMECAPS = *mut TIMECAPS;
214 STRUCT!{struct MIDIHDR {
215     lpData: ::LPSTR,
216     dwBufferLength: ::DWORD,
217     dwBytesRecorded: ::DWORD,
218     dwUser: ::DWORD_PTR,
219     dwFlags: ::DWORD,
220     lpNext: *mut MIDIHDR,
221     reserved: ::DWORD_PTR,
222     dwOffset: ::DWORD,
223     dwReserved: [::DWORD_PTR; 4],
224 }}
225 pub type PMIDIHDR = *mut MIDIHDR;
226 pub type NPMIDIHDR = *mut MIDIHDR;
227 pub type LPMIDIHDR = *mut MIDIHDR;
228 STRUCT!{struct MIDIINCAPSW {
229     wMid: ::WORD,
230     wPid: ::WORD,
231     vDriverVersion: MMVERSION,
232     szPname: [::WCHAR; 32],
233     dwSupport: ::DWORD,
234 }}
235 pub type PMIDIINCAPSW = *mut MIDIINCAPSW;
236 pub type NPMIDIINCAPSW = *mut MIDIINCAPSW;
237 pub type LPMIDIINCAPSW = *mut MIDIINCAPSW;
238 STRUCT!{struct MIDIOUTCAPSW {
239     wMid: ::WORD,
240     wPid: ::WORD,
241     vDriverVersion: ::MMVERSION,
242     szPname: [::WCHAR; 32],
243     wTechnology: ::WORD,
244     wVoices: ::WORD,
245     wNotes: ::WORD,
246     wChannelMask: ::WORD,
247     dwSupport: ::DWORD,
248 }}
249 pub type PMIDIOUTCAPSW = *mut MIDIOUTCAPSW;
250 pub type NPMIDIOUTCAPSW = *mut MIDIOUTCAPSW;
251 pub type LPMIDIOUTCAPSW = *mut MIDIOUTCAPSW;
252 DECLARE_HANDLE!(HMIDIIN, HMIDIIN__);
253 DECLARE_HANDLE!(HMIDIOUT, HMIDIOUT__);
254 pub type LPHMIDIIN = *mut HMIDIIN;
255 pub type LPHMIDIOUT = *mut HMIDIOUT;
256 DECLARE_HANDLE!(HMIDISTRM, HMIDISTRM__);
257 DECLARE_HANDLE!(HMIDI, HMIDI__);
258 pub type LPHMIDISTRM = *mut HMIDISTRM;
259 pub type LPHMIDI = *mut HMIDI;
260