X-Git-Url: http://git.eversberg.eu/gitweb.cgi?p=lcr.git;a=blobdiff_plain;f=gsm_bs.cpp;fp=gsm_bs.cpp;h=22ac70ce241ce4440c60d8b050b5353994cdcfae;hp=e25732aacc7c5ae00255af97e5f299676c35dd66;hb=da91d7d85fe092122e35ece52695f98345738359;hpb=2f5c3dc13063fc5e4cc4b72d2c3484be238c142e diff --git a/gsm_bs.cpp b/gsm_bs.cpp index e25732a..22ac70c 100644 --- a/gsm_bs.cpp +++ b/gsm_bs.cpp @@ -57,6 +57,34 @@ void generate_dtmf(void) /* + * DTMF stuff + */ +unsigned char dtmf_samples[16][8000]; +static int dtmf_x[4] = { 1209, 1336, 1477, 1633 }; +static int dtmf_y[4] = { 697, 770, 852, 941 }; + +void generate_dtmf(void) +{ + double fx, fy, sample; + int i, x, y; + unsigned char *law; + + for (y = 0; y < 4; y++) { + fy = 2 * 3.1415927 * ((double)dtmf_y[y]) / 8000.0; + for (x = 0; x < 4; x++) { + fx = 2 * 3.1415927 * ((double)dtmf_x[x]) / 8000.0; + law = dtmf_samples[y << 2 | x]; + for (i = 0; i < 8000; i++) { + sample = sin(fy * ((double)i)) * 0.251 * 32767.0; /* -6 dB */ + sample += sin(fx * ((double)i)) * 0.158 * 32767.0; /* -8 dB */ + *law++ = audio_s16_to_law[(int)sample & 0xffff]; + } + } + } +} + + +/* * constructor */ Pgsm_bs::Pgsm_bs(int type, struct mISDNport *mISDNport, char *portname, struct port_settings *settings, int channel, int exclusive, int mode) : Pgsm(type, mISDNport, portname, settings, channel, exclusive, mode)