2 * pccard noise interface.
3 * Nate Williams, October 1997.
4 * This file is in the public domain.
6 /* $FreeBSD: src/sys/pccard/pccard_beep.c,v 1.3.2.3 2001/06/05 19:11:34 imp Exp $ */
7 /* $DragonFly: src/sys/bus/pccard/Attic/pccard_beep.c,v 1.3 2003/08/07 21:16:46 dillon Exp $ */
10 #include <sys/kernel.h>
11 #include <sys/systm.h>
13 #include <machine/clock.h>
17 static enum beepstate allow_beep = BEEP_OFF;
18 static int melody_type = 0;
20 #define MAX_TONE_MODE 3
28 static struct tone silent_beep[] = {
32 static struct tone success_beep[] = {
35 static struct tone failure_beep[] = {
38 static struct tone insert_remove_beep[] = {
42 static struct tone success_melody_beep[] = {
43 {1200, 7}, {1000, 7}, { 800, 15}, {0, 0}
45 static struct tone failure_melody_beep[] = {
46 {2000, 7}, {2400, 7}, {2800, 15}, {0, 0}
48 static struct tone insert_melody_beep[] = {
49 {1600, 10}, {1200, 5}, {0, 0}
51 static struct tone remove_melody_beep[] = {
52 {1200, 10}, {1600, 5}, {0, 0}
55 static struct tone *melody_table[MAX_TONE_MODE][MAX_STATE] = {
57 silent_beep, silent_beep, silent_beep, silent_beep,
59 { /* simple beep mode */
60 success_beep, failure_beep,
61 insert_remove_beep, insert_remove_beep,
63 { /* melody beep mode */
64 success_melody_beep, failure_melody_beep,
65 insert_melody_beep, remove_melody_beep,
71 pccard_beep_sub(void *arg)
74 melody = (struct tone *)arg;
76 if (melody->pitch != 0) {
77 sysbeep(melody->pitch, melody->duration);
78 timeout(pccard_beep_sub, melody + 1, melody->duration);
84 pccard_beep_start(void *arg)
87 melody = (struct tone *)arg;
89 if (allow_beep == BEEP_ON && melody->pitch != 0) {
90 allow_beep = BEEP_OFF;
91 sysbeep(melody->pitch, melody->duration);
92 timeout(pccard_beep_sub, melody + 1, melody->duration);
97 pccard_success_beep(void)
99 pccard_beep_start(melody_table[melody_type][0]);
103 pccard_failure_beep(void)
105 pccard_beep_start(melody_table[melody_type][1]);
109 pccard_insert_beep(void)
111 pccard_beep_start(melody_table[melody_type][2]);
115 pccard_remove_beep(void)
117 pccard_beep_start(melody_table[melody_type][3]);
121 pccard_beep_select(int type)
126 allow_beep = BEEP_OFF;
128 } else if (type < 0 || MAX_TONE_MODE - 1 < type) {
131 allow_beep = BEEP_ON;