UniMRCP  1.7.0
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 
35 
36 /** DTMF generator band */
38  /** Generate tones in-band */
40  /** Generate named events out-of-band */
42  /** Generate both tones and named events */
45 
46 /** Opaque MPF DTMF generator structure definition */
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  */
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,
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  */
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  */
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  */
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  */
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  */
128 
130 
131 #endif /* MPF_DTMF_GENERATOR_H */
Definition: mpf_stream.h:37
struct mpf_dtmf_generator_t * mpf_dtmf_generator_create_ex(const struct mpf_audio_stream_t *stream, enum mpf_dtmf_generator_band_e band, apr_uint32_t tone_ms, apr_uint32_t silence_ms, struct apr_pool_t *pool)
apt_bool_t mpf_dtmf_generator_sending(const struct mpf_dtmf_generator_t *generator)
MPF Bidirectional Stream.
#define APT_END_EXTERN_C
Definition: apt.h:38
mpf_dtmf_generator_band_e
Definition: mpf_dtmf_generator.h:37
int apt_bool_t
Definition: apt.h:57
Definition: mpf_dtmf_generator.h:39
Definition: mpf_frame.h:50
#define MPF_DECLARE(type)
Definition: mpf.h:40
#define APT_BEGIN_EXTERN_C
Definition: apt.h:36
MPF Audio/Video/Named-event Frame.
apt_bool_t mpf_dtmf_generator_put_frame(struct mpf_dtmf_generator_t *generator, struct mpf_frame_t *frame)
APR Toolkit Definitions.
apt_bool_t mpf_dtmf_generator_enqueue(struct mpf_dtmf_generator_t *generator, const char *digits)
Definition: mpf_dtmf_generator.h:41
struct mpf_dtmf_generator_t mpf_dtmf_generator_t
Definition: mpf_dtmf_generator.h:47
mpf_codec_descriptor_t * rx_event_descriptor
Definition: mpf_stream.h:53
void mpf_dtmf_generator_reset(struct mpf_dtmf_generator_t *generator)
Definition: mpf_dtmf_generator.h:43
void mpf_dtmf_generator_destroy(struct mpf_dtmf_generator_t *generator)