aboutsummaryrefslogtreecommitdiffstats
path: root/channels/misdn
diff options
context:
space:
mode:
authornadi <nadi@f38db490-d61c-443f-a65b-d21fe96a405b>2007-03-26 15:59:56 +0000
committernadi <nadi@f38db490-d61c-443f-a65b-d21fe96a405b>2007-03-26 15:59:56 +0000
commit8e64880bbd96f795f9ad14cd78a476bc59b72be2 (patch)
tree1d1ae595b418f54aaaaa9c14ec18809f3b6e1371 /channels/misdn
parent09e637ccea4a431ea05d13e8890a6e61ee6ebe4e (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: http://svn.digium.com/svn/asterisk/trunk@59203 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'channels/misdn')
-rw-r--r--channels/misdn/Makefile4
-rw-r--r--channels/misdn/chan_misdn_config.h5
-rw-r--r--channels/misdn/isdn_lib.c38
-rw-r--r--channels/misdn/isdn_lib.h6
4 files changed, 34 insertions, 19 deletions
diff --git a/channels/misdn/Makefile b/channels/misdn/Makefile
index 895dc9dee..85478225b 100644
--- a/channels/misdn/Makefile
+++ b/channels/misdn/Makefile
@@ -1,6 +1,10 @@
#
# Makefile for chan_misdn support
#
+ifneq ($(wildcard /usr/include/linux/mISDNdsp.h),)
+CFLAGS+=-DMISDN_1_2
+endif
+
all:
%.o: %.c
diff --git a/channels/misdn/chan_misdn_config.h b/channels/misdn/chan_misdn_config.h
index 8869ead50..eacc22b3e 100644
--- a/channels/misdn/chan_misdn_config.h
+++ b/channels/misdn/chan_misdn_config.h
@@ -52,9 +52,8 @@ enum misdn_cfg_elements {
MISDN_CFG_EARLY_BCONNECT, /* int (bool) */
MISDN_CFG_INCOMING_EARLY_AUDIO, /* int (bool) */
MISDN_CFG_ECHOCANCEL, /* int */
- MISDN_CFG_ECHOCANCELWHENBRIDGED, /* int (bool) */
-#ifdef WITH_ECHOTRAINGING
- MISDN_CFG_ECHOTRAINING, /* int (bool) */
+#ifdef MISDN_1_2
+ MISDN_CFG_PIPELINE, /* char[] */
#endif
#ifdef WITH_BEROEC
diff --git a/channels/misdn/isdn_lib.c b/channels/misdn/isdn_lib.c
index 174494f0f..c3745a361 100644
--- a/channels/misdn/isdn_lib.c
+++ b/channels/misdn/isdn_lib.c
@@ -578,14 +578,13 @@ static void empty_bc(struct misdn_bchannel *bc)
bc->early_bconnect = 1;
+#ifdef MISDN_1_2
+ *bc->pipeline = 0;
+#else
bc->ec_enable = 0;
bc->ec_deftaps = 128;
- bc->ec_whenbridged = 0;
-
-#ifdef EC_TRAIN
- bc->ec_training = 1;
#endif
-
+
bc->orig=0;
bc->cause=16;
@@ -4028,7 +4027,11 @@ void isdn_lib_update_txgain (struct misdn_bchannel *bc)
void isdn_lib_update_ec (struct misdn_bchannel *bc)
{
+#ifdef MISDN_1_2
+ if (*bc->pipeline)
+#else
if (bc->ec_enable)
+#endif
manager_ec_enable(bc);
else
manager_ec_disable(bc);
@@ -4207,19 +4210,24 @@ void misdn_lib_send_tone(struct misdn_bchannel *bc, enum tone_e tone)
void manager_ec_enable(struct misdn_bchannel *bc)
{
- int ec_arr[2];
-
struct misdn_stack *stack=get_stack_by_bc(bc);
cb_log(4, stack?stack->port:0,"ec_enable\n");
if (!misdn_cap_is_speech(bc->capability)) {
cb_log(1, stack?stack->port:0, " --> no speech? cannot enable EC\n");
- return;
- }
+ } else {
+
+#ifdef MISDN_1_2
+ if (*bc->pipeline) {
+ cb_log(3, stack?stack->port:0,"Sending Control PIPELINE_CFG %s\n",bc->pipeline);
+ manager_ph_control_block(bc, PIPELINE_CFG, bc->pipeline, strlen(bc->pipeline) + 1);
+ }
+#else
+ int ec_arr[2];
if (bc->ec_enable) {
- cb_log(3, stack?stack->port:0,"Sending Control ECHOCAN_ON taps:%d training:%d\n",bc->ec_deftaps, bc->ec_training);
+ cb_log(3, stack?stack->port:0,"Sending Control ECHOCAN_ON taps:%d\n",bc->ec_deftaps);
switch (bc->ec_deftaps) {
case 4:
@@ -4239,14 +4247,12 @@ void manager_ec_enable(struct misdn_bchannel *bc)
}
ec_arr[0]=bc->ec_deftaps;
-#ifdef EC_TRAIN
- ec_arr[1]=bc->ec_training;
-#else
ec_arr[1]=0;
-#endif
manager_ph_control_block(bc, ECHOCAN_ON, ec_arr, sizeof(ec_arr));
}
+#endif
+ }
}
@@ -4262,10 +4268,14 @@ void manager_ec_disable(struct misdn_bchannel *bc)
return;
}
+#ifdef MISDN_1_2
+ manager_ph_control_block(bc, PIPELINE_CFG, "", 0);
+#else
if ( ! bc->ec_enable) {
cb_log(3, stack?stack->port:0, "Sending Control ECHOCAN_OFF\n");
manager_ph_control(bc, ECHOCAN_OFF, 0);
}
+#endif
}
struct misdn_stack* get_misdn_stack() {
diff --git a/channels/misdn/isdn_lib.h b/channels/misdn/isdn_lib.h
index ccd87bcfb..068518be9 100644
--- a/channels/misdn/isdn_lib.h
+++ b/channels/misdn/isdn_lib.h
@@ -343,10 +343,12 @@ struct misdn_bchannel {
/** list stuf **/
+#ifdef MISDN_1_2
+ char pipeline[128];
+#else
int ec_enable;
int ec_deftaps;
- int ec_whenbridged;
- int ec_training;
+#endif
#ifdef WITH_BEROEC
beroec_t *ec;