annotate src/libsst.c @ 5258:1ed4cefddd12

Add a couple of extra docstring backslashes, #'format-time-string 2010-09-05 Aidan Kehoe <kehoea@parhasard.net> * editfns.c (Fformat_time_string): Use two backslashes so that there is at least one present in the output of describe function, when describing the Roman month number syntax in this function's docstring. Thanks for provoking me to look at this, Stephen Turnbull.
author Aidan Kehoe <kehoea@parhasard.net>
date Sun, 05 Sep 2010 19:22:37 +0100
parents ecf1ebac70d8
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1 /* libsst.c - SPARC sound tools library
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2 **
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3 ** Copyright (C) 1989 by Jef Poskanzer.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4 **
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5 ** Permission to use, copy, modify, and distribute this software and its
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6 ** documentation for any purpose and without fee is hereby granted, provided
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
7 ** that the above copyright notice appear in all copies and that both that
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
8 ** copyright notice and this permission notice appear in supporting
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
9 ** documentation. This software is provided "as is" without express or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
10 ** implied warranty.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
11
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
12 ** Hacked on by jwz for emacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
13
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
14 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
15
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
16 /* Synched up with: Not in FSF. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
17
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
18 /* This file Mule-ized by Ben Wing, 5-15-01. */
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
19
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
20 #include <config.h>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
21 #include "lisp.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
22
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
23 #include "sound.h"
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
24
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
25 #include "libsst.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
26
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
27 #include "sysfile.h"
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
28
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
29
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
30 #define AUDBUF 1024
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
31
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
32 int
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
33 sst_open(play_level, record_level)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
34 int play_level, record_level;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
35 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
36 int fd, i, gr, ger, gx;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
37 struct audio_ioctl ai;
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
38 Extbyte *ep;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
39
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 563
diff changeset
40 fd = open ("/dev/audio", O_RDWR);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
41 if ( fd < 0 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
42 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
43 sound_perror( "sst_open: open /dev/audio" );
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
44 return( fd );
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
45 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
46
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
47 #ifdef AUDIOSETQSIZE /* This no longer exists as of 4.1.2. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
48
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
49 /* Shrink audio device's queue size, to cut down time delay. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
50 i = AUDBUF;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
51 if ( ioctl( fd, AUDIOSETQSIZE, &i ) < 0 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
52 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
53 sound_perror( "sst_open: SETQSIZE" );
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
54 return( fd );
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
55 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
56 #endif /* AUDIOSETQSIZE */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
57
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
58 /* Set gains. -10 <= ger <= 18, -18 <= gr <= 12, -18 <= gx <= 12. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
59 if (!play_level)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
60 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
61 play_level = 75;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 563
diff changeset
62 if ( (ep = egetenv( "SST_PLAY" )) != NULL )
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
63 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
64 play_level = atoi( ep );
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
65 if ( play_level < 0 || play_level > 99 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
66 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
67 sound_warn( "sst_open: SST_PLAY must be between 0 and 99" );
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
68 return( -1 );
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
69 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
70 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
71 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
72 if (!record_level)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
73 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
74 record_level = 75;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 563
diff changeset
75 if ( (ep = egetenv( "SST_RECORD" )) != NULL )
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
76 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
77 record_level = atoi( ep );
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
78 if ( record_level < 0 || record_level > 99 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
79 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
80 sound_warn( "sst_open: SST_RECORD must be between 0 and 99" );
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
81 return( -1 );
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
82 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
83 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
84 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
85
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
86 play_level = play_level * 59 / 100 - 28;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
87 ger = play_level / 2;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
88 gr = play_level - ger;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
89 if ( ger < -10 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
90 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
91 ger = -10;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
92 gr = play_level - ger;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
93 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
94 if ( gr > 12 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
95 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
96 gr = 12;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
97 ger = play_level - gr;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
98 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
99 gx = record_level * 31 / 100 - 18;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
100 sst_set_gr( fd, gr );
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
101 sst_set_ger( fd, ger );
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
102 sst_set_gx( fd, gx );
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
103
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
104 /* Initialize the MMR2 register to send the output to either
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
105 ** the speaker or the earphone jack, depending on SST_EARPHONES.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
106 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
107 ai.control = AUDIO_MAP_MMR2;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
108 if ( ioctl( fd, AUDIOGETREG, &ai ) < 0 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
109 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
110 sound_perror( "sst_open: GETREG MMR2" );
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
111 return( -1 );
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
112 }
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 563
diff changeset
113 if ( (ep = egetenv( "SST_EARPHONES" )) != NULL )
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
114 ai.data[0] &= ~AUDIO_MMR2_BITS_LS;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
115 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
116 ai.data[0] |= AUDIO_MMR2_BITS_LS;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
117 if ( ioctl( fd, AUDIOSETREG, &ai ) < 0 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
118 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
119 sound_perror( "sst_open: SETREG MMR2" );
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
120 return( fd );
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
121 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
122
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
123 return fd;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
124 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
125
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
126 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
127 sst_close( fd )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
128 int fd;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
129 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
130 struct audio_ioctl ai;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
131
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
132 ai.control = AUDIO_MAP_MMR1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
133 ai.data[0] = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
134 if ( ioctl( fd, AUDIOSETREG, &ai ) < 0 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
135 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
136 sound_perror( "sst_close: SETREG MMR1" );
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
137 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
138 ai.control = AUDIO_MAP_MMR2;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
139 ai.data[0] = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
140 if ( ioctl( fd, AUDIOSETREG, &ai ) < 0 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
141 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
142 sound_perror( "sst_close: SETREG MMR2" );
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
143 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
144 close( fd );
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
145 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
146
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
147 /* These are tables of values to be loaded into various gain registers.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
148 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
149
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 771
diff changeset
150 static Binbyte ger_table[][2] = {
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
151 0xaa, 0xaa, /* -10db */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
152 0x79, 0xac,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
153 0x41, 0x99,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
154 0x9c, 0xde,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
155 0x74, 0x9c, /* -6db */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
156 0x6a, 0xae,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
157 0xab, 0xdf,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
158 0x64, 0xab,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
159 0x2a, 0xbd,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
160 0x5c, 0xce,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
161 0x00, 0x99, /* 0db */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
162 0x43, 0xdd,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
163 0x52, 0xef,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
164 0x55, 0x42,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
165 0x31, 0xdd,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
166 0x43, 0x1f,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
167 0x40, 0xdd, /* 6db */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
168 0x44, 0x0f,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
169 0x31, 0x1f,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
170 0x10, 0xdd,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
171 0x41, 0x0f,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
172 0x60, 0x0b,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
173 0x42, 0x10, /* 12db */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
174 0x11, 0x0f,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
175 0x72, 0x00,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
176 0x21, 0x10,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
177 0x22, 0x00,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
178 0x00, 0x0b,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
179 0x00, 0x0f, /* 18db */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
180 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
181
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
182
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 771
diff changeset
183 static Binbyte gr_gx_table[][2] = {
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
184 0x8b, 0x7c, /* -18db */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
185 0x8b, 0x35,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
186 0x8b, 0x24,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
187 0x91, 0x23,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
188 0x91, 0x2a,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
189 0x91, 0x3b,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
190 0x91, 0xf9, /* -12db */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
191 0x91, 0xb6,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
192 0x91, 0xa4,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
193 0x92, 0x32,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
194 0x92, 0xaa,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
195 0x93, 0xb3,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
196 0x9f, 0x91, /* -6db */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
197 0x9b, 0xf9,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
198 0x9a, 0x4a,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
199 0xa2, 0xa2,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
200 0xaa, 0xa3,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
201 0xbb, 0x52,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
202 0x08, 0x08, /* 0db */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
203 0x3d, 0xac,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
204 0x25, 0x33,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
205 0x21, 0x22,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
206 0x12, 0xa2,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
207 0x11, 0x3b,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
208 0x10, 0xf2, /* 6db */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
209 0x02, 0xca,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
210 0x01, 0x5a,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
211 0x01, 0x12,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
212 0x00, 0x32,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
213 0x00, 0x13,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
214 0x00, 0x0e, /* 12db */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
215 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
216
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
217 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
218 sst_set_ger( fd, value )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
219 int fd, value;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
220 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
221 struct audio_ioctl ai;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
222
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
223 if ( ( value < -10 ) || ( value > 18 ) )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
224 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
225 Extbyte buf [255];
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
226 sprintf (buf, "sst_set_ger: GER %d out of range", value);
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
227 sound_warn(buf);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
228 return;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
229 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
230
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
231 /* Add 10 to the value to get the index into the table. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
232 ai.control = AUDIO_MAP_GER;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
233 ai.data[0] = ger_table[value + 10][1];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
234 ai.data[1] = ger_table[value + 10][0];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
235
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
236 if ( ioctl( fd, AUDIOSETREG, &ai ) < 0 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
237 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
238 sound_perror( "sst_set_ger: SETREG GER" );
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
239 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
240
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
241 ai.control = AUDIO_MAP_MMR1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
242 if ( ioctl( fd, AUDIOGETREG, &ai ) < 0 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
243 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
244 sound_perror( "sst_set_ger: GETREG MMR1" );
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
245 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
246 ai.data[0] |= AUDIO_MMR1_BITS_LOAD_GER;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
247 if ( ioctl( fd, AUDIOSETREG, &ai ) < 0 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
248 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
249 sound_perror( "sst_set_ger: SETREG MMR1" );
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
250 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
251 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
252
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
253 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
254 sst_set_gr( fd, value )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
255 int fd, value;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
256 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
257 struct audio_ioctl ai;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
258
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
259 if ( ( value < -18 ) || ( value > 12 ) )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
260 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
261 Extbyte buf [255];
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
262 sprintf (buf, "sst_set_gr: GR %d out of range", value);
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
263 sound_warn (buf);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
264 return;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
265 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
266
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
267 ai.control = AUDIO_MAP_GR;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
268 ai.data[0] = gr_gx_table[value + 18][1];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
269 ai.data[1] = gr_gx_table[value + 18][0];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
270
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
271 if ( ioctl( fd, AUDIOSETREG, &ai ) < 0 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
272 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
273 sound_perror( "sst_set_gr: SETREG GR" );
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
274 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
275
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
276 ai.control = AUDIO_MAP_MMR1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
277 if ( ioctl( fd, AUDIOGETREG, &ai ) < 0 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
278 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
279 sound_perror( "sst_set_gr: GETREG MMR1" );
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
280 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
281 ai.data[0] |= AUDIO_MMR1_BITS_LOAD_GR;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
282 if ( ioctl( fd, AUDIOSETREG, &ai ) < 0 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
283 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
284 sound_perror( "sst_set_gr: SETREG MMR1" );
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
285 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
286 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
287
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
288 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
289 sst_set_gx( fd, value )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
290 int fd, value;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
291 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
292 struct audio_ioctl ai;
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
293 Extbyte buf [255];
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
294
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
295 if ( ( value < -18 ) || ( value > 12 ) )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
296 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
297 sprintf (buf, "sst_set_gx: GX %d out of range", value);
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
298 sound_warn (buf);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
299 return;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
300 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
301
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
302 /* We add 18 to get the index into the table, since entry 0 represents
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
303 * -18db.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
304 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
305 ai.control = AUDIO_MAP_GX;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
306 ai.data[0] = gr_gx_table[value + 18][1];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
307 ai.data[1] = gr_gx_table[value + 18][0];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
308
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
309 if ( ioctl( fd, AUDIOSETREG, &ai ) < 0 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
310 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
311 sound_perror( "sst_set_gx: SETREG GX" );
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
312 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
313
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
314 ai.control = AUDIO_MAP_MMR1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
315 if ( ioctl( fd, AUDIOGETREG, &ai ) < 0 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
316 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
317 sound_perror( "sst_set_gx: GETREG MMR1" );
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
318 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
319 ai.data[0] |= AUDIO_MMR1_BITS_LOAD_GX;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
320 if ( ioctl( fd, AUDIOSETREG, &ai ) < 0 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
321 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
322 sound_perror( "sst_set_gx: SETREG MMR1" );
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
323 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
324 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
325
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
326 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
327 sst_tones( fd, dhz1, dhz2, thz, rhz, usec )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
328 int fd, dhz1, dhz2, thz, rhz, usec;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
329 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
330 Extbyte buf [255];
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
331 struct audio_ioctl ai;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
332 int dval1, dval2, tval, rval;
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 771
diff changeset
333 Binbyte oldmmr2, newmmr2;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
334
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
335 if ( dhz1 == 0 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
336 dval1 = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
337 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
338 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
339 dval1 = ( dhz1 * 128 + 63 ) / 1000;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
340 if ( ( dval1 < 1 ) || ( dval1 > 255 ) )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
341 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
342 sprintf(buf, "sst_tones: dhz1 %d out of range", dhz1 );
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
343 sound_warn (buf);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
344 return;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
345 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
346 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
347
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
348 if ( dhz2 == 0 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
349 dval2 = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
350 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
351 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
352 dval2 = ( dhz2 * 128 + 63 ) / 1000;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
353 if ( ( dval2 < 1 ) || ( dval2 > 255 ) )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
354 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
355 sprintf(buf, "sst_tones: dhz2 %d out of range", dhz2 );
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
356 sound_warn (buf);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
357 return;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
358 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
359 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
360
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
361 if ( thz == 0 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
362 tval = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
363 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
364 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
365 tval = ( thz * 128 + 63 ) / 2000;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
366 if ( ( tval < 1 ) || ( tval > 255 ) )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
367 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
368 sprintf(buf, "sst_tones: thz %d out of range", thz );
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
369 sound_warn (buf);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
370 return;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
371 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
372 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
373
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
374 if ( rhz == 0 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
375 rval = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
376 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
377 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
378 rval = ( rhz * 128 + 63 ) / 2000;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
379 if ( ( rval < 1 ) || ( rval > 255 ) )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
380 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
381 sprintf(buf, "sst_tones: rhz %d out of range", dhz2 );
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
382 sound_warn (buf);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
383 return;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
384 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
385 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
386
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
387 if ( ( dval1 != 0 || dval2 != 0 ) && ( tval != 0 || rval != 0 ) )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
388 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
389 sprintf(buf, "sst_tones: cannot use DTMF and TONE or RINGER at the same time", dhz2 );
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
390 sound_warn (buf);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
391 return;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
392 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
393
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
394 if ( tval != 0 && rval != 0 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
395 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
396 sprintf(buf, "sst_tones: cannot use TONE and RINGER at the same time", dhz2 );
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
397 sound_warn (buf);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
398 return;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
399 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
400
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
401 ai.control = AUDIO_MAP_MMR2;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
402 if ( ioctl( fd, AUDIOGETREG, &ai ) < 0 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
403 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
404 sound_perror( "sst_tones: GETREG MMR2" );
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
405 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
406 oldmmr2 = newmmr2 = ai.data[0];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
407
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
408 if ( dval1 != 0 || dval2 != 0 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
409 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
410 newmmr2 |= AUDIO_MMR2_BITS_DTMF;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
411 ai.control = AUDIO_MAP_FTGR;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
412 ai.data[0] = dval1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
413 ai.data[1] = dval2;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
414 if ( ioctl( fd, AUDIOSETREG, &ai ) < 0 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
415 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
416 sound_perror( "sst_tones: SETREG FTGR" );
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
417 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
418 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
419
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
420 if ( tval != 0 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
421 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
422 newmmr2 |= AUDIO_MMR2_BITS_TONE;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
423 ai.control = AUDIO_MAP_FTGR;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
424 ai.data[0] = tval;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
425 ai.data[1] = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
426 if ( ioctl( fd, AUDIOSETREG, &ai ) < 0 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
427 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
428 sound_perror( "sst_tones: SETREG FTGR" );
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
429 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
430 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
431
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
432 if ( rval != 0 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
433 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
434 newmmr2 |= AUDIO_MMR2_BITS_RINGER;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
435 ai.control = AUDIO_MAP_FTGR;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
436 ai.data[0] = rval;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
437 ai.data[1] = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
438 if ( ioctl( fd, AUDIOSETREG, &ai ) < 0 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
439 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
440 sound_perror( "sst_tones: SETREG FTGR" );
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
441 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
442 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
443
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
444 ai.control = AUDIO_MAP_MMR2;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
445 ai.data[0] = newmmr2;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
446 if ( ioctl( fd, AUDIOSETREG, &ai ) < 0 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
447 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
448 sound_perror( "sst_tones: SETREG MMR2" );
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
449 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
450
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
451 usleep( usec );
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
452
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
453 ai.data[0] = oldmmr2;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
454 if ( ioctl( fd, AUDIOSETREG, &ai ) < 0 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
455 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
456 sound_perror( "sst_tones: SETREG MMR2" );
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
457 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
458 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
459
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
460 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
461 sst_dtmf( fd, dial, usecper, usecpause )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
462 int fd, usecper, usecpause;
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
463 Extbyte *dial;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
464 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
465 Extbyte *cp;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
466
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
467 for ( cp = dial; *cp != '\0'; cp++ )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
468 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
469 switch ( *cp )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
470 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
471 case '1': sst_tones( fd, 703, 1211, 0, 0, usecper ); break;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
472 case '2': sst_tones( fd, 703, 1336, 0, 0, usecper ); break;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
473 case '3': sst_tones( fd, 703, 1492, 0, 0, usecper ); break;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
474 case 'A': sst_tones( fd, 703, 1648, 0, 0, usecper ); break;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
475 case '4': sst_tones( fd, 773, 1211, 0, 0, usecper ); break;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
476 case '5': sst_tones( fd, 773, 1336, 0, 0, usecper ); break;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
477 case '6': sst_tones( fd, 773, 1492, 0, 0, usecper ); break;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
478 case 'B': sst_tones( fd, 773, 1648, 0, 0, usecper ); break;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
479 case '7': sst_tones( fd, 859, 1211, 0, 0, usecper ); break;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
480 case '8': sst_tones( fd, 859, 1336, 0, 0, usecper ); break;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
481 case '9': sst_tones( fd, 859, 1492, 0, 0, usecper ); break;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
482 case 'C': sst_tones( fd, 859, 1648, 0, 0, usecper ); break;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
483 case '*': sst_tones( fd, 945, 1211, 0, 0, usecper ); break;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
484 case '0': sst_tones( fd, 945, 1336, 0, 0, usecper ); break;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
485 case '#': sst_tones( fd, 945, 1492, 0, 0, usecper ); break;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
486 case 'D': sst_tones( fd, 945, 1648, 0, 0, usecper ); break;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
487
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
488 case ' ': case '-': case '(': case ')': case '+':
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
489 continue; /* ignore */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
490
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
491 case ',': usleep( usecper ); break; /* big pause */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
492
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
493 default:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
494 {
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
495 Extbyte buf [255];
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
496 sprintf( buf, "sst_dtmf: unknown dialing code '%c'", *cp );
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 438
diff changeset
497 sound_warn (buf);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
498 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
499 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
500 usleep( usecpause );
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
501 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
502 }