Annotation of sys/dev/midisynvar.h, Revision 1.1
1.1 ! nbrk 1: /* $OpenBSD: midisynvar.h,v 1.2 2002/03/14 01:26:52 millert Exp $ */
! 2: /* $NetBSD: midisynvar.h,v 1.3 1998/11/25 22:17:07 augustss Exp $ */
! 3:
! 4: /*
! 5: * Copyright (c) 1998 The NetBSD Foundation, Inc.
! 6: * All rights reserved.
! 7: *
! 8: * This code is derived from software contributed to The NetBSD Foundation
! 9: * by Lennart Augustsson (augustss@netbsd.org).
! 10: *
! 11: * Redistribution and use in source and binary forms, with or without
! 12: * modification, are permitted provided that the following conditions
! 13: * are met:
! 14: * 1. Redistributions of source code must retain the above copyright
! 15: * notice, this list of conditions and the following disclaimer.
! 16: * 2. Redistributions in binary form must reproduce the above copyright
! 17: * notice, this list of conditions and the following disclaimer in the
! 18: * documentation and/or other materials provided with the distribution.
! 19: * 3. All advertising materials mentioning features or use of this software
! 20: * must display the following acknowledgement:
! 21: * This product includes software developed by the NetBSD
! 22: * Foundation, Inc. and its contributors.
! 23: * 4. Neither the name of The NetBSD Foundation nor the names of its
! 24: * contributors may be used to endorse or promote products derived
! 25: * from this software without specific prior written permission.
! 26: *
! 27: * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
! 28: * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
! 29: * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
! 30: * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
! 31: * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
! 32: * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
! 33: * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
! 34: * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
! 35: * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
! 36: * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
! 37: * POSSIBILITY OF SUCH DAMAGE.
! 38: */
! 39:
! 40: #ifndef _SYS_DEV_MIDISYNVAR_H_
! 41: #define _SYS_DEV_MIDISYNVAR_H_
! 42:
! 43: typedef struct midisyn midisyn;
! 44:
! 45: struct midisyn_methods {
! 46: int (*open)(midisyn *, int);
! 47: void (*close)(midisyn *);
! 48: int (*ioctl)(midisyn *, u_long, caddr_t, int, struct proc *);
! 49: int (*allocv)(midisyn *, u_int32_t, u_int32_t);
! 50: void (*noteon)(midisyn *, u_int32_t, u_int32_t, u_int32_t);
! 51: void (*noteoff)(midisyn *, u_int32_t, u_int32_t, u_int32_t);
! 52: void (*keypres)(midisyn *, u_int32_t, u_int32_t, u_int32_t);
! 53: void (*ctlchg)(midisyn *, u_int32_t, u_int32_t, u_int32_t);
! 54: void (*pgmchg)(midisyn *, u_int32_t, u_int32_t);
! 55: void (*chnpres)(midisyn *, u_int32_t, u_int32_t);
! 56: void (*pitchb)(midisyn *, u_int32_t, u_int32_t, u_int32_t);
! 57: void (*sysex)(midisyn *, u_int32_t);
! 58: };
! 59:
! 60: struct voice {
! 61: u_int chan_note; /* channel and note */
! 62: #define MS_CHANNOTE(chan, note) ((chan) * 256 + (note))
! 63: #define MS_GETCHAN(v) ((v)->chan_note >> 8)
! 64: u_int seqno; /* allocation index (increases with time) */
! 65: u_char inuse;
! 66: };
! 67:
! 68: #define MIDI_MAX_CHANS 16
! 69:
! 70: struct midisyn {
! 71: /* Filled by synth driver */
! 72: struct midisyn_methods *mets;
! 73: char name[32];
! 74: int nvoice;
! 75: int flags;
! 76: #define MS_DOALLOC 1
! 77: #define MS_FREQXLATE 2
! 78: void *data;
! 79:
! 80: /* Used by midisyn driver */
! 81: u_int8_t buf[3];
! 82: int pos;
! 83: struct voice *voices;
! 84: u_int seqno;
! 85: u_int16_t pgms[MIDI_MAX_CHANS];
! 86: };
! 87:
! 88: #define MS_GETPGM(ms, vno) ((ms)->pgms[MS_GETCHAN(&(ms)->voices[vno])])
! 89:
! 90: struct midi_softc;
! 91:
! 92: extern struct midi_hw_if midisyn_hw_if;
! 93:
! 94: void midisyn_attach(struct midi_softc *, midisyn *);
! 95:
! 96: #define MIDISYN_FREQ_TO_HZ(f) ((f) >> 16)
! 97:
! 98: #endif /* _SYS_DEV_MIDISYNVAR_H_ */
CVSweb