[Feature]Upload Modem source code
Change-Id: Id4294f30faced84d3e6fd6d5e61e1111bf287a37
diff --git a/mcu/driver/audio/src/v1/sp_enhance.c b/mcu/driver/audio/src/v1/sp_enhance.c
new file mode 100644
index 0000000..a75203c
--- /dev/null
+++ b/mcu/driver/audio/src/v1/sp_enhance.c
@@ -0,0 +1,1640 @@
+/*****************************************************************************
+* Copyright Statement:
+* --------------------
+* This software is protected by Copyright and the information contained
+* herein is confidential. The software may not be copied and the information
+* contained herein may not be used or disclosed except with the written
+* permission of MediaTek Inc. (C) 2005
+*
+* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
+* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
+* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
+* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
+* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
+* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
+* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
+* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
+* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
+* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
+*
+* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
+* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
+* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
+* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
+* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
+*
+* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
+* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
+* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
+* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
+* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
+*
+*****************************************************************************/
+
+/*******************************************************************************
+ *
+ * Filename:
+ * ---------
+ * sp_enhance.c
+ *
+ * Project:
+ * --------
+ * MAUI
+ *
+ * Description:
+ * ------------
+ * speech enhancement functions (moved from am.c)
+ *
+ * Author:
+ * -------
+ * -------
+ * -------
+ *
+ *==============================================================================
+ * HISTORY
+ * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *------------------------------------------------------------------------------
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ * removed!
+ * removed!
+ * removed!
+ *
+ *
+ *------------------------------------------------------------------------------
+ * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
+ *==============================================================================
+ *******************************************************************************/
+
+#include "kal_public_api.h"
+
+
+
+#include "kal_general_types.h"
+#include "sync_data.h"
+
+// #include "reg_base.h"
+
+#include "l1audio.h"
+
+#include "kal_trace.h"
+#include "l1sp_trc.h"
+
+#include "sp_enhance.h"
+#include "sp_drv.h"
+#include "am.h"
+#include "media.h"
+#include "afe.h"
+
+
+#include "ddload.h"
+
+
+#include "sal_def.h"
+#include "sal_exp.h"
+
+
+
+
+
+
+
+
+const unsigned short Common_Param_Default[72] = { 0, 0xB , 0x1010 ,0 ,0 ,0,0,0 ,
+ 0xC , 0x64,0xDABD,0x7918,0x2A00,0x8001,0x0,0x0,0x0,0x0,0x0,0x0,0x0 ,
+ 0x10 , 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0xB0B, 0 ,0, 0
+ };
+
+
+
+
+
+const unsigned short DMNR_Param_Default[1468] = { 0 , 0xC , 0x1010,0,0, 0,0,0 ,
+ 0x1001, 44 , 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x44,0x0,0x0,0x0 ,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 ,
+ 0x1002, 44 , 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x44,0x0,0x0,0x0 ,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 ,
+ 0x2001, 76 , 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x44,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x2002, 76 , 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x44,0x0,0x0,0x0,
+ 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 0x4001, 120, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 , 0x0, 0x0, 0x44, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 , 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x4002, 120, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 , 0x0, 0x0, 0x44, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 , 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x8001, 120, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 , 0x0, 0x0, 0x44, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 , 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ 0x8002, 120, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 , 0x0, 0x0, 0x44, 0x0, 0x0, 0x0,
+ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 , 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,
+ };
+
+const unsigned short MagiClarity_Param_Default[75] = { 0, 0xD, 0x1010,0,0, 0,0,0,
+ 32, 0xFF73,0x01C3,0x01DC,0x0240,0x026E,0x022B,0x0156,0xFFE5,0xFDEB,0xFB89,0xF8E6,0xF60E,0xF2C3,0xEDFB,0xE38B,0xAE09,0x51F7,0x1C75,0x1205,0x0D3D,0x09F2,0x071A,0x0477,0x0215,0x001B,0xFEAA,0xFDD5,0xFD92,0xFDC0,0xFE24,0xFE3D,0x008D , 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+0xD0D, 0 ,0, 0
+};
+
+
+
+
+const unsigned short Speech_Param_Default[418 + 134] =
+{ 0, 0xA, 0x1010,0,0, 0,0,0, 0x1001,
+ 64, 0x60,0xFD,0x4004,0x1F,0xE107,0x231F,0x195,0x40,0x110,0xC5,0x262,0x0,0x4008,0x0,0x0,0x2000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0 ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 90, 0x7FFF,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 90, 0x7FFF,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,
+ 20, 0xE342, 0x3CA1, 0x1DDC, 0xC448, 0x1DDC, 0xE0E8, 0x3F04, 0x2000, 0xC001, 0x2000, 0x0, 0x0, 0x0, 0x0, 0x2000, 0x0, 0x0, 0x0, 0x0, 0x2000,
+ 20, 0xE0B7, 0x3F42, 0x1ECC, 0xC268, 0x1ECC, 0xE1B2, 0x3E47, 0x2000, 0xC000, 0x2000, 0x0, 0x0, 0x0, 0x0, 0x2000, 0x0, 0x0, 0x0, 0x0, 0x2000,
+ 42, 0x7A90,0xC524,0x8001,0x4000,0x7F54,0xC090,0x800A,0x4000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3BB,0x2,
+ 42, 0x7A90,0xC524,0x8001,0x4000,0x7F54,0xC090,0x800A,0x4000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3BB,0x2,
+ 90, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 42, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,
+ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
+ 0xA0A, 0,0,0
+};
+
+const unsigned short Param_Default[2167] = { 0 };
+
+
+short Speech_All_Pass_MAG_CLARITY[32] =
+ { /* All pass filter */
+ 32767, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0,
+ 0, 0
+ };
+
+const unsigned short Speech_Common_Para[12] =
+{
+ 0, 55997, 31000, 10752, 32769, 0, 0, 0, 0, 0,
+ 0, 0
+};
+const unsigned short Debug_Info_Para[16] =
+{
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0
+};
+
+
+#if defined(_SPE_ENH_MD_PARSE_)
+#define Par_Speech_Common 0 //Volume Dependent ,speech unit : ModePar,FIR in,Fir out
+#define Par_GSM_NB_SpeechUnit 1
+#define Par_GSM_WB_SpeechUnit 2
+#define Par_WCDMA_NB_SpeechUnit 3
+#define Par_WCDMA_WB_SpeechUnit 4
+#define Par_CDMA_NB_SpeechUnit 5
+#define Par_CDMA_WB_SpeechUnit 6
+#define Par_VOLTE_NB_SpeechUnit 7
+#define Par_VOLTE_WB_SpeechUnit 8
+#define Par_C2K_NB_SpeechUnit 9
+#define Par_C2K_WB_SpeechUnit 10
+#define Par_VOLTE_SWB_SpeechUnit 11
+#endif
+kal_enhmutexid spe_enh_mutex;
+
+// #define TOTAL_NUM_SPH_MODE (NUM_SPH_MODE+2) // new 1 for HAC, 1 for USB
+// #define TOTAL_NUM_SPH_INPUT_FIR (NUM_SPH_INPUT_FIR+2) // new 1 for HAC, 1 for USB
+// #define TOTAL_NUM_SPH_OUTPUT_FIR (NUM_SPH_OUTPUT_FIR+2) // new 1 for HAC, 1 for USB
+typedef struct
+{
+ // uint8 sph_mode;
+ bool spe_flag;
+ bool EMI_isExist;
+ bool spe_isFweOn;
+
+ uint8 sph_SPE_path; // ul_only=0,dl_only=1,ul+dl=2
+ // uint16 spe_state; // record which enhancement is open
+
+ // uint16 spe_usr_sub_mask; // record the usage of enhancement sub feature. Sync with Sal_Enh_Dynamic_t definition. Ex. phonecall should be turned on DMNR, but users can decide whether turn on or not.please do not update the mask directly, please use function l1sp_updateUsrSubMask() to update
+ uint16 spe_usr_enh_ctrl; // bit0=DMNR,bit1=TDDNC,bit2=magi con
+ bool spe_is_update_enh_ctrl;
+#if defined(_SPE_ENH_MD_PARSE_)
+ int16 sph_dmnr_para[NUM_DMNR_PARAM];
+ int16 sph_wb_dmnr_para[NUM_WB_DMNR_PARAM];
+ int16 sph_swb_dmnr_para[NUM_SWB_DMNR_PARAM];
+ int16 sph_lspk_dmnr_para[NUM_DMNR_PARAM];
+ int16 sph_lspk_wb_dmnr_para[NUM_WB_DMNR_PARAM];
+ int16 sph_lspk_swb_dmnr_para[NUM_SWB_DMNR_PARAM];
+
+ // short sph_magi_clarity_para[NUM_MAGI_CLARITY_PARAM];
+ uint16 sph_magicConParam[NUM_MODE_PARAS];
+ uint16 sph_magicConWbParam[NUM_MODE_PARAS];
+#endif
+ uint32 sph_EMI_Info_offset;
+ uint32 sph_EMI_Info_len;
+ bool isMagiConOn;
+
+ bool isHacModeNeeded; // if AP send Hac paramters and FIRs to MD, the flag will be set.
+ bool isSPE_Enable; // check SPE already enable or not
+ // uint8 spe_Path;
+ // bool isReDDL;
+#if defined(_SPE_ENH_MD_PARSE_)
+ // --NB--
+ uint16 sph_ModePara[TOTAL_NETWORK_NUMBER][NUM_MODE_PARAS];
+ int16 sph_InFirCoeff[TOTAL_NETWORK_NUMBER][NUM_FIR_COEFFS];
+ int16 sph_OutFirCoeff[TOTAL_NETWORK_NUMBER][NUM_FIR_COEFFS];
+ int16 sph_InIirCoeff[TOTAL_NETWORK_NUMBER][NUM_IIR_COEFFS];
+ int16 sph_OutIirCoeff[TOTAL_NETWORK_NUMBER][NUM_IIR_COEFFS];
+ int16 sph_Mic1IirCoeff[TOTAL_NETWORK_NUMBER][NUM_MIC1_IIR_COEFFS];
+ int16 sph_Mic2IirCoeff[TOTAL_NETWORK_NUMBER][NUM_MIC1_IIR_COEFFS];
+ // --WB--
+ uint16 sph_WbModePara[TOTAL_NETWORK_NUMBER][NUM_MODE_PARAS];
+ int16 sph_WbInFirCoeff[TOTAL_NETWORK_NUMBER][NUM_WB_FIR_COEFFS];
+ int16 sph_WbOutFirCoeff[TOTAL_NETWORK_NUMBER][NUM_WB_FIR_COEFFS];
+ int16 sph_WbInIirCoeff[TOTAL_NETWORK_NUMBER][NUM_IIR_COEFFS];
+ int16 sph_WbOutIirCoeff[TOTAL_NETWORK_NUMBER][NUM_IIR_COEFFS];
+ int16 sph_WbMic1IirCoeff[TOTAL_NETWORK_NUMBER][NUM_MIC1_IIR_COEFFS];
+ int16 sph_WbMic2IirCoeff[TOTAL_NETWORK_NUMBER][NUM_MIC1_IIR_COEFFS];
+ // --SWB--
+ uint16 sph_SWbModePara[TOTAL_NETWORK_NUMBER][NUM_MODE_PARAS];
+ int16 sph_SWbInFirCoeff[TOTAL_NETWORK_NUMBER][NUM_SWB_FIR_COEFFS];
+ int16 sph_SWbOutFirCoeff[TOTAL_NETWORK_NUMBER][NUM_SWB_FIR_COEFFS];
+ int16 sph_SWbInIirCoeff[TOTAL_NETWORK_NUMBER][NUM_IIR_COEFFS];
+ int16 sph_SWbOutIirCoeff[TOTAL_NETWORK_NUMBER][NUM_IIR_COEFFS];
+ int16 sph_SWbMic1IirCoeff[TOTAL_NETWORK_NUMBER][NUM_MIC1_IIR_COEFFS];
+ int16 sph_SWbMic2IirCoeff[TOTAL_NETWORK_NUMBER][NUM_MIC1_IIR_COEFFS];
+#endif
+ bool ctm_spe_status;
+
+} _SPE_T;
+
+static _SPE_T gSpe;
+
+void l1sp_SetParEMIInfo(uint32 offset,uint32 len)
+{
+ gSpe.sph_EMI_Info_offset = offset ;
+ gSpe.sph_EMI_Info_len = len ;
+
+ MD_TRC_L1SP_SPE_SET_EMI_INFO(0,gSpe.sph_EMI_Info_offset,gSpe.sph_EMI_Info_len);
+}
+void l1sp_setCtmSpeStatus(bool s){
+ gSpe.ctm_spe_status = s;
+}
+
+bool l1sp_getCtmSpeStatus(){
+ return (gSpe.ctm_spe_status);
+}
+
+
+/* ========================================================================= */
+#if defined(_SPE_ENH_MD_PARSE_)
+void l1sp_setAllSpeechModePara(kal_uint16 * speech_mode_para, kal_int16 length)
+{
+ ASSERT((TOTAL_NETWORK_NUMBER*NUM_MODE_PARAS) == length);
+ memcpy(gSpe.sph_ModePara, speech_mode_para,
+ TOTAL_NETWORK_NUMBER*NUM_MODE_PARAS*sizeof(uint16));
+}
+
+
+
+
+
+void l1sp_setAllSpeechFirCoeff_InputOnly(kal_int16 *speech_input_FIR_coeffs, kal_int16 length)
+{
+ ASSERT((TOTAL_NETWORK_NUMBER*NUM_FIR_COEFFS) == length);
+ memcpy(gSpe.sph_InFirCoeff, speech_input_FIR_coeffs,
+ TOTAL_NETWORK_NUMBER*NUM_FIR_COEFFS*sizeof(int16));
+
+}
+
+
+
+
+void l1sp_setAllSpeechFirCoeff_OutputOnly(kal_int16 *speech_output_FIR_coeffs, kal_int16 length)
+{
+ ASSERT((TOTAL_NETWORK_NUMBER*NUM_FIR_COEFFS) == length);
+ memcpy(gSpe.sph_OutFirCoeff, speech_output_FIR_coeffs,
+ TOTAL_NETWORK_NUMBER*NUM_FIR_COEFFS*sizeof(int16));
+}
+//IIR
+void l1sp_setAllSpeechIirCoeff_InputOnly(kal_int16 *speech_input_IIR_coeffs, kal_int16 length)
+{
+ ASSERT((TOTAL_NETWORK_NUMBER*NUM_IIR_COEFFS) == length);
+ memcpy(gSpe.sph_InIirCoeff, speech_input_IIR_coeffs,
+ TOTAL_NETWORK_NUMBER*NUM_IIR_COEFFS*sizeof(int16));
+
+}
+
+
+void l1sp_setAllSpeechIirCoeff_OutputOnly(kal_int16 *speech_output_IIR_coeffs, kal_int16 length)
+{
+ ASSERT((TOTAL_NETWORK_NUMBER*NUM_IIR_COEFFS) == length);
+ memcpy(gSpe.sph_OutIirCoeff, speech_output_IIR_coeffs,
+ TOTAL_NETWORK_NUMBER*NUM_IIR_COEFFS*sizeof(int16));
+}
+
+void l1sp_setAllSpeechMic1IirCoeff(kal_int16 *speech_output_Mic1_IIR_coeffs, kal_int16 length)
+{
+ ASSERT((TOTAL_NETWORK_NUMBER*NUM_MIC1_IIR_COEFFS) == length);
+ memcpy(gSpe.sph_Mic1IirCoeff, speech_output_Mic1_IIR_coeffs,
+ TOTAL_NETWORK_NUMBER*NUM_MIC1_IIR_COEFFS*sizeof(int16));
+}
+void l1sp_setAllSpeechMic2IirCoeff(kal_int16 *speech_output_Mic2_IIR_coeffs, kal_int16 length)
+{
+ ASSERT((TOTAL_NETWORK_NUMBER*NUM_MIC2_IIR_COEFFS) == length);
+ memcpy(gSpe.sph_Mic2IirCoeff, speech_output_Mic2_IIR_coeffs,
+ TOTAL_NETWORK_NUMBER*NUM_MIC2_IIR_COEFFS*sizeof(int16));
+}
+//--------------- WB ----------------
+void l1sp_setAllWbSpeechModePara(kal_uint16 * speech_mode_para, kal_int16 length)
+{
+ ASSERT((TOTAL_NETWORK_NUMBER*NUM_MODE_PARAS) == length);
+
+ memcpy(gSpe.sph_WbModePara, speech_mode_para,
+ TOTAL_NETWORK_NUMBER*NUM_MODE_PARAS*sizeof(uint16));
+}
+void l1sp_setAllSWbSpeechModePara(kal_uint16 * speech_mode_para,kal_int16 length)
+{
+ ASSERT((TOTAL_NETWORK_NUMBER*NUM_MODE_PARAS) == length);
+
+ memcpy(gSpe.sph_SWbModePara, speech_mode_para,
+ TOTAL_NETWORK_NUMBER*NUM_MODE_PARAS*sizeof(uint16));
+
+}
+void spe_setMagiCon(void)
+{
+
+ gSpe.isMagiConOn = true;
+ gSpe.spe_isFweOn = true;
+}
+
+void spe_DisableMagiCon(void)
+{
+ gSpe.isMagiConOn = false;
+ gSpe.spe_isFweOn = false;
+}
+
+
+void l1sp_setAllWbSpeechFirCoeff_InputOnly(
+ kal_int16 *speech_input_FIR_coeffs, kal_int16 length)
+{
+ ASSERT((TOTAL_NETWORK_NUMBER*NUM_WB_FIR_COEFFS) == length);
+ memcpy(gSpe.sph_WbInFirCoeff, speech_input_FIR_coeffs,
+ length*sizeof(int16));
+}
+
+void l1sp_setAllSWbSpeechFirCoeff_InputOnly(
+ kal_int16 *speech_input_FIR_coeffs, kal_int16 length)
+{
+ ASSERT((TOTAL_NETWORK_NUMBER*NUM_SWB_FIR_COEFFS) == length);
+ memcpy(gSpe.sph_SWbInFirCoeff, speech_input_FIR_coeffs,
+ length*sizeof(int16));
+
+}
+
+
+void l1sp_setAllWbSpeechFirCoeff_OutputOnly(
+ kal_int16 *speech_output_FIR_coeffs, kal_int16 length)
+{
+ ASSERT((TOTAL_NETWORK_NUMBER*NUM_WB_FIR_COEFFS) == length);
+ memcpy(gSpe.sph_WbOutFirCoeff, speech_output_FIR_coeffs,
+ length*sizeof(int16));
+}
+
+void l1sp_setAllSWbSpeechFirCoeff_OutputOnly(
+ kal_int16 *speech_output_FIR_coeffs, kal_int16 length)
+{
+ ASSERT((TOTAL_NETWORK_NUMBER*NUM_SWB_FIR_COEFFS) == length);
+ memcpy(gSpe.sph_SWbOutFirCoeff, speech_output_FIR_coeffs,
+ length*sizeof(int16));
+}
+
+//IIR
+void l1sp_setAllWBSpeechIirCoeff_InputOnly(kal_int16 *speech_input_IIR_coeffs, kal_int16 length)
+{
+ ASSERT((TOTAL_NETWORK_NUMBER*NUM_IIR_COEFFS) == length);
+ memcpy(gSpe.sph_WbInIirCoeff, speech_input_IIR_coeffs,
+ TOTAL_NETWORK_NUMBER*NUM_IIR_COEFFS*sizeof(int16));
+
+}
+void l1sp_setAllWBSpeechIirCoeff_OutputOnly(kal_int16 *speech_output_IIR_coeffs, kal_int16 length)
+{
+ ASSERT((TOTAL_NETWORK_NUMBER*NUM_IIR_COEFFS) == length);
+ memcpy(gSpe.sph_WbOutIirCoeff, speech_output_IIR_coeffs,
+ TOTAL_NETWORK_NUMBER*NUM_IIR_COEFFS*sizeof(int16));
+}
+void l1sp_setAllWBSpeechMic1IirCoeff(kal_int16 *speech_output_Mic1_IIR_coeffs, kal_int16 length)
+{
+
+ ASSERT((TOTAL_NETWORK_NUMBER*NUM_MIC1_IIR_COEFFS) == length);
+ memcpy(gSpe.sph_WbMic1IirCoeff, speech_output_Mic1_IIR_coeffs,
+ TOTAL_NETWORK_NUMBER*NUM_MIC1_IIR_COEFFS*sizeof(int16));
+
+}
+void l1sp_setAllWBSpeechMic2IirCoeff(kal_int16 *speech_output_Mic2_IIR_coeffs, kal_int16 length)
+{
+ ASSERT((TOTAL_NETWORK_NUMBER*NUM_MIC2_IIR_COEFFS) == length);
+ memcpy(gSpe.sph_WbMic2IirCoeff, speech_output_Mic2_IIR_coeffs,
+ TOTAL_NETWORK_NUMBER*NUM_MIC2_IIR_COEFFS*sizeof(int16));
+
+}
+void l1sp_setAllSWBSpeechIirCoeff_InputOnly(kal_int16 *speech_input_IIR_coeffs, kal_int16 length)
+{
+ ASSERT((TOTAL_NETWORK_NUMBER*NUM_IIR_COEFFS) == length);
+ memcpy(gSpe.sph_SWbInIirCoeff, speech_input_IIR_coeffs,
+ TOTAL_NETWORK_NUMBER*NUM_IIR_COEFFS*sizeof(int16));
+
+}
+void l1sp_setAllSWBSpeechIirCoeff_OutputOnly(kal_int16 *speech_output_IIR_coeffs, kal_int16 length)
+{
+ ASSERT((TOTAL_NETWORK_NUMBER*NUM_IIR_COEFFS) == length);
+ memcpy(gSpe.sph_SWbOutIirCoeff, speech_output_IIR_coeffs,
+ TOTAL_NETWORK_NUMBER*NUM_IIR_COEFFS*sizeof(int16));
+}
+void l1sp_setAllSWBSpeechMic1IirCoeff(kal_int16 *speech_output_Mic1_IIR_coeffs, kal_int16 length)
+{
+ ASSERT((TOTAL_NETWORK_NUMBER*NUM_MIC1_IIR_COEFFS) == length);
+ memcpy(gSpe.sph_SWbMic1IirCoeff, speech_output_Mic1_IIR_coeffs,
+ TOTAL_NETWORK_NUMBER*NUM_MIC1_IIR_COEFFS*sizeof(int16));
+}
+void l1sp_setAllSWBSpeechMic2IirCoeff(kal_int16 *speech_output_Mic2_IIR_coeffs, kal_int16 length)
+{
+ ASSERT((TOTAL_NETWORK_NUMBER*NUM_MIC2_IIR_COEFFS) == length);
+ memcpy(gSpe.sph_SWbMic2IirCoeff, speech_output_Mic2_IIR_coeffs,
+ TOTAL_NETWORK_NUMBER*NUM_MIC2_IIR_COEFFS*sizeof(int16));
+}
+//--------------- DMNR ----------------
+
+
+/**
+ Not support parameter rewirte under application begin runnning
+*/
+void L1SP_SetDMNRPara( const kal_int16 DMNR_para[NUM_DMNR_PARAM] )
+{
+
+ memcpy(&gSpe.sph_dmnr_para, DMNR_para, NUM_DMNR_PARAM*sizeof(uint16));
+}
+
+/**
+ Not support parameter rewirte under application begin runnning
+*/
+void L1SP_SetWbDMNRPara( const kal_int16 WB_DMNR_para[NUM_WB_DMNR_PARAM] )
+{
+ memcpy(&gSpe.sph_wb_dmnr_para, WB_DMNR_para, NUM_WB_DMNR_PARAM*sizeof(uint16));
+}
+void L1SP_SetSWbDMNRPara( const kal_int16 SWB_DMNR_para[NUM_SWB_DMNR_PARAM] )
+{
+ memcpy(&gSpe.sph_swb_dmnr_para, SWB_DMNR_para, NUM_SWB_DMNR_PARAM*sizeof(uint16));
+}
+
+/**
+ Not support parameter rewirte under application begin runnning
+*/
+void L1SP_SetLSpkDMNRPara( const kal_int16 LSpk_DMNR_para[NUM_DMNR_PARAM] )
+{
+ memcpy(&gSpe.sph_lspk_dmnr_para, LSpk_DMNR_para, NUM_DMNR_PARAM*sizeof(uint16));
+}
+
+
+/**
+ Not support parameter rewirte under application begin runnning
+*/
+void L1SP_SetLSpkWbDMNRPara( const kal_int16 LSpk_Wb_DMNR_para[NUM_WB_DMNR_PARAM] )
+{
+ memcpy(&gSpe.sph_lspk_wb_dmnr_para, LSpk_Wb_DMNR_para, NUM_WB_DMNR_PARAM*sizeof(uint16));
+}
+void L1SP_SetLSpkSWbDMNRPara( const kal_int16 LSpk_SWb_DMNR_para[NUM_SWB_DMNR_PARAM] )
+{
+ memcpy(&gSpe.sph_lspk_swb_dmnr_para, LSpk_SWb_DMNR_para, NUM_SWB_DMNR_PARAM*sizeof(uint16));
+}
+
+
+//--------------- MagiCon (Loudspeaker mode) ---------------------
+
+bool spe_isSpeFweOn(void)
+{
+ return gSpe.spe_isFweOn;
+}
+
+
+//--------------- New Modes ---------------------
+
+void spe_setHacModeNeeded(bool isNeed)
+{
+ gSpe.isHacModeNeeded = isNeed;
+}
+#endif
+//--------------- viberation speaker ----------------
+
+void spe_setNotchFilterParam(int16 *param, bool is2In1Spk)
+{
+ AM_SetNotchFilterParam(param);
+}
+
+
+/* ========================================================================= */
+/*
+void L1SP_MagiClarityData(const short MAGI_CLARITY_PAR[NUM_MAGI_CLARITY_PARAM])
+{
+ memcpy(&gSpe.sph_magi_clarity_para, MAGI_CLARITY_PAR, NUM_MAGI_CLARITY_PARAM*sizeof(short));
+}
+*/
+/*
+void L1SP_Reload_MagiClarity_Para( void )
+{
+ SPE_MagiClarityData(gSpe.sph_magi_clarity_para);
+}
+*/
+/**
+ Use currect information inside gSpe to decide the mode paramters.
+ @m_para: nb para result
+ @m_para_wb: wb para result
+*/
+
+
+
+void spe_setSpeechMode( uint8 afterSalDevMode, uint8 after_sph_mode)
+{
+ // kal_bool preIsLSP;
+ // kal_bool afterIsLsp;
+
+ // uint8 prev_sph_mode = gSpe.sph_mode;
+
+#if defined( MTK_SLEEP_ENABLE )
+ // kal_uint16 aud_id = L1SP_GetAudID();
+ kal_uint16 aud_id = L1Audio_GetAudioID();
+ L1Audio_SetFlag( aud_id );
+#endif
+
+
+ //------------------------------------------------------
+ // Changing
+ //------------------------------------------------------
+ // gSpe.sph_mode = after_sph_mode;
+
+ //------------------------------------------------------
+ // Turn on
+ //------------------------------------------------------
+
+
+ SetSpeechEnhancement( true );
+
+ //------------------------------------------------------
+#if defined( MTK_SLEEP_ENABLE )
+ L1Audio_ClearFlag( aud_id );
+ L1Audio_FreeAudioID( aud_id );
+#endif
+
+}
+
+
+#if defined(_SPE_ENH_MD_PARSE_)
+
+void SetSpeechEnhancement( bool ec )
+{
+
+ // For hosted dongle, speech enhancment is not existing by default.
+ // For RNDIS, speech is useless, so don't care.
+ // For super dongle, speech is useful.
+ // As the result, condition is: (chip list) && (data card case without spe enable)
+
+#if defined(SPH_CHIP_BACK_PHONECALL_USE)
+ return;
+#endif // SPH_CHIP_BACK_PHONECALL_USE
+
+ kal_prompt_trace(MOD_L1SP, "[CTM][SPE] l1sp_getCtmSpeStatus() = %d",l1sp_getCtmSpeStatus());
+ // speech is not working.
+ if ((!AM_IsAmInSpeechState()) || (!gSpe.spe_flag) || (!l1sp_getCtmSpeStatus()))
+ return;
+
+ // kal_trace( TRACE_INFO, L1SP_APPLY_MODE, (ec)?1:0, gSpe.sph_mode, -1, 0 );
+ if( ec ) {
+
+ //====================================
+
+ MD_TRC_SPE_SETDYNAMIC_SM(0);
+ MD_TRC_L1SP_SPE_CTRL_UPDATE(gSpe.spe_usr_enh_ctrl, gSpe.sph_SPE_path, AM_GetNetworkRate());
+ SAL_ENH_SetULPath(gSpe.sph_SPE_path!=SpeechEnh_DL);
+ SAL_ENH_SetDLPath(gSpe.sph_SPE_path!=SpeechEnh_UL);
+
+ kal_take_enh_mutex (spe_enh_mutex);
+
+ while(1){
+ MD1_DSP_kal_cc_take_spinlock(kal_cc_md1_dsp_spinlock, KAL_INFINITE_WAIT);
+ if(SAL_ENH_IsParMemAvailable()){
+ SAL_ENH_OccupyParMem();
+ MD1_DSP_kal_cc_give_spinlock(kal_cc_md1_dsp_spinlock);
+ break;
+ }
+ MD1_DSP_kal_cc_give_spinlock(kal_cc_md1_dsp_spinlock);
+ }
+ kal_give_enh_mutex (spe_enh_mutex);
+ MD_TRC_SPE_SETDYNAMIC_SM(1);
+ if(gSpe.spe_is_update_enh_ctrl)
+ {
+ SPE_ENHCtrlSwitch(gSpe.spe_usr_enh_ctrl);
+ }
+
+ //==========write the parameters to DSP==========================
+
+
+ uint16 *c_param ;
+ uint16 *m_param ;
+ uint16 *m_param_wb ;
+ c_param = Sp_GetCommonSpeechPara();
+ m_param = Sp_GetSpeechPara();
+ m_param_wb = Sp_GetWbSpeechPara();
+
+ //1. set Common par.
+ if(gSpe.isSPE_Enable == false)
+ {
+ SPE_LoadSpeechPara(c_param, NULL, NULL, NULL);
+ }
+ //MD1_DSP_kal_cc_give_spinlock(kal_cc_md1_dsp_spinlock);
+ //2. Set Mode par.FIR par.IIR par.
+ if(AM_GetNetworkRate() == RAT_2G_MODE)
+ {
+ Set2GDynPar();
+ }
+ else if(AM_GetNetworkRate()== RAT_3G_MODE || AM_GetNetworkRate()==RAT_3G324M_MODE )
+ {
+ Set3GDynPar();
+ }
+ else if(AM_GetNetworkRate()== RAT_4G_MODE )
+ {
+ Set4GDynPar();
+ }
+ else if(AM_GetNetworkRate()== RAT_C2K_MODE)
+ {
+ SetC2KDynPar();
+ }
+ else
+ {
+ Set2GDynPar();
+ }
+
+
+ //MD1_DSP_kal_cc_take_spinlock(kal_cc_md1_dsp_spinlock, KAL_INFINITE_WAIT);
+ //3. set echo ref info ==> move to scheduler
+ // SPE_SetActiveEchoRefInfo(gSpe.sph_mode);
+ //4. set magiclarity par. (Remove)
+ // SPE_MagiClarityData(gSpe.sph_magi_clarity_para);
+ //5. set DMNR par .
+
+ if(((gSpe.spe_usr_enh_ctrl & SPE_DMNR_SUPPORT)!=0))
+ {
+ SPE_LoadDmnrLspCoeffs(gSpe.sph_lspk_dmnr_para);
+ SPE_LoadWbDmnrLspCoeffs(gSpe.sph_lspk_wb_dmnr_para);
+ SPE_LoadSWbLspDmnrCoeffs(gSpe.sph_lspk_swb_dmnr_para);
+ SPE_LoadDmnrCoeffs(gSpe.sph_dmnr_para);
+ SPE_LoadWbDmnrCoeffs(gSpe.sph_wb_dmnr_para);
+ SPE_LoadSWbDmnrCoeffs(gSpe.sph_swb_dmnr_para);
+ }
+
+ MD_TRC_SPE_SETDYNAMIC_SM(3);
+ SPE_SetDynamicStatemachine();
+ if(gSpe.isSPE_Enable == false)
+ {
+ SPE_Enable_DLL_Entry();
+ }
+ //SPE_WaitSPEDynReady();
+ //MD1_DSP_kal_cc_give_spinlock(kal_cc_md1_dsp_spinlock);
+ SAL_ENH_ReleaseParMem();
+ MD_TRC_SPE_SETDYNAMIC_SM(4);
+ MD_TRC_L1SP_SPEECH_ENHANCEMENT(*m_param, *(m_param+1), *c_param, *(c_param+11));
+ MD_TRC_SPE_SETSPEECHENHANCEMENT_C_PARAM();
+ MD_TRC_L1SP_MODE_VALUE(c_param[0], c_param[1], c_param[2], c_param[3], c_param[4], c_param[5], c_param[6], c_param[7], c_param[8], c_param[9], c_param[10], c_param[11], c_param[12], c_param[13], c_param[14], c_param[15]);
+ MD_TRC_SPE_SETSPEECHENHANCEMENT_M_PARAM();
+ MD_TRC_L1SP_MODE_VALUE(m_param[0], m_param[1], m_param[2], m_param[3], m_param[4], m_param[5], m_param[6], m_param[7], m_param[8], m_param[9], m_param[10], m_param[11], m_param[12], m_param[13], m_param[14], m_param[15]);
+ MD_TRC_L1SP_MODE_VALUE(m_param[16], m_param[17], m_param[18], m_param[19], m_param[20], m_param[21], m_param[22], m_param[23], m_param[24], m_param[25], m_param[26], m_param[27], m_param[28], m_param[29], m_param[30], m_param[31]);
+ MD_TRC_L1SP_MODE_VALUE(m_param[32], m_param[33], m_param[34], m_param[35], m_param[36], m_param[37], m_param[38], m_param[39], m_param[40], m_param[41], m_param[42], m_param[43], m_param[44], m_param[45], m_param[46], m_param[47]);
+ MD_TRC_SPE_SETSPEECHENHANCEMENT_M_PARAM_WB();
+ MD_TRC_L1SP_MODE_VALUE(m_param_wb[0], m_param_wb[1], m_param_wb[2], m_param_wb[3], m_param_wb[4], m_param_wb[5], m_param_wb[6], m_param_wb[7], m_param_wb[8], m_param_wb[9], m_param_wb[10], m_param_wb[11], m_param_wb[12], m_param_wb[13], m_param_wb[14], m_param_wb[15]);
+ MD_TRC_L1SP_MODE_VALUE(m_param_wb[16], m_param_wb[17], m_param_wb[18], m_param_wb[19], m_param_wb[20], m_param_wb[21], m_param_wb[22], m_param_wb[23], m_param_wb[24], m_param_wb[25], m_param_wb[26], m_param_wb[27], m_param_wb[28], m_param_wb[29], m_param_wb[30], m_param_wb[31]);
+ MD_TRC_L1SP_MODE_VALUE(m_param_wb[32], m_param_wb[33], m_param_wb[34], m_param_wb[35], m_param_wb[36], m_param_wb[37], m_param_wb[38], m_param_wb[39], m_param_wb[40], m_param_wb[41], m_param_wb[42], m_param_wb[43], m_param_wb[44], m_param_wb[45], m_param_wb[46], m_param_wb[47]);
+ gSpe.isSPE_Enable = true;
+ gSpe.spe_is_update_enh_ctrl = false;
+ }
+ else {
+
+
+ kal_take_enh_mutex (spe_enh_mutex);
+ MD1_DSP_kal_cc_take_spinlock(kal_cc_md1_dsp_spinlock, KAL_INFINITE_WAIT);
+ SPE_ENHCtrlSwitch(0);
+ SPE_Clear_DLL_Entry();
+ MD1_DSP_kal_cc_give_spinlock(kal_cc_md1_dsp_spinlock);
+ kal_give_enh_mutex (spe_enh_mutex);
+ gSpe.isSPE_Enable = false;
+ // gSpe.spe_state = 0;
+ gSpe.spe_is_update_enh_ctrl = true;
+
+
+#if defined(__TC01_VOICE_ENGINE__)
+ VC_Stop();
+ VS_Stop();
+#endif
+ }
+
+}
+
+
+#else // for 95,97
+
+
+void SetSpeechEnhancement( bool ec )
+{
+ // For hosted dongle, speech enhancment is not existing by default.
+ // For RNDIS, speech is useless, so don't care.
+ // For super dongle, speech is useful.
+ // As the result, condition is: (chip list) && (data card case without spe enable)
+
+#if defined(SPH_CHIP_BACK_PHONECALL_USE)
+ return;
+#endif // SPH_CHIP_BACK_PHONECALL_USE
+
+ kal_prompt_trace(MOD_L1SP, "[SPE] l1sp_getCtmSpeStatus() = %d, gSpe.EMI_isExist__0--0 =%d",l1sp_getCtmSpeStatus(),gSpe.EMI_isExist);
+ // speech is not working.
+ if ((!AM_IsAmInSpeechState()) || (!gSpe.spe_flag) || (!l1sp_getCtmSpeStatus()) || (!gSpe.EMI_isExist))
+ return;
+
+ // kal_trace( TRACE_INFO, L1SP_APPLY_MODE, (ec)?1:0, gSpe.sph_mode, -1, 0 );
+ if( ec ) {
+
+ //====================================
+
+ // notify FDD/TDD info to uSip
+ kal_prompt_trace(MOD_L1SP, "[SPE]SP3G_Rab_State() = %x,L1SP_GetSIMStatus()=%x",SP3G_Rab_State(),L1SP_GetSIMStatus());
+ if( SP3G_Rab_State() )
+ {
+ switch(L1SP_GetSIMStatus()) {
+ case SP_3G_SIM_FDD_ACTIVE:
+ SAL_ENH_Set3GNetworkType(0);
+ break;
+ case SP_3G_SIM_TDD_ACTIVE:
+ SAL_ENH_Set3GNetworkType(1);
+ break;
+ default:
+ break;
+ }
+ }
+
+ MD_TRC_SPE_SETDYNAMIC_SM(0);
+ MD_TRC_L1SP_SPE_CTRL_UPDATE(gSpe.spe_usr_enh_ctrl, gSpe.sph_SPE_path, AM_GetNetworkRate());
+ SAL_ENH_SetULPath(gSpe.sph_SPE_path!=SpeechEnh_DL);
+ SAL_ENH_SetDLPath(gSpe.sph_SPE_path!=SpeechEnh_UL);
+
+ kal_take_enh_mutex (spe_enh_mutex);
+
+ while(1){
+ MD1_DSP_kal_cc_take_spinlock(kal_cc_md1_dsp_spinlock, KAL_INFINITE_WAIT);
+ if(SAL_ENH_IsParMemAvailable()){
+ SAL_ENH_OccupyParMem();
+ MD1_DSP_kal_cc_give_spinlock(kal_cc_md1_dsp_spinlock);
+ break;
+ }
+ MD1_DSP_kal_cc_give_spinlock(kal_cc_md1_dsp_spinlock);
+ }
+ kal_give_enh_mutex (spe_enh_mutex);
+
+ MD_TRC_SPE_SETDYNAMIC_SM(1);
+ if(gSpe.spe_is_update_enh_ctrl)
+ {
+ SPE_ENHCtrlSwitch(gSpe.spe_usr_enh_ctrl);
+ }
+
+ //==========write the parameters to DSP==========================
+
+
+ uint16 *c_param ;
+ c_param = Sp_GetCommonSpeechPara();
+
+ MD_TRC_SPE_SETDYNAMIC_SM(3);
+ MD_TRC_L1SP_SPE_SET_EMI_INFO(1,gSpe.sph_EMI_Info_offset,gSpe.sph_EMI_Info_len);
+ SPE_SetDynamicStatemachine(gSpe.sph_EMI_Info_offset,gSpe.sph_EMI_Info_len);
+ if(gSpe.isSPE_Enable == false)
+ {
+ SPE_Enable_DLL_Entry();
+ }
+ SAL_ENH_ReleaseParMem();
+ MD_TRC_SPE_SETDYNAMIC_SM(4);
+ MD_TRC_SPE_SETSPEECHENHANCEMENT_C_PARAM();
+ MD_TRC_L1SP_MODE_VALUE(c_param[0], c_param[1], c_param[2], c_param[3], c_param[4], c_param[5], c_param[6], c_param[7], c_param[8], c_param[9], c_param[10], c_param[11], c_param[12], c_param[13], c_param[14], c_param[15]);
+ gSpe.isSPE_Enable = true;
+ gSpe.spe_is_update_enh_ctrl = false;
+ }
+ else {
+ kal_take_enh_mutex (spe_enh_mutex);
+ MD1_DSP_kal_cc_take_spinlock(kal_cc_md1_dsp_spinlock, KAL_INFINITE_WAIT);
+ SPE_ENHCtrlSwitch(0);
+ SPE_Clear_DLL_Entry();
+ MD1_DSP_kal_cc_give_spinlock(kal_cc_md1_dsp_spinlock);
+ kal_give_enh_mutex (spe_enh_mutex);
+ gSpe.isSPE_Enable = false;
+ // gSpe.spe_state = 0;
+ gSpe.spe_is_update_enh_ctrl = true;
+
+
+#if defined(__TC01_VOICE_ENGINE__)
+ VC_Stop();
+ VS_Stop();
+#endif
+ }
+
+}
+
+
+#endif
+
+static void spe_getFirMappingByScene(const uint32 scene,
+ uint8 *devMode, uint8 *enhMode,
+ uint8 *inFir, uint8 *outFir)
+{
+ uint8 tempDevMode = 0xff;
+ uint8 tempEnhMode = 0xff;
+ uint8 tempInFir = 0xff;
+ uint8 tempOutFir = 0xff;
+
+ switch(scene) {
+ case SPH_ENH_AND_FIR_SCENE_NORMAL:
+ tempDevMode = SAL_DEV_NORMAL; // SPH_MODE_NORMAL;
+ tempEnhMode = SPH_MODE_NORMAL;
+ tempInFir = SPH_FIR_COEFF_NORMAL;
+ tempOutFir = SPH_FIR_COEFF_NORMAL;
+
+ break;
+ case SPH_ENH_AND_FIR_SCENE_EARPHONE:
+ case SPH_ENH_AND_FIR_SCENE_LOUDSPK:
+ tempDevMode = scene; // SAL_DEV_EARPHONE or SAL_DEV_LOUDSPK
+ tempEnhMode = scene;
+ tempInFir = scene;
+ tempOutFir = scene;
+ break;
+// #if defined(__BT_SUPPORT__)
+ case SPH_ENH_AND_FIR_SCENE_BT_EARPHONE:
+ case SPH_ENH_AND_FIR_SCENE_BT_CARKIT:
+ tempDevMode = SAL_DEV_BT_EARPHONE_NB; //scene;
+ tempEnhMode = scene;
+ tempInFir = SPH_FIR_COEFF_BT;
+ tempOutFir = SPH_FIR_COEFF_BT;
+ break;
+
+ case SPH_ENH_AND_FIR_SCENE_BT_CORDLESS:
+ tempDevMode = SAL_DEV_BT_CORDLESS; //scene;
+ tempEnhMode = scene;
+ tempInFir = SPH_FIR_COEFF_BT;
+ tempOutFir = SPH_FIR_COEFF_BT;
+ break;
+//#endif
+ case SPH_ENH_AND_FIR_SCENE_AUX1: // AUX is use to loud speaker mode
+ tempDevMode = SAL_DEV_LOUDSPK; //scene
+ tempEnhMode = SPH_MODE_AUX1; //scene
+ tempInFir = SPH_FIR_COEFF_HANDFREE;
+ tempOutFir = SPH_FIR_COEFF_HANDFREE;
+ break;
+ case SPH_ENH_AND_FIR_SCENE_AUX2:
+ tempDevMode = SPH_MODE_NORMAL;
+ tempEnhMode = SPH_MODE_AUX2;
+ tempInFir = SPH_FIR_COEFF_NORMAL;
+ tempOutFir = SPH_FIR_COEFF_NORMAL;
+ break;
+
+ case SPH_ENH_AND_FIR_SCENE_HAC:
+ ASSERT(true == gSpe.isHacModeNeeded); // is AP did not set the mode parameter. assert it directly!
+
+ tempDevMode = SPH_MODE_NORMAL;
+ tempEnhMode = SPH_MODE_HAC;
+ tempInFir = SPH_FIR_COEFF_HAC;
+ tempOutFir = SPH_FIR_COEFF_HAC;
+ break;
+ case SPH_ENH_AND_FIR_SCENE_USB: // similar to earphone
+ tempDevMode = SPH_MODE_EARPHONE;
+ tempEnhMode = SPH_MODE_USB;
+ tempInFir = SPH_FIR_COEFF_USB;
+ tempOutFir = SPH_FIR_COEFF_USB;
+ break;
+ default:
+ {
+ ASSERT(0);
+ }
+
+ }
+
+ *devMode = tempDevMode;
+ *enhMode = tempEnhMode;
+ *inFir = tempInFir;
+ *outFir = tempOutFir;
+
+}
+
+/**
+ new interface to replace L1SP_SetSpeechMode(), L1SP_Write_Audio_Coefficients(),
+ L1SP_Write_WB_Audio_Coefficients() in the same time.
+
+ if you want to use personal configuration, you can use original interfaces.
+
+ @scene: [Input] scenario for different enhancement and fir combination.
+*/
+void L1SP_SetSpeechEnhanceAndFir(uint32 scene, uint32 updatedCoeff)
+
+{
+ uint8 modeIndex = 0;
+ uint8 inFirIndex = 0;
+ uint8 outFirIndex = 0;
+ uint8 devModeIndex = 0;
+
+
+ //speech mode
+//----------------- original scenario ---------------
+ if(scene <SPH_MODE_UNDEFINED)
+ { //keeping the original scenario
+
+ spe_getFirMappingByScene(scene, &devModeIndex, &modeIndex,
+ &inFirIndex, &outFirIndex);
+
+ if((updatedCoeff == 0)
+ || (updatedCoeff&SPH_ENH_AND_FIR_UPDATE_TYPE_NB_ENH_MODE)!=0
+ || (updatedCoeff&SPH_ENH_AND_FIR_UPDATE_TYPE_WB_ENH_MODE)!=0)
+ spe_setSpeechMode(devModeIndex, modeIndex);
+
+
+ }
+//---------------------- undefined cases --------------------
+ else { // undefined cases.
+ MD_TRC_L1SP_USELESS_SET(scene, 0, 0);
+ }
+
+ //kal_trace( TRACE_INFO, L1SP_SET_ENH_FIR, scene, modeIndex, inFirIndex, outFirIndex, l1sp.spe_usr_mask, l1sp.spe_app_mask);
+ MD_TRC_L1SP_SET_ENH_FIR(scene, modeIndex, inFirIndex, outFirIndex, 0,0);
+
+}
+
+// ----------------------------------------------------------------------------
+// speech parameter loading
+// ----------------------------------------------------------------------------
+extern kal_bool setCommonPara;
+extern uint16 commonPara_0;
+
+void SPE_LoadCommonPara( uint16 c_para[NUM_COMMON_PARAS])
+{
+ uint16 *para;
+ volatile uint16* dsp_ptr;
+ int I;
+ if(c_para)
+ {
+ para = c_para;
+ dsp_ptr = SAL_CommonPar_GetBuf();
+ for(I = SAL_PARAMETERLEN_COMMON; --I >= 0 ; )
+ *dsp_ptr++ = *para++;
+ }
+
+ if(setCommonPara)
+ {
+ dsp_ptr = SAL_CommonPar_GetBuf();
+ *dsp_ptr = commonPara_0;
+ }
+
+}
+
+
+#if defined(_SPE_ENH_MD_PARSE_)
+
+void SPE_LoadSpeechPara( uint16 c_para[NUM_COMMON_PARAS], uint16 m_para[NUM_MODE_PARAS],
+ uint16 m_paraWb[NUM_MODE_PARAS],uint16 m_paraSWb[NUM_MODE_PARAS])
+{
+ uint16 *para;
+ volatile uint16* dsp_ptr;
+ int I;
+
+ if(c_para)
+ {
+ para = c_para;
+ dsp_ptr = SAL_CommonPar_GetBuf();
+ for(I = SAL_PARAMETERLEN_COMMON; --I >= 0 ; )
+ *dsp_ptr++ = *para++;
+ }
+
+ if(setCommonPara)
+ {
+ dsp_ptr = SAL_CommonPar_GetBuf();
+ *dsp_ptr = commonPara_0;
+ }
+
+ if(m_para)
+ {
+ para = m_para;
+ dsp_ptr = SAL_ModePar_GetBuf_NB();
+ for(I = NUM_MODE_PARAS; --I >= 0 ; ) // remind to change SAL_PARAMETERLEN_MODE_NB
+ {
+ *dsp_ptr++ = *para++;
+ }
+ }
+
+ if(m_paraWb)
+ {
+ para = m_paraWb;
+ dsp_ptr = SAL_ModePar_GetBuf_WB();
+ for(I = NUM_MODE_PARAS; --I >= 0 ; )
+ *dsp_ptr++ = *para++;
+ }
+
+ if(m_paraSWb)
+ {
+ para = m_paraSWb;
+ dsp_ptr = SAL_ModePar_GetBuf_SWB();
+ for(I = NUM_MODE_PARAS; --I >= 0 ; )
+ {
+ *dsp_ptr++ = *para++;
+ }
+ }
+
+ Data_Sync_Barrier();
+}
+#endif
+/*
+void SPE_MagiClarityData(short MagiClarityData[32])
+{
+
+ int i;
+ volatile uint16* dsp_ptr;
+ dsp_ptr = SAL_FS_GetFltCoefAddr();
+ for( i = 0; i<32; i++) {
+ *dsp_ptr++ = MagiClarityData[i];
+ }
+
+
+}
+*/
+
+
+#if defined(_SPE_ENH_MD_PARSE_)
+
+void SPE_LoadDmnrCoeffs(kal_int16 dmnr_para[NUM_DMNR_PARAM])
+{
+
+ int i;
+ volatile uint16* dsp_ptr;
+
+ dsp_ptr = SAL_DMNR_GetFltCoefAddr_NB();
+
+
+ for( i = 0; i<SAL_FLTCOEFLEN_DMNR_NB; i++) {
+ *dsp_ptr++ = dmnr_para[i];
+ }
+
+ Data_Sync_Barrier();
+}
+void SPE_LoadDmnrLspCoeffs(kal_int16 dmnr_para[NUM_DMNR_PARAM])
+{
+ int i;
+ volatile uint16* dsp_ptr;
+
+ dsp_ptr = SAL_DMNR_GetFltCoefAddr_LSPK_NB();
+
+
+ for( i = 0; i<SAL_FLTCOEFLEN_DMNR_NB; i++) {
+ *dsp_ptr++ = dmnr_para[i];
+ }
+
+ Data_Sync_Barrier();
+}
+void SPE_LoadWbDmnrCoeffs(kal_int16 wb_dmnr_para[NUM_WB_DMNR_PARAM])
+{
+
+ int i;
+ volatile uint16* dsp_ptr;
+
+ dsp_ptr = SAL_DMNR_GetFltCoefAddr_WB();
+
+ for( i = 0; i<SAL_FLTCOEFLEN_DMNR_WB; i++) {
+ *dsp_ptr++ = wb_dmnr_para[i];
+ }
+
+ Data_Sync_Barrier();
+}
+void SPE_LoadWbDmnrLspCoeffs(kal_int16 wb_dmnr_para[NUM_WB_DMNR_PARAM])
+{
+ int i;
+ volatile uint16* dsp_ptr;
+
+ dsp_ptr = SAL_DMNR_GetFltCoefAddr_LSPK_WB();
+
+ for( i = 0; i<SAL_FLTCOEFLEN_DMNR_WB; i++) {
+ *dsp_ptr++ = wb_dmnr_para[i];
+ }
+
+ Data_Sync_Barrier();
+}
+void SPE_LoadSWbDmnrCoeffs(kal_int16 swb_dmnr_para[NUM_SWB_DMNR_PARAM])
+{
+ int i;
+ volatile uint16* dsp_ptr;
+
+ dsp_ptr = SAL_DMNR_GetFltCoefAddr_SWB();
+
+ for( i = 0; i<SAL_FLTCOEFLEN_DMNR_SWB; i++) {
+ *dsp_ptr++ = swb_dmnr_para[i];
+ }
+ Data_Sync_Barrier();
+}
+void SPE_LoadSWbLspDmnrCoeffs(kal_int16 swb_dmnr_para[NUM_SWB_DMNR_PARAM])
+{
+
+ int i;
+ volatile uint16* dsp_ptr;
+
+ dsp_ptr = SAL_DMNR_GetFltCoefAddr_LSPK_SWB();
+
+ for( i = 0; i<SAL_FLTCOEFLEN_DMNR_SWB; i++) {
+ *dsp_ptr++ = swb_dmnr_para[i];
+ }
+ Data_Sync_Barrier();
+}
+#endif
+
+void L1SP_EnableSpeechEnhancement( bool enable )
+{
+ if(enable)
+ {
+ gSpe.spe_flag = true;
+ SetSpeechEnhancement(true);
+ }
+ else
+ {
+ SetSpeechEnhancement(false);
+ gSpe.spe_flag = false;
+ }
+}
+
+void L1SP_EnhancementCtrlSupport( uint16 value )
+{
+
+ gSpe.spe_usr_enh_ctrl = value;
+ SetSpeechEnhancement(true);
+}
+
+/* ========================================================================= */
+
+#if defined(_SPE_ENH_MD_PARSE_)
+extern const unsigned short Speech_Normal_Mode_Para[16];
+extern const unsigned short WB_Speech_Normal_Mode_Para[16];
+#endif
+// extern const unsigned short Speech_Vol_Para[4];
+
+void SPE_Init( void )
+{
+
+
+#if !defined(_SPE_ENH_MD_PARSE_) // for 95,97
+ uint32 spe_emi_default_par_offset;
+ gSpe.sph_EMI_Info_offset = 0;
+ gSpe.sph_EMI_Info_len = EMI_MD_DEFAULT_LEN; //set EMI default len
+
+#endif
+ gSpe.spe_flag = true;
+ gSpe.isSPE_Enable = false;
+ // gSpe.isReDDL = false;
+ gSpe.sph_SPE_path=SpeechEnh_All;
+
+ gSpe.spe_isFweOn = false;
+
+
+ //default set the DMNR on
+ // gSpe.spe_usr_sub_mask = 0x023E; // default value to turn on , [bit6]HF DMNR is default off. [bit7] DRC2.0 is default off. sync with Sal_Enh_Dynamic_t bit wise definition
+ gSpe.spe_usr_enh_ctrl = 0x0003; // bit0=DMNR,bit1=TDDNC,bit2=magi con
+ gSpe.spe_is_update_enh_ctrl = true;
+ // gSpe.isNotchFitOn = false;
+
+
+#if defined(_SPE_ENH_MD_PARSE_)
+ memset(gSpe.sph_ModePara, 0, TOTAL_NETWORK_NUMBER*NUM_MODE_PARAS*sizeof(uint16));
+ memset(gSpe.sph_InFirCoeff, 0, TOTAL_NETWORK_NUMBER*NUM_FIR_COEFFS*sizeof(int16));
+ memset(gSpe.sph_OutFirCoeff, 0, TOTAL_NETWORK_NUMBER*NUM_FIR_COEFFS*sizeof(int16));
+ memset(gSpe.sph_InIirCoeff, 0, TOTAL_NETWORK_NUMBER*NUM_IIR_COEFFS*sizeof(int16));
+ memset(gSpe.sph_OutIirCoeff, 0, TOTAL_NETWORK_NUMBER*NUM_IIR_COEFFS*sizeof(int16));
+ memset(gSpe.sph_Mic1IirCoeff, 0, TOTAL_NETWORK_NUMBER*NUM_MIC1_IIR_COEFFS*sizeof(int16));
+ memset(gSpe.sph_Mic2IirCoeff, 0, TOTAL_NETWORK_NUMBER*NUM_MIC2_IIR_COEFFS*sizeof(int16));
+
+ memset(gSpe.sph_WbModePara, 0, TOTAL_NETWORK_NUMBER*NUM_MODE_PARAS*sizeof(uint16));
+ memset(gSpe.sph_WbInFirCoeff, 0, TOTAL_NETWORK_NUMBER*NUM_WB_FIR_COEFFS*sizeof(int16));
+ memset(gSpe.sph_WbOutFirCoeff, 0, TOTAL_NETWORK_NUMBER*NUM_WB_FIR_COEFFS*sizeof(int16));
+ memset(gSpe.sph_WbInIirCoeff, 0, TOTAL_NETWORK_NUMBER*NUM_IIR_COEFFS*sizeof(int16));
+ memset(gSpe.sph_WbOutIirCoeff, 0, TOTAL_NETWORK_NUMBER*NUM_IIR_COEFFS*sizeof(int16));
+ memset(gSpe.sph_WbMic1IirCoeff, 0, TOTAL_NETWORK_NUMBER*NUM_MIC1_IIR_COEFFS*sizeof(int16));
+ memset(gSpe.sph_WbMic2IirCoeff, 0, TOTAL_NETWORK_NUMBER*NUM_MIC2_IIR_COEFFS*sizeof(int16));
+ memset(gSpe.sph_SWbModePara, 0, TOTAL_NETWORK_NUMBER*NUM_MODE_PARAS*sizeof(uint16));
+ memset(gSpe.sph_SWbInFirCoeff, 0, TOTAL_NETWORK_NUMBER*NUM_SWB_FIR_COEFFS*sizeof(int16));
+ memset(gSpe.sph_SWbOutFirCoeff, 0, TOTAL_NETWORK_NUMBER*NUM_SWB_FIR_COEFFS*sizeof(int16));
+ memset(gSpe.sph_SWbInIirCoeff, 0, TOTAL_NETWORK_NUMBER*NUM_IIR_COEFFS*sizeof(int16));
+ memset(gSpe.sph_SWbOutIirCoeff, 0, TOTAL_NETWORK_NUMBER*NUM_IIR_COEFFS*sizeof(int16));
+ memset(gSpe.sph_SWbMic1IirCoeff, 0, TOTAL_NETWORK_NUMBER*NUM_MIC1_IIR_COEFFS*sizeof(int16));
+ memset(gSpe.sph_SWbMic2IirCoeff, 0, TOTAL_NETWORK_NUMBER*NUM_MIC2_IIR_COEFFS*sizeof(int16));
+ // SPE_MagiClarityData(Speech_All_Pass_MAG_CLARITY);
+
+ memset(&gSpe.sph_dmnr_para, 0, NUM_DMNR_PARAM*sizeof(uint16));
+ memset(&gSpe.sph_lspk_dmnr_para, 0, NUM_DMNR_PARAM*sizeof(uint16));
+ memset(&gSpe.sph_wb_dmnr_para, 0, NUM_WB_DMNR_PARAM*sizeof(uint16));
+ memset(&gSpe.sph_lspk_wb_dmnr_para, 0, NUM_WB_DMNR_PARAM*sizeof(uint16));
+
+
+ gSpe.isMagiConOn = false;
+ memset(gSpe.sph_magicConParam, 0, NUM_MODE_PARAS*sizeof(uint16));
+ memset(gSpe.sph_magicConWbParam, 0, NUM_MODE_PARAS*sizeof(uint16));
+
+
+ // init the AGC as off in every channal
+ // _write_enh_internalPar_(SPE_INTERNALPAR_INDEX_AGC, 0)
+
+ SPE_LoadSpeechPara((uint16 *)Speech_Common_Para, (uint16 *)Speech_Normal_Mode_Para, (uint16 *)WB_Speech_Normal_Mode_Para,(uint16 *)WB_Speech_Normal_Mode_Para );
+
+ #else //for 95,97
+ L1SP_LoadCommonSpeechPara((uint16 *)Speech_Common_Para);
+ L1Audio_SetDebugInfo((uint16 *)Debug_Info_Para);
+ SAL_ENH_Set3GNetworkType(0);
+ // EMI layout
+ // EMI layout
+ spe_emi_default_par_offset = EMI_NEED_3K_0 + EMI_GUARD_PATTERN + MD_PRIVATE;
+ if(SP_GetSphParamBufAddr() == NULL)
+ {
+ gSpe.EMI_isExist = false;
+ }
+ else
+ {
+ gSpe.EMI_isExist = true;
+ memcpy(((unsigned short *)(SP_GetSphParamBufAddr()))+ spe_emi_default_par_offset, &(Common_Param_Default), sizeof(unsigned short) * 72);
+ memcpy(((unsigned short *)(SP_GetSphParamBufAddr()))+ spe_emi_default_par_offset+72, &(DMNR_Param_Default), sizeof(unsigned short) * 1468);
+ memcpy(((unsigned short *)(SP_GetSphParamBufAddr()))+ spe_emi_default_par_offset+1540, &(MagiClarity_Param_Default), sizeof(unsigned short) * 75);
+ memcpy(((unsigned short *)(SP_GetSphParamBufAddr()))+ spe_emi_default_par_offset+1615, &(Speech_Param_Default), sizeof(unsigned short) * (418+134));
+ memset(((unsigned short *)(SP_GetSphParamBufAddr())), 0, EMI_NEED_3K_0*sizeof(unsigned short)); //3K
+ }
+ #endif
+ if (! spe_enh_mutex)
+ {
+ spe_enh_mutex = kal_create_enh_mutex("spe_enh_mutex");
+ }
+ gSpe.ctm_spe_status = true;
+}
+
+
+/* ========================================================================= */
+/* ========================================================================= */
+/* EC/AEC/EES control Functions */
+/* ========================================================================= */
+#define FLAG_EC_SUPP 1
+#define FLAG_DDL_UL_ENTRY 2
+#define FLAG_DDL_DL_ENTRY 4
+
+#define SPE_IDLE_STATE 0 /* MCU: 0 -> 1 */
+#define SPE_READY_STATE 1 /* DSP: 1 -> 2 */
+#define SPE_WORKING_STATE 2 /* MCU: 2 -> 3 */
+#define SPE_STOP_STATE 3 /* DSP: 3 -> 0 */
+
+
+#define _wait_for_ready_( enh_mod ) \
+{ \
+ uint32 I; \
+ for( I = 0; ; I++ ) { \
+ if( SAL_ENH_IsReady(enh_mod)) \
+ break; \
+ ASSERT_REBOOT( I < 20 ); \
+ kal_sleep_task( AUD_1TICK(2) ); \
+ } \
+}
+
+#define _wait_for_idle_( enh_mod ) \
+{ \
+ uint32 I; \
+ for( I = 0; ; I++ ) { \
+ if( SAL_ENH_IsIdle(enh_mod)) \
+ break; \
+ ASSERT_REBOOT( I < 20 ); \
+ kal_sleep_task( AUD_1TICK(2) ); \
+ } \
+}
+
+
+void SPE_ENHCtrlSwitch(uint16 state)
+{
+
+ SAL_ENH_SetDMNR(((state & SPE_DMNR_SUPPORT)!=0));
+ SAL_ENH_SetTDNC(((state & SPE_TDNC_SUPPORT)!=0));
+ SAL_ENH_SetMagicConference(((state & SPE_MAGI_CON_SUPPORT)!=0));
+}
+
+
+
+void SPE_Clear_DLL_Entry()
+{
+ SAL_ENH_SetMainSwitch(false);
+}
+
+
+void SPE_Enable_DLL_Entry(void)
+{
+ SAL_ENH_SetMainSwitch(true);
+}
+
+
+#if defined(_SPE_ENH_MD_PARSE_)
+void SPE_SetDynamicStatemachine(void)
+{
+
+ SAL_ENH_ParUpdState_SetUpd();
+ MD_TRC_SPE_SETDYNAMIC_SM(0);
+
+
+}
+
+#else //for 95,97
+void SPE_SetDynamicStatemachine(kal_uint32 Offset, kal_uint32 Len)
+{
+
+ SAL_ENH_ParUpdState_SetUpd_Offset(Offset,Len);
+ MD_TRC_SPE_SETDYNAMIC_SM(0);
+}
+#endif
+
+void SPE_WaitSPEDynReady(void)
+{
+
+ uint32 I;
+ for( I = 0; ; I++ ) {
+ if( SAL_ENH_ParUpdPState_IsIdle())
+ break;
+ //ASSERT_REBOOT( I < 20 );
+ if(I>20)
+ {
+ ASSERT(0);
+ }
+ kal_sleep_task(AUD_1TICK(2)); //kal_sleep_task( 2 );
+
+ }
+ MD_TRC_SPE_SETDYNAMIC_SM(1);
+}
+
+
+#if defined(_SPE_ENH_MD_PARSE_)
+void SetDynamicParToDSP(uint32 IDnumber)
+{
+#if defined( MTK_SLEEP_ENABLE )
+ kal_uint16 aud_id = L1SP_GetAudID();
+#endif
+
+ kal_take_enh_mutex (spe_enh_mutex);
+ MD1_DSP_kal_cc_take_spinlock(kal_cc_md1_dsp_spinlock, KAL_INFINITE_WAIT);
+ switch (IDnumber) {
+
+ case Par_GSM_NB_SpeechUnit:
+ {
+ SP_SetSpeechPara(gSpe.sph_ModePara[0]);
+ SPE_LoadSpeechPara(NULL, gSpe.sph_ModePara[0], NULL, NULL);
+ AM_WriteFirCoeffs( gSpe.sph_InFirCoeff[0], gSpe.sph_OutFirCoeff[0] );
+ AM_WriteIirCoeffs( gSpe.sph_InIirCoeff[0], gSpe.sph_OutIirCoeff[0],gSpe.sph_Mic1IirCoeff[0],gSpe.sph_Mic2IirCoeff[0]);
+
+ }
+ break;
+ case Par_GSM_WB_SpeechUnit:
+ {
+ SP_SetWbSpeechPara(gSpe.sph_WbModePara[0]);
+ SPE_LoadSpeechPara(NULL, NULL, gSpe.sph_WbModePara[0], NULL );
+ AM_WriteWbFirCoeffs(gSpe.sph_WbInFirCoeff[0],gSpe.sph_WbOutFirCoeff[0]);
+ AM_WriteWbIirCoeffs(gSpe.sph_WbInIirCoeff[0],gSpe.sph_WbOutIirCoeff[0],gSpe.sph_WbMic1IirCoeff[0],gSpe.sph_WbMic2IirCoeff[0]);
+
+ }
+ break;
+
+#if !defined( __UMTS_TDD128_MODE__ )
+ case Par_WCDMA_NB_SpeechUnit:
+ {
+ SP_SetSpeechPara(gSpe.sph_ModePara[1]);
+ SPE_LoadSpeechPara(NULL, gSpe.sph_ModePara[1], NULL, NULL);
+ AM_WriteFirCoeffs( gSpe.sph_InFirCoeff[1], gSpe.sph_OutFirCoeff[1] );
+ AM_WriteIirCoeffs( gSpe.sph_InIirCoeff[1], gSpe.sph_OutIirCoeff[1],gSpe.sph_Mic1IirCoeff[1],gSpe.sph_Mic2IirCoeff[1]);
+
+ //set speech nb mode flag, fir nb in flag,fir out nb flag
+ }
+ break;
+ case Par_WCDMA_WB_SpeechUnit:
+ {
+ SP_SetWbSpeechPara(gSpe.sph_WbModePara[1]);
+ SPE_LoadSpeechPara(NULL, NULL, gSpe.sph_WbModePara[1], NULL );
+ AM_WriteWbFirCoeffs(gSpe.sph_WbInFirCoeff[1],gSpe.sph_WbOutFirCoeff[1]);
+ AM_WriteWbIirCoeffs(gSpe.sph_WbInIirCoeff[1],gSpe.sph_WbOutIirCoeff[1],gSpe.sph_WbMic1IirCoeff[1],gSpe.sph_WbMic2IirCoeff[1]);
+
+ }
+ break;
+#else //CDMA
+ case Par_CDMA_NB_SpeechUnit:
+ {
+ SP_SetSpeechPara(gSpe.sph_ModePara[2]);
+ SPE_LoadSpeechPara(NULL, gSpe.sph_ModePara[2], NULL, NULL);
+ AM_WriteFirCoeffs( gSpe.sph_InFirCoeff[2], gSpe.sph_OutFirCoeff[2] );
+ AM_WriteIirCoeffs( gSpe.sph_InIirCoeff[2], gSpe.sph_OutIirCoeff[2],gSpe.sph_Mic1IirCoeff[2],gSpe.sph_Mic2IirCoeff[2]);
+ }
+ break;
+ case Par_CDMA_WB_SpeechUnit:
+ {
+ SP_SetWbSpeechPara((kal_uint16*)gSpe.sph_WbModePara[2]);
+ SPE_LoadSpeechPara(NULL, NULL, gSpe.sph_WbModePara[2], NULL );
+ AM_WriteWbFirCoeffs(gSpe.sph_WbInFirCoeff[2],gSpe.sph_WbOutFirCoeff[2]);
+ AM_WriteWbIirCoeffs(gSpe.sph_WbInIirCoeff[2],gSpe.sph_WbOutIirCoeff[2],gSpe.sph_WbMic1IirCoeff[2],gSpe.sph_WbMic2IirCoeff[2]);
+
+ }
+ break;
+
+#endif
+ case Par_VOLTE_NB_SpeechUnit:
+ {
+
+ SP_SetSpeechPara(gSpe.sph_ModePara[3]);
+ SPE_LoadSpeechPara(NULL, gSpe.sph_ModePara[3], NULL, NULL);
+ AM_WriteFirCoeffs( gSpe.sph_InFirCoeff[3], gSpe.sph_OutFirCoeff[3] );
+ AM_WriteIirCoeffs( gSpe.sph_InIirCoeff[3], gSpe.sph_OutIirCoeff[3],gSpe.sph_Mic1IirCoeff[3],gSpe.sph_Mic2IirCoeff[3]);
+
+ }
+ break;
+ case Par_VOLTE_WB_SpeechUnit:
+ {
+
+ SP_SetWbSpeechPara(gSpe.sph_WbModePara[3]);
+ SPE_LoadSpeechPara(NULL, NULL, gSpe.sph_WbModePara[3], NULL);
+ AM_WriteWbFirCoeffs(gSpe.sph_WbInFirCoeff[3],gSpe.sph_WbOutFirCoeff[3]);
+ AM_WriteWbIirCoeffs(gSpe.sph_WbInIirCoeff[3],gSpe.sph_WbOutIirCoeff[3],gSpe.sph_WbMic1IirCoeff[3],gSpe.sph_WbMic2IirCoeff[3]);
+ }
+ break;
+ case Par_VOLTE_SWB_SpeechUnit:
+ {
+ SP_SetSWbSpeechPara(gSpe.sph_SWbModePara[3]);
+ SPE_LoadSpeechPara(NULL, NULL, NULL,gSpe.sph_SWbModePara[3] );
+ AM_WriteSWbFirCoeffs(gSpe.sph_SWbInFirCoeff[3],gSpe.sph_SWbOutFirCoeff[3]);
+ AM_WriteSWbIirCoeffs(gSpe.sph_SWbInIirCoeff[3],gSpe.sph_SWbOutIirCoeff[3],gSpe.sph_SWbMic1IirCoeff[3],gSpe.sph_SWbMic2IirCoeff[3]);
+
+ }
+ break;
+ case Par_C2K_NB_SpeechUnit:
+ {
+
+ SP_SetSpeechPara(gSpe.sph_ModePara[4]);
+ SPE_LoadSpeechPara(NULL, gSpe.sph_ModePara[4], NULL, NULL); // l1sp.sph_v_para no one use it.
+ AM_WriteFirCoeffs( gSpe.sph_InFirCoeff[4], gSpe.sph_OutFirCoeff[4] );
+ AM_WriteIirCoeffs( gSpe.sph_InIirCoeff[4], gSpe.sph_OutIirCoeff[4],gSpe.sph_Mic1IirCoeff[4],gSpe.sph_Mic2IirCoeff[4]);
+
+
+ }
+ break;
+ case Par_C2K_WB_SpeechUnit:
+ {
+
+ SP_SetWbSpeechPara(gSpe.sph_WbModePara[4]);
+ SPE_LoadSpeechPara(NULL, NULL, NULL,gSpe.sph_WbModePara[4] ); // l1sp.sph_v_para no one use it.
+ AM_WriteWbFirCoeffs(gSpe.sph_WbInFirCoeff[4],gSpe.sph_WbOutFirCoeff[4]);
+ AM_WriteWbIirCoeffs(gSpe.sph_WbInIirCoeff[4],gSpe.sph_WbOutIirCoeff[4],gSpe.sph_WbMic1IirCoeff[4],gSpe.sph_WbMic2IirCoeff[4]);
+
+ }
+ break;
+
+
+
+ default:
+ {
+ MD_TRC_SPE_SETDYNAMICPARTOMD_NOT_FIND(IDnumber);
+ break;
+ }
+ }
+ MD1_DSP_kal_cc_give_spinlock(kal_cc_md1_dsp_spinlock);
+ kal_give_enh_mutex (spe_enh_mutex);
+#if defined( MTK_SLEEP_ENABLE )
+ L1SP_FreeAudID(aud_id);
+#endif
+
+}
+void Set2GDynPar(void)
+{
+ SetDynamicParToDSP(Par_GSM_NB_SpeechUnit);
+ SetDynamicParToDSP(Par_GSM_WB_SpeechUnit);
+
+}
+
+void Set3GDynPar(void)
+{
+#if !defined( __UMTS_TDD128_MODE__ )
+
+ SetDynamicParToDSP(Par_WCDMA_NB_SpeechUnit);
+ SetDynamicParToDSP(Par_WCDMA_WB_SpeechUnit);
+#else
+ SetDynamicParToDSP(Par_CDMA_NB_SpeechUnit);
+ SetDynamicParToDSP(Par_CDMA_WB_SpeechUnit);
+
+#endif
+
+}
+
+void Set4GDynPar(void)
+{
+ SetDynamicParToDSP(Par_VOLTE_NB_SpeechUnit);
+ SetDynamicParToDSP(Par_VOLTE_WB_SpeechUnit);
+ SetDynamicParToDSP(Par_VOLTE_SWB_SpeechUnit);
+
+}
+
+void SetC2KDynPar(void)
+{
+ SetDynamicParToDSP(Par_C2K_NB_SpeechUnit);
+ SetDynamicParToDSP(Par_C2K_WB_SpeechUnit);
+
+}
+#endif
+
+
+
+
+void SetSPEnhancePath(uint8 path)
+{
+ if(path == SpeechEnh_All)
+ {
+ gSpe.sph_SPE_path=SpeechEnh_All;
+ }
+ else if(path == SpeechEnh_UL)
+ {
+ gSpe.sph_SPE_path=SpeechEnh_UL;
+ }
+ else if(path == SpeechEnh_DL)
+ {
+ gSpe.sph_SPE_path=SpeechEnh_DL;
+ }
+ else
+ {
+ ASSERT(0);
+ }
+
+ SetSpeechEnhancement(true);
+
+}
+