summaryrefslogtreecommitdiff
path: root/gendigits.c
diff options
context:
space:
mode:
Diffstat (limited to 'gendigits.c')
-rw-r--r--gendigits.c155
1 files changed, 0 insertions, 155 deletions
diff --git a/gendigits.c b/gendigits.c
deleted file mode 100644
index 5ca0c51..0000000
--- a/gendigits.c
+++ /dev/null
@@ -1,155 +0,0 @@
-/* Generate a header file for a particular
- single or double frequency */
-
-#include <stdio.h>
-#include <math.h>
-#include <string.h>
-#include <unistd.h>
-#include <stdlib.h>
-#define CLIP 32635
-#define BIAS 0x84
-
-/* Dial frequency tables */
-typedef struct
-{
-char chr; /* character representation */
-float f1; /* first freq */
-float f2; /* second freq */
-} ZAP_DIAL;
-
-ZAP_DIAL dtmf_dial[] = {
-{ '0',941.0,1336.0 },
-{ '1',697.0,1209.0 },
-{ '2',697.0,1336.0 },
-{ '3',697.0,1477.0 },
-{ '4',770.0,1209.0 },
-{ '5',770.0,1336.0 },
-{ '6',770.0,1477.0 },
-{ '7',852.0,1209.0 },
-{ '8',852.0,1336.0 },
-{ '9',852.0,1477.0 },
-{ '*',941.0,1209.0 },
-{ '#',941.0,1477.0 },
-{ 'A',697.0,1633.0 },
-{ 'B',770.0,1633.0 },
-{ 'C',852.0,1633.0 },
-{ 'D',941.0,1633.0 },
-{ 0,0,0 }
-} ;
-
-ZAP_DIAL mf_dial[] = {
-{ '0',1300.0,1500.0 },
-{ '1',700.0,900.0 },
-{ '2',700.0,1100.0 },
-{ '3',900.0,1100.0 },
-{ '4',700.0,1300.0 },
-{ '5',900.0,1300.0 },
-{ '6',1100.0,1300.0 },
-{ '7',700.0,1500.0 },
-{ '8',900.0,1500.0 },
-{ '9',1100.0,1500.0 },
-{ '*',1100.0,1700.0 }, /* KP */
-{ '#',1500.0,1700.0 }, /* ST */
-{ 'A',900.0,1700.0 }, /* ST' */
-{ 'B',1300.0,1700.0}, /* ST'' */
-{ 'C',700.0,1700.0}, /* ST''' */
-{ 0,0,0 }
-} ;
-
-unsigned char
-linear2ulaw(sample)
-short sample; {
- static int exp_lut[256] = {0,0,1,1,2,2,2,2,3,3,3,3,3,3,3,3,
- 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
- 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
- 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
- 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
- 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
- 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
- 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
- 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
- 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
- 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
- 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
- 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
- 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
- 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
- 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7};
- int sign, exponent, mantissa;
- unsigned char ulawbyte;
-
- /* Get the sample into sign-magnitude. */
- sign = (sample >> 8) & 0x80; /* set aside the sign */
- if (sign != 0) sample = -sample; /* get magnitude */
- if (sample > CLIP) sample = CLIP; /* clip the magnitude */
-
- /* Convert from 16 bit linear to ulaw. */
- sample = sample + BIAS;
- exponent = exp_lut[(sample >> 7) & 0xFF];
- mantissa = (sample >> (exponent + 3)) & 0x0F;
- ulawbyte = ~(sign | (exponent << 4) | mantissa);
-#ifdef ZEROTRAP
- if (ulawbyte == 0) ulawbyte = 0x02; /* optional CCITT trap */
-#endif
-
- return(ulawbyte);
-}
-
-int process(char *label, ZAP_DIAL z[], float low_tone_level, float high_tone_level)
-{
- char c;
- float gain;
- int fac1, init_v2_1, init_v3_1,
- fac2, init_v2_2, init_v3_2;
-
- while(z->chr) {
- c = z->chr;
- if (c == '*')
- c = 's';
- if (c == '#')
- c ='p';
- /* Bring it down 6 dbm */
- gain = pow(10.0, (low_tone_level - 3.14) / 20.0) * 65536.0 / 2.0;
- fac1 = 2.0 * cos(2.0 * M_PI * (z->f1 / 8000.0)) * 32768.0;
- init_v2_1 = sin(-4.0 * M_PI * (z->f1 / 8000.0)) * gain;
- init_v3_1 = sin(-2.0 * M_PI * (z->f1 / 8000.0)) * gain;
-
- gain = pow(10.0, (high_tone_level - 3.14) / 20.0) * 65536.0 / 2.0;
- fac2 = 2.0 * cos(2.0 * M_PI * (z->f2 / 8000.0)) * 32768.0;
- init_v2_2 = sin(-4.0 * M_PI * (z->f2 / 8000.0)) * gain;
- init_v3_2 = sin(-2.0 * M_PI * (z->f2 / 8000.0)) * gain;
-
- printf("\t /* %s_%c */ { %d, %d, %d, %d, %d, %d, DEFAULT_DTMF_LENGTH, &%s_silence }, \n", label, c,
- fac1, init_v2_1, init_v3_1,
- fac2, init_v2_2, init_v3_2,
- label);
-
- z++;
- }
- return 0;
-}
-
-/* The following are the levels for the low tones (LEVEL1) and the high tones
- (LEVEL2) of DTMF digits, in dBm0. If you need to adjust these levels, this
- is the place to do it */
-#define LEVEL_DTMF_LOW -10
-#define LEVEL_DTMF_HIGH -10
-
-/* The following is the level for the tones in MF digits, in dBm0. If you
- need to adjust this level, this is the place to do it */
-#define LEVEL_MF -10
-
-int main(int argc, char *argv[])
-{
- printf("/* DTMF and MF tones used by the Tormenta Driver, in static tables.\n"
- " Generated automatically from gendigits. Do not edit by hand. */\n");
- printf("static struct zt_tone dtmf_tones[16] = {\n");
- process("dtmf", dtmf_dial, LEVEL_DTMF_LOW, LEVEL_DTMF_HIGH);
- printf("};\n\n");
- printf("static struct zt_tone mfv1_tones[15] = {\n");
- process("mfv1", mf_dial, LEVEL_MF, LEVEL_MF);
- printf("};\n\n");
- printf("/* END tones.h */\n");
-
- return 0;
-}