Dr Andrew Scott G7VAV

My photo
 
June 2025
Mo Tu We Th Fr Sa Su
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 1 2 3 4 5 6


ixjuser.h
001: #ifndef __LINUX_IXJUSER_H
002: #define __LINUX_IXJUSER_H
003: 
004: /******************************************************************************
005:  *
006:  *    ixjuser.h
007:  *
008:  * Device Driver for Quicknet Technologies, Inc.'s Telephony cards
009:  * including the Internet PhoneJACK, Internet PhoneJACK Lite,
010:  * Internet PhoneJACK PCI, Internet LineJACK, Internet PhoneCARD and
011:  * SmartCABLE
012:  *
013:  *    (c) Copyright 1999-2001  Quicknet Technologies, Inc.
014:  *
015:  *    This program is free software; you can redistribute it and/or
016:  *    modify it under the terms of the GNU General Public License
017:  *    as published by the Free Software Foundation; either version
018:  *    2 of the License, or (at your option) any later version.
019:  *
020:  * Author:          Ed Okerson, <eokerson@quicknet.net>
021:  *    
022:  * Contributors:    Greg Herlein, <gherlein@quicknet.net>
023:  *                  David W. Erhart, <derhart@quicknet.net>
024:  *                  John Sellers, <jsellers@quicknet.net>
025:  *                  Mike Preston, <mpreston@quicknet.net>
026:  *
027:  * More information about the hardware related to this driver can be found
028:  * at our website:    http://www.quicknet.net
029:  *
030:  * Fixes:
031:  *
032:  * IN NO EVENT SHALL QUICKNET TECHNOLOGIES, INC. BE LIABLE TO ANY PARTY FOR
033:  * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
034:  * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF QUICKNET
035:  * TECHNOLOGIES, INC.HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
036:  *
037:  * QUICKNET TECHNOLOGIES, INC. SPECIFICALLY DISCLAIMS ANY WARRANTIES,
038:  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
039:  * AND FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
040:  * ON AN "AS IS" BASIS, AND QUICKNET TECHNOLOGIES, INC. HAS NO OBLIGATION 
041:  * TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
042:  *
043:  *****************************************************************************/
044: 
045: #include <linux/telephony.h>
046: 
047: 
048: /******************************************************************************
049: *
050: * IOCTL's used for the Quicknet Telephony Cards
051: *
052: * If you use the IXJCTL_TESTRAM command, the card must be power cycled to
053: * reset the SRAM values before further use.
054: *
055: ******************************************************************************/
056: 
057: #define IXJCTL_DSP_RESET                _IO  ('q', 0xC0)
058: 
059: #define IXJCTL_RING                     PHONE_RING
060: #define IXJCTL_HOOKSTATE                PHONE_HOOKSTATE
061: #define IXJCTL_MAXRINGS                 PHONE_MAXRINGS
062: #define IXJCTL_RING_CADENCE             PHONE_RING_CADENCE
063: #define IXJCTL_RING_START               PHONE_RING_START
064: #define IXJCTL_RING_STOP                PHONE_RING_STOP
065: 
066: #define IXJCTL_CARDTYPE                 _IOR ('q', 0xC1, int)
067: #define IXJCTL_SERIAL                   _IOR ('q', 0xC2, int)
068: #define IXJCTL_DSP_TYPE                 _IOR ('q', 0xC3, int)
069: #define IXJCTL_DSP_VERSION              _IOR ('q', 0xC4, int)
070: #define IXJCTL_VERSION                  _IOR ('q', 0xDA, char *)
071: #define IXJCTL_DSP_IDLE                 _IO  ('q', 0xC5)
072: #define IXJCTL_TESTRAM                  _IO  ('q', 0xC6)
073: 
074: /******************************************************************************
075: *
076: * This group of IOCTLs deal with the record settings of the DSP
077: *
078: * The IXJCTL_REC_DEPTH command sets the internal buffer depth of the DSP.
079: * Setting a lower depth reduces latency, but increases the demand of the
080: * application to service the driver without frame loss.  The DSP has 480
081: * bytes of physical buffer memory for the record channel so the true
082: * maximum limit is determined by how many frames will fit in the buffer.
083: *
084: * 1 uncompressed (480 byte) 16-bit linear frame.
085: * 2 uncompressed (240 byte) 8-bit A-law/mu-law frames.
086: * 15 TrueSpeech 8.5 frames.
087: * 20 TrueSpeech 6.3,5.3,4.8 or 4.1 frames.
088: *
089: * The default in the driver is currently set to 2 frames.
090: *
091: * The IXJCTL_REC_VOLUME and IXJCTL_PLAY_VOLUME commands both use a Q8
092: * number as a parameter, 0x100 scales the signal by 1.0, 0x200 scales the
093: * signal by 2.0, 0x80 scales the signal by 0.5.  No protection is given
094: * against over-scaling, if the multiplication factor times the input
095: * signal exceeds 16 bits, overflow distortion will occur.  The default
096: * setting is 0x100 (1.0).
097: *
098: * The IXJCTL_REC_LEVEL returns the average signal level (not r.m.s.) on
099: * the most recently recorded frame as a 16 bit value.
100: ******************************************************************************/
101: 
102: #define IXJCTL_REC_CODEC                PHONE_REC_CODEC
103: #define IXJCTL_REC_START                PHONE_REC_START
104: #define IXJCTL_REC_STOP                 PHONE_REC_STOP
105: #define IXJCTL_REC_DEPTH                PHONE_REC_DEPTH
106: #define IXJCTL_FRAME                    PHONE_FRAME
107: #define IXJCTL_REC_VOLUME               PHONE_REC_VOLUME
108: #define IXJCTL_REC_LEVEL                PHONE_REC_LEVEL
109: 
110: typedef enum {
111:         f300_640 = 4, f300_500, f1100, f350, f400, f480, f440, f620, f20_50,
112:         f133_200, f300, f300_420, f330, f300_425, f330_440, f340, f350_400,
113:         f350_440, f350_450, f360, f380_420, f392, f400_425, f400_440, f400_450,
114:         f420, f425, f425_450, f425_475, f435, f440_450, f440_480, f445, f450,
115:         f452, f475, f480_620, f494, f500, f520, f523, f525, f540_660, f587,
116:         f590, f600, f660, f700, f740, f750, f750_1450, f770, f800, f816, f850,
117:         f857_1645, f900, f900_1300, f935_1215, f941_1477, f942, f950, f950_1400,
118:         f975, f1000, f1020, f1050, f1100_1750, f1140, f1200, f1209, f1330, f1336,
119:         lf1366, f1380, f1400, f1477, f1600, f1633_1638, f1800, f1860
120: } IXJ_FILTER_FREQ;
121: 
122: typedef struct {
123:         unsigned int filter;
124:         IXJ_FILTER_FREQ freq;
125:         char enable;
126: } IXJ_FILTER;
127: 
128: typedef struct {
129:         char enable;
130:         char en_filter;
131:         unsigned int filter;
132:         unsigned int on1;
133:         unsigned int off1;
134:         unsigned int on2;
135:         unsigned int off2;
136:         unsigned int on3;
137:         unsigned int off3;
138: } IXJ_FILTER_CADENCE;
139: 
140: #define IXJCTL_SET_FILTER               _IOW ('q', 0xC7, IXJ_FILTER *)
141: #define IXJCTL_SET_FILTER_RAW           _IOW ('q', 0xDD, IXJ_FILTER_RAW *)
142: #define IXJCTL_GET_FILTER_HIST          _IOW ('q', 0xC8, int)
143: #define IXJCTL_FILTER_CADENCE           _IOW ('q', 0xD6, IXJ_FILTER_CADENCE *)
144: #define IXJCTL_PLAY_CID                 _IO  ('q', 0xD7)
145: /******************************************************************************
146: *
147: * This IOCTL allows you to reassign values in the tone index table.  The
148: * tone table has 32 entries (0 - 31), but the driver only allows entries
149: * 13 - 27 to be modified, entry 0 is reserved for silence and 1 - 12 are
150: * the standard DTMF digits and 28 - 31 are the DTMF tones for A, B, C & D.
151: * The positions used internally for Call Progress Tones are as follows:
152: *    Dial Tone   - 25
153: *    Ring Back   - 26
154: *    Busy Signal - 27
155: *
156: * The freq values are calculated as:
157: * freq = cos(2 * PI * frequency / 8000)
158: *
159: * The most commonly needed values are already calculated and listed in the
160: * enum IXJ_TONE_FREQ.  Each tone index can have two frequencies with
161: * different gains, if you are only using a single frequency set the unused
162: * one to 0.
163: *
164: * The gain values range from 0 to 15 indicating +6dB to -24dB in 2dB
165: * increments.
166: *
167: ******************************************************************************/
168: 
169: typedef enum {
170:         hz20 = 0x7ffa,
171:         hz50 = 0x7fe5,
172:         hz133 = 0x7f4c,
173:         hz200 = 0x7e6b,
174:         hz261 = 0x7d50,         /* .63 C1  */
175:         hz277 = 0x7cfa,         /* .18 CS1 */
176:         hz293 = 0x7c9f,         /* .66 D1  */
177:         hz300 = 0x7c75,
178:         hz311 = 0x7c32,         /* .13 DS1 */
179:         hz329 = 0x7bbf,         /* .63 E1  */
180:         hz330 = 0x7bb8,
181:         hz340 = 0x7b75,
182:         hz349 = 0x7b37,         /* .23 F1  */
183:         hz350 = 0x7b30,
184:         hz360 = 0x7ae9,
185:         hz369 = 0x7aa8,         /* .99 FS1 */
186:         hz380 = 0x7a56,
187:         hz392 = 0x79fa,         /* .00 G1  */
188:         hz400 = 0x79bb,
189:         hz415 = 0x7941,         /* .30 GS1 */
190:         hz420 = 0x7918,
191:         hz425 = 0x78ee,
192:         hz435 = 0x7899,
193:         hz440 = 0x786d,         /* .00 A1  */
194:         hz445 = 0x7842,
195:         hz450 = 0x7815,
196:         hz452 = 0x7803,
197:         hz466 = 0x7784,         /* .16 AS1 */
198:         hz475 = 0x7731,
199:         hz480 = 0x7701,
200:         hz493 = 0x7685,         /* .88 B1  */
201:         hz494 = 0x767b,
202:         hz500 = 0x7640,
203:         hz520 = 0x7578,
204:         hz523 = 0x7559,         /* .25 C2  */
205:         hz525 = 0x7544,
206:         hz540 = 0x74a7,
207:         hz554 = 0x7411,         /* .37 CS2 */
208:         hz587 = 0x72a1,         /* .33 D2  */
209:         hz590 = 0x727f,
210:         hz600 = 0x720b,
211:         hz620 = 0x711e,
212:         hz622 = 0x7106,         /* .25 DS2 */
213:         hz659 = 0x6f3b,         /* .26 E2  */
214:         hz660 = 0x6f2e,
215:         hz698 = 0x6d3d,         /* .46 F2  */
216:         hz700 = 0x6d22,
217:         hz739 = 0x6b09,         /* .99 FS2 */
218:         hz740 = 0x6afa,
219:         hz750 = 0x6a6c,
220:         hz770 = 0x694b,
221:         hz783 = 0x688b,         /* .99 G2  */
222:         hz800 = 0x678d,
223:         hz816 = 0x6698,
224:         hz830 = 0x65bf,         /* .61 GS2 */
225:         hz850 = 0x6484,
226:         hz857 = 0x6414,
227:         hz880 = 0x629f,         /* .00 A2  */
228:         hz900 = 0x6154,
229:         hz932 = 0x5f35,         /* .33 AS2 */
230:         hz935 = 0x5f01,
231:         hz941 = 0x5e9a,
232:         hz942 = 0x5e88,
233:         hz950 = 0x5dfd,
234:         hz975 = 0x5c44,
235:         hz1000 = 0x5a81,
236:         hz1020 = 0x5912,
237:         hz1050 = 0x56e2,
238:         hz1100 = 0x5320,
239:         hz1140 = 0x5007,
240:         hz1200 = 0x4b3b,
241:         hz1209 = 0x4a80,
242:         hz1215 = 0x4a02,
243:         hz1250 = 0x471c,
244:         hz1300 = 0x42e0,
245:         hz1330 = 0x4049,
246:         hz1336 = 0x3fc4,
247:         hz1366 = 0x3d22,
248:         hz1380 = 0x3be4,
249:         hz1400 = 0x3a1b,
250:         hz1450 = 0x3596,
251:         hz1477 = 0x331c,
252:         hz1500 = 0x30fb,
253:         hz1600 = 0x278d,
254:         hz1633 = 0x2462,
255:         hz1638 = 0x23e7,
256:         hz1645 = 0x233a,
257:         hz1750 = 0x18f8,
258:         hz1800 = 0x1405,
259:         hz1860 = 0xe0b,
260:         hz2100 = 0xf5f6,
261:         hz2130 = 0xf2f5,
262:         hz2450 = 0xd3b3,
263:         hz2750 = 0xb8e4
264: } IXJ_FREQ;
265: 
266: typedef enum {
267:         C1 = hz261,
268:         CS1 = hz277,
269:         D1 = hz293,
270:         DS1 = hz311,
271:         E1 = hz329,
272:         F1 = hz349,
273:         FS1 = hz369,
274:         G1 = hz392,
275:         GS1 = hz415,
276:         A1 = hz440,
277:         AS1 = hz466,
278:         B1 = hz493,
279:         C2 = hz523,
280:         CS2 = hz554,
281:         D2 = hz587,
282:         DS2 = hz622,
283:         E2 = hz659,
284:         F2 = hz698,
285:         FS2 = hz739,
286:         G2 = hz783,
287:         GS2 = hz830,
288:         A2 = hz880,
289:         AS2 = hz932,
290: } IXJ_NOTE;
291: 
292: typedef struct {
293:         int tone_index;
294:         int freq0;
295:         int gain0;
296:         int freq1;
297:         int gain1;
298: } IXJ_TONE;
299: 
300: #define IXJCTL_INIT_TONE                _IOW ('q', 0xC9, IXJ_TONE *)
301: 
302: /******************************************************************************
303: *
304: * The IXJCTL_TONE_CADENCE ioctl defines tone sequences used for various
305: * Call Progress Tones (CPT).  This is accomplished by setting up an array of
306: * IXJ_CADENCE_ELEMENT structures that sequentially define the states of
307: * the tone sequence.  The tone_on_time and tone_off time are in
308: * 250 microsecond intervals.  A pointer to this array is passed to the
309: * driver as the ce element of an IXJ_CADENCE structure.  The elements_used
310: * must be set to the number of IXJ_CADENCE_ELEMENTS in the array.  The
311: * termination variable defines what to do at the end of a cadence, the
312: * options are to play the cadence once and stop, to repeat the last
313: * element of the cadence indefinitely, or to repeat the entire cadence
314: * indefinitely.  The ce variable is a pointer to the array of IXJ_TONE
315: * structures.  If the freq0 variable is non-zero, the tone table contents
316: * for the tone_index are updated to the frequencies and gains defined.  It
317: * should be noted that DTMF tones cannot be reassigned, so if DTMF tone
318: * table indexes are used in a cadence the frequency and gain variables will
319: * be ignored.
320: *
321: * If the array elements contain frequency parameters the driver will
322: * initialize the needed tone table elements and begin playing the tone,
323: * there is no preset limit on the number of elements in the cadence.  If
324: * there is more than one frequency used in the cadence, sequential elements
325: * of different frequencies MUST use different tone table indexes.  Only one
326: * cadence can be played at a time.  It is possible to build complex
327: * cadences with multiple frequencies using 2 tone table indexes by
328: * alternating between them.
329: *
330: ******************************************************************************/
331: 
332: typedef struct {
333:         int index;
334:         int tone_on_time;
335:         int tone_off_time;
336:         int freq0;
337:         int gain0;
338:         int freq1;
339:         int gain1;
340: } IXJ_CADENCE_ELEMENT;
341: 
342: typedef enum {
343:         PLAY_ONCE,
344:         REPEAT_LAST_ELEMENT,
345:         REPEAT_ALL
346: } IXJ_CADENCE_TERM;
347: 
348: typedef struct {
349:         int elements_used;
350:         IXJ_CADENCE_TERM termination;
351:         IXJ_CADENCE_ELEMENT *ce;
352: } IXJ_CADENCE;
353: 
354: #define IXJCTL_TONE_CADENCE             _IOW ('q', 0xCA, IXJ_CADENCE *)
355: /******************************************************************************
356: *
357: * This group of IOCTLs deal with the playback settings of the DSP
358: *
359: ******************************************************************************/
360: 
361: #define IXJCTL_PLAY_CODEC               PHONE_PLAY_CODEC
362: #define IXJCTL_PLAY_START               PHONE_PLAY_START
363: #define IXJCTL_PLAY_STOP                PHONE_PLAY_STOP
364: #define IXJCTL_PLAY_DEPTH               PHONE_PLAY_DEPTH
365: #define IXJCTL_PLAY_VOLUME              PHONE_PLAY_VOLUME
366: #define IXJCTL_PLAY_LEVEL               PHONE_PLAY_LEVEL
367: 
368: /******************************************************************************
369: *
370: * This group of IOCTLs deal with the Acoustic Echo Cancellation settings
371: * of the DSP
372: *
373: * Issuing the IXJCTL_AEC_START command with a value of AEC_OFF has the
374: * same effect as IXJCTL_AEC_STOP.  This is to simplify slider bar
375: * controls.  IXJCTL_AEC_GET_LEVEL returns the current setting of the AEC.
376: ******************************************************************************/
377: #define IXJCTL_AEC_START                _IOW ('q', 0xCB, int)
378: #define IXJCTL_AEC_STOP                 _IO  ('q', 0xCC)
379: #define IXJCTL_AEC_GET_LEVEL            _IO  ('q', 0xCD)
380: 
381: #define AEC_OFF   0
382: #define AEC_LOW   1
383: #define AEC_MED   2
384: #define AEC_HIGH  3
385: #define AEC_AUTO  4
386: #define AEC_AGC   5
387: /******************************************************************************
388: *
389: * Call Progress Tones, DTMF, etc.
390: * IXJCTL_DTMF_OOB determines if DTMF signaling is sent as Out-Of-Band
391: * only.  If you pass a 1, DTMF is suppressed from the audio stream.
392: * Tone on and off times are in 250 microsecond intervals so
393: * ioctl(ixj1, IXJCTL_SET_TONE_ON_TIME, 360);
394: * will set the tone on time of board ixj1 to 360 * 250us = 90ms
395: * the default values of tone on and off times is 840 or 210ms
396: ******************************************************************************/
397: 
398: #define IXJCTL_DTMF_READY               PHONE_DTMF_READY
399: #define IXJCTL_GET_DTMF                 PHONE_GET_DTMF
400: #define IXJCTL_GET_DTMF_ASCII           PHONE_GET_DTMF_ASCII
401: #define IXJCTL_DTMF_OOB                 PHONE_DTMF_OOB
402: #define IXJCTL_EXCEPTION                PHONE_EXCEPTION
403: #define IXJCTL_PLAY_TONE                PHONE_PLAY_TONE
404: #define IXJCTL_SET_TONE_ON_TIME         PHONE_SET_TONE_ON_TIME
405: #define IXJCTL_SET_TONE_OFF_TIME        PHONE_SET_TONE_OFF_TIME
406: #define IXJCTL_GET_TONE_ON_TIME         PHONE_GET_TONE_ON_TIME
407: #define IXJCTL_GET_TONE_OFF_TIME        PHONE_GET_TONE_OFF_TIME
408: #define IXJCTL_GET_TONE_STATE           PHONE_GET_TONE_STATE
409: #define IXJCTL_BUSY                     PHONE_BUSY
410: #define IXJCTL_RINGBACK                 PHONE_RINGBACK
411: #define IXJCTL_DIALTONE                 PHONE_DIALTONE
412: #define IXJCTL_CPT_STOP                 PHONE_CPT_STOP
413: 
414: /******************************************************************************
415: * LineJACK specific IOCTLs
416: *
417: * The lsb 4 bits of the LED argument represent the state of each of the 4
418: * LED's on the LineJACK
419: ******************************************************************************/
420: 
421: #define IXJCTL_SET_LED                  _IOW ('q', 0xCE, int)
422: #define IXJCTL_MIXER                    _IOW ('q', 0xCF, int)
423: 
424: /******************************************************************************
425: * 
426: * The master volume controls use attenuation with 32 levels from 0 to -62dB
427: * with steps of 2dB each, the defines should be OR'ed together then sent
428: * as the parameter to the mixer command to change the mixer settings.
429: * 
430: ******************************************************************************/
431: #define MIXER_MASTER_L          0x0000
432: #define MIXER_MASTER_R          0x0100
433: #define ATT00DB                 0x00
434: #define ATT02DB                 0x01
435: #define ATT04DB                 0x02
436: #define ATT06DB                 0x03
437: #define ATT08DB                 0x04
438: #define ATT10DB                 0x05
439: #define ATT12DB                 0x06
440: #define ATT14DB                 0x07
441: #define ATT16DB                 0x08
442: #define ATT18DB                 0x09
443: #define ATT20DB                 0x0A
444: #define ATT22DB                 0x0B
445: #define ATT24DB                 0x0C
446: #define ATT26DB                 0x0D
447: #define ATT28DB                 0x0E
448: #define ATT30DB                 0x0F
449: #define ATT32DB                 0x10
450: #define ATT34DB                 0x11
451: #define ATT36DB                 0x12
452: #define ATT38DB                 0x13
453: #define ATT40DB                 0x14
454: #define ATT42DB                 0x15
455: #define ATT44DB                 0x16
456: #define ATT46DB                 0x17
457: #define ATT48DB                 0x18
458: #define ATT50DB                 0x19
459: #define ATT52DB                 0x1A
460: #define ATT54DB                 0x1B
461: #define ATT56DB                 0x1C
462: #define ATT58DB                 0x1D
463: #define ATT60DB                 0x1E
464: #define ATT62DB                 0x1F
465: #define MASTER_MUTE             0x80
466: 
467: /******************************************************************************
468: * 
469: * The input volume controls use gain with 32 levels from +12dB to -50dB
470: * with steps of 2dB each, the defines should be OR'ed together then sent
471: * as the parameter to the mixer command to change the mixer settings.
472: * 
473: ******************************************************************************/
474: #define MIXER_PORT_CD_L         0x0600
475: #define MIXER_PORT_CD_R         0x0700
476: #define MIXER_PORT_LINE_IN_L    0x0800
477: #define MIXER_PORT_LINE_IN_R    0x0900
478: #define MIXER_PORT_POTS_REC     0x0C00
479: #define MIXER_PORT_MIC          0x0E00
480: 
481: #define GAIN12DB                0x00
482: #define GAIN10DB                0x01
483: #define GAIN08DB                0x02
484: #define GAIN06DB                0x03
485: #define GAIN04DB                0x04
486: #define GAIN02DB                0x05
487: #define GAIN00DB                0x06
488: #define GAIN_02DB               0x07
489: #define GAIN_04DB               0x08
490: #define GAIN_06DB               0x09
491: #define GAIN_08DB               0x0A
492: #define GAIN_10DB               0x0B
493: #define GAIN_12DB               0x0C
494: #define GAIN_14DB               0x0D
495: #define GAIN_16DB               0x0E
496: #define GAIN_18DB               0x0F
497: #define GAIN_20DB               0x10
498: #define GAIN_22DB               0x11
499: #define GAIN_24DB               0x12
500: #define GAIN_26DB               0x13
501: #define GAIN_28DB               0x14
502: #define GAIN_30DB               0x15
503: #define GAIN_32DB               0x16
504: #define GAIN_34DB               0x17
505: #define GAIN_36DB               0x18
506: #define GAIN_38DB               0x19
507: #define GAIN_40DB               0x1A
508: #define GAIN_42DB               0x1B
509: #define GAIN_44DB               0x1C
510: #define GAIN_46DB               0x1D
511: #define GAIN_48DB               0x1E
512: #define GAIN_50DB               0x1F
513: #define INPUT_MUTE              0x80
514: 
515: /******************************************************************************
516: * 
517: * The POTS volume control use attenuation with 8 levels from 0dB to -28dB
518: * with steps of 4dB each, the defines should be OR'ed together then sent
519: * as the parameter to the mixer command to change the mixer settings.
520: * 
521: ******************************************************************************/
522: #define MIXER_PORT_POTS_PLAY    0x0F00
523: 
524: #define POTS_ATT_00DB           0x00
525: #define POTS_ATT_04DB           0x01
526: #define POTS_ATT_08DB           0x02
527: #define POTS_ATT_12DB           0x03
528: #define POTS_ATT_16DB           0x04
529: #define POTS_ATT_20DB           0x05
530: #define POTS_ATT_24DB           0x06
531: #define POTS_ATT_28DB           0x07
532: #define POTS_MUTE               0x80
533: 
534: /******************************************************************************
535: * 
536: * The DAA controls the interface to the PSTN port.  The driver loads the
537: * US coefficients by default, so if you live in a different country you
538: * need to load the set for your countries phone system.
539: * 
540: ******************************************************************************/
541: #define IXJCTL_DAA_COEFF_SET            _IOW ('q', 0xD0, int)
542: 
543: #define DAA_US          1       /*PITA 8kHz */
544: #define DAA_UK          2       /*ISAR34 8kHz */
545: #define DAA_FRANCE      3       /* */
546: #define DAA_GERMANY     4
547: #define DAA_AUSTRALIA   5
548: #define DAA_JAPAN       6
549: 
550: /******************************************************************************
551: * 
552: * Use IXJCTL_PORT to set or query the port the card is set to.  If the
553: * argument is set to PORT_QUERY, the return value of the ioctl will
554: * indicate which port is currently in use, otherwise it will change the
555: * port.
556: * 
557: ******************************************************************************/
558: #define IXJCTL_PORT                     _IOW ('q', 0xD1, int)
559: 
560: #define PORT_QUERY      0
561: #define PORT_POTS       1
562: #define PORT_PSTN       2
563: #define PORT_SPEAKER    3
564: #define PORT_HANDSET    4
565: 
566: #define IXJCTL_PSTN_SET_STATE           PHONE_PSTN_SET_STATE
567: #define IXJCTL_PSTN_GET_STATE           PHONE_PSTN_GET_STATE
568: 
569: #define PSTN_ON_HOOK    0
570: #define PSTN_RINGING    1
571: #define PSTN_OFF_HOOK   2
572: #define PSTN_PULSE_DIAL 3
573: 
574: /******************************************************************************
575: * 
576: * The DAA Analog GAIN sets 2 parameters at one time, the receive gain (AGRR), 
577: * and the transmit gain (AGX).  OR together the components and pass them
578: * as the parameter to IXJCTL_DAA_AGAIN.  The default setting is both at 0dB.
579: * 
580: ******************************************************************************/
581: #define IXJCTL_DAA_AGAIN                _IOW ('q', 0xD2, int)
582: 
583: #define AGRR00DB        0x00    /* Analog gain in receive direction 0dB */
584: #define AGRR3_5DB       0x10    /* Analog gain in receive direction 3.5dB */
585: #define AGRR06DB        0x30    /* Analog gain in receive direction 6dB */
586: 
587: #define AGX00DB         0x00    /* Analog gain in transmit direction 0dB */
588: #define AGX_6DB         0x04    /* Analog gain in transmit direction -6dB */
589: #define AGX3_5DB        0x08    /* Analog gain in transmit direction 3.5dB */
590: #define AGX_2_5B        0x0C    /* Analog gain in transmit direction -2.5dB */
591: 
592: #define IXJCTL_PSTN_LINETEST            _IO  ('q', 0xD3)
593: 
594: #define IXJCTL_CID                      _IOR ('q', 0xD4, PHONE_CID *)
595: #define IXJCTL_VMWI                     _IOR ('q', 0xD8, int)
596: #define IXJCTL_CIDCW                    _IOW ('q', 0xD9, PHONE_CID *)
597: /******************************************************************************
598: * 
599: * The wink duration is tunable with this ioctl.  The default wink duration  
600: * is 320ms.  You do not need to use this ioctl if you do not require a
601: * different wink duration.
602: * 
603: ******************************************************************************/
604: #define IXJCTL_WINK_DURATION            PHONE_WINK_DURATION
605: 
606: /******************************************************************************
607: * 
608: * This ioctl will connect the POTS port to the PSTN port on the LineJACK
609: * In order for this to work properly the port selection should be set to
610: * the PSTN port with IXJCTL_PORT prior to calling this ioctl.  This will
611: * enable conference calls between PSTN callers and network callers.
612: * Passing a 1 to this ioctl enables the POTS<->PSTN connection while
613: * passing a 0 turns it back off.
614: * 
615: ******************************************************************************/
616: #define IXJCTL_POTS_PSTN                _IOW ('q', 0xD5, int)
617: 
618: /******************************************************************************
619: *
620: * IOCTLs added by request.
621: *
622: * IXJCTL_HZ sets the value your Linux kernel uses for HZ as defined in
623: *           /usr/include/asm/param.h, this determines the fundamental
624: *           frequency of the clock ticks on your Linux system.  The kernel
625: *           must be rebuilt if you change this value, also all modules you
626: *           use (except this one) must be recompiled.  The default value
627: *           is 100, and you only need to use this IOCTL if you use some
628: *           other value.
629: *
630: *
631: * IXJCTL_RATE sets the number of times per second that the driver polls
632: *             the DSP.  This value cannot be larger than HZ.  By
633: *             increasing both of these values, you may be able to reduce
634: *             latency because the max hang time that can exist between the
635: *             driver and the DSP will be reduced.
636: *
637: ******************************************************************************/
638: 
639: #define IXJCTL_HZ                       _IOW ('q', 0xE0, int)
640: #define IXJCTL_RATE                     _IOW ('q', 0xE1, int)
641: #define IXJCTL_FRAMES_READ              _IOR ('q', 0xE2, unsigned long)
642: #define IXJCTL_FRAMES_WRITTEN           _IOR ('q', 0xE3, unsigned long)
643: #define IXJCTL_READ_WAIT                _IOR ('q', 0xE4, unsigned long)
644: #define IXJCTL_WRITE_WAIT               _IOR ('q', 0xE5, unsigned long)
645: #define IXJCTL_DRYBUFFER_READ           _IOR ('q', 0xE6, unsigned long)
646: #define IXJCTL_DRYBUFFER_CLEAR          _IO  ('q', 0xE7)
647: #define IXJCTL_DTMF_PRESCALE            _IOW ('q', 0xE8, int)
648: 
649: /******************************************************************************
650: *
651: * This ioctl allows the user application to control what events the driver
652: * will send signals for, and what signals it will send for which event.
653: * By default, if signaling is enabled, all events will send SIGIO when
654: * they occur.  To disable signals for an event set the signal to 0.
655: *
656: ******************************************************************************/
657: typedef enum {
658:         SIG_DTMF_READY,
659:         SIG_HOOKSTATE,
660:         SIG_FLASH,
661:         SIG_PSTN_RING,
662:         SIG_CALLER_ID,
663:         SIG_PSTN_WINK,
664:         SIG_F0, SIG_F1, SIG_F2, SIG_F3,
665:         SIG_FC0, SIG_FC1, SIG_FC2, SIG_FC3,
666:         SIG_READ_READY = 33,
667:         SIG_WRITE_READY = 34
668: } IXJ_SIGEVENT;
669: 
670: typedef struct {
671:         unsigned int event;
672:         int signal;
673: } IXJ_SIGDEF;
674: 
675: #define IXJCTL_SIGCTL                   _IOW ('q', 0xE9, IXJ_SIGDEF *)
676: 
677: /******************************************************************************
678: *
679: * These ioctls allow the user application to change the gain in the 
680: * Smart Cable of the Internet Phone Card.  Sending -1 as a value will cause
681: * return value to be the current setting.  Valid values to set are 0x00 - 0x1F
682: *
683: * 11111 = +12 dB
684: * 10111 =   0 dB
685: * 00000 = -34.5 dB
686: *
687: * IXJCTL_SC_RXG sets the Receive gain
688: * IXJCTL_SC_TXG sets the Transmit gain
689: *
690: ******************************************************************************/
691: #define IXJCTL_SC_RXG                   _IOW ('q', 0xEA, int)
692: #define IXJCTL_SC_TXG                   _IOW ('q', 0xEB, int)
693: 
694: /******************************************************************************
695: *
696: * The intercom IOCTL's short the output from one card to the input of the
697: * other and vice versa (actually done in the DSP read function).  It is only
698: * necessary to execute the IOCTL on one card, but it is necessary to have
699: * both devices open to be able to detect hook switch changes.  The record
700: * codec and rate of each card must match the playback codec and rate of
701: * the other card for this to work properly.
702: *
703: ******************************************************************************/
704: 
705: #define IXJCTL_INTERCOM_START           _IOW ('q', 0xFD, int)
706: #define IXJCTL_INTERCOM_STOP            _IOW ('q', 0xFE, int)
707: 
708: /******************************************************************************
709:  *
710:  * new structure for accessing raw filter information
711:  *
712:  ******************************************************************************/
713: 
714: typedef struct {
715:         unsigned int filter;
716:         char enable;
717:         unsigned int coeff[19];
718: } IXJ_FILTER_RAW;
719: 
720: #endif
721: 


for client (none)
© Andrew Scott 2006 - 2025,
All Rights Reserved
http://www.andrew-scott.uk/
Andrew Scott
http://www.andrew-scott.co.uk/