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