mer feb 12 14:56:57 CET 2003
[asterisk/asterisk.git] / channels / ixjuser.h
1 /******************************************************************************
2 $Id$
3 $Log$
4 Revision 1.16  2003/02/12 13:59:14  matteo
5 mer feb 12 14:56:57 CET 2003
6
7 Revision 1.1.1.1  2003/02/12 13:59:14  matteo
8 mer feb 12 14:56:57 CET 2003
9
10 Revision 1.1  1999/12/01 05:25:58  markster
11 Start on the Internet Phone Jack channel
12
13 Revision 3.0  1999/11/18 22:21:43  root
14 Added isapnp kernel module support.
15
16 Revision 2.5  1999/11/09 15:42:06  root
17 Fixed convert code for older PhoneJACK cards.
18 Fixed G723.1 5.3 record bug.
19
20 Revision 2.4  1999/11/02 20:17:20  root
21 Fixed hookswitch bug for PhoneJACK
22 Added filter exception bit code.
23
24 Revision 2.3  1999/11/01 23:22:02  root
25 Added tone cadence generation.
26 Fixed hookswitch detection when PORT != POTS
27 Fixed ringing when PORT != POTS
28
29 Revision 2.2  1999/10/13 05:33:31  root
30 Added G.729A/B codec.
31 Fixed G.728 codec.
32
33 Revision 2.1  1999/10/11 19:29:46  root
34 Enhanced PSTN ring detection
35 Added Caller ID recognition
36 Added wink detection
37
38 Revision 2.0  1999/09/18 03:29:15  root
39 Added PSTN Support
40 Enhanced mixer functions
41 Fixed LineJACK and PhoneJACK Lite not reporting second IO range in p/proc/ioports
42 Added DSP Volume controls
43
44 Revision 1.23  1999/08/16 16:37:27  root
45 Added drybuffer ioctls
46 Added card type ioctl
47
48 Revision 1.22  1999/08/14 05:15:58  root
49 Fixed select timeout problems.  Was using the wrong wait queues.
50
51 Revision 1.21  1999/08/04 22:53:43  root
52 Added levels to AEC
53
54 Revision 1.20  1999/07/28 20:32:23  root
55 Added non-blocking rings
56 Added ring cadence
57
58 Revision 1.19  1999/07/14 21:08:10  root
59 fixed rcsid
60
61 Revision 1.18  1999/07/14 21:03:33  root
62 added rcsid
63
64 Revision 1.17  1999/07/12 20:20:00  root
65 Continuing work on 20ms and 10ms linear modes.
66
67 Revision 1.16  1999/07/09 19:13:50  root
68 Added IXJCTL_RATE to set the rate the DSP is polled.
69 Added 20ms and 10ms linear modes for LineJack and PhoneJack Lite.
70
71 Revision 1.15  1999/07/08 02:21:20  root
72 Async Notification on hookswitch changes.
73 Added IXJ_EXCEPTION bitfield structure for select exception sets
74 Added IXJCTL_DTMFASCII ioctl
75
76 Revision 1.14  1999/07/06 23:20:52  root
77 *** empty log message ***
78
79 Revision 1.14  1999/07/06 21:48:38  root
80 Fixed lockups in linear modes during write.
81
82 Revision 1.13  1999/06/28 18:30:44  root
83 Added buffer depth commands to reduce latency in compressed modes.
84
85 Revision 1.12  1999/06/25 21:03:18  root
86 Close device properly.
87 Started Mixer code for LineJack
88
89 Revision 1.11  1999/06/24 21:51:21  root
90 bug fixes
91
92 Revision 1.10  1999/06/17 18:23:16  root
93 Added tone generation.
94 Fixed LineJack hookswitch again.
95
96 Revision 1.9  1999/06/09 14:18:15  root
97 Fixed duplicate IOCTL numbers
98
99 Revision 1.8  1999/06/09 14:13:29  root
100 Added DTMF Recognition with Async Notification
101
102 Revision 1.7  1999/06/03 16:50:43  root
103 Added IXJCTL_HZ to allow changing the HZ value the driver uses.
104
105 Revision 1.6  1999/05/31 17:56:07  root
106 All linear modes now work properly.
107
108 Revision 1.5  1999/05/25 14:05:44  root
109 Added multiple codec selections.
110
111 Revision 1.4  1999/04/28 03:43:52  root
112 More work on echo cancellation
113
114 Revision 1.3  1999/04/27 17:17:12  root
115 added AEC
116
117 Revision 1.2  1999/04/22 11:43:52  root
118 Fixed stability problems
119
120 Revision 1.1  1999/03/25 21:52:42  root
121 Initial revision
122
123 *
124 * IOCTL's used for the Quicknet Cards
125 *
126 * If you use the IXJCTL_TESTRAM command, the card must be power cycled to
127 * reset the SRAM values before futher use.
128 *
129 ******************************************************************************/
130 static char ixjuser_h_rcsid[] = "$Id$";
131
132 #define IXJCTL_DSP_RESET                _IO  ('q', 0x80)
133 #define IXJCTL_RING                     _IO  ('q', 0x82)
134 #define IXJCTL_HOOKSTATE                _IO  ('q', 0x83)
135 #define IXJCTL_MAXRINGS                 _IOW ('q', 0x84, char)
136 #define IXJCTL_RING_CADENCE             _IOW ('q', 0x85, short)
137 #define IXJCTL_RING_START               _IO  ('q', 0x86)
138 #define IXJCTL_RING_STOP                _IO  ('q', 0x87)
139 #define IXJCTL_CARDTYPE                 _IOR ('q', 0x88, int)
140 #define IXJCTL_DSP_TYPE                 _IOR ('q', 0x8C, int)
141 #define IXJCTL_DSP_VERSION              _IOR ('q', 0x8D, int)
142 #define IXJCTL_DSP_IDLE                 _IO  ('q', 0x8E)
143 #define IXJCTL_TESTRAM                  _IO  ('q', 0x8F)
144
145 /******************************************************************************
146 *
147 * This group of IOCTLs deal with the record settings of the DSP
148 *
149 * The IXJCTL_REC_DEPTH command sets the internal buffer depth of the DSP.
150 * Setting a lower depth reduces latency, but increases the demand of the
151 * application to service the driver without frame loss.  The DSP has 480
152 * bytes of physical buffer memory for the record channel so the true
153 * maximum limit is determined by how many frames will fit in the buffer.
154 *
155 * 1 uncompressed (480 byte) 16-bit linear frame.
156 * 2 uncompressed (240 byte) 8-bit A-law/mu-law frames.
157 * 15 TrueSpeech 8.5 frames.
158 * 20 TrueSpeech 6.3,5.3,4.8 or 4.1 frames.
159 *
160 * The default in the driver is currently set to 2 frames.
161 *
162 * The IXJCTL_REC_VOLUME and IXJCTL_PLAY_VOLUME commands both use a Q8
163 * number as a parameter, 0x100 scales the signal by 1.0, 0x200 scales the
164 * signal by 2.0, 0x80 scales the signal by 0.5.  No protection is given
165 * against over-scaling, if the multiplication factor times the input
166 * signal exceeds 16 bits, overflow distortion will occur.  The default
167 * setting is 0x100 (1.0).
168 *
169 * The IXJCTL_REC_LEVEL returns the average signal level (not r.m.s.) on
170 * the most recently recorded frame as a 16 bit value.
171 ******************************************************************************/
172
173 #define IXJCTL_REC_CODEC                _IOW ('q', 0x90, int)
174 #define IXJCTL_REC_START                _IO  ('q', 0x92)
175 #define IXJCTL_REC_STOP                 _IO  ('q', 0x93)
176 #define IXJCTL_REC_DEPTH                _IOW ('q', 0x94, int)
177 #define IXJCTL_FRAME                    _IOW ('q', 0x95, int)
178 #define IXJCTL_REC_VOLUME               _IOW ('q', 0x96, int)
179 #define IXJCTL_REC_LEVEL                _IO  ('q', 0x97)
180
181 typedef enum{
182 f300_640 = 4, f300_500, f1100, f350, f400, f480, f440, f620, f20_50,
183 f133_200, f300, f300_420, f330, f300_425, f330_440, f340, f350_400,
184 f350_440, f350_450, f360, f380_420, f392, f400_425, f400_440, f400_450,
185 f420, f425, f425_450, f425_475, f435, f440_450, f440_480, f445, f450,
186 f452, f475, f480_620, f494, f500, f520, f523, f525, f540_660, f587,
187 f590, f600, f660, f700, f740, f750, f750_1450, f770, f800, f816, f850,
188 f857_1645, f900, f900_1300, f935_1215, f941_1477, f942, f950, f950_1400,
189 f975, f1000, f1020, f1050, f1100_1750, f1140, f1200, f1209, f1330, f1336,
190 lf1366, f1380, f1400, f1477, f1600, f1633_1638, f1800, f1860
191 }IXJ_FILTER_FREQ;
192
193 typedef struct
194 {
195   unsigned int filter;
196   IXJ_FILTER_FREQ freq;
197   char enable;
198 }IXJ_FILTER;
199
200 #define IXJCTL_SET_FILTER               _IOW ('q', 0x98, IXJ_FILTER *)
201 #define IXJCTL_GET_FILTER_HIST          _IOW ('q', 0x9B, int)
202 /******************************************************************************
203 *
204 * This IOCTL allows you to reassign values in the tone index table.  The
205 * tone table has 32 entries (0 - 31), but the driver only allows entries
206 * 13 - 27 to be modified, entry 0 is reserved for silence and 1 - 12 are
207 * the standard DTMF digits and 28 - 31 are the DTMF tones for A, B, C & D.
208 * The positions used internally for Call Progress Tones are as follows:
209 *    Dial Tone   - 25
210 *    Ring Back   - 26
211 *    Busy Signal - 27
212 *
213 * The freq values are calculated as:
214 * freq = cos(2 * PI * frequency / 8000)
215 *
216 * The most commonly needed values are already calculated and listed in the
217 * enum IXJ_TONE_FREQ.  Each tone index can have two frequencies with
218 * different gains, if you are only using a single frequency set the unused
219 * one to 0.
220 *
221 * The gain values range from 0 to 15 indicating +6dB to -24dB in 2dB
222 * increments.
223 *
224 ******************************************************************************/
225
226 typedef enum
227 {
228 hz20 = 0x7ffa, 
229 hz50 = 0x7fe5, 
230 hz133 = 0x7f4c, 
231 hz200 = 0x7e6b, 
232 hz261 = 0x7d50, /* .63 C1  */
233 hz277 = 0x7cfa, /* .18 CS1 */
234 hz293 = 0x7c9f, /* .66 D1  */
235 hz300 = 0x7c75, 
236 hz311 = 0x7c32, /* .13 DS1 */
237 hz329 = 0x7bbf, /* .63 E1  */
238 hz330 = 0x7bb8, 
239 hz340 = 0x7b75, 
240 hz349 = 0x7b37, /* .23 F1  */
241 hz350 = 0x7b30, 
242 hz360 = 0x7ae9, 
243 hz369 = 0x7aa8, /* .99 FS1 */
244 hz380 = 0x7a56, 
245 hz392 = 0x79fa, /* .00 G1  */
246 hz400 = 0x79bb, 
247 hz415 = 0x7941, /* .30 GS1 */
248 hz420 = 0x7918, 
249 hz425 = 0x78ee, 
250 hz435 = 0x7899, 
251 hz440 = 0x786d, /* .00 A1  */
252 hz445 = 0x7842, 
253 hz450 = 0x7815, 
254 hz452 = 0x7803, 
255 hz466 = 0x7784, /* .16 AS1 */
256 hz475 = 0x7731, 
257 hz480 = 0x7701, 
258 hz493 = 0x7685, /* .88 B1  */
259 hz494 = 0x767b, 
260 hz500 = 0x7640, 
261 hz520 = 0x7578, 
262 hz523 = 0x7559, /* .25 C2  */
263 hz525 = 0x7544, 
264 hz540 = 0x74a7, 
265 hz554 = 0x7411, /* .37 CS2 */
266 hz587 = 0x72a1, /* .33 D2  */
267 hz590 = 0x727f, 
268 hz600 = 0x720b, 
269 hz620 = 0x711e, 
270 hz622 = 0x7106, /* .25 DS2 */
271 hz659 = 0x6f3b, /* .26 E2  */
272 hz660 = 0x6f2e, 
273 hz698 = 0x6d3d, /* .46 F2  */
274 hz700 = 0x6d22, 
275 hz739 = 0x6b09, /* .99 FS2 */
276 hz740 = 0x6afa, 
277 hz750 = 0x6a6c, 
278 hz770 = 0x694b, 
279 hz783 = 0x688b, /* .99 G2  */
280 hz800 = 0x678d, 
281 hz816 = 0x6698, 
282 hz830 = 0x65bf, /* .61 GS2 */
283 hz850 = 0x6484, 
284 hz857 = 0x6414, 
285 hz880 = 0x629f, /* .00 A2  */
286 hz900 = 0x6154, 
287 hz932 = 0x5f35, /* .33 AS2 */
288 hz935 = 0x5f01, 
289 hz941 = 0x5e9a, 
290 hz942 = 0x5e88, 
291 hz950 = 0x5dfd, 
292 hz975 = 0x5c44, 
293 hz1000 = 0x5a81, 
294 hz1020 = 0x5912, 
295 hz1050 = 0x56e2, 
296 hz1100 = 0x5320, 
297 hz1140 = 0x5007, 
298 hz1200 = 0x4b3b, 
299 hz1209 = 0x4a80, 
300 hz1215 = 0x4a02, 
301 hz1250 = 0x471c, 
302 hz1300 = 0x42e0, 
303 hz1330 = 0x4049, 
304 hz1336 = 0x3fc4, 
305 hz1366 = 0x3d22, 
306 hz1380 = 0x3be4, 
307 hz1400 = 0x3a1b, 
308 hz1450 = 0x3596, 
309 hz1477 = 0x331c, 
310 hz1500 = 0x30fb, 
311 hz1600 = 0x278d, 
312 hz1633 = 0x2462, 
313 hz1638 = 0x23e7, 
314 hz1645 = 0x233a, 
315 hz1750 = 0x18f8, 
316 hz1800 = 0x1405, 
317 hz1860 = 0xe0b, 
318 hz2100 = 0xf5f6, 
319 hz2450 = 0xd3b3
320 }IXJ_FREQ;
321
322 typedef enum
323 {
324 C1  = hz261,
325 CS1 = hz277,
326 D1  = hz293,
327 DS1 = hz311,
328 E1  = hz329,
329 F1  = hz349,
330 FS1 = hz369,
331 G1  = hz392,
332 GS1 = hz415,
333 A1  = hz440,
334 AS1 = hz466,
335 B1  = hz493,
336 C2  = hz523,
337 CS2 = hz554,
338 D2  = hz587,
339 DS2 = hz622,
340 E2  = hz659,
341 F2  = hz698,
342 FS2 = hz739,
343 G2  = hz783,
344 GS2 = hz830,
345 A2  = hz880,
346 AS2 = hz932,
347 }IXJ_NOTE;
348
349 typedef struct
350 {
351   int tone_index;
352   int freq0;
353   int gain0;
354   int freq1;
355   int gain1;
356 }IXJ_TONE;
357
358 #define IXJCTL_INIT_TONE                _IOW ('q', 0x99, IXJ_TONE *)
359
360 /******************************************************************************
361 *
362 * The IXJCTL_TONE_CADENCE ioctl defines tone sequences used for various
363 * Call Progress Tones (CPT).  This is accomplished by setting up an array of
364 * IXJ_CADENCE_ELEMENT structures that sequentially define the states of
365 * the tone sequence.  The tone_on_time and tone_off time are in
366 * 250 microsecond intervals.  A pointer to this array is passed to the
367 * driver as the ce element of an IXJ_CADENCE structure.  The elements_used
368 * must be set to the number of IXJ_CADENCE_ELEMENTS in the array.  The
369 * termination variable defines what to do at the end of a cadence, the
370 * options are to play the cadence once and stop, to repeat the last
371 * element of the cadence indefinatly, or to repeat the entire cadence
372 * indefinatly.  The ce variable is a pointer to the array of IXJ_TONE
373 * structures.  If the freq0 variable is non-zero, the tone table contents
374 * for the tone_index are updated to the frequencies and gains defined.  It
375 * should be noted that DTMF tones cannot be reassigned, so if DTMF tone
376 * table indexs are used in a cadence the frequency and gain variables will
377 * be ignored.
378 *
379 * If the array elements contain frequency parameters the driver will
380 * initialize the needed tone table elements and begin playing the tone,
381 * there is no preset limit on the number of elements in the cadence.  If
382 * there is more than one frequency used in the cadence, sequential elements
383 * of different frequencies MUST use different tone table indexes.  Only one
384 * cadence can be played at a time.  It is possible to build complex
385 * cadences with multiple frequencies using 2 tone table indexes by
386 * alternating between them.
387 *
388 ******************************************************************************/
389
390 typedef struct
391 {
392   int index;
393   int tone_on_time;
394   int tone_off_time;
395   int freq0;
396   int gain0;
397   int freq1;
398   int gain1;
399 }IXJ_CADENCE_ELEMENT;
400
401 typedef enum
402 {
403   PLAY_ONCE,
404   REPEAT_LAST_ELEMENT,
405   REPEAT_ALL
406 }IXJ_CADENCE_TERM;
407
408 typedef struct
409 {
410   int elements_used;
411   IXJ_CADENCE_TERM termination;
412   IXJ_CADENCE_ELEMENT *ce;
413 }IXJ_CADENCE;
414
415 #define IXJCTL_TONE_CADENCE                     _IOW ('q', 0x9A, IXJ_CADENCE *)
416 /******************************************************************************
417 *
418 * This group of IOCTLs deal with the playback settings of the DSP
419 *
420 ******************************************************************************/
421
422 #define IXJCTL_PLAY_CODEC               _IOW ('q', 0xA0, int)
423 #define IXJCTL_PLAY_START               _IO  ('q', 0xA2)
424 #define IXJCTL_PLAY_STOP                _IO  ('q', 0xA3)
425 #define IXJCTL_PLAY_DEPTH               _IOW ('q', 0xA4, int)
426 #define IXJCTL_PLAY_VOLUME              _IOW ('q', 0xA5, int)
427 #define IXJCTL_PLAY_LEVEL               _IO  ('q', 0xA6)
428
429 /******************************************************************************
430 *
431 * This group of IOCTLs deal with the Acoustic Echo Cancellation settings
432 * of the DSP
433 *
434 * Issueing the IXJCTL_AEC_START command with a value of AEC_OFF has the
435 * same effect as IXJCTL_AEC_STOP.  This is to simplify slider bar
436 * controls.
437 ******************************************************************************/
438 #define IXJCTL_AEC_START                _IOW ('q', 0xB0, int)
439 #define IXJCTL_AEC_STOP                 _IO  ('q', 0xB1)
440
441 #define AEC_OFF   0
442 #define AEC_LOW   1
443 #define AEC_MED   2
444 #define AEC_HIGH  3
445 /******************************************************************************
446 *
447 * Call Progress Tones, DTMF, etc.
448 * Tone on and off times are in 250 microsecond intervals so
449 * ioctl(ixj1, IXJCTL_SET_TONE_ON_TIME, 360);
450 * will set the tone on time of board ixj1 to 360 * 250us = 90ms
451 * the default values of tone on and off times is 840 or 210ms
452 ******************************************************************************/
453
454 #define IXJCTL_DTMF_READY               _IOR ('q', 0xC0, int)
455 #define IXJCTL_GET_DTMF                 _IOR ('q', 0xC1, int)
456 #define IXJCTL_GET_DTMF_ASCII           _IOR ('q', 0xC2, int)
457 #define IXJCTL_EXCEPTION                _IOR ('q', 0xC4, int)
458 #define IXJCTL_PLAY_TONE                _IOW ('q', 0xC6, char)
459 #define IXJCTL_SET_TONE_ON_TIME         _IOW ('q', 0xC7, int)
460 #define IXJCTL_SET_TONE_OFF_TIME        _IOW ('q', 0xC8, int)
461 #define IXJCTL_GET_TONE_ON_TIME         _IO  ('q', 0xC9)
462 #define IXJCTL_GET_TONE_OFF_TIME        _IO  ('q', 0xCA)
463 #define IXJCTL_GET_TONE_STATE           _IO  ('q', 0xCB)
464 #define IXJCTL_BUSY                     _IO  ('q', 0xCC)
465 #define IXJCTL_RINGBACK                 _IO  ('q', 0xCD)
466 #define IXJCTL_DIALTONE                 _IO  ('q', 0xCE)
467
468 // This IOCTL replaced both IXJCTL_BUSY_STOP and IXJCTL_RINGBACK_STOP and
469 // should be used from now on to stop all Call Progress Tones.  It will
470 // actually abort any tone, regardless of time left in the tone_on_time
471 // and tone_off_time counters.
472 #define IXJCTL_CPT_STOP                 _IO  ('q', 0xCF)
473
474 /******************************************************************************
475 * LineJack specific IOCTLs
476 *
477 * The lsb 4 bits of the LED argument represent the state of each of the 4
478 * LED's on the LineJack
479 ******************************************************************************/
480
481 #define IXJCTL_SET_LED                  _IOW ('q', 0xD0, int)
482 #define IXJCTL_MIXER                    _IOW ('q', 0xD1, int)
483
484 /******************************************************************************
485
486 * The master volume controls use attenuation with 32 levels from 0 to -62dB
487 * with steps of 2dB each, the defines should be OR'ed together then sent
488 * as the parameter to the mixer command to change the mixer settings.
489
490 ******************************************************************************/
491 #define MIXER_MASTER_L          0x0100
492 #define MIXER_MASTER_R          0x0200
493 #define ATT00DB                 0x00
494 #define ATT02DB                 0x01
495 #define ATT04DB                 0x02
496 #define ATT06DB                 0x03
497 #define ATT08DB                 0x04
498 #define ATT10DB                 0x05
499 #define ATT12DB                 0x06
500 #define ATT14DB                 0x07
501 #define ATT16DB                 0x08
502 #define ATT18DB                 0x09
503 #define ATT20DB                 0x0A
504 #define ATT22DB                 0x0B
505 #define ATT24DB                 0x0C
506 #define ATT26DB                 0x0D
507 #define ATT28DB                 0x0E
508 #define ATT30DB                 0x0F
509 #define ATT32DB                 0x10
510 #define ATT34DB                 0x11
511 #define ATT36DB                 0x12
512 #define ATT38DB                 0x13
513 #define ATT40DB                 0x14
514 #define ATT42DB                 0x15
515 #define ATT44DB                 0x16
516 #define ATT46DB                 0x17
517 #define ATT48DB                 0x18
518 #define ATT50DB                 0x19
519 #define ATT52DB                 0x1A
520 #define ATT54DB                 0x1B
521 #define ATT56DB                 0x1C
522 #define ATT58DB                 0x1D
523 #define ATT60DB                 0x1E
524 #define ATT62DB                 0x1F
525 #define MASTER_MUTE             0x80
526
527 /******************************************************************************
528
529 * The input volume controls use gain with 32 levels from +12dB to -50dB
530 * with steps of 2dB each, the defines should be OR'ed together then sent
531 * as the parameter to the mixer command to change the mixer settings.
532
533 ******************************************************************************/
534 #define MIXER_PORT_CD_L         0x0600
535 #define MIXER_PORT_CD_R         0x0700
536 #define MIXER_PORT_LINE_IN_L    0x0800
537 #define MIXER_PORT_LINE_IN_R    0x0900
538 #define MIXER_PORT_POTS_REC     0x0C00
539 #define MIXER_PORT_MIC          0x0E00
540
541 #define GAIN12DB                0x00
542 #define GAIN10DB                0x01
543 #define GAIN08DB                0x02
544 #define GAIN06DB                0x03
545 #define GAIN04DB                0x04
546 #define GAIN02DB                0x05
547 #define GAIN00DB                0x06
548 #define GAIN_02DB               0x07
549 #define GAIN_04DB               0x08
550 #define GAIN_06DB               0x09
551 #define GAIN_08DB               0x0A
552 #define GAIN_10DB               0x0B
553 #define GAIN_12DB               0x0C
554 #define GAIN_14DB               0x0D
555 #define GAIN_16DB               0x0E
556 #define GAIN_18DB               0x0F
557 #define GAIN_20DB               0x10
558 #define GAIN_22DB               0x11
559 #define GAIN_24DB               0x12
560 #define GAIN_26DB               0x13
561 #define GAIN_28DB               0x14
562 #define GAIN_30DB               0x15
563 #define GAIN_32DB               0x16
564 #define GAIN_34DB               0x17
565 #define GAIN_36DB               0x18
566 #define GAIN_38DB               0x19
567 #define GAIN_40DB               0x1A
568 #define GAIN_42DB               0x1B
569 #define GAIN_44DB               0x1C
570 #define GAIN_46DB               0x1D
571 #define GAIN_48DB               0x1E
572 #define GAIN_50DB               0x1F
573 #define INPUT_MUTE              0x80
574
575 /******************************************************************************
576
577 * The POTS volume control use attenuation with 8 levels from 0dB to -28dB
578 * with steps of 4dB each, the defines should be OR'ed together then sent
579 * as the parameter to the mixer command to change the mixer settings.
580
581 ******************************************************************************/
582 #define MIXER_PORT_POTS_PLAY    0x0F00
583
584 #define POTS_ATT_00DB           0x00
585 #define POTS_ATT_04DB           0x01
586 #define POTS_ATT_08DB           0x02
587 #define POTS_ATT_12DB           0x03
588 #define POTS_ATT_16DB           0x04
589 #define POTS_ATT_20DB           0x05
590 #define POTS_ATT_24DB           0x06
591 #define POTS_ATT_28DB           0x07
592 #define POTS_MUTE               0x80
593
594 /******************************************************************************
595
596 * The DAA controls the interface to the PSTN port.  The driver loads the
597 * US coefficients by default, so if you live in a different country you
598 * need to load the set for your countries phone system.
599
600 ******************************************************************************/
601 #define IXJCTL_DAA_COEFF_SET            _IOW ('q', 0xD2, int)
602
603 #define DAA_US          1  //PITA 8kHz
604 #define DAA_UK          2  //ISAR34 8kHz
605 #define DAA_FRANCE      3  //
606 #define DAA_GERMANY     4
607 #define DAA_AUSTRALIA   5
608 #define DAA_JAPAN       6
609
610 /******************************************************************************
611
612 * Use IXJCTL_PORT to set or query the port the card is set to.  If the
613 * argument is set to PORT_QUERY, the return value of the ioctl will
614 * indicate which port is currently in use, otherwise it will change the
615 * port.
616
617 ******************************************************************************/
618 #define IXJCTL_PORT                     _IOW ('q', 0xD3, int)
619
620 #define PORT_QUERY      0
621 #define PORT_POTS       1
622 #define PORT_PSTN       2
623 #define PORT_SPEAKER    3
624 #define PORT_HANDSET    4
625
626 #define IXJCTL_PSTN_SET_STATE           _IOW ('q', 0xD4, int)
627 #define IXJCTL_PSTN_GET_STATE           _IO  ('q', 0xD5)
628
629 #define PSTN_ON_HOOK    0
630 #define PSTN_RINGING    1
631 #define PSTN_OFF_HOOK   2
632 #define PSTN_PULSE_DIAL 3
633
634 /******************************************************************************
635
636 * The DAA Analog GAIN sets 2 parameters at one time, the recieve gain (AGRR), 
637 * and the transmit gain (AGX).  OR together the components and pass them
638 * as the parameter to IXJCTL_DAA_AGAIN.  The default setting is both at 0dB.
639
640 ******************************************************************************/
641 #define IXJCTL_DAA_AGAIN                _IOW ('q', 0xD6, int)
642
643 #define AGRR00DB        0x00  // Analog gain in recieve direction 0dB
644 #define AGRR3_5DB       0x10  // Analog gain in recieve direction 3.5dB
645 #define AGRR06DB        0x30  // Analog gain in recieve direction 6dB
646
647 #define AGX00DB         0x00  // Analog gain in transmit direction 0dB
648 #define AGX_6DB         0x04  // Analog gain in transmit direction -6dB
649 #define AGX3_5DB        0x08  // Analog gain in transmit direction 3.5dB
650 #define AGX_2_5B        0x0C  // Analog gain in transmit direction -2.5dB
651
652 #define IXJCTL_PSTN_LINETEST            _IO  ('q', 0xD7)
653
654 typedef struct
655 {
656   char month[3];
657   char day[3];
658   char hour[3];
659   char min[3];
660   int numlen;
661   char number[11];
662   int namelen;
663   char name[80];
664 }IXJ_CID;
665
666 #define IXJCTL_CID                      _IOR ('q', 0xD8, IXJ_CID *)
667 /******************************************************************************
668
669 * The wink duration is tunable with this ioctl.  The default wink duration  
670 * is 320ms.  You do not need to use this ioctl if you do not require a
671 * different wink duration.
672
673 ******************************************************************************/
674 #define IXJCTL_WINK_DURATION            _IOW ('q', 0xD9, int)
675
676 /******************************************************************************
677
678 * This ioctl will connect the POTS port to the PSTN port on the LineJACK
679 * In order for this to work properly the port selection should be set to
680 * the PSTN port with IXJCTL_PORT prior to calling this ioctl.  This will
681 * enable conference calls between PSTN callers and network callers.
682 * Passing a 1 to this ioctl enables the POTS<->PSTN connection while
683 * passing a 0 turns it back off.
684
685 ******************************************************************************/
686 #define IXJCTL_POTS_PSTN                _IOW ('q', 0xDA, int)
687
688 /******************************************************************************
689 *
690 * IOCTLs added by request.
691 *
692 * IXJCTL_HZ sets the value your Linux kernel uses for HZ as defined in
693 *           /usr/include/asm/param.h, this determines the fundamental
694 *           frequency of the clock ticks on your Linux system.  The kernel
695 *           must be rebuilt if you change this value, also all modules you
696 *           use (except this one) must be recompiled.  The default value
697 *           is 100, and you only need to use this IOCTL if you use some
698 *           other value.
699 *
700 *
701 * IXJCTL_RATE sets the number of times per second that the driver polls
702 *             the DSP.  This value cannot be larger than HZ.  By
703 *             increasing both of these values, you may be able to reduce
704 *             latency because the max hang time that can exist between the
705 *             driver and the DSP will be reduced.
706 *
707 ******************************************************************************/
708
709 #define IXJCTL_HZ                       _IOW ('q', 0xE0, int)
710 #define IXJCTL_RATE                     _IOW ('q', 0xE1, int)
711 #define IXJCTL_FRAMES_READ              _IOR ('q', 0xE2, unsigned long)
712 #define IXJCTL_FRAMES_WRITTEN           _IOR ('q', 0xE3, unsigned long)
713 #define IXJCTL_READ_WAIT                _IOR ('q', 0xE4, unsigned long)
714 #define IXJCTL_WRITE_WAIT               _IOR ('q', 0xE5, unsigned long)
715 #define IXJCTL_DRYBUFFER_READ           _IOR ('q', 0xE6, unsigned long)
716 #define IXJCTL_DRYBUFFER_CLEAR          _IO  ('q', 0xE7)
717
718 /******************************************************************************
719 *
720 * The defined CODECs that can be used with the IXJCTL_REC_CODEC and
721 * IXJ_PLAY_CODEC IOCTLs.
722 *
723 * PCM uLaw mode is a "pass through" mode.
724 *
725 * 16 bit linear data is signed integer (2's complement form), positive
726 * full scale is 7FFFH, negative full scale is 8000H, zero is 0000H
727 *
728 * 8 bit linear data is signed byte (2's complement form), positive
729 * full scale is 7FH, negative full scale is 80H, zero is 00H
730 *
731 * 8 bit linear WSS data is unsigned byte, positive full scale is FFH,
732 * negative full scale is 00H, zero is 80H.  This is the format used for
733 * 8-bit WAVE format data (Windows Sound System).  Data can be converted
734 * between the two 8-bit formats by simply inverting the ms bit. 
735 *
736 * G729 currently works most reliably with 10ms frames.  Use 20ms and 30ms
737 * at your own risk.  If you really need larger frame sizes you can
738 * concatenate multiple 10ms frames.
739 *
740 ******************************************************************************/
741 typedef enum{           // Bytes per 30ms audio frame
742 G723_63 =       1,      // 24
743 G723_53 =       2,      // 20
744 TS85    =       3,      // 32 Does not currently work on LineJack
745 TS48    =       4,      // 18
746 TS41    =       5,      // 16
747 G728    =       6,      // 96 LineJack only!
748 G729    =       7,      // 30 LineJack only!
749 ULAW    =       8,      // 240
750 ALAW    =       9,      // 240 not implemented DO NOT USE!
751 LINEAR16=       10,     // 480
752 LINEAR8 =       11,     // 240
753 WSS     =       12      // 240
754 }IXJ_CODEC;
755 /******************************************************************************
756 *
757 * The intercom IOCTL's short the output from one card to the input of the
758 * other and vice versa (actually done in the DSP read function).  It is only
759 * necessary to execute the IOCTL on one card, but it is necessary to have
760 * both devices open to be able to detect hook switch changes.  The record
761 * codec and rate of each card must match the playback codec and rate of
762 * the other card for this to work properly.
763 *
764 ******************************************************************************/
765
766 #define IXJCTL_INTERCOM_START           _IOW ('q', 0xFD, int)
767 #define IXJCTL_INTERCOM_STOP            _IOW ('q', 0xFE, int) 
768
769 /******************************************************************************
770 *
771 * This IOCTL will decrement the module usage counter so you can force
772 * the module to unload after a program bombs.
773 *
774 ******************************************************************************/
775
776 #define IXJCTL_MODRESET                 _IO  ('q', 0xFF)
777
778 /******************************************************************************
779 *
780 * Various Defines used for the Quicknet Cards
781 *
782 ******************************************************************************/
783
784 #define SYNC_MODE_CODEC         0
785 #define SYNC_MODE_DATA          1
786 #define SYNC_MODE_POLL          2
787 #define SYNC_MODE_HOST          3
788
789 #define RECORD_SYNC_MODE        0x5100
790 #define PLAYBACK_SYNC_MODE      0x5200
791
792 #define USA_RING_CADENCE        0xC0C0
793
794 /******************************************************************************
795 *
796 * The exception structure allows us to multiplex multiple events onto the
797 * select() exception set.  If any of these flags are set select() will
798 * return with a positive indication on the exception set.  The dtmf_ready
799 * bit indicates if there is data waiting in the DTMF buffer.  The
800 * hookstate bit is set if there is a change in hookstate status, it does not
801 * indicate the current state of the hookswitch.  The pstn_ring bit
802 * indicates that the DAA on a LineJACK card has detected ring voltage on
803 * the PSTN port.  The caller_id bit indicates that caller_id data has been
804 * recieved and is available.  The pstn_wink bit indicates that the DAA on
805 * the LineJACK has recieved a wink from the telco switch.  The f0, f1, f2
806 * and f3 bits indicate that the filter has been triggered by detecting the
807 * frequency programmed into that filter.
808 *
809 ******************************************************************************/
810
811 typedef struct
812 {
813   unsigned int dtmf_ready:1;
814   unsigned int hookstate:1;
815   unsigned int pstn_ring:1;
816   unsigned int caller_id:1;
817   unsigned int pstn_wink:1;
818   unsigned int f0:1;
819   unsigned int f1:1;
820   unsigned int f2:1;
821   unsigned int f3:1;
822   unsigned int reserved:23;
823 }IXJ_EXCEPT;
824
825 typedef union
826 {
827   IXJ_EXCEPT bits;
828   unsigned int bytes;
829 }IXJ_EXCEPTION;
830