root/dev/isa/midi_pcppi.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. midi_pcppi_match
  2. midi_pcppi_attach
  3. midi_pcppi_on
  4. midi_pcppi_off
  5. midi_pcppi_close

    1 /*      $OpenBSD: midi_pcppi.c,v 1.5 2006/01/02 05:21:40 brad Exp $     */
    2 /*      $NetBSD: midi_pcppi.c,v 1.4 1998/11/25 22:17:06 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 #include <sys/param.h>
   41 #include <sys/systm.h>
   42 #include <sys/kernel.h>
   43 #include <sys/errno.h>
   44 #include <sys/device.h>
   45 #include <sys/malloc.h>
   46 #include <sys/proc.h>
   47 #include <sys/conf.h>
   48 #include <sys/selinfo.h>
   49 #include <sys/audioio.h>
   50 #include <sys/midiio.h>
   51 
   52 #include <dev/isa/pcppivar.h>
   53 
   54 #include <dev/audio_if.h>
   55 #include <dev/midi_if.h>
   56 #include <dev/midivar.h>
   57 #include <dev/midisynvar.h>
   58 
   59 #define MAX_DURATION 30         /* turn off sound automagically after 30 s */
   60 
   61 struct midi_pcppi_softc {
   62         struct midi_softc sc_mididev;
   63         midisyn sc_midisyn;
   64 };
   65 
   66 int     midi_pcppi_match(struct device *, void *, void *);
   67 void    midi_pcppi_attach(struct device *, struct device *, void *);
   68 
   69 void    midi_pcppi_on(midisyn *, u_int32_t, u_int32_t, u_int32_t);
   70 void    midi_pcppi_off(midisyn *, u_int32_t, u_int32_t, u_int32_t);
   71 void    midi_pcppi_close(midisyn *);
   72 
   73 struct cfattach midi_pcppi_ca = {
   74         sizeof(struct midi_pcppi_softc), midi_pcppi_match, midi_pcppi_attach
   75 };
   76 
   77 struct midisyn_methods midi_pcppi_hw = {
   78         0,                      /* open */
   79         midi_pcppi_close,
   80         0,                      /* ioctl */
   81         0,                      /* allocv */
   82         midi_pcppi_on,
   83         midi_pcppi_off,
   84         0,
   85         0,
   86         0,
   87         0,
   88         0,
   89         0,
   90 };
   91 
   92 int midi_pcppi_attached = 0;    /* Not very nice */
   93 
   94 int
   95 midi_pcppi_match(parent, match, aux)
   96         struct device *parent;
   97         void *match;
   98         void *aux;
   99 {
  100         return (!midi_pcppi_attached);
  101 }
  102 
  103 void
  104 midi_pcppi_attach(parent, self, aux)
  105         struct device *parent;
  106         struct device *self;
  107         void *aux;
  108 {
  109         struct midi_pcppi_softc *sc = (struct midi_pcppi_softc *)self;
  110         struct pcppi_attach_args *pa = (struct pcppi_attach_args *)aux;
  111         midisyn *ms;
  112 
  113         ms = &sc->sc_midisyn;
  114         ms->mets = &midi_pcppi_hw;
  115         strlcpy(ms->name, "PC speaker", sizeof ms->name);
  116         ms->nvoice = 1;
  117         ms->flags = MS_DOALLOC | MS_FREQXLATE;
  118         ms->data = pa->pa_cookie;
  119 
  120         midi_pcppi_attached++;
  121 
  122         midisyn_attach(&sc->sc_mididev, ms);
  123         midi_attach(&sc->sc_mididev, parent);
  124 }
  125 
  126 void
  127 midi_pcppi_on(ms, chan, note, vel)
  128         midisyn *ms;
  129         u_int32_t chan, note, vel;
  130 {
  131         pcppi_tag_t t = ms->data;
  132 
  133         /*printf("ON  %p %d\n", t, MIDISYN_FREQ_TO_HZ(note));*/
  134         pcppi_bell(t, MIDISYN_FREQ_TO_HZ(note), MAX_DURATION * hz, 0);
  135 }
  136 
  137 void
  138 midi_pcppi_off(ms, chan, note, vel)
  139         midisyn *ms;
  140         u_int32_t chan, note, vel;
  141 {
  142         pcppi_tag_t t = ms->data;
  143 
  144         /*printf("OFF %p %d\n", t, note >> 16);*/
  145         pcppi_bell(t, 0, 0, 0);
  146 }
  147 
  148 void
  149 midi_pcppi_close(ms)
  150         midisyn *ms;
  151 {
  152         pcppi_tag_t t = ms->data;
  153 
  154         /* Make sure we are quiet. */
  155         pcppi_bell(t, 0, 0, 0);
  156 }

/* [<][>][^][v][top][bottom][index][help] */