Fixed disabling of DTMF using 'n' option of chan_lcr.

Please enter the commit message for your changes.
	modified:   README
	modified:   apppbx.cpp
	modified:   bchannel.c
	modified:   chan_lcr.c
	modified:   chan_lcr.h
This commit is contained in:
Andreas Eversberg 2009-05-21 19:11:39 +02:00
parent 610b98487d
commit 063d622d53
5 changed files with 18 additions and 14 deletions

1
README
View File

@ -501,5 +501,6 @@ Changes after Version 1.5
- Debug option now works for GSM.
- Fixed some GSM information elements.
- OpenBSC api changes.
- Fixed disabling of DTMF using 'n' option of chan_lcr.

View File

@ -3268,7 +3268,7 @@ void EndpointAppPBX::ea_message_join(unsigned int join_id, int message_type, uni
join_notify(portlist, message_type, param);
break;
/* JOIN wants keypad / dtml */
/* JOIN wants keypad / dtmf */
case MESSAGE_ENABLEKEYPAD:
PDEBUG(DEBUG_EPOINT, "EPOINT(%d) epoint with terminal '%s' (caller id '%s') received keypad enable request.\n", ea_endpoint->ep_serial, e_ext.number, e_callerinfo.id);
e_enablekeypad = 1;

View File

@ -483,7 +483,7 @@ void bchannel_dtmf(struct bchannel *bchannel, int on)
int sock;
sock = bchannel->b_sock;
bchannel->b_dtmf = 1;
bchannel->b_dtmf = on;
if (bchannel->b_state == BSTATE_ACTIVE && bchannel->b_mode == 0)
ph_control(sock, on?DTMF_TONE_START:DTMF_TONE_STOP, 0, "DSP-DTMF", 1, bchannel->b_mode);
}

View File

@ -414,7 +414,11 @@ void apply_opt(struct chan_call *call, char *data)
break;
}
CDEBUG(call, call->ast, "Option 'n' (no DTMF).\n");
call->no_dtmf = 1;
if (call->dsp_dtmf) {
call->dsp_dtmf = 0;
if (call->bchannel)
bchannel_dtmf(call->bchannel, 0);
}
break;
case 'c':
if (opt[1] == '\0') {
@ -1158,6 +1162,11 @@ void lcr_in_dtmf(struct chan_call *call, int val)
if (!call->pbx_started)
return;
if (!call->dsp_dtmf) {
CDEBUG(call, call->ast, "Recognised DTMF digit '%c', but ignoring. This is fixed in later mISDN driver.\n", val);
return;
}
CDEBUG(call, call->ast, "Recognised DTMF digit '%c'.\n", val);
digit[0] = val;
digit[1] = '\0';
@ -1205,7 +1214,6 @@ int receive_message(int message_type, unsigned int ref, union parameter *param)
memcpy(bchannel->b_bf_key, param->bchannel.crypt, param->bchannel.crypt_len);
}
bchannel->b_txdata = 0;
bchannel->b_dtmf = 1;
bchannel->b_tx_dejitter = 1;
/* in case, ref is not set, this bchannel instance must
@ -1216,7 +1224,7 @@ int receive_message(int message_type, unsigned int ref, union parameter *param)
{
bchannel->call = call;
call->bchannel = bchannel;
if (call->dtmf)
if (call->dsp_dtmf)
bchannel_dtmf(bchannel, 1);
if (call->bf_len)
bchannel_blowfish(bchannel, call->bf_key, call->bf_len);
@ -1289,6 +1297,8 @@ int receive_message(int message_type, unsigned int ref, union parameter *param)
/* set ref */
call->ref = ref;
call->ref_was_assigned = 1;
/* set dtmf (default, use option 'n' to disable */
call->dsp_dtmf = 1;
/* wait for setup (or release from asterisk) */
} else
{
@ -2065,11 +2075,6 @@ static int lcr_answer(struct ast_channel *ast)
/* enable keypad */
// memset(&newparam, 0, sizeof(union parameter));
// send_message(MESSAGE_ENABLEKEYPAD, call->ref, &newparam);
/* enable dtmf */
if (call->no_dtmf)
CDEBUG(call, ast, "DTMF is disabled by option.\n");
else
call->dtmf = 1;
ast_mutex_unlock(&chan_lock);
return 0;

View File

@ -50,10 +50,8 @@ struct chan_call {
char cid_rdnis[64]; /* cached cid for setup */
char display[128];
/* display for setup */
int dtmf;
/* shall dtmf be enabled */
int no_dtmf;
/* dtmf disabled by option */
int dsp_dtmf;
/* decode dtmf by dsp */
int inband_dtmf; /* generate dtmf tones, if
requested by asterisk */
int rebuffer; /* send only 160 bytes frames