diff options
author | Nadi Sarrar <ns@beronet.com> | 2007-03-26 15:59:56 +0000 |
---|---|---|
committer | Nadi Sarrar <ns@beronet.com> | 2007-03-26 15:59:56 +0000 |
commit | 24d8595d00de93b2e82a135104c81b3043911c53 (patch) | |
tree | 1d1ae595b418f54aaaaa9c14ec18809f3b6e1371 /channels/chan_misdn.c | |
parent | 133f26f9775e7489e8d2e25c1c8f433dbc6864f4 (diff) |
Merged revisions 59202 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.4
........
r59202 | nadi | 2007-03-26 17:25:53 +0200 (Mo, 26 Mär 2007) | 4 lines
* mISDN >= 1.2 provides a dsp pipeline for i.e. echo cancellation modules, make chan_misdn use it.
* add a check for linux/mISDNdsp.h to configure.ac and update the autogenerated files: 'configure', 'autoconfig.h.in'
(the 'configure' script was not in sync with the latest configure.ac, so the diff is a bit bigger than expected).
........
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@59203 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'channels/chan_misdn.c')
-rw-r--r-- | channels/chan_misdn.c | 94 |
1 files changed, 75 insertions, 19 deletions
diff --git a/channels/chan_misdn.c b/channels/chan_misdn.c index e486c58ad..fa13d0383 100644 --- a/channels/chan_misdn.c +++ b/channels/chan_misdn.c @@ -351,7 +351,11 @@ int add_out_calls(int port); int add_in_calls(int port); +#ifdef MISDN_1_2 +static int update_pipeline_config(struct misdn_bchannel *bc); +#else static int update_ec_config(struct misdn_bchannel *bc); +#endif @@ -1019,7 +1023,11 @@ static void print_bc_info (int fd, struct chan_list* help, struct misdn_bchannel " --> activated: %d\n" " --> state: %s\n" " --> capability: %s\n" +#ifdef MISDN_1_2 + " --> pipeline: %s\n" +#else " --> echo_cancel: %d\n" +#endif " --> notone : rx %d tx:%d\n" " --> bc_hold: %d\n", help->ast->name, @@ -1032,7 +1040,11 @@ static void print_bc_info (int fd, struct chan_list* help, struct misdn_bchannel bc->active, bc_state2str(bc->bc_state), bearer2str(bc->capability), - bc->ec_enable, +#ifdef MISDN_1_2 + bc->pipeline, +#else + bc->ec_enable, +#endif help->norxtone,help->notxtone, bc->holded @@ -1260,7 +1272,11 @@ static int misdn_toggle_echocancel (int fd, int argc, char *argv[]) tmp->toggle_ec=tmp->toggle_ec?0:1; if (tmp->toggle_ec) { +#ifdef MISDN_1_2 + update_pipeline_config(tmp->bc); +#else update_ec_config(tmp->bc); +#endif manager_ec_enable(tmp->bc); } else { manager_ec_disable(tmp->bc); @@ -1598,6 +1614,25 @@ void debug_numplan(int port, int numplan, char *type) +#ifdef MISDN_1_2 +static int update_pipeline_config(struct misdn_bchannel *bc) +{ + int ec; + + misdn_cfg_get(bc->port, MISDN_CFG_PIPELINE, bc->pipeline, sizeof(bc->pipeline)); + + if (*bc->pipeline) + return 0; + + misdn_cfg_get(bc->port, MISDN_CFG_ECHOCANCEL, &ec, sizeof(int)); + if (ec == 1) + snprintf(bc->pipeline, sizeof(bc->pipeline) - 1, "mg2ec"); + else if (ec > 1) + snprintf(bc->pipeline, sizeof(bc->pipeline) - 1, "mg2ec(deftaps=%d)", ec); + + return 0; +} +#else static int update_ec_config(struct misdn_bchannel *bc) { int ec; @@ -1611,17 +1646,10 @@ static int update_ec_config(struct misdn_bchannel *bc) bc->ec_enable=1; bc->ec_deftaps=ec; } -#ifdef WITH_ECHOTRAINING - int ectr; - misdn_cfg_get( port, MISDN_CFG_ECHOTRAINING, &ectr, sizeof(int)); - - if ( ectr >= 0 ) { - bc->ec_training=ectr; - } -#endif return 0; } +#endif static int read_config(struct chan_list *ch, int orig) { @@ -1696,7 +1724,11 @@ static int read_config(struct chan_list *ch, int orig) { ast_copy_string (ast->context,ch->context,sizeof(ast->context)); +#ifdef MISDN_1_2 + update_pipeline_config(bc); +#else update_ec_config(bc); +#endif { int eb3; @@ -1966,9 +1998,15 @@ static int misdn_call(struct ast_channel *ast, char *dest, int timeout) int bridging; misdn_cfg_get( 0, MISDN_GEN_BRIDGING, &bridging, sizeof(int)); if (bridging && ch->other_ch) { - chan_misdn_log(0, port, "Disabling EC on both Sides\n"); +#ifdef MISDN_1_2 + chan_misdn_log(0, port, "Disabling EC (aka Pipeline) on both Sides\n"); + *ch->bc->pipeline=0; + *ch->other_ch->bc->pipeline=0; +#else + chan_misdn_log(0, port, "Disabling EC on both Sides\n"); ch->bc->ec_enable=0; ch->other_ch->bc->ec_enable=0; +#endif } r=misdn_lib_send_event( newbc, EVENT_SETUP ); @@ -2466,7 +2504,11 @@ static struct ast_frame *process_ast_dsp(struct chan_list *tmp, struct ast_frame isdn_lib_update_rxgain(tmp->bc); tmp->bc->txgain = 0; isdn_lib_update_txgain(tmp->bc); +#ifdef MISDN_1_2 + *tmp->bc->pipeline = 0; +#else tmp->bc->ec_enable = 0; +#endif isdn_lib_update_ec(tmp->bc); isdn_lib_stop_dtmf(tmp->bc); switch (tmp->faxdetect) { @@ -4922,16 +4964,22 @@ static int misdn_set_opt_exec(struct ast_channel *chan, void *data) case 'c': keyidx=atoi(++tok); - if (keyidx > misdn_key_vector_size || keyidx < 0 ) { - ast_log(LOG_WARNING, "You entered the keyidx: %d but we have only %d keys\n",keyidx, misdn_key_vector_size ); - continue; + char keys[4096]; + char *key=NULL, *tmp; + int i; + misdn_cfg_get( 0, MISDN_GEN_CRYPT_KEYS, keys, sizeof(keys)); + + tmp=keys; + + for (i=0; i<keyidx; i++) { + key=strsep(&tmp,","); } - - { - ast_copy_string(ch->bc->crypt_key, misdn_key_vector[keyidx], sizeof(ch->bc->crypt_key)); + + if (key) { + ast_copy_string(ch->bc->crypt_key, key, sizeof(ch->bc->crypt_key)); } - - chan_misdn_log(0, ch->bc->port, "SETOPT: crypt with key:%s\n",misdn_key_vector[keyidx]); + + chan_misdn_log(0, ch->bc->port, "SETOPT: crypt with key:%s\n",ch->bc->crypt_key); break; case 'e': @@ -4939,14 +4987,22 @@ static int misdn_set_opt_exec(struct ast_channel *chan, void *data) if (neglect) { chan_misdn_log(1, ch->bc->port, " --> disabled\n"); +#ifdef MISDN_1_2 + *ch->bc->pipeline=0; +#else ch->bc->ec_enable=0; +#endif } else { +#ifdef MISDN_1_2 + update_pipeline_config(ch->bc); +#else ch->bc->ec_enable=1; ch->bc->orig=ch->orginator; tok++; - if (tok) { + if (*tok) { ch->bc->ec_deftaps=atoi(tok); } +#endif } break; |