lbajardsilogic@0: /* DSSI ALSA compatibility library lbajardsilogic@0: * lbajardsilogic@0: * This library provides for Mac OS X the ALSA snd_seq_event_t handling lbajardsilogic@0: * necessary to compile and run DSSI. It was extracted from alsa-lib 1.0.8. lbajardsilogic@0: */ lbajardsilogic@0: lbajardsilogic@0: /** lbajardsilogic@0: * \file lbajardsilogic@0: * \brief Application interface library for the ALSA driver lbajardsilogic@0: * \author Jaroslav Kysela lbajardsilogic@0: * \author Abramo Bagnara lbajardsilogic@0: * \author Takashi Iwai lbajardsilogic@0: * \date 1998-2001 lbajardsilogic@0: */ lbajardsilogic@0: /* lbajardsilogic@0: * Application interface library for the ALSA driver lbajardsilogic@0: * lbajardsilogic@0: * lbajardsilogic@0: * This library is free software; you can redistribute it and/or modify lbajardsilogic@0: * it under the terms of the GNU Lesser General Public License as lbajardsilogic@0: * published by the Free Software Foundation; either version 2.1 of lbajardsilogic@0: * the License, or (at your option) any later version. lbajardsilogic@0: * lbajardsilogic@0: * This program is distributed in the hope that it will be useful, lbajardsilogic@0: * but WITHOUT ANY WARRANTY; without even the implied warranty of lbajardsilogic@0: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the lbajardsilogic@0: * GNU Lesser General Public License for more details. lbajardsilogic@0: * lbajardsilogic@0: * You should have received a copy of the GNU Lesser General Public lbajardsilogic@0: * License along with this library; if not, write to the Free Software lbajardsilogic@0: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA lbajardsilogic@0: * lbajardsilogic@0: */ lbajardsilogic@0: lbajardsilogic@0: #ifndef __ALSA_SEQ_H lbajardsilogic@0: #define __ALSA_SEQ_H lbajardsilogic@0: lbajardsilogic@0: #ifdef __cplusplus lbajardsilogic@0: extern "C" { lbajardsilogic@0: #endif lbajardsilogic@0: lbajardsilogic@0: /** lbajardsilogic@0: * \defgroup SeqEvType Sequencer Event Type Checks lbajardsilogic@0: * Sequencer Event Type Checks lbajardsilogic@0: * \ingroup Sequencer lbajardsilogic@0: * \{ lbajardsilogic@0: */ lbajardsilogic@0: lbajardsilogic@0: /* event type macros */ lbajardsilogic@0: enum { lbajardsilogic@0: SND_SEQ_EVFLG_RESULT, lbajardsilogic@0: SND_SEQ_EVFLG_NOTE, lbajardsilogic@0: SND_SEQ_EVFLG_CONTROL, lbajardsilogic@0: SND_SEQ_EVFLG_QUEUE, lbajardsilogic@0: SND_SEQ_EVFLG_SYSTEM, lbajardsilogic@0: SND_SEQ_EVFLG_MESSAGE, lbajardsilogic@0: SND_SEQ_EVFLG_CONNECTION, lbajardsilogic@0: SND_SEQ_EVFLG_SAMPLE, lbajardsilogic@0: SND_SEQ_EVFLG_USERS, lbajardsilogic@0: SND_SEQ_EVFLG_INSTR, lbajardsilogic@0: SND_SEQ_EVFLG_QUOTE, lbajardsilogic@0: SND_SEQ_EVFLG_NONE, lbajardsilogic@0: SND_SEQ_EVFLG_RAW, lbajardsilogic@0: SND_SEQ_EVFLG_FIXED, lbajardsilogic@0: SND_SEQ_EVFLG_VARIABLE, lbajardsilogic@0: SND_SEQ_EVFLG_VARUSR lbajardsilogic@0: }; lbajardsilogic@0: lbajardsilogic@0: enum { lbajardsilogic@0: SND_SEQ_EVFLG_NOTE_ONEARG, lbajardsilogic@0: SND_SEQ_EVFLG_NOTE_TWOARG lbajardsilogic@0: }; lbajardsilogic@0: lbajardsilogic@0: enum { lbajardsilogic@0: SND_SEQ_EVFLG_QUEUE_NOARG, lbajardsilogic@0: SND_SEQ_EVFLG_QUEUE_TICK, lbajardsilogic@0: SND_SEQ_EVFLG_QUEUE_TIME, lbajardsilogic@0: SND_SEQ_EVFLG_QUEUE_VALUE lbajardsilogic@0: }; lbajardsilogic@0: lbajardsilogic@0: /** lbajardsilogic@0: * Exported event type table lbajardsilogic@0: * lbajardsilogic@0: * This table is referred by snd_seq_ev_is_xxx. lbajardsilogic@0: */ lbajardsilogic@0: extern const unsigned int snd_seq_event_types[]; lbajardsilogic@0: lbajardsilogic@0: #define _SND_SEQ_TYPE(x) (1<<(x)) /**< master type - 24bit */ lbajardsilogic@0: #define _SND_SEQ_TYPE_OPT(x) ((x)<<24) /**< optional type - 8bit */ lbajardsilogic@0: lbajardsilogic@0: /** check the event type */ lbajardsilogic@0: #define snd_seq_type_check(ev,x) (snd_seq_event_types[(ev)->type] & _SND_SEQ_TYPE(x)) lbajardsilogic@0: lbajardsilogic@0: /** event type check: result events */ lbajardsilogic@0: #define snd_seq_ev_is_result_type(ev) \ lbajardsilogic@0: snd_seq_type_check(ev, SND_SEQ_EVFLG_RESULT) lbajardsilogic@0: /** event type check: note events */ lbajardsilogic@0: #define snd_seq_ev_is_note_type(ev) \ lbajardsilogic@0: snd_seq_type_check(ev, SND_SEQ_EVFLG_NOTE) lbajardsilogic@0: /** event type check: control events */ lbajardsilogic@0: #define snd_seq_ev_is_control_type(ev) \ lbajardsilogic@0: snd_seq_type_check(ev, SND_SEQ_EVFLG_CONTROL) lbajardsilogic@0: /** event type check: channel specific events */ lbajardsilogic@0: #define snd_seq_ev_is_channel_type(ev) \ lbajardsilogic@0: (snd_seq_event_types[(ev)->type] & (_SND_SEQ_TYPE(SND_SEQ_EVFLG_NOTE) | _SND_SEQ_TYPE(SND_SEQ_EVFLG_CONTROL))) lbajardsilogic@0: lbajardsilogic@0: /** event type check: queue control events */ lbajardsilogic@0: #define snd_seq_ev_is_queue_type(ev) \ lbajardsilogic@0: snd_seq_type_check(ev, SND_SEQ_EVFLG_QUEUE) lbajardsilogic@0: /** event type check: system status messages */ lbajardsilogic@0: #define snd_seq_ev_is_message_type(ev) \ lbajardsilogic@0: snd_seq_type_check(ev, SND_SEQ_EVFLG_MESSAGE) lbajardsilogic@0: /** event type check: system status messages */ lbajardsilogic@0: #define snd_seq_ev_is_subscribe_type(ev) \ lbajardsilogic@0: snd_seq_type_check(ev, SND_SEQ_EVFLG_CONNECTION) lbajardsilogic@0: /** event type check: sample messages */ lbajardsilogic@0: #define snd_seq_ev_is_sample_type(ev) \ lbajardsilogic@0: snd_seq_type_check(ev, SND_SEQ_EVFLG_SAMPLE) lbajardsilogic@0: /** event type check: user-defined messages */ lbajardsilogic@0: #define snd_seq_ev_is_user_type(ev) \ lbajardsilogic@0: snd_seq_type_check(ev, SND_SEQ_EVFLG_USERS) lbajardsilogic@0: /** event type check: instrument layer events */ lbajardsilogic@0: #define snd_seq_ev_is_instr_type(ev) \ lbajardsilogic@0: snd_seq_type_check(ev, SND_SEQ_EVFLG_INSTR) lbajardsilogic@0: /** event type check: fixed length events */ lbajardsilogic@0: #define snd_seq_ev_is_fixed_type(ev) \ lbajardsilogic@0: snd_seq_type_check(ev, SND_SEQ_EVFLG_FIXED) lbajardsilogic@0: /** event type check: variable length events */ lbajardsilogic@0: #define snd_seq_ev_is_variable_type(ev) \ lbajardsilogic@0: snd_seq_type_check(ev, SND_SEQ_EVFLG_VARIABLE) lbajardsilogic@0: /** event type check: user pointer events */ lbajardsilogic@0: #define snd_seq_ev_is_varusr_type(ev) \ lbajardsilogic@0: snd_seq_type_check(ev, SND_SEQ_EVFLG_VARUSR) lbajardsilogic@0: /** event type check: reserved for kernel */ lbajardsilogic@0: #define snd_seq_ev_is_reserved(ev) \ lbajardsilogic@0: (! snd_seq_event_types[(ev)->type]) lbajardsilogic@0: lbajardsilogic@0: /** lbajardsilogic@0: * macros to check event flags lbajardsilogic@0: */ lbajardsilogic@0: /** prior events */ lbajardsilogic@0: #define snd_seq_ev_is_prior(ev) \ lbajardsilogic@0: (((ev)->flags & SND_SEQ_PRIORITY_MASK) == SND_SEQ_PRIORITY_HIGH) lbajardsilogic@0: lbajardsilogic@0: /** get the data length type */ lbajardsilogic@0: #define snd_seq_ev_length_type(ev) \ lbajardsilogic@0: ((ev)->flags & SND_SEQ_EVENT_LENGTH_MASK) lbajardsilogic@0: /** fixed length events */ lbajardsilogic@0: #define snd_seq_ev_is_fixed(ev) \ lbajardsilogic@0: (snd_seq_ev_length_type(ev) == SND_SEQ_EVENT_LENGTH_FIXED) lbajardsilogic@0: /** variable length events */ lbajardsilogic@0: #define snd_seq_ev_is_variable(ev) \ lbajardsilogic@0: (snd_seq_ev_length_type(ev) == SND_SEQ_EVENT_LENGTH_VARIABLE) lbajardsilogic@0: /** variable length on user-space */ lbajardsilogic@0: #define snd_seq_ev_is_varusr(ev) \ lbajardsilogic@0: (snd_seq_ev_length_type(ev) == SND_SEQ_EVENT_LENGTH_VARUSR) lbajardsilogic@0: lbajardsilogic@0: /** time-stamp type */ lbajardsilogic@0: #define snd_seq_ev_timestamp_type(ev) \ lbajardsilogic@0: ((ev)->flags & SND_SEQ_TIME_STAMP_MASK) lbajardsilogic@0: /** event is in tick time */ lbajardsilogic@0: #define snd_seq_ev_is_tick(ev) \ lbajardsilogic@0: (snd_seq_ev_timestamp_type(ev) == SND_SEQ_TIME_STAMP_TICK) lbajardsilogic@0: /** event is in real-time */ lbajardsilogic@0: #define snd_seq_ev_is_real(ev) \ lbajardsilogic@0: (snd_seq_ev_timestamp_type(ev) == SND_SEQ_TIME_STAMP_REAL) lbajardsilogic@0: lbajardsilogic@0: /** time-mode type */ lbajardsilogic@0: #define snd_seq_ev_timemode_type(ev) \ lbajardsilogic@0: ((ev)->flags & SND_SEQ_TIME_MODE_MASK) lbajardsilogic@0: /** scheduled in absolute time */ lbajardsilogic@0: #define snd_seq_ev_is_abstime(ev) \ lbajardsilogic@0: (snd_seq_ev_timemode_type(ev) == SND_SEQ_TIME_MODE_ABS) lbajardsilogic@0: /** scheduled in relative time */ lbajardsilogic@0: #define snd_seq_ev_is_reltime(ev) \ lbajardsilogic@0: (snd_seq_ev_timemode_type(ev) == SND_SEQ_TIME_MODE_REL) lbajardsilogic@0: lbajardsilogic@0: /** direct dispatched events */ lbajardsilogic@0: #define snd_seq_ev_is_direct(ev) \ lbajardsilogic@0: ((ev)->queue == SND_SEQ_QUEUE_DIRECT) lbajardsilogic@0: lbajardsilogic@0: /** \} */ lbajardsilogic@0: lbajardsilogic@0: #ifdef __cplusplus lbajardsilogic@0: } lbajardsilogic@0: #endif lbajardsilogic@0: lbajardsilogic@0: #endif /* __ALSA_SEQ_H */ lbajardsilogic@0: