diff options
| author | augustss <augustss@NetBSD.org> | 1998-08-13 00:13:56 +0000 |
|---|---|---|
| committer | augustss <augustss@NetBSD.org> | 1998-08-13 00:13:56 +0000 |
| commit | c987d231462ae4d94029c65fe37a562d67fdf4ee (patch) | |
| tree | b4fb7340f6155dec8ddf520fd82ee9200dc84530 /sys/dev | |
| parent | 331bfdf5a028480f40c979511534eba3b3549157 (diff) | |
Remove some leftover fluff.
Make sure there is no outstanding timeout when the sequencer is closed.
Diffstat (limited to 'sys/dev')
| -rw-r--r-- | sys/dev/midi.c | 11 | ||||
| -rw-r--r-- | sys/dev/midisyn.c | 5 | ||||
| -rw-r--r-- | sys/dev/sequencer.c | 42 | ||||
| -rw-r--r-- | sys/dev/sequencervar.h | 11 |
4 files changed, 37 insertions, 32 deletions
diff --git a/sys/dev/midi.c b/sys/dev/midi.c index d8c12dd993d..3cc68db75ab 100644 --- a/sys/dev/midi.c +++ b/sys/dev/midi.c @@ -1,4 +1,4 @@ -/* $NetBSD: midi.c,v 1.2 1998/08/12 18:11:53 augustss Exp $ */ +/* $NetBSD: midi.c,v 1.3 1998/08/13 00:13:56 augustss Exp $ */ /* * Copyright (c) 1998 The NetBSD Foundation, Inc. @@ -221,6 +221,8 @@ midi_in(addr, data) struct midi_buffer *mb = &sc->inbuf; int i; + if (!sc->isopen) + return; if (data == MIDI_ACK) return; DPRINTFN(3, ("midi_in: %p 0x%02x\n", sc, data)); @@ -312,6 +314,9 @@ midi_out(addr) void *addr; { struct midi_softc *sc = addr; + + if (!sc->isopen) + return; DPRINTFN(3, ("midi_out: %p\n", sc)); midi_start_output(sc, 1); } @@ -370,11 +375,11 @@ midiclose(dev, flags, ifmt, p) s = splaudio(); while (sc->outbuf.used > 0 && !error) { DPRINTFN(2,("midiclose sleep used=%d\n", sc->outbuf.used)); - error = midi_sleep_timo(&sc->wchan, "mid dr", 10*hz); + error = midi_sleep_timo(&sc->wchan, "mid_dr", 30*hz); } + sc->isopen = 0; splx(s); hw->close(sc->hw_hdl); - sc->isopen = 0; #if NSEQUENCER > 0 sc->seqopen = 0; #endif diff --git a/sys/dev/midisyn.c b/sys/dev/midisyn.c index 15b6f012065..f8e2fc51edf 100644 --- a/sys/dev/midisyn.c +++ b/sys/dev/midisyn.c @@ -1,4 +1,4 @@ -/* $NetBSD: midisyn.c,v 1.1 1998/08/12 18:14:01 augustss Exp $ */ +/* $NetBSD: midisyn.c,v 1.2 1998/08/13 00:13:56 augustss Exp $ */ /* * Copyright (c) 1998 The NetBSD Foundation, Inc. @@ -226,10 +226,11 @@ midisyn_output(addr, b) struct midisyn_methods *fs; u_int32_t note, vel; - DPRINTF(("midisyn_output: ms=%p ms->mets=%p\n", ms, ms->mets)); + DPRINTF(("midisyn_output: ms=%p b=0x%02x\n", ms, b)); fs = ms->mets; if (ms->pos < 0) { /* Doing SYSEX */ + DPRINTF(("midisyn_output: sysex 0x%02x\n", b)); if (fs->sysex) fs->sysex(ms, b); if (b == MIDI_SYSEX_END) diff --git a/sys/dev/sequencer.c b/sys/dev/sequencer.c index 0d0d826fe28..c9bc6c5f526 100644 --- a/sys/dev/sequencer.c +++ b/sys/dev/sequencer.c @@ -1,4 +1,4 @@ -/* $NetBSD: sequencer.c,v 1.4 1998/08/12 21:31:28 augustss Exp $ */ +/* $NetBSD: sequencer.c,v 1.5 1998/08/13 00:13:56 augustss Exp $ */ /* * Copyright (c) 1998 The NetBSD Foundation, Inc. @@ -196,6 +196,7 @@ sequenceropen(dev, flags, ifmt, p) sc->timer.timebase = 100; sc->timer.tempo = 60; + sc->doingsysex = 0; RECALC_TICK(&sc->timer); sc->timer.last = 0; microtime(&sc->timer.start); @@ -204,6 +205,8 @@ sequenceropen(dev, flags, ifmt, p) SEQ_QINIT(&sc->outq); sc->lowat = SEQ_MAXQ / 2; + seq_reset(sc); + DPRINTF(("sequenceropen: mode=%d, nmidi=%d\n", sc->mode, sc->nmidi)); return 0; } @@ -260,7 +263,7 @@ seq_drain(sc) error = 0; while(!SEQ_QEMPTY(&sc->outq) && !error) error = seq_sleep_timo(&sc->wchan, "seq_dr", 30*hz); - return error; + return (error); } void @@ -303,12 +306,15 @@ sequencerclose(dev, flags, ifmt, p) struct proc *p; { struct sequencer_softc *sc = &seqdevs[SEQUENCERUNIT(dev)]; - int n; + int n, s; DPRINTF(("sequencerclose: %p\n", sc)); seq_drain(sc); - seq_reset(sc); + s = splaudio(); + if (sc->timeout) + untimeout(seq_timeout, sc); + splx(s); for (n = 0; n < sc->nmidi; n++) midiseq_close(sc->devs[n]); @@ -382,10 +388,11 @@ sequencerread(dev, uio, ioflag) seq_event_rec ev; int error, s; - DPRINTFN(4, ("sequencerread: %p, count=%d, ioflag=%x\n", + DPRINTFN(20, ("sequencerread: %p, count=%d, ioflag=%x\n", sc, uio->uio_resid, ioflag)); if (sc->mode == SEQ_OLD) { + DPRINTFN(-1,("sequencerread: old read\n")); return (EINVAL); /* XXX unimplemented */ } @@ -607,7 +614,7 @@ sequencerioctl(dev, cmd, addr, flag, p) } default: - DPRINTF(("sequencer_ioctl: unimpl %08lx\n", cmd)); + DPRINTFN(-1,("sequencer_ioctl: unimpl %08lx\n", cmd)); error = EINVAL; break; } @@ -689,7 +696,8 @@ seq_do_command(sc, b) return (ENXIO); return midiseq_putc(sc->devs[dev], b->arr[1]); default: - DPRINTF(("seq_do_command: unimpl command %02x\n", SEQ_CMD(b))); + DPRINTFN(-1,("seq_do_command: unimpl command %02x\n", + SEQ_CMD(b))); return (EINVAL); } } @@ -731,7 +739,7 @@ seq_do_chnvoice(sc, b) error = midiseq_keypressure(md, voice, note, parm); break; default: - DPRINTF(("seq_do_chnvoice: unimpl command %02x\n", cmd)); + DPRINTFN(-1,("seq_do_chnvoice: unimpl command %02x\n", cmd)); error = EINVAL; break; } @@ -766,23 +774,18 @@ seq_do_chncommon(sc, b) error = 0; switch(cmd) { case MIDI_PGM_CHANGE: - md->chan_info[chan].pgm_num = p1; error = midiseq_pgmchange(md, chan, p1); break; case MIDI_CTL_CHANGE: if (chan > 15 || p1 > 127) return 0; /* EINVAL */ - md->chan_info[chan].controllers[p1] = w14 & 0x7f; - if (p1 < 32) - md->chan_info[chan].controllers[p1 + 32] = 0; error = midiseq_ctlchange(md, chan, p1, w14); break; case MIDI_PITCH_BEND: - md->chan_info[chan].bender_value = w14; error = midiseq_pitchbend(md, chan, w14); break; default: - DPRINTF(("seq_do_chncommon: unimpl command %02x\n", cmd)); + DPRINTFN(-1,("seq_do_chncommon: unimpl command %02x\n", cmd)); error = EINVAL; break; } @@ -825,6 +828,7 @@ seq_do_sysex(sc, b) dev = SEQ_EDEV(b); if (dev < 0 || dev >= sc->nmidi) return (ENXIO); + DPRINTF(("seq_do_sysex: dev=%d\n", dev)); md = sc->devs[dev]; if (!sc->doingsysex) { @@ -836,7 +840,7 @@ seq_do_sysex(sc, b) for (i = 0; i < 6 && buf[i] != 0xff; i++) ; midiout(md, &c, i, 0); - if (i < 6) + if (i < 6 || (i > 0 && buf[i-1] == MIDI_SYSEX_END)) sc->doingsysex = 0; return (0); } @@ -1112,6 +1116,7 @@ void midiseq_reset(md) struct midi_dev *md; { + /* XXX send GM reset? */ DPRINTFN(3, ("midiseq_reset: %d\n", md->unit)); } @@ -1257,8 +1262,11 @@ midiseq_loadpatch(md, sysex, uio) u_char c, buf[128]; int i, cc, error; - if (sysex->key != SEQ_SYSEX_PATCH) - return EINVAL; + if (sysex->key != SEQ_SYSEX_PATCH) { + DPRINTFN(-1,("midiseq_loadpatch: bad patch key 0x%04x\n", + sysex->key)); + return (EINVAL); + } if (uio->uio_resid < sysex->len) /* adjust length, should be an error */ sysex->len = uio->uio_resid; diff --git a/sys/dev/sequencervar.h b/sys/dev/sequencervar.h index 38c10d3e730..31b3ad0f069 100644 --- a/sys/dev/sequencervar.h +++ b/sys/dev/sequencervar.h @@ -1,4 +1,4 @@ -/* $NetBSD: sequencervar.h,v 1.3 1998/08/12 21:31:28 augustss Exp $ */ +/* $NetBSD: sequencervar.h,v 1.4 1998/08/13 00:13:57 augustss Exp $ */ /* * Copyright (c) 1998 The NetBSD Foundation, Inc. @@ -61,14 +61,6 @@ struct sequencer_queue { struct sequencer_softc; -#define MAXCONTROLLER 128 -struct channel_info { - int pgm_num; - int bender_value; - int bender_range; - u_char controllers[MAXCONTROLLER]; -}; - #define MAXCHAN 16 struct midi_dev { char *name; @@ -76,7 +68,6 @@ struct midi_dev { int capabilities; int nr_voices; int instr_bank_size; - struct channel_info chan_info[MAXCHAN]; int unit; u_char last_cmd; struct sequencer_softc *seq; |
