[dahdi-commits] tzafrir: linux/trunk r5111 - in /linux/trunk: ./ drivers/dahdi/

SVN commits to the DAHDI project dahdi-commits at lists.digium.com
Tue Oct 21 12:34:13 CDT 2008


Author: tzafrir
Date: Tue Oct 21 12:34:12 2008
New Revision: 5111

URL: http://svn.digium.com/view/dahdi?view=rev&rev=5111
Log:
An experimental OSLEC echocan module.

Added:
    linux/trunk/drivers/dahdi/dahdi_echocan_oslec.c   (with props)
Modified:
    linux/trunk/README
    linux/trunk/drivers/dahdi/Kbuild

Modified: linux/trunk/README
URL: http://svn.digium.com/view/dahdi/linux/trunk/README?view=diff&rev=5111&r1=5110&r2=5111
==============================================================================
--- linux/trunk/README (original)
+++ linux/trunk/README Tue Oct 21 12:34:12 2008
@@ -108,7 +108,7 @@
 
 
 Installing the B410P drivers
-^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 With Zaptel it was possible to install mISDN and the B410P driver by typing
 'make b410p' from the command-line.  This is no longer possible with DAHDI as
 part of the changes to make DAHDI friendlier to binary packagers.  If you
@@ -135,6 +135,34 @@
 
 NOTE:  At the time this was written, misdn-1.1.8 is not compatible the
 2.6.25 kernel.  Please use a kernel version 2.6.25 or earlier.
+
+
+OSLEC
+~~~~~
+OSLEC is a Open Source Line Echo Canceller. Its homepage is at
+http://www.rowetel.com/ucasterisk/oslec.html and is is currently making
+its way into the mainline Kernel tree and may be included at some time
+around 2.6.29 (hopefully). The echo canceller module dahdi_echocan_oslec
+provides a DAHDI echo canceller module that uses the code from OSLEC. As
+OSLEC has not been accepted into mainline yet, its interface is not set
+in stone and thus this driver may need to change. Thus it is not
+built by default.
+
+Luckily the structure of the dahdi-linux tree matches that of the kernel
+tree. Hence you can basically copy drivers/staging/echo and place it
+under driver/staging/echo . In fact, dahdi_echocan_oslec assumes that
+this is where the oslec code lies. If it is elsewhere you'll need to fix
+the #include line.
+
+If you do have the oslec module but get messages about the functions
+'oslec_free', 'oslec_create' and such do not exist, this may be because
+you use a different version of the module. Specifically if it exports 
+'echo_can_free' or 'oslec_echo_can_free' . In that case get the latest
+version of dahdi-linux SVN and of OSLEC (from the staging tree or
+whatever).
+
+For more information regarding installing and using OSLEC, see the OSLEC
+homepage.
 
 
 Module Parameters

Modified: linux/trunk/drivers/dahdi/Kbuild
URL: http://svn.digium.com/view/dahdi/linux/trunk/drivers/dahdi/Kbuild?view=diff&rev=5111&r1=5110&r2=5111
==============================================================================
--- linux/trunk/drivers/dahdi/Kbuild (original)
+++ linux/trunk/drivers/dahdi/Kbuild Tue Oct 21 12:34:12 2008
@@ -27,6 +27,15 @@
 obj-$(DAHDI_BUILD_ALL)$(CONFIG_DAHDI_ECHOCAN_MG2)	+= dahdi_echocan_mg2.o
 
 obj-m += $(DAHDI_MODULES_EXTRA)
+
+# Only enable this if you think you know what you're doing. This is not
+# supported yet:
+#obj-m += dahdi_echocan_oslec.o
+#
+# A quick and dirty way to build OSLEC, if you happened to place it
+# yourself in the dahdi source tree. This is experimental. See README
+# regarding OSLEC.
+#obj-m += ../staging/echo/
 
 CFLAGS_MODULE += -I$(DAHDI_INCLUDE) -I$(src)
 

