aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorfile <file@f38db490-d61c-443f-a65b-d21fe96a405b>2007-08-13 14:51:09 +0000
committerfile <file@f38db490-d61c-443f-a65b-d21fe96a405b>2007-08-13 14:51:09 +0000
commit0c9b3cfe581180a63bc3c5049c667ffbde45ff63 (patch)
tree4870eced532a2d1c751e72330421b73cf143e39d
parent19462d7c765442837bb8ac70295d5a037fbf8adf (diff)
Add an API call to allow the engine to know that DTMF was received.
git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.4@79207 f38db490-d61c-443f-a65b-d21fe96a405b
-rw-r--r--apps/app_speech_utils.c1
-rw-r--r--include/asterisk/speech.h4
-rw-r--r--res/res_speech.c15
3 files changed, 20 insertions, 0 deletions
diff --git a/apps/app_speech_utils.c b/apps/app_speech_utils.c
index c545db7cd..cf559c453 100644
--- a/apps/app_speech_utils.c
+++ b/apps/app_speech_utils.c
@@ -722,6 +722,7 @@ static int speech_background(struct ast_channel *chan, void *data)
/* Free the frame we received */
switch (f->frametype) {
case AST_FRAME_DTMF:
+ ast_speech_dtmf(speech, f->subclass);
if (dtmf_terminator != '\0' && f->subclass == dtmf_terminator) {
done = 1;
} else {
diff --git a/include/asterisk/speech.h b/include/asterisk/speech.h
index 85e17edf2..85a351485 100644
--- a/include/asterisk/speech.h
+++ b/include/asterisk/speech.h
@@ -83,6 +83,8 @@ struct ast_speech_engine {
int (*deactivate)(struct ast_speech *speech, char *grammar_name);
/*! Write audio to the speech engine */
int (*write)(struct ast_speech *speech, void *data, int len);
+ /*! Signal DTMF was received */
+ int (*dtmf)(struct ast_speech *speech, char dtmf);
/*! Prepare engine to accept audio */
int (*start)(struct ast_speech *speech);
/*! Change an engine specific setting */
@@ -130,6 +132,8 @@ struct ast_speech *ast_speech_new(char *engine_name, int format);
int ast_speech_destroy(struct ast_speech *speech);
/*! \brief Write audio to the speech engine */
int ast_speech_write(struct ast_speech *speech, void *data, int len);
+/*! \brief Signal to the engine that DTMF was received */
+int ast_speech_dtmf(struct ast_speech *speech, char dtmf);
/*! \brief Change an engine specific attribute */
int ast_speech_change(struct ast_speech *speech, char *name, const char *value);
/*! \brief Change the type of results we want */
diff --git a/res/res_speech.c b/res/res_speech.c
index 73dfe8dec..5b8f3569c 100644
--- a/res/res_speech.c
+++ b/res/res_speech.c
@@ -193,6 +193,21 @@ int ast_speech_write(struct ast_speech *speech, void *data, int len)
return res;
}
+/*! \brief Signal to the engine that DTMF was received */
+int ast_speech_dtmf(struct ast_speech *speech, char dtmf)
+{
+ int res = 0;
+
+ if (speech->state != AST_SPEECH_STATE_READY)
+ return -1;
+
+ if (speech->engine->dtmf != NULL) {
+ res = speech->engine->dtmf(speech, dtmf);
+ }
+
+ return res;
+}
+
/*! \brief Change an engine specific attribute */
int ast_speech_change(struct ast_speech *speech, char *name, const char *value)
{