From: Russell Bryant Date: Wed, 15 Jun 2005 21:42:31 +0000 (+0000) Subject: add support for native DTMF X-Git-Tag: 1.0.11.1~83 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4a15544b22807606700da0eb39107b47e5e0732e;p=thirdparty%2Fasterisk.git add support for native DTMF git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/v1-0@5917 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/channels/chan_zap.c b/channels/chan_zap.c index 4e3fa489f0..c71fc79b40 100755 --- a/channels/chan_zap.c +++ b/channels/chan_zap.c @@ -69,6 +69,12 @@ #error "Your zaptel is too old. please cvs update" #endif +#ifndef ZT_TONEDETECT +/* Work around older code with no tone detect */ +#define ZT_EVENT_DTMFDOWN 0 +#define ZT_EVENT_DTMFUP 0 +#endif + /* * Define ZHONE_HACK to cause us to go off hook and then back on hook when * the user hangs up to reset the state machine so ring works properly. @@ -3081,7 +3087,7 @@ static struct ast_frame *zt_handle_event(struct ast_channel *ast) } else res = zt_get_event(p->subs[index].zfd); ast_log(LOG_DEBUG, "Got event %s(%d) on channel %d (index %d)\n", event2str(res), res, p->channel, index); - if (res & (ZT_EVENT_PULSEDIGIT | ZT_EVENT_DTMFDIGIT)) { + if (res & (ZT_EVENT_PULSEDIGIT | ZT_EVENT_DTMFUP)) { if (res & ZT_EVENT_PULSEDIGIT) p->pulsedial = 1; else @@ -3089,7 +3095,16 @@ static struct ast_frame *zt_handle_event(struct ast_channel *ast) ast_log(LOG_DEBUG, "Pulse dial '%c'\n", res & 0xff); p->subs[index].f.frametype = AST_FRAME_DTMF; p->subs[index].f.subclass = res & 0xff; - /* Return the captured digit */ + /* Unmute conference, return the captured digit */ + zt_confmute(p, 0); + return &p->subs[index].f; + } + if (res & ZT_EVENT_DTMFDOWN) { + ast_log(LOG_DEBUG, "DTMF Down '%c'\n", res & 0xff); + p->subs[index].f.frametype = AST_FRAME_NULL; + p->subs[index].f.subclass = 0; + zt_confmute(p, 1); + /* Mute conference, return null frame */ return &p->subs[index].f; } switch(res) { @@ -4415,7 +4430,11 @@ static struct ast_channel *zt_new(struct zt_pvt *i, int state, int startpbx, int (i->outgoing && (i->callprogress & 2))) { features |= DSP_FEATURE_FAX_DETECT; } - features |= DSP_FEATURE_DTMF_DETECT; +#ifdef ZT_TONEDETECT + x = ZT_TONEDETECT_ON | ZT_TONEDETECT_MUTE; + if (ioctl(i->subs[index].zfd, ZT_TONEDETECT, &x)) +#endif + features |= DSP_FEATURE_DTMF_DETECT; if (features) { if (i->dsp) { ast_log(LOG_DEBUG, "Already have a dsp on %s?\n", tmp->name); @@ -6945,6 +6964,8 @@ static struct ast_channel *zt_request(char *type, int format, void *data) } else if (opt == 'd') { /* If this is an ISDN call, make it digital */ p->digital = 1; + if (tmp) + ast_set_flag(tmp, AST_FLAG_DIGITAL); } else { ast_log(LOG_WARNING, "Unknown option '%c' in '%s'\n", opt, (char *)data); }