static int echocancel;
+static int echotraining;
+
static int echocanbridged = 0;
static int busydetect = 0;
int callwaitcas;
int callwaitrings;
int echocancel;
+ int echotraining;
int echocanbridged;
int echocanon;
int permcallwaiting;
ast_log(LOG_DEBUG, "No echocancellation requested\n");
}
+static void zt_train_ec(struct zt_pvt *p)
+{
+ int x;
+ int res;
+ if (p && p->echocancel && p->echotraining) {
+ x = 400;
+ res = ioctl(p->subs[SUB_REAL].zfd, ZT_ECHOTRAIN, &x);
+ if (res)
+ ast_log(LOG_WARNING, "Unable to request echo training on channel %d\n", p->channel);
+ else {
+ ast_log(LOG_DEBUG, "Engaged echo training on channel %d\n", p->channel);
+ }
+ } else
+ ast_log(LOG_DEBUG, "No echo training requested\n");
+}
+
static void zt_disable_ec(struct zt_pvt *p)
{
int x;
switch(ast->_state) {
case AST_STATE_RINGING:
zt_enable_ec(p);
+ zt_train_ec(p);
p->subs[index].f.frametype = AST_FRAME_CONTROL;
p->subs[index].f.subclass = AST_CONTROL_ANSWER;
/* Make sure it stops ringing */
tmp->permhidecallerid = hidecallerid;
tmp->callreturn = callreturn;
tmp->echocancel = echocancel;
+ tmp->echotraining = echotraining;
tmp->echocanbridged = echocanbridged;
tmp->busydetect = busydetect;
tmp->busycount = busycount;
if (echocancel)
echocancel=128;
}
+ } else if (!strcasecmp(v->name, "echotraining")) {
+ echotraining = ast_true(v->value);
} else if (!strcasecmp(v->name, "hidecallerid")) {
hidecallerid = ast_true(v->value);
} else if (!strcasecmp(v->name, "callreturn")) {
;
echocancelwhenbridged=yes
;
+; In some cases, the echo canceller doesn't train quickly enough and there
+; is echo at the beginning of the call. Enabling echo training will cause
+; asterisk to briefly mute the channel, send an impulse, and use the impulse
+; response to pre-train the echo canceller so it can start out with a much
+; closer idea of the actual echo.
+;
+;echotraining=yes
+;
; If you are having trouble with DTMF detection, you can relax the
; DTMF detection parameters. Relaxing them may make the DTMF detector
; more likely to have "talkoff" where DTMF is detected when it