diff --git a/chan_capi.c b/chan_capi.c index 92b5c01..daac9da 100644 --- a/chan_capi.c +++ b/chan_capi.c @@ -577,7 +577,7 @@ static void capi_facility_add_datetime(unsigned char *facilityarray) /* * Echo cancellation is for cards w/ integrated echo cancellation only */ -static void capi_echo_canceller(struct capi_pvt *i, int function) +void capi_echo_canceller(struct capi_pvt *i, int function) { int ecAvail = 0; diff --git a/chan_capi.h b/chan_capi.h index 0e0ade0..ea06c36 100644 --- a/chan_capi.h +++ b/chan_capi.h @@ -809,6 +809,11 @@ void pbx_capi_unlock_interfaces(void); */ int pbx_capi_cli_exec_capicommand(struct ast_channel *chan, const char *data); +/*! + \brief EC control + */ +void capi_echo_canceller(struct capi_pvt *i, int function); + #ifdef DIVA_STREAMING struct _diva_streaming_vector; void capidev_handle_data_b3_indication_vector (struct capi_pvt *i, diff --git a/chan_capi_supplementary.c b/chan_capi_supplementary.c index 19ec728..10e2046 100644 --- a/chan_capi_supplementary.c +++ b/chan_capi_supplementary.c @@ -640,11 +640,18 @@ int handle_facility_indication_supplementary( #endif } } else { - cc_verbose(4, 0, VERBOSE_PREFIX_1 "CAPI%u Rx MWI %s for '%s@default %s %s time '%s' service %d", + cc_verbose(4, 0, VERBOSE_PREFIX_1 "CAPI%u Rx MWI %s for '%s@default %s %s time '%s' service %d\n", messageStatus == 0 ? "add" : "del", mailboxName, controllingUserNumberName, controllingUserProvidedNumberName, mwiTimeName, basicService); } } return ret; + case 0x8000: /* Hold notification */ + if ((i->isdnstate & CAPI_ISDN_STATE_EC) != 0) { + cc_verbose(4, 0, VERBOSE_PREFIX_1 "%s: EC reset\n", i->vname); + capi_echo_canceller(i, EC_FUNCTION_DISABLE); + capi_echo_canceller(i, EC_FUNCTION_ENABLE); + } + return ret; default: break;