1 /*
2  *  OSLEC - A line echo canceller.  This code is being developed
3  *          against and partially complies with G168. Using code from SpanDSP
4  *
5  * Written by Steve Underwood <steveu@coppice.org>
6  *         and David Rowe <david_at_rowetel_dot_com>
7  *
8  * Copyright (C) 2001 Steve Underwood and 2007-2008 David Rowe
9  *
10  * All rights reserved.
11  *
12  * This program is free software; you can redistribute it and/or modify
13  * it under the terms of the GNU General Public License version 2, as
14  * published by the Free Software Foundation.
15  *
16  * This program is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19  * GNU General Public License for more details.
20  *
21  * You should have received a copy of the GNU General Public License
22  * along with this program; if not, write to the Free Software
23  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
24  *
25  */
26 
27 #ifndef __OSLEC_H
28 #define __OSLEC_H
29 
30 /* Mask bits for the adaption mode */
31 #define ECHO_CAN_USE_ADAPTION	0x01
32 #define ECHO_CAN_USE_NLP	0x02
33 #define ECHO_CAN_USE_CNG	0x04
34 #define ECHO_CAN_USE_CLIP	0x08
35 #define ECHO_CAN_USE_TX_HPF	0x10
36 #define ECHO_CAN_USE_RX_HPF	0x20
37 #define ECHO_CAN_DISABLE	0x40
38 
39 /**
40  * oslec_state: G.168 echo canceller descriptor.
41  *
42  * This defines the working state for a line echo canceller.
43  */
44 struct oslec_state;
45 
46 /**
47  * oslec_create - Create a voice echo canceller context.
48  * @len: The length of the canceller, in samples.
49  * @return: The new canceller context, or NULL if the canceller could not be
50  * created.
51  */
52 struct oslec_state *oslec_create(int len, int adaption_mode);
53 
54 /**
55  * oslec_free - Free a voice echo canceller context.
56  * @ec: The echo canceller context.
57  */
58 void oslec_free(struct oslec_state *ec);
59 
60 /**
61  * oslec_flush - Flush (reinitialise) a voice echo canceller context.
62  * @ec: The echo canceller context.
63  */
64 void oslec_flush(struct oslec_state *ec);
65 
66 /**
67  * oslec_adaption_mode - set the adaption mode of a voice echo canceller context.
68  * @ec The echo canceller context.
69  * @adaption_mode: The mode.
70  */
71 void oslec_adaption_mode(struct oslec_state *ec, int adaption_mode);
72 
73 void oslec_snapshot(struct oslec_state *ec);
74 
75 /**
76  * oslec_update: Process a sample through a voice echo canceller.
77  * @ec: The echo canceller context.
78  * @tx: The transmitted audio sample.
79  * @rx: The received audio sample.
80  *
81  * The return value is the clean (echo cancelled) received sample.
82  */
83 int16_t oslec_update(struct oslec_state *ec, int16_t tx, int16_t rx);
84 
85 /**
86  * oslec_hpf_tx: Process to high pass filter the tx signal.
87  * @ec: The echo canceller context.
88  * @tx: The transmitted auio sample.
89  *
90  * The return value is the HP filtered transmit sample, send this to your D/A.
91  */
92 int16_t oslec_hpf_tx(struct oslec_state *ec, int16_t tx);
93 
94 #endif /* __OSLEC_H */
95