summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKevin P. Fleming <kpfleming@digium.com>2006-01-29 05:15:24 +0000
committerKevin P. Fleming <kpfleming@digium.com>2006-01-29 05:15:24 +0000
commitd8908a3f52d4d0c300479fcf88577768ebe149f8 (patch)
tree49f27042fcdb58a5e697ab2d1ec3d98fd8e84e0b
parentcde6058aef41516eca903e2d876057223da909f7 (diff)
add channel-driver callbacks for variable length DTMF
teach ast_write() to call those new callbacks git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@8851 65c4cc65-6c06-0410-ace0-fbb531ad65f3
-rw-r--r--channel.c11
-rw-r--r--include/asterisk/channel.h6
2 files changed, 15 insertions, 2 deletions
diff --git a/channel.c b/channel.c
index 3db38b6cc..c961f575c 100644
--- a/channel.c
+++ b/channel.c
@@ -2295,9 +2295,16 @@ int ast_write(struct ast_channel *chan, struct ast_frame *fr)
ast_log(LOG_WARNING, "Don't know how to handle control frames yet\n");
break;
case AST_FRAME_DTMF_BEGIN:
+ if (chan->tech->send_digit_begin)
+ res = chan->tech->send_digit_begin(chan, fr->subclass);
+ else
+ res = 0;
+ break;
case AST_FRAME_DTMF_END:
- /* nothing to do with these yet */
- res = 0;
+ if (chan->tech->send_digit_end)
+ res = chan->tech->send_digit_end(chan);
+ else
+ res = 0;
break;
case AST_FRAME_DTMF:
ast_clear_flag(chan, AST_FLAG_BLOCKING);
diff --git a/include/asterisk/channel.h b/include/asterisk/channel.h
index 59fbee5ff..4b120d8cf 100644
--- a/include/asterisk/channel.h
+++ b/include/asterisk/channel.h
@@ -189,6 +189,12 @@ struct ast_channel_tech {
/*! Send a literal DTMF digit */
int (* const send_digit)(struct ast_channel *chan, char digit);
+ /*! Start sending a literal DTMF digit */
+ int (* const send_digit_begin)(struct ast_channel *chan, char digit);
+
+ /*! Stop sending the last literal DTMF digit */
+ int (* const send_digit_end)(struct ast_channel *chan);
+
/*! Call a given phone number (address, etc), but don't
take longer than timeout seconds to do so. */
int (* const call)(struct ast_channel *chan, char *addr, int timeout);