diff --git a/test/Makefile.am b/test/Makefile.am --- a/test/Makefile.am +++ b/test/Makefile.am @@ -1,6 +1,6 @@ check_PROGRAMS=control pcm pcm_min laten check_PROGRAMS=control pcm pcm_min latency seq \ playmidi1 timer rawmidi midiloop \ - oldapi queue_timer namehint + oldapi queue_timer namehint event_filter control_LDADD=../src/libasound.la pcm_LDADD=../src/libasound.la @@ -15,6 +15,7 @@ queue_timer_LDADD=../src/libasound.la queue_timer_LDADD=../src/libasound.la namehint_LDADD=../src/libasound.la code_CFLAGS=-Wall -pipe -g -O2 +event_filter_LDADD=../src/libasound.la INCLUDES=-I$(top_srcdir)/include AM_CFLAGS=-Wall -pipe -g diff --git a/test/event_filter.c b/test/event_filter.c new file mode 100644 --- /dev/null +++ b/test/event_filter.c @@ -0,0 +1,49 @@ +#include + +int main(void) { + snd_seq_t *seq; + snd_seq_client_info_t *client_info; + const unsigned char *event_filter; + int isnote; + int ispgmc; + int oldnote; + + snd_seq_client_info_alloca(&client_info); + snd_seq_open(&seq, "default", SND_SEQ_OPEN_DUPLEX, 0); + + snd_seq_get_client_info(seq, client_info); + event_filter = snd_seq_client_info_get_event_filter(client_info); + printf("Initial event_filter=0x%p\n", event_filter); + + snd_seq_set_client_event_filter(seq, SND_SEQ_EVENT_NOTEON); + snd_seq_get_client_info(seq, client_info); + event_filter = snd_seq_client_info_get_event_filter(client_info); + isnote = snd_seq_get_bit(SND_SEQ_EVENT_NOTEON, (void *) event_filter); + printf("after snd_seq_set_client_event (EVENT_NOTEON) : " + "event_filter=0x%p isnote=%d\n", + event_filter, isnote); + oldnote = snd_seq_change_bit(SND_SEQ_EVENT_NOTEON, (void *) event_filter); + isnote = snd_seq_get_bit(SND_SEQ_EVENT_NOTEON, (void *) event_filter); + printf("after snd_seq_change_bit : " + "event_filter=0x%p isnote=%d oldnote=%d\n ==> %s %s\n", + event_filter, isnote, oldnote, "snd_seq_change_bit", + (isnote == 0 ? "changed" : "ERROR: NOT CHANGED")); + + snd_seq_get_client_info(seq, client_info); + snd_seq_client_info_set_event_filter(client_info, NULL); + snd_seq_set_client_info(seq, client_info); + event_filter = snd_seq_client_info_get_event_filter(client_info); + printf("after snd_seq_client_info_set_event_filter(NULL) : " + "event_filter=0x%p\n", + event_filter); + + snd_seq_set_client_event_filter(seq, SND_SEQ_EVENT_PGMCHANGE); + snd_seq_get_client_info(seq, client_info); + event_filter = snd_seq_client_info_get_event_filter(client_info); + isnote = snd_seq_get_bit(SND_SEQ_EVENT_NOTEON, (void *) event_filter); + ispgmc = snd_seq_get_bit(SND_SEQ_EVENT_PGMCHANGE, (void *) event_filter); + printf("after snd_seq_set_client_event (EVENT_PGMCHANGE) : " + "event_filter=0x%p isnote=%d ispgmc=%d\n ==> %s %s\n", + event_filter, isnote, ispgmc, "snd_seq_client_info_set_event_filter(NULL)", + (isnote == 0 ? "cleared" : "ERROR: NOT CLEARED")); +}