1 /* DSSI ALSA compatibility library
2  *
3  * This library provides for Mac OS X the ALSA snd_seq_event_t handling
4  * necessary to compile and run DSSI.  It was extracted from alsa-lib 1.0.8.
5  */
6 
7 /**
8  * \file <alsa/seq.h>
9  * \brief Application interface library for the ALSA driver
10  * \author Jaroslav Kysela <perex@suse.cz>
11  * \author Abramo Bagnara <abramo@alsa-project.org>
12  * \author Takashi Iwai <tiwai@suse.de>
13  * \date 1998-2001
14  */
15 /*
16  * Application interface library for the ALSA driver
17  *
18  *
19  *   This library is free software; you can redistribute it and/or modify
20  *   it under the terms of the GNU Lesser General Public License as
21  *   published by the Free Software Foundation; either version 2.1 of
22  *   the License, or (at your option) any later version.
23  *
load_test_data(f, optsplit=[])24  *   This program is distributed in the hope that it will be useful,
25  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
26  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
27  *   GNU Lesser General Public License for more details.
28  *
29  *   You should have received a copy of the GNU Lesser General Public
30  *   License along with this library; if not, write to the Free Software
31  *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
32  *
33  */
34 
35 #ifndef __ALSA_SEQ_H
36 #define __ALSA_SEQ_H
37 
38 #ifdef __cplusplus
39 extern "C" {
40 #endif
41 
42 /**
43  *  \defgroup SeqEvType Sequencer Event Type Checks
44  *  Sequencer Event Type Checks
45  *  \ingroup Sequencer
46  *  \{
47  */
48 
49 /* event type macros */
50 enum {
51         SND_SEQ_EVFLG_RESULT,
52         SND_SEQ_EVFLG_NOTE,
53         SND_SEQ_EVFLG_CONTROL,
54         SND_SEQ_EVFLG_QUEUE,
55         SND_SEQ_EVFLG_SYSTEM,
56         SND_SEQ_EVFLG_MESSAGE,
57         SND_SEQ_EVFLG_CONNECTION,
58         SND_SEQ_EVFLG_SAMPLE,
59         SND_SEQ_EVFLG_USERS,
60         SND_SEQ_EVFLG_INSTR,
61         SND_SEQ_EVFLG_QUOTE,
62         SND_SEQ_EVFLG_NONE,
63         SND_SEQ_EVFLG_RAW,
64         SND_SEQ_EVFLG_FIXED,
65         SND_SEQ_EVFLG_VARIABLE,
66         SND_SEQ_EVFLG_VARUSR
67 };
68 
69 enum {
70         SND_SEQ_EVFLG_NOTE_ONEARG,
71         SND_SEQ_EVFLG_NOTE_TWOARG
72 };
73 
74 enum {
75         SND_SEQ_EVFLG_QUEUE_NOARG,
76         SND_SEQ_EVFLG_QUEUE_TICK,
77         SND_SEQ_EVFLG_QUEUE_TIME,
78         SND_SEQ_EVFLG_QUEUE_VALUE
79 };
80 
81 /**
82  * Exported event type table
83  *
84  * This table is referred by snd_seq_ev_is_xxx.
85  */
86 extern const unsigned int snd_seq_event_types[];
87 
88 #define _SND_SEQ_TYPE(x)        (1<<(x))        /**< master type - 24bit */
89 #define _SND_SEQ_TYPE_OPT(x)        ((x)<<24)        /**< optional type - 8bit */
90 
91 /** check the event type */
92 #define snd_seq_type_check(ev,x) (snd_seq_event_types[(ev)->type] & _SND_SEQ_TYPE(x))
93 
94 /** event type check: result events */
95 #define snd_seq_ev_is_result_type(ev) \
96         snd_seq_type_check(ev, SND_SEQ_EVFLG_RESULT)
97 /** event type check: note events */
98 #define snd_seq_ev_is_note_type(ev) \
99         snd_seq_type_check(ev, SND_SEQ_EVFLG_NOTE)
100 /** event type check: control events */
101 #define snd_seq_ev_is_control_type(ev) \
102         snd_seq_type_check(ev, SND_SEQ_EVFLG_CONTROL)
103 /** event type check: channel specific events */
104 #define snd_seq_ev_is_channel_type(ev) \
105         (snd_seq_event_types[(ev)->type] & (_SND_SEQ_TYPE(SND_SEQ_EVFLG_NOTE) | _SND_SEQ_TYPE(SND_SEQ_EVFLG_CONTROL)))
106 
107 /** event type check: queue control events */
108 #define snd_seq_ev_is_queue_type(ev) \
109         snd_seq_type_check(ev, SND_SEQ_EVFLG_QUEUE)
110 /** event type check: system status messages */
111 #define snd_seq_ev_is_message_type(ev) \
112         snd_seq_type_check(ev, SND_SEQ_EVFLG_MESSAGE)
113 /** event type check: system status messages */
114 #define snd_seq_ev_is_subscribe_type(ev) \
115         snd_seq_type_check(ev, SND_SEQ_EVFLG_CONNECTION)
116 /** event type check: sample messages */
117 #define snd_seq_ev_is_sample_type(ev) \
118         snd_seq_type_check(ev, SND_SEQ_EVFLG_SAMPLE)
119 /** event type check: user-defined messages */
120 #define snd_seq_ev_is_user_type(ev) \
121         snd_seq_type_check(ev, SND_SEQ_EVFLG_USERS)
122 /** event type check: instrument layer events */
123 #define snd_seq_ev_is_instr_type(ev) \
124         snd_seq_type_check(ev, SND_SEQ_EVFLG_INSTR)
125 /** event type check: fixed length events */
126 #define snd_seq_ev_is_fixed_type(ev) \
127         snd_seq_type_check(ev, SND_SEQ_EVFLG_FIXED)
128 /** event type check: variable length events */
129 #define snd_seq_ev_is_variable_type(ev)        \
130         snd_seq_type_check(ev, SND_SEQ_EVFLG_VARIABLE)
131 /** event type check: user pointer events */
132 #define snd_seq_ev_is_varusr_type(ev) \
133         snd_seq_type_check(ev, SND_SEQ_EVFLG_VARUSR)
134 /** event type check: reserved for kernel */
135 #define snd_seq_ev_is_reserved(ev) \
136         (! snd_seq_event_types[(ev)->type])
137 
138 /**
139  * macros to check event flags
140  */
141 /** prior events */
142 #define snd_seq_ev_is_prior(ev)        \
143         (((ev)->flags & SND_SEQ_PRIORITY_MASK) == SND_SEQ_PRIORITY_HIGH)
144 
145 /** get the data length type */
146 #define snd_seq_ev_length_type(ev) \
147         ((ev)->flags & SND_SEQ_EVENT_LENGTH_MASK)
148 /** fixed length events */
149 #define snd_seq_ev_is_fixed(ev)        \
150         (snd_seq_ev_length_type(ev) == SND_SEQ_EVENT_LENGTH_FIXED)
151 /** variable length events */
152 #define snd_seq_ev_is_variable(ev) \
153         (snd_seq_ev_length_type(ev) == SND_SEQ_EVENT_LENGTH_VARIABLE)
154 /** variable length on user-space */
155 #define snd_seq_ev_is_varusr(ev) \
156         (snd_seq_ev_length_type(ev) == SND_SEQ_EVENT_LENGTH_VARUSR)
157 
158 /** time-stamp type */
159 #define snd_seq_ev_timestamp_type(ev) \
160         ((ev)->flags & SND_SEQ_TIME_STAMP_MASK)
161 /** event is in tick time */
162 #define snd_seq_ev_is_tick(ev) \
163         (snd_seq_ev_timestamp_type(ev) == SND_SEQ_TIME_STAMP_TICK)
164 /** event is in real-time */
165 #define snd_seq_ev_is_real(ev) \
166         (snd_seq_ev_timestamp_type(ev) == SND_SEQ_TIME_STAMP_REAL)
167 
168 /** time-mode type */
169 #define snd_seq_ev_timemode_type(ev) \
170         ((ev)->flags & SND_SEQ_TIME_MODE_MASK)
171 /** scheduled in absolute time */
172 #define snd_seq_ev_is_abstime(ev) \
173         (snd_seq_ev_timemode_type(ev) == SND_SEQ_TIME_MODE_ABS)
174 /** scheduled in relative time */
175 #define snd_seq_ev_is_reltime(ev) \
176         (snd_seq_ev_timemode_type(ev) == SND_SEQ_TIME_MODE_REL)
177 
178 /** direct dispatched events */
179 #define snd_seq_ev_is_direct(ev) \
180         ((ev)->queue == SND_SEQ_QUEUE_DIRECT)
181 
182 /** \} */
183 
184 #ifdef __cplusplus
185 }
186 #endif
187 
188 #endif /* __ALSA_SEQ_H */
189 
190