Commit | Line | Data |
---|---|---|
1da177e4 LT |
1 | |
2 | /* | |
3 | * | |
475be4d8 | 4 | Copyright (c) Eicon Networks, 2002. |
1da177e4 | 5 | * |
475be4d8 JP |
6 | This source file is supplied for the use with |
7 | Eicon Networks range of DIVA Server Adapters. | |
1da177e4 | 8 | * |
475be4d8 | 9 | Eicon File Revision : 2.1 |
1da177e4 | 10 | * |
475be4d8 JP |
11 | This program is free software; you can redistribute it and/or modify |
12 | it under the terms of the GNU General Public License as published by | |
13 | the Free Software Foundation; either version 2, or (at your option) | |
14 | any later version. | |
1da177e4 | 15 | * |
475be4d8 JP |
16 | This program is distributed in the hope that it will be useful, |
17 | but WITHOUT ANY WARRANTY OF ANY KIND WHATSOEVER INCLUDING ANY | |
18 | implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | |
19 | See the GNU General Public License for more details. | |
1da177e4 | 20 | * |
475be4d8 JP |
21 | You should have received a copy of the GNU General Public License |
22 | along with this program; if not, write to the Free Software | |
23 | Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | |
1da177e4 LT |
24 | * |
25 | */ | |
475be4d8 | 26 | #ifndef CAPIDTMF_H_ |
1da177e4 LT |
27 | #define CAPIDTMF_H_ |
28 | /*---------------------------------------------------------------------------*/ | |
29 | /*---------------------------------------------------------------------------*/ | |
30 | #define CAPIDTMF_TONE_GROUP_COUNT 2 | |
31 | #define CAPIDTMF_LOW_GROUP_FREQUENCIES 4 | |
32 | #define CAPIDTMF_HIGH_GROUP_FREQUENCIES 4 | |
33 | #define DSPDTMF_RX_SENSITIVITY_LOW_DEFAULT 50 /* -52 dBm */ | |
34 | #define DSPDTMF_RX_SENSITIVITY_HIGH_DEFAULT 50 /* -52 dBm */ | |
35 | #define DSPDTMF_RX_HIGH_EXCEEDING_LOW_DEFAULT 10 /* dB */ | |
36 | #define DSPDTMF_RX_LOW_EXCEEDING_HIGH_DEFAULT 10 /* dB */ | |
37 | #define DSPDTMF_RX_HARMONICS_SEL_DEFAULT 12 /* dB */ | |
38 | #define CAPIDTMF_RECV_BASE_FREQUENCY_COUNT (CAPIDTMF_LOW_GROUP_FREQUENCIES + CAPIDTMF_HIGH_GROUP_FREQUENCIES) | |
39 | #define CAPIDTMF_RECV_GUARD_FREQUENCY_COUNT 8 | |
40 | #define CAPIDTMF_RECV_TOTAL_FREQUENCY_COUNT (CAPIDTMF_RECV_BASE_FREQUENCY_COUNT + CAPIDTMF_RECV_GUARD_FREQUENCY_COUNT) | |
41 | #define CAPIDTMF_RECV_POSITIVE_COEFF_COUNT 16 | |
42 | #define CAPIDTMF_RECV_NEGATIVE_COEFF_COUNT (CAPIDTMF_RECV_TOTAL_FREQUENCY_COUNT - CAPIDTMF_RECV_POSITIVE_COEFF_COUNT) | |
43 | #define CAPIDTMF_RECV_ACCUMULATE_CYCLES 205 | |
44 | #define CAPIDTMF_RECV_FUNDAMENTAL_OFFSET (0xff35L * 2) | |
45 | #define CAPIDTMF_RECV_FUNDAMENTAL_DECREMENT (0x0028L * 2) | |
46 | #define CAPIDTMF_RECV_DIGIT_BUFFER_SIZE 32 | |
47 | #define CAPIDTMF_RECV_STATE_IDLE 0x00 | |
48 | #define CAPIDTMF_RECV_STATE_DTMF_ACTIVE 0x01 | |
49 | typedef struct tag_capidtmf_recv_state | |
50 | { | |
475be4d8 JP |
51 | byte digit_buffer[CAPIDTMF_RECV_DIGIT_BUFFER_SIZE]; |
52 | word digit_write_pos; | |
53 | word digit_read_pos; | |
54 | word indication_state; | |
55 | word indication_state_ack; | |
56 | long goertzel_buffer[2][CAPIDTMF_RECV_TOTAL_FREQUENCY_COUNT]; | |
57 | word min_gap_duration; | |
58 | word min_digit_duration; | |
59 | word cycle_counter; | |
60 | word current_digit_on_time; | |
61 | word current_digit_off_time; | |
62 | byte current_digit_value; | |
63 | byte state; | |
1da177e4 LT |
64 | } t_capidtmf_recv_state; |
65 | typedef struct tag_capidtmf_state | |
66 | { | |
475be4d8 JP |
67 | byte ulaw; |
68 | t_capidtmf_recv_state recv; | |
1da177e4 | 69 | } t_capidtmf_state; |
475be4d8 JP |
70 | word capidtmf_recv_indication(t_capidtmf_state *p_state, byte *buffer); |
71 | void capidtmf_recv_block(t_capidtmf_state *p_state, byte *buffer, word length); | |
72 | void capidtmf_init(t_capidtmf_state *p_state, byte ulaw); | |
73 | void capidtmf_recv_enable(t_capidtmf_state *p_state, word min_digit_duration, word min_gap_duration); | |
74 | void capidtmf_recv_disable(t_capidtmf_state *p_state); | |
75 | #define capidtmf_indication(p_state, buffer) (((p_state)->recv.indication_state != (p_state)->recv.indication_state_ack) ? capidtmf_recv_indication(p_state, buffer) : 0) | |
76 | #define capidtmf_recv_process_block(p_state, buffer, length) { if ((p_state)->recv.state != CAPIDTMF_RECV_STATE_IDLE) capidtmf_recv_block(p_state, buffer, length); } | |
1da177e4 LT |
77 | /*---------------------------------------------------------------------------*/ |
78 | /*---------------------------------------------------------------------------*/ | |
475be4d8 | 79 | #endif |