18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci *  OSLEC - A line echo canceller.  This code is being developed
48c2ecf20Sopenharmony_ci *          against and partially complies with G168. Using code from SpanDSP
58c2ecf20Sopenharmony_ci *
68c2ecf20Sopenharmony_ci * Written by Steve Underwood <steveu@coppice.org>
78c2ecf20Sopenharmony_ci *         and David Rowe <david_at_rowetel_dot_com>
88c2ecf20Sopenharmony_ci *
98c2ecf20Sopenharmony_ci * Copyright (C) 2001 Steve Underwood and 2007-2008 David Rowe
108c2ecf20Sopenharmony_ci *
118c2ecf20Sopenharmony_ci * All rights reserved.
128c2ecf20Sopenharmony_ci */
138c2ecf20Sopenharmony_ci
148c2ecf20Sopenharmony_ci#ifndef __OSLEC_H
158c2ecf20Sopenharmony_ci#define __OSLEC_H
168c2ecf20Sopenharmony_ci
178c2ecf20Sopenharmony_ci/* Mask bits for the adaption mode */
188c2ecf20Sopenharmony_ci#define ECHO_CAN_USE_ADAPTION	0x01
198c2ecf20Sopenharmony_ci#define ECHO_CAN_USE_NLP	0x02
208c2ecf20Sopenharmony_ci#define ECHO_CAN_USE_CNG	0x04
218c2ecf20Sopenharmony_ci#define ECHO_CAN_USE_CLIP	0x08
228c2ecf20Sopenharmony_ci#define ECHO_CAN_USE_TX_HPF	0x10
238c2ecf20Sopenharmony_ci#define ECHO_CAN_USE_RX_HPF	0x20
248c2ecf20Sopenharmony_ci#define ECHO_CAN_DISABLE	0x40
258c2ecf20Sopenharmony_ci
268c2ecf20Sopenharmony_ci/**
278c2ecf20Sopenharmony_ci * oslec_state: G.168 echo canceller descriptor.
288c2ecf20Sopenharmony_ci *
298c2ecf20Sopenharmony_ci * This defines the working state for a line echo canceller.
308c2ecf20Sopenharmony_ci */
318c2ecf20Sopenharmony_cistruct oslec_state;
328c2ecf20Sopenharmony_ci
338c2ecf20Sopenharmony_ci/**
348c2ecf20Sopenharmony_ci * oslec_create - Create a voice echo canceller context.
358c2ecf20Sopenharmony_ci * @len: The length of the canceller, in samples.
368c2ecf20Sopenharmony_ci * @return: The new canceller context, or NULL if the canceller could not be
378c2ecf20Sopenharmony_ci * created.
388c2ecf20Sopenharmony_ci */
398c2ecf20Sopenharmony_cistruct oslec_state *oslec_create(int len, int adaption_mode);
408c2ecf20Sopenharmony_ci
418c2ecf20Sopenharmony_ci/**
428c2ecf20Sopenharmony_ci * oslec_free - Free a voice echo canceller context.
438c2ecf20Sopenharmony_ci * @ec: The echo canceller context.
448c2ecf20Sopenharmony_ci */
458c2ecf20Sopenharmony_civoid oslec_free(struct oslec_state *ec);
468c2ecf20Sopenharmony_ci
478c2ecf20Sopenharmony_ci/**
488c2ecf20Sopenharmony_ci * oslec_flush - Flush (reinitialise) a voice echo canceller context.
498c2ecf20Sopenharmony_ci * @ec: The echo canceller context.
508c2ecf20Sopenharmony_ci */
518c2ecf20Sopenharmony_civoid oslec_flush(struct oslec_state *ec);
528c2ecf20Sopenharmony_ci
538c2ecf20Sopenharmony_ci/**
548c2ecf20Sopenharmony_ci * oslec_adaption_mode - set the adaption mode of a voice echo canceller context.
558c2ecf20Sopenharmony_ci * @ec The echo canceller context.
568c2ecf20Sopenharmony_ci * @adaption_mode: The mode.
578c2ecf20Sopenharmony_ci */
588c2ecf20Sopenharmony_civoid oslec_adaption_mode(struct oslec_state *ec, int adaption_mode);
598c2ecf20Sopenharmony_ci
608c2ecf20Sopenharmony_civoid oslec_snapshot(struct oslec_state *ec);
618c2ecf20Sopenharmony_ci
628c2ecf20Sopenharmony_ci/**
638c2ecf20Sopenharmony_ci * oslec_update: Process a sample through a voice echo canceller.
648c2ecf20Sopenharmony_ci * @ec: The echo canceller context.
658c2ecf20Sopenharmony_ci * @tx: The transmitted audio sample.
668c2ecf20Sopenharmony_ci * @rx: The received audio sample.
678c2ecf20Sopenharmony_ci *
688c2ecf20Sopenharmony_ci * The return value is the clean (echo cancelled) received sample.
698c2ecf20Sopenharmony_ci */
708c2ecf20Sopenharmony_ciint16_t oslec_update(struct oslec_state *ec, int16_t tx, int16_t rx);
718c2ecf20Sopenharmony_ci
728c2ecf20Sopenharmony_ci/**
738c2ecf20Sopenharmony_ci * oslec_hpf_tx: Process to high pass filter the tx signal.
748c2ecf20Sopenharmony_ci * @ec: The echo canceller context.
758c2ecf20Sopenharmony_ci * @tx: The transmitted auio sample.
768c2ecf20Sopenharmony_ci *
778c2ecf20Sopenharmony_ci * The return value is the HP filtered transmit sample, send this to your D/A.
788c2ecf20Sopenharmony_ci */
798c2ecf20Sopenharmony_ciint16_t oslec_hpf_tx(struct oslec_state *ec, int16_t tx);
808c2ecf20Sopenharmony_ci
818c2ecf20Sopenharmony_ci#endif /* __OSLEC_H */
82