UniMRCP
1.3.0
Main Page
Related Pages
Data Structures
Files
File List
Globals
All
Data Structures
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Pages
libs
mpf
include
mpf_dtmf_generator.h
Go to the documentation of this file.
1
/*
2
* Copyright 2009-2010 Tomas Valenta, Arsen Chaloyan
3
*
4
* Licensed under the Apache License, Version 2.0 (the "License");
5
* you may not use this file except in compliance with the License.
6
* You may obtain a copy of the License at
7
*
8
* http://www.apache.org/licenses/LICENSE-2.0
9
*
10
* Unless required by applicable law or agreed to in writing, software
11
* distributed under the License is distributed on an "AS IS" BASIS,
12
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
* See the License for the specific language governing permissions and
14
* limitations under the License.
15
*/
16
17
#ifndef MPF_DTMF_GENERATOR_H
18
#define MPF_DTMF_GENERATOR_H
19
20
/**
21
* @file mpf_dtmf_generator.h
22
* @brief DTMF generator
23
*
24
* Generator used to send DTMF tones. Capable to send digits
25
* either in-band as audible tones or out-of-band according
26
* to RFC4733.
27
*/
28
29
#include "apr_pools.h"
30
#include "
apt.h
"
31
#include "
mpf_frame.h
"
32
#include "
mpf_stream.h
"
33
34
APT_BEGIN_EXTERN_C
35
36
/** DTMF generator band */
37
typedef
enum
mpf_dtmf_generator_band_e
{
38
/** Generate tones in-band */
39
MPF_DTMF_GENERATOR_INBAND
= 0x1,
40
/** Generate named events out-of-band */
41
MPF_DTMF_GENERATOR_OUTBAND
= 0x2,
42
/** Generate both tones and named events */
43
MPF_DTMF_GENERATOR_BOTH
=
MPF_DTMF_GENERATOR_INBAND
|
MPF_DTMF_GENERATOR_OUTBAND
44
}
mpf_dtmf_generator_band_e
;
45
46
/** Opaque MPF DTMF generator structure definition */
47
typedef
struct
mpf_dtmf_generator_t
mpf_dtmf_generator_t
;
48
49
50
/**
51
* Create MPF DTMF generator (advanced).
52
* @param stream A stream to transport digits via.
53
* @param band MPF_DTMF_GENERATOR_INBAND or MPF_DTMF_GENERATOR_OUTBAND
54
* @param tone_ms Tone duration in milliseconds.
55
* @param silence_ms Inter-digit silence in milliseconds.
56
* @param pool Memory pool to allocate DTMF generator from.
57
* @return The object or NULL on error.
58
* @see mpf_dtmf_generator_create
59
*/
60
MPF_DECLARE
(
struct
mpf_dtmf_generator_t
*)
mpf_dtmf_generator_create_ex
(
61
const struct
mpf_audio_stream_t
*stream,
62
enum
mpf_dtmf_generator_band_e
band,
63
apr_uint32_t tone_ms,
64
apr_uint32_t silence_ms,
65
struct apr_pool_t *pool);
66
67
/**
68
* Create MPF DTMF generator (simple). Calls mpf_dtmf_generator_create_ex
69
* with band = MPF_DTMF_GENERATOR_OUTBAND if supported by the stream or
70
* MPF_DTMF_GENERATOR_INBAND otherwise, tone_ms = 70, silence_ms = 50.
71
* @param stream A stream to transport digits via.
72
* @param pool Memory pool to allocate DTMF generator from.
73
* @return The object or NULL on error.
74
* @see mpf_dtmf_generator_create_ex
75
*/
76
static APR_INLINE struct
mpf_dtmf_generator_t
*mpf_dtmf_generator_create(
77
const struct
mpf_audio_stream_t
*stream,
78
struct apr_pool_t *pool)
79
{
80
return
mpf_dtmf_generator_create_ex
(stream,
81
stream->rx_event_descriptor ?
MPF_DTMF_GENERATOR_OUTBAND
:
MPF_DTMF_GENERATOR_INBAND
,
82
70, 50, pool);
83
}
84
85
/**
86
* Add DTMF digits to the queue.
87
* @param generator The generator.
88
* @param digits DTMF character sequence [0-9*#A-D].
89
* @return TRUE if ok, FALSE if there are too many digits.
90
*/
91
MPF_DECLARE
(
apt_bool_t
)
mpf_dtmf_generator_enqueue
(
92
struct
mpf_dtmf_generator_t
*generator,
93
const
char
*digits);
94
95
/**
96
* Empty the queue and immediately stop generating.
97
* @param generator The generator.
98
*/
99
MPF_DECLARE
(
void
)
mpf_dtmf_generator_reset
(struct
mpf_dtmf_generator_t
*generator);
100
101
/**
102
* Check state of the generator.
103
* @param generator The generator.
104
* @return TRUE if generating a digit or there are digits waiting in queue.
105
* FALSE if the queue is empty or generating silence after the last digit.
106
*/
107
MPF_DECLARE
(
apt_bool_t
)
mpf_dtmf_generator_sending
(const struct
mpf_dtmf_generator_t
*generator);
108
109
/**
110
* Put frame into the stream.
111
* @param generator The generator.
112
* @param frame Frame object passed in stream_read().
113
* @return TRUE if frame with tone (both in-band and out-of-band) was generated,
114
* FALSE otherwise. In contrast to mpf_dtmf_generator_sending, returns FALSE even
115
* if generating inter-digit silence. In other words returns TRUE iff the frame
116
* object was filled with data. This method MUST be called for each frame for
117
* proper timing.
118
*/
119
MPF_DECLARE
(
apt_bool_t
)
mpf_dtmf_generator_put_frame
(
120
struct
mpf_dtmf_generator_t
*generator,
121
struct
mpf_frame_t
*frame);
122
123
/**
124
* Free all resources associated with the generator.
125
* @param generator The generator.
126
*/
127
MPF_DECLARE
(
void
)
mpf_dtmf_generator_destroy
(struct
mpf_dtmf_generator_t
*generator);
128
129
APT_END_EXTERN_C
130
131
#endif
/* MPF_DTMF_GENERATOR_H */
Generated on Mon Feb 2 2015 19:41:38 for UniMRCP by
1.8.3.1