if (i->busydetect && CANBUSYDETECT(i)) {
features |= DSP_FEATURE_BUSY_DETECT;
}
- if (i->callprogress && CANPROGRESSDETECT(i)) {
+ if ((i->callprogress & 1) && CANPROGRESSDETECT(i)) {
features |= DSP_FEATURE_CALL_PROGRESS;
}
+ if (i->callprogress & 2) {
+ features |= DSP_FEATURE_FAX_DETECT;
+ }
features |= DSP_FEATURE_DTMF_DETECT;
if (features) {
if (i->dsp) {
struct zt_pri *pri = vpri;
pri_event *e;
struct pollfd fds[NUM_DCHANS];
- struct zt_spaninfo si;
int res;
int chanpos = 0;
int x;
} else if (!strcasecmp(v->name, "busycount")) {
busycount = atoi(v->value);
} else if (!strcasecmp(v->name, "callprogress")) {
- callprogress = ast_true(v->value);
+ if (ast_true(v->value))
+ callprogress |= 1;
+ else
+ callprogress &= ~1;
+ } else if (!strcasecmp(v->name, "faxdetect")) {
+ if (ast_true(v->value))
+ callprogress |= 2;
+ else
+ callprogress &= ~2;
} else if (!strcasecmp(v->name, "echocancel")) {
if (v->value && !ast_strlen_zero(v->value)) {
y = atoi(v->value);
static int dtmf_detect (dtmf_detect_state_t *s,
int16_t amp[],
int samples,
- int digitmode, int *writeback)
+ int digitmode, int *writeback, int faxdetect)
{
float row_energy[4];
}
}
#ifdef FAX_DETECT
-#ifdef OLD_DSP_ROUTINES
- if (!hit && (fax_energy >= FAX_THRESHOLD) && (fax_energy > s->energy * 21.0)) {
- fax_energy_2nd = goertzel_result(&s->fax_tone2nd);
- fax_energy_2nd = goertzel_result(&s->fax_tone2nd);
- if (fax_energy_2nd * FAX_2ND_HARMONIC < fax_energy) {
-#if 0
- printf("Fax energy/Second Harmonic: %f/%f\n", fax_energy, fax_energy_2nd);
-#endif
- /* XXX Probably need better checking than just this the energy XXX */
- hit = 'f';
- s->fax_hits++;
- } /* Don't reset fax hits counter */
- }
-#else /* OLD_DSP_ROUTINES */
- if (!hit && (fax_energy >= FAX_THRESHOLD) && (fax_energy >= DTMF_TO_TOTAL_ENERGY*s->energy)) {
+ if (!hit && (fax_energy >= FAX_THRESHOLD) && (fax_energy >= DTMF_TO_TOTAL_ENERGY*s->energy) && (faxdetect)) {
#if 0
printf("Fax energy/Second Harmonic: %f\n", fax_energy);
#endif
hit = 'f';
s->fax_hits++;
}
-#endif /* OLD_DSP_ROUTINES */
else {
if (s->fax_hits > 5) {
hit = 'f';
if (dsp->digitmode & DSP_DIGITMODE_MF)
res = mf_detect(&dsp->td.mf, s, len, dsp->digitmode & DSP_DIGITMODE_RELAXDTMF, writeback);
else
- res = dtmf_detect(&dsp->td.dtmf, s, len, dsp->digitmode & DSP_DIGITMODE_RELAXDTMF, writeback);
+ res = dtmf_detect(&dsp->td.dtmf, s, len, dsp->digitmode & DSP_DIGITMODE_RELAXDTMF, writeback, dsp->features & DSP_FEATURE_FAX_DETECT);
return res;
}
#define DSP_FEATURE_BUSY_DETECT (1 << 1)
#define DSP_FEATURE_CALL_PROGRESS (1 << 2)
#define DSP_FEATURE_DTMF_DETECT (1 << 3)
+#define DSP_FEATURE_FAX_DETECT (1 << 4)
#define DSP_DIGITMODE_DTMF 0 /* Detect DTMF digits */
#define DSP_DIGITMODE_MF 1 /* Detect MF digits */