Added: linux/trunk/drivers/dahdi/dahdi_echocan_oslec.c
URL: http://svn.digium.com/view/dahdi/linux/trunk/drivers/dahdi/dahdi_echocan_oslec.c?view=auto&rev=5111
==============================================================================
--- linux/trunk/drivers/dahdi/dahdi_echocan_oslec.c (added)
+++ linux/trunk/drivers/dahdi/dahdi_echocan_oslec.c Tue Oct 21 12:34:12 2008
@@ -1,0 +1,103 @@
+/*
+ * DAHDI Telephony Interface to the Open Source Line Echo Canceller (OSLEC)
+ *
+ * Written by Tzafrir Cohen <tzafrir.cohen at xorcom.com>
+ * Copyright (C) 2008 Xorcom, Inc.
+ *
+ * All rights reserved.
+ *
+ * Based on dahdi_echocan_hpec.c, Copyright (C) 2006-2008 Digium, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ * 
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 
+ */
+
+#include <linux/kernel.h>
+#include <linux/errno.h>
+#include <linux/module.h>
+#include <linux/init.h>
+#include <linux/ctype.h>
+#include <linux/moduleparam.h>
+
+/* Fix this if OSLEC is elsewhere */
+#include "../staging/echo/oslec.h"
+//#include <linux/oslec.h>
+/* "provide" struct echo_can_state */
+//#define oslec_state echo_can_state
+
+#include <dahdi/kernel.h>
+
+#define module_printk(level, fmt, args...) printk(level "%s: " fmt, THIS_MODULE->name, ## args)
+
+static void echo_can_free(struct echo_can_state *ec)
+{
+	oslec_free((struct oslec_state *)ec);
+}
+
+static void echo_can_update(struct echo_can_state *ec, short *iref, short *isig)
+{
+	oslec_update((struct oslec_state *)ec, *iref, *isig);
+}
+
+static int echo_can_create(struct dahdi_echocanparams *ecp, struct dahdi_echocanparam *p,
+			   struct echo_can_state **ec)
+{
+	if (ecp->param_count > 0) {
+		printk(KERN_WARNING "OSLEC does not support parameters; failing request\n");
+		return -EINVAL;
+	}
+
+	/* TODO: get adaption mode from EC parameters? */
+	*ec = (struct echo_can_state *)oslec_create(ecp->tap_length, 0);
+
+	return *ec ? 0 : -ENOTTY;
+}
+
+static inline int echo_can_traintap(struct echo_can_state *ec, int pos, short val)
+{
+	return 1;
+}
+
+static const struct dahdi_echocan me = {
+	.name = "OSLEC",
+	.owner = THIS_MODULE,
+	.echo_can_create = echo_can_create,
+	.echo_can_free = echo_can_free,
+	.echo_can_array_update = echo_can_update,
+	.echo_can_traintap = echo_can_traintap,
+};
+
+static int __init mod_init(void)
+{
+	if (dahdi_register_echocan(&me)) {
+		module_printk(KERN_ERR, "could not register with DAHDI core\n");
+
+		return -EPERM;
+	}
+
+	module_printk(KERN_INFO, "Registered echo canceler '%s'\n", me.name);
+
+	return 0;
+}
+
+static void __exit mod_exit(void)
+{
+	dahdi_unregister_echocan(&me);
+}
+
+MODULE_DESCRIPTION("DAHDI OSLEC wrapper");
+MODULE_AUTHOR("Tzafrir Cohen <tzafrir.cohen at xorcom.com>");
+MODULE_LICENSE("GPL");
+
+module_init(mod_init);
+module_exit(mod_exit);

Propchange: linux/trunk/drivers/dahdi/dahdi_echocan_oslec.c
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: linux/trunk/drivers/dahdi/dahdi_echocan_oslec.c
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Propchange: linux/trunk/drivers/dahdi/dahdi_echocan_oslec.c
------------------------------------------------------------------------------
    svn:mime-type = text/plain




More information about the dahdi-commits mailing list