998
1002
} else if (hz[HZ_950] > TONE_MIN_THRESH * TONE_THRESH) {
999
1003
newstate = DSP_TONE_STATE_SPECIAL1;
1000
1004
} else if (hz[HZ_1400] > TONE_MIN_THRESH * TONE_THRESH) {
1001
if (dsp->tstate == DSP_TONE_STATE_SPECIAL1)
1005
/* End of SPECIAL1 or middle of SPECIAL2 */
1006
if (dsp->tstate == DSP_TONE_STATE_SPECIAL1 || dsp->tstate == DSP_TONE_STATE_SPECIAL2) {
1002
1007
newstate = DSP_TONE_STATE_SPECIAL2;
1003
1009
} else if (hz[HZ_1800] > TONE_MIN_THRESH * TONE_THRESH) {
1004
if (dsp->tstate == DSP_TONE_STATE_SPECIAL2) {
1010
/* End of SPECIAL2 or middle of SPECIAL3 */
1011
if (dsp->tstate == DSP_TONE_STATE_SPECIAL2 || dsp->tstate == DSP_TONE_STATE_SPECIAL3) {
1005
1012
newstate = DSP_TONE_STATE_SPECIAL3;
1007
1014
} else if (dsp->genergy > TONE_MIN_THRESH * TONE_THRESH) {
1035
1042
dsp->ringtimeout++;
1037
1044
switch (dsp->tstate) {
1038
case DSP_TONE_STATE_RINGING:
1039
if ((dsp->features & DSP_PROGRESS_RINGING) &&
1040
(dsp->tcount==THRESH_RING)) {
1041
res = AST_CONTROL_RINGING;
1042
dsp->ringtimeout= 1;
1045
case DSP_TONE_STATE_BUSY:
1046
if ((dsp->features & DSP_PROGRESS_BUSY) &&
1047
(dsp->tcount==THRESH_BUSY)) {
1048
res = AST_CONTROL_BUSY;
1049
dsp->features &= ~DSP_FEATURE_CALL_PROGRESS;
1052
case DSP_TONE_STATE_TALKING:
1053
if ((dsp->features & DSP_PROGRESS_TALK) &&
1054
(dsp->tcount==THRESH_TALK)) {
1055
res = AST_CONTROL_ANSWER;
1056
dsp->features &= ~DSP_FEATURE_CALL_PROGRESS;
1059
case DSP_TONE_STATE_SPECIAL3:
1060
if ((dsp->features & DSP_PROGRESS_CONGESTION) &&
1061
(dsp->tcount==THRESH_CONGESTION)) {
1062
res = AST_CONTROL_CONGESTION;
1063
dsp->features &= ~DSP_FEATURE_CALL_PROGRESS;
1066
case DSP_TONE_STATE_HUNGUP:
1067
if ((dsp->features & DSP_FEATURE_CALL_PROGRESS) &&
1068
(dsp->tcount==THRESH_HANGUP)) {
1069
res = AST_CONTROL_HANGUP;
1070
dsp->features &= ~DSP_FEATURE_CALL_PROGRESS;
1045
case DSP_TONE_STATE_RINGING:
1046
if ((dsp->features & DSP_PROGRESS_RINGING) &&
1047
(dsp->tcount == THRESH_RING)) {
1048
res = AST_CONTROL_RINGING;
1049
dsp->ringtimeout = 1;
1052
case DSP_TONE_STATE_BUSY:
1053
if ((dsp->features & DSP_PROGRESS_BUSY) &&
1054
(dsp->tcount == THRESH_BUSY)) {
1055
res = AST_CONTROL_BUSY;
1056
dsp->features &= ~DSP_FEATURE_CALL_PROGRESS;
1059
case DSP_TONE_STATE_TALKING:
1060
if ((dsp->features & DSP_PROGRESS_TALK) &&
1061
(dsp->tcount == THRESH_TALK)) {
1062
res = AST_CONTROL_ANSWER;
1063
dsp->features &= ~DSP_FEATURE_CALL_PROGRESS;
1066
case DSP_TONE_STATE_SPECIAL3:
1067
if ((dsp->features & DSP_PROGRESS_CONGESTION) &&
1068
(dsp->tcount == THRESH_CONGESTION)) {
1069
res = AST_CONTROL_CONGESTION;
1070
dsp->features &= ~DSP_FEATURE_CALL_PROGRESS;
1073
case DSP_TONE_STATE_HUNGUP:
1074
if ((dsp->features & DSP_FEATURE_CALL_PROGRESS) &&
1075
(dsp->tcount == THRESH_HANGUP)) {
1076
res = AST_CONTROL_HANGUP;
1077
dsp->features &= ~DSP_FEATURE_CALL_PROGRESS;
1074
if (dsp->ringtimeout==THRESH_RING2ANSWER) {
1081
if (dsp->ringtimeout == THRESH_RING2ANSWER) {
1075
1082
ast_debug(1, "Consider call as answered because of timeout after last ring\n");
1076
1083
res = AST_CONTROL_ANSWER;
1077
1084
dsp->features &= ~DSP_FEATURE_CALL_PROGRESS;
1409
1416
if (dsp->features & DSP_FEATURE_DIGIT_DETECT) {
1410
1417
event = AST_FRAME_DTMF_END;
1411
1418
event_digit = dsp->digit_state.digits[0];
1419
event_len = dsp->digit_state.digitlen[0] * 1000 / SAMPLE_RATE;
1413
memmove(dsp->digit_state.digits, dsp->digit_state.digits + 1, dsp->digit_state.current_digits);
1421
memmove(&dsp->digit_state.digits[0], &dsp->digit_state.digits[1], dsp->digit_state.current_digits);
1422
memmove(&dsp->digit_state.digitlen[0], &dsp->digit_state.digitlen[1], dsp->digit_state.current_digits * sizeof(dsp->digit_state.digitlen[0]));
1414
1423
dsp->digit_state.current_digits--;
1415
1424
dsp->dtmf_began = 0;