]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - sys/pccard/pccard_beep.c
unfinished sblive driver, playback/mixer only for now - not enabled in
[FreeBSD/FreeBSD.git] / sys / pccard / pccard_beep.c
1 /*-
2  * pccard noise interface.
3  * Nate Williams, October 1997.
4  * This file is in the public domain.
5  */
6 /* $FreeBSD$ */
7
8 #include <sys/param.h>
9 #include <sys/kernel.h>
10 #include <sys/systm.h>
11
12 #include <machine/clock.h>
13
14 #include <pccard/driver.h>
15
16 #define PCCARD_BEEP_PITCH0      1600
17 #define PCCARD_BEEP_DURATION0   20
18 #define PCCARD_BEEP_PITCH1      1200
19 #define PCCARD_BEEP_DURATION1   40
20 #define PCCARD_BEEP_PITCH2      3200
21 #define PCCARD_BEEP_DURATION2   40
22
23 static struct callout_handle beeptimeout_ch
24     = CALLOUT_HANDLE_INITIALIZER(&beeptimeout_ch);
25
26 static enum beepstate allow_beep = BEEP_OFF;
27
28 /*
29  * timeout function to keep lots of noise from
30  * happening with insertion/removals.
31  */
32 static void enable_beep(void *dummy)
33 {
34         /* Should never be needed */
35         untimeout(enable_beep, (void *)NULL, beeptimeout_ch);
36
37         allow_beep = BEEP_ON;
38 }
39
40 void pccard_insert_beep(void)
41 {
42         if (allow_beep == BEEP_ON) {
43                 sysbeep(PCCARD_BEEP_PITCH0, PCCARD_BEEP_DURATION0);
44                 allow_beep = BEEP_OFF;
45                 beeptimeout_ch = timeout(enable_beep, (void *)NULL, hz / 5);
46         }
47 }
48
49 void pccard_remove_beep(void)
50 {
51         if (allow_beep == BEEP_ON) {
52                 sysbeep(PCCARD_BEEP_PITCH0, PCCARD_BEEP_DURATION0);
53                 allow_beep = BEEP_OFF;
54                 beeptimeout_ch = timeout(enable_beep, (void *)NULL, hz / 5);
55         }
56 }
57
58 void pccard_success_beep(void)
59 {
60         if (allow_beep == BEEP_ON) {
61                 sysbeep(PCCARD_BEEP_PITCH1, PCCARD_BEEP_DURATION1);
62         }
63 }
64
65 void pccard_failure_beep(void)
66 {
67         if (allow_beep == BEEP_ON) {
68                 sysbeep(PCCARD_BEEP_PITCH2, PCCARD_BEEP_DURATION2);
69         }
70 }
71
72 int pccard_beep_select(enum beepstate state)
73 {
74         if (state == BEEP_ON || state == BEEP_OFF) {
75                 allow_beep = state;
76                 return 0;
77         }
78         return 1;
79 }