dahdi: Add compile time DAHDI_ECHOCAN_PROCESS_TX option.

Add optional interface to allow software echo cans to process the
transmitted samples.  Can be used for things like DC removal.

I used the following patches uploaded by biohumanoid but changed the
name of 'echocan_hpf_tx' to 'echoan_process_tx and put the changes
behind a compile time option.

(issue #13562)
Reported by: biohumanoid
Patches:
      kernel.h.patch uploaded by biohumanoid (license 459)
      dahdi-base.c.#2.patch uploaded by biohumanoid (license 459)

Signed-off-by: Shaun Ruffell <sruffell@digium.com>
Acked-by: Kinsey Moore <kmoore@digium.com>
Acked-by: Russ Meyerriecks <rmeyerriecks@digium.com>

git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/trunk@9442 a0bf4364-ded3-4de4-8d8a-66a801d63aff
This commit is contained in:
Shaun Ruffell 2010-10-20 12:23:06 +00:00
parent 5b08a20526
commit 2ba1b4c201
3 changed files with 31 additions and 0 deletions

View File

@ -2330,6 +2330,21 @@ static ssize_t dahdi_chan_write(struct file *file, const char __user *usrbuf,
} }
chan->writen[res] = amnt; chan->writen[res] = amnt;
} }
#ifdef CONFIG_DAHDI_ECHOCAN_PROCESS_TX
if ((chan->ec_state) &&
(ECHO_MODE_ACTIVE == chan->ec_state->status.mode) &&
(chan->ec_state->ops->echocan_process_tx)) {
struct ec_state *const ec_state = chan->ec_state;
for (x = 0; x < chan->writen[res]; ++x) {
short tx;
tx = DAHDI_XLAW(chan->writebuf[res][x], chan);
ec_state->ops->echocan_process_tx(ec_state,
&tx, 1);
chan->writebuf[res][x] = DAHDI_LIN2X((int) tx,
chan);
}
}
#endif
chan->writeidx[res] = 0; chan->writeidx[res] = 0;
if (chan->flags & DAHDI_FLAG_FCS) if (chan->flags & DAHDI_FLAG_FCS)
calc_fcs(chan, res); calc_fcs(chan, res);

View File

@ -126,6 +126,13 @@
*/ */
/* #define CONFIG_DAHDI_NO_ECHOCAN_DISABLE */ /* #define CONFIG_DAHDI_NO_ECHOCAN_DISABLE */
/*
* Define if you would like to allow software echocans to process the tx audio
* in addition to the rx audio. Used for things like DC removal.
*
*/
/* #define CONFIG_DAHDI_ECHOCAN_PROCESS_TX */
/* /*
* Uncomment if you happen have an early TDM400P Rev H which * Uncomment if you happen have an early TDM400P Rev H which
* sometimes forgets its PCI ID to have wcfxs match essentially all * sometimes forgets its PCI ID to have wcfxs match essentially all

View File

@ -257,6 +257,15 @@ struct dahdi_echocan_ops {
* \return Nothing. * \return Nothing.
*/ */
void (*echocan_NLP_toggle)(struct dahdi_echocan_state *ec, unsigned int enable); void (*echocan_NLP_toggle)(struct dahdi_echocan_state *ec, unsigned int enable);
#ifdef CONFIG_DAHDI_ECHOCAN_PROCESS_TX
/*! \brief Process an array of TX audio samples.
*
* \return Nothing.
*/
void (*echocan_process_tx)(struct dahdi_echocan_state *ec,
short *tx, u32 size);
#endif
}; };
/*! A factory for creating instances of software echo cancelers to be used on DAHDI channels. */ /*! A factory for creating instances of software echo cancelers to be used on DAHDI channels. */