SOURCES: zaptel-oslec.patch - http://svn.astfin.org/software/oslec/trunk/ke...
hawk
hawk at pld-linux.org
Sun May 25 14:11:22 CEST 2008
Author: hawk Date: Sun May 25 12:11:22 2008 GMT
Module: SOURCES Tag: HEAD
---- Log message:
- http://svn.astfin.org/software/oslec/trunk/kernel/zaptel-1.4.9.2.patch
---- Files affected:
SOURCES:
zaptel-oslec.patch (1.2 -> 1.3)
---- Diffs:
================================================================
Index: SOURCES/zaptel-oslec.patch
diff -u SOURCES/zaptel-oslec.patch:1.2 SOURCES/zaptel-oslec.patch:1.3
--- SOURCES/zaptel-oslec.patch:1.2 Sun Jul 1 17:32:34 2007
+++ SOURCES/zaptel-oslec.patch Sun May 25 14:11:16 2008
@@ -1,7 +1,7 @@
-diff -Nur zaptel-1.4.3.org/oslec.h zaptel-1.4.3/oslec.h
---- zaptel-1.4.3.org/oslec.h 1970-01-01 00:00:00.000000000 +0000
-+++ zaptel-1.4.3/oslec.h 2007-07-01 15:25:59.376524352 +0000
-@@ -0,0 +1,29 @@
+diff -ruN zaptel-1.4.9.2-orig/kernel/oslec.h zaptel-1.4.9.2/kernel/oslec.h
+--- zaptel-1.4.9.2-orig/kernel/oslec.h 1970-01-01 09:30:00.000000000 +0930
++++ zaptel-1.4.9.2/kernel/oslec.h 2008-03-05 20:25:15.617592152 +1030
+@@ -0,0 +1,45 @@
+/*
+ oslec.h
+ David Rowe
@@ -10,6 +10,25 @@
+ Interface for OSLEC module.
+*/
+
++/*
++ Copyright (C) 2007 David Rowe
++
++ All rights reserved.
++
++ 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.
++*/
++
+#ifndef __OSLEC__
+#define __OSLEC__
+
@@ -21,56 +40,56 @@
+void oslec_echo_can_free(struct echo_can_state *ec);
+short oslec_echo_can_update(struct echo_can_state *ec, short iref, short isig);
+int oslec_echo_can_traintap(struct echo_can_state *ec, int pos, short val);
-+static inline void echo_can_init(void) {}
++void oslec_echo_can_identify(char *buf, size_t len);
++static inline void echo_can_init(void) { printk("Zaptel Echo Canceller: OSLEC\n"); }
+static inline void echo_can_shutdown(void) {}
+short oslec_hpf_tx(struct echo_can_state *ec, short txlin);
-+static inline void echo_can_identify(char *buf, size_t len)
-+{
-+ strncpy(buf, "OSLEC", len);
-+}
+
+#endif
+
-diff -Nur zaptel-1.4.3.org/version.h zaptel-1.4.3/version.h
---- zaptel-1.4.3.org/version.h 1970-01-01 00:00:00.000000000 +0000
-+++ zaptel-1.4.3/version.h 2007-07-01 15:25:59.376524352 +0000
-@@ -0,0 +1,6 @@
-+/*
-+ * version.h
-+ * Automatically generated
-+ */
-+#define ZAPTEL_VERSION "1.4.1"
-+
-diff -Nur zaptel-1.4.3.org/zaptel-base.c zaptel-1.4.3/zaptel-base.c
---- zaptel-1.4.3.org/zaptel-base.c 2007-07-01 15:25:19.914823416 +0000
-+++ zaptel-1.4.3/zaptel-base.c 2007-07-01 15:24:53.000000000 +0000
-@@ -426,6 +426,14 @@
+diff -ruN zaptel-1.4.9.2-orig/kernel/zaptel-base.c zaptel-1.4.9.2/kernel/zaptel-base.c
+--- zaptel-1.4.9.2-orig/kernel/zaptel-base.c 2008-02-29 05:30:47.000000000 +1030
++++ zaptel-1.4.9.2/kernel/zaptel-base.c 2008-03-05 20:25:15.642588352 +1030
+@@ -421,10 +421,35 @@
+ #include "kb1ec.h"
+ #elif defined(ECHO_CAN_MG2)
#include "mg2ec.h"
- #elif defined(ECHO_CAN_JP1)
- #include "jpah.h"
+/* Start Open Source Line Echo Canceller (OSLEC) -----------------*/
+#elif defined(ECHO_CAN_OSLEC)
+#include "oslec.h"
-+#define echo_can_create oslec_echo_can_create
++#define echo_can_create_noparams oslec_echo_can_create
+#define echo_can_free oslec_echo_can_free
+#define echo_can_update oslec_echo_can_update
+#define echo_can_traintap oslec_echo_can_traintap
++#define echo_can_identify oslec_echo_can_identify
++#define ECHO_CAN_NO_PARAMS
+/* End Open Source Line Echo Canceller (OSLEC) -------------------*/
- #else
- #include "mec3.h"
- #endif
-@@ -4985,6 +4993,7 @@
- }
- }
+ #elif defined(ECHO_CAN_JP1)
+ #include "jpah.h"
#endif
+
++#ifdef ECHO_CAN_NO_PARAMS
++/* A wrapper to the original echo can interface, with no parameters */
++static int echo_can_create(struct zt_echocanparams *ecp, struct zt_echocanparam *p,
++ struct echo_can_state **ec)
++{
++ /* ignore the parameters */
++ /* TODO: maybe fail if the user passes us parameters? or at
++ * least list their number? */
++ *ec = echo_can_create_noparams(ecp->tap_length, 0);
++ if (!ec)
++ return -EINVAL; /* an arbitrary error */
++ return 0;
++}
++#endif
+
- if ((!ms->confmute && !ms->dialing) || (ms->flags & ZT_FLAG_PSEUDO)) {
- /* Handle conferencing on non-clear channel and non-HDLC channels */
- switch(ms->confmode & ZT_CONF_MODE_MASK) {
-@@ -5751,6 +5760,69 @@
- chan->rxsig = cursig;
+ static inline void rotate_sums(void)
+ {
+ /* Rotate where we sum and so forth */
+@@ -5955,6 +5980,70 @@
spin_unlock_irqrestore(&chan->lock, flags);
}
+
+/* Zaptap code -----------------------------------------------------------*/
+
+#define SAMPLE_BUF_SZ 1000
@@ -121,12 +140,12 @@
+ samples = 0;
+
+ if (sample_state == SAMPLE_PING) {
-+ sample_state = SAMPLE_PONG;
-+ psample = pong;
++ sample_state = SAMPLE_PONG;
++ psample = pong;
+ }
+ else {
-+ sample_state = SAMPLE_PING;
-+ psample = ping;
++ sample_state = SAMPLE_PING;
++ psample = ping;
+ }
+ wake_up_interruptible(&sample_wait);
+ }
@@ -134,96 +153,130 @@
+}
+
+/* end Zaptap code -----------------------------------------------------*/
-
++
static inline void __zt_ec_chunk(struct zt_chan *ss, unsigned char *rxchunk, const unsigned char *txchunk)
{
-@@ -5802,7 +5874,9 @@
+ short rxlin, txlin;
+@@ -6005,7 +6094,9 @@
#if !defined(ZT_EC_ARRAY_UPDATE)
for (x=0;x<ZT_CHUNKSIZE;x++) {
rxlin = ZT_XLAW(rxchunk[x], ss);
+ sample_echo_before(ss->channo, rxlin, ZT_XLAW(txchunk[x], ss)); /* Zaptap code */
rxlin = echo_can_update(ss->ec, ZT_XLAW(txchunk[x], ss), rxlin);
-+ sample_echo_after(ss->channo, rxlin); /* Zaptap code */
++ sample_echo_after(ss->channo, rxlin); /* Zaptap code */
rxchunk[x] = ZT_LIN2X((int) rxlin, ss);
}
#else /* defined(ZT_EC_ARRAY_UPDATE) */
-@@ -6680,6 +6754,8 @@
+@@ -6887,6 +6978,8 @@
static void __zt_transmit_chunk(struct zt_chan *chan, unsigned char *buf)
{
unsigned char silly[ZT_CHUNKSIZE];
-+ int x;
++ int x;
+
/* Called with chan->lock locked */
- if (!buf)
- buf = silly;
-@@ -6694,10 +6770,126 @@
+ #ifdef OPTIMIZE_CHANMUTE
+ if(likely(chan->chanmute))
+@@ -6905,10 +6998,29 @@
kernel_fpu_end();
#endif
}
-+ /* Start Zaptap code -----------------------------------------*/
+
-+ if (sample_impulse && (samples == 0)) {
++ /* Start Zaptap code -----------------------------------------*/
++
++ if (sample_impulse && (samples == 0)) {
++
++ // option impulse insertion, tx stream becomes one
++ // impulse followed by SAMPLE_BUF_SZ-1 0's
++
++ buf[0] = ZT_LIN2MU(10000);
++ for (x=1;x<ZT_CHUNKSIZE;x++) {
++ buf[x] = ZT_LIN2MU(0);
++ }
++ }
++
++ /* End Zaptap code -----------------------------------------*/
++
+ }
+
+ static inline void __zt_real_transmit(struct zt_chan *chan)
+ {
++ short txlin;
++ int x;
+
-+ // option impulse insertion, tx stream becomes one
-+ // impulse followed by SAMPLE_BUF_SZ-1 0's
+ /* Called with chan->lock held */
+ #ifdef OPTIMIZE_CHANMUTE
+ if(likely(chan->chanmute))
+@@ -6920,6 +7032,19 @@
+ } else {
+ __zt_transmit_chunk(chan, chan->writechunk);
+ }
++
++ /* return, if no echo canceler have been allocated. */
+
-+ buf[0] = ZT_LIN2MU(10000);
-+ for (x=1;x<ZT_CHUNKSIZE;x++) {
-+ buf[x] = ZT_LIN2MU(0);
-+ }
-+ }
++ if (!chan->ec) return;
+
-+ /* End Zaptap code -----------------------------------------*/
++ /* hook to allow HPF filtering of audio leaving tx (D/A) port, this
++ inproves performance when using soft phones */
+
++ for (x=0;x<ZT_CHUNKSIZE;x++) {
++ txlin = ZT_XLAW(chan->writechunk[x], chan);
++ txlin = oslec_hpf_tx(chan->ec, txlin);
++ chan->writechunk[x] = ZT_LIN2X((int)txlin, chan);
++ }
+ }
+
+ static void __zt_getempty(struct zt_chan *ms, unsigned char *buf)
+@@ -7365,6 +7490,104 @@
+ return 0;
}
+/* Zaptap code -----------------------------------------------------*/
+
+static int sample_open (struct inode *inode, struct file *file) {
-+ printk("sample_open:\n");
-+ tmp1 = tmp2 = -1;
++ printk("sample_open:\n");
++ tmp1 = tmp2 = -1;
+
-+ psample = ping;
-+ samples = 0;
-+ sample_state = SAMPLE_PING;
++ psample = ping;
++ samples = 0;
++ sample_state = SAMPLE_PING;
+
-+ return 0;
++ return 0;
+}
+
+static int sample_release (struct inode *inode, struct file *file) {
-+ printk("sample_release: tmp1 = %d tmp2 = %d\n", tmp1, tmp2);
++ printk("sample_release: tmp1 = %d tmp2 = %d\n", tmp1, tmp2);
+
-+ sample_state = SAMPLE_IDLE;
-+ sample_impulse = 0;
-+ samples = 0;
++ sample_state = SAMPLE_IDLE;
++ sample_impulse = 0;
++ samples = 0;
+
-+ return 0;
++ return 0;
+}
+
+static ssize_t sample_read(struct file *file, char *buf,
-+ size_t count, loff_t *ppos) {
-+ int err, len;
-+ short *pread;
++ size_t count, loff_t *ppos) {
++ int err, len;
++ short *pread;
+
-+ /* wait for next buffer to be prepared by ISR, we read
++ /* wait for next buffer to be prepared by ISR, we read
+ alternate buffer just after transition.
+ */
-+ interruptible_sleep_on(&sample_wait);
++ interruptible_sleep_on(&sample_wait);
+
-+ if (sample_state == SAMPLE_PING) {
-+ pread = pong;
-+ }
-+ else {
-+ pread = ping;
-+ }
++ if (sample_state == SAMPLE_PING) {
++ pread = pong;
++ }
++ else {
++ pread = ping;
++ }
+
-+ len = 3*sizeof(short)*SAMPLE_BUF_SZ;
-+ err = copy_to_user(buf, pread, len);
++ len = 3*sizeof(short)*SAMPLE_BUF_SZ;
++ err = copy_to_user(buf, pread, len);
+
-+ if (err != 0)
-+ return -EFAULT;
++ if (err != 0)
++ return -EFAULT;
+
-+ return len;
++ return len;
+}
+
+/* ioctls for sample */
@@ -232,42 +285,42 @@
+#define SAMPLE_TX_IMPULSE 1
+
+static int sample_ioctl(struct inode *inode, struct file *file,
-+ unsigned int cmd, unsigned long arg) {
-+ int retval = 0;
++ unsigned int cmd, unsigned long arg) {
++ int retval = 0;
+
-+ switch ( cmd ) {
-+ case SAMPLE_SET_CHANNEL:
-+ if (copy_from_user(&sample_ch, (int *)arg, sizeof(int)))
-+ return -EFAULT;
-+ printk("sample_ioctl: sample_ch = %d\n", sample_ch);
-+ break;
-+ case SAMPLE_TX_IMPULSE:
-+ sample_impulse = 1;
-+ printk("sample_ioctl: under impulse power\n");
-+ break;
-+ default:
-+ retval = -EINVAL;
++ switch ( cmd ) {
++ case SAMPLE_SET_CHANNEL:
++ if (copy_from_user(&sample_ch, (int *)arg, sizeof(int)))
++ return -EFAULT;
++ printk("sample_ioctl: sample_ch = %d\n", sample_ch);
++ break;
++ case SAMPLE_TX_IMPULSE:
++ sample_impulse = 1;
++ printk("sample_ioctl: under impulse power\n");
++ break;
++ default:
++ retval = -EINVAL;
+ }
+
-+ return retval;
++ return retval;
+}
+
+// define which file operations are supported
+struct file_operations sample_fops = {
-+ .owner = THIS_MODULE,
-+ .llseek = NULL,
-+ .read = sample_read,
-+ .write = NULL,
-+ .readdir= NULL,
-+ .poll = NULL,
-+ .ioctl = sample_ioctl,
-+ .mmap = NULL,
-+ .open = sample_open,
-+ .flush = NULL,
-+ .release= sample_release,
-+ .fsync = NULL,
-+ .fasync = NULL,
-+ .lock = NULL,
++ .owner = THIS_MODULE,
++ .llseek = NULL,
++ .read = sample_read,
++ .write = NULL,
++ .readdir= NULL,
++ .poll = NULL,
++ .ioctl = sample_ioctl,
++ .mmap = NULL,
++ .open = sample_open,
++ .flush = NULL,
++ .release= sample_release,
++ .fsync = NULL,
++ .fasync = NULL,
++ .lock = NULL
+};
+
+#define SAMPLE_NAME "sample"
@@ -275,46 +328,25 @@
+
+/* end Zaptap code -----------------------------------------------------*/
+
- static inline void __zt_real_transmit(struct zt_chan *chan)
- {
-+ short txlin;
-+ int x;
-+
- /* Called with chan->lock held */
- if (chan->confmode) {
- /* Pull queued data off the conference */
-@@ -6705,6 +6897,15 @@
- } else {
- __zt_transmit_chunk(chan, chan->writechunk);
- }
-+
-+ // return, if no echo canceler have been allocated.
-+ if (!chan->ec) return;
-+ /* hook to allow HPF filtering of audio leaving tx (D/A) port */
-+ for (x=0;x<ZT_CHUNKSIZE;x++) {
-+ txlin = ZT_XLAW(chan->writechunk[x], chan);
-+ txlin = oslec_hpf_tx(chan->ec, txlin);
-+ chan->writechunk[x] = ZT_LIN2X((int)txlin, chan);
-+ }
- }
+ static int __init zt_init(void) {
+ int res = 0;
- static void __zt_getempty(struct zt_chan *ms, unsigned char *buf)
-@@ -7171,12 +7372,27 @@
+@@ -7409,12 +7634,27 @@
#ifdef CONFIG_ZAPTEL_WATCHDOG
watchdog_init();
#endif
+
-+ /* start Zaptap code ----------------------------------------*/
++ /* start Zaptap code ----------------------------------------*/
+
-+ sample_state = SAMPLE_IDLE;
-+ sample_impulse = 0;
++ sample_state = SAMPLE_IDLE;
++ sample_impulse = 0;
+ if ((res = register_chrdev (SAMPLE_MAJOR, SAMPLE_NAME, &sample_fops))) {
+ printk(KERN_ERR "Zaptap unable to register 'sample' char driver on %d\n", SAMPLE_MAJOR);
+ return res;
+ }
+ printk("Zaptap registered 'sample' char driver on major %d\n", SAMPLE_MAJOR);
+
-+ /* end Zaptap code ------------------------------------------*/
++ /* end Zaptap code ------------------------------------------*/
+
return res;
}
@@ -322,20 +354,20 @@
static void __exit zt_cleanup(void) {
int x;
-+ unregister_chrdev (SAMPLE_MAJOR, SAMPLE_NAME); /* Zaptap code */
++ unregister_chrdev (SAMPLE_MAJOR, SAMPLE_NAME); /* Zaptap code */
+
#ifdef CONFIG_PROC_FS
remove_proc_entry("zaptel", NULL);
#endif
-diff -Nur zaptel-1.4.3.org/zconfig.h zaptel-1.4.3/zconfig.h
---- zaptel-1.4.3.org/zconfig.h 2007-04-24 18:32:49.000000000 +0000
-+++ zaptel-1.4.3/zconfig.h 2007-07-01 15:25:59.380524524 +0000
-@@ -63,7 +63,8 @@
- /* #define ECHO_CAN_MARK3 */
+diff -ruN zaptel-1.4.9.2-orig/kernel/zconfig.h zaptel-1.4.9.2/kernel/zconfig.h
+--- zaptel-1.4.9.2-orig/kernel/zconfig.h 2008-02-05 09:30:48.000000000 +1030
++++ zaptel-1.4.9.2/kernel/zconfig.h 2008-03-05 20:25:15.644588048 +1030
+@@ -65,7 +65,8 @@
+ /* #define ECHO_CAN_STEVE2 */
/* #define ECHO_CAN_KB1 */
/* This is the new latest and greatest */
-#define ECHO_CAN_MG2
-+/* #define ECHO_CAN_MG2 */
++//#define ECHO_CAN_MG2
+#define ECHO_CAN_OSLEC
/*
================================================================
---- CVS-web:
http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/SOURCES/zaptel-oslec.patch?r1=1.2&r2=1.3&f=u
More information about the pld-cvs-commit
mailing list