[Feature][T106_eSDK]update from T106-V2.01.01.02P56U06.AP.15.11_CAP.15.11.01 to T106-V2.01.01.02P56U09.AP.17.02_CAP.17.02.02 -- patch
Only Configure: No
Affected branch: master
Affected module: unknow
Is it affected on both ZXIC and MTK: only ZXIC
Self-test: Yes
Doc Update: No
Change-Id: Ic7183ee7e5a24ab23cd725f8b630385ea268cc1b
diff --git a/patch/15.11_17.02/Uboot/15.11_17.02.diff b/patch/15.11_17.02/Uboot/15.11_17.02.diff
new file mode 100755
index 0000000..601962c
--- /dev/null
+++ b/patch/15.11_17.02/Uboot/15.11_17.02.diff
@@ -0,0 +1,32014 @@
+From c3c1e4d65703a16df8d78c4137a5ccb4bcbaf1ce Mon Sep 17 00:00:00 2001
+From: l.yang <l.yang@mobiletek.cn>
+Date: Thu, 10 Oct 2024 15:12:55 +0800
+Subject: [PATCH] [Feature][T106_eSDK]update from T106-V2.01.01.02P56U06.AP.15.11_CAP.15.11.01 to T106-V2.01.01.02P56U09.AP.17.02_CAP.17.02.02 -- Uboot
+
+Only Configure: No
+Affected branch: master
+Affected module: unknow
+Is it affected on both ZXIC and MTK: only ZXIC
+Self-test: Yes
+Doc Update: No
+
+Change-Id: I0d82c355a0fe633dc3ce2770f3091d496abfa89b
+---
+
+diff --git a/Uboot/boot/common/src/loader/lib/board.c b/Uboot/boot/common/src/loader/lib/board.c
+index b72ce93..3ddc41f 100755
+--- a/Uboot/boot/common/src/loader/lib/board.c
++++ b/Uboot/boot/common/src/loader/lib/board.c
+@@ -146,6 +146,7 @@
+ int32_t add;
+ uint32_t amt_value = 0;
+ int32_t err_flag = 0;
++ int32_t switch_flag = 0;
+ T_BOOT_TARGET bootTarget;
+ T_FLAGS flagsData;
+ T_FLAGS_INFO *fotaFlag;
+@@ -267,44 +268,127 @@
+ if (fotaFlag->boot_fota_flag.system.status == DUALSYSTEM_STATUS_UNBOOTABLE)
+ {
+ printf("dual_system status is unbootable!");
+- goto error;
++ //goto error;
++ if(fotaFlag->boot_fota_flag.system2.status == DUALSYSTEM_STATUS_UNBOOTABLE)
++ {
++ printf("system status is both unbootable,restart system1!");
++ err_flag = 1;
++ /*ĬÈÏflags·ÖÇøÊý¾Ý*/
++ flagsData.magic_start = FLAGS_MAGIC;
++ flagsData.boot_fota_flag.boot_to = DUAL_SYSTEM;
++ flagsData.boot_fota_flag.fota_status = 1;
++ flagsData.boot_fota_flag.system.status = DUALSYSTEM_STATUS_BOOTABLE;
++ flagsData.boot_fota_flag.system2.status = DUALSYSTEM_STATUS_BOOTABLE;
++ flagsData.magic_end = FLAGS_MAGIC;
++ fotaFlag = &flagsData;
++ }
++ else
++ {
++ writel(DUALSYSTEM_STATUS_UNBOOTABLE, BOOT_FLAG_ADDR);
++ printf("restart system2!");
++ switch_flag = 1;
++ }
++
+ }
+- ret = read_uboot_image((uint8_t *)UBOOT_IMAGE, &uboot_entry_point);
+- if( ret != 0)
+- {
+- printf("read uboot1 image error, goto uboot2!");
+- writel(DUALSYSTEM_STATUS_UNBOOTABLE, BOOT_FLAG_ADDR);
+- ret = read_uboot_image((uint8_t *)UBOOT2_IMAGE, &uboot_entry_point);
++
++ if(1 == switch_flag)
++ {
++ ret = read_uboot_image((uint8_t *)UBOOT2_IMAGE, &uboot_entry_point);
+ if( ret != 0)
+ {
+- printf("read uboot2 iamge error!");
+- goto error;
++ printf("read uboot2 image error, goto uboot!");
++ writel(DUALSYSTEM_STATUS_UNBOOTABLE, BOOT_FLAG_ADDR);
++ ret = read_uboot_image((uint8_t *)UBOOT_IMAGE, &uboot_entry_point);
++ if( ret != 0)
++ {
++ printf("read uboot image error!");
++ goto error;
++ }
+ }
++ else
++ printf("goto uboot2!");
+ }
+- else
+- printf("goto uboot!");
++ else
++ {
++ ret = read_uboot_image((uint8_t *)UBOOT_IMAGE, &uboot_entry_point);
++ if( ret != 0)
++ {
++ printf("read uboot1 image error, goto uboot2!");
++ writel(DUALSYSTEM_STATUS_UNBOOTABLE, BOOT_FLAG_ADDR);
++ ret = read_uboot_image((uint8_t *)UBOOT2_IMAGE, &uboot_entry_point);
++ if( ret != 0)
++ {
++ printf("read uboot2 image error!");
++ goto error;
++ }
++ }
++ else
++ printf("goto uboot!");
++ }
++
+ }
+ else if(bootTarget == DUAL_SYSTEM2)
+ {
+ if (fotaFlag->boot_fota_flag.system2.status == DUALSYSTEM_STATUS_UNBOOTABLE)
+ {
+ printf("dual_system2 status is unbootable!");
+- goto error;
+- }
+- ret = read_uboot_image((uint8_t *)UBOOT2_IMAGE, &uboot_entry_point);
+- if( ret != 0)
+- {
+- printf("read uboot2 iamge error, goto uboot!");
+- writel(DUALSYSTEM_STATUS_UNBOOTABLE, BOOT_FLAG_ADDR);
+- ret = read_uboot_image((uint8_t *)UBOOT_IMAGE, &uboot_entry_point);
+- if( ret != 0)
+- {
+- printf("read uboot iamge error!");
+- goto error;
++ //goto error;
++ if(fotaFlag->boot_fota_flag.system.status == DUALSYSTEM_STATUS_UNBOOTABLE)
++ {
++ printf("system status is both unbootable,restart system2!");
++ err_flag = 1;
++ /*ĬÈÏflags·ÖÇøÊý¾Ý*/
++ flagsData.magic_start = FLAGS_MAGIC;
++ flagsData.boot_fota_flag.boot_to = DUAL_SYSTEM2;
++ flagsData.boot_fota_flag.fota_status = 1;
++ flagsData.boot_fota_flag.system.status = DUALSYSTEM_STATUS_BOOTABLE;
++ flagsData.boot_fota_flag.system2.status = DUALSYSTEM_STATUS_BOOTABLE;
++ flagsData.magic_end = FLAGS_MAGIC;
++ fotaFlag = &flagsData;
++ }
++ else
++ {
++ writel(DUALSYSTEM_STATUS_UNBOOTABLE, BOOT_FLAG_ADDR);
++ printf("restart system1!");
++ switch_flag = 1;
+ }
+ }
++
++ if(1 == switch_flag)
++ {
++ ret = read_uboot_image((uint8_t *)UBOOT_IMAGE, &uboot_entry_point);
++ if( ret != 0)
++ {
++ printf("read uboot image error, goto uboot2!");
++ writel(DUALSYSTEM_STATUS_UNBOOTABLE, BOOT_FLAG_ADDR);
++ ret = read_uboot_image((uint8_t *)UBOOT2_IMAGE, &uboot_entry_point);
++ if( ret != 0)
++ {
++ printf("read uboot2 image error!");
++ goto error;
++ }
++ }
++ else
++ printf("goto uboot!");
++ }
+ else
+- printf("goto uboot2!");
++ {
++ ret = read_uboot_image((uint8_t *)UBOOT2_IMAGE, &uboot_entry_point);
++ if( ret != 0)
++ {
++ printf("read uboot2 image error, goto uboot!");
++ writel(DUALSYSTEM_STATUS_UNBOOTABLE, BOOT_FLAG_ADDR);
++ ret = read_uboot_image((uint8_t *)UBOOT_IMAGE, &uboot_entry_point);
++ if( ret != 0)
++ {
++ printf("read uboot image error!");
++ goto error;
++ }
++ }
++ else
++ printf("goto uboot2!");
++ }
++
+ }
+ else
+ {
+diff --git a/Uboot/boot/common/src/uboot/arch/arm/lib/Makefile b/Uboot/boot/common/src/uboot/arch/arm/lib/Makefile
+index b5625a6..c35e97e 100755
+--- a/Uboot/boot/common/src/uboot/arch/arm/lib/Makefile
++++ b/Uboot/boot/common/src/uboot/arch/arm/lib/Makefile
+@@ -49,9 +49,9 @@
+ SOBJS-$(CONFIG_USE_ARCH_MEMCPY) += memcpy.o
+ endif
+ #xf.li@2023.04.14 modify for ZXW-25 start
+-LYNQ_CONFIG_VERSION = "T106-W-V2.01.01.02P56U06.AP.15.05_CAP.15.05"
++LYNQ_CONFIG_VERSION = "T106-V2.01.01.02P56U09.AP.17.02_CAP.17.02.02"
+ CFLAGS += -DLYNQ_VERSION=\"$(LYNQ_CONFIG_VERSION)\"
+-LYNQ_CONFIG_COMMITID = "c33b177c8b861ee957b6c8b0dea003278a3671d6"
++LYNQ_CONFIG_COMMITID = "9aea88bb79cfb2fae9ddab87f8307126d618aec2"
+ CFLAGS += -DLYNQ_COMMITID=\"$(LYNQ_CONFIG_COMMITID)\"
+ #xf.li@2023.04.14 modify for ZXW-25 end
+ SRCS := $(GLSOBJS:.o=.S) $(GLCOBJS:.o=.c) \
+diff --git a/Uboot/boot/common/src/uboot/board/zte/zx297520v3/zx297520v3_mdl_ab.c b/Uboot/boot/common/src/uboot/board/zte/zx297520v3/zx297520v3_mdl_ab.c
+index bf9a900..78f48a4 100755
+--- a/Uboot/boot/common/src/uboot/board/zte/zx297520v3/zx297520v3_mdl_ab.c
++++ b/Uboot/boot/common/src/uboot/board/zte/zx297520v3/zx297520v3_mdl_ab.c
+@@ -635,6 +635,7 @@
+ ret = rewrite_flags();
+ if(ret != 0)
+ return -1;
++ system_reset();
+ return 0;
+ #endif
+ }
+diff --git a/Uboot/boot/common/src/uboot/board/zte/zx297520v3/zx297520v3_vehicle_dc.c b/Uboot/boot/common/src/uboot/board/zte/zx297520v3/zx297520v3_vehicle_dc.c
+index 2f9dde8..d538891 100755
+--- a/Uboot/boot/common/src/uboot/board/zte/zx297520v3/zx297520v3_vehicle_dc.c
++++ b/Uboot/boot/common/src/uboot/board/zte/zx297520v3/zx297520v3_vehicle_dc.c
+@@ -636,6 +636,7 @@
+ ret = rewrite_flags();
+ if(ret != 0)
+ return -1;
++ system_reset();
+ return 0;
+ #endif
+ }
+diff --git a/Uboot/boot/common/src/uboot/board/zte/zx297520v3/zx297520v3_vehicle_dc_ref.c b/Uboot/boot/common/src/uboot/board/zte/zx297520v3/zx297520v3_vehicle_dc_ref.c
+index 7703ad0..8e767d2 100755
+--- a/Uboot/boot/common/src/uboot/board/zte/zx297520v3/zx297520v3_vehicle_dc_ref.c
++++ b/Uboot/boot/common/src/uboot/board/zte/zx297520v3/zx297520v3_vehicle_dc_ref.c
+@@ -638,6 +638,7 @@
+ ret = rewrite_flags();
+ if(ret != 0)
+ return -1;
++ system_reset();
+ return 0;
+ #endif
+ }
+diff --git a/Uboot/boot/common/src/uboot/downloader/cmd_compat_write.c b/Uboot/boot/common/src/uboot/downloader/cmd_compat_write.c
+index 4d5e339..4d6ae9d 100755
+--- a/Uboot/boot/common/src/uboot/downloader/cmd_compat_write.c
++++ b/Uboot/boot/common/src/uboot/downloader/cmd_compat_write.c
+@@ -34,9 +34,10 @@
+ /****************************************************************************
+ * Global Function Prototypes
+ ****************************************************************************/
+-T_IMG_SIZE img_size[IMG_NUM] = {{"uboot",0,0},{"imagefs",0,0},{"rootfs",0,0},{"caprootfs",0,0},{"oem",0,0}};
++//T_IMG_SIZE img_size[IMG_NUM] = {{"uboot",0,0},{"imagefs",0,0},{"rootfs",0,0},{"caprootfs",0,0},{"oem",0,0}};
++T_IMG_SIZE img_size[IMG_NUM_MAX];
++int img_num = 0;
+ int flags_partiton_write = 0;
+-
+ extern int g_iftype;
+ extern partition_table_t * g_partition_table_dl;
+ /*******************************************************************************
+@@ -56,11 +57,14 @@
+ {
+ partition_entry_t *part = NULL;
+ char *par = NULL;
++ char *par_tmp = NULL;
+ char ack[64]={0};
+ unsigned int offset = 0;
+ unsigned int size = 0;
+ unsigned int ret = 0;
+ unsigned int i = 0;
++ unsigned int len = 0;
++ unsigned int found = 0;
+ flags_partiton_write = 1;
+
+ if(argc<4)
+@@ -80,23 +84,55 @@
+ }
+
+ /*record image size*/
+- for(i=0; i<IMG_NUM; i++)
++ len = strlen(par);
++/* Started by AICoder, pid:q5743g3f62rd9291419e086de0327502c5d710ce */
++ par_tmp = (char *)malloc(len + 1);
++ if (par[len - 1] == '2') {
++ strncpy(par_tmp, par, len - 1);
++ par_tmp[len - 1] = '\0';
++ } else {
++ strcpy(par_tmp, par);
++ }
++/* Ended by AICoder, pid:q5743g3f62rd9291419e086de0327502c5d710ce */
++
++/* Started by AICoder, pid:ye4dcm700en8c6e14cdf0ac390813e36dc075765 */
++ for(i=0; i<img_num; i++)
+ {
+- if(memcmp((char *)img_size[i].name , par, strlen(img_size[i].name)) == 0){
+- if(!memcmp(par,"oemdata",7))
+- break;
+- if(strlen(img_size[i].name) == strlen(par))
+- {
+- img_size[i].size_a = size;
+- printf("partition is %s,size_a is 0x%x.\n",par,size);
+- }
+- else
+- {
+- img_size[i].size_b = size;
+- printf("partition is %s,size_b is 0x%x.\n",par,size);
+- }
+- }
++ if(strcmp((char *)img_size[i].name, par_tmp) == 0 && strlen((char *)img_size[i].name) == strlen(par_tmp))
++ {
++ found = 1;
++ if(strcmp(par_tmp,par) == 0)
++ {
++ img_size[i].size_a = size;
++ printf("partition is %s,size_a is 0x%x.\n",par,size);
++ }
++ else
++ {
++ img_size[i].size_b = size;
++ printf("partition is %s,size_b is 0x%x.\n",par,size);
++ }
++
++ break;
++ }
+ }
++ if (!found)
++ {
++ strcpy(img_size[img_num].name,par_tmp);
++ if(strcmp(par_tmp,par) == 0)
++ {
++ img_size[img_num].size_a = size;
++ printf("partition is %s,size_a is 0x%x.\n",par,size);
++ }
++ else
++ {
++ img_size[img_num].size_b = size;
++ printf("partition is %s,size_b is 0x%x.\n",par,size);
++ }
++
++ img_num += 1;
++ }
++ free(par_tmp);
++/* Ended by AICoder, pid:ye4dcm700en8c6e14cdf0ac390813e36dc075765 */
+
+ #if defined (CONFIG_ZX297520V3E_VEHICLE_DC) || defined (CONFIG_ZX297520V3E_VEHICLE_DC_REF)
+ if(g_nor_flag == 1)
+diff --git a/Uboot/boot/common/src/uboot/include/partition_table.h b/Uboot/boot/common/src/uboot/include/partition_table.h
+index 306a64c..febd365 100755
+--- a/Uboot/boot/common/src/uboot/include/partition_table.h
++++ b/Uboot/boot/common/src/uboot/include/partition_table.h
+@@ -211,7 +211,7 @@
+ #define PARTITION_CRC 0x12345678
+ #define PARTITION_SIZE 0X1000 /* ·ÖÇø±íµÄ´óС */
+
+-#define IMG_NUM 5
++#define IMG_NUM 15
+
+ typedef struct partition_entry {
+ unsigned char part_name[16];
+diff --git a/Uboot/boot/prj/zx297520v3/bootrom/dl_off/loader2.bin b/Uboot/boot/prj/zx297520v3/bootrom/dl_off/loader2.bin
+index 343a176..9f59920 100755
+--- a/Uboot/boot/prj/zx297520v3/bootrom/dl_off/loader2.bin
++++ b/Uboot/boot/prj/zx297520v3/bootrom/dl_off/loader2.bin
+Binary files differ
+diff --git a/Uboot/boot/prj/zx297520v3/bootrom/dl_off/z-load b/Uboot/boot/prj/zx297520v3/bootrom/dl_off/z-load
+index 305591e..adb25a4 100755
+--- a/Uboot/boot/prj/zx297520v3/bootrom/dl_off/z-load
++++ b/Uboot/boot/prj/zx297520v3/bootrom/dl_off/z-load
+Binary files differ
+diff --git a/Uboot/boot/prj/zx297520v3/bootrom/dl_off/z-load.map b/Uboot/boot/prj/zx297520v3/bootrom/dl_off/z-load.map
+index 07ae1fd..b4ee310 100755
+--- a/Uboot/boot/prj/zx297520v3/bootrom/dl_off/z-load.map
++++ b/Uboot/boot/prj/zx297520v3/bootrom/dl_off/z-load.map
+@@ -300,20 +300,20 @@
+ .stabstr 0x0000000000000000 0x67
+ .stabstr 0x0000000000000000 0x67 cpu/m0/start.o
+
+-.debug_info 0x0000000000000000 0x34d2
+- .debug_info 0x0000000000000000 0x70b lib/libarm.a(board.o)
+- .debug_info 0x000000000000070b 0x22b lib/libarm.a(string.o)
+- .debug_info 0x0000000000000936 0x329 drivers/libdrivers.a(ddr.o)
+- .debug_info 0x0000000000000c5f 0x2a0 drivers/libdrivers.a(uart.o)
+- .debug_info 0x0000000000000eff 0x6d3 drivers/libdrivers.a(image.o)
+- .debug_info 0x00000000000015d2 0x1c3 drivers/libdrivers.a(efuse.o)
+- .debug_info 0x0000000000001795 0x62d drivers/libdrivers.a(secure_verify.o)
+- .debug_info 0x0000000000001dc2 0xd5f drivers/libdrivers.a(nor.o)
+- .debug_info 0x0000000000002b21 0x1e8 drivers/libdrivers.a(drv_hash.o)
+- .debug_info 0x0000000000002d09 0x3b4 drivers/libdrivers.a(drv_rsa.o)
+- .debug_info 0x00000000000030bd 0x20f drivers/libdrivers.a(flash.o)
+- .debug_info 0x00000000000032cc 0x17b cpu/m0/libm0.a(cpu.o)
+- .debug_info 0x0000000000003447 0x8b cpu/m0/libm0.a(clk.o)
++.debug_info 0x0000000000000000 0x34df
++ .debug_info 0x0000000000000000 0x718 lib/libarm.a(board.o)
++ .debug_info 0x0000000000000718 0x22b lib/libarm.a(string.o)
++ .debug_info 0x0000000000000943 0x329 drivers/libdrivers.a(ddr.o)
++ .debug_info 0x0000000000000c6c 0x2a0 drivers/libdrivers.a(uart.o)
++ .debug_info 0x0000000000000f0c 0x6d3 drivers/libdrivers.a(image.o)
++ .debug_info 0x00000000000015df 0x1c3 drivers/libdrivers.a(efuse.o)
++ .debug_info 0x00000000000017a2 0x62d drivers/libdrivers.a(secure_verify.o)
++ .debug_info 0x0000000000001dcf 0xd5f drivers/libdrivers.a(nor.o)
++ .debug_info 0x0000000000002b2e 0x1e8 drivers/libdrivers.a(drv_hash.o)
++ .debug_info 0x0000000000002d16 0x3b4 drivers/libdrivers.a(drv_rsa.o)
++ .debug_info 0x00000000000030ca 0x20f drivers/libdrivers.a(flash.o)
++ .debug_info 0x00000000000032d9 0x17b cpu/m0/libm0.a(cpu.o)
++ .debug_info 0x0000000000003454 0x8b cpu/m0/libm0.a(clk.o)
+
+ .debug_abbrev 0x0000000000000000 0x12c2
+ .debug_abbrev 0x0000000000000000 0x2b8 lib/libarm.a(board.o)
+@@ -395,32 +395,32 @@
+ .debug_line 0x000000000000131d 0xa7 cpu/m0/libm0.a(cpu.o)
+ .debug_line 0x00000000000013c4 0x61 cpu/m0/libm0.a(clk.o)
+
+-.debug_str 0x0000000000000000 0xebb
+- .debug_str 0x0000000000000000 0x4d5 lib/libarm.a(board.o)
+- 0x554 (松开之前的大小)
+- .debug_str 0x00000000000004d5 0x4c lib/libarm.a(string.o)
++.debug_str 0x0000000000000000 0xec7
++ .debug_str 0x0000000000000000 0x4e1 lib/libarm.a(board.o)
++ 0x560 (松开之前的大小)
++ .debug_str 0x00000000000004e1 0x4c lib/libarm.a(string.o)
+ 0x214 (松开之前的大小)
+- .debug_str 0x0000000000000521 0xa1 drivers/libdrivers.a(ddr.o)
++ .debug_str 0x000000000000052d 0xa1 drivers/libdrivers.a(ddr.o)
+ 0x216 (松开之前的大小)
+- .debug_str 0x00000000000005c2 0x8a drivers/libdrivers.a(uart.o)
++ .debug_str 0x00000000000005ce 0x8a drivers/libdrivers.a(uart.o)
+ 0x253 (松开之前的大小)
+- .debug_str 0x000000000000064c 0x229 drivers/libdrivers.a(image.o)
++ .debug_str 0x0000000000000658 0x229 drivers/libdrivers.a(image.o)
+ 0x4a0 (松开之前的大小)
+- .debug_str 0x0000000000000875 0x7b drivers/libdrivers.a(efuse.o)
++ .debug_str 0x0000000000000881 0x7b drivers/libdrivers.a(efuse.o)
+ 0x255 (松开之前的大小)
+- .debug_str 0x00000000000008f0 0x177 drivers/libdrivers.a(secure_verify.o)
++ .debug_str 0x00000000000008fc 0x177 drivers/libdrivers.a(secure_verify.o)
+ 0x407 (松开之前的大小)
+- .debug_str 0x0000000000000a67 0x2c3 drivers/libdrivers.a(nor.o)
++ .debug_str 0x0000000000000a73 0x2c3 drivers/libdrivers.a(nor.o)
+ 0x5f3 (松开之前的大小)
+- .debug_str 0x0000000000000d2a 0x87 drivers/libdrivers.a(drv_hash.o)
++ .debug_str 0x0000000000000d36 0x87 drivers/libdrivers.a(drv_hash.o)
+ 0x25a (松开之前的大小)
+- .debug_str 0x0000000000000db1 0x79 drivers/libdrivers.a(drv_rsa.o)
++ .debug_str 0x0000000000000dbd 0x79 drivers/libdrivers.a(drv_rsa.o)
+ 0x29c (松开之前的大小)
+- .debug_str 0x0000000000000e2a 0x12 drivers/libdrivers.a(flash.o)
++ .debug_str 0x0000000000000e36 0x12 drivers/libdrivers.a(flash.o)
+ 0x2a8 (松开之前的大小)
+- .debug_str 0x0000000000000e3c 0x79 cpu/m0/libm0.a(cpu.o)
++ .debug_str 0x0000000000000e48 0x79 cpu/m0/libm0.a(cpu.o)
+ 0x1f8 (松开之前的大小)
+- .debug_str 0x0000000000000eb5 0x6 cpu/m0/libm0.a(clk.o)
++ .debug_str 0x0000000000000ec1 0x6 cpu/m0/libm0.a(clk.o)
+ 0x1bd (松开之前的大小)
+
+ .debug_frame 0x0000000000000000 0x6a0
+diff --git a/Uboot/boot/prj/zx297520v3/bootrom/dl_off/z-load2 b/Uboot/boot/prj/zx297520v3/bootrom/dl_off/z-load2
+index 65ef38e..be71fcd 100755
+--- a/Uboot/boot/prj/zx297520v3/bootrom/dl_off/z-load2
++++ b/Uboot/boot/prj/zx297520v3/bootrom/dl_off/z-load2
+Binary files differ
+diff --git a/Uboot/boot/prj/zx297520v3/bootrom/dl_off/z-load2.map b/Uboot/boot/prj/zx297520v3/bootrom/dl_off/z-load2.map
+index 0163e41..c906aa5 100755
+--- a/Uboot/boot/prj/zx297520v3/bootrom/dl_off/z-load2.map
++++ b/Uboot/boot/prj/zx297520v3/bootrom/dl_off/z-load2.map
+@@ -34,7 +34,7 @@
+ 0x0000000000000000 . = 0x0
+ 0x0000000000000000 . = ALIGN (0x4)
+
+-.text 0x0000000020300000 0x4ddc
++.text 0x0000000020300000 0x4ea4
+ cpu/m0/start.o(.text)
+ .text 0x0000000020300000 0x220 cpu/m0/start.o
+ 0x00000000203001a4 _bss_start
+@@ -44,7 +44,7 @@
+ 0x00000000203001b8 _start
+ 0x00000000203001fe run_at
+ *(.text)
+- .text 0x0000000020300220 0x4ec lib/libarm.a(board.o)
++ .text 0x0000000020300220 0x5b4 lib/libarm.a(board.o)
+ 0x0000000020300220 print_info
+ 0x0000000020300230 copy_to_iram1
+ 0x0000000020300250 clear_iram
+@@ -55,201 +55,201 @@
+ 0x0000000020300338 pmu_read
+ 0x0000000020300404 pmu_write
+ 0x00000000203004d0 start_armboot
+- .text 0x000000002030070c 0x80 lib/libarm.a(string.o)
+- 0x000000002030070c strlen
+- 0x000000002030071c memset
+- 0x000000002030075e memcmp
+- 0x000000002030077a memcpy
+- .text 0x000000002030078c 0x82c drivers/libdrivers.a(ddr.o)
+- 0x000000002030078c nsdelay
+- 0x00000000203007a6 ddr_clk_init
+- 0x00000000203007bc ddr_phy_init
+- 0x00000000203008b8 ddr_ctrl_init
+- 0x0000000020300c74 ddr_prio_init
+- 0x0000000020300d98 ddr_init
+- .text 0x0000000020300fb8 0x138 drivers/libdrivers.a(uart.o)
+- 0x0000000020300fb8 uart_init
+- 0x0000000020301038 uart_putc
+- 0x0000000020301060 uart_puts
+- 0x0000000020301074 uart_getc
+- 0x0000000020301090 uart_tstc
+- 0x00000000203010a0 UART_Read
+- 0x00000000203010bc UART_Write
+- 0x00000000203010d8 UART_Check_Sync
+- .text 0x00000000203010f0 0x338 drivers/libdrivers.a(image.o)
+- 0x00000000203010f4 page_align
+- 0x000000002030110c find_partition_para
+- 0x000000002030113c read_image_part_offset
+- 0x0000000020301190 read_flags_image
+- 0x0000000020301278 read_uboot_image
+- 0x0000000020301358 nand_read_m0
+- 0x00000000203013c4 read_zloader_image
+- .text 0x0000000020301428 0x2b0 drivers/libdrivers.a(secure_verify.o)
+- 0x0000000020301446 BIG2SMALL
+- 0x0000000020301476 bin2hex
+- 0x00000000203014c0 secure_verify_zloader
+- 0x00000000203015b4 SecureVerify
+- .text 0x00000000203016d8 0x648 drivers/libdrivers.a(spifc_loader2.o)
+- 0x00000000203017cc zDrvGpio_SetFunc
+- 0x0000000020301804 zDrvGpio_SetDirection
+- 0x0000000020301854 zDrvGpio_SetOutputValue
+- 0x0000000020301890 spi_nand_cs
+- 0x00000000203018cc spifc_clear_fifo
+- 0x00000000203018e0 spifc_clear_int
+- 0x0000000020301a3c spifc_read_oob
+- 0x0000000020301a80 spifc_read_page_raw
+- 0x0000000020301abc spifc_read_page
+- 0x0000000020301b38 spifc_read
+- 0x0000000020301b7c read_data
+- 0x0000000020301bd0 read_id
+- 0x0000000020301c54 spifc_init
+- 0x0000000020301cd8 zloader_flash_init
+- .text 0x0000000020301d20 0x1c0 drivers/libdrivers.a(bbt.o)
+- 0x0000000020301d80 nand_creat_ram_bbt
+- 0x0000000020301dc4 nand_search_bbt
+- 0x0000000020301e50 nand_creat_bbt
+- 0x0000000020301ecc nand_block_isbad
+- .text 0x0000000020301ee0 0x2688 drivers/libdrivers.a(sha256.o)
+- 0x0000000020304400 sha256_starts
+- 0x0000000020304448 sha256_update
+- 0x0000000020304454 sha256_finish
+- 0x0000000020304540 sha256_csum_wd
+- .text 0x0000000020304568 0x424 drivers/libdrivers.a(nor.o)
+- 0x0000000020304568 spifc_enable
+- 0x0000000020304598 spifc_disable
+- 0x00000000203045bc spifc_setup_cmd
+- 0x0000000020304640 spifc_wait_cmd_end
+- 0x000000002030466c spifc_read_fifo
+- 0x00000000203046a8 spifc_start
+- 0x00000000203046b8 cmd_seek
+- 0x00000000203046d8 nor_read_reg
+- 0x0000000020304738 nor_read_id
+- 0x00000000203047a0 spi_nor_read
+- 0x00000000203047fc nor_read
+- 0x0000000020304850 spi_nor_read_security_register
+- 0x00000000203048ac nor_read_security_register
+- 0x0000000020304900 nor_init
+- 0x0000000020304950 board_flash_init
+- .text 0x000000002030498c 0xa4 drivers/libdrivers.a(drv_hash.o)
+- 0x000000002030498c Hash_Calculate
+- .text 0x0000000020304a30 0x174 drivers/libdrivers.a(drv_rsa.o)
+- 0x0000000020304a4a Rsa_Calculate
+- .text 0x0000000020304ba4 0x28 drivers/libdrivers.a(flash.o)
+- 0x0000000020304ba4 get_boot_mode
+- .text 0x0000000020304bcc 0x1bc drivers/libdrivers.a(efuse.o)
+- 0x0000000020304bcc efuse_init
+- 0x0000000020304bf0 get_ddr_flag
+- 0x0000000020304d10 get_secure_verify_status
+- 0x0000000020304d54 get_otp_secure_verify_status
+- .text 0x0000000020304d88 0x54 cpu/m0/libm0.a(cpu.o)
+- 0x0000000020304d88 timer_init
+- 0x0000000020304da0 usdelay
++ .text 0x00000000203007d4 0x80 lib/libarm.a(string.o)
++ 0x00000000203007d4 strlen
++ 0x00000000203007e4 memset
++ 0x0000000020300826 memcmp
++ 0x0000000020300842 memcpy
++ .text 0x0000000020300854 0x82c drivers/libdrivers.a(ddr.o)
++ 0x0000000020300854 nsdelay
++ 0x000000002030086e ddr_clk_init
++ 0x0000000020300884 ddr_phy_init
++ 0x0000000020300980 ddr_ctrl_init
++ 0x0000000020300d3c ddr_prio_init
++ 0x0000000020300e60 ddr_init
++ .text 0x0000000020301080 0x138 drivers/libdrivers.a(uart.o)
++ 0x0000000020301080 uart_init
++ 0x0000000020301100 uart_putc
++ 0x0000000020301128 uart_puts
++ 0x000000002030113c uart_getc
++ 0x0000000020301158 uart_tstc
++ 0x0000000020301168 UART_Read
++ 0x0000000020301184 UART_Write
++ 0x00000000203011a0 UART_Check_Sync
++ .text 0x00000000203011b8 0x338 drivers/libdrivers.a(image.o)
++ 0x00000000203011bc page_align
++ 0x00000000203011d4 find_partition_para
++ 0x0000000020301204 read_image_part_offset
++ 0x0000000020301258 read_flags_image
++ 0x0000000020301340 read_uboot_image
++ 0x0000000020301420 nand_read_m0
++ 0x000000002030148c read_zloader_image
++ .text 0x00000000203014f0 0x2b0 drivers/libdrivers.a(secure_verify.o)
++ 0x000000002030150e BIG2SMALL
++ 0x000000002030153e bin2hex
++ 0x0000000020301588 secure_verify_zloader
++ 0x000000002030167c SecureVerify
++ .text 0x00000000203017a0 0x648 drivers/libdrivers.a(spifc_loader2.o)
++ 0x0000000020301894 zDrvGpio_SetFunc
++ 0x00000000203018cc zDrvGpio_SetDirection
++ 0x000000002030191c zDrvGpio_SetOutputValue
++ 0x0000000020301958 spi_nand_cs
++ 0x0000000020301994 spifc_clear_fifo
++ 0x00000000203019a8 spifc_clear_int
++ 0x0000000020301b04 spifc_read_oob
++ 0x0000000020301b48 spifc_read_page_raw
++ 0x0000000020301b84 spifc_read_page
++ 0x0000000020301c00 spifc_read
++ 0x0000000020301c44 read_data
++ 0x0000000020301c98 read_id
++ 0x0000000020301d1c spifc_init
++ 0x0000000020301da0 zloader_flash_init
++ .text 0x0000000020301de8 0x1c0 drivers/libdrivers.a(bbt.o)
++ 0x0000000020301e48 nand_creat_ram_bbt
++ 0x0000000020301e8c nand_search_bbt
++ 0x0000000020301f18 nand_creat_bbt
++ 0x0000000020301f94 nand_block_isbad
++ .text 0x0000000020301fa8 0x2688 drivers/libdrivers.a(sha256.o)
++ 0x00000000203044c8 sha256_starts
++ 0x0000000020304510 sha256_update
++ 0x000000002030451c sha256_finish
++ 0x0000000020304608 sha256_csum_wd
++ .text 0x0000000020304630 0x424 drivers/libdrivers.a(nor.o)
++ 0x0000000020304630 spifc_enable
++ 0x0000000020304660 spifc_disable
++ 0x0000000020304684 spifc_setup_cmd
++ 0x0000000020304708 spifc_wait_cmd_end
++ 0x0000000020304734 spifc_read_fifo
++ 0x0000000020304770 spifc_start
++ 0x0000000020304780 cmd_seek
++ 0x00000000203047a0 nor_read_reg
++ 0x0000000020304800 nor_read_id
++ 0x0000000020304868 spi_nor_read
++ 0x00000000203048c4 nor_read
++ 0x0000000020304918 spi_nor_read_security_register
++ 0x0000000020304974 nor_read_security_register
++ 0x00000000203049c8 nor_init
++ 0x0000000020304a18 board_flash_init
++ .text 0x0000000020304a54 0xa4 drivers/libdrivers.a(drv_hash.o)
++ 0x0000000020304a54 Hash_Calculate
++ .text 0x0000000020304af8 0x174 drivers/libdrivers.a(drv_rsa.o)
++ 0x0000000020304b12 Rsa_Calculate
++ .text 0x0000000020304c6c 0x28 drivers/libdrivers.a(flash.o)
++ 0x0000000020304c6c get_boot_mode
++ .text 0x0000000020304c94 0x1bc drivers/libdrivers.a(efuse.o)
++ 0x0000000020304c94 efuse_init
++ 0x0000000020304cb8 get_ddr_flag
++ 0x0000000020304dd8 get_secure_verify_status
++ 0x0000000020304e1c get_otp_secure_verify_status
++ .text 0x0000000020304e50 0x54 cpu/m0/libm0.a(cpu.o)
++ 0x0000000020304e50 timer_init
++ 0x0000000020304e68 usdelay
+
+-.glue_7 0x0000000020304ddc 0x0
++.glue_7 0x0000000020304ea4 0x0
+ .glue_7 0x0000000000000000 0x0 linker stubs
+
+-.glue_7t 0x0000000020304ddc 0x0
++.glue_7t 0x0000000020304ea4 0x0
+ .glue_7t 0x0000000000000000 0x0 linker stubs
+
+-.vfp11_veneer 0x0000000020304ddc 0x0
++.vfp11_veneer 0x0000000020304ea4 0x0
+ .vfp11_veneer 0x0000000000000000 0x0 linker stubs
+
+-.v4_bx 0x0000000020304ddc 0x0
++.v4_bx 0x0000000020304ea4 0x0
+ .v4_bx 0x0000000000000000 0x0 linker stubs
+
+-.iplt 0x0000000020304ddc 0x0
++.iplt 0x0000000020304ea4 0x0
+ .iplt 0x0000000000000000 0x0 cpu/m0/start.o
+- 0x0000000020304ddc . = ALIGN (0x4)
++ 0x0000000020304ea4 . = ALIGN (0x4)
+
+-.rodata 0x0000000020304ddc 0x3f0
++.rodata 0x0000000020304ea4 0x3f0
+ *(.rodata)
+- .rodata 0x0000000020304ddc 0x270 drivers/libdrivers.a(spifc_loader2.o)
+- .rodata 0x000000002030504c 0x13 drivers/libdrivers.a(sha256.o)
+- 0x000000002030504c sha256_der_prefix
+- *fill* 0x000000002030505f 0x1
+- .rodata 0x0000000020305060 0x16c drivers/libdrivers.a(nor.o)
++ .rodata 0x0000000020304ea4 0x270 drivers/libdrivers.a(spifc_loader2.o)
++ .rodata 0x0000000020305114 0x13 drivers/libdrivers.a(sha256.o)
++ 0x0000000020305114 sha256_der_prefix
++ *fill* 0x0000000020305127 0x1
++ .rodata 0x0000000020305128 0x16c drivers/libdrivers.a(nor.o)
+
+-.rodata.str1.1 0x00000000203051cc 0x48d
++.rodata.str1.1 0x0000000020305294 0x516
+ .rodata.str1.1
+- 0x00000000203051cc 0x18a lib/libarm.a(board.o)
+- 0x1a3 (松开之前的大小)
++ 0x0000000020305294 0x213 lib/libarm.a(board.o)
++ 0x24e (松开之前的大小)
+ .rodata.str1.1
+- 0x0000000020305356 0xef drivers/libdrivers.a(image.o)
++ 0x00000000203054a7 0xef drivers/libdrivers.a(image.o)
+ 0x115 (松开之前的大小)
+ .rodata.str1.1
+- 0x0000000020305445 0x5b drivers/libdrivers.a(secure_verify.o)
++ 0x0000000020305596 0x5b drivers/libdrivers.a(secure_verify.o)
+ 0x5d (松开之前的大小)
+ .rodata.str1.1
+- 0x00000000203054a0 0x3d drivers/libdrivers.a(spifc_loader2.o)
++ 0x00000000203055f1 0x3d drivers/libdrivers.a(spifc_loader2.o)
+ 0x4a (松开之前的大小)
+ .rodata.str1.1
+- 0x00000000203054dd 0x9 drivers/libdrivers.a(bbt.o)
++ 0x000000002030562e 0x9 drivers/libdrivers.a(bbt.o)
+ .rodata.str1.1
+- 0x00000000203054e6 0x15c drivers/libdrivers.a(nor.o)
++ 0x0000000020305637 0x15c drivers/libdrivers.a(nor.o)
+ .rodata.str1.1
+- 0x0000000020305642 0x17 drivers/libdrivers.a(efuse.o)
++ 0x0000000020305793 0x17 drivers/libdrivers.a(efuse.o)
+
+-.rel.dyn 0x000000002030565c 0x0
++.rel.dyn 0x00000000203057ac 0x0
+ .rel.iplt 0x0000000000000000 0x0 cpu/m0/start.o
+- 0x000000002030565c . = ALIGN (0x4)
++ 0x00000000203057ac . = ALIGN (0x4)
+
+-.data 0x000000002030565c 0xd0
++.data 0x00000000203057ac 0xd0
+ *(.data)
+- .data 0x000000002030565c 0x0 cpu/m0/start.o
+- .data 0x000000002030565c 0x0 lib/libarm.a(board.o)
+- .data 0x000000002030565c 0x0 lib/libarm.a(string.o)
+- .data 0x000000002030565c 0x0 drivers/libdrivers.a(ddr.o)
+- .data 0x000000002030565c 0x0 drivers/libdrivers.a(uart.o)
+- .data 0x000000002030565c 0x0 drivers/libdrivers.a(image.o)
+- .data 0x000000002030565c 0x0 drivers/libdrivers.a(secure_verify.o)
+- .data 0x000000002030565c 0x0 drivers/libdrivers.a(spifc_loader2.o)
+- .data 0x000000002030565c 0x40 drivers/libdrivers.a(bbt.o)
+- .data 0x000000002030569c 0x40 drivers/libdrivers.a(sha256.o)
+- .data 0x00000000203056dc 0x50 drivers/libdrivers.a(nor.o)
+- 0x00000000203056dc nor_cmd_table
+- .data 0x000000002030572c 0x0 drivers/libdrivers.a(drv_hash.o)
+- .data 0x000000002030572c 0x0 drivers/libdrivers.a(drv_rsa.o)
+- .data 0x000000002030572c 0x0 drivers/libdrivers.a(flash.o)
+- .data 0x000000002030572c 0x0 drivers/libdrivers.a(efuse.o)
+- .data 0x000000002030572c 0x0 cpu/m0/libm0.a(cpu.o)
++ .data 0x00000000203057ac 0x0 cpu/m0/start.o
++ .data 0x00000000203057ac 0x0 lib/libarm.a(board.o)
++ .data 0x00000000203057ac 0x0 lib/libarm.a(string.o)
++ .data 0x00000000203057ac 0x0 drivers/libdrivers.a(ddr.o)
++ .data 0x00000000203057ac 0x0 drivers/libdrivers.a(uart.o)
++ .data 0x00000000203057ac 0x0 drivers/libdrivers.a(image.o)
++ .data 0x00000000203057ac 0x0 drivers/libdrivers.a(secure_verify.o)
++ .data 0x00000000203057ac 0x0 drivers/libdrivers.a(spifc_loader2.o)
++ .data 0x00000000203057ac 0x40 drivers/libdrivers.a(bbt.o)
++ .data 0x00000000203057ec 0x40 drivers/libdrivers.a(sha256.o)
++ .data 0x000000002030582c 0x50 drivers/libdrivers.a(nor.o)
++ 0x000000002030582c nor_cmd_table
++ .data 0x000000002030587c 0x0 drivers/libdrivers.a(drv_hash.o)
++ .data 0x000000002030587c 0x0 drivers/libdrivers.a(drv_rsa.o)
++ .data 0x000000002030587c 0x0 drivers/libdrivers.a(flash.o)
++ .data 0x000000002030587c 0x0 drivers/libdrivers.a(efuse.o)
++ .data 0x000000002030587c 0x0 cpu/m0/libm0.a(cpu.o)
+
+-.igot.plt 0x000000002030572c 0x0
++.igot.plt 0x000000002030587c 0x0
+ .igot.plt 0x0000000000000000 0x0 cpu/m0/start.o
+- 0x000000002030572c . = ALIGN (0x4)
++ 0x000000002030587c . = ALIGN (0x4)
+
+ .got
+ *(.got)
+- 0x000000002030572c . = ALIGN (0x4)
+- 0x000000002030572c __bss_start = .
++ 0x000000002030587c . = ALIGN (0x4)
++ 0x000000002030587c __bss_start = .
+
+-.bss 0x000000002030572c 0x1e8
++.bss 0x000000002030587c 0x1e8
+ *(.bss)
+- .bss 0x000000002030572c 0x0 cpu/m0/start.o
+- .bss 0x000000002030572c 0x4 lib/libarm.a(board.o)
+- 0x000000002030572c zloader_entry_point
+- .bss 0x0000000020305730 0x0 lib/libarm.a(string.o)
+- .bss 0x0000000020305730 0x0 drivers/libdrivers.a(ddr.o)
+- .bss 0x0000000020305730 0x0 drivers/libdrivers.a(uart.o)
+- .bss 0x0000000020305730 0x0 drivers/libdrivers.a(image.o)
+- .bss 0x0000000020305730 0x104 drivers/libdrivers.a(secure_verify.o)
+- 0x0000000020305730 result
+- .bss 0x0000000020305834 0x4 drivers/libdrivers.a(spifc_loader2.o)
+- .bss 0x0000000020305838 0x80 drivers/libdrivers.a(bbt.o)
+- .bss 0x00000000203058b8 0x0 drivers/libdrivers.a(sha256.o)
+- .bss 0x00000000203058b8 0x28 drivers/libdrivers.a(nor.o)
+- 0x00000000203058b8 spi_nor_flash
+- 0x00000000203058bc otp_data
+- .bss 0x00000000203058e0 0x0 drivers/libdrivers.a(drv_hash.o)
+- .bss 0x00000000203058e0 0x0 drivers/libdrivers.a(drv_rsa.o)
+- .bss 0x00000000203058e0 0x24 drivers/libdrivers.a(flash.o)
+- 0x00000000203058e0 flash
+- .bss 0x0000000020305904 0x0 drivers/libdrivers.a(efuse.o)
+- .bss 0x0000000020305904 0x10 cpu/m0/libm0.a(cpu.o)
+- 0x0000000020305904 g_tick
+- 0x0000000020305914 __bss_end = .
+- 0x0000000020305914 . = ALIGN (0x4)
++ .bss 0x000000002030587c 0x0 cpu/m0/start.o
++ .bss 0x000000002030587c 0x4 lib/libarm.a(board.o)
++ 0x000000002030587c zloader_entry_point
++ .bss 0x0000000020305880 0x0 lib/libarm.a(string.o)
++ .bss 0x0000000020305880 0x0 drivers/libdrivers.a(ddr.o)
++ .bss 0x0000000020305880 0x0 drivers/libdrivers.a(uart.o)
++ .bss 0x0000000020305880 0x0 drivers/libdrivers.a(image.o)
++ .bss 0x0000000020305880 0x104 drivers/libdrivers.a(secure_verify.o)
++ 0x0000000020305880 result
++ .bss 0x0000000020305984 0x4 drivers/libdrivers.a(spifc_loader2.o)
++ .bss 0x0000000020305988 0x80 drivers/libdrivers.a(bbt.o)
++ .bss 0x0000000020305a08 0x0 drivers/libdrivers.a(sha256.o)
++ .bss 0x0000000020305a08 0x28 drivers/libdrivers.a(nor.o)
++ 0x0000000020305a08 spi_nor_flash
++ 0x0000000020305a0c otp_data
++ .bss 0x0000000020305a30 0x0 drivers/libdrivers.a(drv_hash.o)
++ .bss 0x0000000020305a30 0x0 drivers/libdrivers.a(drv_rsa.o)
++ .bss 0x0000000020305a30 0x24 drivers/libdrivers.a(flash.o)
++ 0x0000000020305a30 flash
++ .bss 0x0000000020305a54 0x0 drivers/libdrivers.a(efuse.o)
++ .bss 0x0000000020305a54 0x10 cpu/m0/libm0.a(cpu.o)
++ 0x0000000020305a54 g_tick
++ 0x0000000020305a64 __bss_end = .
++ 0x0000000020305a64 . = ALIGN (0x4)
+
+-.para 0x0000000082000000 0x0 加载地址 0x0000000020305914
++.para 0x0000000082000000 0x0 加载地址 0x0000000020305a64
+ 0x0000000082000000 __para_start = .
+ *(.para)
+ 0x0000000082000000 __para_end = .
+@@ -356,22 +356,22 @@
+ .stabstr 0x0000000000000000 0x67
+ .stabstr 0x0000000000000000 0x67 cpu/m0/start.o
+
+-.debug_info 0x0000000000000000 0x65ab
+- .debug_info 0x0000000000000000 0x9a2 lib/libarm.a(board.o)
+- .debug_info 0x00000000000009a2 0x22b lib/libarm.a(string.o)
+- .debug_info 0x0000000000000bcd 0x329 drivers/libdrivers.a(ddr.o)
+- .debug_info 0x0000000000000ef6 0x2a0 drivers/libdrivers.a(uart.o)
+- .debug_info 0x0000000000001196 0xdd6 drivers/libdrivers.a(image.o)
+- .debug_info 0x0000000000001f6c 0xb01 drivers/libdrivers.a(secure_verify.o)
+- .debug_info 0x0000000000002a6d 0x1661 drivers/libdrivers.a(spifc_loader2.o)
+- .debug_info 0x00000000000040ce 0x70f drivers/libdrivers.a(bbt.o)
+- .debug_info 0x00000000000047dd 0x586 drivers/libdrivers.a(sha256.o)
+- .debug_info 0x0000000000004d63 0xd5f drivers/libdrivers.a(nor.o)
+- .debug_info 0x0000000000005ac2 0x1e8 drivers/libdrivers.a(drv_hash.o)
+- .debug_info 0x0000000000005caa 0x3b4 drivers/libdrivers.a(drv_rsa.o)
+- .debug_info 0x000000000000605e 0x20f drivers/libdrivers.a(flash.o)
+- .debug_info 0x000000000000626d 0x1c3 drivers/libdrivers.a(efuse.o)
+- .debug_info 0x0000000000006430 0x17b cpu/m0/libm0.a(cpu.o)
++.debug_info 0x0000000000000000 0x66af
++ .debug_info 0x0000000000000000 0xaa6 lib/libarm.a(board.o)
++ .debug_info 0x0000000000000aa6 0x22b lib/libarm.a(string.o)
++ .debug_info 0x0000000000000cd1 0x329 drivers/libdrivers.a(ddr.o)
++ .debug_info 0x0000000000000ffa 0x2a0 drivers/libdrivers.a(uart.o)
++ .debug_info 0x000000000000129a 0xdd6 drivers/libdrivers.a(image.o)
++ .debug_info 0x0000000000002070 0xb01 drivers/libdrivers.a(secure_verify.o)
++ .debug_info 0x0000000000002b71 0x1661 drivers/libdrivers.a(spifc_loader2.o)
++ .debug_info 0x00000000000041d2 0x70f drivers/libdrivers.a(bbt.o)
++ .debug_info 0x00000000000048e1 0x586 drivers/libdrivers.a(sha256.o)
++ .debug_info 0x0000000000004e67 0xd5f drivers/libdrivers.a(nor.o)
++ .debug_info 0x0000000000005bc6 0x1e8 drivers/libdrivers.a(drv_hash.o)
++ .debug_info 0x0000000000005dae 0x3b4 drivers/libdrivers.a(drv_rsa.o)
++ .debug_info 0x0000000000006162 0x20f drivers/libdrivers.a(flash.o)
++ .debug_info 0x0000000000006371 0x1c3 drivers/libdrivers.a(efuse.o)
++ .debug_info 0x0000000000006534 0x17b cpu/m0/libm0.a(cpu.o)
+
+ .debug_abbrev 0x0000000000000000 0x1c94
+ .debug_abbrev 0x0000000000000000 0x304 lib/libarm.a(board.o)
+@@ -390,22 +390,22 @@
+ .debug_abbrev 0x0000000000001aaf 0x11d drivers/libdrivers.a(efuse.o)
+ .debug_abbrev 0x0000000000001bcc 0xc8 cpu/m0/libm0.a(cpu.o)
+
+-.debug_loc 0x0000000000000000 0x9737
+- .debug_loc 0x0000000000000000 0x345 lib/libarm.a(board.o)
+- .debug_loc 0x0000000000000345 0x29d lib/libarm.a(string.o)
+- .debug_loc 0x00000000000005e2 0x2d8 drivers/libdrivers.a(ddr.o)
+- .debug_loc 0x00000000000008ba 0x228 drivers/libdrivers.a(uart.o)
+- .debug_loc 0x0000000000000ae2 0x6a2 drivers/libdrivers.a(image.o)
+- .debug_loc 0x0000000000001184 0x790 drivers/libdrivers.a(secure_verify.o)
+- .debug_loc 0x0000000000001914 0xef4 drivers/libdrivers.a(spifc_loader2.o)
+- .debug_loc 0x0000000000002808 0x282 drivers/libdrivers.a(bbt.o)
+- .debug_loc 0x0000000000002a8a 0x5f3f drivers/libdrivers.a(sha256.o)
+- .debug_loc 0x00000000000089c9 0x80a drivers/libdrivers.a(nor.o)
+- .debug_loc 0x00000000000091d3 0x1b8 drivers/libdrivers.a(drv_hash.o)
+- .debug_loc 0x000000000000938b 0x238 drivers/libdrivers.a(drv_rsa.o)
+- .debug_loc 0x00000000000095c3 0x1f drivers/libdrivers.a(flash.o)
+- .debug_loc 0x00000000000095e2 0xab drivers/libdrivers.a(efuse.o)
+- .debug_loc 0x000000000000968d 0xaa cpu/m0/libm0.a(cpu.o)
++.debug_loc 0x0000000000000000 0x9807
++ .debug_loc 0x0000000000000000 0x415 lib/libarm.a(board.o)
++ .debug_loc 0x0000000000000415 0x29d lib/libarm.a(string.o)
++ .debug_loc 0x00000000000006b2 0x2d8 drivers/libdrivers.a(ddr.o)
++ .debug_loc 0x000000000000098a 0x228 drivers/libdrivers.a(uart.o)
++ .debug_loc 0x0000000000000bb2 0x6a2 drivers/libdrivers.a(image.o)
++ .debug_loc 0x0000000000001254 0x790 drivers/libdrivers.a(secure_verify.o)
++ .debug_loc 0x00000000000019e4 0xef4 drivers/libdrivers.a(spifc_loader2.o)
++ .debug_loc 0x00000000000028d8 0x282 drivers/libdrivers.a(bbt.o)
++ .debug_loc 0x0000000000002b5a 0x5f3f drivers/libdrivers.a(sha256.o)
++ .debug_loc 0x0000000000008a99 0x80a drivers/libdrivers.a(nor.o)
++ .debug_loc 0x00000000000092a3 0x1b8 drivers/libdrivers.a(drv_hash.o)
++ .debug_loc 0x000000000000945b 0x238 drivers/libdrivers.a(drv_rsa.o)
++ .debug_loc 0x0000000000009693 0x1f drivers/libdrivers.a(flash.o)
++ .debug_loc 0x00000000000096b2 0xab drivers/libdrivers.a(efuse.o)
++ .debug_loc 0x000000000000975d 0xaa cpu/m0/libm0.a(cpu.o)
+
+ .debug_aranges 0x0000000000000000 0x1e0
+ .debug_aranges
+@@ -449,53 +449,53 @@
+ .debug_ranges 0x00000000000001d8 0x28 drivers/libdrivers.a(drv_hash.o)
+ .debug_ranges 0x0000000000000200 0x38 drivers/libdrivers.a(drv_rsa.o)
+
+-.debug_line 0x0000000000000000 0x203f
+- .debug_line 0x0000000000000000 0x3a4 lib/libarm.a(board.o)
+- .debug_line 0x00000000000003a4 0x152 lib/libarm.a(string.o)
+- .debug_line 0x00000000000004f6 0x299 drivers/libdrivers.a(ddr.o)
+- .debug_line 0x000000000000078f 0x112 drivers/libdrivers.a(uart.o)
+- .debug_line 0x00000000000008a1 0x3b8 drivers/libdrivers.a(image.o)
+- .debug_line 0x0000000000000c59 0x38e drivers/libdrivers.a(secure_verify.o)
+- .debug_line 0x0000000000000fe7 0x442 drivers/libdrivers.a(spifc_loader2.o)
+- .debug_line 0x0000000000001429 0x251 drivers/libdrivers.a(bbt.o)
+- .debug_line 0x000000000000167a 0x2bb drivers/libdrivers.a(sha256.o)
+- .debug_line 0x0000000000001935 0x2a2 drivers/libdrivers.a(nor.o)
+- .debug_line 0x0000000000001bd7 0x88 drivers/libdrivers.a(drv_hash.o)
+- .debug_line 0x0000000000001c5f 0x117 drivers/libdrivers.a(drv_rsa.o)
+- .debug_line 0x0000000000001d76 0x10a drivers/libdrivers.a(flash.o)
+- .debug_line 0x0000000000001e80 0x118 drivers/libdrivers.a(efuse.o)
+- .debug_line 0x0000000000001f98 0xa7 cpu/m0/libm0.a(cpu.o)
++.debug_line 0x0000000000000000 0x2078
++ .debug_line 0x0000000000000000 0x3dd lib/libarm.a(board.o)
++ .debug_line 0x00000000000003dd 0x152 lib/libarm.a(string.o)
++ .debug_line 0x000000000000052f 0x299 drivers/libdrivers.a(ddr.o)
++ .debug_line 0x00000000000007c8 0x112 drivers/libdrivers.a(uart.o)
++ .debug_line 0x00000000000008da 0x3b8 drivers/libdrivers.a(image.o)
++ .debug_line 0x0000000000000c92 0x38e drivers/libdrivers.a(secure_verify.o)
++ .debug_line 0x0000000000001020 0x442 drivers/libdrivers.a(spifc_loader2.o)
++ .debug_line 0x0000000000001462 0x251 drivers/libdrivers.a(bbt.o)
++ .debug_line 0x00000000000016b3 0x2bb drivers/libdrivers.a(sha256.o)
++ .debug_line 0x000000000000196e 0x2a2 drivers/libdrivers.a(nor.o)
++ .debug_line 0x0000000000001c10 0x88 drivers/libdrivers.a(drv_hash.o)
++ .debug_line 0x0000000000001c98 0x117 drivers/libdrivers.a(drv_rsa.o)
++ .debug_line 0x0000000000001daf 0x10a drivers/libdrivers.a(flash.o)
++ .debug_line 0x0000000000001eb9 0x118 drivers/libdrivers.a(efuse.o)
++ .debug_line 0x0000000000001fd1 0xa7 cpu/m0/libm0.a(cpu.o)
+
+-.debug_str 0x0000000000000000 0x160a
+- .debug_str 0x0000000000000000 0x55d lib/libarm.a(board.o)
+- 0x5d3 (松开之前的大小)
+- .debug_str 0x000000000000055d 0x3f lib/libarm.a(string.o)
++.debug_str 0x0000000000000000 0x1616
++ .debug_str 0x0000000000000000 0x569 lib/libarm.a(board.o)
++ 0x5df (松开之前的大小)
++ .debug_str 0x0000000000000569 0x3f lib/libarm.a(string.o)
+ 0x214 (松开之前的大小)
+- .debug_str 0x000000000000059c 0xa2 drivers/libdrivers.a(ddr.o)
++ .debug_str 0x00000000000005a8 0xa2 drivers/libdrivers.a(ddr.o)
+ 0x216 (松开之前的大小)
+- .debug_str 0x000000000000063e 0x94 drivers/libdrivers.a(uart.o)
++ .debug_str 0x000000000000064a 0x94 drivers/libdrivers.a(uart.o)
+ 0x253 (松开之前的大小)
+- .debug_str 0x00000000000006d2 0x35b drivers/libdrivers.a(image.o)
++ .debug_str 0x00000000000006de 0x35b drivers/libdrivers.a(image.o)
+ 0x854 (松开之前的大小)
+- .debug_str 0x0000000000000a2d 0x2f9 drivers/libdrivers.a(secure_verify.o)
++ .debug_str 0x0000000000000a39 0x2f9 drivers/libdrivers.a(secure_verify.o)
+ 0x61f (松开之前的大小)
+- .debug_str 0x0000000000000d26 0x3bb drivers/libdrivers.a(spifc_loader2.o)
++ .debug_str 0x0000000000000d32 0x3bb drivers/libdrivers.a(spifc_loader2.o)
+ 0x6c1 (松开之前的大小)
+- .debug_str 0x00000000000010e1 0x103 drivers/libdrivers.a(bbt.o)
++ .debug_str 0x00000000000010ed 0x103 drivers/libdrivers.a(bbt.o)
+ 0x3fe (松开之前的大小)
+- .debug_str 0x00000000000011e4 0xc3 drivers/libdrivers.a(sha256.o)
++ .debug_str 0x00000000000011f0 0xc3 drivers/libdrivers.a(sha256.o)
+ 0x2b7 (松开之前的大小)
+- .debug_str 0x00000000000012a7 0x1ad drivers/libdrivers.a(nor.o)
++ .debug_str 0x00000000000012b3 0x1ad drivers/libdrivers.a(nor.o)
+ 0x5f3 (松开之前的大小)
+- .debug_str 0x0000000000001454 0x87 drivers/libdrivers.a(drv_hash.o)
++ .debug_str 0x0000000000001460 0x87 drivers/libdrivers.a(drv_hash.o)
+ 0x25a (松开之前的大小)
+- .debug_str 0x00000000000014db 0x79 drivers/libdrivers.a(drv_rsa.o)
++ .debug_str 0x00000000000014e7 0x79 drivers/libdrivers.a(drv_rsa.o)
+ 0x29c (松开之前的大小)
+- .debug_str 0x0000000000001554 0x12 drivers/libdrivers.a(flash.o)
++ .debug_str 0x0000000000001560 0x12 drivers/libdrivers.a(flash.o)
+ 0x2a8 (松开之前的大小)
+- .debug_str 0x0000000000001566 0x20 drivers/libdrivers.a(efuse.o)
++ .debug_str 0x0000000000001572 0x20 drivers/libdrivers.a(efuse.o)
+ 0x255 (松开之前的大小)
+- .debug_str 0x0000000000001586 0x84 cpu/m0/libm0.a(cpu.o)
++ .debug_str 0x0000000000001592 0x84 cpu/m0/libm0.a(cpu.o)
+ 0x1f8 (松开之前的大小)
+
+ .debug_frame 0x0000000000000000 0xaf0
+diff --git a/Uboot/boot/prj/zx297520v3/bootrom/dl_on/loader2.bin b/Uboot/boot/prj/zx297520v3/bootrom/dl_on/loader2.bin
+index e13e6d9..6cf279f 100755
+--- a/Uboot/boot/prj/zx297520v3/bootrom/dl_on/loader2.bin
++++ b/Uboot/boot/prj/zx297520v3/bootrom/dl_on/loader2.bin
+Binary files differ
+diff --git a/Uboot/boot/prj/zx297520v3/bootrom/dl_on/z-load b/Uboot/boot/prj/zx297520v3/bootrom/dl_on/z-load
+index 2bc2831..fea89a9 100755
+--- a/Uboot/boot/prj/zx297520v3/bootrom/dl_on/z-load
++++ b/Uboot/boot/prj/zx297520v3/bootrom/dl_on/z-load
+Binary files differ
+diff --git a/Uboot/boot/prj/zx297520v3/bootrom/dl_on/z-load.map b/Uboot/boot/prj/zx297520v3/bootrom/dl_on/z-load.map
+index 07ae1fd..b4ee310 100755
+--- a/Uboot/boot/prj/zx297520v3/bootrom/dl_on/z-load.map
++++ b/Uboot/boot/prj/zx297520v3/bootrom/dl_on/z-load.map
+@@ -300,20 +300,20 @@
+ .stabstr 0x0000000000000000 0x67
+ .stabstr 0x0000000000000000 0x67 cpu/m0/start.o
+
+-.debug_info 0x0000000000000000 0x34d2
+- .debug_info 0x0000000000000000 0x70b lib/libarm.a(board.o)
+- .debug_info 0x000000000000070b 0x22b lib/libarm.a(string.o)
+- .debug_info 0x0000000000000936 0x329 drivers/libdrivers.a(ddr.o)
+- .debug_info 0x0000000000000c5f 0x2a0 drivers/libdrivers.a(uart.o)
+- .debug_info 0x0000000000000eff 0x6d3 drivers/libdrivers.a(image.o)
+- .debug_info 0x00000000000015d2 0x1c3 drivers/libdrivers.a(efuse.o)
+- .debug_info 0x0000000000001795 0x62d drivers/libdrivers.a(secure_verify.o)
+- .debug_info 0x0000000000001dc2 0xd5f drivers/libdrivers.a(nor.o)
+- .debug_info 0x0000000000002b21 0x1e8 drivers/libdrivers.a(drv_hash.o)
+- .debug_info 0x0000000000002d09 0x3b4 drivers/libdrivers.a(drv_rsa.o)
+- .debug_info 0x00000000000030bd 0x20f drivers/libdrivers.a(flash.o)
+- .debug_info 0x00000000000032cc 0x17b cpu/m0/libm0.a(cpu.o)
+- .debug_info 0x0000000000003447 0x8b cpu/m0/libm0.a(clk.o)
++.debug_info 0x0000000000000000 0x34df
++ .debug_info 0x0000000000000000 0x718 lib/libarm.a(board.o)
++ .debug_info 0x0000000000000718 0x22b lib/libarm.a(string.o)
++ .debug_info 0x0000000000000943 0x329 drivers/libdrivers.a(ddr.o)
++ .debug_info 0x0000000000000c6c 0x2a0 drivers/libdrivers.a(uart.o)
++ .debug_info 0x0000000000000f0c 0x6d3 drivers/libdrivers.a(image.o)
++ .debug_info 0x00000000000015df 0x1c3 drivers/libdrivers.a(efuse.o)
++ .debug_info 0x00000000000017a2 0x62d drivers/libdrivers.a(secure_verify.o)
++ .debug_info 0x0000000000001dcf 0xd5f drivers/libdrivers.a(nor.o)
++ .debug_info 0x0000000000002b2e 0x1e8 drivers/libdrivers.a(drv_hash.o)
++ .debug_info 0x0000000000002d16 0x3b4 drivers/libdrivers.a(drv_rsa.o)
++ .debug_info 0x00000000000030ca 0x20f drivers/libdrivers.a(flash.o)
++ .debug_info 0x00000000000032d9 0x17b cpu/m0/libm0.a(cpu.o)
++ .debug_info 0x0000000000003454 0x8b cpu/m0/libm0.a(clk.o)
+
+ .debug_abbrev 0x0000000000000000 0x12c2
+ .debug_abbrev 0x0000000000000000 0x2b8 lib/libarm.a(board.o)
+@@ -395,32 +395,32 @@
+ .debug_line 0x000000000000131d 0xa7 cpu/m0/libm0.a(cpu.o)
+ .debug_line 0x00000000000013c4 0x61 cpu/m0/libm0.a(clk.o)
+
+-.debug_str 0x0000000000000000 0xebb
+- .debug_str 0x0000000000000000 0x4d5 lib/libarm.a(board.o)
+- 0x554 (松开之前的大小)
+- .debug_str 0x00000000000004d5 0x4c lib/libarm.a(string.o)
++.debug_str 0x0000000000000000 0xec7
++ .debug_str 0x0000000000000000 0x4e1 lib/libarm.a(board.o)
++ 0x560 (松开之前的大小)
++ .debug_str 0x00000000000004e1 0x4c lib/libarm.a(string.o)
+ 0x214 (松开之前的大小)
+- .debug_str 0x0000000000000521 0xa1 drivers/libdrivers.a(ddr.o)
++ .debug_str 0x000000000000052d 0xa1 drivers/libdrivers.a(ddr.o)
+ 0x216 (松开之前的大小)
+- .debug_str 0x00000000000005c2 0x8a drivers/libdrivers.a(uart.o)
++ .debug_str 0x00000000000005ce 0x8a drivers/libdrivers.a(uart.o)
+ 0x253 (松开之前的大小)
+- .debug_str 0x000000000000064c 0x229 drivers/libdrivers.a(image.o)
++ .debug_str 0x0000000000000658 0x229 drivers/libdrivers.a(image.o)
+ 0x4a0 (松开之前的大小)
+- .debug_str 0x0000000000000875 0x7b drivers/libdrivers.a(efuse.o)
++ .debug_str 0x0000000000000881 0x7b drivers/libdrivers.a(efuse.o)
+ 0x255 (松开之前的大小)
+- .debug_str 0x00000000000008f0 0x177 drivers/libdrivers.a(secure_verify.o)
++ .debug_str 0x00000000000008fc 0x177 drivers/libdrivers.a(secure_verify.o)
+ 0x407 (松开之前的大小)
+- .debug_str 0x0000000000000a67 0x2c3 drivers/libdrivers.a(nor.o)
++ .debug_str 0x0000000000000a73 0x2c3 drivers/libdrivers.a(nor.o)
+ 0x5f3 (松开之前的大小)
+- .debug_str 0x0000000000000d2a 0x87 drivers/libdrivers.a(drv_hash.o)
++ .debug_str 0x0000000000000d36 0x87 drivers/libdrivers.a(drv_hash.o)
+ 0x25a (松开之前的大小)
+- .debug_str 0x0000000000000db1 0x79 drivers/libdrivers.a(drv_rsa.o)
++ .debug_str 0x0000000000000dbd 0x79 drivers/libdrivers.a(drv_rsa.o)
+ 0x29c (松开之前的大小)
+- .debug_str 0x0000000000000e2a 0x12 drivers/libdrivers.a(flash.o)
++ .debug_str 0x0000000000000e36 0x12 drivers/libdrivers.a(flash.o)
+ 0x2a8 (松开之前的大小)
+- .debug_str 0x0000000000000e3c 0x79 cpu/m0/libm0.a(cpu.o)
++ .debug_str 0x0000000000000e48 0x79 cpu/m0/libm0.a(cpu.o)
+ 0x1f8 (松开之前的大小)
+- .debug_str 0x0000000000000eb5 0x6 cpu/m0/libm0.a(clk.o)
++ .debug_str 0x0000000000000ec1 0x6 cpu/m0/libm0.a(clk.o)
+ 0x1bd (松开之前的大小)
+
+ .debug_frame 0x0000000000000000 0x6a0
+diff --git a/Uboot/boot/prj/zx297520v3/bootrom/dl_on/z-load2 b/Uboot/boot/prj/zx297520v3/bootrom/dl_on/z-load2
+index aa9d47a..88a41ea 100755
+--- a/Uboot/boot/prj/zx297520v3/bootrom/dl_on/z-load2
++++ b/Uboot/boot/prj/zx297520v3/bootrom/dl_on/z-load2
+Binary files differ
+diff --git a/Uboot/boot/prj/zx297520v3/bootrom/dl_on/z-load2.map b/Uboot/boot/prj/zx297520v3/bootrom/dl_on/z-load2.map
+index 0163e41..c906aa5 100755
+--- a/Uboot/boot/prj/zx297520v3/bootrom/dl_on/z-load2.map
++++ b/Uboot/boot/prj/zx297520v3/bootrom/dl_on/z-load2.map
+@@ -34,7 +34,7 @@
+ 0x0000000000000000 . = 0x0
+ 0x0000000000000000 . = ALIGN (0x4)
+
+-.text 0x0000000020300000 0x4ddc
++.text 0x0000000020300000 0x4ea4
+ cpu/m0/start.o(.text)
+ .text 0x0000000020300000 0x220 cpu/m0/start.o
+ 0x00000000203001a4 _bss_start
+@@ -44,7 +44,7 @@
+ 0x00000000203001b8 _start
+ 0x00000000203001fe run_at
+ *(.text)
+- .text 0x0000000020300220 0x4ec lib/libarm.a(board.o)
++ .text 0x0000000020300220 0x5b4 lib/libarm.a(board.o)
+ 0x0000000020300220 print_info
+ 0x0000000020300230 copy_to_iram1
+ 0x0000000020300250 clear_iram
+@@ -55,201 +55,201 @@
+ 0x0000000020300338 pmu_read
+ 0x0000000020300404 pmu_write
+ 0x00000000203004d0 start_armboot
+- .text 0x000000002030070c 0x80 lib/libarm.a(string.o)
+- 0x000000002030070c strlen
+- 0x000000002030071c memset
+- 0x000000002030075e memcmp
+- 0x000000002030077a memcpy
+- .text 0x000000002030078c 0x82c drivers/libdrivers.a(ddr.o)
+- 0x000000002030078c nsdelay
+- 0x00000000203007a6 ddr_clk_init
+- 0x00000000203007bc ddr_phy_init
+- 0x00000000203008b8 ddr_ctrl_init
+- 0x0000000020300c74 ddr_prio_init
+- 0x0000000020300d98 ddr_init
+- .text 0x0000000020300fb8 0x138 drivers/libdrivers.a(uart.o)
+- 0x0000000020300fb8 uart_init
+- 0x0000000020301038 uart_putc
+- 0x0000000020301060 uart_puts
+- 0x0000000020301074 uart_getc
+- 0x0000000020301090 uart_tstc
+- 0x00000000203010a0 UART_Read
+- 0x00000000203010bc UART_Write
+- 0x00000000203010d8 UART_Check_Sync
+- .text 0x00000000203010f0 0x338 drivers/libdrivers.a(image.o)
+- 0x00000000203010f4 page_align
+- 0x000000002030110c find_partition_para
+- 0x000000002030113c read_image_part_offset
+- 0x0000000020301190 read_flags_image
+- 0x0000000020301278 read_uboot_image
+- 0x0000000020301358 nand_read_m0
+- 0x00000000203013c4 read_zloader_image
+- .text 0x0000000020301428 0x2b0 drivers/libdrivers.a(secure_verify.o)
+- 0x0000000020301446 BIG2SMALL
+- 0x0000000020301476 bin2hex
+- 0x00000000203014c0 secure_verify_zloader
+- 0x00000000203015b4 SecureVerify
+- .text 0x00000000203016d8 0x648 drivers/libdrivers.a(spifc_loader2.o)
+- 0x00000000203017cc zDrvGpio_SetFunc
+- 0x0000000020301804 zDrvGpio_SetDirection
+- 0x0000000020301854 zDrvGpio_SetOutputValue
+- 0x0000000020301890 spi_nand_cs
+- 0x00000000203018cc spifc_clear_fifo
+- 0x00000000203018e0 spifc_clear_int
+- 0x0000000020301a3c spifc_read_oob
+- 0x0000000020301a80 spifc_read_page_raw
+- 0x0000000020301abc spifc_read_page
+- 0x0000000020301b38 spifc_read
+- 0x0000000020301b7c read_data
+- 0x0000000020301bd0 read_id
+- 0x0000000020301c54 spifc_init
+- 0x0000000020301cd8 zloader_flash_init
+- .text 0x0000000020301d20 0x1c0 drivers/libdrivers.a(bbt.o)
+- 0x0000000020301d80 nand_creat_ram_bbt
+- 0x0000000020301dc4 nand_search_bbt
+- 0x0000000020301e50 nand_creat_bbt
+- 0x0000000020301ecc nand_block_isbad
+- .text 0x0000000020301ee0 0x2688 drivers/libdrivers.a(sha256.o)
+- 0x0000000020304400 sha256_starts
+- 0x0000000020304448 sha256_update
+- 0x0000000020304454 sha256_finish
+- 0x0000000020304540 sha256_csum_wd
+- .text 0x0000000020304568 0x424 drivers/libdrivers.a(nor.o)
+- 0x0000000020304568 spifc_enable
+- 0x0000000020304598 spifc_disable
+- 0x00000000203045bc spifc_setup_cmd
+- 0x0000000020304640 spifc_wait_cmd_end
+- 0x000000002030466c spifc_read_fifo
+- 0x00000000203046a8 spifc_start
+- 0x00000000203046b8 cmd_seek
+- 0x00000000203046d8 nor_read_reg
+- 0x0000000020304738 nor_read_id
+- 0x00000000203047a0 spi_nor_read
+- 0x00000000203047fc nor_read
+- 0x0000000020304850 spi_nor_read_security_register
+- 0x00000000203048ac nor_read_security_register
+- 0x0000000020304900 nor_init
+- 0x0000000020304950 board_flash_init
+- .text 0x000000002030498c 0xa4 drivers/libdrivers.a(drv_hash.o)
+- 0x000000002030498c Hash_Calculate
+- .text 0x0000000020304a30 0x174 drivers/libdrivers.a(drv_rsa.o)
+- 0x0000000020304a4a Rsa_Calculate
+- .text 0x0000000020304ba4 0x28 drivers/libdrivers.a(flash.o)
+- 0x0000000020304ba4 get_boot_mode
+- .text 0x0000000020304bcc 0x1bc drivers/libdrivers.a(efuse.o)
+- 0x0000000020304bcc efuse_init
+- 0x0000000020304bf0 get_ddr_flag
+- 0x0000000020304d10 get_secure_verify_status
+- 0x0000000020304d54 get_otp_secure_verify_status
+- .text 0x0000000020304d88 0x54 cpu/m0/libm0.a(cpu.o)
+- 0x0000000020304d88 timer_init
+- 0x0000000020304da0 usdelay
++ .text 0x00000000203007d4 0x80 lib/libarm.a(string.o)
++ 0x00000000203007d4 strlen
++ 0x00000000203007e4 memset
++ 0x0000000020300826 memcmp
++ 0x0000000020300842 memcpy
++ .text 0x0000000020300854 0x82c drivers/libdrivers.a(ddr.o)
++ 0x0000000020300854 nsdelay
++ 0x000000002030086e ddr_clk_init
++ 0x0000000020300884 ddr_phy_init
++ 0x0000000020300980 ddr_ctrl_init
++ 0x0000000020300d3c ddr_prio_init
++ 0x0000000020300e60 ddr_init
++ .text 0x0000000020301080 0x138 drivers/libdrivers.a(uart.o)
++ 0x0000000020301080 uart_init
++ 0x0000000020301100 uart_putc
++ 0x0000000020301128 uart_puts
++ 0x000000002030113c uart_getc
++ 0x0000000020301158 uart_tstc
++ 0x0000000020301168 UART_Read
++ 0x0000000020301184 UART_Write
++ 0x00000000203011a0 UART_Check_Sync
++ .text 0x00000000203011b8 0x338 drivers/libdrivers.a(image.o)
++ 0x00000000203011bc page_align
++ 0x00000000203011d4 find_partition_para
++ 0x0000000020301204 read_image_part_offset
++ 0x0000000020301258 read_flags_image
++ 0x0000000020301340 read_uboot_image
++ 0x0000000020301420 nand_read_m0
++ 0x000000002030148c read_zloader_image
++ .text 0x00000000203014f0 0x2b0 drivers/libdrivers.a(secure_verify.o)
++ 0x000000002030150e BIG2SMALL
++ 0x000000002030153e bin2hex
++ 0x0000000020301588 secure_verify_zloader
++ 0x000000002030167c SecureVerify
++ .text 0x00000000203017a0 0x648 drivers/libdrivers.a(spifc_loader2.o)
++ 0x0000000020301894 zDrvGpio_SetFunc
++ 0x00000000203018cc zDrvGpio_SetDirection
++ 0x000000002030191c zDrvGpio_SetOutputValue
++ 0x0000000020301958 spi_nand_cs
++ 0x0000000020301994 spifc_clear_fifo
++ 0x00000000203019a8 spifc_clear_int
++ 0x0000000020301b04 spifc_read_oob
++ 0x0000000020301b48 spifc_read_page_raw
++ 0x0000000020301b84 spifc_read_page
++ 0x0000000020301c00 spifc_read
++ 0x0000000020301c44 read_data
++ 0x0000000020301c98 read_id
++ 0x0000000020301d1c spifc_init
++ 0x0000000020301da0 zloader_flash_init
++ .text 0x0000000020301de8 0x1c0 drivers/libdrivers.a(bbt.o)
++ 0x0000000020301e48 nand_creat_ram_bbt
++ 0x0000000020301e8c nand_search_bbt
++ 0x0000000020301f18 nand_creat_bbt
++ 0x0000000020301f94 nand_block_isbad
++ .text 0x0000000020301fa8 0x2688 drivers/libdrivers.a(sha256.o)
++ 0x00000000203044c8 sha256_starts
++ 0x0000000020304510 sha256_update
++ 0x000000002030451c sha256_finish
++ 0x0000000020304608 sha256_csum_wd
++ .text 0x0000000020304630 0x424 drivers/libdrivers.a(nor.o)
++ 0x0000000020304630 spifc_enable
++ 0x0000000020304660 spifc_disable
++ 0x0000000020304684 spifc_setup_cmd
++ 0x0000000020304708 spifc_wait_cmd_end
++ 0x0000000020304734 spifc_read_fifo
++ 0x0000000020304770 spifc_start
++ 0x0000000020304780 cmd_seek
++ 0x00000000203047a0 nor_read_reg
++ 0x0000000020304800 nor_read_id
++ 0x0000000020304868 spi_nor_read
++ 0x00000000203048c4 nor_read
++ 0x0000000020304918 spi_nor_read_security_register
++ 0x0000000020304974 nor_read_security_register
++ 0x00000000203049c8 nor_init
++ 0x0000000020304a18 board_flash_init
++ .text 0x0000000020304a54 0xa4 drivers/libdrivers.a(drv_hash.o)
++ 0x0000000020304a54 Hash_Calculate
++ .text 0x0000000020304af8 0x174 drivers/libdrivers.a(drv_rsa.o)
++ 0x0000000020304b12 Rsa_Calculate
++ .text 0x0000000020304c6c 0x28 drivers/libdrivers.a(flash.o)
++ 0x0000000020304c6c get_boot_mode
++ .text 0x0000000020304c94 0x1bc drivers/libdrivers.a(efuse.o)
++ 0x0000000020304c94 efuse_init
++ 0x0000000020304cb8 get_ddr_flag
++ 0x0000000020304dd8 get_secure_verify_status
++ 0x0000000020304e1c get_otp_secure_verify_status
++ .text 0x0000000020304e50 0x54 cpu/m0/libm0.a(cpu.o)
++ 0x0000000020304e50 timer_init
++ 0x0000000020304e68 usdelay
+
+-.glue_7 0x0000000020304ddc 0x0
++.glue_7 0x0000000020304ea4 0x0
+ .glue_7 0x0000000000000000 0x0 linker stubs
+
+-.glue_7t 0x0000000020304ddc 0x0
++.glue_7t 0x0000000020304ea4 0x0
+ .glue_7t 0x0000000000000000 0x0 linker stubs
+
+-.vfp11_veneer 0x0000000020304ddc 0x0
++.vfp11_veneer 0x0000000020304ea4 0x0
+ .vfp11_veneer 0x0000000000000000 0x0 linker stubs
+
+-.v4_bx 0x0000000020304ddc 0x0
++.v4_bx 0x0000000020304ea4 0x0
+ .v4_bx 0x0000000000000000 0x0 linker stubs
+
+-.iplt 0x0000000020304ddc 0x0
++.iplt 0x0000000020304ea4 0x0
+ .iplt 0x0000000000000000 0x0 cpu/m0/start.o
+- 0x0000000020304ddc . = ALIGN (0x4)
++ 0x0000000020304ea4 . = ALIGN (0x4)
+
+-.rodata 0x0000000020304ddc 0x3f0
++.rodata 0x0000000020304ea4 0x3f0
+ *(.rodata)
+- .rodata 0x0000000020304ddc 0x270 drivers/libdrivers.a(spifc_loader2.o)
+- .rodata 0x000000002030504c 0x13 drivers/libdrivers.a(sha256.o)
+- 0x000000002030504c sha256_der_prefix
+- *fill* 0x000000002030505f 0x1
+- .rodata 0x0000000020305060 0x16c drivers/libdrivers.a(nor.o)
++ .rodata 0x0000000020304ea4 0x270 drivers/libdrivers.a(spifc_loader2.o)
++ .rodata 0x0000000020305114 0x13 drivers/libdrivers.a(sha256.o)
++ 0x0000000020305114 sha256_der_prefix
++ *fill* 0x0000000020305127 0x1
++ .rodata 0x0000000020305128 0x16c drivers/libdrivers.a(nor.o)
+
+-.rodata.str1.1 0x00000000203051cc 0x48d
++.rodata.str1.1 0x0000000020305294 0x516
+ .rodata.str1.1
+- 0x00000000203051cc 0x18a lib/libarm.a(board.o)
+- 0x1a3 (松开之前的大小)
++ 0x0000000020305294 0x213 lib/libarm.a(board.o)
++ 0x24e (松开之前的大小)
+ .rodata.str1.1
+- 0x0000000020305356 0xef drivers/libdrivers.a(image.o)
++ 0x00000000203054a7 0xef drivers/libdrivers.a(image.o)
+ 0x115 (松开之前的大小)
+ .rodata.str1.1
+- 0x0000000020305445 0x5b drivers/libdrivers.a(secure_verify.o)
++ 0x0000000020305596 0x5b drivers/libdrivers.a(secure_verify.o)
+ 0x5d (松开之前的大小)
+ .rodata.str1.1
+- 0x00000000203054a0 0x3d drivers/libdrivers.a(spifc_loader2.o)
++ 0x00000000203055f1 0x3d drivers/libdrivers.a(spifc_loader2.o)
+ 0x4a (松开之前的大小)
+ .rodata.str1.1
+- 0x00000000203054dd 0x9 drivers/libdrivers.a(bbt.o)
++ 0x000000002030562e 0x9 drivers/libdrivers.a(bbt.o)
+ .rodata.str1.1
+- 0x00000000203054e6 0x15c drivers/libdrivers.a(nor.o)
++ 0x0000000020305637 0x15c drivers/libdrivers.a(nor.o)
+ .rodata.str1.1
+- 0x0000000020305642 0x17 drivers/libdrivers.a(efuse.o)
++ 0x0000000020305793 0x17 drivers/libdrivers.a(efuse.o)
+
+-.rel.dyn 0x000000002030565c 0x0
++.rel.dyn 0x00000000203057ac 0x0
+ .rel.iplt 0x0000000000000000 0x0 cpu/m0/start.o
+- 0x000000002030565c . = ALIGN (0x4)
++ 0x00000000203057ac . = ALIGN (0x4)
+
+-.data 0x000000002030565c 0xd0
++.data 0x00000000203057ac 0xd0
+ *(.data)
+- .data 0x000000002030565c 0x0 cpu/m0/start.o
+- .data 0x000000002030565c 0x0 lib/libarm.a(board.o)
+- .data 0x000000002030565c 0x0 lib/libarm.a(string.o)
+- .data 0x000000002030565c 0x0 drivers/libdrivers.a(ddr.o)
+- .data 0x000000002030565c 0x0 drivers/libdrivers.a(uart.o)
+- .data 0x000000002030565c 0x0 drivers/libdrivers.a(image.o)
+- .data 0x000000002030565c 0x0 drivers/libdrivers.a(secure_verify.o)
+- .data 0x000000002030565c 0x0 drivers/libdrivers.a(spifc_loader2.o)
+- .data 0x000000002030565c 0x40 drivers/libdrivers.a(bbt.o)
+- .data 0x000000002030569c 0x40 drivers/libdrivers.a(sha256.o)
+- .data 0x00000000203056dc 0x50 drivers/libdrivers.a(nor.o)
+- 0x00000000203056dc nor_cmd_table
+- .data 0x000000002030572c 0x0 drivers/libdrivers.a(drv_hash.o)
+- .data 0x000000002030572c 0x0 drivers/libdrivers.a(drv_rsa.o)
+- .data 0x000000002030572c 0x0 drivers/libdrivers.a(flash.o)
+- .data 0x000000002030572c 0x0 drivers/libdrivers.a(efuse.o)
+- .data 0x000000002030572c 0x0 cpu/m0/libm0.a(cpu.o)
++ .data 0x00000000203057ac 0x0 cpu/m0/start.o
++ .data 0x00000000203057ac 0x0 lib/libarm.a(board.o)
++ .data 0x00000000203057ac 0x0 lib/libarm.a(string.o)
++ .data 0x00000000203057ac 0x0 drivers/libdrivers.a(ddr.o)
++ .data 0x00000000203057ac 0x0 drivers/libdrivers.a(uart.o)
++ .data 0x00000000203057ac 0x0 drivers/libdrivers.a(image.o)
++ .data 0x00000000203057ac 0x0 drivers/libdrivers.a(secure_verify.o)
++ .data 0x00000000203057ac 0x0 drivers/libdrivers.a(spifc_loader2.o)
++ .data 0x00000000203057ac 0x40 drivers/libdrivers.a(bbt.o)
++ .data 0x00000000203057ec 0x40 drivers/libdrivers.a(sha256.o)
++ .data 0x000000002030582c 0x50 drivers/libdrivers.a(nor.o)
++ 0x000000002030582c nor_cmd_table
++ .data 0x000000002030587c 0x0 drivers/libdrivers.a(drv_hash.o)
++ .data 0x000000002030587c 0x0 drivers/libdrivers.a(drv_rsa.o)
++ .data 0x000000002030587c 0x0 drivers/libdrivers.a(flash.o)
++ .data 0x000000002030587c 0x0 drivers/libdrivers.a(efuse.o)
++ .data 0x000000002030587c 0x0 cpu/m0/libm0.a(cpu.o)
+
+-.igot.plt 0x000000002030572c 0x0
++.igot.plt 0x000000002030587c 0x0
+ .igot.plt 0x0000000000000000 0x0 cpu/m0/start.o
+- 0x000000002030572c . = ALIGN (0x4)
++ 0x000000002030587c . = ALIGN (0x4)
+
+ .got
+ *(.got)
+- 0x000000002030572c . = ALIGN (0x4)
+- 0x000000002030572c __bss_start = .
++ 0x000000002030587c . = ALIGN (0x4)
++ 0x000000002030587c __bss_start = .
+
+-.bss 0x000000002030572c 0x1e8
++.bss 0x000000002030587c 0x1e8
+ *(.bss)
+- .bss 0x000000002030572c 0x0 cpu/m0/start.o
+- .bss 0x000000002030572c 0x4 lib/libarm.a(board.o)
+- 0x000000002030572c zloader_entry_point
+- .bss 0x0000000020305730 0x0 lib/libarm.a(string.o)
+- .bss 0x0000000020305730 0x0 drivers/libdrivers.a(ddr.o)
+- .bss 0x0000000020305730 0x0 drivers/libdrivers.a(uart.o)
+- .bss 0x0000000020305730 0x0 drivers/libdrivers.a(image.o)
+- .bss 0x0000000020305730 0x104 drivers/libdrivers.a(secure_verify.o)
+- 0x0000000020305730 result
+- .bss 0x0000000020305834 0x4 drivers/libdrivers.a(spifc_loader2.o)
+- .bss 0x0000000020305838 0x80 drivers/libdrivers.a(bbt.o)
+- .bss 0x00000000203058b8 0x0 drivers/libdrivers.a(sha256.o)
+- .bss 0x00000000203058b8 0x28 drivers/libdrivers.a(nor.o)
+- 0x00000000203058b8 spi_nor_flash
+- 0x00000000203058bc otp_data
+- .bss 0x00000000203058e0 0x0 drivers/libdrivers.a(drv_hash.o)
+- .bss 0x00000000203058e0 0x0 drivers/libdrivers.a(drv_rsa.o)
+- .bss 0x00000000203058e0 0x24 drivers/libdrivers.a(flash.o)
+- 0x00000000203058e0 flash
+- .bss 0x0000000020305904 0x0 drivers/libdrivers.a(efuse.o)
+- .bss 0x0000000020305904 0x10 cpu/m0/libm0.a(cpu.o)
+- 0x0000000020305904 g_tick
+- 0x0000000020305914 __bss_end = .
+- 0x0000000020305914 . = ALIGN (0x4)
++ .bss 0x000000002030587c 0x0 cpu/m0/start.o
++ .bss 0x000000002030587c 0x4 lib/libarm.a(board.o)
++ 0x000000002030587c zloader_entry_point
++ .bss 0x0000000020305880 0x0 lib/libarm.a(string.o)
++ .bss 0x0000000020305880 0x0 drivers/libdrivers.a(ddr.o)
++ .bss 0x0000000020305880 0x0 drivers/libdrivers.a(uart.o)
++ .bss 0x0000000020305880 0x0 drivers/libdrivers.a(image.o)
++ .bss 0x0000000020305880 0x104 drivers/libdrivers.a(secure_verify.o)
++ 0x0000000020305880 result
++ .bss 0x0000000020305984 0x4 drivers/libdrivers.a(spifc_loader2.o)
++ .bss 0x0000000020305988 0x80 drivers/libdrivers.a(bbt.o)
++ .bss 0x0000000020305a08 0x0 drivers/libdrivers.a(sha256.o)
++ .bss 0x0000000020305a08 0x28 drivers/libdrivers.a(nor.o)
++ 0x0000000020305a08 spi_nor_flash
++ 0x0000000020305a0c otp_data
++ .bss 0x0000000020305a30 0x0 drivers/libdrivers.a(drv_hash.o)
++ .bss 0x0000000020305a30 0x0 drivers/libdrivers.a(drv_rsa.o)
++ .bss 0x0000000020305a30 0x24 drivers/libdrivers.a(flash.o)
++ 0x0000000020305a30 flash
++ .bss 0x0000000020305a54 0x0 drivers/libdrivers.a(efuse.o)
++ .bss 0x0000000020305a54 0x10 cpu/m0/libm0.a(cpu.o)
++ 0x0000000020305a54 g_tick
++ 0x0000000020305a64 __bss_end = .
++ 0x0000000020305a64 . = ALIGN (0x4)
+
+-.para 0x0000000082000000 0x0 加载地址 0x0000000020305914
++.para 0x0000000082000000 0x0 加载地址 0x0000000020305a64
+ 0x0000000082000000 __para_start = .
+ *(.para)
+ 0x0000000082000000 __para_end = .
+@@ -356,22 +356,22 @@
+ .stabstr 0x0000000000000000 0x67
+ .stabstr 0x0000000000000000 0x67 cpu/m0/start.o
+
+-.debug_info 0x0000000000000000 0x65ab
+- .debug_info 0x0000000000000000 0x9a2 lib/libarm.a(board.o)
+- .debug_info 0x00000000000009a2 0x22b lib/libarm.a(string.o)
+- .debug_info 0x0000000000000bcd 0x329 drivers/libdrivers.a(ddr.o)
+- .debug_info 0x0000000000000ef6 0x2a0 drivers/libdrivers.a(uart.o)
+- .debug_info 0x0000000000001196 0xdd6 drivers/libdrivers.a(image.o)
+- .debug_info 0x0000000000001f6c 0xb01 drivers/libdrivers.a(secure_verify.o)
+- .debug_info 0x0000000000002a6d 0x1661 drivers/libdrivers.a(spifc_loader2.o)
+- .debug_info 0x00000000000040ce 0x70f drivers/libdrivers.a(bbt.o)
+- .debug_info 0x00000000000047dd 0x586 drivers/libdrivers.a(sha256.o)
+- .debug_info 0x0000000000004d63 0xd5f drivers/libdrivers.a(nor.o)
+- .debug_info 0x0000000000005ac2 0x1e8 drivers/libdrivers.a(drv_hash.o)
+- .debug_info 0x0000000000005caa 0x3b4 drivers/libdrivers.a(drv_rsa.o)
+- .debug_info 0x000000000000605e 0x20f drivers/libdrivers.a(flash.o)
+- .debug_info 0x000000000000626d 0x1c3 drivers/libdrivers.a(efuse.o)
+- .debug_info 0x0000000000006430 0x17b cpu/m0/libm0.a(cpu.o)
++.debug_info 0x0000000000000000 0x66af
++ .debug_info 0x0000000000000000 0xaa6 lib/libarm.a(board.o)
++ .debug_info 0x0000000000000aa6 0x22b lib/libarm.a(string.o)
++ .debug_info 0x0000000000000cd1 0x329 drivers/libdrivers.a(ddr.o)
++ .debug_info 0x0000000000000ffa 0x2a0 drivers/libdrivers.a(uart.o)
++ .debug_info 0x000000000000129a 0xdd6 drivers/libdrivers.a(image.o)
++ .debug_info 0x0000000000002070 0xb01 drivers/libdrivers.a(secure_verify.o)
++ .debug_info 0x0000000000002b71 0x1661 drivers/libdrivers.a(spifc_loader2.o)
++ .debug_info 0x00000000000041d2 0x70f drivers/libdrivers.a(bbt.o)
++ .debug_info 0x00000000000048e1 0x586 drivers/libdrivers.a(sha256.o)
++ .debug_info 0x0000000000004e67 0xd5f drivers/libdrivers.a(nor.o)
++ .debug_info 0x0000000000005bc6 0x1e8 drivers/libdrivers.a(drv_hash.o)
++ .debug_info 0x0000000000005dae 0x3b4 drivers/libdrivers.a(drv_rsa.o)
++ .debug_info 0x0000000000006162 0x20f drivers/libdrivers.a(flash.o)
++ .debug_info 0x0000000000006371 0x1c3 drivers/libdrivers.a(efuse.o)
++ .debug_info 0x0000000000006534 0x17b cpu/m0/libm0.a(cpu.o)
+
+ .debug_abbrev 0x0000000000000000 0x1c94
+ .debug_abbrev 0x0000000000000000 0x304 lib/libarm.a(board.o)
+@@ -390,22 +390,22 @@
+ .debug_abbrev 0x0000000000001aaf 0x11d drivers/libdrivers.a(efuse.o)
+ .debug_abbrev 0x0000000000001bcc 0xc8 cpu/m0/libm0.a(cpu.o)
+
+-.debug_loc 0x0000000000000000 0x9737
+- .debug_loc 0x0000000000000000 0x345 lib/libarm.a(board.o)
+- .debug_loc 0x0000000000000345 0x29d lib/libarm.a(string.o)
+- .debug_loc 0x00000000000005e2 0x2d8 drivers/libdrivers.a(ddr.o)
+- .debug_loc 0x00000000000008ba 0x228 drivers/libdrivers.a(uart.o)
+- .debug_loc 0x0000000000000ae2 0x6a2 drivers/libdrivers.a(image.o)
+- .debug_loc 0x0000000000001184 0x790 drivers/libdrivers.a(secure_verify.o)
+- .debug_loc 0x0000000000001914 0xef4 drivers/libdrivers.a(spifc_loader2.o)
+- .debug_loc 0x0000000000002808 0x282 drivers/libdrivers.a(bbt.o)
+- .debug_loc 0x0000000000002a8a 0x5f3f drivers/libdrivers.a(sha256.o)
+- .debug_loc 0x00000000000089c9 0x80a drivers/libdrivers.a(nor.o)
+- .debug_loc 0x00000000000091d3 0x1b8 drivers/libdrivers.a(drv_hash.o)
+- .debug_loc 0x000000000000938b 0x238 drivers/libdrivers.a(drv_rsa.o)
+- .debug_loc 0x00000000000095c3 0x1f drivers/libdrivers.a(flash.o)
+- .debug_loc 0x00000000000095e2 0xab drivers/libdrivers.a(efuse.o)
+- .debug_loc 0x000000000000968d 0xaa cpu/m0/libm0.a(cpu.o)
++.debug_loc 0x0000000000000000 0x9807
++ .debug_loc 0x0000000000000000 0x415 lib/libarm.a(board.o)
++ .debug_loc 0x0000000000000415 0x29d lib/libarm.a(string.o)
++ .debug_loc 0x00000000000006b2 0x2d8 drivers/libdrivers.a(ddr.o)
++ .debug_loc 0x000000000000098a 0x228 drivers/libdrivers.a(uart.o)
++ .debug_loc 0x0000000000000bb2 0x6a2 drivers/libdrivers.a(image.o)
++ .debug_loc 0x0000000000001254 0x790 drivers/libdrivers.a(secure_verify.o)
++ .debug_loc 0x00000000000019e4 0xef4 drivers/libdrivers.a(spifc_loader2.o)
++ .debug_loc 0x00000000000028d8 0x282 drivers/libdrivers.a(bbt.o)
++ .debug_loc 0x0000000000002b5a 0x5f3f drivers/libdrivers.a(sha256.o)
++ .debug_loc 0x0000000000008a99 0x80a drivers/libdrivers.a(nor.o)
++ .debug_loc 0x00000000000092a3 0x1b8 drivers/libdrivers.a(drv_hash.o)
++ .debug_loc 0x000000000000945b 0x238 drivers/libdrivers.a(drv_rsa.o)
++ .debug_loc 0x0000000000009693 0x1f drivers/libdrivers.a(flash.o)
++ .debug_loc 0x00000000000096b2 0xab drivers/libdrivers.a(efuse.o)
++ .debug_loc 0x000000000000975d 0xaa cpu/m0/libm0.a(cpu.o)
+
+ .debug_aranges 0x0000000000000000 0x1e0
+ .debug_aranges
+@@ -449,53 +449,53 @@
+ .debug_ranges 0x00000000000001d8 0x28 drivers/libdrivers.a(drv_hash.o)
+ .debug_ranges 0x0000000000000200 0x38 drivers/libdrivers.a(drv_rsa.o)
+
+-.debug_line 0x0000000000000000 0x203f
+- .debug_line 0x0000000000000000 0x3a4 lib/libarm.a(board.o)
+- .debug_line 0x00000000000003a4 0x152 lib/libarm.a(string.o)
+- .debug_line 0x00000000000004f6 0x299 drivers/libdrivers.a(ddr.o)
+- .debug_line 0x000000000000078f 0x112 drivers/libdrivers.a(uart.o)
+- .debug_line 0x00000000000008a1 0x3b8 drivers/libdrivers.a(image.o)
+- .debug_line 0x0000000000000c59 0x38e drivers/libdrivers.a(secure_verify.o)
+- .debug_line 0x0000000000000fe7 0x442 drivers/libdrivers.a(spifc_loader2.o)
+- .debug_line 0x0000000000001429 0x251 drivers/libdrivers.a(bbt.o)
+- .debug_line 0x000000000000167a 0x2bb drivers/libdrivers.a(sha256.o)
+- .debug_line 0x0000000000001935 0x2a2 drivers/libdrivers.a(nor.o)
+- .debug_line 0x0000000000001bd7 0x88 drivers/libdrivers.a(drv_hash.o)
+- .debug_line 0x0000000000001c5f 0x117 drivers/libdrivers.a(drv_rsa.o)
+- .debug_line 0x0000000000001d76 0x10a drivers/libdrivers.a(flash.o)
+- .debug_line 0x0000000000001e80 0x118 drivers/libdrivers.a(efuse.o)
+- .debug_line 0x0000000000001f98 0xa7 cpu/m0/libm0.a(cpu.o)
++.debug_line 0x0000000000000000 0x2078
++ .debug_line 0x0000000000000000 0x3dd lib/libarm.a(board.o)
++ .debug_line 0x00000000000003dd 0x152 lib/libarm.a(string.o)
++ .debug_line 0x000000000000052f 0x299 drivers/libdrivers.a(ddr.o)
++ .debug_line 0x00000000000007c8 0x112 drivers/libdrivers.a(uart.o)
++ .debug_line 0x00000000000008da 0x3b8 drivers/libdrivers.a(image.o)
++ .debug_line 0x0000000000000c92 0x38e drivers/libdrivers.a(secure_verify.o)
++ .debug_line 0x0000000000001020 0x442 drivers/libdrivers.a(spifc_loader2.o)
++ .debug_line 0x0000000000001462 0x251 drivers/libdrivers.a(bbt.o)
++ .debug_line 0x00000000000016b3 0x2bb drivers/libdrivers.a(sha256.o)
++ .debug_line 0x000000000000196e 0x2a2 drivers/libdrivers.a(nor.o)
++ .debug_line 0x0000000000001c10 0x88 drivers/libdrivers.a(drv_hash.o)
++ .debug_line 0x0000000000001c98 0x117 drivers/libdrivers.a(drv_rsa.o)
++ .debug_line 0x0000000000001daf 0x10a drivers/libdrivers.a(flash.o)
++ .debug_line 0x0000000000001eb9 0x118 drivers/libdrivers.a(efuse.o)
++ .debug_line 0x0000000000001fd1 0xa7 cpu/m0/libm0.a(cpu.o)
+
+-.debug_str 0x0000000000000000 0x160a
+- .debug_str 0x0000000000000000 0x55d lib/libarm.a(board.o)
+- 0x5d3 (松开之前的大小)
+- .debug_str 0x000000000000055d 0x3f lib/libarm.a(string.o)
++.debug_str 0x0000000000000000 0x1616
++ .debug_str 0x0000000000000000 0x569 lib/libarm.a(board.o)
++ 0x5df (松开之前的大小)
++ .debug_str 0x0000000000000569 0x3f lib/libarm.a(string.o)
+ 0x214 (松开之前的大小)
+- .debug_str 0x000000000000059c 0xa2 drivers/libdrivers.a(ddr.o)
++ .debug_str 0x00000000000005a8 0xa2 drivers/libdrivers.a(ddr.o)
+ 0x216 (松开之前的大小)
+- .debug_str 0x000000000000063e 0x94 drivers/libdrivers.a(uart.o)
++ .debug_str 0x000000000000064a 0x94 drivers/libdrivers.a(uart.o)
+ 0x253 (松开之前的大小)
+- .debug_str 0x00000000000006d2 0x35b drivers/libdrivers.a(image.o)
++ .debug_str 0x00000000000006de 0x35b drivers/libdrivers.a(image.o)
+ 0x854 (松开之前的大小)
+- .debug_str 0x0000000000000a2d 0x2f9 drivers/libdrivers.a(secure_verify.o)
++ .debug_str 0x0000000000000a39 0x2f9 drivers/libdrivers.a(secure_verify.o)
+ 0x61f (松开之前的大小)
+- .debug_str 0x0000000000000d26 0x3bb drivers/libdrivers.a(spifc_loader2.o)
++ .debug_str 0x0000000000000d32 0x3bb drivers/libdrivers.a(spifc_loader2.o)
+ 0x6c1 (松开之前的大小)
+- .debug_str 0x00000000000010e1 0x103 drivers/libdrivers.a(bbt.o)
++ .debug_str 0x00000000000010ed 0x103 drivers/libdrivers.a(bbt.o)
+ 0x3fe (松开之前的大小)
+- .debug_str 0x00000000000011e4 0xc3 drivers/libdrivers.a(sha256.o)
++ .debug_str 0x00000000000011f0 0xc3 drivers/libdrivers.a(sha256.o)
+ 0x2b7 (松开之前的大小)
+- .debug_str 0x00000000000012a7 0x1ad drivers/libdrivers.a(nor.o)
++ .debug_str 0x00000000000012b3 0x1ad drivers/libdrivers.a(nor.o)
+ 0x5f3 (松开之前的大小)
+- .debug_str 0x0000000000001454 0x87 drivers/libdrivers.a(drv_hash.o)
++ .debug_str 0x0000000000001460 0x87 drivers/libdrivers.a(drv_hash.o)
+ 0x25a (松开之前的大小)
+- .debug_str 0x00000000000014db 0x79 drivers/libdrivers.a(drv_rsa.o)
++ .debug_str 0x00000000000014e7 0x79 drivers/libdrivers.a(drv_rsa.o)
+ 0x29c (松开之前的大小)
+- .debug_str 0x0000000000001554 0x12 drivers/libdrivers.a(flash.o)
++ .debug_str 0x0000000000001560 0x12 drivers/libdrivers.a(flash.o)
+ 0x2a8 (松开之前的大小)
+- .debug_str 0x0000000000001566 0x20 drivers/libdrivers.a(efuse.o)
++ .debug_str 0x0000000000001572 0x20 drivers/libdrivers.a(efuse.o)
+ 0x255 (松开之前的大小)
+- .debug_str 0x0000000000001586 0x84 cpu/m0/libm0.a(cpu.o)
++ .debug_str 0x0000000000001592 0x84 cpu/m0/libm0.a(cpu.o)
+ 0x1f8 (松开之前的大小)
+
+ .debug_frame 0x0000000000000000 0xaf0
+diff --git a/Uboot/boot/prj/zx297520v3/bootrom2/dl_off/loader2.bin b/Uboot/boot/prj/zx297520v3/bootrom2/dl_off/loader2.bin
+index 16a20a9..dc24875 100755
+--- a/Uboot/boot/prj/zx297520v3/bootrom2/dl_off/loader2.bin
++++ b/Uboot/boot/prj/zx297520v3/bootrom2/dl_off/loader2.bin
+Binary files differ
+diff --git a/Uboot/boot/prj/zx297520v3/bootrom2/dl_off/z-load b/Uboot/boot/prj/zx297520v3/bootrom2/dl_off/z-load
+index 0134c20..449447a 100755
+--- a/Uboot/boot/prj/zx297520v3/bootrom2/dl_off/z-load
++++ b/Uboot/boot/prj/zx297520v3/bootrom2/dl_off/z-load
+Binary files differ
+diff --git a/Uboot/boot/prj/zx297520v3/bootrom2/dl_off/z-load.map b/Uboot/boot/prj/zx297520v3/bootrom2/dl_off/z-load.map
+index 72c0ac3..71722dc 100755
+--- a/Uboot/boot/prj/zx297520v3/bootrom2/dl_off/z-load.map
++++ b/Uboot/boot/prj/zx297520v3/bootrom2/dl_off/z-load.map
+@@ -300,20 +300,20 @@
+ .stabstr 0x0000000000000000 0x67
+ .stabstr 0x0000000000000000 0x67 cpu/m0/start.o
+
+-.debug_info 0x0000000000000000 0x34d5
+- .debug_info 0x0000000000000000 0x70e lib/libarm.a(board.o)
+- .debug_info 0x000000000000070e 0x22b lib/libarm.a(string.o)
+- .debug_info 0x0000000000000939 0x329 drivers/libdrivers.a(ddr.o)
+- .debug_info 0x0000000000000c62 0x2a0 drivers/libdrivers.a(uart.o)
+- .debug_info 0x0000000000000f02 0x6d3 drivers/libdrivers.a(image.o)
+- .debug_info 0x00000000000015d5 0x1c3 drivers/libdrivers.a(efuse.o)
+- .debug_info 0x0000000000001798 0x62d drivers/libdrivers.a(secure_verify.o)
+- .debug_info 0x0000000000001dc5 0xd5f drivers/libdrivers.a(nor.o)
+- .debug_info 0x0000000000002b24 0x1e8 drivers/libdrivers.a(drv_hash.o)
+- .debug_info 0x0000000000002d0c 0x3b4 drivers/libdrivers.a(drv_rsa.o)
+- .debug_info 0x00000000000030c0 0x20f drivers/libdrivers.a(flash.o)
+- .debug_info 0x00000000000032cf 0x17b cpu/m0/libm0.a(cpu.o)
+- .debug_info 0x000000000000344a 0x8b cpu/m0/libm0.a(clk.o)
++.debug_info 0x0000000000000000 0x34e2
++ .debug_info 0x0000000000000000 0x71b lib/libarm.a(board.o)
++ .debug_info 0x000000000000071b 0x22b lib/libarm.a(string.o)
++ .debug_info 0x0000000000000946 0x329 drivers/libdrivers.a(ddr.o)
++ .debug_info 0x0000000000000c6f 0x2a0 drivers/libdrivers.a(uart.o)
++ .debug_info 0x0000000000000f0f 0x6d3 drivers/libdrivers.a(image.o)
++ .debug_info 0x00000000000015e2 0x1c3 drivers/libdrivers.a(efuse.o)
++ .debug_info 0x00000000000017a5 0x62d drivers/libdrivers.a(secure_verify.o)
++ .debug_info 0x0000000000001dd2 0xd5f drivers/libdrivers.a(nor.o)
++ .debug_info 0x0000000000002b31 0x1e8 drivers/libdrivers.a(drv_hash.o)
++ .debug_info 0x0000000000002d19 0x3b4 drivers/libdrivers.a(drv_rsa.o)
++ .debug_info 0x00000000000030cd 0x20f drivers/libdrivers.a(flash.o)
++ .debug_info 0x00000000000032dc 0x17b cpu/m0/libm0.a(cpu.o)
++ .debug_info 0x0000000000003457 0x8b cpu/m0/libm0.a(clk.o)
+
+ .debug_abbrev 0x0000000000000000 0x12c2
+ .debug_abbrev 0x0000000000000000 0x2b8 lib/libarm.a(board.o)
+@@ -395,32 +395,32 @@
+ .debug_line 0x000000000000132b 0xa7 cpu/m0/libm0.a(cpu.o)
+ .debug_line 0x00000000000013d2 0x61 cpu/m0/libm0.a(clk.o)
+
+-.debug_str 0x0000000000000000 0xebb
+- .debug_str 0x0000000000000000 0x4d5 lib/libarm.a(board.o)
+- 0x554 (松开之前的大小)
+- .debug_str 0x00000000000004d5 0x4c lib/libarm.a(string.o)
++.debug_str 0x0000000000000000 0xec7
++ .debug_str 0x0000000000000000 0x4e1 lib/libarm.a(board.o)
++ 0x560 (松开之前的大小)
++ .debug_str 0x00000000000004e1 0x4c lib/libarm.a(string.o)
+ 0x214 (松开之前的大小)
+- .debug_str 0x0000000000000521 0xa1 drivers/libdrivers.a(ddr.o)
++ .debug_str 0x000000000000052d 0xa1 drivers/libdrivers.a(ddr.o)
+ 0x216 (松开之前的大小)
+- .debug_str 0x00000000000005c2 0x8a drivers/libdrivers.a(uart.o)
++ .debug_str 0x00000000000005ce 0x8a drivers/libdrivers.a(uart.o)
+ 0x253 (松开之前的大小)
+- .debug_str 0x000000000000064c 0x229 drivers/libdrivers.a(image.o)
++ .debug_str 0x0000000000000658 0x229 drivers/libdrivers.a(image.o)
+ 0x4a0 (松开之前的大小)
+- .debug_str 0x0000000000000875 0x7b drivers/libdrivers.a(efuse.o)
++ .debug_str 0x0000000000000881 0x7b drivers/libdrivers.a(efuse.o)
+ 0x255 (松开之前的大小)
+- .debug_str 0x00000000000008f0 0x177 drivers/libdrivers.a(secure_verify.o)
++ .debug_str 0x00000000000008fc 0x177 drivers/libdrivers.a(secure_verify.o)
+ 0x407 (松开之前的大小)
+- .debug_str 0x0000000000000a67 0x2c3 drivers/libdrivers.a(nor.o)
++ .debug_str 0x0000000000000a73 0x2c3 drivers/libdrivers.a(nor.o)
+ 0x5f3 (松开之前的大小)
+- .debug_str 0x0000000000000d2a 0x87 drivers/libdrivers.a(drv_hash.o)
++ .debug_str 0x0000000000000d36 0x87 drivers/libdrivers.a(drv_hash.o)
+ 0x25a (松开之前的大小)
+- .debug_str 0x0000000000000db1 0x79 drivers/libdrivers.a(drv_rsa.o)
++ .debug_str 0x0000000000000dbd 0x79 drivers/libdrivers.a(drv_rsa.o)
+ 0x29c (松开之前的大小)
+- .debug_str 0x0000000000000e2a 0x12 drivers/libdrivers.a(flash.o)
++ .debug_str 0x0000000000000e36 0x12 drivers/libdrivers.a(flash.o)
+ 0x2a8 (松开之前的大小)
+- .debug_str 0x0000000000000e3c 0x79 cpu/m0/libm0.a(cpu.o)
++ .debug_str 0x0000000000000e48 0x79 cpu/m0/libm0.a(cpu.o)
+ 0x1f8 (松开之前的大小)
+- .debug_str 0x0000000000000eb5 0x6 cpu/m0/libm0.a(clk.o)
++ .debug_str 0x0000000000000ec1 0x6 cpu/m0/libm0.a(clk.o)
+ 0x1bd (松开之前的大小)
+
+ .debug_frame 0x0000000000000000 0x6a0
+diff --git a/Uboot/boot/prj/zx297520v3/bootrom2/dl_off/z-load2 b/Uboot/boot/prj/zx297520v3/bootrom2/dl_off/z-load2
+index cbc092e..44de20a 100755
+--- a/Uboot/boot/prj/zx297520v3/bootrom2/dl_off/z-load2
++++ b/Uboot/boot/prj/zx297520v3/bootrom2/dl_off/z-load2
+Binary files differ
+diff --git a/Uboot/boot/prj/zx297520v3/bootrom2/dl_off/z-load2.map b/Uboot/boot/prj/zx297520v3/bootrom2/dl_off/z-load2.map
+index 69d87e4..d4b4270 100755
+--- a/Uboot/boot/prj/zx297520v3/bootrom2/dl_off/z-load2.map
++++ b/Uboot/boot/prj/zx297520v3/bootrom2/dl_off/z-load2.map
+@@ -34,7 +34,7 @@
+ 0x0000000000000000 . = 0x0
+ 0x0000000000000000 . = ALIGN (0x4)
+
+-.text 0x0000000020300000 0x4d44
++.text 0x0000000020300000 0x4e0c
+ cpu/m0/start.o(.text)
+ .text 0x0000000020300000 0x220 cpu/m0/start.o
+ 0x00000000203001a4 _bss_start
+@@ -44,7 +44,7 @@
+ 0x00000000203001b8 _start
+ 0x00000000203001fe run_at
+ *(.text)
+- .text 0x0000000020300220 0x454 lib/libarm.a(board.o)
++ .text 0x0000000020300220 0x51c lib/libarm.a(board.o)
+ 0x0000000020300220 print_info
+ 0x0000000020300230 copy_to_iram1
+ 0x0000000020300250 clear_iram
+@@ -55,201 +55,201 @@
+ 0x0000000020300338 pmu_read
+ 0x0000000020300404 pmu_write
+ 0x00000000203004d0 start_armboot
+- .text 0x0000000020300674 0x80 lib/libarm.a(string.o)
+- 0x0000000020300674 strlen
+- 0x0000000020300684 memset
+- 0x00000000203006c6 memcmp
+- 0x00000000203006e2 memcpy
+- .text 0x00000000203006f4 0x138 drivers/libdrivers.a(uart.o)
+- 0x00000000203006f4 uart_init
+- 0x0000000020300774 uart_putc
+- 0x000000002030079c uart_puts
+- 0x00000000203007b0 uart_getc
+- 0x00000000203007cc uart_tstc
+- 0x00000000203007dc UART_Read
+- 0x00000000203007f8 UART_Write
+- 0x0000000020300814 UART_Check_Sync
+- .text 0x000000002030082c 0x338 drivers/libdrivers.a(image.o)
+- 0x0000000020300830 page_align
+- 0x0000000020300848 find_partition_para
+- 0x0000000020300878 read_image_part_offset
+- 0x00000000203008cc read_flags_image
+- 0x00000000203009b4 read_uboot_image
+- 0x0000000020300a94 nand_read_m0
+- 0x0000000020300b00 read_zloader_image
+- .text 0x0000000020300b64 0x2b0 drivers/libdrivers.a(secure_verify.o)
+- 0x0000000020300b82 BIG2SMALL
+- 0x0000000020300bb2 bin2hex
+- 0x0000000020300bfc secure_verify_zloader
+- 0x0000000020300cf0 SecureVerify
+- .text 0x0000000020300e14 0x648 drivers/libdrivers.a(spifc_loader2.o)
+- 0x0000000020300f08 zDrvGpio_SetFunc
+- 0x0000000020300f40 zDrvGpio_SetDirection
+- 0x0000000020300f90 zDrvGpio_SetOutputValue
+- 0x0000000020300fcc spi_nand_cs
+- 0x0000000020301008 spifc_clear_fifo
+- 0x000000002030101c spifc_clear_int
+- 0x0000000020301178 spifc_read_oob
+- 0x00000000203011bc spifc_read_page_raw
+- 0x00000000203011f8 spifc_read_page
+- 0x0000000020301274 spifc_read
+- 0x00000000203012b8 read_data
+- 0x000000002030130c read_id
+- 0x0000000020301390 spifc_init
+- 0x0000000020301414 zloader_flash_init
+- .text 0x000000002030145c 0x1c0 drivers/libdrivers.a(bbt.o)
+- 0x00000000203014bc nand_creat_ram_bbt
+- 0x0000000020301500 nand_search_bbt
+- 0x000000002030158c nand_creat_bbt
+- 0x0000000020301608 nand_block_isbad
+- .text 0x000000002030161c 0x2688 drivers/libdrivers.a(sha256.o)
+- 0x0000000020303b3c sha256_starts
+- 0x0000000020303b84 sha256_update
+- 0x0000000020303b90 sha256_finish
+- 0x0000000020303c7c sha256_csum_wd
+- .text 0x0000000020303ca4 0x424 drivers/libdrivers.a(nor.o)
+- 0x0000000020303ca4 spifc_enable
+- 0x0000000020303cd4 spifc_disable
+- 0x0000000020303cf8 spifc_setup_cmd
+- 0x0000000020303d7c spifc_wait_cmd_end
+- 0x0000000020303da8 spifc_read_fifo
+- 0x0000000020303de4 spifc_start
+- 0x0000000020303df4 cmd_seek
+- 0x0000000020303e14 nor_read_reg
+- 0x0000000020303e74 nor_read_id
+- 0x0000000020303edc spi_nor_read
+- 0x0000000020303f38 nor_read
+- 0x0000000020303f8c spi_nor_read_security_register
+- 0x0000000020303fe8 nor_read_security_register
+- 0x000000002030403c nor_init
+- 0x000000002030408c board_flash_init
+- .text 0x00000000203040c8 0x82c drivers/libdrivers.a(ddr.o)
+- 0x00000000203040c8 nsdelay
+- 0x00000000203040e2 ddr_clk_init
+- 0x00000000203040f8 ddr_phy_init
+- 0x00000000203041f4 ddr_ctrl_init
+- 0x00000000203045b0 ddr_prio_init
+- 0x00000000203046d4 ddr_init
+- .text 0x00000000203048f4 0xa4 drivers/libdrivers.a(drv_hash.o)
+- 0x00000000203048f4 Hash_Calculate
+- .text 0x0000000020304998 0x174 drivers/libdrivers.a(drv_rsa.o)
+- 0x00000000203049b2 Rsa_Calculate
+- .text 0x0000000020304b0c 0x28 drivers/libdrivers.a(flash.o)
+- 0x0000000020304b0c get_boot_mode
+- .text 0x0000000020304b34 0x1bc drivers/libdrivers.a(efuse.o)
+- 0x0000000020304b34 efuse_init
+- 0x0000000020304b58 get_ddr_flag
+- 0x0000000020304c78 get_secure_verify_status
+- 0x0000000020304cbc get_otp_secure_verify_status
+- .text 0x0000000020304cf0 0x54 cpu/m0/libm0.a(cpu.o)
+- 0x0000000020304cf0 timer_init
+- 0x0000000020304d08 usdelay
++ .text 0x000000002030073c 0x80 lib/libarm.a(string.o)
++ 0x000000002030073c strlen
++ 0x000000002030074c memset
++ 0x000000002030078e memcmp
++ 0x00000000203007aa memcpy
++ .text 0x00000000203007bc 0x138 drivers/libdrivers.a(uart.o)
++ 0x00000000203007bc uart_init
++ 0x000000002030083c uart_putc
++ 0x0000000020300864 uart_puts
++ 0x0000000020300878 uart_getc
++ 0x0000000020300894 uart_tstc
++ 0x00000000203008a4 UART_Read
++ 0x00000000203008c0 UART_Write
++ 0x00000000203008dc UART_Check_Sync
++ .text 0x00000000203008f4 0x338 drivers/libdrivers.a(image.o)
++ 0x00000000203008f8 page_align
++ 0x0000000020300910 find_partition_para
++ 0x0000000020300940 read_image_part_offset
++ 0x0000000020300994 read_flags_image
++ 0x0000000020300a7c read_uboot_image
++ 0x0000000020300b5c nand_read_m0
++ 0x0000000020300bc8 read_zloader_image
++ .text 0x0000000020300c2c 0x2b0 drivers/libdrivers.a(secure_verify.o)
++ 0x0000000020300c4a BIG2SMALL
++ 0x0000000020300c7a bin2hex
++ 0x0000000020300cc4 secure_verify_zloader
++ 0x0000000020300db8 SecureVerify
++ .text 0x0000000020300edc 0x648 drivers/libdrivers.a(spifc_loader2.o)
++ 0x0000000020300fd0 zDrvGpio_SetFunc
++ 0x0000000020301008 zDrvGpio_SetDirection
++ 0x0000000020301058 zDrvGpio_SetOutputValue
++ 0x0000000020301094 spi_nand_cs
++ 0x00000000203010d0 spifc_clear_fifo
++ 0x00000000203010e4 spifc_clear_int
++ 0x0000000020301240 spifc_read_oob
++ 0x0000000020301284 spifc_read_page_raw
++ 0x00000000203012c0 spifc_read_page
++ 0x000000002030133c spifc_read
++ 0x0000000020301380 read_data
++ 0x00000000203013d4 read_id
++ 0x0000000020301458 spifc_init
++ 0x00000000203014dc zloader_flash_init
++ .text 0x0000000020301524 0x1c0 drivers/libdrivers.a(bbt.o)
++ 0x0000000020301584 nand_creat_ram_bbt
++ 0x00000000203015c8 nand_search_bbt
++ 0x0000000020301654 nand_creat_bbt
++ 0x00000000203016d0 nand_block_isbad
++ .text 0x00000000203016e4 0x2688 drivers/libdrivers.a(sha256.o)
++ 0x0000000020303c04 sha256_starts
++ 0x0000000020303c4c sha256_update
++ 0x0000000020303c58 sha256_finish
++ 0x0000000020303d44 sha256_csum_wd
++ .text 0x0000000020303d6c 0x424 drivers/libdrivers.a(nor.o)
++ 0x0000000020303d6c spifc_enable
++ 0x0000000020303d9c spifc_disable
++ 0x0000000020303dc0 spifc_setup_cmd
++ 0x0000000020303e44 spifc_wait_cmd_end
++ 0x0000000020303e70 spifc_read_fifo
++ 0x0000000020303eac spifc_start
++ 0x0000000020303ebc cmd_seek
++ 0x0000000020303edc nor_read_reg
++ 0x0000000020303f3c nor_read_id
++ 0x0000000020303fa4 spi_nor_read
++ 0x0000000020304000 nor_read
++ 0x0000000020304054 spi_nor_read_security_register
++ 0x00000000203040b0 nor_read_security_register
++ 0x0000000020304104 nor_init
++ 0x0000000020304154 board_flash_init
++ .text 0x0000000020304190 0x82c drivers/libdrivers.a(ddr.o)
++ 0x0000000020304190 nsdelay
++ 0x00000000203041aa ddr_clk_init
++ 0x00000000203041c0 ddr_phy_init
++ 0x00000000203042bc ddr_ctrl_init
++ 0x0000000020304678 ddr_prio_init
++ 0x000000002030479c ddr_init
++ .text 0x00000000203049bc 0xa4 drivers/libdrivers.a(drv_hash.o)
++ 0x00000000203049bc Hash_Calculate
++ .text 0x0000000020304a60 0x174 drivers/libdrivers.a(drv_rsa.o)
++ 0x0000000020304a7a Rsa_Calculate
++ .text 0x0000000020304bd4 0x28 drivers/libdrivers.a(flash.o)
++ 0x0000000020304bd4 get_boot_mode
++ .text 0x0000000020304bfc 0x1bc drivers/libdrivers.a(efuse.o)
++ 0x0000000020304bfc efuse_init
++ 0x0000000020304c20 get_ddr_flag
++ 0x0000000020304d40 get_secure_verify_status
++ 0x0000000020304d84 get_otp_secure_verify_status
++ .text 0x0000000020304db8 0x54 cpu/m0/libm0.a(cpu.o)
++ 0x0000000020304db8 timer_init
++ 0x0000000020304dd0 usdelay
+
+-.glue_7 0x0000000020304d44 0x0
++.glue_7 0x0000000020304e0c 0x0
+ .glue_7 0x0000000000000000 0x0 linker stubs
+
+-.glue_7t 0x0000000020304d44 0x0
++.glue_7t 0x0000000020304e0c 0x0
+ .glue_7t 0x0000000000000000 0x0 linker stubs
+
+-.vfp11_veneer 0x0000000020304d44 0x0
++.vfp11_veneer 0x0000000020304e0c 0x0
+ .vfp11_veneer 0x0000000000000000 0x0 linker stubs
+
+-.v4_bx 0x0000000020304d44 0x0
++.v4_bx 0x0000000020304e0c 0x0
+ .v4_bx 0x0000000000000000 0x0 linker stubs
+
+-.iplt 0x0000000020304d44 0x0
++.iplt 0x0000000020304e0c 0x0
+ .iplt 0x0000000000000000 0x0 cpu/m0/start.o
+- 0x0000000020304d44 . = ALIGN (0x4)
++ 0x0000000020304e0c . = ALIGN (0x4)
+
+-.rodata 0x0000000020304d44 0x3f0
++.rodata 0x0000000020304e0c 0x3f0
+ *(.rodata)
+- .rodata 0x0000000020304d44 0x270 drivers/libdrivers.a(spifc_loader2.o)
+- .rodata 0x0000000020304fb4 0x13 drivers/libdrivers.a(sha256.o)
+- 0x0000000020304fb4 sha256_der_prefix
+- *fill* 0x0000000020304fc7 0x1
+- .rodata 0x0000000020304fc8 0x16c drivers/libdrivers.a(nor.o)
++ .rodata 0x0000000020304e0c 0x270 drivers/libdrivers.a(spifc_loader2.o)
++ .rodata 0x000000002030507c 0x13 drivers/libdrivers.a(sha256.o)
++ 0x000000002030507c sha256_der_prefix
++ *fill* 0x000000002030508f 0x1
++ .rodata 0x0000000020305090 0x16c drivers/libdrivers.a(nor.o)
+
+-.rodata.str1.1 0x0000000020305134 0x48d
++.rodata.str1.1 0x00000000203051fc 0x516
+ .rodata.str1.1
+- 0x0000000020305134 0x18a lib/libarm.a(board.o)
+- 0x1a3 (松开之前的大小)
++ 0x00000000203051fc 0x213 lib/libarm.a(board.o)
++ 0x24e (松开之前的大小)
+ .rodata.str1.1
+- 0x00000000203052be 0xef drivers/libdrivers.a(image.o)
++ 0x000000002030540f 0xef drivers/libdrivers.a(image.o)
+ 0x115 (松开之前的大小)
+ .rodata.str1.1
+- 0x00000000203053ad 0x5b drivers/libdrivers.a(secure_verify.o)
++ 0x00000000203054fe 0x5b drivers/libdrivers.a(secure_verify.o)
+ 0x5d (松开之前的大小)
+ .rodata.str1.1
+- 0x0000000020305408 0x3d drivers/libdrivers.a(spifc_loader2.o)
++ 0x0000000020305559 0x3d drivers/libdrivers.a(spifc_loader2.o)
+ 0x4a (松开之前的大小)
+ .rodata.str1.1
+- 0x0000000020305445 0x9 drivers/libdrivers.a(bbt.o)
++ 0x0000000020305596 0x9 drivers/libdrivers.a(bbt.o)
+ .rodata.str1.1
+- 0x000000002030544e 0x15c drivers/libdrivers.a(nor.o)
++ 0x000000002030559f 0x15c drivers/libdrivers.a(nor.o)
+ .rodata.str1.1
+- 0x00000000203055aa 0x17 drivers/libdrivers.a(efuse.o)
++ 0x00000000203056fb 0x17 drivers/libdrivers.a(efuse.o)
+
+-.rel.dyn 0x00000000203055c4 0x0
++.rel.dyn 0x0000000020305714 0x0
+ .rel.iplt 0x0000000000000000 0x0 cpu/m0/start.o
+- 0x00000000203055c4 . = ALIGN (0x4)
++ 0x0000000020305714 . = ALIGN (0x4)
+
+-.data 0x00000000203055c4 0xd0
++.data 0x0000000020305714 0xd0
+ *(.data)
+- .data 0x00000000203055c4 0x0 cpu/m0/start.o
+- .data 0x00000000203055c4 0x0 lib/libarm.a(board.o)
+- .data 0x00000000203055c4 0x0 lib/libarm.a(string.o)
+- .data 0x00000000203055c4 0x0 drivers/libdrivers.a(uart.o)
+- .data 0x00000000203055c4 0x0 drivers/libdrivers.a(image.o)
+- .data 0x00000000203055c4 0x0 drivers/libdrivers.a(secure_verify.o)
+- .data 0x00000000203055c4 0x0 drivers/libdrivers.a(spifc_loader2.o)
+- .data 0x00000000203055c4 0x40 drivers/libdrivers.a(bbt.o)
+- .data 0x0000000020305604 0x40 drivers/libdrivers.a(sha256.o)
+- .data 0x0000000020305644 0x50 drivers/libdrivers.a(nor.o)
+- 0x0000000020305644 nor_cmd_table
+- .data 0x0000000020305694 0x0 drivers/libdrivers.a(ddr.o)
+- .data 0x0000000020305694 0x0 drivers/libdrivers.a(drv_hash.o)
+- .data 0x0000000020305694 0x0 drivers/libdrivers.a(drv_rsa.o)
+- .data 0x0000000020305694 0x0 drivers/libdrivers.a(flash.o)
+- .data 0x0000000020305694 0x0 drivers/libdrivers.a(efuse.o)
+- .data 0x0000000020305694 0x0 cpu/m0/libm0.a(cpu.o)
++ .data 0x0000000020305714 0x0 cpu/m0/start.o
++ .data 0x0000000020305714 0x0 lib/libarm.a(board.o)
++ .data 0x0000000020305714 0x0 lib/libarm.a(string.o)
++ .data 0x0000000020305714 0x0 drivers/libdrivers.a(uart.o)
++ .data 0x0000000020305714 0x0 drivers/libdrivers.a(image.o)
++ .data 0x0000000020305714 0x0 drivers/libdrivers.a(secure_verify.o)
++ .data 0x0000000020305714 0x0 drivers/libdrivers.a(spifc_loader2.o)
++ .data 0x0000000020305714 0x40 drivers/libdrivers.a(bbt.o)
++ .data 0x0000000020305754 0x40 drivers/libdrivers.a(sha256.o)
++ .data 0x0000000020305794 0x50 drivers/libdrivers.a(nor.o)
++ 0x0000000020305794 nor_cmd_table
++ .data 0x00000000203057e4 0x0 drivers/libdrivers.a(ddr.o)
++ .data 0x00000000203057e4 0x0 drivers/libdrivers.a(drv_hash.o)
++ .data 0x00000000203057e4 0x0 drivers/libdrivers.a(drv_rsa.o)
++ .data 0x00000000203057e4 0x0 drivers/libdrivers.a(flash.o)
++ .data 0x00000000203057e4 0x0 drivers/libdrivers.a(efuse.o)
++ .data 0x00000000203057e4 0x0 cpu/m0/libm0.a(cpu.o)
+
+-.igot.plt 0x0000000020305694 0x0
++.igot.plt 0x00000000203057e4 0x0
+ .igot.plt 0x0000000000000000 0x0 cpu/m0/start.o
+- 0x0000000020305694 . = ALIGN (0x4)
++ 0x00000000203057e4 . = ALIGN (0x4)
+
+ .got
+ *(.got)
+- 0x0000000020305694 . = ALIGN (0x4)
+- 0x0000000020305694 __bss_start = .
++ 0x00000000203057e4 . = ALIGN (0x4)
++ 0x00000000203057e4 __bss_start = .
+
+-.bss 0x0000000020305694 0x1e8
++.bss 0x00000000203057e4 0x1e8
+ *(.bss)
+- .bss 0x0000000020305694 0x0 cpu/m0/start.o
+- .bss 0x0000000020305694 0x4 lib/libarm.a(board.o)
+- 0x0000000020305694 zloader_entry_point
+- .bss 0x0000000020305698 0x0 lib/libarm.a(string.o)
+- .bss 0x0000000020305698 0x0 drivers/libdrivers.a(uart.o)
+- .bss 0x0000000020305698 0x0 drivers/libdrivers.a(image.o)
+- .bss 0x0000000020305698 0x104 drivers/libdrivers.a(secure_verify.o)
+- 0x0000000020305698 result
+- .bss 0x000000002030579c 0x4 drivers/libdrivers.a(spifc_loader2.o)
+- .bss 0x00000000203057a0 0x80 drivers/libdrivers.a(bbt.o)
+- .bss 0x0000000020305820 0x0 drivers/libdrivers.a(sha256.o)
+- .bss 0x0000000020305820 0x28 drivers/libdrivers.a(nor.o)
+- 0x0000000020305820 spi_nor_flash
+- 0x0000000020305824 otp_data
+- .bss 0x0000000020305848 0x0 drivers/libdrivers.a(ddr.o)
+- .bss 0x0000000020305848 0x0 drivers/libdrivers.a(drv_hash.o)
+- .bss 0x0000000020305848 0x0 drivers/libdrivers.a(drv_rsa.o)
+- .bss 0x0000000020305848 0x24 drivers/libdrivers.a(flash.o)
+- 0x0000000020305848 flash
+- .bss 0x000000002030586c 0x0 drivers/libdrivers.a(efuse.o)
+- .bss 0x000000002030586c 0x10 cpu/m0/libm0.a(cpu.o)
+- 0x000000002030586c g_tick
+- 0x000000002030587c __bss_end = .
+- 0x000000002030587c . = ALIGN (0x4)
++ .bss 0x00000000203057e4 0x0 cpu/m0/start.o
++ .bss 0x00000000203057e4 0x4 lib/libarm.a(board.o)
++ 0x00000000203057e4 zloader_entry_point
++ .bss 0x00000000203057e8 0x0 lib/libarm.a(string.o)
++ .bss 0x00000000203057e8 0x0 drivers/libdrivers.a(uart.o)
++ .bss 0x00000000203057e8 0x0 drivers/libdrivers.a(image.o)
++ .bss 0x00000000203057e8 0x104 drivers/libdrivers.a(secure_verify.o)
++ 0x00000000203057e8 result
++ .bss 0x00000000203058ec 0x4 drivers/libdrivers.a(spifc_loader2.o)
++ .bss 0x00000000203058f0 0x80 drivers/libdrivers.a(bbt.o)
++ .bss 0x0000000020305970 0x0 drivers/libdrivers.a(sha256.o)
++ .bss 0x0000000020305970 0x28 drivers/libdrivers.a(nor.o)
++ 0x0000000020305970 spi_nor_flash
++ 0x0000000020305974 otp_data
++ .bss 0x0000000020305998 0x0 drivers/libdrivers.a(ddr.o)
++ .bss 0x0000000020305998 0x0 drivers/libdrivers.a(drv_hash.o)
++ .bss 0x0000000020305998 0x0 drivers/libdrivers.a(drv_rsa.o)
++ .bss 0x0000000020305998 0x24 drivers/libdrivers.a(flash.o)
++ 0x0000000020305998 flash
++ .bss 0x00000000203059bc 0x0 drivers/libdrivers.a(efuse.o)
++ .bss 0x00000000203059bc 0x10 cpu/m0/libm0.a(cpu.o)
++ 0x00000000203059bc g_tick
++ 0x00000000203059cc __bss_end = .
++ 0x00000000203059cc . = ALIGN (0x4)
+
+-.para 0x0000000082000000 0x0 加载地址 0x000000002030587c
++.para 0x0000000082000000 0x0 加载地址 0x00000000203059cc
+ 0x0000000082000000 __para_start = .
+ *(.para)
+ 0x0000000082000000 __para_end = .
+@@ -356,22 +356,22 @@
+ .stabstr 0x0000000000000000 0x67
+ .stabstr 0x0000000000000000 0x67 cpu/m0/start.o
+
+-.debug_info 0x0000000000000000 0x6536
+- .debug_info 0x0000000000000000 0x92d lib/libarm.a(board.o)
+- .debug_info 0x000000000000092d 0x22b lib/libarm.a(string.o)
+- .debug_info 0x0000000000000b58 0x2a0 drivers/libdrivers.a(uart.o)
+- .debug_info 0x0000000000000df8 0xdd6 drivers/libdrivers.a(image.o)
+- .debug_info 0x0000000000001bce 0xb01 drivers/libdrivers.a(secure_verify.o)
+- .debug_info 0x00000000000026cf 0x1661 drivers/libdrivers.a(spifc_loader2.o)
+- .debug_info 0x0000000000003d30 0x70f drivers/libdrivers.a(bbt.o)
+- .debug_info 0x000000000000443f 0x586 drivers/libdrivers.a(sha256.o)
+- .debug_info 0x00000000000049c5 0xd5f drivers/libdrivers.a(nor.o)
+- .debug_info 0x0000000000005724 0x329 drivers/libdrivers.a(ddr.o)
+- .debug_info 0x0000000000005a4d 0x1e8 drivers/libdrivers.a(drv_hash.o)
+- .debug_info 0x0000000000005c35 0x3b4 drivers/libdrivers.a(drv_rsa.o)
+- .debug_info 0x0000000000005fe9 0x20f drivers/libdrivers.a(flash.o)
+- .debug_info 0x00000000000061f8 0x1c3 drivers/libdrivers.a(efuse.o)
+- .debug_info 0x00000000000063bb 0x17b cpu/m0/libm0.a(cpu.o)
++.debug_info 0x0000000000000000 0x663a
++ .debug_info 0x0000000000000000 0xa31 lib/libarm.a(board.o)
++ .debug_info 0x0000000000000a31 0x22b lib/libarm.a(string.o)
++ .debug_info 0x0000000000000c5c 0x2a0 drivers/libdrivers.a(uart.o)
++ .debug_info 0x0000000000000efc 0xdd6 drivers/libdrivers.a(image.o)
++ .debug_info 0x0000000000001cd2 0xb01 drivers/libdrivers.a(secure_verify.o)
++ .debug_info 0x00000000000027d3 0x1661 drivers/libdrivers.a(spifc_loader2.o)
++ .debug_info 0x0000000000003e34 0x70f drivers/libdrivers.a(bbt.o)
++ .debug_info 0x0000000000004543 0x586 drivers/libdrivers.a(sha256.o)
++ .debug_info 0x0000000000004ac9 0xd5f drivers/libdrivers.a(nor.o)
++ .debug_info 0x0000000000005828 0x329 drivers/libdrivers.a(ddr.o)
++ .debug_info 0x0000000000005b51 0x1e8 drivers/libdrivers.a(drv_hash.o)
++ .debug_info 0x0000000000005d39 0x3b4 drivers/libdrivers.a(drv_rsa.o)
++ .debug_info 0x00000000000060ed 0x20f drivers/libdrivers.a(flash.o)
++ .debug_info 0x00000000000062fc 0x1c3 drivers/libdrivers.a(efuse.o)
++ .debug_info 0x00000000000064bf 0x17b cpu/m0/libm0.a(cpu.o)
+
+ .debug_abbrev 0x0000000000000000 0x1c94
+ .debug_abbrev 0x0000000000000000 0x304 lib/libarm.a(board.o)
+@@ -390,22 +390,22 @@
+ .debug_abbrev 0x0000000000001aaf 0x11d drivers/libdrivers.a(efuse.o)
+ .debug_abbrev 0x0000000000001bcc 0xc8 cpu/m0/libm0.a(cpu.o)
+
+-.debug_loc 0x0000000000000000 0x96e6
+- .debug_loc 0x0000000000000000 0x2f4 lib/libarm.a(board.o)
+- .debug_loc 0x00000000000002f4 0x29d lib/libarm.a(string.o)
+- .debug_loc 0x0000000000000591 0x228 drivers/libdrivers.a(uart.o)
+- .debug_loc 0x00000000000007b9 0x6a2 drivers/libdrivers.a(image.o)
+- .debug_loc 0x0000000000000e5b 0x790 drivers/libdrivers.a(secure_verify.o)
+- .debug_loc 0x00000000000015eb 0xef4 drivers/libdrivers.a(spifc_loader2.o)
+- .debug_loc 0x00000000000024df 0x282 drivers/libdrivers.a(bbt.o)
+- .debug_loc 0x0000000000002761 0x5f3f drivers/libdrivers.a(sha256.o)
+- .debug_loc 0x00000000000086a0 0x80a drivers/libdrivers.a(nor.o)
+- .debug_loc 0x0000000000008eaa 0x2d8 drivers/libdrivers.a(ddr.o)
+- .debug_loc 0x0000000000009182 0x1b8 drivers/libdrivers.a(drv_hash.o)
+- .debug_loc 0x000000000000933a 0x238 drivers/libdrivers.a(drv_rsa.o)
+- .debug_loc 0x0000000000009572 0x1f drivers/libdrivers.a(flash.o)
+- .debug_loc 0x0000000000009591 0xab drivers/libdrivers.a(efuse.o)
+- .debug_loc 0x000000000000963c 0xaa cpu/m0/libm0.a(cpu.o)
++.debug_loc 0x0000000000000000 0x97b8
++ .debug_loc 0x0000000000000000 0x3c6 lib/libarm.a(board.o)
++ .debug_loc 0x00000000000003c6 0x29d lib/libarm.a(string.o)
++ .debug_loc 0x0000000000000663 0x228 drivers/libdrivers.a(uart.o)
++ .debug_loc 0x000000000000088b 0x6a2 drivers/libdrivers.a(image.o)
++ .debug_loc 0x0000000000000f2d 0x790 drivers/libdrivers.a(secure_verify.o)
++ .debug_loc 0x00000000000016bd 0xef4 drivers/libdrivers.a(spifc_loader2.o)
++ .debug_loc 0x00000000000025b1 0x282 drivers/libdrivers.a(bbt.o)
++ .debug_loc 0x0000000000002833 0x5f3f drivers/libdrivers.a(sha256.o)
++ .debug_loc 0x0000000000008772 0x80a drivers/libdrivers.a(nor.o)
++ .debug_loc 0x0000000000008f7c 0x2d8 drivers/libdrivers.a(ddr.o)
++ .debug_loc 0x0000000000009254 0x1b8 drivers/libdrivers.a(drv_hash.o)
++ .debug_loc 0x000000000000940c 0x238 drivers/libdrivers.a(drv_rsa.o)
++ .debug_loc 0x0000000000009644 0x1f drivers/libdrivers.a(flash.o)
++ .debug_loc 0x0000000000009663 0xab drivers/libdrivers.a(efuse.o)
++ .debug_loc 0x000000000000970e 0xaa cpu/m0/libm0.a(cpu.o)
+
+ .debug_aranges 0x0000000000000000 0x1e0
+ .debug_aranges
+@@ -449,53 +449,53 @@
+ .debug_ranges 0x00000000000001d8 0x28 drivers/libdrivers.a(drv_hash.o)
+ .debug_ranges 0x0000000000000200 0x38 drivers/libdrivers.a(drv_rsa.o)
+
+-.debug_line 0x0000000000000000 0x2022
+- .debug_line 0x0000000000000000 0x387 lib/libarm.a(board.o)
+- .debug_line 0x0000000000000387 0x152 lib/libarm.a(string.o)
+- .debug_line 0x00000000000004d9 0x112 drivers/libdrivers.a(uart.o)
+- .debug_line 0x00000000000005eb 0x3b8 drivers/libdrivers.a(image.o)
+- .debug_line 0x00000000000009a3 0x38e drivers/libdrivers.a(secure_verify.o)
+- .debug_line 0x0000000000000d31 0x442 drivers/libdrivers.a(spifc_loader2.o)
+- .debug_line 0x0000000000001173 0x251 drivers/libdrivers.a(bbt.o)
+- .debug_line 0x00000000000013c4 0x2bb drivers/libdrivers.a(sha256.o)
+- .debug_line 0x000000000000167f 0x2a2 drivers/libdrivers.a(nor.o)
+- .debug_line 0x0000000000001921 0x299 drivers/libdrivers.a(ddr.o)
+- .debug_line 0x0000000000001bba 0x88 drivers/libdrivers.a(drv_hash.o)
+- .debug_line 0x0000000000001c42 0x117 drivers/libdrivers.a(drv_rsa.o)
+- .debug_line 0x0000000000001d59 0x10a drivers/libdrivers.a(flash.o)
+- .debug_line 0x0000000000001e63 0x118 drivers/libdrivers.a(efuse.o)
+- .debug_line 0x0000000000001f7b 0xa7 cpu/m0/libm0.a(cpu.o)
++.debug_line 0x0000000000000000 0x205d
++ .debug_line 0x0000000000000000 0x3c2 lib/libarm.a(board.o)
++ .debug_line 0x00000000000003c2 0x152 lib/libarm.a(string.o)
++ .debug_line 0x0000000000000514 0x112 drivers/libdrivers.a(uart.o)
++ .debug_line 0x0000000000000626 0x3b8 drivers/libdrivers.a(image.o)
++ .debug_line 0x00000000000009de 0x38e drivers/libdrivers.a(secure_verify.o)
++ .debug_line 0x0000000000000d6c 0x442 drivers/libdrivers.a(spifc_loader2.o)
++ .debug_line 0x00000000000011ae 0x251 drivers/libdrivers.a(bbt.o)
++ .debug_line 0x00000000000013ff 0x2bb drivers/libdrivers.a(sha256.o)
++ .debug_line 0x00000000000016ba 0x2a2 drivers/libdrivers.a(nor.o)
++ .debug_line 0x000000000000195c 0x299 drivers/libdrivers.a(ddr.o)
++ .debug_line 0x0000000000001bf5 0x88 drivers/libdrivers.a(drv_hash.o)
++ .debug_line 0x0000000000001c7d 0x117 drivers/libdrivers.a(drv_rsa.o)
++ .debug_line 0x0000000000001d94 0x10a drivers/libdrivers.a(flash.o)
++ .debug_line 0x0000000000001e9e 0x118 drivers/libdrivers.a(efuse.o)
++ .debug_line 0x0000000000001fb6 0xa7 cpu/m0/libm0.a(cpu.o)
+
+-.debug_str 0x0000000000000000 0x160a
+- .debug_str 0x0000000000000000 0x555 lib/libarm.a(board.o)
+- 0x5cb (松开之前的大小)
+- .debug_str 0x0000000000000555 0x3f lib/libarm.a(string.o)
++.debug_str 0x0000000000000000 0x1616
++ .debug_str 0x0000000000000000 0x561 lib/libarm.a(board.o)
++ 0x5d7 (松开之前的大小)
++ .debug_str 0x0000000000000561 0x3f lib/libarm.a(string.o)
+ 0x214 (松开之前的大小)
+- .debug_str 0x0000000000000594 0xe2 drivers/libdrivers.a(uart.o)
++ .debug_str 0x00000000000005a0 0xe2 drivers/libdrivers.a(uart.o)
+ 0x253 (松开之前的大小)
+- .debug_str 0x0000000000000676 0x35b drivers/libdrivers.a(image.o)
++ .debug_str 0x0000000000000682 0x35b drivers/libdrivers.a(image.o)
+ 0x854 (松开之前的大小)
+- .debug_str 0x00000000000009d1 0x2f9 drivers/libdrivers.a(secure_verify.o)
++ .debug_str 0x00000000000009dd 0x2f9 drivers/libdrivers.a(secure_verify.o)
+ 0x61f (松开之前的大小)
+- .debug_str 0x0000000000000cca 0x3c3 drivers/libdrivers.a(spifc_loader2.o)
++ .debug_str 0x0000000000000cd6 0x3c3 drivers/libdrivers.a(spifc_loader2.o)
+ 0x6c1 (松开之前的大小)
+- .debug_str 0x000000000000108d 0x103 drivers/libdrivers.a(bbt.o)
++ .debug_str 0x0000000000001099 0x103 drivers/libdrivers.a(bbt.o)
+ 0x3fe (松开之前的大小)
+- .debug_str 0x0000000000001190 0xc3 drivers/libdrivers.a(sha256.o)
++ .debug_str 0x000000000000119c 0xc3 drivers/libdrivers.a(sha256.o)
+ 0x2b7 (松开之前的大小)
+- .debug_str 0x0000000000001253 0x1ad drivers/libdrivers.a(nor.o)
++ .debug_str 0x000000000000125f 0x1ad drivers/libdrivers.a(nor.o)
+ 0x5f3 (松开之前的大小)
+- .debug_str 0x0000000000001400 0x54 drivers/libdrivers.a(ddr.o)
++ .debug_str 0x000000000000140c 0x54 drivers/libdrivers.a(ddr.o)
+ 0x216 (松开之前的大小)
+- .debug_str 0x0000000000001454 0x87 drivers/libdrivers.a(drv_hash.o)
++ .debug_str 0x0000000000001460 0x87 drivers/libdrivers.a(drv_hash.o)
+ 0x25a (松开之前的大小)
+- .debug_str 0x00000000000014db 0x79 drivers/libdrivers.a(drv_rsa.o)
++ .debug_str 0x00000000000014e7 0x79 drivers/libdrivers.a(drv_rsa.o)
+ 0x29c (松开之前的大小)
+- .debug_str 0x0000000000001554 0x12 drivers/libdrivers.a(flash.o)
++ .debug_str 0x0000000000001560 0x12 drivers/libdrivers.a(flash.o)
+ 0x2a8 (松开之前的大小)
+- .debug_str 0x0000000000001566 0x20 drivers/libdrivers.a(efuse.o)
++ .debug_str 0x0000000000001572 0x20 drivers/libdrivers.a(efuse.o)
+ 0x255 (松开之前的大小)
+- .debug_str 0x0000000000001586 0x84 cpu/m0/libm0.a(cpu.o)
++ .debug_str 0x0000000000001592 0x84 cpu/m0/libm0.a(cpu.o)
+ 0x1f8 (松开之前的大小)
+
+ .debug_frame 0x0000000000000000 0xaf0
+diff --git a/Uboot/boot/prj/zx297520v3/bootrom2/dl_on/loader2.bin b/Uboot/boot/prj/zx297520v3/bootrom2/dl_on/loader2.bin
+index 0428da1..e7d499c 100755
+--- a/Uboot/boot/prj/zx297520v3/bootrom2/dl_on/loader2.bin
++++ b/Uboot/boot/prj/zx297520v3/bootrom2/dl_on/loader2.bin
+Binary files differ
+diff --git a/Uboot/boot/prj/zx297520v3/bootrom2/dl_on/z-load b/Uboot/boot/prj/zx297520v3/bootrom2/dl_on/z-load
+index c79fda1..176acbd 100755
+--- a/Uboot/boot/prj/zx297520v3/bootrom2/dl_on/z-load
++++ b/Uboot/boot/prj/zx297520v3/bootrom2/dl_on/z-load
+Binary files differ
+diff --git a/Uboot/boot/prj/zx297520v3/bootrom2/dl_on/z-load.map b/Uboot/boot/prj/zx297520v3/bootrom2/dl_on/z-load.map
+index 72c0ac3..71722dc 100755
+--- a/Uboot/boot/prj/zx297520v3/bootrom2/dl_on/z-load.map
++++ b/Uboot/boot/prj/zx297520v3/bootrom2/dl_on/z-load.map
+@@ -300,20 +300,20 @@
+ .stabstr 0x0000000000000000 0x67
+ .stabstr 0x0000000000000000 0x67 cpu/m0/start.o
+
+-.debug_info 0x0000000000000000 0x34d5
+- .debug_info 0x0000000000000000 0x70e lib/libarm.a(board.o)
+- .debug_info 0x000000000000070e 0x22b lib/libarm.a(string.o)
+- .debug_info 0x0000000000000939 0x329 drivers/libdrivers.a(ddr.o)
+- .debug_info 0x0000000000000c62 0x2a0 drivers/libdrivers.a(uart.o)
+- .debug_info 0x0000000000000f02 0x6d3 drivers/libdrivers.a(image.o)
+- .debug_info 0x00000000000015d5 0x1c3 drivers/libdrivers.a(efuse.o)
+- .debug_info 0x0000000000001798 0x62d drivers/libdrivers.a(secure_verify.o)
+- .debug_info 0x0000000000001dc5 0xd5f drivers/libdrivers.a(nor.o)
+- .debug_info 0x0000000000002b24 0x1e8 drivers/libdrivers.a(drv_hash.o)
+- .debug_info 0x0000000000002d0c 0x3b4 drivers/libdrivers.a(drv_rsa.o)
+- .debug_info 0x00000000000030c0 0x20f drivers/libdrivers.a(flash.o)
+- .debug_info 0x00000000000032cf 0x17b cpu/m0/libm0.a(cpu.o)
+- .debug_info 0x000000000000344a 0x8b cpu/m0/libm0.a(clk.o)
++.debug_info 0x0000000000000000 0x34e2
++ .debug_info 0x0000000000000000 0x71b lib/libarm.a(board.o)
++ .debug_info 0x000000000000071b 0x22b lib/libarm.a(string.o)
++ .debug_info 0x0000000000000946 0x329 drivers/libdrivers.a(ddr.o)
++ .debug_info 0x0000000000000c6f 0x2a0 drivers/libdrivers.a(uart.o)
++ .debug_info 0x0000000000000f0f 0x6d3 drivers/libdrivers.a(image.o)
++ .debug_info 0x00000000000015e2 0x1c3 drivers/libdrivers.a(efuse.o)
++ .debug_info 0x00000000000017a5 0x62d drivers/libdrivers.a(secure_verify.o)
++ .debug_info 0x0000000000001dd2 0xd5f drivers/libdrivers.a(nor.o)
++ .debug_info 0x0000000000002b31 0x1e8 drivers/libdrivers.a(drv_hash.o)
++ .debug_info 0x0000000000002d19 0x3b4 drivers/libdrivers.a(drv_rsa.o)
++ .debug_info 0x00000000000030cd 0x20f drivers/libdrivers.a(flash.o)
++ .debug_info 0x00000000000032dc 0x17b cpu/m0/libm0.a(cpu.o)
++ .debug_info 0x0000000000003457 0x8b cpu/m0/libm0.a(clk.o)
+
+ .debug_abbrev 0x0000000000000000 0x12c2
+ .debug_abbrev 0x0000000000000000 0x2b8 lib/libarm.a(board.o)
+@@ -395,32 +395,32 @@
+ .debug_line 0x000000000000132b 0xa7 cpu/m0/libm0.a(cpu.o)
+ .debug_line 0x00000000000013d2 0x61 cpu/m0/libm0.a(clk.o)
+
+-.debug_str 0x0000000000000000 0xebb
+- .debug_str 0x0000000000000000 0x4d5 lib/libarm.a(board.o)
+- 0x554 (松开之前的大小)
+- .debug_str 0x00000000000004d5 0x4c lib/libarm.a(string.o)
++.debug_str 0x0000000000000000 0xec7
++ .debug_str 0x0000000000000000 0x4e1 lib/libarm.a(board.o)
++ 0x560 (松开之前的大小)
++ .debug_str 0x00000000000004e1 0x4c lib/libarm.a(string.o)
+ 0x214 (松开之前的大小)
+- .debug_str 0x0000000000000521 0xa1 drivers/libdrivers.a(ddr.o)
++ .debug_str 0x000000000000052d 0xa1 drivers/libdrivers.a(ddr.o)
+ 0x216 (松开之前的大小)
+- .debug_str 0x00000000000005c2 0x8a drivers/libdrivers.a(uart.o)
++ .debug_str 0x00000000000005ce 0x8a drivers/libdrivers.a(uart.o)
+ 0x253 (松开之前的大小)
+- .debug_str 0x000000000000064c 0x229 drivers/libdrivers.a(image.o)
++ .debug_str 0x0000000000000658 0x229 drivers/libdrivers.a(image.o)
+ 0x4a0 (松开之前的大小)
+- .debug_str 0x0000000000000875 0x7b drivers/libdrivers.a(efuse.o)
++ .debug_str 0x0000000000000881 0x7b drivers/libdrivers.a(efuse.o)
+ 0x255 (松开之前的大小)
+- .debug_str 0x00000000000008f0 0x177 drivers/libdrivers.a(secure_verify.o)
++ .debug_str 0x00000000000008fc 0x177 drivers/libdrivers.a(secure_verify.o)
+ 0x407 (松开之前的大小)
+- .debug_str 0x0000000000000a67 0x2c3 drivers/libdrivers.a(nor.o)
++ .debug_str 0x0000000000000a73 0x2c3 drivers/libdrivers.a(nor.o)
+ 0x5f3 (松开之前的大小)
+- .debug_str 0x0000000000000d2a 0x87 drivers/libdrivers.a(drv_hash.o)
++ .debug_str 0x0000000000000d36 0x87 drivers/libdrivers.a(drv_hash.o)
+ 0x25a (松开之前的大小)
+- .debug_str 0x0000000000000db1 0x79 drivers/libdrivers.a(drv_rsa.o)
++ .debug_str 0x0000000000000dbd 0x79 drivers/libdrivers.a(drv_rsa.o)
+ 0x29c (松开之前的大小)
+- .debug_str 0x0000000000000e2a 0x12 drivers/libdrivers.a(flash.o)
++ .debug_str 0x0000000000000e36 0x12 drivers/libdrivers.a(flash.o)
+ 0x2a8 (松开之前的大小)
+- .debug_str 0x0000000000000e3c 0x79 cpu/m0/libm0.a(cpu.o)
++ .debug_str 0x0000000000000e48 0x79 cpu/m0/libm0.a(cpu.o)
+ 0x1f8 (松开之前的大小)
+- .debug_str 0x0000000000000eb5 0x6 cpu/m0/libm0.a(clk.o)
++ .debug_str 0x0000000000000ec1 0x6 cpu/m0/libm0.a(clk.o)
+ 0x1bd (松开之前的大小)
+
+ .debug_frame 0x0000000000000000 0x6a0
+diff --git a/Uboot/boot/prj/zx297520v3/bootrom2/dl_on/z-load2 b/Uboot/boot/prj/zx297520v3/bootrom2/dl_on/z-load2
+index 50274d5..1f69c86 100755
+--- a/Uboot/boot/prj/zx297520v3/bootrom2/dl_on/z-load2
++++ b/Uboot/boot/prj/zx297520v3/bootrom2/dl_on/z-load2
+Binary files differ
+diff --git a/Uboot/boot/prj/zx297520v3/bootrom2/dl_on/z-load2.map b/Uboot/boot/prj/zx297520v3/bootrom2/dl_on/z-load2.map
+index 69d87e4..d4b4270 100755
+--- a/Uboot/boot/prj/zx297520v3/bootrom2/dl_on/z-load2.map
++++ b/Uboot/boot/prj/zx297520v3/bootrom2/dl_on/z-load2.map
+@@ -34,7 +34,7 @@
+ 0x0000000000000000 . = 0x0
+ 0x0000000000000000 . = ALIGN (0x4)
+
+-.text 0x0000000020300000 0x4d44
++.text 0x0000000020300000 0x4e0c
+ cpu/m0/start.o(.text)
+ .text 0x0000000020300000 0x220 cpu/m0/start.o
+ 0x00000000203001a4 _bss_start
+@@ -44,7 +44,7 @@
+ 0x00000000203001b8 _start
+ 0x00000000203001fe run_at
+ *(.text)
+- .text 0x0000000020300220 0x454 lib/libarm.a(board.o)
++ .text 0x0000000020300220 0x51c lib/libarm.a(board.o)
+ 0x0000000020300220 print_info
+ 0x0000000020300230 copy_to_iram1
+ 0x0000000020300250 clear_iram
+@@ -55,201 +55,201 @@
+ 0x0000000020300338 pmu_read
+ 0x0000000020300404 pmu_write
+ 0x00000000203004d0 start_armboot
+- .text 0x0000000020300674 0x80 lib/libarm.a(string.o)
+- 0x0000000020300674 strlen
+- 0x0000000020300684 memset
+- 0x00000000203006c6 memcmp
+- 0x00000000203006e2 memcpy
+- .text 0x00000000203006f4 0x138 drivers/libdrivers.a(uart.o)
+- 0x00000000203006f4 uart_init
+- 0x0000000020300774 uart_putc
+- 0x000000002030079c uart_puts
+- 0x00000000203007b0 uart_getc
+- 0x00000000203007cc uart_tstc
+- 0x00000000203007dc UART_Read
+- 0x00000000203007f8 UART_Write
+- 0x0000000020300814 UART_Check_Sync
+- .text 0x000000002030082c 0x338 drivers/libdrivers.a(image.o)
+- 0x0000000020300830 page_align
+- 0x0000000020300848 find_partition_para
+- 0x0000000020300878 read_image_part_offset
+- 0x00000000203008cc read_flags_image
+- 0x00000000203009b4 read_uboot_image
+- 0x0000000020300a94 nand_read_m0
+- 0x0000000020300b00 read_zloader_image
+- .text 0x0000000020300b64 0x2b0 drivers/libdrivers.a(secure_verify.o)
+- 0x0000000020300b82 BIG2SMALL
+- 0x0000000020300bb2 bin2hex
+- 0x0000000020300bfc secure_verify_zloader
+- 0x0000000020300cf0 SecureVerify
+- .text 0x0000000020300e14 0x648 drivers/libdrivers.a(spifc_loader2.o)
+- 0x0000000020300f08 zDrvGpio_SetFunc
+- 0x0000000020300f40 zDrvGpio_SetDirection
+- 0x0000000020300f90 zDrvGpio_SetOutputValue
+- 0x0000000020300fcc spi_nand_cs
+- 0x0000000020301008 spifc_clear_fifo
+- 0x000000002030101c spifc_clear_int
+- 0x0000000020301178 spifc_read_oob
+- 0x00000000203011bc spifc_read_page_raw
+- 0x00000000203011f8 spifc_read_page
+- 0x0000000020301274 spifc_read
+- 0x00000000203012b8 read_data
+- 0x000000002030130c read_id
+- 0x0000000020301390 spifc_init
+- 0x0000000020301414 zloader_flash_init
+- .text 0x000000002030145c 0x1c0 drivers/libdrivers.a(bbt.o)
+- 0x00000000203014bc nand_creat_ram_bbt
+- 0x0000000020301500 nand_search_bbt
+- 0x000000002030158c nand_creat_bbt
+- 0x0000000020301608 nand_block_isbad
+- .text 0x000000002030161c 0x2688 drivers/libdrivers.a(sha256.o)
+- 0x0000000020303b3c sha256_starts
+- 0x0000000020303b84 sha256_update
+- 0x0000000020303b90 sha256_finish
+- 0x0000000020303c7c sha256_csum_wd
+- .text 0x0000000020303ca4 0x424 drivers/libdrivers.a(nor.o)
+- 0x0000000020303ca4 spifc_enable
+- 0x0000000020303cd4 spifc_disable
+- 0x0000000020303cf8 spifc_setup_cmd
+- 0x0000000020303d7c spifc_wait_cmd_end
+- 0x0000000020303da8 spifc_read_fifo
+- 0x0000000020303de4 spifc_start
+- 0x0000000020303df4 cmd_seek
+- 0x0000000020303e14 nor_read_reg
+- 0x0000000020303e74 nor_read_id
+- 0x0000000020303edc spi_nor_read
+- 0x0000000020303f38 nor_read
+- 0x0000000020303f8c spi_nor_read_security_register
+- 0x0000000020303fe8 nor_read_security_register
+- 0x000000002030403c nor_init
+- 0x000000002030408c board_flash_init
+- .text 0x00000000203040c8 0x82c drivers/libdrivers.a(ddr.o)
+- 0x00000000203040c8 nsdelay
+- 0x00000000203040e2 ddr_clk_init
+- 0x00000000203040f8 ddr_phy_init
+- 0x00000000203041f4 ddr_ctrl_init
+- 0x00000000203045b0 ddr_prio_init
+- 0x00000000203046d4 ddr_init
+- .text 0x00000000203048f4 0xa4 drivers/libdrivers.a(drv_hash.o)
+- 0x00000000203048f4 Hash_Calculate
+- .text 0x0000000020304998 0x174 drivers/libdrivers.a(drv_rsa.o)
+- 0x00000000203049b2 Rsa_Calculate
+- .text 0x0000000020304b0c 0x28 drivers/libdrivers.a(flash.o)
+- 0x0000000020304b0c get_boot_mode
+- .text 0x0000000020304b34 0x1bc drivers/libdrivers.a(efuse.o)
+- 0x0000000020304b34 efuse_init
+- 0x0000000020304b58 get_ddr_flag
+- 0x0000000020304c78 get_secure_verify_status
+- 0x0000000020304cbc get_otp_secure_verify_status
+- .text 0x0000000020304cf0 0x54 cpu/m0/libm0.a(cpu.o)
+- 0x0000000020304cf0 timer_init
+- 0x0000000020304d08 usdelay
++ .text 0x000000002030073c 0x80 lib/libarm.a(string.o)
++ 0x000000002030073c strlen
++ 0x000000002030074c memset
++ 0x000000002030078e memcmp
++ 0x00000000203007aa memcpy
++ .text 0x00000000203007bc 0x138 drivers/libdrivers.a(uart.o)
++ 0x00000000203007bc uart_init
++ 0x000000002030083c uart_putc
++ 0x0000000020300864 uart_puts
++ 0x0000000020300878 uart_getc
++ 0x0000000020300894 uart_tstc
++ 0x00000000203008a4 UART_Read
++ 0x00000000203008c0 UART_Write
++ 0x00000000203008dc UART_Check_Sync
++ .text 0x00000000203008f4 0x338 drivers/libdrivers.a(image.o)
++ 0x00000000203008f8 page_align
++ 0x0000000020300910 find_partition_para
++ 0x0000000020300940 read_image_part_offset
++ 0x0000000020300994 read_flags_image
++ 0x0000000020300a7c read_uboot_image
++ 0x0000000020300b5c nand_read_m0
++ 0x0000000020300bc8 read_zloader_image
++ .text 0x0000000020300c2c 0x2b0 drivers/libdrivers.a(secure_verify.o)
++ 0x0000000020300c4a BIG2SMALL
++ 0x0000000020300c7a bin2hex
++ 0x0000000020300cc4 secure_verify_zloader
++ 0x0000000020300db8 SecureVerify
++ .text 0x0000000020300edc 0x648 drivers/libdrivers.a(spifc_loader2.o)
++ 0x0000000020300fd0 zDrvGpio_SetFunc
++ 0x0000000020301008 zDrvGpio_SetDirection
++ 0x0000000020301058 zDrvGpio_SetOutputValue
++ 0x0000000020301094 spi_nand_cs
++ 0x00000000203010d0 spifc_clear_fifo
++ 0x00000000203010e4 spifc_clear_int
++ 0x0000000020301240 spifc_read_oob
++ 0x0000000020301284 spifc_read_page_raw
++ 0x00000000203012c0 spifc_read_page
++ 0x000000002030133c spifc_read
++ 0x0000000020301380 read_data
++ 0x00000000203013d4 read_id
++ 0x0000000020301458 spifc_init
++ 0x00000000203014dc zloader_flash_init
++ .text 0x0000000020301524 0x1c0 drivers/libdrivers.a(bbt.o)
++ 0x0000000020301584 nand_creat_ram_bbt
++ 0x00000000203015c8 nand_search_bbt
++ 0x0000000020301654 nand_creat_bbt
++ 0x00000000203016d0 nand_block_isbad
++ .text 0x00000000203016e4 0x2688 drivers/libdrivers.a(sha256.o)
++ 0x0000000020303c04 sha256_starts
++ 0x0000000020303c4c sha256_update
++ 0x0000000020303c58 sha256_finish
++ 0x0000000020303d44 sha256_csum_wd
++ .text 0x0000000020303d6c 0x424 drivers/libdrivers.a(nor.o)
++ 0x0000000020303d6c spifc_enable
++ 0x0000000020303d9c spifc_disable
++ 0x0000000020303dc0 spifc_setup_cmd
++ 0x0000000020303e44 spifc_wait_cmd_end
++ 0x0000000020303e70 spifc_read_fifo
++ 0x0000000020303eac spifc_start
++ 0x0000000020303ebc cmd_seek
++ 0x0000000020303edc nor_read_reg
++ 0x0000000020303f3c nor_read_id
++ 0x0000000020303fa4 spi_nor_read
++ 0x0000000020304000 nor_read
++ 0x0000000020304054 spi_nor_read_security_register
++ 0x00000000203040b0 nor_read_security_register
++ 0x0000000020304104 nor_init
++ 0x0000000020304154 board_flash_init
++ .text 0x0000000020304190 0x82c drivers/libdrivers.a(ddr.o)
++ 0x0000000020304190 nsdelay
++ 0x00000000203041aa ddr_clk_init
++ 0x00000000203041c0 ddr_phy_init
++ 0x00000000203042bc ddr_ctrl_init
++ 0x0000000020304678 ddr_prio_init
++ 0x000000002030479c ddr_init
++ .text 0x00000000203049bc 0xa4 drivers/libdrivers.a(drv_hash.o)
++ 0x00000000203049bc Hash_Calculate
++ .text 0x0000000020304a60 0x174 drivers/libdrivers.a(drv_rsa.o)
++ 0x0000000020304a7a Rsa_Calculate
++ .text 0x0000000020304bd4 0x28 drivers/libdrivers.a(flash.o)
++ 0x0000000020304bd4 get_boot_mode
++ .text 0x0000000020304bfc 0x1bc drivers/libdrivers.a(efuse.o)
++ 0x0000000020304bfc efuse_init
++ 0x0000000020304c20 get_ddr_flag
++ 0x0000000020304d40 get_secure_verify_status
++ 0x0000000020304d84 get_otp_secure_verify_status
++ .text 0x0000000020304db8 0x54 cpu/m0/libm0.a(cpu.o)
++ 0x0000000020304db8 timer_init
++ 0x0000000020304dd0 usdelay
+
+-.glue_7 0x0000000020304d44 0x0
++.glue_7 0x0000000020304e0c 0x0
+ .glue_7 0x0000000000000000 0x0 linker stubs
+
+-.glue_7t 0x0000000020304d44 0x0
++.glue_7t 0x0000000020304e0c 0x0
+ .glue_7t 0x0000000000000000 0x0 linker stubs
+
+-.vfp11_veneer 0x0000000020304d44 0x0
++.vfp11_veneer 0x0000000020304e0c 0x0
+ .vfp11_veneer 0x0000000000000000 0x0 linker stubs
+
+-.v4_bx 0x0000000020304d44 0x0
++.v4_bx 0x0000000020304e0c 0x0
+ .v4_bx 0x0000000000000000 0x0 linker stubs
+
+-.iplt 0x0000000020304d44 0x0
++.iplt 0x0000000020304e0c 0x0
+ .iplt 0x0000000000000000 0x0 cpu/m0/start.o
+- 0x0000000020304d44 . = ALIGN (0x4)
++ 0x0000000020304e0c . = ALIGN (0x4)
+
+-.rodata 0x0000000020304d44 0x3f0
++.rodata 0x0000000020304e0c 0x3f0
+ *(.rodata)
+- .rodata 0x0000000020304d44 0x270 drivers/libdrivers.a(spifc_loader2.o)
+- .rodata 0x0000000020304fb4 0x13 drivers/libdrivers.a(sha256.o)
+- 0x0000000020304fb4 sha256_der_prefix
+- *fill* 0x0000000020304fc7 0x1
+- .rodata 0x0000000020304fc8 0x16c drivers/libdrivers.a(nor.o)
++ .rodata 0x0000000020304e0c 0x270 drivers/libdrivers.a(spifc_loader2.o)
++ .rodata 0x000000002030507c 0x13 drivers/libdrivers.a(sha256.o)
++ 0x000000002030507c sha256_der_prefix
++ *fill* 0x000000002030508f 0x1
++ .rodata 0x0000000020305090 0x16c drivers/libdrivers.a(nor.o)
+
+-.rodata.str1.1 0x0000000020305134 0x48d
++.rodata.str1.1 0x00000000203051fc 0x516
+ .rodata.str1.1
+- 0x0000000020305134 0x18a lib/libarm.a(board.o)
+- 0x1a3 (松开之前的大小)
++ 0x00000000203051fc 0x213 lib/libarm.a(board.o)
++ 0x24e (松开之前的大小)
+ .rodata.str1.1
+- 0x00000000203052be 0xef drivers/libdrivers.a(image.o)
++ 0x000000002030540f 0xef drivers/libdrivers.a(image.o)
+ 0x115 (松开之前的大小)
+ .rodata.str1.1
+- 0x00000000203053ad 0x5b drivers/libdrivers.a(secure_verify.o)
++ 0x00000000203054fe 0x5b drivers/libdrivers.a(secure_verify.o)
+ 0x5d (松开之前的大小)
+ .rodata.str1.1
+- 0x0000000020305408 0x3d drivers/libdrivers.a(spifc_loader2.o)
++ 0x0000000020305559 0x3d drivers/libdrivers.a(spifc_loader2.o)
+ 0x4a (松开之前的大小)
+ .rodata.str1.1
+- 0x0000000020305445 0x9 drivers/libdrivers.a(bbt.o)
++ 0x0000000020305596 0x9 drivers/libdrivers.a(bbt.o)
+ .rodata.str1.1
+- 0x000000002030544e 0x15c drivers/libdrivers.a(nor.o)
++ 0x000000002030559f 0x15c drivers/libdrivers.a(nor.o)
+ .rodata.str1.1
+- 0x00000000203055aa 0x17 drivers/libdrivers.a(efuse.o)
++ 0x00000000203056fb 0x17 drivers/libdrivers.a(efuse.o)
+
+-.rel.dyn 0x00000000203055c4 0x0
++.rel.dyn 0x0000000020305714 0x0
+ .rel.iplt 0x0000000000000000 0x0 cpu/m0/start.o
+- 0x00000000203055c4 . = ALIGN (0x4)
++ 0x0000000020305714 . = ALIGN (0x4)
+
+-.data 0x00000000203055c4 0xd0
++.data 0x0000000020305714 0xd0
+ *(.data)
+- .data 0x00000000203055c4 0x0 cpu/m0/start.o
+- .data 0x00000000203055c4 0x0 lib/libarm.a(board.o)
+- .data 0x00000000203055c4 0x0 lib/libarm.a(string.o)
+- .data 0x00000000203055c4 0x0 drivers/libdrivers.a(uart.o)
+- .data 0x00000000203055c4 0x0 drivers/libdrivers.a(image.o)
+- .data 0x00000000203055c4 0x0 drivers/libdrivers.a(secure_verify.o)
+- .data 0x00000000203055c4 0x0 drivers/libdrivers.a(spifc_loader2.o)
+- .data 0x00000000203055c4 0x40 drivers/libdrivers.a(bbt.o)
+- .data 0x0000000020305604 0x40 drivers/libdrivers.a(sha256.o)
+- .data 0x0000000020305644 0x50 drivers/libdrivers.a(nor.o)
+- 0x0000000020305644 nor_cmd_table
+- .data 0x0000000020305694 0x0 drivers/libdrivers.a(ddr.o)
+- .data 0x0000000020305694 0x0 drivers/libdrivers.a(drv_hash.o)
+- .data 0x0000000020305694 0x0 drivers/libdrivers.a(drv_rsa.o)
+- .data 0x0000000020305694 0x0 drivers/libdrivers.a(flash.o)
+- .data 0x0000000020305694 0x0 drivers/libdrivers.a(efuse.o)
+- .data 0x0000000020305694 0x0 cpu/m0/libm0.a(cpu.o)
++ .data 0x0000000020305714 0x0 cpu/m0/start.o
++ .data 0x0000000020305714 0x0 lib/libarm.a(board.o)
++ .data 0x0000000020305714 0x0 lib/libarm.a(string.o)
++ .data 0x0000000020305714 0x0 drivers/libdrivers.a(uart.o)
++ .data 0x0000000020305714 0x0 drivers/libdrivers.a(image.o)
++ .data 0x0000000020305714 0x0 drivers/libdrivers.a(secure_verify.o)
++ .data 0x0000000020305714 0x0 drivers/libdrivers.a(spifc_loader2.o)
++ .data 0x0000000020305714 0x40 drivers/libdrivers.a(bbt.o)
++ .data 0x0000000020305754 0x40 drivers/libdrivers.a(sha256.o)
++ .data 0x0000000020305794 0x50 drivers/libdrivers.a(nor.o)
++ 0x0000000020305794 nor_cmd_table
++ .data 0x00000000203057e4 0x0 drivers/libdrivers.a(ddr.o)
++ .data 0x00000000203057e4 0x0 drivers/libdrivers.a(drv_hash.o)
++ .data 0x00000000203057e4 0x0 drivers/libdrivers.a(drv_rsa.o)
++ .data 0x00000000203057e4 0x0 drivers/libdrivers.a(flash.o)
++ .data 0x00000000203057e4 0x0 drivers/libdrivers.a(efuse.o)
++ .data 0x00000000203057e4 0x0 cpu/m0/libm0.a(cpu.o)
+
+-.igot.plt 0x0000000020305694 0x0
++.igot.plt 0x00000000203057e4 0x0
+ .igot.plt 0x0000000000000000 0x0 cpu/m0/start.o
+- 0x0000000020305694 . = ALIGN (0x4)
++ 0x00000000203057e4 . = ALIGN (0x4)
+
+ .got
+ *(.got)
+- 0x0000000020305694 . = ALIGN (0x4)
+- 0x0000000020305694 __bss_start = .
++ 0x00000000203057e4 . = ALIGN (0x4)
++ 0x00000000203057e4 __bss_start = .
+
+-.bss 0x0000000020305694 0x1e8
++.bss 0x00000000203057e4 0x1e8
+ *(.bss)
+- .bss 0x0000000020305694 0x0 cpu/m0/start.o
+- .bss 0x0000000020305694 0x4 lib/libarm.a(board.o)
+- 0x0000000020305694 zloader_entry_point
+- .bss 0x0000000020305698 0x0 lib/libarm.a(string.o)
+- .bss 0x0000000020305698 0x0 drivers/libdrivers.a(uart.o)
+- .bss 0x0000000020305698 0x0 drivers/libdrivers.a(image.o)
+- .bss 0x0000000020305698 0x104 drivers/libdrivers.a(secure_verify.o)
+- 0x0000000020305698 result
+- .bss 0x000000002030579c 0x4 drivers/libdrivers.a(spifc_loader2.o)
+- .bss 0x00000000203057a0 0x80 drivers/libdrivers.a(bbt.o)
+- .bss 0x0000000020305820 0x0 drivers/libdrivers.a(sha256.o)
+- .bss 0x0000000020305820 0x28 drivers/libdrivers.a(nor.o)
+- 0x0000000020305820 spi_nor_flash
+- 0x0000000020305824 otp_data
+- .bss 0x0000000020305848 0x0 drivers/libdrivers.a(ddr.o)
+- .bss 0x0000000020305848 0x0 drivers/libdrivers.a(drv_hash.o)
+- .bss 0x0000000020305848 0x0 drivers/libdrivers.a(drv_rsa.o)
+- .bss 0x0000000020305848 0x24 drivers/libdrivers.a(flash.o)
+- 0x0000000020305848 flash
+- .bss 0x000000002030586c 0x0 drivers/libdrivers.a(efuse.o)
+- .bss 0x000000002030586c 0x10 cpu/m0/libm0.a(cpu.o)
+- 0x000000002030586c g_tick
+- 0x000000002030587c __bss_end = .
+- 0x000000002030587c . = ALIGN (0x4)
++ .bss 0x00000000203057e4 0x0 cpu/m0/start.o
++ .bss 0x00000000203057e4 0x4 lib/libarm.a(board.o)
++ 0x00000000203057e4 zloader_entry_point
++ .bss 0x00000000203057e8 0x0 lib/libarm.a(string.o)
++ .bss 0x00000000203057e8 0x0 drivers/libdrivers.a(uart.o)
++ .bss 0x00000000203057e8 0x0 drivers/libdrivers.a(image.o)
++ .bss 0x00000000203057e8 0x104 drivers/libdrivers.a(secure_verify.o)
++ 0x00000000203057e8 result
++ .bss 0x00000000203058ec 0x4 drivers/libdrivers.a(spifc_loader2.o)
++ .bss 0x00000000203058f0 0x80 drivers/libdrivers.a(bbt.o)
++ .bss 0x0000000020305970 0x0 drivers/libdrivers.a(sha256.o)
++ .bss 0x0000000020305970 0x28 drivers/libdrivers.a(nor.o)
++ 0x0000000020305970 spi_nor_flash
++ 0x0000000020305974 otp_data
++ .bss 0x0000000020305998 0x0 drivers/libdrivers.a(ddr.o)
++ .bss 0x0000000020305998 0x0 drivers/libdrivers.a(drv_hash.o)
++ .bss 0x0000000020305998 0x0 drivers/libdrivers.a(drv_rsa.o)
++ .bss 0x0000000020305998 0x24 drivers/libdrivers.a(flash.o)
++ 0x0000000020305998 flash
++ .bss 0x00000000203059bc 0x0 drivers/libdrivers.a(efuse.o)
++ .bss 0x00000000203059bc 0x10 cpu/m0/libm0.a(cpu.o)
++ 0x00000000203059bc g_tick
++ 0x00000000203059cc __bss_end = .
++ 0x00000000203059cc . = ALIGN (0x4)
+
+-.para 0x0000000082000000 0x0 加载地址 0x000000002030587c
++.para 0x0000000082000000 0x0 加载地址 0x00000000203059cc
+ 0x0000000082000000 __para_start = .
+ *(.para)
+ 0x0000000082000000 __para_end = .
+@@ -356,22 +356,22 @@
+ .stabstr 0x0000000000000000 0x67
+ .stabstr 0x0000000000000000 0x67 cpu/m0/start.o
+
+-.debug_info 0x0000000000000000 0x6536
+- .debug_info 0x0000000000000000 0x92d lib/libarm.a(board.o)
+- .debug_info 0x000000000000092d 0x22b lib/libarm.a(string.o)
+- .debug_info 0x0000000000000b58 0x2a0 drivers/libdrivers.a(uart.o)
+- .debug_info 0x0000000000000df8 0xdd6 drivers/libdrivers.a(image.o)
+- .debug_info 0x0000000000001bce 0xb01 drivers/libdrivers.a(secure_verify.o)
+- .debug_info 0x00000000000026cf 0x1661 drivers/libdrivers.a(spifc_loader2.o)
+- .debug_info 0x0000000000003d30 0x70f drivers/libdrivers.a(bbt.o)
+- .debug_info 0x000000000000443f 0x586 drivers/libdrivers.a(sha256.o)
+- .debug_info 0x00000000000049c5 0xd5f drivers/libdrivers.a(nor.o)
+- .debug_info 0x0000000000005724 0x329 drivers/libdrivers.a(ddr.o)
+- .debug_info 0x0000000000005a4d 0x1e8 drivers/libdrivers.a(drv_hash.o)
+- .debug_info 0x0000000000005c35 0x3b4 drivers/libdrivers.a(drv_rsa.o)
+- .debug_info 0x0000000000005fe9 0x20f drivers/libdrivers.a(flash.o)
+- .debug_info 0x00000000000061f8 0x1c3 drivers/libdrivers.a(efuse.o)
+- .debug_info 0x00000000000063bb 0x17b cpu/m0/libm0.a(cpu.o)
++.debug_info 0x0000000000000000 0x663a
++ .debug_info 0x0000000000000000 0xa31 lib/libarm.a(board.o)
++ .debug_info 0x0000000000000a31 0x22b lib/libarm.a(string.o)
++ .debug_info 0x0000000000000c5c 0x2a0 drivers/libdrivers.a(uart.o)
++ .debug_info 0x0000000000000efc 0xdd6 drivers/libdrivers.a(image.o)
++ .debug_info 0x0000000000001cd2 0xb01 drivers/libdrivers.a(secure_verify.o)
++ .debug_info 0x00000000000027d3 0x1661 drivers/libdrivers.a(spifc_loader2.o)
++ .debug_info 0x0000000000003e34 0x70f drivers/libdrivers.a(bbt.o)
++ .debug_info 0x0000000000004543 0x586 drivers/libdrivers.a(sha256.o)
++ .debug_info 0x0000000000004ac9 0xd5f drivers/libdrivers.a(nor.o)
++ .debug_info 0x0000000000005828 0x329 drivers/libdrivers.a(ddr.o)
++ .debug_info 0x0000000000005b51 0x1e8 drivers/libdrivers.a(drv_hash.o)
++ .debug_info 0x0000000000005d39 0x3b4 drivers/libdrivers.a(drv_rsa.o)
++ .debug_info 0x00000000000060ed 0x20f drivers/libdrivers.a(flash.o)
++ .debug_info 0x00000000000062fc 0x1c3 drivers/libdrivers.a(efuse.o)
++ .debug_info 0x00000000000064bf 0x17b cpu/m0/libm0.a(cpu.o)
+
+ .debug_abbrev 0x0000000000000000 0x1c94
+ .debug_abbrev 0x0000000000000000 0x304 lib/libarm.a(board.o)
+@@ -390,22 +390,22 @@
+ .debug_abbrev 0x0000000000001aaf 0x11d drivers/libdrivers.a(efuse.o)
+ .debug_abbrev 0x0000000000001bcc 0xc8 cpu/m0/libm0.a(cpu.o)
+
+-.debug_loc 0x0000000000000000 0x96e6
+- .debug_loc 0x0000000000000000 0x2f4 lib/libarm.a(board.o)
+- .debug_loc 0x00000000000002f4 0x29d lib/libarm.a(string.o)
+- .debug_loc 0x0000000000000591 0x228 drivers/libdrivers.a(uart.o)
+- .debug_loc 0x00000000000007b9 0x6a2 drivers/libdrivers.a(image.o)
+- .debug_loc 0x0000000000000e5b 0x790 drivers/libdrivers.a(secure_verify.o)
+- .debug_loc 0x00000000000015eb 0xef4 drivers/libdrivers.a(spifc_loader2.o)
+- .debug_loc 0x00000000000024df 0x282 drivers/libdrivers.a(bbt.o)
+- .debug_loc 0x0000000000002761 0x5f3f drivers/libdrivers.a(sha256.o)
+- .debug_loc 0x00000000000086a0 0x80a drivers/libdrivers.a(nor.o)
+- .debug_loc 0x0000000000008eaa 0x2d8 drivers/libdrivers.a(ddr.o)
+- .debug_loc 0x0000000000009182 0x1b8 drivers/libdrivers.a(drv_hash.o)
+- .debug_loc 0x000000000000933a 0x238 drivers/libdrivers.a(drv_rsa.o)
+- .debug_loc 0x0000000000009572 0x1f drivers/libdrivers.a(flash.o)
+- .debug_loc 0x0000000000009591 0xab drivers/libdrivers.a(efuse.o)
+- .debug_loc 0x000000000000963c 0xaa cpu/m0/libm0.a(cpu.o)
++.debug_loc 0x0000000000000000 0x97b8
++ .debug_loc 0x0000000000000000 0x3c6 lib/libarm.a(board.o)
++ .debug_loc 0x00000000000003c6 0x29d lib/libarm.a(string.o)
++ .debug_loc 0x0000000000000663 0x228 drivers/libdrivers.a(uart.o)
++ .debug_loc 0x000000000000088b 0x6a2 drivers/libdrivers.a(image.o)
++ .debug_loc 0x0000000000000f2d 0x790 drivers/libdrivers.a(secure_verify.o)
++ .debug_loc 0x00000000000016bd 0xef4 drivers/libdrivers.a(spifc_loader2.o)
++ .debug_loc 0x00000000000025b1 0x282 drivers/libdrivers.a(bbt.o)
++ .debug_loc 0x0000000000002833 0x5f3f drivers/libdrivers.a(sha256.o)
++ .debug_loc 0x0000000000008772 0x80a drivers/libdrivers.a(nor.o)
++ .debug_loc 0x0000000000008f7c 0x2d8 drivers/libdrivers.a(ddr.o)
++ .debug_loc 0x0000000000009254 0x1b8 drivers/libdrivers.a(drv_hash.o)
++ .debug_loc 0x000000000000940c 0x238 drivers/libdrivers.a(drv_rsa.o)
++ .debug_loc 0x0000000000009644 0x1f drivers/libdrivers.a(flash.o)
++ .debug_loc 0x0000000000009663 0xab drivers/libdrivers.a(efuse.o)
++ .debug_loc 0x000000000000970e 0xaa cpu/m0/libm0.a(cpu.o)
+
+ .debug_aranges 0x0000000000000000 0x1e0
+ .debug_aranges
+@@ -449,53 +449,53 @@
+ .debug_ranges 0x00000000000001d8 0x28 drivers/libdrivers.a(drv_hash.o)
+ .debug_ranges 0x0000000000000200 0x38 drivers/libdrivers.a(drv_rsa.o)
+
+-.debug_line 0x0000000000000000 0x2022
+- .debug_line 0x0000000000000000 0x387 lib/libarm.a(board.o)
+- .debug_line 0x0000000000000387 0x152 lib/libarm.a(string.o)
+- .debug_line 0x00000000000004d9 0x112 drivers/libdrivers.a(uart.o)
+- .debug_line 0x00000000000005eb 0x3b8 drivers/libdrivers.a(image.o)
+- .debug_line 0x00000000000009a3 0x38e drivers/libdrivers.a(secure_verify.o)
+- .debug_line 0x0000000000000d31 0x442 drivers/libdrivers.a(spifc_loader2.o)
+- .debug_line 0x0000000000001173 0x251 drivers/libdrivers.a(bbt.o)
+- .debug_line 0x00000000000013c4 0x2bb drivers/libdrivers.a(sha256.o)
+- .debug_line 0x000000000000167f 0x2a2 drivers/libdrivers.a(nor.o)
+- .debug_line 0x0000000000001921 0x299 drivers/libdrivers.a(ddr.o)
+- .debug_line 0x0000000000001bba 0x88 drivers/libdrivers.a(drv_hash.o)
+- .debug_line 0x0000000000001c42 0x117 drivers/libdrivers.a(drv_rsa.o)
+- .debug_line 0x0000000000001d59 0x10a drivers/libdrivers.a(flash.o)
+- .debug_line 0x0000000000001e63 0x118 drivers/libdrivers.a(efuse.o)
+- .debug_line 0x0000000000001f7b 0xa7 cpu/m0/libm0.a(cpu.o)
++.debug_line 0x0000000000000000 0x205d
++ .debug_line 0x0000000000000000 0x3c2 lib/libarm.a(board.o)
++ .debug_line 0x00000000000003c2 0x152 lib/libarm.a(string.o)
++ .debug_line 0x0000000000000514 0x112 drivers/libdrivers.a(uart.o)
++ .debug_line 0x0000000000000626 0x3b8 drivers/libdrivers.a(image.o)
++ .debug_line 0x00000000000009de 0x38e drivers/libdrivers.a(secure_verify.o)
++ .debug_line 0x0000000000000d6c 0x442 drivers/libdrivers.a(spifc_loader2.o)
++ .debug_line 0x00000000000011ae 0x251 drivers/libdrivers.a(bbt.o)
++ .debug_line 0x00000000000013ff 0x2bb drivers/libdrivers.a(sha256.o)
++ .debug_line 0x00000000000016ba 0x2a2 drivers/libdrivers.a(nor.o)
++ .debug_line 0x000000000000195c 0x299 drivers/libdrivers.a(ddr.o)
++ .debug_line 0x0000000000001bf5 0x88 drivers/libdrivers.a(drv_hash.o)
++ .debug_line 0x0000000000001c7d 0x117 drivers/libdrivers.a(drv_rsa.o)
++ .debug_line 0x0000000000001d94 0x10a drivers/libdrivers.a(flash.o)
++ .debug_line 0x0000000000001e9e 0x118 drivers/libdrivers.a(efuse.o)
++ .debug_line 0x0000000000001fb6 0xa7 cpu/m0/libm0.a(cpu.o)
+
+-.debug_str 0x0000000000000000 0x160a
+- .debug_str 0x0000000000000000 0x555 lib/libarm.a(board.o)
+- 0x5cb (松开之前的大小)
+- .debug_str 0x0000000000000555 0x3f lib/libarm.a(string.o)
++.debug_str 0x0000000000000000 0x1616
++ .debug_str 0x0000000000000000 0x561 lib/libarm.a(board.o)
++ 0x5d7 (松开之前的大小)
++ .debug_str 0x0000000000000561 0x3f lib/libarm.a(string.o)
+ 0x214 (松开之前的大小)
+- .debug_str 0x0000000000000594 0xe2 drivers/libdrivers.a(uart.o)
++ .debug_str 0x00000000000005a0 0xe2 drivers/libdrivers.a(uart.o)
+ 0x253 (松开之前的大小)
+- .debug_str 0x0000000000000676 0x35b drivers/libdrivers.a(image.o)
++ .debug_str 0x0000000000000682 0x35b drivers/libdrivers.a(image.o)
+ 0x854 (松开之前的大小)
+- .debug_str 0x00000000000009d1 0x2f9 drivers/libdrivers.a(secure_verify.o)
++ .debug_str 0x00000000000009dd 0x2f9 drivers/libdrivers.a(secure_verify.o)
+ 0x61f (松开之前的大小)
+- .debug_str 0x0000000000000cca 0x3c3 drivers/libdrivers.a(spifc_loader2.o)
++ .debug_str 0x0000000000000cd6 0x3c3 drivers/libdrivers.a(spifc_loader2.o)
+ 0x6c1 (松开之前的大小)
+- .debug_str 0x000000000000108d 0x103 drivers/libdrivers.a(bbt.o)
++ .debug_str 0x0000000000001099 0x103 drivers/libdrivers.a(bbt.o)
+ 0x3fe (松开之前的大小)
+- .debug_str 0x0000000000001190 0xc3 drivers/libdrivers.a(sha256.o)
++ .debug_str 0x000000000000119c 0xc3 drivers/libdrivers.a(sha256.o)
+ 0x2b7 (松开之前的大小)
+- .debug_str 0x0000000000001253 0x1ad drivers/libdrivers.a(nor.o)
++ .debug_str 0x000000000000125f 0x1ad drivers/libdrivers.a(nor.o)
+ 0x5f3 (松开之前的大小)
+- .debug_str 0x0000000000001400 0x54 drivers/libdrivers.a(ddr.o)
++ .debug_str 0x000000000000140c 0x54 drivers/libdrivers.a(ddr.o)
+ 0x216 (松开之前的大小)
+- .debug_str 0x0000000000001454 0x87 drivers/libdrivers.a(drv_hash.o)
++ .debug_str 0x0000000000001460 0x87 drivers/libdrivers.a(drv_hash.o)
+ 0x25a (松开之前的大小)
+- .debug_str 0x00000000000014db 0x79 drivers/libdrivers.a(drv_rsa.o)
++ .debug_str 0x00000000000014e7 0x79 drivers/libdrivers.a(drv_rsa.o)
+ 0x29c (松开之前的大小)
+- .debug_str 0x0000000000001554 0x12 drivers/libdrivers.a(flash.o)
++ .debug_str 0x0000000000001560 0x12 drivers/libdrivers.a(flash.o)
+ 0x2a8 (松开之前的大小)
+- .debug_str 0x0000000000001566 0x20 drivers/libdrivers.a(efuse.o)
++ .debug_str 0x0000000000001572 0x20 drivers/libdrivers.a(efuse.o)
+ 0x255 (松开之前的大小)
+- .debug_str 0x0000000000001586 0x84 cpu/m0/libm0.a(cpu.o)
++ .debug_str 0x0000000000001592 0x84 cpu/m0/libm0.a(cpu.o)
+ 0x1f8 (松开之前的大小)
+
+ .debug_frame 0x0000000000000000 0xaf0
+diff --git a/Uboot/cp/ps/driver/inc/misc/drvs_voiceprocess.h b/Uboot/cp/ps/driver/inc/misc/drvs_voiceprocess.h
+index 67cc84d..acceb20 100755
+--- a/Uboot/cp/ps/driver/inc/misc/drvs_voiceprocess.h
++++ b/Uboot/cp/ps/driver/inc/misc/drvs_voiceprocess.h
+@@ -283,6 +283,10 @@
+ BOOL firstRegZCATFlag; //25
+ T_Hal_EcallData ecallData;//26
+ UINT8 voice_nv_update;//27
++ UINT8 useVoiceBuffer; // 0 not use,1 use
++ UINT8 voiceBufferType; //0 single core, 1 dual core
++
++
+ } T_zDrvVoice_GbVar; //T_zDrvVoice_GbVar
+
+ typedef struct
+diff --git a/Uboot/cp/ps/driver/src/chipsets/src/audio_base/audio_config/audioRef_cfg.c b/Uboot/cp/ps/driver/src/chipsets/src/audio_base/audio_config/audioRef_cfg.c
+index 7489d52..20c1ddc 100755
+--- a/Uboot/cp/ps/driver/src/chipsets/src/audio_base/audio_config/audioRef_cfg.c
++++ b/Uboot/cp/ps/driver/src/chipsets/src/audio_base/audio_config/audioRef_cfg.c
+@@ -25,6 +25,7 @@
+ #include "drvs_general.h"
+ #include "drvs_i2s.h"
+ #include "drvs_voiceprocess.h"
++#include "hal_voiceprocess.h"
+ #include "drvs_voice_config.h"
+ #include "drvs_i2c.h"
+ #include "NvParam_drv.h"
+@@ -132,7 +133,7 @@
+
+ //#define AUDIO_USE_FIXED_ADDRESS
+
+-#define VP_INOUT_BAK_BUFFER_SIZE 0x30000 // 0x60000
++//#define VP_INOUT_BAK_BUFFER_SIZE 0x30000 // 0x60000
+ #define VP_INOUT_NOBAK_BUFSIZE 640
+
+ /**************************************************************************
+@@ -595,7 +596,8 @@
+ //ret = zDrvNand_Read(OS_FLASH_VOICE_DRV_RW_NONFAC_BASE_ADDR, sizeof(audionvflag), ((UINT8 *)(&audionvflag)));
+ ret = zOss_NvItemRead(OS_FLASH_VOICE_DRV_RW_NONFAC_BASE_ADDR, ((UINT8 *)(&audionvflag)), sizeof(audionvflag));
+
+- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, " zDrvVoiceConfig_Init zOss_NvItemRead isVpParamInNv=%d,isUseSlicCodec=%d!\n", audionvflag.isVpParamInNv, audionvflag.isUseSlicCodec);
++
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, " zDrvVoiceConfig_Init zOss_NvItemRead isVpParamInNv=%d,isUseSlicCodec=%d,isUseVoiceProc=%d,isUseTdm=%d,isUseEcall=%d!\n", audionvflag.isVpParamInNv, audionvflag.isUseSlicCodec,audionvflag.isUseVoiceProc,audionvflag.isUseTdm,audionvflag.isUseEcall);
+ //hal_TestTopI2sConfig();
+
+ if (ret != DRV_SUCCESS)
+diff --git a/Uboot/cp/ps/driver/src/chipsets/src/audio_base/audio_lib/amr/lib/armv7-a/GCC/amr.a b/Uboot/cp/ps/driver/src/chipsets/src/audio_base/audio_lib/amr/lib/armv7-a/GCC/amr.a
+index 01399c1..187ec92 100755
+--- a/Uboot/cp/ps/driver/src/chipsets/src/audio_base/audio_lib/amr/lib/armv7-a/GCC/amr.a
++++ b/Uboot/cp/ps/driver/src/chipsets/src/audio_base/audio_lib/amr/lib/armv7-a/GCC/amr.a
+Binary files differ
+diff --git a/Uboot/cp/ps/driver/src/chipsets/src/audio_base/audiointf/hal_audextintf.c b/Uboot/cp/ps/driver/src/chipsets/src/audio_base/audiointf/hal_audextintf.c
+index dff7364..db57346 100755
+--- a/Uboot/cp/ps/driver/src/chipsets/src/audio_base/audiointf/hal_audextintf.c
++++ b/Uboot/cp/ps/driver/src/chipsets/src/audio_base/audiointf/hal_audextintf.c
+@@ -193,6 +193,40 @@
+ {
+ return g_voiceVar.muteEn;
+ }
++
++int zDrvVp_SetVoiceProc_Wrap(int val)
++{
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "%s: val=%d !\n",__func__,val);
++
++ g_voiceVar.audio_ctrlFlag.isUseVoiceProc = val;
++ return DRV_SUCCESS;
++}
++
++int zDrvVp_GetVoiceProc_Wrap(void)
++{
++ return g_voiceVar.audio_ctrlFlag.isUseVoiceProc;
++}
++
++int zDrvVp_SetVoiceBuffer_Wrap(int en,int type)
++{
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "%s: en=%d,type=%d !\n",__func__,en,type);
++
++ g_voiceVar.useVoiceBuffer = en;
++ g_voiceVar.voiceBufferType = type;
++ return DRV_SUCCESS;
++}
++
++void zDrvVp_GetVoiceBuffer_Wrap(int *en,int *type)
++{
++ if((en!=NULL)&&(type!=NULL)){
++ *en = g_voiceVar.useVoiceBuffer;
++ *type = g_voiceVar.voiceBufferType;
++
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "%s: en=%d,type=%d !\n",__func__,*type,*en);
++ }
++}
++
++
+ SINT32 zDrvVp_SetRxMute_Wrap(int enable)
+ {
+ return zDrvVp_SetRxMute(enable, VOICE_DOWNLINK);
+diff --git a/Uboot/cp/ps/driver/src/chipsets/src/audio_base/audiointf/voice_procintf.c b/Uboot/cp/ps/driver/src/chipsets/src/audio_base/audiointf/voice_procintf.c
+index 2f0e803..5146753 100755
+--- a/Uboot/cp/ps/driver/src/chipsets/src/audio_base/audiointf/voice_procintf.c
++++ b/Uboot/cp/ps/driver/src/chipsets/src/audio_base/audiointf/voice_procintf.c
+@@ -15,6 +15,10 @@
+ * Include files
+ ****************************************************************************/
+ #include "drvs_general.h"
++
++#include "drvs_volte.h"
++#include "drvs_voiceprocess.h"
++
+ #include "drvs_ramlog.h"
+ #include <oss_clib.h>
+ #include <oss_kernel.h>
+@@ -73,8 +77,12 @@
+
+ g_voiceVar.isUseSlicCodec = g_voiceVar.audio_ctrlFlag.isUseSlicCodec;
+ g_voiceVar.g_isUseTdm = g_voiceVar.audio_ctrlFlag.isUseTdm;
++
++ g_voiceVar.useVoiceBuffer = g_voiceVar.audio_ctrlFlag.isUseVoiceBuffer; // 0 not use,1 use
++ g_voiceVar.voiceBufferType = g_voiceVar.audio_ctrlFlag.selVoiceBufferType;//0 single core, 1 dual core
+
+- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, " VoiceProc_InitNvParam isUseVoiceProc=%d,isUseSlicCodec=%d,isUseTdm=%d!\n", g_voiceVar.audio_ctrlFlag.isUseVoiceProc, g_voiceVar.isUseSlicCodec, g_voiceVar.audio_ctrlFlag.isUseTdm);
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, " VoiceProc_InitNvParam isUseVoiceProc=%d,isUseSlicCodec=%d,isUseTdm=%d,useVoiceBuffer=%d,voiceBufferType=%d!\n", g_voiceVar.audio_ctrlFlag.isUseVoiceProc, \
++ g_voiceVar.isUseSlicCodec, g_voiceVar.audio_ctrlFlag.isUseTdm,g_voiceVar.useVoiceBuffer,g_voiceVar.voiceBufferType);
+ if (g_voiceVar.audio_ctrlFlag.isUseVoiceProc == 1)
+ {
+ #ifdef _USE_NXP_AUD
+diff --git a/Uboot/cp/ps/driver/src/chipsets/src/audio_base/i2s/hal_i2s.c b/Uboot/cp/ps/driver/src/chipsets/src/audio_base/i2s/hal_i2s.c
+index 983a92a..5ea7c1d 100755
+--- a/Uboot/cp/ps/driver/src/chipsets/src/audio_base/i2s/hal_i2s.c
++++ b/Uboot/cp/ps/driver/src/chipsets/src/audio_base/i2s/hal_i2s.c
+@@ -4322,6 +4322,37 @@
+ */
+ VOID vp_SetTopI2sConfig(VOID)
+ {
++
++
++UINT32 AmrRegBit = 0;
++
++if (g_voiceVar.useVoiceBuffer == 1){
++
++
++
++ /* inter loop */
++ AmrRegBit = ARM_I2S_LOOP_CFG;
++
++ AmrRegBit &= 0xfffffe07;
++ AmrRegBit |= 0x000000a8; /* 0x000000a8 loop dsp afe(loop i2s1)--arm i2s2(loop i2s2) 0x00000150 loop dsp arm(loop i2s1)--afe i2s2(loop i2s2)*/
++
++ ARM_I2S_LOOP_CFG = AmrRegBit;
++
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_SetTopI2sConfig ARM_I2S_LOOP_CFG=0x%x\n", ARM_I2S_LOOP_CFG);
++}
++#ifdef CONFIG_VOICE_BUFFER_DRV
++ /* inter loop */
++ AmrRegBit = ARM_I2S_LOOP_CFG;
++
++ AmrRegBit &= 0xfffffe07;
++ AmrRegBit |= 0x000000a8; /* 0x000000a8 loop dsp afe(loop i2s1)--arm i2s2(loop i2s2) 0x00000150 loop dsp arm(loop i2s1)--afe i2s2(loop i2s2)*/
++
++ ARM_I2S_LOOP_CFG = AmrRegBit;
++
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_SetTopI2sConfig ARM_I2S_LOOP_CFG=0x%x\n", ARM_I2S_LOOP_CFG);
++
++#endif
++
+ #if 0
+ UINT32 AmrRegBit = 0;
+ int ret;
+diff --git a/Uboot/cp/ps/driver/src/chipsets/src/audio_base/include/hal_voicebuffer.h b/Uboot/cp/ps/driver/src/chipsets/src/audio_base/include/hal_voicebuffer.h
+new file mode 100755
+index 0000000..a9fbd34
+--- /dev/null
++++ b/Uboot/cp/ps/driver/src/chipsets/src/audio_base/include/hal_voicebuffer.h
+@@ -0,0 +1,107 @@
++/*******************************************************************************
++ * Copyright (C) 2007, ZTE Corporation.
++ *
++ * File Name: hal_voicebuffer.h
++ * File Mark:
++* Description: Provide voicebuffer hal function prototype declaration and type declaration.
++ * Others:
++ * Version: V0.5
++ * Author: xxq
++ * Date: 2024-07-11
++ * History 1:
++ * Date:
++ * Version:
++ * Author:
++ * Modification: add mute/read/write/loopback.
++ * History 2:
++ ********************************************************************************/
++
++#ifndef _HAL_VOICEBUFFER_H
++#define _HAL_VOICEBUFFER_H
++
++
++/****************************************************************************
++* Include files
++****************************************************************************/
++
++
++/****************************************************************************
++* Macros
++****************************************************************************/
++#define VP_BUF_LENGTH 0x7FF80 //0xFFD80 //0x7FE40 //0x4df80// (0.5M 0x80000)
++#define VP_FRAME_BUFFER_SIZE 320 //20ms 800KHZ
++#define VP_I2S_BUFFER_SIZE 320
++#define VOICE_SYNC_TIMEOUT_TIME 100
++
++ //#define VP_INOUT_BAK_BUFFER_SIZE 0x30000 // 0x60000
++#define VP_INOUT_NOBAK_BUFSIZE 640
++#define VB_MAX_INT 0x7fffffff
++#define VB_MIN_INT 0 //(0-2<<31)//0x80000000
++
++#define VB_INT_OVERFLOW(x) if((x < VB_MIN_INT)||(x > VB_MAX_INT)) x = 0;
++
++#define RPMSG_CAP_ID 1
++
++#define MAX_BUF_SIZE 640
++#define MAX_BUF_NUM 3
++
++/****************************************************************************
++* Types
++****************************************************************************/
++
++
++
++enum{
++ UP_LINK,
++ DOWN_LINK
++};
++
++struct voice_ring_buffer {
++ volatile uint read_pos;
++ volatile uint write_pos;
++ volatile char data[];
++
++};
++
++
++/****************************************************************************
++* Constants
++****************************************************************************/
++
++/****************************************************************************
++* Global Variables
++****************************************************************************/
++
++/****************************************************************************
++* Function Prototypes
++****************************************************************************/
++
++SINT32 vp_Open_Vbuffer(void);
++
++SINT32 vp_Close_Vbuffer(void);
++
++SINT32 vp_VoiceI2sStart_Vbuffer(VOID);
++
++VOID vp_VoiceI2sStop_Vbuffer(VOID);
++
++SINT32 zDrvVp_VoiceWorkStop_Vbuffer(VOID);
++
++SINT32 vp_VolteReadStart_Vbuffer(VOID);
++//whole replace
++SINT32 vp_VolteReadStop_Vbuffer(VOID);
++
++SINT32 vp_VolteWriteStart_Vbuffer(VOID);
++//whole replace
++SINT32 vp_VolteWriteStop_Vbuffer(VOID);
++
++SINT32 vp_WriteDataToCodec_Vbuffer(UINT8 *pBuf, UINT32 count);
++
++SINT32 vp_ReadDataFromCodec_Vbuffer(UINT8 *pBuf, UINT32 count);
++
++SINT32 vp_CreateThreadSemaph_Vbuffer(VOID);
++
++
++
++
++#endif/*_HAL_VOICEBUFFER_H*/
++
+diff --git a/Uboot/cp/ps/driver/src/chipsets/src/audio_base/include/hal_voiceprocess.h b/Uboot/cp/ps/driver/src/chipsets/src/audio_base/include/hal_voiceprocess.h
+index 371297d..810e12c 100755
+--- a/Uboot/cp/ps/driver/src/chipsets/src/audio_base/include/hal_voiceprocess.h
++++ b/Uboot/cp/ps/driver/src/chipsets/src/audio_base/include/hal_voiceprocess.h
+@@ -23,14 +23,42 @@
+ * Include files *
+ **************************************************************************/
+
++
++/****************************************************************************
++* Local Types
++****************************************************************************/
++
++typedef enum
++{
++ VBUF_SEM = 0,//voice buffer
++ ECALL_SEM,
++ SEM_MAX
++} T_Sem_Owner;
++
++typedef enum
++{
++ DIR_RX,
++ DIR_TX,
++ DIR_ALL,
++ DIR_MAX
++} T_Data_Dir_Type;
++
++
+ /**************************************************************************
+ * Macro *
+ **************************************************************************/
++#define VP_INOUT_BAK_BUFFER_SIZE 0x30000 // 0x60000
++
++//#define TEST_WHITE_NOISE
++
++//#define VB_DATA_LOSS_TEST
++
++
+ #if 0
+ #define VOICE_TONE_MIXER_FUNCTION
+ //#define TEST_WHITE_NOISE
+
+-
++#endif
+
+ /****************************************************************************
+ * Global Constants *
+@@ -47,6 +75,7 @@
+ /****************************************************************************
+ * Function Prototypes *
+ ****************************************************************************/
++#if 0
+ typedef enum
+ {
+ VP_I2S_IDLE = 0,
+@@ -60,6 +89,13 @@
+ /**************************************************************************
+ * Function Prototypes *
+ **************************************************************************/
++#ifdef ECALL_SUPPORT
++
++
++SINT32 update_ecall_state(T_Data_Dir_Type dir);
++
++
++#endif
+
+
+
+diff --git a/Uboot/cp/ps/driver/src/chipsets/src/audio_base/nxp/hal_nxp.c b/Uboot/cp/ps/driver/src/chipsets/src/audio_base/nxp/hal_nxp.c
+new file mode 100755
+index 0000000..3dfed2e
+--- /dev/null
++++ b/Uboot/cp/ps/driver/src/chipsets/src/audio_base/nxp/hal_nxp.c
+@@ -0,0 +1,1099 @@
++/*******************************************************************************
++ * Copyright (C) 2007, ZTE Corporation.
++ *
++ * File Name:
++ * File Mark:
++ * Description:
++ * Others:
++ * Version:
++ * Author: lvwenhua
++ * Date: 2011-8-24
++ * History 1:
++ * Date: 2016-2-16
++ * Version:
++ * Author:xuxinqiang
++ * Modification: edit for union version
++ * History 2:
++ ********************************************************************************/
++
++/****************************************************************************
++* Include files
++****************************************************************************/
++#include "drvs_general.h"
++#include "NvParam_drv.h"
++
++#ifdef _OS_TOS
++#include "./tos/LVVE.h"
++#include "./tos/PARAM_Default.h"
++#include "./tos/nxp_DrvNvData.h"
++
++#elif defined _OS_LINUX
++#include "./uclinux/LVVE.h"
++#include "./uclinux/PARAM_Default.h"
++#include "./uclinux/nxp_DrvNvData.h"
++
++#else
++#include "LVVE.h"
++#include "PARAM_Default.h"
++#include "nxp_DrvNvData.h"
++#endif
++
++#include "drvs_voiceprocess.h"
++#include "drvs_ramlog.h"
++
++#include "hal_audiointf.h"
++#include "RWNvConfig.h"
++
++/****************************************************************************
++* Local Macros
++****************************************************************************/
++#define MAX_BLK_SIZE 400 /* Maximum possible block size */
++#define LVVE_NUM_OF_SAMPLES 160
++#define VP_PARAM_IS_IN_NV 1
++
++/****************************************************************************
++* Global Constants
++****************************************************************************/
++//extern BOOL g_vpMuteEn;
++//extern UINT8 g_voiceInGsmTdMode;
++//extern UINT8 g_voiceInVolteMode;
++//extern UINT8 g_volteIsWb;
++//extern UINT8 g_isUseSlicCodec;
++extern T_zDrvVoice_GbVar g_voiceVar;
++static BOOL g_nxpIsOpen = FALSE;
++
++
++/****************************************************************************
++* Global Variables
++****************************************************************************/
++LVM_INT32 InBuffer16_Tx_FE[MAX_BLK_SIZE]; /* Stereo, 16-bit aligned input buffer */
++LVM_INT16 pNoiseData[4];
++
++LVM_MemoryTable_st MemoryTable_Tx = {0}; /* Module memory table */
++LVM_MemoryTable_st MemoryTable_Rx = {0}; /* Module memory table */
++LVVE_Tx_Handle_t hInstance_Tx = LVM_NULL; /* Module instance handle */
++LVVE_Rx_Handle_t hInstance_Rx = LVM_NULL; /* Module instance handle */
++
++#define NUM_VOL_RX (5) /* Number of Rx volumes */
++
++//LVM_CHAR LVVE_Tx_Preset_Buffer[LVVE_TX_PRESET_LENGTH]; /* Byte buffer */
++LVVE_Tx_Preset_t LVVE_Tx_Preset ; /* Preset buffer */
++//LVM_CHAR LVVE_Rx_Preset_Buffer[NUM_VOL_RX*LVVE_RX_PRESET_LENGTH]; /* Byte buffer */
++LVVE_Rx_Preset_t LVVE_Rx_Preset ; /* Preset buffer */
++//LVM_CHAR LVVE_Tx_Preset_Buffer_Volte[LVVE_TX_PRESET_LENGTH]; /* Byte buffer */
++//LVM_CHAR LVVE_Rx_Preset_Buffer_Volte[NUM_VOL_RX*LVVE_RX_PRESET_LENGTH]; /* Byte buffer */
++
++T_Audio_NvParam g_audioNvParam = {0};
++
++static LVM_UINT32 NumBytesReadRx; /* Number of bytes in the preset file RX*/
++static LVM_UINT32 NumBytesReadTx; /* Number of bytes in the preset file TX*/
++
++static BOOL isFirstTxProcessErr = TRUE;
++static BOOL isFirstRxProcessErr = TRUE;
++/****************************************************************************
++* Global Function Prototypes
++****************************************************************************/
++//T_ZDrv_VoiceOutputPath s_vpPathout;
++//T_ZDrvVoice_OutputVolLevel s_vpVolout;
++
++UINT32 zOss_NvItemRead(UINT32 NvItemID, UINT8 *NvItemData, UINT32 NvItemLen);
++UINT32 zOss_NvItemWrite(UINT32 NvItemID, UINT8 *NvItemData, UINT32 NvItemLen);
++
++/****************************************************************************
++* Function Definitions
++****************************************************************************/
++SINT32 Vp_NxpInitNvParam(VOID)
++{
++ SINT32 ret = DRV_SUCCESS;
++ SINT32 i = 0;
++
++ LVVE_VersionInfo pVersion; /* version information */
++ LVVE_GetVersionInfo(&pVersion);
++
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "nxp Version %s\n", pVersion.VersionNumber);
++#if 0
++ ret = zOss_NvItemRead(OS_FLASH_VOICE_DRV_RW_NONFAC_BASE_ADDR, ((UINT8 *)(&g_audioNvParam.audio_ctrlFlag)), sizeof(g_audioNvParam.audio_ctrlFlag));
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Vp_NxpInitNvParam voice flag baseAdd=0x%x, ret =%d ,isVpParamInNv= %d \n", (OS_FLASH_VOICE_DRV_RW_NONFAC_BASE_ADDR), \
++ ret, g_audioNvParam.audio_ctrlFlag.isVpParamInNv);
++
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Vp_NxpInitNvParam voiceflag isVpParamInNv=%d,isUseSlicCodec=%d,isUseVoiceProc=%d,isUseCodecDsp=%d,isUseNvWrite=%d \n", \
++ g_audioNvParam.audio_ctrlFlag.isVpParamInNv, g_audioNvParam.audio_ctrlFlag.isUseSlicCodec, g_audioNvParam.audio_ctrlFlag.isUseVoiceProc, \
++ g_audioNvParam.audio_ctrlFlag.isUseCodecDsp, g_audioNvParam.audio_ctrlFlag.isUseNvWrite);
++
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Vp_NxpInitNvParam the g_audioNvParam size=%d,audio_ctrlFlag size=%d\n", \
++ sizeof(g_audioNvParam), sizeof(g_audioNvParam.audio_ctrlFlag));
++
++ g_voiceVar.audio_ctrlFlag = g_audioNvParam.audio_ctrlFlag;
++ g_voiceVar.isUseSlicCodec = g_audioNvParam.audio_ctrlFlag.isUseSlicCodec;
++ g_voiceVar.g_isUseTdm = g_audioNvParam.audio_ctrlFlag.isUseTdm;
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, " Vp_NxpInitNvParam g_voiceVar.isUseSlicCodec=%d, g_voiceVar.g_isUseTdm=%d!\n", g_voiceVar.isUseSlicCodec, g_voiceVar.g_isUseTdm);
++#endif
++
++ g_audioNvParam.audio_ctrlFlag = g_voiceVar.audio_ctrlFlag;
++#if 0
++ if (g_audioNvParam.audio_ctrlFlag.isVpParamInNv == 1)
++ {
++ ret = zOss_NvItemRead(OS_FLASH_VOICE_RW_NONFAC_BASE_ADDR, ((UINT8 *)(&g_audioNvParam.vpNxpParamFile)), sizeof(g_audioNvParam.vpNxpParamFile));
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Vp_NxpInitNvParam Read audio nv param base add=0x%x,vpNxpParamFile size=%d \n", \
++ (OS_FLASH_VOICE_RW_NONFAC_BASE_ADDR), sizeof(g_audioNvParam.vpNxpParamFile));
++
++ }
++ else
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Vp_NxpInitNvParam Set all path to the default param, txbuffer size=%d, rxbuffer size=%d \n", sizeof(LVVE_Tx_Preset_Buffer_Voice_Tool), sizeof(LVVE_Rx_Preset_Buffer_Voice_Tool));
++ // Vp_Nxp_Param_File.LVVE_Tx_File_Buffer=LVVE_Tx_Preset_Buffer_Voice_Tool;
++ //Vp_Nxp_Param_File.LVVE_Rx_File_Buffer=LVVE_Rx_Preset_Buffer_Voice_Tool;
++ for (i = 0; i < AUDIO_MAX_VP_PATH; i++)
++ {
++ zOss_Memcpy(g_audioNvParam.vpNxpParamFile.vpNxpPathParam[i].nxpTxFileBuffer, LVVE_Tx_Preset_Buffer_Voice_Tool, sizeof(LVVE_Tx_Preset_Buffer_Voice_Tool));
++ zOss_Memcpy(g_audioNvParam.vpNxpParamFile.vpNxpPathParam[i].nxpRxFileBuffer, LVVE_Rx_Preset_Buffer_Voice_Tool, sizeof(LVVE_Rx_Preset_Buffer_Voice_Tool));
++ }
++ zOss_Memcpy(g_audioNvParam.vpNxpParamFile.nxpTxNbMuteBuffer, LVVE_Tx_Mute_File_Buffer, sizeof(LVVE_Tx_Mute_File_Buffer));
++ zOss_Memcpy(g_audioNvParam.vpNxpParamFile.nxpTxWbMuteBuffer, LVVE_Tx_Wb_Mute_File_Buffer, sizeof(LVVE_Tx_Wb_Mute_File_Buffer));
++ }
++#endif
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Vp_NxpInitNvParam is over \n");
++
++ return ret;
++}
++
++SINT32 Vp_NxpOpen(UINT32 fs)
++{
++
++ LVVE_Tx_InstanceParams_st InstanceParams_Tx; /* Instance parameters */
++ LVVE_Rx_InstanceParams_st InstanceParams_Rx; /* Instance parameters */
++ LVVE_ReturnStatus_en LVVE_Status; /* Module status return */
++ LVM_INT32 i, ret = 0; /* Index variable */
++
++ if (g_nxpIsOpen == TRUE)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "nxp already opened! \n");
++ return DRV_SUCCESS;
++ }
++
++ if (fs == 8000)
++ {
++
++ InstanceParams_Rx.SampleRate = LVM_FS_8000;
++ InstanceParams_Rx.EQ_InstParams.EQ_MaxLength = LVVE_MAX_EQ_LENGTH_NB;
++ InstanceParams_Tx.SampleRate = LVM_FS_8000;
++ InstanceParams_Tx.MaxBulkDelay = LVVE_MAX_BULK_DELAY;
++ InstanceParams_Tx.EQ_InstParams.EQ_MaxLength = LVVE_MAX_EQ_LENGTH_NB;
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Vp_NxpOpen confg NB param! \n", fs);
++ }
++ else if (fs == 16000)
++ {
++ InstanceParams_Rx.SampleRate = LVM_FS_16000;
++ InstanceParams_Rx.EQ_InstParams.EQ_MaxLength = LVVE_MAX_EQ_LENGTH_WB;
++ InstanceParams_Tx.SampleRate = LVM_FS_16000;
++ InstanceParams_Tx.MaxBulkDelay = LVVE_MAX_BULK_DELAY;
++ InstanceParams_Tx.EQ_InstParams.EQ_MaxLength = LVVE_MAX_EQ_LENGTH_WB;
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Vp_NxpOpen confg WB param ! \n", fs);
++ }
++ else
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Vp_NxpOpen nxp the fs=%d not support! \n", fs);
++ return DRV_ERROR;
++ }
++
++ /******************************************************************************
++ Allocate memory
++ *******************************************************************************/
++ /*
++ * Get the memory requirements for the Tx Module
++ */
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "before LVVE_Tx_GetMemoryTable\n");
++
++ LVVE_Status = LVVE_Tx_GetMemoryTable(LVM_NULL,
++ &MemoryTable_Tx,
++ &InstanceParams_Tx);
++
++ if (LVVE_Status == LVVE_NULLADDRESS)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Parameter error - null pointer error returned by LVVE_Tx_GetMemoryTable\n");
++ return DRV_ERROR;
++ }
++ if (LVVE_Status == LVVE_OUTOFRANGE)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Parameter error - out of range error returned by LVVE_Tx_GetMemoryTable\n");
++ return DRV_ERROR;
++ }
++
++ /*
++ * Allocate the memory for the Tx module
++ */
++ for (i = 0; i < LVM_NR_MEMORY_REGIONS; i++)
++ {
++ if (MemoryTable_Tx.Region[i].Size != 0)
++ {
++ MemoryTable_Tx.Region[i].pBaseAddress = zOss_Malloc(MemoryTable_Tx.Region[i].Size);
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Nxp tx malloc size = %d", MemoryTable_Tx.Region[i].Size);
++
++ if (MemoryTable_Tx.Region[i].pBaseAddress == LVM_NULL)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Failed to allocate %d bytes for region %d\n", (LVM_INT16)MemoryTable_Tx.Region[i].Size, (LVM_INT16)i);
++ }
++ }
++
++ }
++
++ /*
++ * Get the memory requirements for the Rx Module
++ */
++
++ LVVE_Status = LVVE_Rx_GetMemoryTable(LVM_NULL,
++ &MemoryTable_Rx,
++ &InstanceParams_Rx);
++ if (LVVE_Status == LVVE_NULLADDRESS)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Parameter error - null pointer error returned by LVVE_Rx_GetMemoryTable\n");
++ return DRV_ERROR;
++ }
++ if (LVVE_Status == LVVE_OUTOFRANGE)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Parameter error - out of range error returned by LVVE_Rx_GetMemoryTable\n");
++ return DRV_ERROR;
++ }
++
++ /*
++ * Allocate the memory for the Rx module
++ */
++ for (i = 0; i < LVM_NR_MEMORY_REGIONS; i++)
++ {
++ if (MemoryTable_Rx.Region[i].Size != 0)
++ {
++ MemoryTable_Rx.Region[i].pBaseAddress = zOss_Malloc(MemoryTable_Rx.Region[i].Size);
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Nxp rx malloc size = %d\n", MemoryTable_Rx.Region[i].Size);
++
++ if (MemoryTable_Rx.Region[i].pBaseAddress == LVM_NULL)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Failed to allocate %d bytes for region %d\n", (LVM_INT16)MemoryTable_Rx.Region[i].Size, (LVM_INT16)i);
++ }
++ }
++ }
++
++ /*
++ * Allocate the memory for the noise data buffer (2*LVVE_NUM_OF_SAMPLES)
++ */
++
++ hInstance_Tx = LVM_NULL; /* Initialise to NULL */
++ LVVE_Status = LVVE_Tx_GetInstanceHandle(&hInstance_Tx, /* Init sets the instance handle */
++ &MemoryTable_Tx,
++ &InstanceParams_Tx);
++
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "LVVE_Tx_GetInstanceHandle LVVE_Status=%d\n", LVVE_Status);
++ if (LVVE_Status == LVVE_NULLADDRESS)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Parameter error - null pointer error returned by LVVE_Tx_GetInstanceHandle\n");
++ return DRV_ERROR;
++ }
++ if (LVVE_Status == LVVE_OUTOFRANGE)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Parameter error - out of range error returned by LVVE_Tx_GetInstanceHandle\n");
++ return DRV_ERROR;
++ }
++
++ hInstance_Rx = LVM_NULL; /* Initialise to NULL */
++ LVVE_Status = LVVE_Rx_GetInstanceHandle(&hInstance_Rx, /* Init sets the instance handle */
++ &MemoryTable_Rx,
++ &InstanceParams_Rx);
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "LVVE_Rx_GetInstanceHandle LVVE_Status=%d\n", LVVE_Status);
++ if (LVVE_Status == LVVE_NULLADDRESS)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Parameter error - null pointer error returned by LVVE_Rx_GetInstanceHandle\n");
++ return DRV_ERROR;
++ }
++ if (LVVE_Status == LVVE_OUTOFRANGE)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Parameter error - out of range error returned by LVVE_Rx_GetInstanceHandle\n");
++ return DRV_ERROR;
++ }
++ LVM_UINT32 nxpParamSize = 0, nxpParamOffset = 0;
++
++ nxpParamSize = 4 * (LVWM_TX_FILE_SIZE + LVWM_RX_FILE_SIZE);
++
++ g_audioNvParam.s_nxpPathParam = zOss_Malloc(nxpParamSize);
++ if (g_audioNvParam.s_nxpPathParam == NULL)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Failed to allocate g_audioNvParam.s_nxpPathParam\n");
++ return DRV_ERROR;
++ }
++
++ g_audioNvParam.s_nxpTxNbMuteParam = zOss_Malloc(2 * LVWM_TX_FILE_SIZE);
++ if (g_audioNvParam.s_nxpTxNbMuteParam == NULL)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Failed to allocate g_audioNvParam.s_nxpTxNbMuteParam\n");
++ return DRV_ERROR;
++ }
++ g_audioNvParam.s_nxpTxWbMuteParam = g_audioNvParam.s_nxpTxNbMuteParam + LVWM_TX_FILE_SIZE;
++
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Vp_NxpOpen s_nxpPathParam=%p,s_nxpTxNbMuteParam=%p\n", g_audioNvParam.s_nxpPathParam, g_audioNvParam.s_nxpTxNbMuteParam);
++ if (g_audioNvParam.audio_ctrlFlag.isVpParamInNv == 1)
++ {
++ if (g_voiceVar.voiceMode == VOICE_GSM_MODE)
++ {
++ nxpParamOffset = 0;
++ }
++ else if ((g_voiceVar.voiceMode == VOICE_WCDMA_MODE) || (g_voiceVar.voiceMode == VOICE_TD_MODE))
++ {
++ if (g_voiceVar.volteIsWb != 1)
++ {
++ nxpParamOffset = nxpParamSize;
++ }
++ else
++ {
++ nxpParamOffset = 2 * nxpParamSize;
++ }
++ }
++ else if (g_voiceVar.voiceMode == VOICE_LTE_MODE)
++ {
++ if (g_voiceVar.volteIsWb != 1)
++ {
++ nxpParamOffset = 3 * nxpParamSize;
++ }
++ else
++ {
++ nxpParamOffset = 4 * nxpParamSize;
++ }
++ }
++
++ ret = zOss_NvItemRead(OS_FLASH_VOICE_RW_NONFAC_BASE_ADDR + nxpParamOffset, g_audioNvParam.s_nxpPathParam, nxpParamSize);
++
++ nxpParamOffset = 5 * nxpParamSize;
++ ret = zOss_NvItemRead(OS_FLASH_VOICE_RW_NONFAC_BASE_ADDR + nxpParamOffset, g_audioNvParam.s_nxpTxNbMuteParam, 2 * LVWM_TX_FILE_SIZE);
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Vp_NxpInitNvParam Read audio nv param base add=0x%x,vpNxpParamFile size=%d \n", \
++ (OS_FLASH_VOICE_RW_NONFAC_BASE_ADDR + nxpParamOffset), nxpParamSize);
++
++ }
++ else
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Vp_NxpInitNvParam Set all path to the default param, txbuffer size=%d, rxbuffer size=%d \n", sizeof(LVVE_Tx_Preset_Buffer_Voice_Tool), sizeof(LVVE_Rx_Preset_Buffer_Voice_Tool));
++ // Vp_Nxp_Param_File.LVVE_Tx_File_Buffer=LVVE_Tx_Preset_Buffer_Voice_Tool;
++ //Vp_Nxp_Param_File.LVVE_Rx_File_Buffer=LVVE_Rx_Preset_Buffer_Voice_Tool;
++ for (i = 0; i < 4; i++)
++ {
++ zOss_Memcpy(g_audioNvParam.s_nxpPathParam + i * (LVWM_TX_FILE_SIZE + LVWM_RX_FILE_SIZE), LVVE_Tx_Preset_Buffer_Voice_Tool, sizeof(LVVE_Tx_Preset_Buffer_Voice_Tool));
++ zOss_Memcpy(g_audioNvParam.s_nxpPathParam + LVWM_TX_FILE_SIZE + i * (LVWM_TX_FILE_SIZE + LVWM_RX_FILE_SIZE), LVVE_Rx_Preset_Buffer_Voice_Tool, sizeof(LVVE_Rx_Preset_Buffer_Voice_Tool));
++ }
++ zOss_Memcpy(g_audioNvParam.s_nxpTxNbMuteParam, LVVE_Tx_Mute_File_Buffer, sizeof(LVVE_Tx_Mute_File_Buffer));
++ zOss_Memcpy(g_audioNvParam.s_nxpTxWbMuteParam, LVVE_Tx_Wb_Mute_File_Buffer, sizeof(LVVE_Tx_Wb_Mute_File_Buffer));
++ }
++ isFirstTxProcessErr = TRUE;
++ isFirstRxProcessErr = TRUE;
++ g_nxpIsOpen = TRUE;
++
++ return DRV_SUCCESS;
++}
++
++SINT32 Vp_NxpClose(VOID)
++{
++
++ LVVE_ReturnStatus_en LVVE_Status; /* Module status return */
++ LVM_INT32 i; /* Index variable */
++
++ LVVE_Status = LVVE_Tx_GetMemoryTable(hInstance_Tx,
++ &MemoryTable_Tx,
++ LVM_NULL);
++
++ if (LVVE_Status == LVVE_NULLADDRESS)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Vp_NxpClose Parameter error - null pointer error returned by LVVE_Tx_GetMemoryTable\n");
++ return DRV_ERROR;
++ }
++ if (LVVE_Status == LVVE_OUTOFRANGE)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Vp_NxpClose Parameter error - out of range error returned by LVVE_Tx_GetMemoryTable\n");
++ return DRV_ERROR;
++ }
++
++ /* For each region */
++ for (i = 0; i < LVM_NR_MEMORY_REGIONS; i++)
++ {
++ if ((MemoryTable_Tx.Region[i].Size != 0) && (MemoryTable_Tx.Region[i].pBaseAddress != LVM_NULL))
++ {
++ zOss_Free(MemoryTable_Tx.Region[i].pBaseAddress);
++ MemoryTable_Tx.Region[i].pBaseAddress = LVM_NULL;
++ }
++ }
++
++ LVVE_Status = LVVE_Rx_GetMemoryTable(hInstance_Rx,
++ &MemoryTable_Rx,
++ LVM_NULL);
++
++ if (LVVE_Status == LVVE_NULLADDRESS)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Vp_NxpClose Parameter error - null pointer error returned by LVVE_Rx_GetMemoryTable\n");
++ return DRV_ERROR;
++ }
++
++ if (LVVE_Status == LVVE_OUTOFRANGE)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Vp_NxpClose Parameter error - out of range error returned by LVVE_Rx_GetMemoryTable\n");
++ return DRV_ERROR;
++ }
++
++ /* For each region */
++ for (i = 0; i < LVM_NR_MEMORY_REGIONS; i++)
++ {
++ if ((MemoryTable_Rx.Region[i].Size != 0) && (MemoryTable_Rx.Region[i].pBaseAddress != LVM_NULL))
++ {
++ zOss_Free(MemoryTable_Rx.Region[i].pBaseAddress);
++ MemoryTable_Rx.Region[i].pBaseAddress = LVM_NULL;
++ }
++ }
++
++ if (g_audioNvParam.s_nxpPathParam != NULL)
++ {
++ zOss_Free(g_audioNvParam.s_nxpPathParam);
++ g_audioNvParam.s_nxpPathParam = NULL;
++ }
++ if (g_audioNvParam.s_nxpTxNbMuteParam != NULL)
++ {
++ zOss_Free(g_audioNvParam.s_nxpTxNbMuteParam);
++ g_audioNvParam.s_nxpTxNbMuteParam = NULL;
++ }
++
++ hInstance_Tx = LVM_NULL;
++ hInstance_Rx = LVM_NULL;
++ g_nxpIsOpen = FALSE;
++
++ //zOss_Free(pNoiseData);
++
++// zOss_Printf(SUBMDL_HAL, PRINT_LEVEL_NORMAL,"Vp_NxpClose success\n");
++ return DRV_SUCCESS;
++}
++
++SINT32 Vp_NxpGetParam(T_ZDrvVoice_MODE voiceMode, T_ZDrv_VpPath path)
++{
++ //add by zhanglixia
++ //UINT32 ret;//xiu gai chu
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Vp_NxpGetParam ######get NXP parameter start####### voiceMode=%d,path=%d \n", voiceMode, path);
++ UINT32 pathTxOffset, pathRxOffset;
++ /************************************************************************************/
++ /* Set the Voice Engine Parameter values */
++ /************************************************************************************/
++ /*
++ * Read the Rx preset file and send the bytes to the Rx Module
++ */
++
++ if (g_nxpIsOpen == FALSE)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Vp_NxpGetParam, nxp has not been opened yet!\n");
++ return DRV_ERR_NOT_OPENED;
++ }
++
++ /*klocwork 3 INVARIANT_CONDITION.UNREACH MAX_VP_PATH¸ÄΪVP_PATH_BLUETOOTH ºÍɾ³ý (path<0)*/
++ if (path > VP_PATH_BLUETOOTH)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Vp_NxpGetParam the path error\n");
++ return DRV_ERROR;
++ }
++
++ if (g_audioNvParam.audio_ctrlFlag.isUseVoiceProc != 1)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Vp_NxpGetParam error g_audioNvParam.audio_ctrlFlag.isUseVoiceProc != 1 \n");
++ return DRV_ERROR;
++ }
++
++ pathTxOffset = path * (LVWM_TX_FILE_SIZE + LVWM_RX_FILE_SIZE);
++ pathRxOffset = path * (LVWM_TX_FILE_SIZE + LVWM_RX_FILE_SIZE) + LVWM_TX_FILE_SIZE;
++
++ if (g_audioNvParam.audio_ctrlFlag.isVpParamInNv == 1)
++ {
++ LVVE_Tx_Preset = (LVM_CHAR*)g_audioNvParam.s_nxpPathParam + pathTxOffset ;
++ LVVE_Rx_Preset = (LVM_CHAR*)g_audioNvParam.s_nxpPathParam + pathRxOffset ;
++
++ NumBytesReadTx = LVWM_TX_FILE_SIZE;
++ NumBytesReadRx = LVWM_RX_FILE_SIZE;
++ }
++ else
++ {
++ LVVE_Rx_Preset = LVVE_Rx_Preset_Buffer_Voice_Tool;
++ LVVE_Tx_Preset = LVVE_Tx_Preset_Buffer_Voice_Tool;
++
++ NumBytesReadTx = sizeof(LVVE_Tx_Preset_Buffer_Voice_Tool);
++ NumBytesReadRx = sizeof(LVVE_Rx_Preset_Buffer_Voice_Tool);
++
++ }
++
++ if (g_voiceVar.muteEn == TRUE)
++ {
++ if (g_audioNvParam.audio_ctrlFlag.isVpParamInNv == 1)
++ {
++ if (g_voiceVar.volteIsWb != 1)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Vp_NxpGetParam set nb mute config !\r\n");
++ LVVE_Tx_Preset = g_audioNvParam.s_nxpTxNbMuteParam;//xiu gai chu tong shang
++ NumBytesReadTx = LVWM_TX_FILE_SIZE;
++ }
++ else
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Vp_NxpGetParam set wb mute config !\r\n");
++ LVVE_Tx_Preset = g_audioNvParam.s_nxpTxWbMuteParam;//xiu gai chu tong shang
++ NumBytesReadTx = LVWM_TX_FILE_SIZE;
++ }
++ }
++ else
++ {
++ if (g_voiceVar.volteIsWb != 1)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Vp_NxpGetParam set nb mute config !\r\n");
++ LVVE_Tx_Preset = LVVE_Tx_Mute_File_Buffer;
++ NumBytesReadTx = sizeof(LVVE_Tx_Mute_File_Buffer);
++ }
++ else
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Vp_NxpGetParam set wb mute config !\r\n");
++ LVVE_Tx_Preset = LVVE_Tx_Wb_Mute_File_Buffer;
++ NumBytesReadTx = sizeof(LVVE_Tx_Wb_Mute_File_Buffer);
++
++ }
++ }
++ }
++
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Vp_NxpGetParam NumBytesReadRx=%d NumBytesReadTx= %d\n ", NumBytesReadRx , NumBytesReadTx);
++ /*klocwork 3 INVARIANT_CONDITION.UNREACH delete if*/
++ /*
++ if ((NumBytesReadRx == LVM_NULL) || (NumBytesReadTx == LVM_NULL))
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Vp_NxpSetParam NXP read para is null !\r\n");
++ return DRV_ERROR;
++ }*/
++ return DRV_SUCCESS;
++
++}
++
++SINT32 Vp_NxpSetParam(T_ZDrv_VpPath path, T_ZDrv_VpVol volume, BOOL isLoop)
++{
++ LVVE_ReturnStatus_en LVVE_Status; /* Module status return */
++ LVM_UINT16 VolumeIndex;
++
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Vp_NxpSetParam ######set NXP parameter start#######");
++ /************************************************************************************/
++ /* Set the Voice Engine Parameter values */
++ /************************************************************************************/
++ if (g_nxpIsOpen == FALSE)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Vp_NxpSetParam, nxp has not been opened yet!\n");
++ return DRV_ERR_NOT_OPENED;
++ }
++
++ /*klocwork 3 INVARIANT_CONDITION.UNREACH MAX_VP_PATH¸ÄΪVP_PATH_BLUETOOTH ºÍɾ³ý (path<0)*/
++ if (path > VP_PATH_BLUETOOTH)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Vp_NxpSetParam the path error\n");
++ return DRV_ERROR;
++ }
++ VolumeIndex = volume; /* Max Rx volume */
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Vp_NxpSetParam VolumeIndex is %d\n", VolumeIndex);
++
++ if ((hInstance_Rx == NULL) || (LVVE_Rx_Preset == NULL) || (hInstance_Tx == NULL) || (LVVE_Tx_Preset == NULL))
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Vp_NxpSetParam, the input parameter is NULL\n");
++ return DRV_ERR_INVALID_PARAM;
++ }
++
++ LVVE_Status = LVVE_Rx_SetPreset(hInstance_Rx, LVVE_Rx_Preset, NumBytesReadRx, VolumeIndex);
++ if (LVVE_Status != LVVE_SUCCESS)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Vp_NxpSetParam Error returned by LVVE_Rx_SetPreset: Error_code = %d\n", LVVE_Status);
++ return DRV_ERROR;
++ }
++
++ LVVE_Status = LVVE_Tx_SetPreset(hInstance_Tx, LVVE_Tx_Preset, NumBytesReadTx, 0);
++ if (LVVE_Status != LVVE_SUCCESS)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Vp_NxpSetParam Error returned by LVVE_Tx_SetPreset: Error_code = %d\n", LVVE_Status);
++ return DRV_ERROR;
++ }
++
++ return DRV_SUCCESS;
++}
++
++SINT32 Vp_NxpSetParamTool(T_ZDrv_VpPath path, T_ZDrv_VpVol volume,
++ zDrvVp_NxpParamsTool *NxpParamsTool, BOOL isLoop, BOOL isVolte)
++{
++ LVVE_ReturnStatus_en LVVE_Status; /* Module status return */
++ //LVM_UINT32 ret;//xiu gai chu
++ LVM_UINT16 VolumeIndex; /* Volume index variable */
++ UINT32 nvAddrTxOffset = 0;
++ UINT32 nvAddrRxOffset = 0;
++
++ UINT32 pathTxOffset, pathRxOffset;
++
++ UINT32 ret = DRV_SUCCESS;
++ /************************************************************************************/
++ /* Set the Voice Engine Parameter values */
++ /************************************************************************************/
++ VolumeIndex = volume; /* Max Rx volume */
++ if (g_nxpIsOpen == FALSE)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Vp_NxpSetParamTool,nxp has not been opened yet!\n");
++ return DRV_ERR_NOT_OPENED;
++ }
++
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "######set NXP parameter start#######");
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Vp_NxpSetParamTool path = %d, volume = %d\n", path, volume);
++ if ((NxpParamsTool->PresetLengthTx > LVWM_TX_FILE_SIZE) || (NxpParamsTool->PresetLengthRx > LVWM_RX_FILE_SIZE))
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "The length is wrong!PresetLengthRx=%d,PresetLengthTx=%d", NxpParamsTool->PresetLengthRx, NxpParamsTool->PresetLengthTx);
++ return DRV_ERROR;
++ }
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "PresetLengthRx=%d NumBytesReadRx= %d volume= %d", NxpParamsTool->PresetLengthRx, NumBytesReadRx, volume);
++
++ LVVE_Status = LVVE_Rx_SetPreset(hInstance_Rx, (const LVVE_Rx_Preset_t)NxpParamsTool->pPresetRx, NxpParamsTool->PresetLengthRx, VolumeIndex);
++
++ if (LVVE_Status != LVVE_SUCCESS)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Error returned by LVVE_Rx_SetPreset: Error_code = %d\n", LVVE_Status);
++ return DRV_ERROR;
++ }
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "PresetLengthTx=%d NumBytesReadTx= %d", NxpParamsTool->PresetLengthTx, NumBytesReadTx);
++ LVVE_Status = LVVE_Tx_SetPreset(hInstance_Tx, (const LVVE_Tx_Preset_t)NxpParamsTool->pPresetTx, NxpParamsTool->PresetLengthTx, 0);
++
++ if (LVVE_Status != LVVE_SUCCESS)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Error returned by LVVE_Tx_SetPreset: Error_code = %d\n", LVVE_Status);
++ return DRV_ERROR;
++ }
++
++ if (g_audioNvParam.audio_ctrlFlag.isVpParamInNv == 1)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Vp_NxpSetParamTool set voice param isVpParamInNv \n");
++
++ if (g_voiceVar.muteEn == TRUE)
++ {
++ if (g_voiceVar.volteIsWb == 1)
++ {
++ zOss_Memcpy(g_audioNvParam.s_nxpTxWbMuteParam, NxpParamsTool->pPresetTx, NxpParamsTool->PresetLengthTx);
++ }
++ else
++ {
++ zOss_Memcpy(g_audioNvParam.s_nxpTxNbMuteParam, NxpParamsTool->pPresetTx, NxpParamsTool->PresetLengthTx);
++ }
++ }
++ else
++ {
++ pathTxOffset = path * (LVWM_TX_FILE_SIZE + LVWM_RX_FILE_SIZE);
++ pathRxOffset = path * (LVWM_TX_FILE_SIZE + LVWM_RX_FILE_SIZE) + LVWM_TX_FILE_SIZE;
++
++ zOss_Memcpy(g_audioNvParam.s_nxpPathParam + pathTxOffset, NxpParamsTool->pPresetTx, NxpParamsTool->PresetLengthTx);
++ zOss_Memcpy(g_audioNvParam.s_nxpPathParam + pathRxOffset, NxpParamsTool->pPresetRx, NxpParamsTool->PresetLengthRx);
++ }
++
++ if (g_audioNvParam.audio_ctrlFlag.isUseNvWrite == 1)
++ {
++ if (g_voiceVar.voiceMode == VOICE_GSM_MODE)
++ {
++ if (path == VP_PATH_HANDSET)
++ {
++ nvAddrTxOffset = 0;
++ nvAddrRxOffset = nvAddrTxOffset + LVWM_TX_FILE_SIZE;
++
++
++ }
++ else if (path == VP_PATH_SPEAKER)
++ {
++ nvAddrTxOffset = LVWM_TX_FILE_SIZE + LVWM_RX_FILE_SIZE;
++ nvAddrRxOffset = nvAddrTxOffset + LVWM_TX_FILE_SIZE;
++ }
++ else if (path == VP_PATH_HEADSET)
++ {
++ nvAddrTxOffset = 2 * (LVWM_TX_FILE_SIZE + LVWM_RX_FILE_SIZE);
++ nvAddrRxOffset = nvAddrTxOffset + LVWM_TX_FILE_SIZE;
++
++ }
++ else if (path == VP_PATH_BLUETOOTH)
++ {
++
++ nvAddrTxOffset = 3 * (LVWM_TX_FILE_SIZE + LVWM_RX_FILE_SIZE);
++ nvAddrRxOffset = nvAddrTxOffset + LVWM_TX_FILE_SIZE;
++ }
++
++ }
++ else if ((g_voiceVar.voiceMode == VOICE_WCDMA_MODE) || (g_voiceVar.voiceMode == VOICE_TD_MODE))
++ {
++ if (g_voiceVar.volteIsWb != 1)
++ {
++ if (path == VP_PATH_HANDSET)
++ {
++ nvAddrTxOffset = 4 * (LVWM_TX_FILE_SIZE + LVWM_RX_FILE_SIZE);
++ nvAddrRxOffset = nvAddrTxOffset + LVWM_TX_FILE_SIZE;
++ }
++ else if (path == VP_PATH_SPEAKER)
++ {
++ nvAddrTxOffset = 5 * (LVWM_TX_FILE_SIZE + LVWM_RX_FILE_SIZE);
++ nvAddrRxOffset = nvAddrTxOffset + LVWM_TX_FILE_SIZE;
++ }
++ else if (path == VP_PATH_HEADSET)
++ {
++ nvAddrTxOffset = 6 * (LVWM_TX_FILE_SIZE + LVWM_RX_FILE_SIZE);
++ nvAddrRxOffset = nvAddrTxOffset + LVWM_TX_FILE_SIZE;
++ }
++ else if (path == VP_PATH_BLUETOOTH)
++ {
++ nvAddrTxOffset = 7 * (LVWM_TX_FILE_SIZE + LVWM_RX_FILE_SIZE);
++ nvAddrRxOffset = nvAddrTxOffset + LVWM_TX_FILE_SIZE;
++ }
++ }
++ else
++ {
++ if (path == VP_PATH_HANDSET)
++ {
++ nvAddrTxOffset = 8 * (LVWM_TX_FILE_SIZE + LVWM_RX_FILE_SIZE);
++ nvAddrRxOffset = nvAddrTxOffset + LVWM_TX_FILE_SIZE;
++ }
++ else if (path == VP_PATH_SPEAKER)
++ {
++ nvAddrTxOffset = 9 * (LVWM_TX_FILE_SIZE + LVWM_RX_FILE_SIZE);
++ nvAddrRxOffset = nvAddrTxOffset + LVWM_TX_FILE_SIZE;
++ }
++ else if (path == VP_PATH_HEADSET)
++ {
++ nvAddrTxOffset = 10 * (LVWM_TX_FILE_SIZE + LVWM_RX_FILE_SIZE);
++ nvAddrRxOffset = nvAddrTxOffset + LVWM_TX_FILE_SIZE;
++ }
++ else if (path == VP_PATH_BLUETOOTH)
++ {
++ nvAddrTxOffset = 11 * (LVWM_TX_FILE_SIZE + LVWM_RX_FILE_SIZE);
++ nvAddrRxOffset = nvAddrTxOffset + LVWM_TX_FILE_SIZE;
++ }
++ }
++ }
++ else if (g_voiceVar.voiceMode == VOICE_LTE_MODE)
++ {
++ if (g_voiceVar.volteIsWb != 1)
++ {
++ if (path == VP_PATH_HANDSET)
++ {
++ nvAddrTxOffset = 12 * (LVWM_TX_FILE_SIZE + LVWM_RX_FILE_SIZE);
++ nvAddrRxOffset = nvAddrTxOffset + LVWM_TX_FILE_SIZE;
++ }
++ else if (path == VP_PATH_SPEAKER)
++ {
++ nvAddrTxOffset = 13 * (LVWM_TX_FILE_SIZE + LVWM_RX_FILE_SIZE);
++ nvAddrRxOffset = nvAddrTxOffset + LVWM_TX_FILE_SIZE;
++ }
++ else if (path == VP_PATH_HEADSET)
++ {
++ nvAddrTxOffset = 14 * (LVWM_TX_FILE_SIZE + LVWM_RX_FILE_SIZE);
++ nvAddrRxOffset = nvAddrTxOffset + LVWM_TX_FILE_SIZE;
++ }
++ else if (path == VP_PATH_BLUETOOTH)
++ {
++ nvAddrTxOffset = 15 * (LVWM_TX_FILE_SIZE + LVWM_RX_FILE_SIZE);
++ nvAddrRxOffset = nvAddrTxOffset + LVWM_TX_FILE_SIZE;
++ }
++ }
++ else
++ {
++ if (path == VP_PATH_HANDSET)
++ {
++ nvAddrTxOffset = 16 * (LVWM_TX_FILE_SIZE + LVWM_RX_FILE_SIZE);
++ nvAddrRxOffset = nvAddrTxOffset + LVWM_TX_FILE_SIZE;
++ }
++ else if (path == VP_PATH_SPEAKER)
++ {
++ nvAddrTxOffset = 17 * (LVWM_TX_FILE_SIZE + LVWM_RX_FILE_SIZE);
++ nvAddrRxOffset = nvAddrTxOffset + LVWM_TX_FILE_SIZE;
++ }
++ else if (path == VP_PATH_HEADSET)
++ {
++ nvAddrTxOffset = 18 * (LVWM_TX_FILE_SIZE + LVWM_RX_FILE_SIZE);
++ nvAddrRxOffset = nvAddrTxOffset + LVWM_TX_FILE_SIZE;
++ }
++ else if (path == VP_PATH_BLUETOOTH)
++ {
++ nvAddrTxOffset = 19 * (LVWM_TX_FILE_SIZE + LVWM_RX_FILE_SIZE);
++ nvAddrRxOffset = nvAddrTxOffset + LVWM_TX_FILE_SIZE;
++ }
++ }
++ }
++
++ if (g_voiceVar.muteEn != TRUE)
++ {
++ ret = zOss_NvItemWrite(OS_FLASH_VOICE_RW_NONFAC_BASE_ADDR + nvAddrTxOffset, (UINT8*)NxpParamsTool->pPresetTx, NxpParamsTool->PresetLengthTx);
++ if (ZOSS_SUCCESS == ret)
++ {
++ ret = Nvram_Flush();
++ }
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Vp_NxpSetParamTool set tx config to nv ,path=%d,add=0x%x !\r\n", path, OS_FLASH_VOICE_RW_NONFAC_BASE_ADDR + nvAddrTxOffset);
++ }
++ ret = zOss_NvItemWrite(OS_FLASH_VOICE_RW_NONFAC_BASE_ADDR + nvAddrRxOffset, (UINT8*)NxpParamsTool->pPresetRx, NxpParamsTool->PresetLengthRx);
++ if (ZOSS_SUCCESS == ret)
++ {
++ ret = Nvram_Flush();
++ }
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Vp_NxpSetParamTool set rx config to nv ,path=%d,add=0x%x !\r\n", path, OS_FLASH_VOICE_RW_NONFAC_BASE_ADDR + nvAddrTxOffset);
++ if (g_voiceVar.muteEn == TRUE)
++ {
++ if (g_voiceVar.volteIsWb != 1)
++ {
++ nvAddrTxOffset = 20 * (LVWM_TX_FILE_SIZE + LVWM_RX_FILE_SIZE);
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Vp_NxpSetParamTool set nb mute config to nv ,path=%d,add=0x%x !\r\n", path, OS_FLASH_VOICE_RW_NONFAC_BASE_ADDR + nvAddrTxOffset);
++ }
++ else
++ {
++ nvAddrTxOffset = 20 * (LVWM_TX_FILE_SIZE + LVWM_RX_FILE_SIZE) + LVWM_TX_FILE_SIZE;
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Vp_NxpSetParamTool set wb mute config to nv ,path=%d,add=0x%x !\r\n", path, OS_FLASH_VOICE_RW_NONFAC_BASE_ADDR + nvAddrTxOffset);
++ }
++ ret = zOss_NvItemWrite(OS_FLASH_VOICE_RW_NONFAC_BASE_ADDR + nvAddrTxOffset, (UINT8*)NxpParamsTool->pPresetTx, NxpParamsTool->PresetLengthTx);
++ if (ZOSS_SUCCESS == ret)
++ {
++ ret = Nvram_Flush();
++ }
++ }
++
++ }
++
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Vp_NxpSetParamTool get voice mode param \n");
++ }
++ else
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Vp_NxpSetParamTool set voice param not isVpParamInNv \n");
++ if (NxpParamsTool->PresetLengthTx <= sizeof(LVVE_Tx_Preset_Buffer_Voice_Tool))
++ zOss_Memcpy(LVVE_Tx_Preset_Buffer_Voice_Tool, NxpParamsTool->pPresetTx, NxpParamsTool->PresetLengthTx);
++ if (NxpParamsTool->PresetLengthRx <= sizeof(LVVE_Rx_Preset_Buffer_Voice_Tool))
++ zOss_Memcpy(LVVE_Rx_Preset_Buffer_Voice_Tool, NxpParamsTool->pPresetRx, NxpParamsTool->PresetLengthRx);
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Vp_NxpsetParamTool set param to default param array !\r\n");
++ }
++
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Vp_NxpSetParamTool PresetLengthRx = %d ,PresetLengthTx= %d!\n", NxpParamsTool->PresetLengthRx, NxpParamsTool->PresetLengthTx);
++
++ return DRV_SUCCESS;
++}
++
++SINT32 Vp_NxpGetParamTool(T_ZDrv_VpPath path, T_ZDrv_VpVol volume,
++ zDrvVp_NxpParamsTool *NxpParamsTool, BOOL isLoop, BOOL isVolte)
++{
++ UINT32 pathTxOffset, pathRxOffset;
++
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "######get NXP parameter start#######");
++ //LVM_UINT32 NumBytesRead; /* Number of bytes in the preset file */
++ /************************************************************************************/
++ /* Set the Voice Engine Parameter values */
++ /************************************************************************************/
++ if (g_nxpIsOpen == FALSE)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Vp_NxpGetParamTool,nxp has not been opened yet!\n");
++ return DRV_ERR_NOT_OPENED;
++ }
++
++ if (g_audioNvParam.audio_ctrlFlag.isVpParamInNv == 1)
++ {
++
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Vp_NxpGetParamTool get para isVpParamInNv !\r\n");
++ pathTxOffset = path * (LVWM_TX_FILE_SIZE + LVWM_RX_FILE_SIZE);
++ pathRxOffset = path * (LVWM_TX_FILE_SIZE + LVWM_RX_FILE_SIZE) + LVWM_TX_FILE_SIZE;
++
++ NxpParamsTool->pPresetTx = (char*)g_audioNvParam.s_nxpPathParam + pathTxOffset;
++ NxpParamsTool->pPresetRx = (char*)g_audioNvParam.s_nxpPathParam + pathRxOffset;
++
++ NxpParamsTool->PresetLengthTx = LVWM_TX_FILE_SIZE;
++ NxpParamsTool->PresetLengthRx = LVWM_RX_FILE_SIZE;
++ }
++ else
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Vp_NxpGetParamTool get para not isVpParamInNv !\r\n");
++
++ NxpParamsTool->pPresetTx = LVVE_Tx_Preset_Buffer_Voice_Tool;
++ NxpParamsTool->pPresetRx = LVVE_Rx_Preset_Buffer_Voice_Tool;
++ NxpParamsTool->PresetLengthTx = sizeof(LVVE_Tx_Preset_Buffer_Voice_Tool);
++ NxpParamsTool->PresetLengthRx = sizeof(LVVE_Rx_Preset_Buffer_Voice_Tool);
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Vp_NxpGetParamTool get default param !\r\n");
++ }
++
++ if (g_voiceVar.muteEn == TRUE)
++ {
++ if (g_audioNvParam.audio_ctrlFlag.isVpParamInNv == 1)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Vp_NxpGetParamTool get mute isVpParamInNv !\r\n");
++ if (g_voiceVar.volteIsWb != 1)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Vp_NxpGetParamTool get nb mute config !\r\n");
++ NxpParamsTool->pPresetTx = (char*)g_audioNvParam.s_nxpTxNbMuteParam; //xiu gai chu
++ NxpParamsTool->PresetLengthTx = LVWM_TX_FILE_SIZE;
++ }
++ else
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Vp_NxpGetParamTool get wb mute config !\r\n");
++ NxpParamsTool->pPresetTx = (char*)g_audioNvParam.s_nxpTxWbMuteParam; //xiu gai chu
++ NxpParamsTool->PresetLengthTx = LVWM_TX_FILE_SIZE;
++ }
++ }
++ else
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Vp_NxpGetParamTool get mute not isVpParamInNv !\r\n");
++ if (g_voiceVar.volteIsWb != 1)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Vp_NxpGetParamTool get nb mute config !\r\n");
++ NxpParamsTool->pPresetTx = LVVE_Tx_Mute_File_Buffer;
++ NxpParamsTool->PresetLengthTx = sizeof(LVVE_Tx_Mute_File_Buffer);
++ }
++ else
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Vp_NxpGetParamTool get wb mute config !\r\n");
++ NxpParamsTool->pPresetTx = LVVE_Tx_Wb_Mute_File_Buffer;
++ NxpParamsTool->PresetLengthTx = sizeof(LVVE_Tx_Wb_Mute_File_Buffer);
++ }
++ }
++ }
++
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Vp_NxpGetParamTool PresetLengthRx=%d PresetLengthTx= %d ", NxpParamsTool->PresetLengthRx, NxpParamsTool->PresetLengthTx);
++ /*klocwork 3 INVARIANT_CONDITION.UNREACH delete if*/
++ /*
++ if ((NxpParamsTool->PresetLengthRx == LVM_NULL) || (NxpParamsTool->PresetLengthTx == LVM_NULL))
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Vp_NxpGetParamTool NXP read para is null !\r\n");
++ return DRV_ERROR;
++ }*/
++ return DRV_SUCCESS;
++}
++#if 0
++SINT32 Vp_NxpSetGain(SINT32 gain, UINT32 channel, T_ZDrv_VpPath path)
++{
++ //LVVE_ReturnStatus_en LVVE_Status=LVVE_SUCCESS;//xiu gai chu
++ //LVM_INT16 tempGain=0;//xiu gai chu
++ if (g_nxpIsOpen == FALSE)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Vp_NxpSetGain,nxp has not been opened yet!\n");
++ return DRV_ERR_NOT_OPENED;
++ }
++
++ return DRV_SUCCESS;
++}
++#endif
++SINT32 Vp_NxpRxProcess(UINT8 **pPReadBuffer, UINT8 **pPWriteBuffer, UINT16 sampleNums)
++{
++ LVM_INT16 *pWriteBuffer;
++ LVM_INT16 *pReadBuffer;
++ LVM_INT16 *pReadBuffer_FE;
++ LVVE_ReturnStatus_en LVVE_Status; /* Module status return */
++
++ SINT32 ret = DRV_SUCCESS;
++ if (g_nxpIsOpen == FALSE)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Vp_NxpRxProcess,nxp has not been opened yet!\n");
++ return DRV_ERR_NOT_OPENED;
++ }
++
++ /*************************/
++ /* PROCESS THE RX MODULE */
++ /*************************/
++
++ pReadBuffer = (LVM_INT16 *)(*pPReadBuffer);
++ pWriteBuffer = (LVM_INT16 *)(*pPWriteBuffer);
++ pReadBuffer_FE = (LVM_INT16 *)&InBuffer16_Tx_FE[0];
++
++ LVVE_Status = LVVE_Rx_Process(hInstance_Rx, /* Instance handle */
++ pReadBuffer, /* Input buffer */
++ pNoiseData, /* Noise data */
++ pWriteBuffer, /* Output buffer */
++ sampleNums); /* Number of samples pairs to process */
++
++ if (LVVE_Status == LVVE_NULLADDRESS)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Vp_NxpRxProcess Parameter error - null pointer returned from LVVE_Rx_Process\n");
++ ret = DRV_ERROR;
++ }
++ if (LVVE_Status == LVVE_INVALIDNUMSAMPLES)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Vp_NxpRxProcess Invalid number of samples, check value or range returned from LVVE_Rx_Process\n");
++ ret = DRV_ERROR;
++ }
++ if (LVVE_Status == LVVE_ALIGNMENTERROR)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Vp_NxpRxProcess Alignment error, check input and/or output buffer alignment returned from LVVE_Rx_Process\n");
++ ret = DRV_ERROR;
++ }
++
++ if (LVVE_Status != LVVE_SUCCESS)
++ {
++ if (isFirstRxProcessErr == TRUE)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Vp_NxpRxProcess Error while processing returned from LVVE_Rx_Process: %d\n", (LVM_INT16)LVVE_Status);
++ isFirstRxProcessErr = FALSE;
++ }
++ ret = DRV_ERROR;
++ }
++
++ zOss_Memcpy((VOID*)pReadBuffer_FE, (VOID*)pWriteBuffer, sampleNums * sizeof(LVM_INT16));
++//zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Vp_NxpRxProcess\n");
++ ret = DRV_SUCCESS;//xiu waring:unused ret
++ return ret;
++}
++
++SINT32 Vp_NxpTxProcess(UINT8 **pPReadBuffer_NE_MAIN, UINT8 **pPReadBuffer_NE_AUX, UINT8 **pPWriteBuffer, UINT16 sampleNums)
++{
++ SINT32 ret = DRV_SUCCESS;
++
++ LVM_INT16 *pWriteBuffer;
++ LVVE_ReturnStatus_en LVVE_Status; /* Module status return */
++
++ LVM_INT16 *pReadBuffer_NE0;
++ LVM_INT16 *pReadBuffer_NE1;
++ LVM_INT16 *pReadBuffer_FE;
++
++ if (g_nxpIsOpen == FALSE)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Vp_NxpTxProcess,nxp has not been opened yet!\n");
++ return DRV_ERR_NOT_OPENED;
++ }
++
++ /*************************/
++ /* PROCESS THE TX MODULE */
++ /*************************/
++
++ pReadBuffer_NE0 = (LVM_INT16 *)(*pPReadBuffer_NE_MAIN);
++ if (pPReadBuffer_NE_AUX == NULL)
++ {
++ pReadBuffer_NE1 = NULL;
++ }
++ else
++ {
++ pReadBuffer_NE1 = (LVM_INT16 *)(*pPReadBuffer_NE_AUX);
++ }
++ pWriteBuffer = (LVM_INT16 *)(*pPWriteBuffer);
++ pReadBuffer_FE = (LVM_INT16 *)&InBuffer16_Tx_FE[0];
++
++ LVVE_Status = LVVE_Tx_Process(hInstance_Tx, /* Instance handle */
++ pReadBuffer_NE0, /* Input buffer primary Mic */
++ pReadBuffer_NE1, /* Input buffer secondary Mic */
++ pReadBuffer_FE, /* Input buffer */
++ pNoiseData, /* Noise data */
++ pWriteBuffer, /* Output buffer */
++ sampleNums); /* Number of samples pairs to process */
++
++ /*
++ * Check for error and stop if needed
++ */
++ if (LVVE_Status == LVVE_NULLADDRESS)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Vp_NxpTxProcess Parameter error - null pointer returned from LVVE_Tx_Process\n");
++ ret = DRV_ERROR;
++ }
++ if (LVVE_Status == LVVE_INVALIDNUMSAMPLES)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Vp_NxpTxProcess Invalid number of samples, check value or range returned from LVVE_Tx_Process\n");
++ ret = DRV_ERROR;
++ }
++ if (LVVE_Status == LVVE_ALIGNMENTERROR)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Vp_NxpTxProcess Alignment error, check input and/or output buffer alignment returned from LVVE_Tx_Process\n");
++ ret = DRV_ERROR;
++ }
++ if (LVVE_Status != LVVE_SUCCESS)
++ {
++
++ if (isFirstTxProcessErr == TRUE)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Vp_NxpTxProcess Error while processing returned from LVVE_Tx_Process: %d\n", (LVM_INT16)LVVE_Status);
++ isFirstTxProcessErr = FALSE;
++ }
++ ret = DRV_ERROR;
++ }
++ ret = DRV_SUCCESS;//xiu warning:unused ret
++ //zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "Vp_NxpTxProcess\n");
++ return ret;//xiu
++}
++
+diff --git a/Uboot/cp/ps/driver/src/chipsets/src/audio_base/nxp/hal_nxp.h b/Uboot/cp/ps/driver/src/chipsets/src/audio_base/nxp/hal_nxp.h
+new file mode 100755
+index 0000000..9547823
+--- /dev/null
++++ b/Uboot/cp/ps/driver/src/chipsets/src/audio_base/nxp/hal_nxp.h
+@@ -0,0 +1,32 @@
++/*******************************************************************************
++ * Copyright (C) 2007, ZTE Corporation.
++ *
++ * File Name: hal_nxp.h
++ * File Mark:
++ * Description: Provide the interface of nxp processing
++ * Others:
++ * Version: V0.5
++ * Author: lvwenhua
++ * Date: 2012-06-13
++ * History 1:
++ * Date:
++ * Version:
++ * Author:
++ * Modification:
++ * History 2:
++ ********************************************************************************/
++#ifndef _HAL_NXP_H
++#define _HAL_NXP_H
++// added by zhanglixia
++//#include "LVVE.h"
++extern SINT32 Vp_NxpInitNvParam(VOID);
++extern SINT32 Vp_NxpOpen(UINT32 fs);
++extern SINT32 Vp_NxpClose(VOID);
++extern SINT32 Vp_NxpGetParam(T_ZDrvVoice_MODE voiceMode, T_ZDrv_VpPath path);
++extern SINT32 Vp_NxpSetParam(T_ZDrv_VpPath path, T_ZDrv_VpVol volume, BOOL isLoop);
++//end added by zhanglixia
++extern SINT32 Vp_NxpSetParamTool(T_ZDrv_VpPath path, T_ZDrv_VpVol volume, zDrvVp_NxpParamsTool *NxpParamsTool,BOOL isLoop,BOOL isVolte);
++extern SINT32 Vp_NxpGetParamTool(T_ZDrv_VpPath path, T_ZDrv_VpVol volume, zDrvVp_NxpParamsTool *NxpParamsTool,BOOL isLoop,BOOL isVolte);
++extern SINT32 Vp_NxpRxProcess(UINT8 **pPReadBuffer, UINT8 **pPWriteBuffer,UINT16 sampleNums);
++extern SINT32 Vp_NxpTxProcess(UINT8 **pPReadBuffer_NE_MAIN, UINT8 **pPReadBuffer_NE_AUX, UINT8 **pPWriteBuffer,UINT16 sampleNums);
++#endif
+diff --git a/Uboot/cp/ps/driver/src/chipsets/src/audio_base/nxp/makefile b/Uboot/cp/ps/driver/src/chipsets/src/audio_base/nxp/makefile
+new file mode 100755
+index 0000000..b4f481e
+--- /dev/null
++++ b/Uboot/cp/ps/driver/src/chipsets/src/audio_base/nxp/makefile
+@@ -0,0 +1,53 @@
++#***********************************************************************
++# °æÈ¨ËùÓÐ (C)2001,ÖÐÐËͨѶ¹É·ÝÓÐÏÞ¹«Ë¾¡£
++#
++# ÎļþÃû³Æ£º makefile
++# Îļþ±êʶ£º ±àÒënxpÄ£¿é
++# ÄÚÈÝÕªÒª£º
++#
++# ÐÞ¸ÄÈÕÆÚ °æ±¾ºÅ Ð޸ıê¼Ç ÐÞ¸ÄÈË ÐÞ¸ÄÄÚÈÝ
++# ---------------------------------------------------------------------
++# 2015/08/17 V1.0 zhuoyongsheng create
++#***********************************************************************/
++include $(PRJ_PATH)/config/project.mk
++include $(DRV_PATH)/ws/drv_cfg.mk
++
++
++#===============================================
++# ·¾¶ÉèÖÃ
++#===============================================
++_MDL_NAME = nxp
++
++_MDL_SRC_PATH = $(CHIP_SRC_PATH)/audio_base/$(_MDL_NAME)
++_MDL_INC_PATH = $(CHIP_INC_PATH)
++_MDL_OBJ_PATH = $(CHIP_OBJ_PATH)/audio_base/$(_MDL_NAME)
++
++
++
++
++#============================================
++#¸÷Ä£¿éÒÀÀµ¹«¹²Í·ÎļþÉèÖÃ
++#============================================
++ INCLUDE += $(_EXTERNAL_INC_PATH) \
++ -I$(CHIP_SRC_PATH)/audio_base/include \
++ -I$(_MDL_INC_PATH)
++#============================================
++#×ÓϵͳÀ©Õ¹¶¨Òå
++#============================================
++DEFINE +=
++
++#============================================
++#Ä£¿éÎļþÐÅÏ¢
++#============================================
++_C_SOURCE = $(wildcard $(_MDL_SRC_PATH)/*.c)
++
++_s_SOURCE =
++
++_S_SOURCE =
++
++#============================================
++# ±àÒë¹æÔò
++#============================================
++
++include $(FRAME_PATH)/rules/mdl_rules.mk
++
+diff --git a/Uboot/cp/ps/driver/src/chipsets/src/audio_base/nxp/testnxp_rxin2rxout.c b/Uboot/cp/ps/driver/src/chipsets/src/audio_base/nxp/testnxp_rxin2rxout.c
+new file mode 100755
+index 0000000..6a10dbc
+--- /dev/null
++++ b/Uboot/cp/ps/driver/src/chipsets/src/audio_base/nxp/testnxp_rxin2rxout.c
+@@ -0,0 +1,211 @@
++#include "drvs_general.h"
++#include "drvs_voiceprocess.h"
++#include "drvs_ramlog.h"
++#include "hal_nxp.h"
++
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/fs.h>
++#include <linux/miscdevice.h>
++#include <asm/uaccess.h>
++#include <linux/slab.h>
++#include <linux/init.h>
++
++typedef struct testnxp{
++ int fs;
++ int voicemode;
++ int vp_path;
++ int vp_vol;
++ int framecount;
++}T_TestNxp;
++
++#define TESTNXP_IOCTL_RXIN_TO_RXOUT_START _IOW('N', 1, T_TestNxp)
++#define TESTNXP_IOCTL_RXIN_TO_RXOUT_STOP _IO('N', 2)
++
++#define MAX_NXP_BUF 640
++
++
++static const char testnxp_shortname[] = "testnxp_dev";
++static unsigned char *rxin_buf = NULL;
++static unsigned char *rxout_buf = NULL;
++static int framecount;
++static int testnxp_open(struct inode * ip,struct file * fp);
++static int testnxp_release(struct inode *ip, struct file *fp);
++static ssize_t testnxp_read(struct file *fp, char __user *buf,size_t count, loff_t *pos);
++static ssize_t testnxp_write(struct file *fp, const char __user *buf,size_t count, loff_t *pos);
++static long testnxp_ioctl(struct file *fp, unsigned int cmd, unsigned long arg);
++
++
++
++
++/* file operations for testnxp device /dev/testnxp_device */
++static const struct file_operations testnxp_fops = {
++ .owner = THIS_MODULE,
++ .read = testnxp_read,
++ .write = testnxp_write,
++ .unlocked_ioctl = testnxp_ioctl,
++ .open = testnxp_open,
++ .release = testnxp_release,
++};
++
++static struct miscdevice testnxp_device = {
++ .minor = MISC_DYNAMIC_MINOR,
++ .name = testnxp_shortname,
++ .fops = &testnxp_fops,
++};
++
++
++
++static ssize_t testnxp_read(struct file *fp, char __user *buf,size_t count, loff_t *pos)
++{
++
++ if(buf == NULL)
++ {
++ pr_info("testnxp_read buffer null \n");
++ return -EINVAL;
++ }
++
++ if ((count>0) &&(count<=MAX_NXP_BUF)) {
++ if (copy_to_user(buf, rxout_buf, count)) {
++ pr_info("testnxp_read copy_to_user error \n");
++ return -EFAULT;
++ }
++ }else{
++ pr_info("testnxp_read count error \n");
++ return -EINVAL;
++ }
++ return count;
++}
++
++static ssize_t testnxp_write(struct file *fp, const char __user *buf,size_t count, loff_t *pos)
++{
++ int ret;
++
++ if(buf == NULL)
++ {
++ pr_info("testnxp_write buffer null \n");
++ return -EINVAL;
++ }
++
++ if ((count > 0) && (count <= MAX_NXP_BUF)) {
++ if (copy_from_user(rxin_buf, buf, count)) {
++ pr_info("testnxp_write copy_from_user error \n");
++ return -EFAULT;
++ }
++
++ Vp_NxpRxProcess(&rxin_buf, &rxout_buf, count/2);
++
++ }else{
++ pr_info("testnxp_write count error \n");
++ return -EINVAL;
++ }
++
++ return count;
++}
++
++
++static long testnxp_ioctl(struct file *fp, unsigned int cmd, unsigned long arg)
++{
++ T_TestNxp *param = (T_TestNxp *)arg;
++ T_TestNxp testnxp_param = {0};
++ int ret = 0;
++ printk("testnxp_ioctl\n");
++
++ switch(cmd)
++ {
++ case TESTNXP_IOCTL_RXIN_TO_RXOUT_START:
++ {
++ if (copy_from_user((void*)&testnxp_param, (void*)param, sizeof(struct testnxp)))
++ {
++ return DRV_ERR_INVALID_PARAM;
++ }
++ framecount = testnxp_param.framecount;
++ ret = Vp_NxpOpen(testnxp_param.fs);
++ if (ret == 0)
++ {
++ ret = Vp_NxpGetParam(testnxp_param.voicemode, testnxp_param.vp_path);
++ if (ret == 0)
++ {
++ ret = Vp_NxpSetParam(testnxp_param.vp_path, testnxp_param.vp_vol, FALSE);
++ if (ret != 0 )
++ Vp_NxpClose();
++ }
++ else
++ {
++ Vp_NxpClose();
++ }
++ }
++ break;
++ }
++ case TESTNXP_IOCTL_RXIN_TO_RXOUT_STOP:
++ {
++ Vp_NxpClose();
++ }
++ default:
++ {
++ break;
++ }
++ }
++ return ret;
++}
++
++
++
++static int testnxp_open(struct inode *ip, struct file *fp)
++{
++ printk("testnxp_open\n");
++
++ if(rxin_buf == NULL)
++ {
++ rxin_buf = kzalloc(2 * MAX_NXP_BUF, GFP_KERNEL);
++ if (!rxin_buf)
++ {
++ pr_info("testnxp_init malloc error\n");
++ return -ENOMEM;
++ }
++
++ rxout_buf = rxin_buf + MAX_NXP_BUF;
++ }
++
++ return 0;
++}
++
++static int testnxp_release(struct inode *ip, struct file *fp)
++{
++ printk("testnxp_release\n");
++
++ if(rxin_buf)
++ {
++ kfree(rxin_buf);
++ rxin_buf = NULL;
++ }
++
++ return 0;
++}
++
++
++// int __init testnxp_init(void)
++int testnxp_init(void)
++{
++ int ret;
++ printk("testnxp driver initialize\n");
++
++ ret = misc_register(&testnxp_device);
++ if (ret){
++ printk(KERN_ERR "testnxp driver failed to initialize\n");
++ return -EFAULT;
++ }
++
++ return 0;
++}
++
++
++ void __exit testnxp_exit(void)
++{
++ misc_deregister(&testnxp_device);
++}
++
++//late_initcall(testnxp_init);
++//module_exit(testnxp_exit);
++
+diff --git a/Uboot/cp/ps/driver/src/chipsets/src/audio_base/nxp/tos/LVC_Types.h b/Uboot/cp/ps/driver/src/chipsets/src/audio_base/nxp/tos/LVC_Types.h
+new file mode 100755
+index 0000000..14efe8c
+--- /dev/null
++++ b/Uboot/cp/ps/driver/src/chipsets/src/audio_base/nxp/tos/LVC_Types.h
+@@ -0,0 +1,383 @@
++/************************************************************************/
++/* Copyright (c) 2004-2014 NXP Software. All rights are reserved. */
++/* Reproduction in whole or in part is prohibited without the prior */
++/* written consent of the copyright owner. */
++/* */
++/* This software and any compilation or derivative thereof is and */
++/* shall remain the proprietary information of NXP Software and is */
++/* highly confidential in nature. Any and all use hereof is restricted */
++/* and is subject to the terms and conditions set forth in the */
++/* software license agreement concluded with NXP Software. */
++/* */
++/* Under no circumstances is this software or any derivative thereof */
++/* to be combined with any Open Source Software in any way or */
++/* licensed under any Open License Terms without the express prior */
++/* written permission of NXP Software. */
++/* */
++/* For the purpose of this clause, the term Open Source Software means */
++/* any software that is licensed under Open License Terms. Open */
++/* License Terms means terms in any license that require as a */
++/* condition of use, modification and/or distribution of a work */
++/* */
++/* 1. the making available of source code or other materials */
++/* preferred for modification, or */
++/* */
++/* 2. the granting of permission for creating derivative */
++/* works, or */
++/* */
++/* 3. the reproduction of certain notices or license terms */
++/* in derivative works or accompanying documentation, or */
++/* */
++/* 4. the granting of a royalty-free license to any party */
++/* under Intellectual Property Rights */
++/* */
++/* regarding the work and/or any work that contains, is combined with, */
++/* requires or otherwise is based on the work. */
++/* */
++/* This software is provided for ease of recompilation only. */
++/* Modification and reverse engineering of this software are strictly */
++/* prohibited. */
++/* */
++/************************************************************************/
++
++/****************************************************************************************
++
++ $Author: beq07720 $
++ $Revision: 55357 $
++ $Date: 2014-03-05 22:16:13 +0530 (Wed, 05 Mar 2014) $
++
++*****************************************************************************************/
++
++/** @file
++ * Header file defining the standard LifeVibes types for use in the application layer
++ * interface of all LifeVibes modules
++ */
++
++#ifndef LVM_TYPES_H
++#define LVM_TYPES_H
++
++#ifdef __cplusplus
++extern "C" {
++#endif /* __cplusplus */
++
++/****************************************************************************************/
++/* */
++/* definitions */
++/* */
++/****************************************************************************************/
++
++#define LVM_NULL 0 ///< NULL pointer
++
++#define LVM_TRUE 1 ///< Boolean True
++#define LVM_FALSE 0 ///< Boolean False
++
++#define LVM_MAXINT_8 127 ///< Maximum positive integer size
++#define LVM_MAXINT_16 32767 ///< Maximum signed int 16 bits number
++#define LVM_MAXINT_32 2147483647 ///< Maximum signed int 32 bits number
++#define LVM_MAXUINT_32 4294967295U ///< Maximum un-signed int 32 bits number
++
++#if ( defined(VARIANT_24BIT) )
++#define LVM_MAXENUM 8388607L ///< Maximum value for enumerator
++#else
++#define LVM_MAXENUM 2147483647 ///< Maximum value for enumerator
++#endif
++
++#define LVM_MODULEID_MASK 0xFF00 ///< Mask to extract the calling module ID from callbackId
++#define LVM_EVENTID_MASK 0x00FF ///< Mask to extract the callback event from callbackId
++
++/* Memory table*/
++#define LVM_MEMREGION_PERSISTENT_SLOW_DATA 0 ///< Offset to the instance memory region
++#define LVM_MEMREGION_PERSISTENT_FAST_DATA 1 ///< Offset to the persistent data memory region
++#define LVM_MEMREGION_PERSISTENT_FAST_COEF 2 ///< Offset to the persistent coefficient memory region
++#define LVM_MEMREGION_TEMPORARY_FAST 3 ///< Offset to temporary memory region
++
++#define LVM_NR_MEMORY_REGIONS 4 ///< Number of memory regions
++
++#define LVM_MODE_LVWIREFORMAT_LENGTH (4) ///< Number of bytes to encode @ref LVM_Mode_en in LVWireFormat
++#define LVM_CONFIG_LVWIREFORMAT_LENGTH (4) ///< Number of bytes to encode @ref LVM_Config_en in LVWireFormat
++#define LVM_FS_LVWIREFORMAT_LENGTH (4) ///< Number of bytes to encode @ref LVM_Fs_en sample Rate in LVWireFormat
++
++#define LVM_CHAR_LVWIREFORMAT_LENGTH (1)
++#define LVM_INT8_LVWIREFORMAT_LENGTH (1)
++#define LVM_UINT8_LVWIREFORMAT_LENGTH (1)
++
++#define LVM_INT16_LVWIREFORMAT_LENGTH (2)
++#define LVM_UINT16_LVWIREFORMAT_LENGTH (2)
++
++#define LVM_INT32_LVWIREFORMAT_LENGTH (4)
++#define LVM_UINT32_LVWIREFORMAT_LENGTH (4)
++
++
++/****************************************************************************************/
++/* */
++/* Basic types */
++/* */
++/****************************************************************************************/
++
++#if defined(CORE_TIC64)
++typedef char LVM_CHAR; ///< ASCII character
++
++typedef char LVM_INT8; ///< Signed 8-bit word
++typedef unsigned char LVM_UINT8; ///< Unsigned 8-bit word
++
++typedef short LVM_INT16; ///< Signed 16-bit word
++typedef unsigned short LVM_UINT16; ///< Unsigned 16-bit word
++
++typedef int LVM_INT32; ///< Signed 32-bit word
++typedef unsigned int LVM_UINT32; ///< Unsigned 32-bit word
++#else
++
++#if ( defined(VARIANT_FRAC16) || defined (VARIANT_REFREAL16) )
++typedef long DATATYPE; ///< long data type
++
++typedef char LVM_CHAR; ///< ASCII character
++
++typedef char LVM_INT8; ///< Signed 8-bit word
++typedef unsigned char LVM_UINT8; ///< Unsigned 8-bit word
++
++typedef long LVM_INT16; ///< Signed 16-bit word
++typedef long LVM_UINT16; ///< Unsigned 16-bit word
++
++typedef long LVM_INT32; ///< Signed 32-bit word
++typedef long LVM_UINT32; ///< Unsigned 32-bit word
++
++#else
++typedef char LVM_CHAR; ///< ASCII character
++
++typedef char LVM_INT8; ///< Signed 8-bit word
++typedef unsigned char LVM_UINT8; ///< Unsigned 8-bit word
++
++typedef short LVM_INT16; ///< Signed 16-bit word
++typedef unsigned short LVM_UINT16; ///< Unsigned 16-bit word
++
++typedef long LVM_INT32; ///< Signed 32-bit word
++typedef unsigned long LVM_UINT32; ///< Unsigned 32-bit word
++#if ( defined(VARIANT_24BIT) )
++
++#define LVM_MAXINT_24 8388607L ///< 24 bit max int
++#define LVM_MININT_24 -8388608L ///< 24bit min int
++
++#define LVM_MAXINT_48 140737488355327LL ///< 48bit max int
++#define LVM_MININT_48 -140737488355328LL ///< 48bit min int
++
++#endif // VARIANT_24BIT
++
++#endif // VARIANT_FRAC16
++
++#endif // CORE_TIC64
++
++/****************************************************************************************/
++/* */
++/* Standard Enumerated types */
++/* */
++/****************************************************************************************/
++
++/**
++The @ref LVM_Mode_en enumerated type is used to set the operating mode of a particular feature inside the LifeVibes modules.
++The feature can be separately set to enable the feature processing (i.e., ON) or to disable all feature processing
++modules (i.e., OFF).
++*/
++typedef enum
++{
++ LVM_MODE_OFF = 0, ///< LVM module disabled
++ LVM_MODE_ON = 1, ///< LVM module enabled
++ LVM_MODE_DUMMY = LVM_MAXENUM
++} LVM_Mode_en;
++
++/**
++Sets stream Format
++*/
++typedef enum
++{
++ LVM_STEREO = 0, ///<Stereo stream
++ LVM_MONOINSTEREO = 1, ///<Mono in stereo stream
++ LVM_MONO = 2, ///<Mono stream
++ LVM_5DOT1 = 3, ///<stream 5.1 formatted
++ LVM_7DOT1 = 4, ///<stream 7.1 formatted
++ LVM_SOURCE_DUMMY = LVM_MAXENUM
++} LVM_Format_en;
++
++/**
++Sets Speaker type
++*/
++typedef enum
++{
++ LVM_SPEAKER_MONO = 0, ///< Mono type speaker
++ LVM_SPEAKER_STEREO = 1, ///< Stereo type speaker
++ LVM_SPEAKER_DUMMY = LVM_MAXENUM
++} LVM_SpeakerType_en;
++
++/**
++Sets Word length
++*/
++typedef enum
++{
++ LVM_16_BIT = 0, ///< 16 bit word length
++ LVM_32_BIT = 1, ///< 32 bit word length
++ LVM_WORDLENGTH_DUMMY = LVM_MAXENUM
++} LVM_WordLength_en;
++
++/**
++The LVM product supports the sample rates specified in @ref LVM_Fs_en. The input and output sample rates are always the same.
++*/
++typedef enum
++{
++ LVM_FS_8000 = 0, ///< 8k sampling rate
++ LVM_FS_11025 = 1, ///< 11.025k sampling rate
++ LVM_FS_12000 = 2, ///< 12k sampling rate
++ LVM_FS_16000 = 3, ///< 16k sampling rate
++ LVM_FS_22050 = 4, ///< 22.050k sampling rate
++ LVM_FS_24000 = 5, ///< 24k sampling rate
++ LVM_FS_32000 = 6, ///< 32k sampling rate
++ LVM_FS_44100 = 7, ///< 44.1k sampling rate
++ LVM_FS_48000 = 8, ///< 48k sampling rate
++ LVM_FS_COUNT = 9, ///< Max sampling rate count
++ LVM_FS_INVALID = LVM_MAXENUM-1,
++ LVM_FS_DUMMY = LVM_MAXENUM
++} LVM_Fs_en;
++
++/**
++The enumerated type is used to select the reset mode for the module.
++@ref LVM_RESET_SOFT is used to select a soft reset (or partial reset) and @ref LVM_RESET_HARD is
++used to select a hard reset (full re-initialization).
++*/
++typedef enum
++{
++/**
++<table border>
++ <tr>
++ <td><b>Name</b></td>
++ <td><b>MODE</b></td>
++ </tr>
++ <tr>
++ <td>ResetType</td>
++ <td>@ref LVM_RESET_SOFT</td>
++ </tr>
++ <tr>
++ <td></td>
++ <td>@ref LVM_RESET_HARD</td>
++ </tr>
++</table>
++*/
++ LVM_RESET_SOFT = 0, ///< Reset type for LVM where a partial reset of the module should be performed
++ LVM_RESET_HARD = 1, ///< Reset type for LVM where a full reset of the module should be performed
++ LVM_RESET_DUMMY = LVM_MAXENUM
++} LVM_ResetType_en;
++
++/**
++The @ref LVM_MemoryTypes_en enumerated type identifies the memory region types so that they can be correctly placed in memory
++by the calling application.
++The module initially has no permanent memory storage and makes no use of persistent memory allocation internally.
++The calling application must allocate memory for the module to use.
++
++Four memory regions are required:
++@li @ref LVM_MEMREGION_PERSISTENT_SLOW_DATA : this type of memory is used to store all the control data that needs to be saved between two consecutive calls to the process function.
++@li @ref LVM_MEMREGION_PERSISTENT_FAST_DATA : this type of memory is used to store data such as filter history
++@li @ref LVM_MEMREGION_PERSISTENT_FAST_COEF : this type of memory is used to store filter coefficients.
++@li @ref LVM_MEMREGION_TEMPORARY_FAST (scratch): this type of memory is used to store temporary data. This memory can be reused by the application in between calls to the process function.
++
++This collection of memory regions forms the module instance.
++
++Typically the memory is allocated by the application dynamically; however, it can be allocated statically if required.
++The sizes of the memory regions can be found by running the GetMemoryTable functions on a simulator and noting
++the returned values. Alternatively contact NXP who can provide the figures.
++It is possible that these memory sizes will change between release versions of the library and hence the dynamic memory allocation method is preferred where possible.
++On some target platforms the placement of memory regions is critical for achieving optimal performance of the module.
++*/
++typedef enum
++{
++ LVM_PERSISTENT_SLOW_DATA = LVM_MEMREGION_PERSISTENT_SLOW_DATA, ///< Persistent slow memory region
++ LVM_PERSISTENT_FAST_DATA = LVM_MEMREGION_PERSISTENT_FAST_DATA, ///< Persistent fast memory region
++ LVM_PERSISTENT_FAST_COEF = LVM_MEMREGION_PERSISTENT_FAST_COEF, ///< Persisten fast memory for coefficient storage
++ LVM_TEMPORARY_FAST = LVM_MEMREGION_TEMPORARY_FAST, ///< Temporary fast memory region
++ LVM_MEMORYTYPE_DUMMY = LVM_MAXENUM
++} LVM_MemoryTypes_en;
++
++/**
++Sets mod of Configuration
++*/
++typedef enum
++{
++ LVM_CONFIG_HANDSET = 0, ///< Handset configuration
++ LVM_CONFIG_SPEAKERPHONE = 1, ///< Speaker mod configuration
++ LVM_CONFIG_EARPIECE = 2, ///< Earpiece configuration
++ LVM_CONFIG_DUMMY = LVM_MAXENUM
++} LVM_Config_en;
++
++/**
++The @ref LVM_MemoryRegion_st type defines a memory region by specifying its size in bytes, its region type and its base pointer.
++@see LVM_MemoryTypes_en
++*/
++#if ( defined(VARIANT_24BIT) )
++typedef struct
++{
++ LVM_INT24 Size; ///< The size of the memory region in bytes
++ LVM_MemoryTypes_en Type; ///< Type of memory region
++ void *pBaseAddress; ///< Pointer to the memory region base address
++} LVM_MemoryRegion_st;
++#else
++typedef struct
++{
++ LVM_UINT32 Size; ///< The size of the memory region in bytes
++ LVM_MemoryTypes_en Type; ///< Type of memory region
++ void *pBaseAddress; ///< Pointer to the memory region base address
++} LVM_MemoryRegion_st;
++#endif
++
++/**
++The LVM_MemoryTable_st type defines the memory requirements of the module as an array of region definitions.
++The number of required memory regions is given by the constant @ref LVM_NR_MEMORY_REGIONS
++@see LVM_MemoryRegion_st
++*/
++typedef struct
++{
++ LVM_MemoryRegion_st Region[LVM_NR_MEMORY_REGIONS]; ///< One definition of all memory regions
++} LVM_MemoryTable_st;
++
++/**
++Beats Per Minute Structure
++*/
++typedef struct
++{
++ LVM_INT16 ShortTermMinimum; ///< Beats per minute in Q9.6 format
++ LVM_INT16 ShortTermAverage; ///< Beats per minute in Q9.6 format
++ LVM_INT16 ShortTermMaximum; ///< Beats per minute in Q9.6 format
++
++ LVM_INT16 Confidence; ///< Beat confidence level: 0 = no confidence, 32767 = maximum confidence
++ LVM_INT16 Strength; ///< Beat strength level: 0 = no beat, 32767 = maximum strength beat
++ LVM_INT16 LongTermMinimum; ///< Beats per minute in Q9.6 format
++ LVM_INT16 LongTermAverage; ///< Beats per minute in Q9.6 format
++ LVM_INT16 LongTermMaximum; ///< Beats per minute in Q9.6 format
++
++} LVM_BPMModuleStats_st;
++
++
++/****************************************************************************************/
++/* */
++/* Standard Function Prototypes */
++/* */
++/****************************************************************************************/
++/**
++@brief General purpose callback function
++
++@param pCallbackData Pointer to the callback data structure
++@param pGeneralPurpose General purpose pointer (e.g. to a data structure needed in the callback)
++@param PresetLength General purpose variable (e.g. to be used as callback ID)
++@return \ref LVM_INT32
++*/
++typedef LVM_INT32 (*LVM_Callback)(void *pCallbackData,
++ void *pGeneralPurpose,
++ LVM_INT16 GeneralPurpose );
++
++
++/****************************************************************************************/
++/* */
++/* End of file */
++/* */
++/****************************************************************************************/
++
++#ifdef __cplusplus
++}
++#endif /* __cplusplus */
++
++#endif /* LVM_TYPES_H */
+diff --git a/Uboot/cp/ps/driver/src/chipsets/src/audio_base/nxp/tos/LVVE.h b/Uboot/cp/ps/driver/src/chipsets/src/audio_base/nxp/tos/LVVE.h
+new file mode 100755
+index 0000000..9c48d8e
+--- /dev/null
++++ b/Uboot/cp/ps/driver/src/chipsets/src/audio_base/nxp/tos/LVVE.h
+@@ -0,0 +1,1371 @@
++/****************************************************************************************/
++/* Copyright (c) 2004-2014 NXP Software. All rights are reserved. */
++/* Reproduction in whole or in part is prohibited without the prior */
++/* written consent of the copyright owner. */
++/* */
++/* This software and any compilation or derivative thereof is and */
++/* shall remain the proprietary information of NXP Software and is */
++/* highly confidential in nature. Any and all use hereof is restricted */
++/* and is subject to the terms and conditions set forth in the */
++/* software license agreement concluded with NXP Software. */
++/* */
++/* Under no circumstances is this software or any derivative thereof */
++/* to be combined with any Open Source Software in any way or */
++/* licensed under any Open License Terms without the express prior */
++/* written permission of NXP Software. */
++/* */
++/* For the purpose of this clause, the term Open Source Software means */
++/* any software that is licensed under Open License Terms. Open */
++/* License Terms means terms in any license that require as a */
++/* condition of use, modification and/or distribution of a work */
++/* */
++/* 1. the making available of source code or other materials */
++/* preferred for modification, or */
++/* */
++/* 2. the granting of permission for creating derivative */
++/* works, or */
++/* */
++/* 3. the reproduction of certain notices or license terms */
++/* in derivative works or accompanying documentation, or */
++/* */
++/* 4. the granting of a royalty-free license to any party */
++/* under Intellectual Property Rights */
++/* */
++/* regarding the work and/or any work that contains, is combined with, */
++/* requires or otherwise is based on the work. */
++/* */
++/* This software is provided for ease of recompilation only. */
++/* Modification and reverse engineering of this software are strictly */
++/* prohibited. */
++/* */
++/****************************************************************************************/
++
++/****************************************************************************************/
++/* */
++/* $Author: nxp65285 $*/
++/* $Revision: 56908 $*/
++/* $Date: 2014-04-10 17:30:02 +0530 (Thu, 10 Apr 2014) $*/
++/* */
++/****************************************************************************************/
++
++/**
++@file
++Header file for the application layer interface of the LVVE module.
++This files includes all definitions, types, structures and function prototypes
++required by the calling layer. All other types, structures and functions are
++private.
++*/
++
++#ifndef __LVVE_H__
++#define __LVVE_H__
++
++#ifdef __cplusplus
++extern "C" {
++#endif /* __cplusplus */
++
++/****************************************************************************************/
++/* */
++/* Includes */
++/* */
++/****************************************************************************************/
++
++#include "LVVE_VID.h"
++
++/****************************************************************************************/
++/* */
++/* Definitions */
++/* */
++/****************************************************************************************/
++/* Below include logic is designed to reduce checks to 1 or 2 conditions due to limitations in the backend stripping code */
++
++
++
++
++
++#define LVVE_MAX_PCM_FRAME_SIZE 160 ///< LVVE maximum processing frame size
++
++
++#define LVVE_NOISESAMPLES_PER_FRAME 2 ///< Number of samples required for noise estimation per frame
++/**
++@def LVVE_RX_PRESET_LENGTH
++Length of the LVVE_Rx preset buffer (number of bytes).
++@see LVVE_Rx_SetPreset
++@ingroup LVVE_Rx
++*/
++#define LVVE_RX_PRESET_LENGTH (LVVIDHEADER_CONTROLPARAMS_LVWIREFORMAT_LENGTH + LVVE_RX_CONTROLPARAMS_LVWIREFORMAT_LENGTH) ///< RX preset Buffer length
++
++/**
++@def LVVE_TX_PRESET_LENGTH
++Length of the LVVE_Tx preset buffer (number of bytes).
++@see LVVE_Tx_SetPreset
++@ingroup LVVE_Tx
++*/
++#define LVVE_TX_PRESET_LENGTH (LVVIDHEADER_CONTROLPARAMS_LVWIREFORMAT_LENGTH + LVVE_TX_CONTROLPARAMS_LVWIREFORMAT_LENGTH) ///< TX preset buffer length
++
++
++/* Deprecated Definitions */
++
++#define LVVE_MAX_BULK_DELAY LVVE_TX_BULKDELAY_MAX
++#define LVVE_RX_MODE_DUMMY LVVE_RX_MODE_EN_DUMMY
++#define LVVE_TX_MODE_DUMMY LVVE_TX_MODE_EN_DUMMY
++
++#define LVVE_MAX_VOL_GAIN_DB LVVE_TX_VOL_GAIN_MAX
++#define LVVE_MIN_VOL_GAIN_DB LVVE_TX_VOL_GAIN_MIN
++
++#define LVVE_MAX_HPF_CORNER_HZ LVVE_TX_MIC_HPF_CORNERFREQ_MAX
++#define LVVE_MIN_HPF_CORNER_HZ LVVE_TX_MIC_HPF_CORNERFREQ_MIN
++
++#define LVVE_MAX_HPF_RX_CORNER_HZ LVVE_RX_HPF_CORNERFREQ_MAX
++
++#define LVVE_MAX_NLPP_LIMIT_DB LVNLPP_NLPP_LIMIT_MAX
++#define LVVE_MIN_NLPP_LIMIT_DB LVNLPP_NLPP_LIMIT_MIN
++
++
++#define LVVE_MAX_DRC_LEVEL LVDRC_COMPRESSORCURVEINPUTLEVELS_MAX
++#define LVVE_MIN_DRC_LEVEL LVDRC_COMPRESSORCURVEINPUTLEVELS_MIN
++#define LVVE_MIN_DRC_NUMKNEES LVDRC_NUMKNEES_MIN
++#define LVVE_MAX_DRC_NUMKNEES LVDRC_NUMKNEES_MAX
++#define LVVE_MIN_DRC_ATTACKTIME LVDRC_ATTACKTIME_MIN
++#define LVVE_MAX_DRC_ATTACKTIME LVDRC_ATTACKTIME_MAX
++#define LVVE_MIN_DRC_RELEASETIME LVDRC_RELEASETIME_MIN
++#define LVVE_MAX_DRC_RELEASETIME LVDRC_RELEASETIME_MAX
++
++
++/* End deprecated defines*/
++/****************************************************************************************/
++/* */
++/* Types */
++/* */
++/****************************************************************************************/
++
++/**
++LVVE_Tx Instance Handle
++This handle is used by most of the LVVE APIs
++@see LVVE_Tx_GetInstanceHandle
++@ingroup LVVE_Tx
++*/
++typedef void *LVVE_Tx_Handle_t; ///< LVVE Tx handle
++/**
++This handle is used by most of the LVVE APIs
++@see LVVE_Rx_GetInstanceHandle
++@ingroup LVVE_Rx
++*/
++typedef void *LVVE_Rx_Handle_t; ///< LVVE Rx handle
++
++/**
++This enum type specifies the different error codes returned by the API functions
++For the exact meaning see the individual function descriptions
++*/
++typedef enum
++{
++ LVVE_SUCCESS = 0, ///< Successful return from a routine
++ LVVE_ALIGNMENTERROR = 1, ///< Memory alignment error
++ LVVE_NULLADDRESS = 2, ///< NULL allocation address
++ LVVE_OUTOFRANGE = 3, ///< Out of range parameter
++ LVVE_INVALIDNUMSAMPLES = 4, ///< Invalid number of samples
++ LVVE_INVALID_ALGORITHM_CONFIGURATION = 5, ///< Mutually exclusive algorithms configured ON
++ LVVE_INVALID_STATE_CONFIGURATION = 6, ///< Invalid state of the algorithm
++ LVVE_PRESET_INVALID_BUFFER_LENGTH = 7, ///< Incorrect length of buffer used in SetPreset
++ LVVE_PRESET_INVALID_VOLUME_INDEX = 8, ///< The volume index exceeds the buffer content in SetPreset
++ LVVE_PRESET_INVALID_BUFFER_VERSION = 9, ///< The version of the preset buffer does not match this library
++ LVVE_PRESET_INVALID_BASELINE_VERSION = 10, ///< Invalid LVVE Baseline Version in preset buffer
++ LVVE_PRESET_INVALID_MASK = 11, ///< Invalid algorithm mask in preset buffer
++ LVVE_PRESET_INVALID_SAMPLE_RATE = 12, ///< Invalid sample rate @ref LVM_Fs_en in preset buffer
++ LVVE_PRESET_INVALID_LVWIREFORMAT_MESSAGEID = 13, ///< Invalid @ref LVVIDHeader_MessageID_en wire format message id in preset buffer
++
++ LVVE_RETURNSTATUS_DUMMY = LVM_MAXENUM
++} LVVE_ReturnStatus_en;
++
++/**
++Byte array containing encoded LVVE_Rx_ControlParams for one or multiple volumes.
++The length of this array should be a multiple of @ref LVVE_RX_PRESET_LENGTH.
++@see LVVE_Rx_SetPreset
++@ingroup LVVE_Rx
++*/
++typedef LVM_CHAR* LVVE_Rx_Preset_t; ///< LVVE Rx preset buffer
++
++/**
++Byte array containing encoded LVVE_Tx_ControlParams for one or multiple volumes.
++The length of this array should be a multiple of @ref LVVE_TX_PRESET_LENGTH.
++@see LVVE_Tx_SetPreset
++@ingroup LVVE_Tx
++*/
++typedef LVM_CHAR* LVVE_Tx_Preset_t; ///< LVVE Tx preset buffer
++
++
++/****************************************************************************************/
++/* */
++/* Structures */
++/* */
++/****************************************************************************************/
++
++/**
++The instance parameters define certain important operating limits required by the calling application.
++These instance parameters affect how much memory is required by the LVVE and hence must be provided
++when the instance is created.
++@see LVVE_Rx_GetMemoryTable
++@see LVVE_Rx_GetInstanceHandle
++@see LVVE_Tx_GetMemoryTable
++@see LVVE_Tx_GetInstanceHandle
++*/
++/**
++EQ Module Instance Parameters Structure.
++@see LVEQ_InstanceParams_st
++*/
++typedef struct
++{
++/**
++Max Size of Equalizer
++Sets the maximum length of the equalizer impulse response that can be used.
++It must be a multiple of 8.
++<table border>
++<caption>EQ Max Length Table</caption>
++ <tr>
++ <td><b>Unit</b></td>
++ <td><b>Q format</b></td>
++ <td><b>Data Range</b></td>
++ <td><b>Default Values</b></td>
++ </tr>
++ <tr>
++ <td><b>Integer Length in Samples</b></td>
++ <td><b>Q16.0</b></td>
++ <td>[8,\ref LVEQ_EQ_LENGTH_MAX]</td>
++ <td>\ref LVEQ_EQ_LENGTH_DEFAULT</td>
++ </tr>
++</table>
++*/
++ LVM_UINT16 EQ_MaxLength; ///< EQ Max Length
++} LVEQ_InstanceParams_st;
++
++/**
++Tx Instance Parameter Structure
++These parameters are set at initialization time and may not be changed during processing
++@ref LVVE_Tx_GetInstanceHandle
++@ingroup LVVE_Tx
++*/
++typedef struct
++{
++ LVM_Fs_en SampleRate; ///< Sample rate
++/**
++Sets the maximum length of the bulk delay between Rx and Tx expressed in samples.
++The unit of MaxBulkDelay is [number of samples] at the respective sampling rate.
++<table border>
++<caption>Max Bulk Delay Table</caption>
++ <tr>
++ <td><b>Type</b></td>
++ <td><b>Unit</b></td>
++ <td><b>Q format</b></td>
++ <td><b>Data Range</b></td>
++ <td><b>Default Values</b></td>
++ </tr>
++ <tr>
++ <td><b>LVM_UINT16</b></td>
++ <td><b>Integer Length in Samples</b></td>
++ <td><b>Q16.0</b></td>
++ <td>[0,6400]</td>
++ <td>None</td>
++ </tr>
++</table>
++*/
++ LVM_UINT16 MaxBulkDelay; ///< Max bulk delay
++
++ LVEQ_InstanceParams_st EQ_InstParams; ///< EQ instance
++} LVVE_Tx_InstanceParams_st;
++
++/**
++Rx Instance Parameter Structure
++These parameters are set at initialization time and may not be changed during processing.
++@ref LVVE_Rx_GetInstanceHandle
++@ingroup LVVE_Rx
++*/
++typedef struct
++{
++ LVM_Fs_en SampleRate; ///< LVVE sample rate
++ LVEQ_InstanceParams_st EQ_InstParams;///< EQ instance
++
++} LVVE_Rx_InstanceParams_st;
++
++/**
++The version information structure contains one character field to store LVVE version number.
++A call to the @ref LVVE_GetVersionInfo function is needed to retrieve this information.
++*/
++typedef struct
++{
++ LVM_CHAR VersionNumber[64]; ///< Version number of the LifeVibes™ VoiceExperience library
++} LVVE_VersionInfo;
++
++/**
++Used to reset LVVE_Rx module any time.
++@ref LVM_ResetType_en parameter determine the type of reset required
++@ingroup LVVE_Rx
++*/
++typedef struct
++{
++ LVM_ResetType_en ResetType; ///< RX Reset Type
++} LVVE_Rx_ResetParams_st;
++
++/**
++Used to reset LVVE_Tx module any time.
++LVM_ResetType_en parameter determine the type of reset required
++@ingroup LVVE_Tx
++*/
++typedef struct
++{
++ LVM_ResetType_en ResetType; ///< TX Reset Type
++} LVVE_Tx_ResetParams_st;
++
++/**
++@brief Retrieve the memory requirements of the LVVE_Tx module.
++
++This function returns a table of memory records that describe size, type and memory space of all buffers
++required by the instance. The number of initialized memory records is defined by LVVE_NR_MEMORY_REGIONS.
++This function is used for two purposes and is called in two different ways:
++
++@li Memory Allocation: When the LVVE_GetMemoryTable functions are called with a NULL instance handle (hInstance = LVM_NULL)
++ the function returns the memory requirements. The base address pointers in the memory table are set to NULL.
++ All elements of the instance parameters structure (pointed to by pInstParams) must contain valid values as the memory
++ requirements are affected by these settings.
++
++@li Memory Free: When called with a non-NULL instance handle (hInstance = a valid instance handle)
++ the function returns the memory table used when the instance was created.
++ The base address pointers returned will be those supplied by the calling application when the memory
++ was allocated and can now be used for freeing memory. The instance parameters (pointed to by pInstParams)
++ are ignored and the pInstParams parameter may be set to NULL.
++@li In case of memory allocation, all elements of the parameter initialization structure defined by pInstParams
++ must contain valid values as the memory requirements are affected by these settings.
++ In some releases of the bundle library one or more memory regions may have a zero size.
++
++@pre The number of memory records in the array defined by pMemoryTable is equal to @ref LVM_NR_MEMORY_REGIONS.
++@pre Exactly @ref LVM_NR_MEMORY_REGIONS memory records of pMemoryTable are initialized.
++
++@post When this function is called with hInstance = NULL the memory base address pointers
++will be NULL on return.
++@post When the function is called for freeing memory, hInstance = Instance Handle the
++memory table returns the allocated memory and base addresses used during
++initialisation.
++
++@return LVVE_SUCCESS when the function call succeeds and the memory table is filled correctly
++@return LVVE_NULLADDRESS when pMemoryTable was NULL
++@return LVVE_NULLADDRESS when pInstParams was NULL and the call was for memory allocation
++ is NULL.
++@return LVVE_OUTOFRANGE when pInstParams contains parameters out of the excepted range
++
++@note This function may be interrupted by the LVVE_Tx_Process function.
++
++@ingroup LVVE_Tx
++
++LVVE_Tx_GetMemoryTable: Memory Allocation Example:
++
++The following example shows how to get the memory requirements for the LVVE_Tx instance.
++\code
++ InstParams_Tx.SampleRate = LVM_FS_8000;
++ // Include the other instance params here
++
++ LVVE_Status = LVVE_Tx_GetMemoryTable ( LVM_NULL,
++ &MemTab_Tx,
++ &InstParams_Tx );
++
++ if( LVVE_Status != LVVE_SUCCESS )
++ {
++ // Handle Errors
++ }
++
++ for( c1 = 0; c1 < LVVE_NR_MEMORY_REGIONS; c1++ )
++ {
++ if( MemTab_Tx.Region[c1].Size != 0 )
++ {
++ MemTab_Tx.Region[c1].pBaseAddress =
++ malloc(MemTab_Tx.Region[c1].Size);
++ }
++ }
++\endcode
++
++LVVE_Tx_GetMemoryTable: Freeing Memory Example:
++
++The following example shows how to free the memory from the LVVE_Tx instance.
++
++\code
++ LVVE_Status = LVVE_Tx_GetMemoryTable( hInstance,
++ &MemTab_Tx,
++ LVM_NULL);
++
++ if (LVVE_Status != LVVE_SUCCESS)
++ {
++ // Handle errors
++ }
++
++ for( c1 = 0; c1 < LVVE_NR_MEMORY_REGIONS; c1++)
++ {
++ if (MemTab_Tx.Region[c1].Size != 0)
++ {
++ free(MemTab_Tx.Region[c1].pBaseAddress);
++ }
++ }
++\endcode
++
++*/
++
++LVVE_ReturnStatus_en LVVE_Tx_GetMemoryTable(LVVE_Tx_Handle_t hInstance,
++ LVM_MemoryTable_st *pMemoryTable,
++ LVVE_Tx_InstanceParams_st *pInstanceParams);
++
++/**
++@brief Retrieve the memory requirements of the LVVE_Rx module.
++
++This function returns a table of memory records that describe size, type and memory space of all buffers
++required by the instance. The number of initialized memory records is defined by LVVE_NR_MEMORY_REGIONS.
++This function is used for two purposes and is called in two different ways:
++
++@li Memory Allocation: When the LVVE_GetMemoryTable functions are called with a NULL instance handle (hInstance = LVM_NULL)
++ the function returns the memory requirements. The base address pointers in the memory table are set to NULL.
++ All elements of the instance parameters structure (pointed to by pInstParams) must contain valid values as the memory
++ requirements are affected by these settings.
++
++@li Memory Free: When called with a non-NULL instance handle (hInstance = a valid instance handle)
++ the function returns the memory table used when the instance was created.
++ The base address pointers returned will be those supplied by the calling application when the memory
++ was allocated and can now be used for freeing memory. The instance parameters (pointed to by pInstParams)
++ are ignored and the pInstParams parameter may be set to NULL.
++@li In case of memory allocation, all elements of the parameter initialization structure defined by pInstParams
++ must contain valid values as the memory requirements are affected by these settings.
++ In some releases of the bundle library one or more memory regions may have a zero size.
++
++@pre The number of memory records in the array defined by pMemoryTable is equal to @ref LVM_NR_MEMORY_REGIONS.
++@pre Exactly @ref LVM_NR_MEMORY_REGIONS memory records of pMemoryTable are initialized.
++
++@post When this function is called with hInstance = NULL the memory base address pointers
++will be NULL on return.
++@post When the function is called for freeing memory, hInstance = Instance Handle the
++memory table returns the allocated memory and base addresses used during
++initialisation.
++
++@return LVVE_SUCCESS when the function call succeeds and the memory table is filled correctly
++@return LVVE_NULLADDRESS when pMemoryTable was NULL
++@return LVVE_NULLADDRESS when pInstParams was NULL and the call was for memory allocation
++ is NULL.
++@return LVVE_OUTOFRANGE when pInstParams contains parameters out of the excepted range
++
++@note This function may be interrupted by the LVVE_Rx_Process function.
++
++@ingroup LVVE_Rx
++
++LVVE_Rx_GetMemoryTable: Memory Allocation Example:
++
++The following example shows how to get the memory requirements for the LVVE_Rx instance.
++
++\code
++ InstParams_Rx.SampleRate = LVM_FS_8000;
++ // Include the other instance params here
++
++ LVVE_Status = LVVE_Rx_GetMemoryTable ( LVM_NULL,
++ &MemTab_Rx,
++ &InstParams_Rx );
++
++ if( LVVE_Status != LVVE_SUCCESS )
++ {
++ // Handle Errors
++ }
++
++ for( c1 = 0; c1 < LVVE_NR_MEMORY_REGIONS; c1++ )
++ {
++ if( MemTab_Rx.Region[c1].Size != 0 )
++ {
++ MemTab_Rx.Region[c1].pBaseAddress =
++ malloc(MemTab_Rx.Region[c1].Size);
++ }
++ }
++\endcode
++
++LVVE_Rx_GetMemoryTable: Freeing Memory Example:
++
++The following example shows how to free the memory from the LVVE_Rx instance.
++
++\code
++ LVVE_Status = LVVE_Rx_GetMemoryTable( hInstance,
++ &MemTab_Rx,
++ LVM_NULL);
++
++ if (LVVE_Status != LVVE_SUCCESS)
++ {
++ // Handle errors
++ }
++
++ for( c1 = 0; c1 < LVVE_NR_MEMORY_REGIONS; c1++)
++ {
++ if (MemTab_Rx.Region[c1].Size != 0)
++ {
++ free(MemTab_Rx.Region[c1].pBaseAddress);
++ }
++ }
++\endcode
++*/
++
++LVVE_ReturnStatus_en LVVE_Rx_GetMemoryTable(LVVE_Rx_Handle_t hInstance,
++ LVM_MemoryTable_st *pMemoryTable,
++ LVVE_Rx_InstanceParams_st *pInstanceParams);
++
++
++/**
++@brief Created handle to the instance of the LVVE_Tx module
++
++This function is used to create the LVVE_Tx instance. All control parameters are set to invalid values.
++The memory table pointed to by pMemoryTable must be created. If the memory table is not correct then an error will be returned.
++The memory requirements of the Rx and Tx unit are dependent on the instance parameters supplied and so the
++instance parameters provided in this function call must be the same as those used in the @ref LVVE_Tx_GetMemoryTable function calls
++used for memory allocation.
++
++@pre The memory records tables defined by pMemoryTable contains pointers to non-overlapping buffers
++with the size as requested via the prior calls to the LVVE_Tx_GetMemoryTable functions.
++@pre The initialization parameter structure defined by pInstParams is identical to the structure passed
++to prior call to @ref LVVE_Tx_GetMemoryTable functions.
++
++
++@param phInstance Pointer to the instance handle.
++@param pMemoryTable Pointer to the memory definition table.
++@param pInstanceParams Pointer to the instance parameters.
++
++@return LVVE_SUCCESS when creation was successful
++@return LVVE_NULLADDRESS When phInstance or pMemoryTable or pInstanceParams is NULL.
++@return LVVE_NULLADDRESS when one or more of the memory regions with a non-zero size has been
++ given a NULL base address pointer.
++@return LVVE_OUTOFRANGE when pInstParams contains parameters out of the excepted range
++
++@ingroup LVVE_Tx
++
++ LVVE_Tx_GetInstanceHandle Example:
++
++The following example shows how to initialize LVVE_Tx_GetInstanceHandle.
++
++\code
++ hInstance_Tx = LVM_NULL;
++ LVVE_Status = LVVE_Tx_GetInstanceHandle( &hInstance_Tx,
++ &MemTab_Tx,
++ &InstParams_Tx );
++ if( LVVE_Status != LVVE_SUCCESS )
++ {
++ // Handle Errors
++ }
++\endcode
++
++*/
++
++LVVE_ReturnStatus_en LVVE_Tx_GetInstanceHandle(LVVE_Tx_Handle_t *phInstance,
++ LVM_MemoryTable_st *pMemoryTable,
++ LVVE_Tx_InstanceParams_st *pInstanceParams);
++
++/**
++@brief Created handle to the instance of the LVVE_Rx module
++
++This functions is used to create LVVE_Rx instance. All control parameters are set to invalid values.
++The memory table pointed to by pMemoryTable must be created. If the memory table is not correct then an error will be returned.
++The memory requirements of the Rx and Rx unit are dependent on the instance parameters supplied and so the
++instance parameters provided in this function call must be the same as those used in the @ref LVVE_Rx_GetMemoryTable function calls
++used for memory allocation.
++
++@pre The memory records tables defined by pMemoryTable contains pointers to non-overlapping buffers
++with the size as requested via the prior calls to the LVVE_Rx_GetMemoryTable functions.
++@pre The initialization parameter structure defined by pInstParams is identical to the structure passed
++to prior call to @ref LVVE_Rx_GetMemoryTable functions.
++
++
++@param phInstance Pointer to the instance handle.
++@param pMemoryTable Pointer to the memory definition table.
++@param pInstanceParams Pointer to the instance parameters.
++
++@return LVVE_SUCCESS when creation was successful
++@return LVVE_NULLADDRESS When phInstance or pMemoryTable or pInstanceParams is NULL.
++@return LVVE_NULLADDRESS when one or more of the memory regions with a non-zero size has been
++ given a NULL base address pointer.
++@return LVVE_OUTOFRANGE when pInstParams contains parameters out of the excepted range
++
++@ingroup LVVE_Rx
++
++ LVVE_Rx_GetInstanceHandle Example:
++
++The following example shows how to initialize LVVE_Rx_GetInstanceHandle.
++
++\code
++ hInstance_Rx = LVM_NULL;
++ LVVE_Status = LVVE_Rx_GetInstanceHandle( &hInstance_Rx,
++ &MemTab_Rx,
++ &InstParams_Rx );
++ if( LVVE_Status != LVVE_SUCCESS )
++ {
++ // Handle Errors
++ }
++\endcode
++
++*/
++
++LVVE_ReturnStatus_en LVVE_Rx_GetInstanceHandle(LVVE_Rx_Handle_t *phInstance,
++ LVM_MemoryTable_st *pMemoryTable,
++ LVVE_Rx_InstanceParams_st *pInstanceParams);
++
++/**
++@brief Retrieve the current LVVE_Tx control parameters.
++
++This function copies the control parameters from the LVVE_Tx into the supplied
++parameter structure, pControlParams. The values returned are the values given in the last successful
++call to the LVVE_Tx_SetControlParameters function.
++
++@param hInstance Instance handle
++@param pControlParams Pointer to the control parameters
++
++@pre hInstance should be valid handle.
++@pre pControlParams should be allocated by caller.
++@post pControlParams will be filled with the values given in the last successful call to
++ the LVVE_Tx_SetControlParameters function. They are not necessarily the values
++ used in the last call to the LVVE_Tx_Process function, this will be the case if
++ LVVE_Tx_SetControlParameters has been called since the last call to LVVE_Tx_Process.
++
++@return LVVE_SUCCESS Succeeded
++@return LVVE_NULLADDRESS When hInstance or pControlParams is NULL
++
++@note The LVVE_Tx_GetControlParameters function can be called at any time during processing.
++
++@ingroup LVVE_Tx
++
++LVVE_Tx_GetControlParameters Example:
++
++The following example shows how to get different control parameters for the LVVE_Tx instance.
++
++\code
++ LVVE_Status = LVVE_Tx_GetControlParameters( &hInstance_Tx,
++ &ControlParams_Tx );
++
++ if( LVVE_Status != LVVE_SUCCESS )
++ {
++ // Handle Errors
++ }
++\endcode
++
++*/
++
++LVVE_ReturnStatus_en LVVE_Tx_GetControlParameters( LVVE_Tx_Handle_t hInstance,
++ LVVE_Tx_ControlParams_st *pControlParams);
++
++/**
++@brief Retrieve the current LVVE_Rx control parameters.
++
++This function copies the control parameters from the LVVE_Tx into the supplied
++parameter structure, pControlParams. The values returned are the values given in the last successful
++call to the LVVE_Rx_SetControlParameters function.
++
++@param hInstance Instance handle
++@param pControlParams Pointer to the control parameters
++
++@pre hInstance should be valid handle.
++@pre pControlParams should be allocated by caller.
++@post pControlParams will be filled with the values given in the last successful call to
++ the LVVE_Rx_SetControlParameters function. They are not necessarily the values
++ used in the last call to the LVVE_Rx_Process function, this will be the case if
++ LVVE_Tx_SetControlParameters has been called since the last call to LVVE_Tx_Process.
++
++@return LVVE_SUCCESS Succeeded
++@return LVVE_NULLADDRESS When hInstance or pControlParams is NULL
++
++@note The LVVE_Rx_GetControlParameters function can be called at any time during processing.
++
++@ingroup LVVE_Rx
++
++LVVE_Rx_GetControlParameters Example:
++
++The following example shows how to get different control parameters for the LVVE_Rx instance.
++
++\code
++ LVVE_Status = LVVE_Rx_GetControlParameters( &hInstance_Rx,
++ &ControlParams_Rx );
++
++ if( LVVE_Status != LVVE_SUCCESS )
++ {
++ // Handle Errors
++ }
++\endcode
++
++*/
++
++LVVE_ReturnStatus_en LVVE_Rx_GetControlParameters( LVVE_Rx_Handle_t hInstance,
++ LVVE_Rx_ControlParams_st *pControlParams);
++
++/**
++@brief Sets or changes the LVVE_Tx module parameters using C-strcuture.
++
++This function takes the new set of parameters and makes a local copy within
++LVVE_Tx but the parameters are only applied on the next call of the LVVE_Tx_Process
++function. When a parameter is unchanged no action is taken. This function can
++be called at any time during the processing, even when the LVVE_Tx_Process function
++is running. LifeVibes™ VoiceExperience control parameters can be set using two methods.
++Control Parameters can be populated in a \"C\" style structure (as explained in example) and then sent to the library.
++Another method is to populate control parameters in a byte array called Preset Buffer, see @ref LVVE_Tx_SetPreset for example usage.
++
++@param hInstance Instance Handle
++@param pNewParams Pointer to a parameter structure
++
++@pre hInstance should be valid handle.
++
++@return LVVE_SUCCESS Succeeded
++@return LVVE_NULLADDRESS When hInstance or pNewParams is NULL
++@return LVVE_OUTOFRANGE When pNewParams contains parameters of activated modules that are out of the excepted range
++@return LVVE_INVALID_ALGORITHM_CONFIGURATION When two mutual exclusive algorithms are both configured ON at run-time
++ (e.g., NoiseVoid and HandsFree)
++
++
++@note This function may be interrupted by the LVVE_Tx_Process function
++
++@ingroup LVVE_Tx
++
++LVVE_Tx_GetControlParameters: Setting Control Parameters using C-Style structure Example:
++
++The following example shows how to set different control parameters for the LVVE_Tx instance.
++
++\code
++ LVVE_Status = LVVE_Tx_GetControlParameters( &hInstance_Tx,
++ &ControlParams_Tx );
++
++ if( LVVE_Status != LVVE_SUCCESS )
++ {
++ // Handle Errors
++ }
++
++ Change Parameters as required
++ ControlParams_Tx.VOL_Gain = VOL_TABLE[i];
++ ControlParams_Tx.VC_ControlParams = VC_TABLE[i];
++
++ // Update instance with new parameters
++ LVVE_Status = LVVE_Tx_SetControlParameters( &hInstance_Tx,
++ &ControlParams_Tx );
++
++ if( LVVE_Status != LVVE_SUCCESS )
++ {
++ // Handle Errors
++ }
++\endcode
++
++*/
++
++LVVE_ReturnStatus_en LVVE_Tx_SetControlParameters( LVVE_Tx_Handle_t hInstance,
++ const LVVE_Tx_ControlParams_st * const pNewParams);
++
++/**
++@brief Sets or changes the LVVE_Rx module parameters using C-structure.
++
++This function takes the new set of parameters and makes a local copy within
++LVVE_Rx but the parameters are only applied on the next call of the LVVE_Rx_Process
++function. When a parameter is unchanged no action is taken. This function can
++be called at any time during the processing, even when the LVVE_Rx_Process function
++is running. LifeVibes™ VoiceExperience control parameters can be set using two methods.
++Control Parameters can be populated in a \"C\" style structure (as explained in example) and then sent to the library.
++Another method is to populate control parameters in a byte array called Preset Buffer, see @ref LVVE_Rx_SetPreset for example usage.
++
++@param hInstance Instance Handle
++@param pNewParams Pointer to a parameter structure
++
++@pre hInstance should be valid handle.
++
++@return LVVE_SUCCESS Succeeded
++@return LVVE_NULLADDRESS When hInstance or pNewParams is NULL
++@return LVVE_OUTOFRANGE When pNewParams contains parameters of activated modules that are out of the excepted range
++@return LVVE_INVALID_ALGORITHM_CONFIGURATION When two mutual exclusive algorithms are both configured ON at run-time
++ (e.g., NoiseVoid and HandsFree)
++
++
++@note This function may be interrupted by the LVVE_Rx_Process function
++
++@ingroup LVVE_Rx
++
++LVVE_Rx_GetControlParameters: Setting Control Parameters using C-Style structure Example:
++
++The following example shows how to set different control parameters for the LVVE_Rx instance.
++
++\code
++ LVVE_Status = LVVE_Rx_GetControlParameters( &hInstance_Rx,
++ &ControlParams_Rx );
++
++ if( LVVE_Status != LVVE_SUCCESS )
++ {
++ // Handle Errors
++ }
++
++ Change Parameters as required
++ ControlParams_Rx.VOL_Gain = VOL_TABLE[i];
++ ControlParams_Rx.VC_ControlParams = VC_TABLE[i];
++
++ // Update instance with new parameters
++ LVVE_Status = LVVE_Rx_SetControlParameters( &hInstance_Rx,
++ &ControlParams_Rx );
++
++ if( LVVE_Status != LVVE_SUCCESS )
++ {
++ // Handle Errors
++ }
++\endcode
++
++*/
++LVVE_ReturnStatus_en LVVE_Rx_SetControlParameters( LVVE_Rx_Handle_t hInstance,
++ const LVVE_Rx_ControlParams_st * const pNewParams);
++
++/**
++@brief Retrieve the current LVVE_Tx status parameters.
++
++This function copies internal status variables into the supplied status
++parameter structures.
++
++@param hInstance Instance handle
++@param pStatusParams Pointer to the status parameters
++
++@pre hInstance should be valid handle.
++@pre pStatusParams should be allocated by caller.
++@post pStatusParams will be filled with the latest status values of LVVE_Tx.
++
++@return LVVE_SUCCESS Succeeded
++@return LVVE_NULLADDRESS When hInstance or pStatusParams is NULL
++
++@note The LVVE_Tx_GetStatusParameters function can be called at any time during processing.
++This function can run in different threads than the process functions.
++
++
++@ingroup LVVE_Tx
++
++LVVE_Tx_GetStatusParameters: Get Internal Algorithm Status Attributes Example:
++The following example shows how to use LVVE_Tx_GetStatusParameters function call.
++
++\code
++ LVVE_Tx_StatusParams_st Tx_Monitor;
++ Status=LVVE_Tx_GetStatusParameters(hInstance_Tx,&Tx_Monitor);
++ if (Status != LVVE_SUCCESS )
++ {
++ // Error Handling
++ }
++\endcode
++
++*/
++
++LVVE_ReturnStatus_en LVVE_Tx_GetStatusParameters( LVVE_Tx_Handle_t hInstance,
++ LVVE_Tx_StatusParams_st *pStatusParams);
++
++/**
++@brief Retrieve the current LVVE_Rx status parameters.
++
++This function copies internal status variables into the supplied status
++parameter structures.
++
++@param hInstance Instance handle
++@param pStatusParams Pointer to the status parameters
++
++@pre hInstance should be valid handle.
++@pre pStatusParams should be allocated by caller.
++@post pStatusParams will be filled with the latest status values of LVVE_Rx.
++
++@return LVVE_SUCCESS Succeeded
++@return LVVE_NULLADDRESS When hInstance or pStatusParams is NULL
++
++@note The LVVE_Rx_GetStatusParameters function can be called at any time during processing.
++This function can run in different threads than the process functions.
++
++@ingroup LVVE_Rx
++
++LVVE_Rx_GetStatusParameters: Get Internal Algorithm Status Attributes Example:
++The following example shows how to use LVVE_Rx_GetStatusParameters function call.
++
++\code
++ LVVE_Rx_StatusParams_st Rx_Monitor;
++ Status=LVVE_Rx_GetStatusParameters(hInstance_Rx,&Rx_Monitor);
++ if (Status != LVVE_SUCCESS )
++ {
++ // Error Handling
++ }
++\endcode
++
++*/
++
++LVVE_ReturnStatus_en LVVE_Rx_GetStatusParameters( LVVE_Rx_Handle_t hInstance,
++ LVVE_Rx_StatusParams_st *pStatusParams);
++
++/**
++@brief Resets the LVVE_Tx module.
++
++The LVVE_Tx module instance memory contains data which depend on the input
++samples that have been processed previously. These data are buffers
++used for filter tabs and delay lines and also adaptive coefficients of the
++algorithm. The LVVE_Tx_ResetInstance function resets this input dependent data.
++
++The LVVE_Tx_ResetInstance function should be called whenever there is a
++discontinuity in the input audio stream. A discontinuity means that the
++current block of samples is not contiguous with the previous block of samples.
++Examples are
++@li Calling the LVVE_Tx_Process function after a period of inactivity
++@li Buffer underrun or overflow in the audio driver
++The LVVE_ResetInstance function of the Tx and/or Tx Unit should only be called when absolutely necessary as re-adaptation
++of internal algorithms will occur.
++The LVVE_ResetInstance functions can be called at any time, even when LVVE_Process is running. The reset will be
++applied at the start of the next call of the LVVE_Tx_Process function.
++
++
++@param hInstance Instance Handle
++@param pResetParams Reset Type
++
++@pre hInstance should be valid handle.
++
++@post Depending on the ResetType value, the LVVE_Tx_ResetInstance function can
++perform:
++@li Soft reset: partial reset of internal buffers and adaptive behavior. To be used for very short
++interruption or discontinuity, e.g., buffer under-run or overflow in the audio driver influencing the echo path delay.
++@li Hard reset: full reset of all internal buffers and adaptive behavior. To be used for long
++interruption or discontinuity, e.g., before calling the LVVE_Tx_Process function after a long period of inactivity
++in between calls in case instance was not freed.
++
++@return LVVE_SUCCESS Succeeded
++@return LVVE_NULLADDRESS When hInstance or pResetParams is NULL
++@return LVVE_OUTOFRANGE When content of pResetParams is invalid
++
++@note This function may be interrupted by the LVVE_Tx_Process function
++
++@ingroup LVVE_Tx
++
++LVVE_Tx_ResetInstance Example:
++
++The following example shows how to use LVVE_Tx_ResetInstance.
++\code
++ LVVE_Status = LVVE_Tx_ResetInstance(hInstance, pResetParams);
++
++ if (LVVE_Status != LVVE_SUCCESS)
++ {
++ // Handle LVVE_Tx_ResetInstance errors
++ }
++\endcode
++
++*/
++LVVE_ReturnStatus_en LVVE_Tx_ResetInstance( LVVE_Tx_Handle_t hInstance,
++ LVVE_Tx_ResetParams_st *pResetParams );
++
++/**
++@brief Resets the LVVE_Rx module.
++
++The LVVE_Rx module instance memory contains data which depend on the input
++samples that have been processed previously. These data are buffers
++used for filter tabs and delay lines and also adaptive coefficients of the
++algorithm. The LVVE_Rx_ResetInstance function resets this input dependent data.
++
++The LVVE_Rx_ResetInstance function should be called whenever there is a
++discontinuity in the input audio stream. A discontinuity means that the
++current block of samples is not contiguous with the previous block of samples.
++Examples are
++@li Calling the LVVE_Rx_Process function after a period of inactivity
++@li Buffer underrun or overflow in the audio driver
++The LVVE_ResetInstance function of the Rx and/or Tx Unit should only be called when absolutely necessary as re-adaptation
++of internal algorithms will occur.
++The LVVE_ResetInstance functions can be called at any time, even when LVVE_Process is running. The reset will be
++applied at the start of the next call of the LVVE_Rx_Process function.
++
++
++@param hInstance Instance Handle
++@param pResetParams Reset Type
++
++@pre hInstance should be valid handle.
++
++@post Depending on the ResetType value, the LVVE_Rx_ResetInstance function can
++perform:
++@li Soft reset: partial reset of internal buffers and adaptive behavior. To be used for very short
++interruption or discontinuity, e.g., buffer under-run or overflow in the audio driver influencing the echo path delay.
++@li Hard reset: full reset of all internal buffers and adaptive behavior. To be used for long
++interruption or discontinuity, e.g., before calling the LVVE_Rx_Process function after a long period of inactivity
++in between calls in case instance was not freed.
++
++@return LVVE_SUCCESS Succeeded
++@return LVVE_NULLADDRESS When hInstance or pResetParams is NULL
++@return LVVE_OUTOFRANGE When content of pResetParams is invalid
++
++@note This function may be interrupted by the LVVE_Rx_Process function
++
++@ingroup LVVE_Rx
++
++LVVE_Rx_ResetInstance Example:
++
++The following example shows how to use LVVE_Rx_ResetInstance.
++\code
++ LVVE_Status = LVVE_Rx_ResetInstance(hInstance, pResetParams);
++
++ if (LVVE_Status != LVVE_SUCCESS)
++ {
++ // Handle LVVE_Rx_ResetInstance errors
++ }
++\endcode
++
++*/
++LVVE_ReturnStatus_en LVVE_Rx_ResetInstance( LVVE_Rx_Handle_t hInstance,
++ LVVE_Rx_ResetParams_st *pResetParams );
++
++/**
++@brief Processes a block of samples by the LVVE_Tx module.
++
++This function processes the block of samples as configured with the current
++parameter settings. If new parameters have been given since the last call to
++LVVE_Tx_Process then these will be applied at the beginning of this process call.
++
++@param hInstance Instance Handle
++@param pInDataMic0 Pointer to the input speech sample buffer (pimary microphone).
++@param pInDataMic1 Pointer to the input speech sample buffer (secondary microphone).
++@param pRefData Pointer to the input farend reference buffer.
++@param pNoiseData Pointer to the output noise reference buffer.
++@param pOutData Pointer to the output sample buffer.
++@param NumSamples The number of samples to process should be integer multiple(n) of values in table.
++ It is a frquency dependant paramter.
++<table border>
++ <tr>
++ <td><b>Unit</b></td>
++ <td><b>Q format</b></td>
++ <td><b>Data Range</b></td>
++ <td><b>Default Values</b></td>
++ </tr>
++ <tr>
++ <td><b>Samples</b></td>
++ <td><b>Q16.0</b></td>
++ <td>nx80 for 8kHz</td>
++ <td>80 for 8kHz</td>
++ </tr>
++ <tr>
++ <td></td>
++ <td></td>
++ <td>nx160 for 16kHz</td>
++ <td>160 for 16kHz</td>
++ </tr>
++ <tr>
++ <td></td>
++ <td></td>
++ <td>nx240 for 24kHz</td>
++ <td>240 for 24kHz</td>
++ </tr>
++ <tr>
++ <td></td>
++ <td></td>
++ <td>nx320 for 32kHz</td>
++ <td>320 for 32kHz</td>
++ </tr>
++ <tr>
++ <td></td>
++ <td></td>
++ <td>nx480 for 48kHz</td>
++ <td>480 for 48kHz</td>
++ </tr>
++</table>
++
++@pre hInstance should be valid handle.
++@pre LVVE_Tx_SetControlParameters should be called successfully once before.
++the first call to LVVE_Tx_Process
++@pre pInData is filled with the input samples to process.
++
++@post pOutData contains the processed samples.
++
++@return LVVE_SUCCESS Succeeded
++@return LVVE_NULLADDRESS When hInstance, pInData or pOutData is NULL
++@return LVVE_INVALIDNUMSAMPLES When the NumSamples is outside the allowed
++range
++@return LVVE_INVALID_STATE_CONFIGURATION When invalid state of the algorithm found
++
++@ingroup LVVE_Tx
++
++LVVE_Tx_Process Example:
++
++The following example shows how to use LVVE_Tx_Process function call
++
++\code
++ // Tx Processing
++ LVVE_STATUS = LVVE_Tx_Process( hInstance_Tx,
++ pInData_Tx0,
++ pInData_Tx1,
++ pInData_Ref,
++ pNoiseData,
++ pOutData_Tx,
++ NumSamples );
++ if (LVVE_STATUS != LVVE_SUCCESS )
++ {
++ // Error Handling
++ }
++\endcode
++
++*/
++LVVE_ReturnStatus_en LVVE_Tx_Process( LVVE_Tx_Handle_t hInstance,
++ const LVM_INT16 *pInDataMic0,
++ const LVM_INT16 *pInDataMic1,
++ const LVM_INT16 *pRefData,
++ LVM_INT16 *pNoiseData,
++ LVM_INT16 *pOutData,
++ const LVM_UINT16 NumSamples);
++
++/**
++@brief Processes a block of samples by the LVVE_Rx module.
++
++This function processes the block of samples as configured with the current
++parameter settings. If new parameters have been given since the last call to
++LVVE_Rx_Process then these will be applied at the beginning of this process call.
++
++@param hInstance Instance Handle
++@param pInData Pointer to the input sample buffer
++@param pNoiseData Pointer to the input noise buffer (for LVVC only). Pointer to the input noise reference buffer.
++ The size of this buffer depends on the number of samples to process: NoiseDataBufferSize = 2 (size of the input buffer in ms) / 10ms
++ i.e. for 20 ms input buffer, the NoiseData buffer size should be 4.
++
++@param pOutData Pointer to the output sample buffer
++@param NumSamples The number of samples to process should be integer multiple(n) of values in table.
++ It is a frquency dependant paramter.
++<table border>
++ <tr>
++ <td><b>Unit</b></td>
++ <td><b>Q format</b></td>
++ <td><b>Data Range</b></td>
++ <td><b>Default Values</b></td>
++ </tr>
++ <tr>
++ <td><b>Samples</b></td>
++ <td><b>Q16.0</b></td>
++ <td>nx80 for 8kHz</td>
++ <td>80 for 8kHz</td>
++ </tr>
++ <tr>
++ <td></td>
++ <td></td>
++ <td>nx160 for 16kHz</td>
++ <td>160 for 16kHz</td>
++ </tr>
++ <tr>
++ <td></td>
++ <td></td>
++ <td>nx240 for 24kHz</td>
++ <td>240 for 24kHz</td>
++ </tr>
++ <tr>
++ <td></td>
++ <td></td>
++ <td>nx320 for 32kHz</td>
++ <td>320 for 32kHz</td>
++ </tr>
++ <tr>
++ <td></td>
++ <td></td>
++ <td>nx480 for 48kHz</td>
++ <td>480 for 48kHz</td>
++ </tr>
++</table>
++
++@pre hInstance should be valid handle.
++@pre LVVE_Rx_SetControlParameters should be called successfully once before.
++the first call to LVVE_Rx_Process
++@pre pInData is filled with the input samples to process.
++
++@post pOutData contains the processed samples.
++
++@return LVVE_SUCCESS Succeeded
++@return LVVE_NULLADDRESS When hInstance, pInData or pOutData is NULL
++@return LVVE_INVALIDNUMSAMPLES When the NumSamples is outside the allowed
++range
++@return LVVE_INVALID_STATE_CONFIGURATION When invalid state of the algorithm found
++
++@ingroup LVVE_Rx
++
++LVVE_Rx_Process Example:
++The following example shows how to use LVVE_Rx_Process function call.
++
++\code
++ // Rx Processing
++ LVVE_STATUS = LVVE_Rx_Process( hInstance_Rx,
++ pInData_Rx,
++ pNoiseData,
++ pOutData_Rx,
++ NumSamples );
++
++ if (LVVE_STATUS != LVVE_SUCCESS )
++ {
++ // Error Handling
++ }
++\endcode
++
++*/
++
++LVVE_ReturnStatus_en LVVE_Rx_Process( LVVE_Rx_Handle_t hInstance,
++ const LVM_INT16 *pInData,
++ const LVM_INT16 *pNoiseData,
++ LVM_INT16 *pOutData,
++ const LVM_UINT16 NumSamples);
++
++
++/**
++\brief get the version number of current of LVVE library.
++
++This function returns, to host, current version of the LVVE library
++@param pVersion version info
++
++@return LVVE_SUCCESS Succeeded
++@return LVVE_NULLADDRESS When one of hInstance, pInData or pOutData is NULL
++
++LVVE_GetVersionInfot Example:
++
++\code
++ //Get the version information
++ LVVE_VersionInfo VersionInfo;
++ LVVE_GetVersionInfo(&VersionInfo);
++\endcode
++
++*/
++LVVE_ReturnStatus_en LVVE_GetVersionInfo( LVVE_VersionInfo *pVersion );
++
++/**
++@brief Sets or changes the LVVE_Tx module parameters through a Preset Buffer.
++
++Sets or changes the LVVE_Tx module parameters through a Preset Buffer. To set parameters using \"C\" structure see
++@ref LVVE_Tx_SetControlParameters
++This function takes the new set of parameters and makes a local copy within the
++LVVE_Tx module but the parameters are only applied on the next call of the LVVE_Tx_Process
++function. When no parameters are changed, no action is taken. This function can
++be called at any time during the processing, even when the LVVE_Tx_Process function
++is running.
++The new parameters are supplied in the form a @ref LVVE_Tx_Preset_t (Byte array).
++The length of the byte array shall be a multiple of @ref LVVE_TX_PRESET_LENGTH.
++
++@param hInstance Instance Handle
++@param pPreset Pointer to a Preset buffer
++@param PresetLength Length in bytes of the Preset buffer
++@param VolumeIndex Volume index to be selected from the Preset buffer
++
++@pre hInstance should be valid handle.
++
++@return @ref LVVE_SUCCESS Succeeded
++@return @ref LVVE_NULLADDRESS When hInstance or pPreset is NULL
++@return @ref LVVE_OUTOFRANGE When PresetLength or any of the new parameters is out of range
++@return @ref LVVE_INVALID_ALGORITHM_CONFIGURATION When mutually exclusive algorithms are enabled in the parameters at the same time
++@return @ref LVVE_PRESET_INVALID_BUFFER_LENGTH When the length of the input buffer is smaller than LVVE_TX_PRESET_LENGTH
++@return @ref LVVE_PRESET_INVALID_VOLUME_INDEX When the volume index exceeds the buffer content
++@return @ref LVVE_PRESET_INVALID_BUFFER_VERSION When the version of the format of the preset buffer does not match the version of the library
++@return @ref LVVE_PRESET_INVALID_BASELINE_VERSION When the baseline version of the provided preset buffer and the baseline version of the library do not match. Is the preset generated for this library ?
++@return @ref LVVE_PRESET_INVALID_MASK When the algorithm mask of the provided preset buffer and the algorithm mask of the library do not match. Is the preset generated for this library ?
++@return @ref LVVE_PRESET_INVALID_SAMPLE_RATE When the sample rate @ref LVM_Fs_en of the preset does not match the sample rate of the hInstance
++@return @ref LVVE_PRESET_INVALID_LVWIREFORMAT_MESSAGEID When the LVWireformat message id @ref LVVIDHeader_MessageID_en of the preset is not valid
++
++@note This function may be interrupted by the LVVE_Tx_Process function
++
++@ingroup LVVE_Tx
++LVVE_Tx_SetPreset: Setting Control Parameters using Preset Buffer Example:
++
++The following example shows how to set different control parameters for the LVVE_Tx instance using Preset Buffer.
++
++\code
++ LVM_CHAR LVVE_Tx_Preset_Buffer[LVVE_TX_PRESET_LENGTH];
++ LVVE_Tx_Preset_t const LVVE_Tx_Preset = LVVE_Tx_Preset_Buffer;
++
++ FILE *PRESETFILE_Tx;
++ LVM_INT32 ReadBytes = 0;
++
++ PRESETFILE_Tx=fopen(filename, "rb" );
++
++ // Read the preset buffer
++ ReadBytes = fread( LVVE_Tx_Preset_Buffer,
++ sizeof(LVM_CHAR),
++ (LVM_UINT32)LVVE_TX_PRESET_LENGTH,
++ PRESETFILE_Tx );
++
++ fclose(PRESETFILE_Tx);
++
++ // Update instance with new preset buffer
++ LVVE_Status = LVVE_Tx_SetPreset( hInstance_Tx,
++ LVVE_Tx_Preset,
++ ReadBytes,
++ 0);
++
++ if ( LVVE_Status != LVVE_SUCCESS )
++ {
++ // Handle Errors
++ }
++\endcode
++
++
++
++*/
++LVVE_ReturnStatus_en LVVE_Tx_SetPreset(LVVE_Tx_Handle_t hInstance,
++ const LVVE_Tx_Preset_t pPreset,
++ LVM_UINT32 PresetLength,
++ LVM_UINT16 VolumeIndex);
++
++/**
++@brief Sets or changes the LVVE_Rx module parameters through a Preset Buffer
++
++Sets or changes the LVVE_Rx module parameters through a Preset Buffer. To set parameters using \"C\" structure see
++@ref LVVE_Rx_SetControlParameters
++This function takes the new set of parameters and makes a local copy within the
++LVVE_Rx module but the parameters are only applied on the next call of the LVVE_Rx_Process
++function. When no parameters are changed, no action is taken. This function can
++be called at any time during the processing, even when the LVVE_Rx_Process function
++is running.
++The new parameters are supplied in the form a @ref LVVE_Rx_Preset_t (Byte array).
++The length of the byte array shall be a multiple of @ref LVVE_RX_PRESET_LENGTH.
++
++@param hInstance Instance Handle
++@param pPreset Pointer to a Preset buffer
++@param PresetLength Length in bytes of the Preset buffer
++@param VolumeIndex Volume index to be selected from the Preset buffer
++
++@pre hInstance should be valid handle.
++
++@return @ref LVVE_SUCCESS Succeeded
++@return @ref LVVE_NULLADDRESS When hInstance or pPreset is NULL
++@return @ref LVVE_OUTOFRANGE When PresetLength or any of the new parameters is out of range
++@return @ref LVVE_INVALID_ALGORITHM_CONFIGURATION When mutually exclusive algorithms are enabled in the parameters at the same time
++@return @ref LVVE_PRESET_INVALID_BUFFER_LENGTH When the length of the input buffer is smaller than LVVE_RX_PRESET_LENGTH
++@return @ref LVVE_PRESET_INVALID_VOLUME_INDEX When the volume index exceeds the buffer content
++@return @ref LVVE_PRESET_INVALID_BUFFER_VERSION When the version of the format of the preset buffer does not match the version of the library
++@return @ref LVVE_PRESET_INVALID_BASELINE_VERSION When the baseline version of the provided preset buffer and the baseline version of the library do not match. Is the preset generated for this library ?
++@return @ref LVVE_PRESET_INVALID_MASK When the algorithm mask of the provided preset buffer and the algorithm mask of the library do not match. Is the preset generated for this library ?
++@return @ref LVVE_PRESET_INVALID_SAMPLE_RATE When the sample rate @ref LVM_Fs_en of the preset does not match the sample rate of the hInstance
++@return @ref LVVE_PRESET_INVALID_LVWIREFORMAT_MESSAGEID When the LVWireformat message id @ref LVVIDHeader_MessageID_en of the preset is not valid
++
++@note This function may be interrupted by the LVVE_Rx_Process function
++
++@ingroup LVVE_Rx
++
++LVVE_Rx_SetPreset: Setting Control Parameters using Preset Buffer Example:
++
++The following example shows how to set different control parameters for the LVVE_Rx instance using Preset Buffer.
++
++\code
++ #define NUM_VOLUMES (5)
++ LVM_CHAR LVVE_Rx_Preset_Buffer[NUM_VOLUMES*LVVE_RX_PRESET_LENGTH];
++ LVVE_Rx_Preset_t const LVVE_Rx_Preset = LVVE_Rx_Preset_Buffer;
++
++ FILE *PRESETFILE_Rx;
++ LVM_INT32 ReadBytes = 0;
++ LVM_UINT16 VolumeIndex = 3;
++
++ PRESETFILE_Rx=fopen(filename, "rb" );
++
++ // Read the preset buffer
++ ReadBytes = fread( LVVE_Rx_Preset_Buffer,
++ sizeof(LVM_CHAR),
++ (LVM_UINT32)(NUM_VOLUMES*LVVE_RX_PRESET_LENGTH),
++ PRESETFILE_Rx );
++
++ fclose(PRESETFILE_Rx);
++
++ // Update instance with new preset buffer
++ LVVE_Status = LVVE_Rx_SetPreset( hInstance_Rx,
++ LVVE_Rx_Preset,
++ ReadBytes,
++ VolumeIndex);
++
++ if ( LVVE_Status != LVVE_SUCCESS )
++ {
++ // Handle Errors
++ }
++\endcode
++
++*/
++LVVE_ReturnStatus_en LVVE_Rx_SetPreset(LVVE_Rx_Handle_t hInstance,
++ const LVVE_Rx_Preset_t pPreset,
++ LVM_UINT32 PresetLength,
++ LVM_UINT16 VolumeIndex);
++
++
++#ifdef __cplusplus
++}
++#endif /* __cplusplus */
++
++#endif /* __LVVE_H__ */
++
++/* End of file */
+diff --git a/Uboot/cp/ps/driver/src/chipsets/src/audio_base/nxp/tos/LVVE_VID.h b/Uboot/cp/ps/driver/src/chipsets/src/audio_base/nxp/tos/LVVE_VID.h
+new file mode 100755
+index 0000000..98a1461
+--- /dev/null
++++ b/Uboot/cp/ps/driver/src/chipsets/src/audio_base/nxp/tos/LVVE_VID.h
+@@ -0,0 +1,8452 @@
++/****************************************************************************************/
++/* Copyright (c) 2004-2015 NXP Software. All rights are reserved. */
++/* Reproduction in whole or in part is prohibited without the prior */
++/* written consent of the copyright owner. */
++/* */
++/* This software and any compilation or derivative thereof is and */
++/* shall remain the proprietary information of NXP Software and is */
++/* highly confidential in nature. Any and all use hereof is restricted */
++/* and is subject to the terms and conditions set forth in the */
++/* software license agreement concluded with NXP Software. */
++/* */
++/* Under no circumstances is this software or any derivative thereof */
++/* to be combined with any Open Source Software in any way or */
++/* licensed under any Open License Terms without the express prior */
++/* written permission of NXP Software. */
++/* */
++/* For the purpose of this clause, the term Open Source Software means */
++/* any software that is licensed under Open License Terms. Open */
++/* License Terms means terms in any license that require as a */
++/* condition of use, modification and/or distribution of a work */
++/* */
++/* 1. the making available of source code or other materials */
++/* preferred for modification, or */
++/* */
++/* 2. the granting of permission for creating derivative */
++/* works, or */
++/* */
++/* 3. the reproduction of certain notices or license terms */
++/* in derivative works or accompanying documentation, or */
++/* */
++/* 4. the granting of a royalty-free license to any party */
++/* under Intellectual Property Rights */
++/* */
++/* regarding the work and/or any work that contains, is combined with, */
++/* requires or otherwise is based on the work. */
++/* */
++/* This software is provided for ease of recompilation only. */
++/* Modification and reverse engineering of this software are strictly */
++/* prohibited. */
++/* */
++/****************************************************************************************/
++
++/****************************************************************************************/
++/* */
++/* $Author: nxp65285 $*/
++/* $Revision: 49390 $*/
++/* $Date: 2013-10-16 18:34:35 +0530 (Wed, 16 Oct 2013) $*/
++/* */
++/****************************************************************************************/
++
++/** @file
++ * Header file for the application layer interface of the REL_LVVE_HF_NV1_VC_AGC_RX_DRC_RX_WB module
++ *
++ * The suffix VID in header file stands for Voice Interface Definition
++ * This files includes all definitions, types, and structures required by the calling
++ * layer. Public functions are defined in the protoypes header files.
++ * All other types, structures and functions are private.
++ */
++
++#ifndef __REL_LVVE_HF_NV1_VC_AGC_RX_DRC_RX_WB_VIDPP_H__
++#define __REL_LVVE_HF_NV1_VC_AGC_RX_DRC_RX_WB_VIDPP_H__
++
++#ifdef __cplusplus
++extern "C" {
++#endif /* __cplusplus */
++
++/****************************************************************************************/
++/* */
++/* Includes */
++/* */
++/****************************************************************************************/
++#include "LVC_Types.h"
++
++/****************************************************************************************/
++/* */
++/* Definitions */
++/* */
++/****************************************************************************************/
++/**
++<table border>
++ <tr>
++ <td><b>Name</b></td>
++ <td><b>Value</b></td>
++ <td><b>Description</b></td>
++ </tr>
++ <tr>
++ <td>@ref LVVIDHEADER_LVVE_RX_LVFENS_MASK1</td>
++ <td>1</td>
++ <td>Far End Noise Suppression is present in the LVVE_Rx</td>
++ </tr>
++ <tr>
++ <td>@ref LVVIDHEADER_LVVE_RX_HPF_MASK1</td>
++ <td>4</td>
++ <td>High Pass Filter is present in the LVVE_Rx</td>
++ </tr>
++ <tr>
++ <td>@ref LVVIDHEADER_LVVE_RX_LVNG_MASK1</td>
++ <td>16</td>
++ <td>Noise Gate is present in the LVVE_Rx</td>
++ </tr>
++ <tr>
++ <td>@ref LVVIDHEADER_LVVE_RX_EQ_MASK1</td>
++ <td>64</td>
++ <td>Equalizer is present in the LVVE_Rx</td>
++ </tr>
++ <tr>
++ <td>@ref LVVIDHEADER_LVVE_RX_AGC_MASK1</td>
++ <td>128</td>
++ <td>Automatic Gain Control is present in the LVVE_Rx</td>
++ </tr>
++ <tr>
++ <td>@ref LVVIDHEADER_LVVE_RX_DRC_MASK1</td>
++ <td>256</td>
++ <td>Dynamic Range Control is present in the LVVE_Rx</td>
++ </tr>
++ <tr>
++ <td>@ref LVVIDHEADER_LVVE_RX_VOL_MASK1</td>
++ <td>512</td>
++ <td>Volume Control is present in the LVVE_Rx</td>
++ </tr>
++ <tr>
++ <td>@ref LVVIDHEADER_LVVE_RX_LVVC_MASK1</td>
++ <td>1024</td>
++ <td>VoiceClarity is present in the LVVE_Rx</td>
++ </tr>
++</table> */
++typedef LVM_UINT16 LVVIDHeader_LVVE_Rx_Mask1_bm;
++/**
++* @def LVVIDHeader_LVVE_Rx_LVFENS_MASK1
++* Far End Noise Suppression is present in the LVVE_Rx
++* @see LVVIDHeader_LVVE_Rx_Mask1_bm
++*/
++#define LVVIDHEADER_LVVE_RX_LVFENS_MASK1 ((LVVIDHeader_LVVE_Rx_Mask1_bm)1)
++/**
++* @def LVVIDHeader_LVVE_Rx_HPF_MASK1
++* High Pass Filter is present in the LVVE_Rx
++* @see LVVIDHeader_LVVE_Rx_Mask1_bm
++*/
++#define LVVIDHEADER_LVVE_RX_HPF_MASK1 ((LVVIDHeader_LVVE_Rx_Mask1_bm)4)
++/**
++* @def LVVIDHeader_LVVE_Rx_LVNG_MASK1
++* Noise Gate is present in the LVVE_Rx
++* @see LVVIDHeader_LVVE_Rx_Mask1_bm
++*/
++#define LVVIDHEADER_LVVE_RX_LVNG_MASK1 ((LVVIDHeader_LVVE_Rx_Mask1_bm)16)
++/**
++* @def LVVIDHeader_LVVE_Rx_EQ_MASK1
++* Equalizer is present in the LVVE_Rx
++* @see LVVIDHeader_LVVE_Rx_Mask1_bm
++*/
++#define LVVIDHEADER_LVVE_RX_EQ_MASK1 ((LVVIDHeader_LVVE_Rx_Mask1_bm)64)
++/**
++* @def LVVIDHeader_LVVE_Rx_AGC_MASK1
++* Automatic Gain Control is present in the LVVE_Rx
++* @see LVVIDHeader_LVVE_Rx_Mask1_bm
++*/
++#define LVVIDHEADER_LVVE_RX_AGC_MASK1 ((LVVIDHeader_LVVE_Rx_Mask1_bm)128)
++/**
++* @def LVVIDHeader_LVVE_Rx_DRC_MASK1
++* Dynamic Range Control is present in the LVVE_Rx
++* @see LVVIDHeader_LVVE_Rx_Mask1_bm
++*/
++#define LVVIDHEADER_LVVE_RX_DRC_MASK1 ((LVVIDHeader_LVVE_Rx_Mask1_bm)256)
++/**
++* @def LVVIDHeader_LVVE_Rx_VOL_MASK1
++* Volume Control is present in the LVVE_Rx
++* @see LVVIDHeader_LVVE_Rx_Mask1_bm
++*/
++#define LVVIDHEADER_LVVE_RX_VOL_MASK1 ((LVVIDHeader_LVVE_Rx_Mask1_bm)512)
++/**
++* @def LVVIDHeader_LVVE_Rx_LVVC_MASK1
++* VoiceClarity is present in the LVVE_Rx
++* @see LVVIDHeader_LVVE_Rx_Mask1_bm
++*/
++#define LVVIDHEADER_LVVE_RX_LVVC_MASK1 ((LVVIDHeader_LVVE_Rx_Mask1_bm)1024)
++/**
++* @def LVVIDHEADER_LVVE_RX_MASK1_BM_MIN
++* Minimal value for LVVIDHeader_LVVE_Rx_Mask1_bm
++* @see LVVIDHeader_LVVE_Rx_Mask1_bm
++*/
++#define LVVIDHEADER_LVVE_RX_MASK1_BM_MIN ((LVVIDHeader_LVVE_Rx_Mask1_bm)0)
++/**
++* @def LVVIDHEADER_LVVE_RX_MASK1_BM_MAX
++* Maximal value for LVVIDHeader_LVVE_Rx_Mask1_bm
++* @see LVVIDHeader_LVVE_Rx_Mask1_bm
++*/
++#define LVVIDHEADER_LVVE_RX_LVFENS_MASK1_FORMAX ((LVVIDHeader_LVVE_Rx_Mask1_bm)1)
++#define LVVIDHEADER_LVVE_RX_HPF_MASK1_FORMAX ((LVVIDHeader_LVVE_Rx_Mask1_bm)4)
++#define LVVIDHEADER_LVVE_RX_LVNG_MASK1_FORMAX ((LVVIDHeader_LVVE_Rx_Mask1_bm)16)
++#define LVVIDHEADER_LVVE_RX_EQ_MASK1_FORMAX ((LVVIDHeader_LVVE_Rx_Mask1_bm)64)
++#define LVVIDHEADER_LVVE_RX_AGC_MASK1_FORMAX ((LVVIDHeader_LVVE_Rx_Mask1_bm)128)
++#define LVVIDHEADER_LVVE_RX_DRC_MASK1_FORMAX ((LVVIDHeader_LVVE_Rx_Mask1_bm)256)
++#define LVVIDHEADER_LVVE_RX_VOL_MASK1_FORMAX ((LVVIDHeader_LVVE_Rx_Mask1_bm)512)
++#define LVVIDHEADER_LVVE_RX_LVVC_MASK1_FORMAX ((LVVIDHeader_LVVE_Rx_Mask1_bm)1024)
++#define LVVIDHEADER_LVVE_RX_MASK1_BM_MAX (LVVIDHEADER_LVVE_RX_LVFENS_MASK1_FORMAX | LVVIDHEADER_LVVE_RX_HPF_MASK1_FORMAX | LVVIDHEADER_LVVE_RX_LVNG_MASK1_FORMAX | LVVIDHEADER_LVVE_RX_EQ_MASK1_FORMAX | LVVIDHEADER_LVVE_RX_AGC_MASK1_FORMAX | LVVIDHEADER_LVVE_RX_DRC_MASK1_FORMAX | LVVIDHEADER_LVVE_RX_VOL_MASK1_FORMAX | LVVIDHEADER_LVVE_RX_LVVC_MASK1_FORMAX | ((LVVIDHeader_LVVE_Rx_Mask1_bm)0))
++/**
++<table border>
++ <tr>
++ <td><b>Name</b></td>
++ <td><b>Value</b></td>
++ <td><b>Description</b></td>
++ </tr>
++</table> */
++typedef LVM_UINT16 LVVIDHeader_LVVE_Rx_Mask2_bm;
++/**
++* @def LVVIDHEADER_LVVE_RX_MASK2_BM_MIN
++* Minimal value for LVVIDHeader_LVVE_Rx_Mask2_bm
++* @see LVVIDHeader_LVVE_Rx_Mask2_bm
++*/
++#define LVVIDHEADER_LVVE_RX_MASK2_BM_MIN ((LVVIDHeader_LVVE_Rx_Mask2_bm)0)
++/**
++* @def LVVIDHEADER_LVVE_RX_MASK2_BM_MAX
++* Maximal value for LVVIDHeader_LVVE_Rx_Mask2_bm
++* @see LVVIDHeader_LVVE_Rx_Mask2_bm
++*/
++#define LVVIDHEADER_LVVE_RX_MASK2_BM_MAX (((LVVIDHeader_LVVE_Rx_Mask2_bm)0))
++/**
++<table border>
++ <tr>
++ <td><b>Name</b></td>
++ <td><b>Value</b></td>
++ <td><b>Description</b></td>
++ </tr>
++ <tr>
++ <td>@ref LVVIDHEADER_LVVE_TX_LVHF_MASK1</td>
++ <td>1</td>
++ <td>HandsFree is present in the LVVE_Tx</td>
++ </tr>
++ <tr>
++ <td>@ref LVVIDHEADER_LVVE_TX_EQ_MASK1</td>
++ <td>4</td>
++ <td>Equalizer is present in the LVVE_Tx</td>
++ </tr>
++ <tr>
++ <td>@ref LVVIDHEADER_LVVE_TX_LVWM_MASK1</td>
++ <td>8</td>
++ <td>WhisperMode is present in the LVVE_Tx</td>
++ </tr>
++ <tr>
++ <td>@ref LVVIDHEADER_LVVE_TX_DRC_MASK1</td>
++ <td>16</td>
++ <td>Dynamic Range Control is present in the LVVE_Tx</td>
++ </tr>
++ <tr>
++ <td>@ref LVVIDHEADER_LVVE_TX_VOL_MASK1</td>
++ <td>32</td>
++ <td>Volume Control is present in the LVVE_Tx</td>
++ </tr>
++ <tr>
++ <td>@ref LVVIDHEADER_LVVE_TX_HPF_MASK1</td>
++ <td>128</td>
++ <td>HPF is present in the LVVE_Tx</td>
++ </tr>
++ <tr>
++ <td>@ref LVVIDHEADER_LVVE_TX_LVNV_01_MASK1</td>
++ <td>512</td>
++ <td>NoiseVoid is present in the LVVE_Tx</td>
++ </tr>
++</table> */
++typedef LVM_UINT16 LVVIDHeader_LVVE_Tx_Mask1_bm;
++/**
++* @def LVVIDHeader_LVVE_Tx_LVHF_MASK1
++* HandsFree is present in the LVVE_Tx
++* @see LVVIDHeader_LVVE_Tx_Mask1_bm
++*/
++#define LVVIDHEADER_LVVE_TX_LVHF_MASK1 ((LVVIDHeader_LVVE_Tx_Mask1_bm)1)
++/**
++* @def LVVIDHeader_LVVE_Tx_EQ_MASK1
++* Equalizer is present in the LVVE_Tx
++* @see LVVIDHeader_LVVE_Tx_Mask1_bm
++*/
++#define LVVIDHEADER_LVVE_TX_EQ_MASK1 ((LVVIDHeader_LVVE_Tx_Mask1_bm)4)
++/**
++* @def LVVIDHeader_LVVE_Tx_LVWM_MASK1
++* WhisperMode is present in the LVVE_Tx
++* @see LVVIDHeader_LVVE_Tx_Mask1_bm
++*/
++#define LVVIDHEADER_LVVE_TX_LVWM_MASK1 ((LVVIDHeader_LVVE_Tx_Mask1_bm)8)
++/**
++* @def LVVIDHeader_LVVE_Tx_DRC_MASK1
++* Dynamic Range Control is present in the LVVE_Tx
++* @see LVVIDHeader_LVVE_Tx_Mask1_bm
++*/
++#define LVVIDHEADER_LVVE_TX_DRC_MASK1 ((LVVIDHeader_LVVE_Tx_Mask1_bm)16)
++/**
++* @def LVVIDHeader_LVVE_Tx_VOL_MASK1
++* Volume Control is present in the LVVE_Tx
++* @see LVVIDHeader_LVVE_Tx_Mask1_bm
++*/
++#define LVVIDHEADER_LVVE_TX_VOL_MASK1 ((LVVIDHeader_LVVE_Tx_Mask1_bm)32)
++/**
++* @def LVVIDHeader_LVVE_Tx_HPF_MASK1
++* HPF is present in the LVVE_Tx
++* @see LVVIDHeader_LVVE_Tx_Mask1_bm
++*/
++#define LVVIDHEADER_LVVE_TX_HPF_MASK1 ((LVVIDHeader_LVVE_Tx_Mask1_bm)128)
++/**
++* @def LVVIDHeader_LVVE_Tx_LVNV_01_MASK1
++* NoiseVoid is present in the LVVE_Tx
++* @see LVVIDHeader_LVVE_Tx_Mask1_bm
++*/
++#define LVVIDHEADER_LVVE_TX_LVNV_01_MASK1 ((LVVIDHeader_LVVE_Tx_Mask1_bm)512)
++/**
++* @def LVVIDHEADER_LVVE_TX_MASK1_BM_MIN
++* Minimal value for LVVIDHeader_LVVE_Tx_Mask1_bm
++* @see LVVIDHeader_LVVE_Tx_Mask1_bm
++*/
++#define LVVIDHEADER_LVVE_TX_MASK1_BM_MIN ((LVVIDHeader_LVVE_Tx_Mask1_bm)0)
++/**
++* @def LVVIDHEADER_LVVE_TX_MASK1_BM_MAX
++* Maximal value for LVVIDHeader_LVVE_Tx_Mask1_bm
++* @see LVVIDHeader_LVVE_Tx_Mask1_bm
++*/
++#define LVVIDHEADER_LVVE_TX_LVHF_MASK1_FORMAX ((LVVIDHeader_LVVE_Tx_Mask1_bm)1)
++#define LVVIDHEADER_LVVE_TX_EQ_MASK1_FORMAX ((LVVIDHeader_LVVE_Tx_Mask1_bm)4)
++#define LVVIDHEADER_LVVE_TX_LVWM_MASK1_FORMAX ((LVVIDHeader_LVVE_Tx_Mask1_bm)8)
++#define LVVIDHEADER_LVVE_TX_DRC_MASK1_FORMAX ((LVVIDHeader_LVVE_Tx_Mask1_bm)16)
++#define LVVIDHEADER_LVVE_TX_VOL_MASK1_FORMAX ((LVVIDHeader_LVVE_Tx_Mask1_bm)32)
++#define LVVIDHEADER_LVVE_TX_HPF_MASK1_FORMAX ((LVVIDHeader_LVVE_Tx_Mask1_bm)128)
++#define LVVIDHEADER_LVVE_TX_LVNV_01_MASK1_FORMAX ((LVVIDHeader_LVVE_Tx_Mask1_bm)512)
++#define LVVIDHEADER_LVVE_TX_MASK1_BM_MAX (LVVIDHEADER_LVVE_TX_LVHF_MASK1_FORMAX | LVVIDHEADER_LVVE_TX_EQ_MASK1_FORMAX | LVVIDHEADER_LVVE_TX_LVWM_MASK1_FORMAX | LVVIDHEADER_LVVE_TX_DRC_MASK1_FORMAX | LVVIDHEADER_LVVE_TX_VOL_MASK1_FORMAX | LVVIDHEADER_LVVE_TX_HPF_MASK1_FORMAX | LVVIDHEADER_LVVE_TX_LVNV_01_MASK1_FORMAX | ((LVVIDHeader_LVVE_Tx_Mask1_bm)0))
++/**
++<table border>
++ <tr>
++ <td><b>Name</b></td>
++ <td><b>Value</b></td>
++ <td><b>Description</b></td>
++ </tr>
++</table> */
++typedef LVM_UINT16 LVVIDHeader_LVVE_Tx_Mask2_bm;
++/**
++* @def LVVIDHEADER_LVVE_TX_MASK2_BM_MIN
++* Minimal value for LVVIDHeader_LVVE_Tx_Mask2_bm
++* @see LVVIDHeader_LVVE_Tx_Mask2_bm
++*/
++#define LVVIDHEADER_LVVE_TX_MASK2_BM_MIN ((LVVIDHeader_LVVE_Tx_Mask2_bm)0)
++/**
++* @def LVVIDHEADER_LVVE_TX_MASK2_BM_MAX
++* Maximal value for LVVIDHeader_LVVE_Tx_Mask2_bm
++* @see LVVIDHeader_LVVE_Tx_Mask2_bm
++*/
++#define LVVIDHEADER_LVVE_TX_MASK2_BM_MAX (((LVVIDHeader_LVVE_Tx_Mask2_bm)0))
++/**
++<table border>
++ <tr>
++ <td><b>Name</b></td>
++ <td><b>Value</b></td>
++ <td><b>Description</b></td>
++ </tr>
++ <tr>
++ <td>@ref LVVIDHEADER_CONFIGURATIONS_WIDEBAND_MASK1</td>
++ <td>2</td>
++ <td>WideBand configuration is present in the LVVE</td>
++ </tr>
++</table> */
++typedef LVM_UINT16 LVVIDHeader_Configurations_Mask1_bm;
++/**
++* @def LVVIDHEADER_CONFIGURATIONS_WIDEBAND_MASK1
++* WideBand configuration is present in the LVVE
++* @see LVVIDHeader_Configurations_Mask1_bm
++*/
++#define LVVIDHEADER_CONFIGURATIONS_WIDEBAND_MASK1 ((LVVIDHeader_Configurations_Mask1_bm)2)
++/**
++* @def LVVIDHEADER_CONFIGURATIONS_MASK1_BM_MIN
++* Minimal value for LVVIDHeader_Configurations_Mask1_bm
++* @see LVVIDHeader_Configurations_Mask1_bm
++*/
++#define LVVIDHEADER_CONFIGURATIONS_MASK1_BM_MIN ((LVVIDHeader_Configurations_Mask1_bm)0)
++/**
++* @def LVVIDHEADER_CONFIGURATIONS_MASK1_BM_MAX
++* Maximal value for LVVIDHeader_Configurations_Mask1_bm
++* @see LVVIDHeader_Configurations_Mask1_bm
++*/
++#define LVVIDHEADER_CONFIGURATIONS_WIDEBAND_MASK1_FORMAX ((LVVIDHeader_Configurations_Mask1_bm)2)
++#define LVVIDHEADER_CONFIGURATIONS_MASK1_BM_MAX (LVVIDHEADER_CONFIGURATIONS_WIDEBAND_MASK1_FORMAX | ((LVVIDHeader_Configurations_Mask1_bm)0))
++/**
++<table border>
++ <tr>
++ <td><b>Name</b></td>
++ <td><b>Value</b></td>
++ <td><b>Description</b></td>
++ </tr>
++</table> */
++typedef LVM_UINT16 LVVIDHeader_Configurations_Mask2_bm;
++/**
++* @def LVVIDHEADER_CONFIGURATIONS_MASK2_BM_MIN
++* Minimal value for LVVIDHeader_Configurations_Mask2_bm
++* @see LVVIDHeader_Configurations_Mask2_bm
++*/
++#define LVVIDHEADER_CONFIGURATIONS_MASK2_BM_MIN ((LVVIDHeader_Configurations_Mask2_bm)0)
++/**
++* @def LVVIDHEADER_CONFIGURATIONS_MASK2_BM_MAX
++* Maximal value for LVVIDHeader_Configurations_Mask2_bm
++* @see LVVIDHeader_Configurations_Mask2_bm
++*/
++#define LVVIDHEADER_CONFIGURATIONS_MASK2_BM_MAX (((LVVIDHeader_Configurations_Mask2_bm)0))
++/**
++<table border>
++ <tr>
++ <td><b>Name</b></td>
++ <td><b>Value</b></td>
++ <td><b>Description</b></td>
++ </tr>
++ <tr>
++ <td>@ref LVVC_MODE_AVL</td>
++ <td>2</td>
++ <td>Turns on or off the AGC. If off both AGC and Limiter are bypassed.</td>
++ </tr>
++ <tr>
++ <td>@ref LVVC_MODE_AVL_ADAPT</td>
++ <td>4</td>
++ <td>Allows turning off the dependency of the AGC upon the nearend noise level. When turned off, the AGC uses the default parameters.</td>
++ </tr>
++ <tr>
++ <td>@ref LVVC_MODE_AVL_SPDETECT</td>
++ <td>8</td>
++ <td>Allows disabling speech detection in the AGC. When turned off, the AGC adapts its gain all the time.</td>
++ </tr>
++ <tr>
++ <td>@ref LVVC_MODE_LIMITER</td>
++ <td>16</td>
++ <td>Turns on or off the limiter.</td>
++ </tr>
++ <tr>
++ <td>@ref LVVC_MODE_LPF</td>
++ <td>32</td>
++ <td>Turns on or off the low-pass filter.</td>
++ </tr>
++ <tr>
++ <td>@ref LVVC_MODE_HPF</td>
++ <td>64</td>
++ <td>Turns on or off the high-pass filter.</td>
++ </tr>
++ <tr>
++ <td>@ref LVVC_MODE_VC</td>
++ <td>128</td>
++ <td>Turns on or off the VoiceClarity gain.</td>
++ </tr>
++</table> */
++typedef LVM_UINT16 LVVC_ModeWord_bm;
++/**
++* @def LVVC_MODE_AVL
++* Turns on or off the AGC. If off both AGC and Limiter are bypassed.
++* @see LVVC_ModeWord_bm
++*/
++#define LVVC_MODE_AVL ((LVVC_ModeWord_bm)2)
++/**
++* @def LVVC_MODE_AVL_ADAPT
++* Allows turning off the dependency of the AGC upon the nearend noise level. When turned off, the AGC uses the default parameters.
++* @see LVVC_ModeWord_bm
++*/
++#define LVVC_MODE_AVL_ADAPT ((LVVC_ModeWord_bm)4)
++/**
++* @def LVVC_MODE_AVL_SPDETECT
++* Allows disabling speech detection in the AGC. When turned off, the AGC adapts its gain all the time.
++* @see LVVC_ModeWord_bm
++*/
++#define LVVC_MODE_AVL_SPDETECT ((LVVC_ModeWord_bm)8)
++/**
++* @def LVVC_MODE_LIMITER
++* Turns on or off the limiter.
++* @see LVVC_ModeWord_bm
++*/
++#define LVVC_MODE_LIMITER ((LVVC_ModeWord_bm)16)
++/**
++* @def LVVC_MODE_LPF
++* Turns on or off the low-pass filter.
++* @see LVVC_ModeWord_bm
++*/
++#define LVVC_MODE_LPF ((LVVC_ModeWord_bm)32)
++/**
++* @def LVVC_MODE_HPF
++* Turns on or off the high-pass filter.
++* @see LVVC_ModeWord_bm
++*/
++#define LVVC_MODE_HPF ((LVVC_ModeWord_bm)64)
++/**
++* @def LVVC_MODE_VC
++* Turns on or off the VoiceClarity gain.
++* @see LVVC_ModeWord_bm
++*/
++#define LVVC_MODE_VC ((LVVC_ModeWord_bm)128)
++/**
++* @def LVVC_MODEWORD_BM_MIN
++* Minimal value for LVVC_ModeWord_bm
++* @see LVVC_ModeWord_bm
++*/
++#define LVVC_MODEWORD_BM_MIN ((LVVC_ModeWord_bm)0)
++/**
++* @def LVVC_MODEWORD_BM_MAX
++* Maximal value for LVVC_ModeWord_bm
++* @see LVVC_ModeWord_bm
++*/
++#define LVVC_MODE_AVL_FORMAX ((LVVC_ModeWord_bm)2)
++#define LVVC_MODE_AVL_ADAPT_FORMAX ((LVVC_ModeWord_bm)4)
++#define LVVC_MODE_AVL_SPDETECT_FORMAX ((LVVC_ModeWord_bm)8)
++#define LVVC_MODE_LIMITER_FORMAX ((LVVC_ModeWord_bm)16)
++#define LVVC_MODE_LPF_FORMAX ((LVVC_ModeWord_bm)32)
++#define LVVC_MODE_HPF_FORMAX ((LVVC_ModeWord_bm)64)
++#define LVVC_MODE_VC_FORMAX ((LVVC_ModeWord_bm)128)
++#define LVVC_MODEWORD_BM_MAX (LVVC_MODE_AVL_FORMAX | LVVC_MODE_AVL_ADAPT_FORMAX | LVVC_MODE_AVL_SPDETECT_FORMAX | LVVC_MODE_LIMITER_FORMAX | LVVC_MODE_LPF_FORMAX | LVVC_MODE_HPF_FORMAX | LVVC_MODE_VC_FORMAX | ((LVVC_ModeWord_bm)0))
++/**
++<table border>
++ <tr>
++ <td><b>Name</b></td>
++ <td><b>Value</b></td>
++ <td><b>Description</b></td>
++ </tr>
++ <tr>
++ <td>@ref LVFENS_MODE_HS</td>
++ <td>1</td>
++ <td>Switch ON and OFF Horn Suppressor. Currently Horn Suppressor is not supported.</td>
++ </tr>
++</table> */
++typedef LVM_UINT16 LVFENS_ModeWord_bm;
++/**
++* @def LVFENS_MODE_HS
++* Switch ON and OFF Horn Suppressor. Currently Horn Suppressor is not supported.
++* @see LVFENS_ModeWord_bm
++*/
++#define LVFENS_MODE_HS ((LVFENS_ModeWord_bm)1)
++/**
++* @def LVFENS_MODEWORD_BM_MIN
++* Minimal value for LVFENS_ModeWord_bm
++* @see LVFENS_ModeWord_bm
++*/
++#define LVFENS_MODEWORD_BM_MIN ((LVFENS_ModeWord_bm)0)
++/**
++* @def LVFENS_MODEWORD_BM_MAX
++* Maximal value for LVFENS_ModeWord_bm
++* @see LVFENS_ModeWord_bm
++*/
++#define LVFENS_MODE_HS_FORMAX ((LVFENS_ModeWord_bm)1)
++#define LVFENS_MODEWORD_BM_MAX (LVFENS_MODE_HS_FORMAX | ((LVFENS_ModeWord_bm)0))
++/**
++<table border>
++ <tr>
++ <td><b>Name</b></td>
++ <td><b>Value</b></td>
++ <td><b>Description</b></td>
++ </tr>
++ <tr>
++ <td>@ref LVWM_MODE_AVL</td>
++ <td>1</td>
++ <td>Turns on or off the AVL. If off, both AGC and Limiter are bypassed</td>
++ </tr>
++ <tr>
++ <td>@ref LVWM_MODE_SPDETECT</td>
++ <td>2</td>
++ <td>Allows disabling speech detection in the AVL. When turned off, the AGC adapts its gain all the time.</td>
++ </tr>
++ <tr>
++ <td>@ref LVWM_MODE_LIMITER</td>
++ <td>4</td>
++ <td>Turns on or off the limiter.</td>
++ </tr>
++ <tr>
++ <td>@ref LVWM_MODE_EXT_SPDETECT</td>
++ <td>8</td>
++ <td>Used to tell the WhisperMode module if an external speech detection is available (If 0, there is no external speech detector).</td>
++ </tr>
++</table> */
++typedef LVM_UINT16 LVWM_ModeWord_bm;
++/**
++* @def LVWM_MODE_AVL
++* Turns on or off the AVL. If off, both AGC and Limiter are bypassed
++* @see LVWM_ModeWord_bm
++*/
++#define LVWM_MODE_AVL ((LVWM_ModeWord_bm)1)
++/**
++* @def LVWM_MODE_SPDETECT
++* Allows disabling speech detection in the AVL. When turned off, the AGC adapts its gain all the time.
++* @see LVWM_ModeWord_bm
++*/
++#define LVWM_MODE_SPDETECT ((LVWM_ModeWord_bm)2)
++/**
++* @def LVWM_MODE_LIMITER
++* Turns on or off the limiter.
++* @see LVWM_ModeWord_bm
++*/
++#define LVWM_MODE_LIMITER ((LVWM_ModeWord_bm)4)
++/**
++* @def LVWM_MODE_EXT_SPDETECT
++* Used to tell the WhisperMode module if an external speech detection is available (If 0, there is no external speech detector).
++* @see LVWM_ModeWord_bm
++*/
++#define LVWM_MODE_EXT_SPDETECT ((LVWM_ModeWord_bm)8)
++/**
++* @def LVWM_MODEWORD_BM_MIN
++* Minimal value for LVWM_ModeWord_bm
++* @see LVWM_ModeWord_bm
++*/
++#define LVWM_MODEWORD_BM_MIN ((LVWM_ModeWord_bm)0)
++/**
++* @def LVWM_MODEWORD_BM_MAX
++* Maximal value for LVWM_ModeWord_bm
++* @see LVWM_ModeWord_bm
++*/
++#define LVWM_MODE_AVL_FORMAX ((LVWM_ModeWord_bm)1)
++#define LVWM_MODE_SPDETECT_FORMAX ((LVWM_ModeWord_bm)2)
++#define LVWM_MODE_LIMITER_FORMAX ((LVWM_ModeWord_bm)4)
++#define LVWM_MODE_EXT_SPDETECT_FORMAX ((LVWM_ModeWord_bm)8)
++#define LVWM_MODEWORD_BM_MAX (LVWM_MODE_AVL_FORMAX | LVWM_MODE_SPDETECT_FORMAX | LVWM_MODE_LIMITER_FORMAX | LVWM_MODE_EXT_SPDETECT_FORMAX | ((LVWM_ModeWord_bm)0))
++/**
++<table border>
++ <tr>
++ <td><b>Name</b></td>
++ <td><b>Value</b></td>
++ <td><b>Description</b></td>
++ </tr>
++ <tr>
++ <td>@ref MODE_NLMS0</td>
++ <td>1</td>
++ <td>NLMS0 functionality</td>
++ </tr>
++ <tr>
++ <td>@ref MODE_NLMS1</td>
++ <td>2</td>
++ <td>NLMS1 functionality</td>
++ </tr>
++ <tr>
++ <td>@ref MODE_BEAMFORMER</td>
++ <td>4</td>
++ <td>Fiter-and-Sum Beamformer functionality</td>
++ </tr>
++ <tr>
++ <td>@ref MODE_PCD</td>
++ <td>8</td>
++ <td>Switch between PCD (Path change detector) and BSD (Broadside detector)</td>
++ </tr>
++ <tr>
++ <td>@ref MODE_GSC</td>
++ <td>16</td>
++ <td>Generalized Sidelobe Canceller functionality</td>
++ </tr>
++ <tr>
++ <td>@ref MODE_DNNS</td>
++ <td>32</td>
++ <td>Dynamic Non-stationary Noise Suppression functionality</td>
++ </tr>
++ <tr>
++ <td>@ref MODE_DES</td>
++ <td>64</td>
++ <td>Dynamic Echo Suppression functionality</td>
++ </tr>
++ <tr>
++ <td>@ref MODE_NS</td>
++ <td>128</td>
++ <td>Stationary Noise Suppression functionality</td>
++ </tr>
++ <tr>
++ <td>@ref MODE_NS_N</td>
++ <td>256</td>
++ <td>Non-stationary Noise Suppression functionality</td>
++ </tr>
++ <tr>
++ <td>@ref MODE_CAL</td>
++ <td>2048</td>
++ <td>Switch between initial or continuous calibration</td>
++ </tr>
++ <tr>
++ <td>@ref MODE_HB</td>
++ <td>16384</td>
++ <td>High Band mute/activated</td>
++ </tr>
++ <tr>
++ <td>@ref MODE_HS</td>
++ <td>32768</td>
++ <td>Horn Suppressor functionality (if available)</td>
++ </tr>
++</table> */
++typedef LVM_UINT16 LVNV_ModeWord_bm;
++/**
++* @def MODE_NLMS0
++* NLMS0 functionality
++* @see LVNV_ModeWord_bm
++*/
++#define MODE_NLMS0 ((LVNV_ModeWord_bm)1)
++/**
++* @def MODE_NLMS1
++* NLMS1 functionality
++* @see LVNV_ModeWord_bm
++*/
++#define MODE_NLMS1 ((LVNV_ModeWord_bm)2)
++/**
++* @def MODE_BEAMFORMER
++* Fiter-and-Sum Beamformer functionality
++* @see LVNV_ModeWord_bm
++*/
++#define MODE_BEAMFORMER ((LVNV_ModeWord_bm)4)
++/**
++* @def MODE_PCD
++* Switch between PCD (Path change detector) and BSD (Broadside detector)
++* @see LVNV_ModeWord_bm
++*/
++#define MODE_PCD ((LVNV_ModeWord_bm)8)
++/**
++* @def MODE_GSC
++* Generalized Sidelobe Canceller functionality
++* @see LVNV_ModeWord_bm
++*/
++#define MODE_GSC ((LVNV_ModeWord_bm)16)
++/**
++* @def MODE_DNNS
++* Dynamic Non-stationary Noise Suppression functionality
++* @see LVNV_ModeWord_bm
++*/
++#define MODE_DNNS ((LVNV_ModeWord_bm)32)
++/**
++* @def MODE_DES
++* Dynamic Echo Suppression functionality
++* @see LVNV_ModeWord_bm
++*/
++#define MODE_DES ((LVNV_ModeWord_bm)64)
++/**
++* @def MODE_NS
++* Stationary Noise Suppression functionality
++* @see LVNV_ModeWord_bm
++*/
++#define MODE_NS ((LVNV_ModeWord_bm)128)
++/**
++* @def MODE_NS_N
++* Non-stationary Noise Suppression functionality
++* @see LVNV_ModeWord_bm
++*/
++#define MODE_NS_N ((LVNV_ModeWord_bm)256)
++/**
++* @def MODE_CAL
++* Switch between initial or continuous calibration
++* @see LVNV_ModeWord_bm
++*/
++#define MODE_CAL ((LVNV_ModeWord_bm)2048)
++/**
++* @def MODE_HB
++* High Band mute/activated
++* @see LVNV_ModeWord_bm
++*/
++#define MODE_HB ((LVNV_ModeWord_bm)16384)
++/**
++* @def MODE_HS
++* Horn Suppressor functionality (if available)
++* @see LVNV_ModeWord_bm
++*/
++#define MODE_HS ((LVNV_ModeWord_bm)32768)
++/**
++* @def LVNV_MODEWORD_BM_MIN
++* Minimal value for LVNV_ModeWord_bm
++* @see LVNV_ModeWord_bm
++*/
++#define LVNV_MODEWORD_BM_MIN ((LVNV_ModeWord_bm)0)
++/**
++* @def LVNV_MODEWORD_BM_MAX
++* Maximal value for LVNV_ModeWord_bm
++* @see LVNV_ModeWord_bm
++*/
++#define MODE_NLMS0_FORMAX ((LVNV_ModeWord_bm)1)
++#define MODE_NLMS1_FORMAX ((LVNV_ModeWord_bm)2)
++#define MODE_BEAMFORMER_FORMAX ((LVNV_ModeWord_bm)4)
++#define MODE_PCD_FORMAX ((LVNV_ModeWord_bm)8)
++#define MODE_GSC_FORMAX ((LVNV_ModeWord_bm)16)
++#define MODE_DNNS_FORMAX ((LVNV_ModeWord_bm)32)
++#define MODE_DES_FORMAX ((LVNV_ModeWord_bm)64)
++#define MODE_NS_FORMAX ((LVNV_ModeWord_bm)128)
++#define MODE_NS_N_FORMAX ((LVNV_ModeWord_bm)256)
++#define MODE_CAL_FORMAX ((LVNV_ModeWord_bm)2048)
++#define MODE_HB_FORMAX ((LVNV_ModeWord_bm)16384)
++#define MODE_HS_FORMAX ((LVNV_ModeWord_bm)32768)
++#define LVNV_MODEWORD_BM_MAX (MODE_NLMS0_FORMAX | MODE_NLMS1_FORMAX | MODE_BEAMFORMER_FORMAX | MODE_PCD_FORMAX | MODE_GSC_FORMAX | MODE_DNNS_FORMAX | MODE_DES_FORMAX | MODE_NS_FORMAX | MODE_NS_N_FORMAX | MODE_CAL_FORMAX | MODE_HB_FORMAX | MODE_HS_FORMAX | ((LVNV_ModeWord_bm)0))
++/**
++<table border>
++ <tr>
++ <td><b>Name</b></td>
++ <td><b>Value</b></td>
++ <td><b>Description</b></td>
++ </tr>
++ <tr>
++ <td>@ref MODE2_FSB_CARDIOID</td>
++ <td>1</td>
++ <td>FSB update based on speech detection in cardioid</td>
++ </tr>
++ <tr>
++ <td>@ref MODE2_FSB_WITHINBEAM</td>
++ <td>2</td>
++ <td>FSB update based on withinbeam detection</td>
++ </tr>
++ <tr>
++ <td>@ref MODE2_CAL_UPDATE</td>
++ <td>4</td>
++ <td>Switch for calibration functionality between updated or not-updated</td>
++ </tr>
++ <tr>
++ <td>@ref MODE2_BEAMDAMAGE</td>
++ <td>8</td>
++ <td>Microphone coverage protection</td>
++ </tr>
++</table> */
++typedef LVM_UINT16 LVNV_Mode2Word_bm;
++/**
++* @def MODE2_FSB_CARDIOID
++* FSB update based on speech detection in cardioid
++* @see LVNV_Mode2Word_bm
++*/
++#define MODE2_FSB_CARDIOID ((LVNV_Mode2Word_bm)1)
++/**
++* @def MODE2_FSB_WITHINBEAM
++* FSB update based on withinbeam detection
++* @see LVNV_Mode2Word_bm
++*/
++#define MODE2_FSB_WITHINBEAM ((LVNV_Mode2Word_bm)2)
++/**
++* @def MODE2_CAL_UPDATE
++* Switch for calibration functionality between updated or not-updated
++* @see LVNV_Mode2Word_bm
++*/
++#define MODE2_CAL_UPDATE ((LVNV_Mode2Word_bm)4)
++/**
++* @def MODE2_BEAMDAMAGE
++* Microphone coverage protection
++* @see LVNV_Mode2Word_bm
++*/
++#define MODE2_BEAMDAMAGE ((LVNV_Mode2Word_bm)8)
++/**
++* @def LVNV_MODE2WORD_BM_MIN
++* Minimal value for LVNV_Mode2Word_bm
++* @see LVNV_Mode2Word_bm
++*/
++#define LVNV_MODE2WORD_BM_MIN ((LVNV_Mode2Word_bm)0)
++/**
++* @def LVNV_MODE2WORD_BM_MAX
++* Maximal value for LVNV_Mode2Word_bm
++* @see LVNV_Mode2Word_bm
++*/
++#define MODE2_FSB_CARDIOID_FORMAX ((LVNV_Mode2Word_bm)1)
++#define MODE2_FSB_WITHINBEAM_FORMAX ((LVNV_Mode2Word_bm)2)
++#define MODE2_CAL_UPDATE_FORMAX ((LVNV_Mode2Word_bm)4)
++#define MODE2_BEAMDAMAGE_FORMAX ((LVNV_Mode2Word_bm)8)
++#define LVNV_MODE2WORD_BM_MAX (MODE2_FSB_CARDIOID_FORMAX | MODE2_FSB_WITHINBEAM_FORMAX | MODE2_CAL_UPDATE_FORMAX | MODE2_BEAMDAMAGE_FORMAX | ((LVNV_Mode2Word_bm)0))
++/**
++<table border>
++ <tr>
++ <td><b>Name</b></td>
++ <td><b>Value</b></td>
++ <td><b>Description</b></td>
++ </tr>
++ <tr>
++ <td>@ref TUNING_MODE_NLMS1</td>
++ <td>1</td>
++ <td>NLMS1 output</td>
++ </tr>
++ <tr>
++ <td>@ref TUNING_MODE_FSB</td>
++ <td>2</td>
++ <td>FSB noise reference output</td>
++ </tr>
++ <tr>
++ <td>@ref TUNING_MODE_WITHINBEAM</td>
++ <td>8</td>
++ <td>Tuning beep when Withinbeam=1</td>
++ </tr>
++ <tr>
++ <td>@ref TUNING_MODE_UPDATEONOFF</td>
++ <td>16</td>
++ <td>Tuning beep when FSB is updated</td>
++ </tr>
++ <tr>
++ <td>@ref TUNING_MODE_CAL_MICPOW</td>
++ <td>64</td>
++ <td>Tuning beep when MicPow is lower than Cal_micPowFloorMin</td>
++ </tr>
++ <tr>
++ <td>@ref TUNING_MODE_BROADSIDE</td>
++ <td>128</td>
++ <td>Tuning beep when broadside is detected</td>
++ </tr>
++</table> */
++typedef LVM_UINT16 LVNV_TuningModeWord_bm;
++/**
++* @def TUNING_MODE_NLMS1
++* NLMS1 output
++* @see LVNV_TuningModeWord_bm
++*/
++#define TUNING_MODE_NLMS1 ((LVNV_TuningModeWord_bm)1)
++/**
++* @def TUNING_MODE_FSB
++* FSB noise reference output
++* @see LVNV_TuningModeWord_bm
++*/
++#define TUNING_MODE_FSB ((LVNV_TuningModeWord_bm)2)
++/**
++* @def TUNING_MODE_WITHINBEAM
++* Tuning beep when Withinbeam=1
++* @see LVNV_TuningModeWord_bm
++*/
++#define TUNING_MODE_WITHINBEAM ((LVNV_TuningModeWord_bm)8)
++/**
++* @def TUNING_MODE_UPDATEONOFF
++* Tuning beep when FSB is updated
++* @see LVNV_TuningModeWord_bm
++*/
++#define TUNING_MODE_UPDATEONOFF ((LVNV_TuningModeWord_bm)16)
++/**
++* @def TUNING_MODE_CAL_MICPOW
++* Tuning beep when MicPow is lower than Cal_micPowFloorMin
++* @see LVNV_TuningModeWord_bm
++*/
++#define TUNING_MODE_CAL_MICPOW ((LVNV_TuningModeWord_bm)64)
++/**
++* @def TUNING_MODE_BROADSIDE
++* Tuning beep when broadside is detected
++* @see LVNV_TuningModeWord_bm
++*/
++#define TUNING_MODE_BROADSIDE ((LVNV_TuningModeWord_bm)128)
++/**
++* @def LVNV_TUNINGMODEWORD_BM_MIN
++* Minimal value for LVNV_TuningModeWord_bm
++* @see LVNV_TuningModeWord_bm
++*/
++#define LVNV_TUNINGMODEWORD_BM_MIN ((LVNV_TuningModeWord_bm)0)
++/**
++* @def LVNV_TUNINGMODEWORD_BM_MAX
++* Maximal value for LVNV_TuningModeWord_bm
++* @see LVNV_TuningModeWord_bm
++*/
++#define TUNING_MODE_NLMS1_FORMAX ((LVNV_TuningModeWord_bm)1)
++#define TUNING_MODE_FSB_FORMAX ((LVNV_TuningModeWord_bm)2)
++#define TUNING_MODE_WITHINBEAM_FORMAX ((LVNV_TuningModeWord_bm)8)
++#define TUNING_MODE_UPDATEONOFF_FORMAX ((LVNV_TuningModeWord_bm)16)
++#define TUNING_MODE_CAL_MICPOW_FORMAX ((LVNV_TuningModeWord_bm)64)
++#define TUNING_MODE_BROADSIDE_FORMAX ((LVNV_TuningModeWord_bm)128)
++#define LVNV_TUNINGMODEWORD_BM_MAX (TUNING_MODE_NLMS1_FORMAX | TUNING_MODE_FSB_FORMAX | TUNING_MODE_WITHINBEAM_FORMAX | TUNING_MODE_UPDATEONOFF_FORMAX | TUNING_MODE_CAL_MICPOW_FORMAX | TUNING_MODE_BROADSIDE_FORMAX | ((LVNV_TuningModeWord_bm)0))
++/**
++<table border>
++ <tr>
++ <td><b>Name</b></td>
++ <td><b>Value</b></td>
++ <td><b>Description</b></td>
++ </tr>
++ <tr>
++ <td>@ref LVNV_STATUS_LOST_BEAM</td>
++ <td>1</td>
++ <td>LostBeam detections</td>
++ </tr>
++ <tr>
++ <td>@ref LVNV_STATUS_MIC_COV</td>
++ <td>2</td>
++ <td>Microphone Coverage detections</td>
++ </tr>
++ <tr>
++ <td>@ref LVNV_STATUS_FSB_UPDATE</td>
++ <td>4</td>
++ <td>FSB updates</td>
++ </tr>
++ <tr>
++ <td>@ref LVNV_STATUS_BEAM_DAMAGE</td>
++ <td>8</td>
++ <td>BeamDamage detections</td>
++ </tr>
++ <tr>
++ <td>@ref LVNV_STATUS_GSC_UPDATE</td>
++ <td>16</td>
++ <td>GSC updates</td>
++ </tr>
++ <tr>
++ <td>@ref LVNV_STATUS_DNNS_WBEAM</td>
++ <td>32</td>
++ <td>DNNS WithinBeam detections</td>
++ </tr>
++ <tr>
++ <td>@ref LVNV_STATUS_DNNS_ACTIVITY</td>
++ <td>64</td>
++ <td>DNNS activity detections</td>
++ </tr>
++ <tr>
++ <td>@ref LVNV_STATUS_CAL_MICPOW</td>
++ <td>128</td>
++ <td>Calibration Microphone Power</td>
++ </tr>
++ <tr>
++ <td>@ref LVNV_STATUS_MICPOWSP</td>
++ <td>256</td>
++ <td>(LV1008) MicPow Speech detections</td>
++ </tr>
++ <tr>
++ <td>@ref LVNV_STATUS_BROADSIDE_FLAG</td>
++ <td>512</td>
++ <td>(LV2370) Broadside detection flag</td>
++ </tr>
++ <tr>
++ <td>@ref LVNV_STATUS_CAL_UPDATED</td>
++ <td>1024</td>
++ <td>(LV8237) Calibration updated flag</td>
++ </tr>
++ <tr>
++ <td>@ref LVNV_STATUS_WBEAM_FIX</td>
++ <td>2048</td>
++ <td>WithinBeam detection for Fixed Beamformer (if available).</td>
++ </tr>
++</table> */
++typedef LVM_UINT16 LVNV_StatusWord_bm;
++/**
++* @def LVNV_STATUS_LOST_BEAM
++* LostBeam detections
++* @see LVNV_StatusWord_bm
++*/
++#define LVNV_STATUS_LOST_BEAM ((LVNV_StatusWord_bm)1)
++/**
++* @def LVNV_STATUS_MIC_COV
++* Microphone Coverage detections
++* @see LVNV_StatusWord_bm
++*/
++#define LVNV_STATUS_MIC_COV ((LVNV_StatusWord_bm)2)
++/**
++* @def LVNV_STATUS_FSB_UPDATE
++* FSB updates
++* @see LVNV_StatusWord_bm
++*/
++#define LVNV_STATUS_FSB_UPDATE ((LVNV_StatusWord_bm)4)
++/**
++* @def LVNV_STATUS_BEAM_DAMAGE
++* BeamDamage detections
++* @see LVNV_StatusWord_bm
++*/
++#define LVNV_STATUS_BEAM_DAMAGE ((LVNV_StatusWord_bm)8)
++/**
++* @def LVNV_STATUS_GSC_UPDATE
++* GSC updates
++* @see LVNV_StatusWord_bm
++*/
++#define LVNV_STATUS_GSC_UPDATE ((LVNV_StatusWord_bm)16)
++/**
++* @def LVNV_STATUS_DNNS_WBEAM
++* DNNS WithinBeam detections
++* @see LVNV_StatusWord_bm
++*/
++#define LVNV_STATUS_DNNS_WBEAM ((LVNV_StatusWord_bm)32)
++/**
++* @def LVNV_STATUS_DNNS_ACTIVITY
++* DNNS activity detections
++* @see LVNV_StatusWord_bm
++*/
++#define LVNV_STATUS_DNNS_ACTIVITY ((LVNV_StatusWord_bm)64)
++/**
++* @def LVNV_STATUS_CAL_MICPOW
++* Calibration Microphone Power
++* @see LVNV_StatusWord_bm
++*/
++#define LVNV_STATUS_CAL_MICPOW ((LVNV_StatusWord_bm)128)
++/**
++* @def LVNV_STATUS_MICPOWSP
++* (LV1008) MicPow Speech detections
++* @see LVNV_StatusWord_bm
++*/
++#define LVNV_STATUS_MICPOWSP ((LVNV_StatusWord_bm)256)
++/**
++* @def LVNV_STATUS_BROADSIDE_FLAG
++* (LV2370) Broadside detection flag
++* @see LVNV_StatusWord_bm
++*/
++#define LVNV_STATUS_BROADSIDE_FLAG ((LVNV_StatusWord_bm)512)
++/**
++* @def LVNV_STATUS_CAL_UPDATED
++* (LV8237) Calibration updated flag
++* @see LVNV_StatusWord_bm
++*/
++#define LVNV_STATUS_CAL_UPDATED ((LVNV_StatusWord_bm)1024)
++/**
++* @def LVNV_STATUS_WBEAM_fix
++* WithinBeam detection for Fixed Beamformer (if available).
++* @see LVNV_StatusWord_bm
++*/
++#define LVNV_STATUS_WBEAM_FIX ((LVNV_StatusWord_bm)2048)
++/**
++* @def LVNV_STATUSWORD_BM_MIN
++* Minimal value for LVNV_StatusWord_bm
++* @see LVNV_StatusWord_bm
++*/
++#define LVNV_STATUSWORD_BM_MIN ((LVNV_StatusWord_bm)0)
++/**
++* @def LVNV_STATUSWORD_BM_MAX
++* Maximal value for LVNV_StatusWord_bm
++* @see LVNV_StatusWord_bm
++*/
++#define LVNV_STATUS_LOST_BEAM_FORMAX ((LVNV_StatusWord_bm)1)
++#define LVNV_STATUS_MIC_COV_FORMAX ((LVNV_StatusWord_bm)2)
++#define LVNV_STATUS_FSB_UPDATE_FORMAX ((LVNV_StatusWord_bm)4)
++#define LVNV_STATUS_BEAM_DAMAGE_FORMAX ((LVNV_StatusWord_bm)8)
++#define LVNV_STATUS_GSC_UPDATE_FORMAX ((LVNV_StatusWord_bm)16)
++#define LVNV_STATUS_DNNS_WBEAM_FORMAX ((LVNV_StatusWord_bm)32)
++#define LVNV_STATUS_DNNS_ACTIVITY_FORMAX ((LVNV_StatusWord_bm)64)
++#define LVNV_STATUS_CAL_MICPOW_FORMAX ((LVNV_StatusWord_bm)128)
++#define LVNV_STATUS_MICPOWSP_FORMAX ((LVNV_StatusWord_bm)256)
++#define LVNV_STATUS_BROADSIDE_FLAG_FORMAX ((LVNV_StatusWord_bm)512)
++#define LVNV_STATUS_CAL_UPDATED_FORMAX ((LVNV_StatusWord_bm)1024)
++#define LVNV_STATUS_WBEAM_FIX_FORMAX ((LVNV_StatusWord_bm)2048)
++#define LVNV_STATUSWORD_BM_MAX (LVNV_STATUS_LOST_BEAM_FORMAX | LVNV_STATUS_MIC_COV_FORMAX | LVNV_STATUS_FSB_UPDATE_FORMAX | LVNV_STATUS_BEAM_DAMAGE_FORMAX | LVNV_STATUS_GSC_UPDATE_FORMAX | LVNV_STATUS_DNNS_WBEAM_FORMAX | LVNV_STATUS_DNNS_ACTIVITY_FORMAX | LVNV_STATUS_CAL_MICPOW_FORMAX | LVNV_STATUS_MICPOWSP_FORMAX | LVNV_STATUS_BROADSIDE_FLAG_FORMAX | LVNV_STATUS_CAL_UPDATED_FORMAX | LVNV_STATUS_WBEAM_FIX_FORMAX | ((LVNV_StatusWord_bm)0))
++/**
++<table border>
++ <tr>
++ <td><b>Name</b></td>
++ <td><b>Value</b></td>
++ <td><b>Description</b></td>
++ </tr>
++ <tr>
++ <td>@ref LVHF_CONTROL_TUNE_PATHCHANGE</td>
++ <td>1</td>
++ <td>PCD tuning beep</td>
++ </tr>
++ <tr>
++ <td>@ref LVHF_CONTROL_TUNE_CLIP</td>
++ <td>2</td>
++ <td>SPDET_x_clip tuning beep</td>
++ </tr>
++ <tr>
++ <td>@ref LVHF_CONTROL_TUNE_FAR_SPEAKS</td>
++ <td>4</td>
++ <td>SPDET_far tuning beep</td>
++ </tr>
++ <tr>
++ <td>@ref LVHF_CONTROL_TUNE_MIC_SPEAKS</td>
++ <td>8</td>
++ <td>SPDET_mic tuning beep</td>
++ </tr>
++ <tr>
++ <td>@ref LVHF_CONTROL_TUNE_HB_MUTE</td>
++ <td>16</td>
++ <td>Mute high band (4kHz-8kHz). Should be disabled by default.</td>
++ </tr>
++ <tr>
++ <td>@ref LVHF_CONTROL_TUNE_TB_MUTE</td>
++ <td>32</td>
++ <td>Mute top band (above 8kHz). Should be disabled by default.</td>
++ </tr>
++</table> */
++typedef LVM_UINT16 LVHF_TuningModeWord;
++/**
++* @def LVHF_CONTROL_TUNE_PATHCHANGE
++* PCD tuning beep
++* @see LVHF_TuningModeWord
++*/
++#define LVHF_CONTROL_TUNE_PATHCHANGE ((LVHF_TuningModeWord)1)
++/**
++* @def LVHF_CONTROL_TUNE_CLIP
++* SPDET_x_clip tuning beep
++* @see LVHF_TuningModeWord
++*/
++#define LVHF_CONTROL_TUNE_CLIP ((LVHF_TuningModeWord)2)
++/**
++* @def LVHF_CONTROL_TUNE_FAR_SPEAKS
++* SPDET_far tuning beep
++* @see LVHF_TuningModeWord
++*/
++#define LVHF_CONTROL_TUNE_FAR_SPEAKS ((LVHF_TuningModeWord)4)
++/**
++* @def LVHF_CONTROL_TUNE_MIC_SPEAKS
++* SPDET_mic tuning beep
++* @see LVHF_TuningModeWord
++*/
++#define LVHF_CONTROL_TUNE_MIC_SPEAKS ((LVHF_TuningModeWord)8)
++/**
++* @def LVHF_CONTROL_TUNE_HB_MUTE
++* Mute high band (4kHz-8kHz). Should be disabled by default.
++* @see LVHF_TuningModeWord
++*/
++#define LVHF_CONTROL_TUNE_HB_MUTE ((LVHF_TuningModeWord)16)
++/**
++* @def LVHF_CONTROL_TUNE_TB_MUTE
++* Mute top band (above 8kHz). Should be disabled by default.
++* @see LVHF_TuningModeWord
++*/
++#define LVHF_CONTROL_TUNE_TB_MUTE ((LVHF_TuningModeWord)32)
++/**
++* @def LVHF_TUNINGMODEWORD_MIN
++* Minimal value for LVHF_TuningModeWord
++* @see LVHF_TuningModeWord
++*/
++#define LVHF_TUNINGMODEWORD_MIN ((LVHF_TuningModeWord)0)
++/**
++* @def LVHF_TUNINGMODEWORD_MAX
++* Maximal value for LVHF_TuningModeWord
++* @see LVHF_TuningModeWord
++*/
++#define LVHF_CONTROL_TUNE_PATHCHANGE_FORMAX ((LVHF_TuningModeWord)1)
++#define LVHF_CONTROL_TUNE_CLIP_FORMAX ((LVHF_TuningModeWord)2)
++#define LVHF_CONTROL_TUNE_FAR_SPEAKS_FORMAX ((LVHF_TuningModeWord)4)
++#define LVHF_CONTROL_TUNE_MIC_SPEAKS_FORMAX ((LVHF_TuningModeWord)8)
++#define LVHF_CONTROL_TUNE_HB_MUTE_FORMAX ((LVHF_TuningModeWord)16)
++#define LVHF_CONTROL_TUNE_TB_MUTE_FORMAX ((LVHF_TuningModeWord)32)
++#define LVHF_TUNINGMODEWORD_MAX (LVHF_CONTROL_TUNE_PATHCHANGE_FORMAX | LVHF_CONTROL_TUNE_CLIP_FORMAX | LVHF_CONTROL_TUNE_FAR_SPEAKS_FORMAX | LVHF_CONTROL_TUNE_MIC_SPEAKS_FORMAX | LVHF_CONTROL_TUNE_HB_MUTE_FORMAX | LVHF_CONTROL_TUNE_TB_MUTE_FORMAX | ((LVHF_TuningModeWord)0))
++/**
++<table border>
++ <tr>
++ <td><b>Name</b></td>
++ <td><b>Value</b></td>
++ <td><b>Description</b></td>
++ </tr>
++ <tr>
++ <td>@ref LVHF_MODE_NLMS</td>
++ <td>1</td>
++ <td>NLMS functionality</td>
++ </tr>
++ <tr>
++ <td>@ref LVHF_MODE_DES</td>
++ <td>2</td>
++ <td>DES (Dynamic Echo Suppression)</td>
++ </tr>
++ <tr>
++ <td>@ref LVHF_MODE_NS</td>
++ <td>4</td>
++ <td>NS (Noise Suppression)</td>
++ </tr>
++ <tr>
++ <td>@ref LVHF_MODE_CNI</td>
++ <td>8</td>
++ <td>CNI (Comfort Noise Injection)</td>
++ </tr>
++ <tr>
++ <td>@ref LVHF_MODE_NLES</td>
++ <td>16</td>
++ <td>NLES (Non Linear Echo Suppression)</td>
++ </tr>
++ <tr>
++ <td>@ref LVHF_MODE_PCD_DT</td>
++ <td>64</td>
++ <td>DT (Double Talk) protection after PCD</td>
++ </tr>
++ <tr>
++ <td>@ref LVHF_MODE_PCD</td>
++ <td>128</td>
++ <td>PCD (Path Change Detector)</td>
++ </tr>
++ <tr>
++ <td>@ref LVHF_MODE_INIT_ES</td>
++ <td>256</td>
++ <td>Initial echo suppression setting by PCD_gamma_e_rescue</td>
++ </tr>
++ <tr>
++ <td>@ref LVHF_MODE_HS</td>
++ <td>512</td>
++ <td>HornSuppression (if available)</td>
++ </tr>
++ <tr>
++ <td>@ref LVHF_MODE_PRENLMS</td>
++ <td>4096</td>
++ <td>Pre-NLMS preprocessing</td>
++ </tr>
++</table> */
++typedef LVM_UINT16 LVHF_ModeWord_bm;
++/**
++* @def LVHF_MODE_NLMS
++* NLMS functionality
++* @see LVHF_ModeWord_bm
++*/
++#define LVHF_MODE_NLMS ((LVHF_ModeWord_bm)1)
++/**
++* @def LVHF_MODE_DES
++* DES (Dynamic Echo Suppression)
++* @see LVHF_ModeWord_bm
++*/
++#define LVHF_MODE_DES ((LVHF_ModeWord_bm)2)
++/**
++* @def LVHF_MODE_NS
++* NS (Noise Suppression)
++* @see LVHF_ModeWord_bm
++*/
++#define LVHF_MODE_NS ((LVHF_ModeWord_bm)4)
++/**
++* @def LVHF_MODE_CNI
++* CNI (Comfort Noise Injection)
++* @see LVHF_ModeWord_bm
++*/
++#define LVHF_MODE_CNI ((LVHF_ModeWord_bm)8)
++/**
++* @def LVHF_MODE_NLES
++* NLES (Non Linear Echo Suppression)
++* @see LVHF_ModeWord_bm
++*/
++#define LVHF_MODE_NLES ((LVHF_ModeWord_bm)16)
++/**
++* @def LVHF_MODE_PCD_DT
++* DT (Double Talk) protection after PCD
++* @see LVHF_ModeWord_bm
++*/
++#define LVHF_MODE_PCD_DT ((LVHF_ModeWord_bm)64)
++/**
++* @def LVHF_MODE_PCD
++* PCD (Path Change Detector)
++* @see LVHF_ModeWord_bm
++*/
++#define LVHF_MODE_PCD ((LVHF_ModeWord_bm)128)
++/**
++* @def LVHF_MODE_INIT_ES
++* Initial echo suppression setting by PCD_gamma_e_rescue
++* @see LVHF_ModeWord_bm
++*/
++#define LVHF_MODE_INIT_ES ((LVHF_ModeWord_bm)256)
++/**
++* @def LVHF_MODE_HS
++* HornSuppression (if available)
++* @see LVHF_ModeWord_bm
++*/
++#define LVHF_MODE_HS ((LVHF_ModeWord_bm)512)
++/**
++* @def LVHF_MODE_PRENLMS
++* Pre-NLMS preprocessing
++* @see LVHF_ModeWord_bm
++*/
++#define LVHF_MODE_PRENLMS ((LVHF_ModeWord_bm)4096)
++/**
++* @def LVHF_MODEWORD_BM_MIN
++* Minimal value for LVHF_ModeWord_bm
++* @see LVHF_ModeWord_bm
++*/
++#define LVHF_MODEWORD_BM_MIN ((LVHF_ModeWord_bm)0)
++/**
++* @def LVHF_MODEWORD_BM_MAX
++* Maximal value for LVHF_ModeWord_bm
++* @see LVHF_ModeWord_bm
++*/
++#define LVHF_MODE_NLMS_FORMAX ((LVHF_ModeWord_bm)1)
++#define LVHF_MODE_DES_FORMAX ((LVHF_ModeWord_bm)2)
++#define LVHF_MODE_NS_FORMAX ((LVHF_ModeWord_bm)4)
++#define LVHF_MODE_CNI_FORMAX ((LVHF_ModeWord_bm)8)
++#define LVHF_MODE_NLES_FORMAX ((LVHF_ModeWord_bm)16)
++#define LVHF_MODE_PCD_DT_FORMAX ((LVHF_ModeWord_bm)64)
++#define LVHF_MODE_PCD_FORMAX ((LVHF_ModeWord_bm)128)
++#define LVHF_MODE_INIT_ES_FORMAX ((LVHF_ModeWord_bm)256)
++#define LVHF_MODE_HS_FORMAX ((LVHF_ModeWord_bm)512)
++#define LVHF_MODE_PRENLMS_FORMAX ((LVHF_ModeWord_bm)4096)
++#define LVHF_MODEWORD_BM_MAX (LVHF_MODE_NLMS_FORMAX | LVHF_MODE_DES_FORMAX | LVHF_MODE_NS_FORMAX | LVHF_MODE_CNI_FORMAX | LVHF_MODE_NLES_FORMAX | LVHF_MODE_PCD_DT_FORMAX | LVHF_MODE_PCD_FORMAX | LVHF_MODE_INIT_ES_FORMAX | LVHF_MODE_HS_FORMAX | LVHF_MODE_PRENLMS_FORMAX | ((LVHF_ModeWord_bm)0))
++/**
++<table border>
++ <tr>
++ <td><b>Name</b></td>
++ <td><b>Value</b></td>
++ <td><b>Description</b></td>
++ </tr>
++ <tr>
++ <td>@ref LVHF_STATUS_FAR_SPEAKS</td>
++ <td>1</td>
++ <td>FarEnd is speaking</td>
++ </tr>
++ <tr>
++ <td>@ref LVHF_STATUS_FAR_STARTS</td>
++ <td>2</td>
++ <td>FarEnd starts to speak</td>
++ </tr>
++ <tr>
++ <td>@ref LVHF_STATUS_MIC_SPEAKS</td>
++ <td>4</td>
++ <td>Mic activity detected</td>
++ </tr>
++ <tr>
++ <td>@ref LVHF_STATUS_CLIP</td>
++ <td>8</td>
++ <td>Clipping Detected</td>
++ </tr>
++ <tr>
++ <td>@ref LVHF_STATUS_PATHCHANGE</td>
++ <td>16</td>
++ <td>Path Change detected</td>
++ </tr>
++</table> */
++typedef LVM_UINT16 LVHF_StatusWord_bm;
++/**
++* @def LVHF_STATUS_FAR_SPEAKS
++* FarEnd is speaking
++* @see LVHF_StatusWord_bm
++*/
++#define LVHF_STATUS_FAR_SPEAKS ((LVHF_StatusWord_bm)1)
++/**
++* @def LVHF_STATUS_FAR_STARTS
++* FarEnd starts to speak
++* @see LVHF_StatusWord_bm
++*/
++#define LVHF_STATUS_FAR_STARTS ((LVHF_StatusWord_bm)2)
++/**
++* @def LVHF_STATUS_MIC_SPEAKS
++* Mic activity detected
++* @see LVHF_StatusWord_bm
++*/
++#define LVHF_STATUS_MIC_SPEAKS ((LVHF_StatusWord_bm)4)
++/**
++* @def LVHF_STATUS_CLIP
++* Clipping Detected
++* @see LVHF_StatusWord_bm
++*/
++#define LVHF_STATUS_CLIP ((LVHF_StatusWord_bm)8)
++/**
++* @def LVHF_STATUS_PATHCHANGE
++* Path Change detected
++* @see LVHF_StatusWord_bm
++*/
++#define LVHF_STATUS_PATHCHANGE ((LVHF_StatusWord_bm)16)
++/**
++* @def LVHF_STATUSWORD_BM_MIN
++* Minimal value for LVHF_StatusWord_bm
++* @see LVHF_StatusWord_bm
++*/
++#define LVHF_STATUSWORD_BM_MIN ((LVHF_StatusWord_bm)0)
++/**
++* @def LVHF_STATUSWORD_BM_MAX
++* Maximal value for LVHF_StatusWord_bm
++* @see LVHF_StatusWord_bm
++*/
++#define LVHF_STATUS_FAR_SPEAKS_FORMAX ((LVHF_StatusWord_bm)1)
++#define LVHF_STATUS_FAR_STARTS_FORMAX ((LVHF_StatusWord_bm)2)
++#define LVHF_STATUS_MIC_SPEAKS_FORMAX ((LVHF_StatusWord_bm)4)
++#define LVHF_STATUS_CLIP_FORMAX ((LVHF_StatusWord_bm)8)
++#define LVHF_STATUS_PATHCHANGE_FORMAX ((LVHF_StatusWord_bm)16)
++#define LVHF_STATUSWORD_BM_MAX (LVHF_STATUS_FAR_SPEAKS_FORMAX | LVHF_STATUS_FAR_STARTS_FORMAX | LVHF_STATUS_MIC_SPEAKS_FORMAX | LVHF_STATUS_CLIP_FORMAX | LVHF_STATUS_PATHCHANGE_FORMAX | ((LVHF_StatusWord_bm)0))
++
++#define LVVIDHEADER_LVVE_RX_MASK1_LVWIREFORMAT_LENGTH (2) ///< Number of bytes to encode @ref LVVIDHeader_LVVE_Rx_Mask1_bm in LVWireFormat.
++
++#define LVVIDHEADER_LVVE_RX_MASK2_LVWIREFORMAT_LENGTH (2) ///< Number of bytes to encode @ref LVVIDHeader_LVVE_Rx_Mask2_bm in LVWireFormat.
++
++#define LVVIDHEADER_LVVE_TX_MASK1_LVWIREFORMAT_LENGTH (2) ///< Number of bytes to encode @ref LVVIDHeader_LVVE_Tx_Mask1_bm in LVWireFormat.
++
++#define LVVIDHEADER_LVVE_TX_MASK2_LVWIREFORMAT_LENGTH (2) ///< Number of bytes to encode @ref LVVIDHeader_LVVE_Tx_Mask2_bm in LVWireFormat.
++
++#define LVVIDHEADER_CONFIGURATIONS_MASK1_LVWIREFORMAT_LENGTH (2) ///< Number of bytes to encode @ref LVVIDHeader_Configurations_Mask1_bm in LVWireFormat.
++
++#define LVVIDHEADER_CONFIGURATIONS_MASK2_LVWIREFORMAT_LENGTH (2) ///< Number of bytes to encode @ref LVVIDHeader_Configurations_Mask2_bm in LVWireFormat.
++
++#define LVVC_MODEWORD_LVWIREFORMAT_LENGTH (2) ///< Number of bytes to encode @ref LVVC_ModeWord_bm in LVWireFormat.
++
++#define LVFENS_MODEWORD_LVWIREFORMAT_LENGTH (2) ///< Number of bytes to encode @ref LVFENS_ModeWord_bm in LVWireFormat.
++
++#define LVWM_MODEWORD_LVWIREFORMAT_LENGTH (2) ///< Number of bytes to encode @ref LVWM_ModeWord_bm in LVWireFormat.
++
++#define LVNV_MODEWORD_LVWIREFORMAT_LENGTH (2) ///< Number of bytes to encode @ref LVNV_ModeWord_bm in LVWireFormat.
++
++#define LVNV_MODE2WORD_LVWIREFORMAT_LENGTH (2) ///< Number of bytes to encode @ref LVNV_Mode2Word_bm in LVWireFormat.
++
++#define LVNV_TUNINGMODEWORD_LVWIREFORMAT_LENGTH (2) ///< Number of bytes to encode @ref LVNV_TuningModeWord_bm in LVWireFormat.
++
++#define LVNV_STATUSWORD_LVWIREFORMAT_LENGTH (2) ///< Number of bytes to encode @ref LVNV_StatusWord_bm in LVWireFormat.
++
++#define LVHF_TUNINGMODEWORD_LVWIREFORMAT_LENGTH (2) ///< Number of bytes to encode @ref LVHF_TuningModeWord in LVWireFormat.
++
++#define LVHF_MODEWORD_LVWIREFORMAT_LENGTH (2) ///< Number of bytes to encode @ref LVHF_ModeWord_bm in LVWireFormat.
++
++#define LVHF_STATUSWORD_LVWIREFORMAT_LENGTH (2) ///< Number of bytes to encode @ref LVHF_StatusWord_bm in LVWireFormat.
++
++#define LVM_MODE_LVWIREFORMAT_LENGTH (4) ///< Number of bytes to encode @ref LVM_Mode_en in LVWireFormat.
++
++#define LVM_CONFIG_LVWIREFORMAT_LENGTH (4) ///< Number of bytes to encode @ref LVM_Config_en in LVWireFormat.
++
++#define LVM_FS_LVWIREFORMAT_LENGTH (4) ///< Number of bytes to encode @ref LVM_Fs_en in LVWireFormat.
++
++#define LVVIDHEADER_MESSAGEID_LVWIREFORMAT_LENGTH (4) ///< Number of bytes to encode @ref LVVIDHeader_MessageID_en in LVWireFormat.
++
++#define LVVIDHEADER_RETURNSTATUS_LVWIREFORMAT_LENGTH (4) ///< Number of bytes to encode @ref LVVIDHeader_ReturnStatus_en in LVWireFormat.
++
++#define LVVE_RX_MODE_LVWIREFORMAT_LENGTH (4) ///< Number of bytes to encode @ref LVVE_Rx_Mode_en in LVWireFormat.
++
++#define LVVE_TX_MODE_LVWIREFORMAT_LENGTH (4) ///< Number of bytes to encode @ref LVVE_Tx_Mode_en in LVWireFormat.
++
++#define LVVIDHEADER_CONTROLPARAMS_LVWIREFORMAT_LENGTH (7 \
++ + LVVIDHEADER_LVVE_RX_MASK1_LVWIREFORMAT_LENGTH \
++ + LVVIDHEADER_LVVE_RX_MASK2_LVWIREFORMAT_LENGTH \
++ + LVVIDHEADER_LVVE_TX_MASK1_LVWIREFORMAT_LENGTH \
++ + LVVIDHEADER_LVVE_TX_MASK2_LVWIREFORMAT_LENGTH \
++ + LVVIDHEADER_CONFIGURATIONS_MASK1_LVWIREFORMAT_LENGTH \
++ + LVVIDHEADER_CONFIGURATIONS_MASK2_LVWIREFORMAT_LENGTH \
++ + LVVIDHEADER_MESSAGEID_LVWIREFORMAT_LENGTH \
++ + LVM_FS_LVWIREFORMAT_LENGTH) ///< Number of bytes to encode LVVIDHeader ControlParameters in LVWireFormat.
++
++#define LVVC_CONTROLPARAMS_LVWIREFORMAT_LENGTH (22 \
++ + LVM_MODE_LVWIREFORMAT_LENGTH \
++ + LVVC_MODEWORD_LVWIREFORMAT_LENGTH) ///< Number of bytes to encode LVVC ControlParameters in LVWireFormat.
++
++#define LVFENS_CONTROLPARAMS_LVWIREFORMAT_LENGTH (2 \
++ + LVM_MODE_LVWIREFORMAT_LENGTH \
++ + LVFENS_MODEWORD_LVWIREFORMAT_LENGTH) ///< Number of bytes to encode LVFENS ControlParameters in LVWireFormat.
++
++#define LVWM_CONTROLPARAMS_LVWIREFORMAT_LENGTH (14 \
++ + LVM_MODE_LVWIREFORMAT_LENGTH \
++ + LVWM_MODEWORD_LVWIREFORMAT_LENGTH) ///< Number of bytes to encode LVWM ControlParameters in LVWireFormat.
++
++#define LVDRC_CONTROLPARAMS_LVWIREFORMAT_LENGTH (28 \
++ + LVM_MODE_LVWIREFORMAT_LENGTH \
++ + LVM_MODE_LVWIREFORMAT_LENGTH) ///< Number of bytes to encode LVDRC ControlParameters in LVWireFormat.
++
++#define LVNG_CONTROLPARAMS_LVWIREFORMAT_LENGTH (26 \
++ + LVM_MODE_LVWIREFORMAT_LENGTH) ///< Number of bytes to encode LVNG ControlParameters in LVWireFormat.
++
++#define LVNLPP_CONTROLPARAMS_LVWIREFORMAT_LENGTH (4) ///< Number of bytes to encode LVNLPP ControlParameters in LVWireFormat.
++
++#define LVEQ_CONTROLPARAMS_LVWIREFORMAT_LENGTH (130) ///< Number of bytes to encode LVEQ ControlParameters in LVWireFormat.
++
++#define LVVOL_CONTROLPARAMS_LVWIREFORMAT_LENGTH (2 \
++ + LVM_MODE_LVWIREFORMAT_LENGTH) ///< Number of bytes to encode LVVOL ControlParameters in LVWireFormat.
++
++#define LVHPF_CONTROLPARAMS_LVWIREFORMAT_LENGTH (2 \
++ + LVM_MODE_LVWIREFORMAT_LENGTH) ///< Number of bytes to encode LVHPF ControlParameters in LVWireFormat.
++
++#define LVMUTE_CONTROLPARAMS_LVWIREFORMAT_LENGTH (LVM_MODE_LVWIREFORMAT_LENGTH) ///< Number of bytes to encode LVMUTE ControlParameters in LVWireFormat.
++
++#define LVVE_RX_CONTROLPARAMS_LVWIREFORMAT_LENGTH (4 \
++ + LVVE_RX_MODE_LVWIREFORMAT_LENGTH \
++ + LVM_MODE_LVWIREFORMAT_LENGTH \
++ + LVM_MODE_LVWIREFORMAT_LENGTH \
++ + LVFENS_CONTROLPARAMS_LVWIREFORMAT_LENGTH \
++ + LVM_MODE_LVWIREFORMAT_LENGTH \
++ + LVNLPP_CONTROLPARAMS_LVWIREFORMAT_LENGTH \
++ + LVVC_CONTROLPARAMS_LVWIREFORMAT_LENGTH \
++ + LVM_MODE_LVWIREFORMAT_LENGTH \
++ + LVEQ_CONTROLPARAMS_LVWIREFORMAT_LENGTH \
++ + LVDRC_CONTROLPARAMS_LVWIREFORMAT_LENGTH \
++ + LVM_MODE_LVWIREFORMAT_LENGTH \
++ + LVWM_CONTROLPARAMS_LVWIREFORMAT_LENGTH \
++ + LVNG_CONTROLPARAMS_LVWIREFORMAT_LENGTH) ///< Number of bytes to encode LVVE_Rx ControlParameters in LVWireFormat.
++
++#define LVNV_CONTROLPARAMS_LVWIREFORMAT_LENGTH (122 \
++ + LVM_MODE_LVWIREFORMAT_LENGTH \
++ + LVNV_MODEWORD_LVWIREFORMAT_LENGTH \
++ + LVNV_MODE2WORD_LVWIREFORMAT_LENGTH \
++ + LVNV_TUNINGMODEWORD_LVWIREFORMAT_LENGTH) ///< Number of bytes to encode LVNV ControlParameters in LVWireFormat.
++
++#define LVHF_CONTROLPARAMS_LVWIREFORMAT_LENGTH (78 \
++ + LVM_MODE_LVWIREFORMAT_LENGTH \
++ + LVHF_MODEWORD_LVWIREFORMAT_LENGTH \
++ + LVHF_TUNINGMODEWORD_LVWIREFORMAT_LENGTH) ///< Number of bytes to encode LVHF ControlParameters in LVWireFormat.
++
++#define LVBD_CONTROLPARAMS_LVWIREFORMAT_LENGTH (4 \
++ + LVM_MODE_LVWIREFORMAT_LENGTH) ///< Number of bytes to encode LVBD ControlParameters in LVWireFormat.
++
++#define LVVE_TX_CONTROLPARAMS_LVWIREFORMAT_LENGTH (8 \
++ + LVVE_TX_MODE_LVWIREFORMAT_LENGTH \
++ + LVM_MODE_LVWIREFORMAT_LENGTH \
++ + LVM_MODE_LVWIREFORMAT_LENGTH \
++ + LVM_MODE_LVWIREFORMAT_LENGTH \
++ + LVM_MODE_LVWIREFORMAT_LENGTH \
++ + LVHF_CONTROLPARAMS_LVWIREFORMAT_LENGTH \
++ + LVNV_CONTROLPARAMS_LVWIREFORMAT_LENGTH \
++ + LVWM_CONTROLPARAMS_LVWIREFORMAT_LENGTH \
++ + LVM_MODE_LVWIREFORMAT_LENGTH \
++ + LVEQ_CONTROLPARAMS_LVWIREFORMAT_LENGTH \
++ + LVDRC_CONTROLPARAMS_LVWIREFORMAT_LENGTH) ///< Number of bytes to encode LVVE_Tx ControlParameters in LVWireFormat.
++
++/**
++* @def LVVIDHEADER_HEADERVERSION_DEFAULT
++* Default of HeaderVersion
++* @see LVVIDHeader_ControlParams_st
++*/
++#define LVVIDHEADER_HEADERVERSION_DEFAULT (3)
++/**
++* @def LVVIDHEADER_HEADERVERSION_MIN
++* MinValue of HeaderVersion
++* @see LVVIDHeader_ControlParams_st
++*/
++#define LVVIDHEADER_HEADERVERSION_MIN (0)
++/**
++* @def LVVIDHEADER_HEADERVERSION_MAX
++* MaxValue of HeaderVersion
++* @see LVVIDHeader_ControlParams_st
++*/
++#define LVVIDHEADER_HEADERVERSION_MAX (255)
++
++/**
++* @def LVVIDHEADER_BASELINEVERSION_DEFAULT
++* Default of BaselineVersion
++* @see LVVIDHeader_ControlParams_st
++*/
++#define LVVIDHEADER_BASELINEVERSION_DEFAULT (51906816)
++/**
++* @def LVVIDHEADER_BASELINEVERSION_MIN
++* MinValue of BaselineVersion
++* @see LVVIDHeader_ControlParams_st
++*/
++#define LVVIDHEADER_BASELINEVERSION_MIN (1)
++/**
++* @def LVVIDHEADER_BASELINEVERSION_MAX
++* MaxValue of BaselineVersion
++* @see LVVIDHeader_ControlParams_st
++*/
++#define LVVIDHEADER_BASELINEVERSION_MAX (4294967295)
++
++/**
++* @def LVVIDHEADER_LVVE_RX_ALGOMASK1_DEFAULT
++* Default of LVVE_Rx_AlgoMask1
++* @see LVVIDHeader_ControlParams_st
++*/
++#define LVVIDHEADER_LVVE_RX_ALGOMASK1_DEFAULT (LVVIDHEADER_LVVE_RX_MASK1_BM_MAX)
++
++/**
++* @def LVVIDHEADER_LVVE_RX_ALGOMASK2_DEFAULT
++* Default of LVVE_Rx_AlgoMask2
++* @see LVVIDHeader_ControlParams_st
++*/
++#define LVVIDHEADER_LVVE_RX_ALGOMASK2_DEFAULT (LVVIDHEADER_LVVE_RX_MASK2_BM_MAX)
++
++/**
++* @def LVVIDHEADER_LVVE_TX_ALGOMASK1_DEFAULT
++* Default of LVVE_Tx_AlgoMask1
++* @see LVVIDHeader_ControlParams_st
++*/
++#define LVVIDHEADER_LVVE_TX_ALGOMASK1_DEFAULT (LVVIDHEADER_LVVE_TX_MASK1_BM_MAX)
++
++/**
++* @def LVVIDHEADER_LVVE_TX_ALGOMASK2_DEFAULT
++* Default of LVVE_Tx_AlgoMask2
++* @see LVVIDHeader_ControlParams_st
++*/
++#define LVVIDHEADER_LVVE_TX_ALGOMASK2_DEFAULT (LVVIDHEADER_LVVE_TX_MASK2_BM_MAX)
++
++/**
++* @def LVVIDHEADER_LVVE_CONFIG_ALGOMASK1_DEFAULT
++* Default of LVVE_Config_AlgoMask1
++* @see LVVIDHeader_ControlParams_st
++*/
++#define LVVIDHEADER_LVVE_CONFIG_ALGOMASK1_DEFAULT (LVVIDHEADER_CONFIGURATIONS_MASK1_BM_MAX)
++
++/**
++* @def LVVIDHEADER_LVVE_CONFIG_ALGOMASK2_DEFAULT
++* Default of LVVE_Config_AlgoMask2
++* @see LVVIDHeader_ControlParams_st
++*/
++#define LVVIDHEADER_LVVE_CONFIG_ALGOMASK2_DEFAULT (LVVIDHEADER_CONFIGURATIONS_MASK2_BM_MAX)
++
++/**
++* @def LVVIDHEADER_MESSAGEID_DEFAULT
++* Default of MessageID
++* @see LVVIDHeader_ControlParams_st
++*/
++#define LVVIDHEADER_MESSAGEID_DEFAULT (LVVE_RX_PRESET)
++
++/**
++* @def LVVIDHEADER_SAMPLERATE_DEFAULT
++* Default of SampleRate
++* @see LVVIDHeader_ControlParams_st
++*/
++#define LVVIDHEADER_SAMPLERATE_DEFAULT (LVM_FS_8000)
++
++/**
++* @def LVVIDHEADER_VOLUMEINDEX_DEFAULT
++* Default of VolumeIndex
++* @see LVVIDHeader_ControlParams_st
++*/
++#define LVVIDHEADER_VOLUMEINDEX_DEFAULT (0)
++/**
++* @def LVVIDHEADER_VOLUMEINDEX_MIN
++* MinValue of VolumeIndex
++* @see LVVIDHeader_ControlParams_st
++*/
++#define LVVIDHEADER_VOLUMEINDEX_MIN (0)
++/**
++* @def LVVIDHEADER_VOLUMEINDEX_MAX
++* MaxValue of VolumeIndex
++* @see LVVIDHeader_ControlParams_st
++*/
++#define LVVIDHEADER_VOLUMEINDEX_MAX (255)
++
++/**
++* @def LVVIDHEADER_NUMVOLUMES_DEFAULT
++* Default of NumVolumes
++* @see LVVIDHeader_ControlParams_st
++*/
++#define LVVIDHEADER_NUMVOLUMES_DEFAULT (1)
++/**
++* @def LVVIDHEADER_NUMVOLUMES_MIN
++* MinValue of NumVolumes
++* @see LVVIDHeader_ControlParams_st
++*/
++#define LVVIDHEADER_NUMVOLUMES_MIN (0)
++/**
++* @def LVVIDHEADER_NUMVOLUMES_MAX
++* MaxValue of NumVolumes
++* @see LVVIDHeader_ControlParams_st
++*/
++#define LVVIDHEADER_NUMVOLUMES_MAX (255)
++
++/**
++* @def LVVC_OPERATINGMODE_DEFAULT
++* Default of OperatingMode
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_OPERATINGMODE_DEFAULT (LVM_MODE_OFF)
++
++/**
++* @def LVVC_MODE_DEFAULT
++* Default of mode
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_MODE_DEFAULT (0)
++
++/**
++* @def LVVC_GAIN_LIN_MAX_DEFAULT
++* Default of Gain_Lin_Max
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_GAIN_LIN_MAX_DEFAULT (1286)
++/**
++* @def LVVC_GAIN_LIN_MAX_MIN
++* MinValue of Gain_Lin_Max
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_GAIN_LIN_MAX_MIN (512)
++/**
++* @def LVVC_GAIN_LIN_MAX_MAX
++* MaxValue of Gain_Lin_Max
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_GAIN_LIN_MAX_MAX (32767)
++
++/**
++* @def LVVC_NOISE_SENSITIVITY_DEFAULT
++* Default of Noise_Sensitivity
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_NOISE_SENSITIVITY_DEFAULT (20000)
++/**
++* @def LVVC_NOISE_SENSITIVITY_MIN
++* MinValue of Noise_Sensitivity
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_NOISE_SENSITIVITY_MIN (-6709)
++/**
++* @def LVVC_NOISE_SENSITIVITY_MAX
++* MaxValue of Noise_Sensitivity
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_NOISE_SENSITIVITY_MAX (32767)
++
++/**
++* @def LVVC_AVL_TARGET_LEVEL_LIN_DEFAULT
++* Default of AVL_Target_level_lin
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_AVL_TARGET_LEVEL_LIN_DEFAULT (16384)
++/**
++* @def LVVC_AVL_TARGET_LEVEL_LIN_MIN
++* MinValue of AVL_Target_level_lin
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_AVL_TARGET_LEVEL_LIN_MIN (0)
++/**
++* @def LVVC_AVL_TARGET_LEVEL_LIN_MAX
++* MaxValue of AVL_Target_level_lin
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_AVL_TARGET_LEVEL_LIN_MAX (32767)
++
++/**
++* @def LVVC_AVL_MINGAINLIN_DEFAULT
++* Default of AVL_MinGainLin
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_AVL_MINGAINLIN_DEFAULT (256)
++/**
++* @def LVVC_AVL_MINGAINLIN_MIN
++* MinValue of AVL_MinGainLin
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_AVL_MINGAINLIN_MIN (0)
++/**
++* @def LVVC_AVL_MINGAINLIN_MAX
++* MaxValue of AVL_MinGainLin
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_AVL_MINGAINLIN_MAX (512)
++
++/**
++* @def LVVC_AVL_MAXGAINLIN_DEFAULT
++* Default of AVL_MaxGainLin
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_AVL_MAXGAINLIN_DEFAULT (8192)
++/**
++* @def LVVC_AVL_MAXGAINLIN_MIN
++* MinValue of AVL_MaxGainLin
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_AVL_MAXGAINLIN_MIN (512)
++/**
++* @def LVVC_AVL_MAXGAINLIN_MAX
++* MaxValue of AVL_MaxGainLin
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_AVL_MAXGAINLIN_MAX (32767)
++
++/**
++* @def LVVC_AVL_NOMINALGAIN_DEFAULT
++* Default of AVL_NominalGain
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_AVL_NOMINALGAIN_DEFAULT (512)
++/**
++* @def LVVC_AVL_NOMINALGAIN_MIN
++* MinValue of AVL_NominalGain
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_AVL_NOMINALGAIN_MIN (0)
++/**
++* @def LVVC_AVL_NOMINALGAIN_MAX
++* MaxValue of AVL_NominalGain
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_AVL_NOMINALGAIN_MAX (32767)
++
++/**
++* @def LVVC_AVL_ATTACK_DEFAULT
++* Default of AVL_Attack
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_AVL_ATTACK_DEFAULT (12055)
++/**
++* @def LVVC_AVL_ATTACK_MIN
++* MinValue of AVL_Attack
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_AVL_ATTACK_MIN (0)
++/**
++* @def LVVC_AVL_ATTACK_MAX
++* MaxValue of AVL_Attack
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_AVL_ATTACK_MAX (32767)
++
++/**
++* @def LVVC_AVL_RELEASE_DEFAULT
++* Default of AVL_Release
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_AVL_RELEASE_DEFAULT (32604)
++/**
++* @def LVVC_AVL_RELEASE_MIN
++* MinValue of AVL_Release
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_AVL_RELEASE_MIN (0)
++/**
++* @def LVVC_AVL_RELEASE_MAX
++* MaxValue of AVL_Release
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_AVL_RELEASE_MAX (32767)
++
++/**
++* @def LVVC_AVL_RELEASEMAX_DEFAULT
++* Default of AVL_ReleaseMax
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_AVL_RELEASEMAX_DEFAULT (32441)
++/**
++* @def LVVC_AVL_RELEASEMAX_MIN
++* MinValue of AVL_ReleaseMax
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_AVL_RELEASEMAX_MIN (0)
++/**
++* @def LVVC_AVL_RELEASEMAX_MAX
++* MaxValue of AVL_ReleaseMax
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_AVL_RELEASEMAX_MAX (32767)
++
++/**
++* @def LVVC_AVL_LIMIT_MAXOUTPUTLIN_DEFAULT
++* Default of AVL_Limit_MaxOutputLin
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_AVL_LIMIT_MAXOUTPUTLIN_DEFAULT (23170)
++/**
++* @def LVVC_AVL_LIMIT_MAXOUTPUTLIN_MIN
++* MinValue of AVL_Limit_MaxOutputLin
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_AVL_LIMIT_MAXOUTPUTLIN_MIN (0)
++/**
++* @def LVVC_AVL_LIMIT_MAXOUTPUTLIN_MAX
++* MaxValue of AVL_Limit_MaxOutputLin
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_AVL_LIMIT_MAXOUTPUTLIN_MAX (32767)
++
++/**
++* @def LVVC_SPDETECT_THRESHOLD_DEFAULT
++* Default of SpDetect_Threshold
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_SPDETECT_THRESHOLD_DEFAULT (1024)
++/**
++* @def LVVC_SPDETECT_THRESHOLD_MIN
++* MinValue of SpDetect_Threshold
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_SPDETECT_THRESHOLD_MIN (0)
++/**
++* @def LVVC_SPDETECT_THRESHOLD_MAX
++* MaxValue of SpDetect_Threshold
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_SPDETECT_THRESHOLD_MAX (32767)
++
++/**
++* @def LVFENS_OPERATINGMODE_DEFAULT
++* Default of OperatingMode
++* @see LVFENS_ControlParams_st
++*/
++#define LVFENS_OPERATINGMODE_DEFAULT (LVM_MODE_OFF)
++
++/**
++* @def LVFENS_FENS_LIMIT_NS_DEFAULT
++* Default of FENS_limit_NS
++* @see LVFENS_ControlParams_st
++*/
++#define LVFENS_FENS_LIMIT_NS_DEFAULT (10976)
++/**
++* @def LVFENS_FENS_LIMIT_NS_MIN
++* MinValue of FENS_limit_NS
++* @see LVFENS_ControlParams_st
++*/
++#define LVFENS_FENS_LIMIT_NS_MIN (0)
++/**
++* @def LVFENS_FENS_LIMIT_NS_MAX
++* MaxValue of FENS_limit_NS
++* @see LVFENS_ControlParams_st
++*/
++#define LVFENS_FENS_LIMIT_NS_MAX (32767)
++
++/**
++* @def LVFENS_MODE_DEFAULT
++* Default of Mode
++* @see LVFENS_ControlParams_st
++*/
++#define LVFENS_MODE_DEFAULT (0)
++
++/**
++* @def LVWM_OPERATINGMODE_DEFAULT
++* Default of OperatingMode
++* @see LVWM_ControlParams_st
++*/
++#define LVWM_OPERATINGMODE_DEFAULT (LVM_MODE_OFF)
++
++/**
++* @def LVWM_MODE_DEFAULT
++* Default of mode
++* @see LVWM_ControlParams_st
++*/
++#define LVWM_MODE_DEFAULT (7)
++
++/**
++* @def LVWM_AVL_TARGET_LEVEL_LIN_DEFAULT
++* Default of AVL_Target_level_lin
++* @see LVWM_ControlParams_st
++*/
++#define LVWM_AVL_TARGET_LEVEL_LIN_DEFAULT (16384)
++/**
++* @def LVWM_AVL_TARGET_LEVEL_LIN_MIN
++* MinValue of AVL_Target_level_lin
++* @see LVWM_ControlParams_st
++*/
++#define LVWM_AVL_TARGET_LEVEL_LIN_MIN (0)
++/**
++* @def LVWM_AVL_TARGET_LEVEL_LIN_MAX
++* MaxValue of AVL_Target_level_lin
++* @see LVWM_ControlParams_st
++*/
++#define LVWM_AVL_TARGET_LEVEL_LIN_MAX (32767)
++
++/**
++* @def LVWM_AVL_MINGAINLIN_DEFAULT
++* Default of AVL_MinGainLin
++* @see LVWM_ControlParams_st
++*/
++#define LVWM_AVL_MINGAINLIN_DEFAULT (128)
++/**
++* @def LVWM_AVL_MINGAINLIN_MIN
++* MinValue of AVL_MinGainLin
++* @see LVWM_ControlParams_st
++*/
++#define LVWM_AVL_MINGAINLIN_MIN (0)
++/**
++* @def LVWM_AVL_MINGAINLIN_MAX
++* MaxValue of AVL_MinGainLin
++* @see LVWM_ControlParams_st
++*/
++#define LVWM_AVL_MINGAINLIN_MAX (512)
++
++/**
++* @def LVWM_AVL_MAXGAINLIN_DEFAULT
++* Default of AVL_MaxGainLin
++* @see LVWM_ControlParams_st
++*/
++#define LVWM_AVL_MAXGAINLIN_DEFAULT (8189)
++/**
++* @def LVWM_AVL_MAXGAINLIN_MIN
++* MinValue of AVL_MaxGainLin
++* @see LVWM_ControlParams_st
++*/
++#define LVWM_AVL_MAXGAINLIN_MIN (512)
++/**
++* @def LVWM_AVL_MAXGAINLIN_MAX
++* MaxValue of AVL_MaxGainLin
++* @see LVWM_ControlParams_st
++*/
++#define LVWM_AVL_MAXGAINLIN_MAX (32767)
++
++/**
++* @def LVWM_AVL_ATTACK_DEFAULT
++* Default of AVL_Attack
++* @see LVWM_ControlParams_st
++*/
++#define LVWM_AVL_ATTACK_DEFAULT (25520)
++/**
++* @def LVWM_AVL_ATTACK_MIN
++* MinValue of AVL_Attack
++* @see LVWM_ControlParams_st
++*/
++#define LVWM_AVL_ATTACK_MIN (0)
++/**
++* @def LVWM_AVL_ATTACK_MAX
++* MaxValue of AVL_Attack
++* @see LVWM_ControlParams_st
++*/
++#define LVWM_AVL_ATTACK_MAX (32767)
++
++/**
++* @def LVWM_AVL_RELEASE_DEFAULT
++* Default of AVL_Release
++* @see LVWM_ControlParams_st
++*/
++#define LVWM_AVL_RELEASE_DEFAULT (32685)
++/**
++* @def LVWM_AVL_RELEASE_MIN
++* MinValue of AVL_Release
++* @see LVWM_ControlParams_st
++*/
++#define LVWM_AVL_RELEASE_MIN (0)
++/**
++* @def LVWM_AVL_RELEASE_MAX
++* MaxValue of AVL_Release
++* @see LVWM_ControlParams_st
++*/
++#define LVWM_AVL_RELEASE_MAX (32767)
++
++/**
++* @def LVWM_AVL_LIMIT_MAXOUTPUTLIN_DEFAULT
++* Default of AVL_Limit_MaxOutputLin
++* @see LVWM_ControlParams_st
++*/
++#define LVWM_AVL_LIMIT_MAXOUTPUTLIN_DEFAULT (23197)
++/**
++* @def LVWM_AVL_LIMIT_MAXOUTPUTLIN_MIN
++* MinValue of AVL_Limit_MaxOutputLin
++* @see LVWM_ControlParams_st
++*/
++#define LVWM_AVL_LIMIT_MAXOUTPUTLIN_MIN (0)
++/**
++* @def LVWM_AVL_LIMIT_MAXOUTPUTLIN_MAX
++* MaxValue of AVL_Limit_MaxOutputLin
++* @see LVWM_ControlParams_st
++*/
++#define LVWM_AVL_LIMIT_MAXOUTPUTLIN_MAX (32767)
++
++/**
++* @def LVWM_SPDETECT_THRESHOLD_DEFAULT
++* Default of SpDetect_Threshold
++* @see LVWM_ControlParams_st
++*/
++#define LVWM_SPDETECT_THRESHOLD_DEFAULT (9216)
++/**
++* @def LVWM_SPDETECT_THRESHOLD_MIN
++* MinValue of SpDetect_Threshold
++* @see LVWM_ControlParams_st
++*/
++#define LVWM_SPDETECT_THRESHOLD_MIN (0)
++/**
++* @def LVWM_SPDETECT_THRESHOLD_MAX
++* MaxValue of SpDetect_Threshold
++* @see LVWM_ControlParams_st
++*/
++#define LVWM_SPDETECT_THRESHOLD_MAX (32767)
++
++/**
++* @def LVDRC_OPERATINGMODE_DEFAULT
++* Default of OperatingMode
++* @see LVDRC_ControlParams_st
++*/
++#define LVDRC_OPERATINGMODE_DEFAULT (LVM_MODE_OFF)
++
++/**
++* @def LVDRC_NUMKNEES_DEFAULT
++* Default of NumKnees
++* @see LVDRC_ControlParams_st
++*/
++#define LVDRC_NUMKNEES_DEFAULT (5)
++/**
++* @def LVDRC_NUMKNEES_MIN
++* MinValue of NumKnees
++* @see LVDRC_ControlParams_st
++*/
++#define LVDRC_NUMKNEES_MIN (1)
++/**
++* @def LVDRC_NUMKNEES_MAX
++* MaxValue of NumKnees
++* @see LVDRC_ControlParams_st
++*/
++#define LVDRC_NUMKNEES_MAX (5)
++
++/**
++* @def LVDRC_COMPRESSORCURVEINPUTLEVELS_DEFAULT
++* Default of CompressorCurveInputLevels
++* @see LVDRC_ControlParams_st
++*/
++#define LVDRC_COMPRESSORCURVEINPUTLEVELS_DEFAULT {-96,-70,-50, -24, 0}
++/**
++* @def LVDRC_COMPRESSORCURVEINPUTLEVELS_MIN
++* MinValue of CompressorCurveInputLevels
++* @see LVDRC_ControlParams_st
++*/
++#define LVDRC_COMPRESSORCURVEINPUTLEVELS_MIN (-96)
++/**
++* @def LVDRC_COMPRESSORCURVEINPUTLEVELS_MAX
++* MaxValue of CompressorCurveInputLevels
++* @see LVDRC_ControlParams_st
++*/
++#define LVDRC_COMPRESSORCURVEINPUTLEVELS_MAX (0)
++/**
++* @def LVDRC_COMPRESSORCURVEINPUTLEVELS_LENGTH
++* Length of CompressorCurveInputLevels
++* @see LVDRC_ControlParams_st
++*/
++#define LVDRC_COMPRESSORCURVEINPUTLEVELS_LENGTH (5)
++
++/**
++* @def LVDRC_COMPRESSORCURVEOUTPUTLEVELS_DEFAULT
++* Default of CompressorCurveOutputLevels
++* @see LVDRC_ControlParams_st
++*/
++#define LVDRC_COMPRESSORCURVEOUTPUTLEVELS_DEFAULT {-96,-70,-38,-12,0}
++/**
++* @def LVDRC_COMPRESSORCURVEOUTPUTLEVELS_MIN
++* MinValue of CompressorCurveOutputLevels
++* @see LVDRC_ControlParams_st
++*/
++#define LVDRC_COMPRESSORCURVEOUTPUTLEVELS_MIN (-96)
++/**
++* @def LVDRC_COMPRESSORCURVEOUTPUTLEVELS_MAX
++* MaxValue of CompressorCurveOutputLevels
++* @see LVDRC_ControlParams_st
++*/
++#define LVDRC_COMPRESSORCURVEOUTPUTLEVELS_MAX (0)
++/**
++* @def LVDRC_COMPRESSORCURVEOUTPUTLEVELS_LENGTH
++* Length of CompressorCurveOutputLevels
++* @see LVDRC_ControlParams_st
++*/
++#define LVDRC_COMPRESSORCURVEOUTPUTLEVELS_LENGTH (5)
++
++/**
++* @def LVDRC_ATTACKTIME_DEFAULT
++* Default of AttackTime
++* @see LVDRC_ControlParams_st
++*/
++#define LVDRC_ATTACKTIME_DEFAULT (50)
++/**
++* @def LVDRC_ATTACKTIME_MIN
++* MinValue of AttackTime
++* @see LVDRC_ControlParams_st
++*/
++#define LVDRC_ATTACKTIME_MIN (0)
++/**
++* @def LVDRC_ATTACKTIME_MAX
++* MaxValue of AttackTime
++* @see LVDRC_ControlParams_st
++*/
++#define LVDRC_ATTACKTIME_MAX (32767)
++
++/**
++* @def LVDRC_RELEASETIME_DEFAULT
++* Default of ReleaseTime
++* @see LVDRC_ControlParams_st
++*/
++#define LVDRC_RELEASETIME_DEFAULT (50)
++/**
++* @def LVDRC_RELEASETIME_MIN
++* MinValue of ReleaseTime
++* @see LVDRC_ControlParams_st
++*/
++#define LVDRC_RELEASETIME_MIN (0)
++/**
++* @def LVDRC_RELEASETIME_MAX
++* MaxValue of ReleaseTime
++* @see LVDRC_ControlParams_st
++*/
++#define LVDRC_RELEASETIME_MAX (32767)
++
++/**
++* @def LVDRC_LIMITEROPERATINGMODE_DEFAULT
++* Default of LimiterOperatingMode
++* @see LVDRC_ControlParams_st
++*/
++#define LVDRC_LIMITEROPERATINGMODE_DEFAULT (LVM_MODE_OFF)
++
++/**
++* @def LVDRC_LIMITLEVEL_DEFAULT
++* Default of LimitLevel
++* @see LVDRC_ControlParams_st
++*/
++#define LVDRC_LIMITLEVEL_DEFAULT (0)
++/**
++* @def LVDRC_LIMITLEVEL_MIN
++* MinValue of LimitLevel
++* @see LVDRC_ControlParams_st
++*/
++#define LVDRC_LIMITLEVEL_MIN (-96)
++/**
++* @def LVDRC_LIMITLEVEL_MAX
++* MaxValue of LimitLevel
++* @see LVDRC_ControlParams_st
++*/
++#define LVDRC_LIMITLEVEL_MAX (0)
++
++/**
++* @def LVNG_OPERATINGMODE_DEFAULT
++* Default of OperatingMode
++* @see LVNG_ControlParams_st
++*/
++#define LVNG_OPERATINGMODE_DEFAULT (LVM_MODE_OFF)
++
++/**
++* @def LVNG_NUMKNEES_DEFAULT
++* Default of NumKnees
++* @see LVNG_ControlParams_st
++*/
++#define LVNG_NUMKNEES_DEFAULT (5)
++/**
++* @def LVNG_NUMKNEES_MIN
++* MinValue of NumKnees
++* @see LVNG_ControlParams_st
++*/
++#define LVNG_NUMKNEES_MIN (1)
++/**
++* @def LVNG_NUMKNEES_MAX
++* MaxValue of NumKnees
++* @see LVNG_ControlParams_st
++*/
++#define LVNG_NUMKNEES_MAX (5)
++
++/**
++* @def LVNG_COMPRESSORCURVEINPUTLEVELS_DEFAULT
++* Default of CompressorCurveInputLevels
++* @see LVNG_ControlParams_st
++*/
++#define LVNG_COMPRESSORCURVEINPUTLEVELS_DEFAULT {-80,-70,-50, -24, 0}
++/**
++* @def LVNG_COMPRESSORCURVEINPUTLEVELS_MIN
++* MinValue of CompressorCurveInputLevels
++* @see LVNG_ControlParams_st
++*/
++#define LVNG_COMPRESSORCURVEINPUTLEVELS_MIN (-96)
++/**
++* @def LVNG_COMPRESSORCURVEINPUTLEVELS_MAX
++* MaxValue of CompressorCurveInputLevels
++* @see LVNG_ControlParams_st
++*/
++#define LVNG_COMPRESSORCURVEINPUTLEVELS_MAX (0)
++/**
++* @def LVNG_COMPRESSORCURVEINPUTLEVELS_LENGTH
++* Length of CompressorCurveInputLevels
++* @see LVNG_ControlParams_st
++*/
++#define LVNG_COMPRESSORCURVEINPUTLEVELS_LENGTH (5)
++
++/**
++* @def LVNG_COMPRESSORCURVEOUTPUTLEVELS_DEFAULT
++* Default of CompressorCurveOutputLevels
++* @see LVNG_ControlParams_st
++*/
++#define LVNG_COMPRESSORCURVEOUTPUTLEVELS_DEFAULT {-96,-80,-50, -24, 0}
++/**
++* @def LVNG_COMPRESSORCURVEOUTPUTLEVELS_MIN
++* MinValue of CompressorCurveOutputLevels
++* @see LVNG_ControlParams_st
++*/
++#define LVNG_COMPRESSORCURVEOUTPUTLEVELS_MIN (-96)
++/**
++* @def LVNG_COMPRESSORCURVEOUTPUTLEVELS_MAX
++* MaxValue of CompressorCurveOutputLevels
++* @see LVNG_ControlParams_st
++*/
++#define LVNG_COMPRESSORCURVEOUTPUTLEVELS_MAX (0)
++/**
++* @def LVNG_COMPRESSORCURVEOUTPUTLEVELS_LENGTH
++* Length of CompressorCurveOutputLevels
++* @see LVNG_ControlParams_st
++*/
++#define LVNG_COMPRESSORCURVEOUTPUTLEVELS_LENGTH (5)
++
++/**
++* @def LVNG_ATTACKTIME_DEFAULT
++* Default of AttackTime
++* @see LVNG_ControlParams_st
++*/
++#define LVNG_ATTACKTIME_DEFAULT (50)
++/**
++* @def LVNG_ATTACKTIME_MIN
++* MinValue of AttackTime
++* @see LVNG_ControlParams_st
++*/
++#define LVNG_ATTACKTIME_MIN (0)
++/**
++* @def LVNG_ATTACKTIME_MAX
++* MaxValue of AttackTime
++* @see LVNG_ControlParams_st
++*/
++#define LVNG_ATTACKTIME_MAX (32767)
++
++/**
++* @def LVNG_RELEASETIME_DEFAULT
++* Default of ReleaseTime
++* @see LVNG_ControlParams_st
++*/
++#define LVNG_RELEASETIME_DEFAULT (50)
++/**
++* @def LVNG_RELEASETIME_MIN
++* MinValue of ReleaseTime
++* @see LVNG_ControlParams_st
++*/
++#define LVNG_RELEASETIME_MIN (0)
++/**
++* @def LVNG_RELEASETIME_MAX
++* MaxValue of ReleaseTime
++* @see LVNG_ControlParams_st
++*/
++#define LVNG_RELEASETIME_MAX (32767)
++
++/**
++* @def LVNLPP_NLPP_LIMIT_DEFAULT
++* Default of NLPP_Limit
++* @see LVNLPP_ControlParams_st
++*/
++#define LVNLPP_NLPP_LIMIT_DEFAULT (0)
++/**
++* @def LVNLPP_NLPP_LIMIT_MIN
++* MinValue of NLPP_Limit
++* @see LVNLPP_ControlParams_st
++*/
++#define LVNLPP_NLPP_LIMIT_MIN (-24)
++/**
++* @def LVNLPP_NLPP_LIMIT_MAX
++* MaxValue of NLPP_Limit
++* @see LVNLPP_ControlParams_st
++*/
++#define LVNLPP_NLPP_LIMIT_MAX (0)
++
++/**
++* @def LVNLPP_NLPP_HPF_CORNERFREQ_DEFAULT
++* Default of NLPP_HPF_CornerFreq
++* @see LVNLPP_ControlParams_st
++*/
++#define LVNLPP_NLPP_HPF_CORNERFREQ_DEFAULT (50)
++/**
++* @def LVNLPP_NLPP_HPF_CORNERFREQ_MIN
++* MinValue of NLPP_HPF_CornerFreq
++* @see LVNLPP_ControlParams_st
++*/
++#define LVNLPP_NLPP_HPF_CORNERFREQ_MIN (50)
++/**
++* @def LVNLPP_NLPP_HPF_CORNERFREQ_MAX
++* MaxValue of NLPP_HPF_CornerFreq
++* @see LVNLPP_ControlParams_st
++*/
++#define LVNLPP_NLPP_HPF_CORNERFREQ_MAX (1000)
++
++/**
++* @def LVEQ_EQ_LENGTH_DEFAULT
++* Default of EQ_Length
++* @see LVEQ_ControlParams_st
++*/
++#define LVEQ_EQ_LENGTH_DEFAULT (64)
++/**
++* @def LVEQ_EQ_LENGTH_MIN
++* MinValue of EQ_Length
++* @see LVEQ_ControlParams_st
++*/
++#define LVEQ_EQ_LENGTH_MIN (8)
++/**
++* @def LVEQ_EQ_LENGTH_MAX
++* MaxValue of EQ_Length
++* @see LVEQ_ControlParams_st
++*/
++#define LVEQ_EQ_LENGTH_MAX (64)
++
++/**
++* @def LVEQ_EQ_COEFS_DEFAULT
++* Default of EQ_Coefs
++* @see LVEQ_ControlParams_st
++*/
++#define LVEQ_EQ_COEFS_DEFAULT {4096,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}
++/**
++* @def LVEQ_EQ_COEFS_MIN
++* MinValue of EQ_Coefs
++* @see LVEQ_ControlParams_st
++*/
++#define LVEQ_EQ_COEFS_MIN (-32768)
++/**
++* @def LVEQ_EQ_COEFS_MAX
++* MaxValue of EQ_Coefs
++* @see LVEQ_ControlParams_st
++*/
++#define LVEQ_EQ_COEFS_MAX (32767)
++/**
++* @def LVEQ_EQ_COEFS_LENGTH
++* Length of EQ_Coefs
++* @see LVEQ_ControlParams_st
++*/
++#define LVEQ_EQ_COEFS_LENGTH (64)
++
++/**
++* @def LVVOL_VOL_OPERATINGMODE_DEFAULT
++* Default of VOL_OperatingMode
++* @see LVVOL_ControlParams_st
++*/
++#define LVVOL_VOL_OPERATINGMODE_DEFAULT (LVM_MODE_OFF)
++
++/**
++* @def LVVOL_VOL_GAIN_DEFAULT
++* Default of VOL_Gain
++* @see LVVOL_ControlParams_st
++*/
++#define LVVOL_VOL_GAIN_DEFAULT (0)
++/**
++* @def LVVOL_VOL_GAIN_MIN
++* MinValue of VOL_Gain
++* @see LVVOL_ControlParams_st
++*/
++#define LVVOL_VOL_GAIN_MIN (-96)
++/**
++* @def LVVOL_VOL_GAIN_MAX
++* MaxValue of VOL_Gain
++* @see LVVOL_ControlParams_st
++*/
++#define LVVOL_VOL_GAIN_MAX (24)
++
++/**
++* @def LVHPF_HPF_OPERATINGMODE_DEFAULT
++* Default of HPF_OperatingMode
++* @see LVHPF_ControlParams_st
++*/
++#define LVHPF_HPF_OPERATINGMODE_DEFAULT (LVM_MODE_OFF)
++
++/**
++* @def LVHPF_HPF_CORNERFREQ_DEFAULT
++* Default of HPF_CornerFreq
++* @see LVHPF_ControlParams_st
++*/
++#define LVHPF_HPF_CORNERFREQ_DEFAULT (50)
++/**
++* @def LVHPF_HPF_CORNERFREQ_MIN
++* MinValue of HPF_CornerFreq
++* @see LVHPF_ControlParams_st
++*/
++#define LVHPF_HPF_CORNERFREQ_MIN (50)
++/**
++* @def LVHPF_HPF_CORNERFREQ_MAX
++* MaxValue of HPF_CornerFreq
++* @see LVHPF_ControlParams_st
++*/
++#define LVHPF_HPF_CORNERFREQ_MAX (1500)
++
++/**
++* @def LVMUTE_MUTE_DEFAULT
++* Default of Mute
++* @see LVMUTE_ControlParams_st
++*/
++#define LVMUTE_MUTE_DEFAULT (LVM_MODE_OFF)
++
++/**
++* @def LVVE_RX_OPERATINGMODE_DEFAULT
++* Default of OperatingMode
++* @see LVVE_Rx_ControlParams_st
++*/
++#define LVVE_RX_OPERATINGMODE_DEFAULT (LVVE_RX_MODE_OFF)
++
++/**
++* @def LVVE_RX_MUTE_DEFAULT
++* Default of Mute
++* @see LVVE_Rx_ControlParams_st
++*/
++#define LVVE_RX_MUTE_DEFAULT (LVM_MODE_OFF)
++
++/**
++* @def LVVE_RX_VOL_OPERATINGMODE_DEFAULT
++* Default of VOL_OperatingMode
++* @see LVVE_Rx_ControlParams_st
++*/
++#define LVVE_RX_VOL_OPERATINGMODE_DEFAULT (LVM_MODE_OFF)
++
++/**
++* @def LVVE_RX_VOL_GAIN_DEFAULT
++* Default of VOL_Gain
++* @see LVVE_Rx_ControlParams_st
++*/
++#define LVVE_RX_VOL_GAIN_DEFAULT (0)
++/**
++* @def LVVE_RX_VOL_GAIN_MIN
++* MinValue of VOL_Gain
++* @see LVVE_Rx_ControlParams_st
++*/
++#define LVVE_RX_VOL_GAIN_MIN (-96)
++/**
++* @def LVVE_RX_VOL_GAIN_MAX
++* MaxValue of VOL_Gain
++* @see LVVE_Rx_ControlParams_st
++*/
++#define LVVE_RX_VOL_GAIN_MAX (24)
++
++
++/**
++* @def LVVE_RX_NLPP_OPERATINGMODE_DEFAULT
++* Default of NLPP_OperatingMode
++* @see LVVE_Rx_ControlParams_st
++*/
++#define LVVE_RX_NLPP_OPERATINGMODE_DEFAULT (LVM_MODE_OFF)
++
++
++
++/**
++* @def LVVE_RX_EQ_OPERATINGMODE_DEFAULT
++* Default of EQ_OperatingMode
++* @see LVVE_Rx_ControlParams_st
++*/
++#define LVVE_RX_EQ_OPERATINGMODE_DEFAULT (LVM_MODE_OFF)
++
++
++
++/**
++* @def LVVE_RX_HPF_OPERATINGMODE_DEFAULT
++* Default of HPF_OperatingMode
++* @see LVVE_Rx_ControlParams_st
++*/
++#define LVVE_RX_HPF_OPERATINGMODE_DEFAULT (LVM_MODE_OFF)
++
++/**
++* @def LVVE_RX_HPF_CORNERFREQ_DEFAULT
++* Default of HPF_CornerFreq
++* @see LVVE_Rx_ControlParams_st
++*/
++#define LVVE_RX_HPF_CORNERFREQ_DEFAULT (50)
++/**
++* @def LVVE_RX_HPF_CORNERFREQ_MIN
++* MinValue of HPF_CornerFreq
++* @see LVVE_Rx_ControlParams_st
++*/
++#define LVVE_RX_HPF_CORNERFREQ_MIN (50)
++/**
++* @def LVVE_RX_HPF_CORNERFREQ_MAX
++* MaxValue of HPF_CornerFreq
++* @see LVVE_Rx_ControlParams_st
++*/
++#define LVVE_RX_HPF_CORNERFREQ_MAX (1500)
++
++
++
++/**
++* @def LVNV_OPERATINGMODE_DEFAULT
++* Default of OperatingMode
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_OPERATINGMODE_DEFAULT (LVM_MODE_OFF)
++
++/**
++* @def LVNV_MODE_DEFAULT
++* Default of Mode
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_MODE_DEFAULT (18935)
++
++/**
++* @def LVNV_MODE2_DEFAULT
++* Default of Mode2
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_MODE2_DEFAULT (14)
++
++/**
++* @def LVNV_TUNING_MODE_DEFAULT
++* Default of Tuning_mode
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_TUNING_MODE_DEFAULT (0)
++
++/**
++* @def LVNV_INPUT_GAIN_MIC0_DEFAULT
++* Default of Input_Gain_Mic0
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_INPUT_GAIN_MIC0_DEFAULT (8192)
++/**
++* @def LVNV_INPUT_GAIN_MIC0_MIN
++* MinValue of Input_Gain_Mic0
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_INPUT_GAIN_MIC0_MIN (0)
++/**
++* @def LVNV_INPUT_GAIN_MIC0_MAX
++* MaxValue of Input_Gain_Mic0
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_INPUT_GAIN_MIC0_MAX (32767)
++
++/**
++* @def LVNV_INPUT_GAIN_MIC1_DEFAULT
++* Default of Input_Gain_Mic1
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_INPUT_GAIN_MIC1_DEFAULT (8192)
++/**
++* @def LVNV_INPUT_GAIN_MIC1_MIN
++* MinValue of Input_Gain_Mic1
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_INPUT_GAIN_MIC1_MIN (0)
++/**
++* @def LVNV_INPUT_GAIN_MIC1_MAX
++* MaxValue of Input_Gain_Mic1
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_INPUT_GAIN_MIC1_MAX (32767)
++
++/**
++* @def LVNV_OUTPUT_GAIN_DEFAULT
++* Default of Output_Gain
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_OUTPUT_GAIN_DEFAULT (2048)
++/**
++* @def LVNV_OUTPUT_GAIN_MIN
++* MinValue of Output_Gain
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_OUTPUT_GAIN_MIN (0)
++/**
++* @def LVNV_OUTPUT_GAIN_MAX
++* MaxValue of Output_Gain
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_OUTPUT_GAIN_MAX (32767)
++
++/**
++* @def LVNV_NLMS0_LB_TAPS_DEFAULT
++* Default of NLMS0_LB_taps
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS0_LB_TAPS_DEFAULT (32)
++/**
++* @def LVNV_NLMS0_LB_TAPS_MIN
++* MinValue of NLMS0_LB_taps
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS0_LB_TAPS_MIN (16)
++/**
++* @def LVNV_NLMS0_LB_TAPS_MAX
++* MaxValue of NLMS0_LB_taps
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS0_LB_TAPS_MAX (64)
++
++/**
++* @def LVNV_NLMS0_LB_TWOALPHA_DEFAULT
++* Default of NLMS0_LB_twoalpha
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS0_LB_TWOALPHA_DEFAULT (8192)
++/**
++* @def LVNV_NLMS0_LB_TWOALPHA_MIN
++* MinValue of NLMS0_LB_twoalpha
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS0_LB_TWOALPHA_MIN (0)
++/**
++* @def LVNV_NLMS0_LB_TWOALPHA_MAX
++* MaxValue of NLMS0_LB_twoalpha
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS0_LB_TWOALPHA_MAX (32767)
++
++/**
++* @def LVNV_NLMS0_LB_ERL_DEFAULT
++* Default of NLMS0_LB_erl
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS0_LB_ERL_DEFAULT (1000)
++/**
++* @def LVNV_NLMS0_LB_ERL_MIN
++* MinValue of NLMS0_LB_erl
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS0_LB_ERL_MIN (64)
++/**
++* @def LVNV_NLMS0_LB_ERL_MAX
++* MaxValue of NLMS0_LB_erl
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS0_LB_ERL_MAX (32767)
++
++/**
++* @def LVNV_NLMS0_HB_TAPS_DEFAULT
++* Default of NLMS0_HB_taps
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS0_HB_TAPS_DEFAULT (24)
++/**
++* @def LVNV_NLMS0_HB_TAPS_MIN
++* MinValue of NLMS0_HB_taps
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS0_HB_TAPS_MIN (16)
++/**
++* @def LVNV_NLMS0_HB_TAPS_MAX
++* MaxValue of NLMS0_HB_taps
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS0_HB_TAPS_MAX (64)
++
++/**
++* @def LVNV_NLMS0_HB_TWOALPHA_DEFAULT
++* Default of NLMS0_HB_twoalpha
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS0_HB_TWOALPHA_DEFAULT (8192)
++/**
++* @def LVNV_NLMS0_HB_TWOALPHA_MIN
++* MinValue of NLMS0_HB_twoalpha
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS0_HB_TWOALPHA_MIN (0)
++/**
++* @def LVNV_NLMS0_HB_TWOALPHA_MAX
++* MaxValue of NLMS0_HB_twoalpha
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS0_HB_TWOALPHA_MAX (32767)
++
++/**
++* @def LVNV_NLMS0_HB_ERL_DEFAULT
++* Default of NLMS0_HB_erl
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS0_HB_ERL_DEFAULT (1000)
++/**
++* @def LVNV_NLMS0_HB_ERL_MIN
++* MinValue of NLMS0_HB_erl
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS0_HB_ERL_MIN (64)
++/**
++* @def LVNV_NLMS0_HB_ERL_MAX
++* MaxValue of NLMS0_HB_erl
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS0_HB_ERL_MAX (32767)
++
++/**
++* @def LVNV_NLMS0_PRESET_COEFS_DEFAULT
++* Default of NLMS0_preset_coefs
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS0_PRESET_COEFS_DEFAULT (0)
++/**
++* @def LVNV_NLMS0_PRESET_COEFS_MIN
++* MinValue of NLMS0_preset_coefs
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS0_PRESET_COEFS_MIN (0)
++/**
++* @def LVNV_NLMS0_PRESET_COEFS_MAX
++* MaxValue of NLMS0_preset_coefs
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS0_PRESET_COEFS_MAX (2)
++
++/**
++* @def LVNV_NLMS0_OFFSET_DEFAULT
++* Default of NLMS0_offset
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS0_OFFSET_DEFAULT (776)
++/**
++* @def LVNV_NLMS0_OFFSET_MIN
++* MinValue of NLMS0_offset
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS0_OFFSET_MIN (0)
++/**
++* @def LVNV_NLMS0_OFFSET_MAX
++* MaxValue of NLMS0_offset
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS0_OFFSET_MAX (32767)
++
++/**
++* @def LVNV_NLMS1_LB_TAPS_DEFAULT
++* Default of NLMS1_LB_taps
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS1_LB_TAPS_DEFAULT (32)
++/**
++* @def LVNV_NLMS1_LB_TAPS_MIN
++* MinValue of NLMS1_LB_taps
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS1_LB_TAPS_MIN (16)
++/**
++* @def LVNV_NLMS1_LB_TAPS_MAX
++* MaxValue of NLMS1_LB_taps
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS1_LB_TAPS_MAX (32)
++
++/**
++* @def LVNV_NLMS1_LB_TWOALPHA_DEFAULT
++* Default of NLMS1_LB_twoalpha
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS1_LB_TWOALPHA_DEFAULT (8192)
++/**
++* @def LVNV_NLMS1_LB_TWOALPHA_MIN
++* MinValue of NLMS1_LB_twoalpha
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS1_LB_TWOALPHA_MIN (0)
++/**
++* @def LVNV_NLMS1_LB_TWOALPHA_MAX
++* MaxValue of NLMS1_LB_twoalpha
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS1_LB_TWOALPHA_MAX (32767)
++
++/**
++* @def LVNV_NLMS1_LB_ERL_DEFAULT
++* Default of NLMS1_LB_erl
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS1_LB_ERL_DEFAULT (1000)
++/**
++* @def LVNV_NLMS1_LB_ERL_MIN
++* MinValue of NLMS1_LB_erl
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS1_LB_ERL_MIN (64)
++/**
++* @def LVNV_NLMS1_LB_ERL_MAX
++* MaxValue of NLMS1_LB_erl
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS1_LB_ERL_MAX (32767)
++
++/**
++* @def LVNV_NLMS1_HB_TAPS_DEFAULT
++* Default of NLMS1_HB_taps
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS1_HB_TAPS_DEFAULT (24)
++/**
++* @def LVNV_NLMS1_HB_TAPS_MIN
++* MinValue of NLMS1_HB_taps
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS1_HB_TAPS_MIN (16)
++/**
++* @def LVNV_NLMS1_HB_TAPS_MAX
++* MaxValue of NLMS1_HB_taps
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS1_HB_TAPS_MAX (32)
++
++/**
++* @def LVNV_NLMS1_HB_TWOALPHA_DEFAULT
++* Default of NLMS1_HB_twoalpha
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS1_HB_TWOALPHA_DEFAULT (8192)
++/**
++* @def LVNV_NLMS1_HB_TWOALPHA_MIN
++* MinValue of NLMS1_HB_twoalpha
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS1_HB_TWOALPHA_MIN (0)
++/**
++* @def LVNV_NLMS1_HB_TWOALPHA_MAX
++* MaxValue of NLMS1_HB_twoalpha
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS1_HB_TWOALPHA_MAX (32767)
++
++/**
++* @def LVNV_NLMS1_HB_ERL_DEFAULT
++* Default of NLMS1_HB_erl
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS1_HB_ERL_DEFAULT (1000)
++/**
++* @def LVNV_NLMS1_HB_ERL_MIN
++* MinValue of NLMS1_HB_erl
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS1_HB_ERL_MIN (64)
++/**
++* @def LVNV_NLMS1_HB_ERL_MAX
++* MaxValue of NLMS1_HB_erl
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS1_HB_ERL_MAX (32767)
++
++/**
++* @def LVNV_NLMS1_PRESET_COEFS_DEFAULT
++* Default of NLMS1_preset_coefs
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS1_PRESET_COEFS_DEFAULT (0)
++/**
++* @def LVNV_NLMS1_PRESET_COEFS_MIN
++* MinValue of NLMS1_preset_coefs
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS1_PRESET_COEFS_MIN (0)
++/**
++* @def LVNV_NLMS1_PRESET_COEFS_MAX
++* MaxValue of NLMS1_preset_coefs
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS1_PRESET_COEFS_MAX (2)
++
++/**
++* @def LVNV_NLMS1_OFFSET_DEFAULT
++* Default of NLMS1_offset
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS1_OFFSET_DEFAULT (776)
++/**
++* @def LVNV_NLMS1_OFFSET_MIN
++* MinValue of NLMS1_offset
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS1_OFFSET_MIN (0)
++/**
++* @def LVNV_NLMS1_OFFSET_MAX
++* MaxValue of NLMS1_offset
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS1_OFFSET_MAX (32767)
++
++/**
++* @def LVNV_CAL_MICPOWFLOORMIN_DEFAULT
++* Default of CAL_micPowFloorMin
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_CAL_MICPOWFLOORMIN_DEFAULT (150)
++/**
++* @def LVNV_CAL_MICPOWFLOORMIN_MIN
++* MinValue of CAL_micPowFloorMin
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_CAL_MICPOWFLOORMIN_MIN (0)
++/**
++* @def LVNV_CAL_MICPOWFLOORMIN_MAX
++* MaxValue of CAL_micPowFloorMin
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_CAL_MICPOWFLOORMIN_MAX (32767)
++
++/**
++* @def LVNV_WGTHRESHOLD_DEFAULT
++* Default of WgThreshold
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_WGTHRESHOLD_DEFAULT (32767)
++/**
++* @def LVNV_WGTHRESHOLD_MIN
++* MinValue of WgThreshold
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_WGTHRESHOLD_MIN (0)
++/**
++* @def LVNV_WGTHRESHOLD_MAX
++* MaxValue of WgThreshold
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_WGTHRESHOLD_MAX (32767)
++
++/**
++* @def LVNV_MPTHRESHOLD_DEFAULT
++* Default of MpThreshold
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_MPTHRESHOLD_DEFAULT (6554)
++/**
++* @def LVNV_MPTHRESHOLD_MIN
++* MinValue of MpThreshold
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_MPTHRESHOLD_MIN (0)
++/**
++* @def LVNV_MPTHRESHOLD_MAX
++* MaxValue of MpThreshold
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_MPTHRESHOLD_MAX (32767)
++
++/**
++* @def LVNV_FSB_INIT_TABLE0_DEFAULT
++* Default of FSB_init_table0
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_FSB_INIT_TABLE0_DEFAULT {32767, 0, 0, 0, 0, 0, 0, 0}
++/**
++* @def LVNV_FSB_INIT_TABLE0_MIN
++* MinValue of FSB_init_table0
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_FSB_INIT_TABLE0_MIN (-32768)
++/**
++* @def LVNV_FSB_INIT_TABLE0_MAX
++* MaxValue of FSB_init_table0
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_FSB_INIT_TABLE0_MAX (32767)
++/**
++* @def LVNV_FSB_INIT_TABLE0_LENGTH
++* Length of FSB_init_table0
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_FSB_INIT_TABLE0_LENGTH (8)
++
++/**
++* @def LVNV_FSB_INIT_TABLE1_DEFAULT
++* Default of FSB_init_table1
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_FSB_INIT_TABLE1_DEFAULT {0, 0, 0, 0, 0, 0, 0, 0}
++/**
++* @def LVNV_FSB_INIT_TABLE1_MIN
++* MinValue of FSB_init_table1
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_FSB_INIT_TABLE1_MIN (-32768)
++/**
++* @def LVNV_FSB_INIT_TABLE1_MAX
++* MaxValue of FSB_init_table1
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_FSB_INIT_TABLE1_MAX (32767)
++/**
++* @def LVNV_FSB_INIT_TABLE1_LENGTH
++* Length of FSB_init_table1
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_FSB_INIT_TABLE1_LENGTH (8)
++
++/**
++* @def LVNV_FSB_TAPS_DEFAULT
++* Default of FSB_taps
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_FSB_TAPS_DEFAULT (16)
++/**
++* @def LVNV_FSB_TAPS_MIN
++* MinValue of FSB_taps
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_FSB_TAPS_MIN (8)
++/**
++* @def LVNV_FSB_TAPS_MAX
++* MaxValue of FSB_taps
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_FSB_TAPS_MAX (16)
++
++/**
++* @def LVNV_FSB_TWOALPHA_DEFAULT
++* Default of FSB_twoalpha
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_FSB_TWOALPHA_DEFAULT (655)
++/**
++* @def LVNV_FSB_TWOALPHA_MIN
++* MinValue of FSB_twoalpha
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_FSB_TWOALPHA_MIN (0)
++/**
++* @def LVNV_FSB_TWOALPHA_MAX
++* MaxValue of FSB_twoalpha
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_FSB_TWOALPHA_MAX (32767)
++
++/**
++* @def LVNV_FSB_REF_GAIN_DEFAULT
++* Default of FSB_ref_gain
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_FSB_REF_GAIN_DEFAULT (1024)
++/**
++* @def LVNV_FSB_REF_GAIN_MIN
++* MinValue of FSB_ref_gain
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_FSB_REF_GAIN_MIN (0)
++/**
++* @def LVNV_FSB_REF_GAIN_MAX
++* MaxValue of FSB_ref_gain
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_FSB_REF_GAIN_MAX (32767)
++
++/**
++* @def LVNV_GSC_TAPS_DEFAULT
++* Default of GSC_taps
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_GSC_TAPS_DEFAULT (16)
++/**
++* @def LVNV_GSC_TAPS_MIN
++* MinValue of GSC_taps
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_GSC_TAPS_MIN (8)
++/**
++* @def LVNV_GSC_TAPS_MAX
++* MaxValue of GSC_taps
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_GSC_TAPS_MAX (48)
++
++/**
++* @def LVNV_GSC_TWOALPHA_DEFAULT
++* Default of GSC_twoalpha
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_GSC_TWOALPHA_DEFAULT (1638)
++/**
++* @def LVNV_GSC_TWOALPHA_MIN
++* MinValue of GSC_twoalpha
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_GSC_TWOALPHA_MIN (0)
++/**
++* @def LVNV_GSC_TWOALPHA_MAX
++* MaxValue of GSC_twoalpha
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_GSC_TWOALPHA_MAX (32767)
++
++/**
++* @def LVNV_GSC_ERL_DEFAULT
++* Default of GSC_erl
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_GSC_ERL_DEFAULT (256)
++/**
++* @def LVNV_GSC_ERL_MIN
++* MinValue of GSC_erl
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_GSC_ERL_MIN (64)
++/**
++* @def LVNV_GSC_ERL_MAX
++* MaxValue of GSC_erl
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_GSC_ERL_MAX (32767)
++
++/**
++* @def LVNV_GSC_OFFSET_DEFAULT
++* Default of GSC_offset
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_GSC_OFFSET_DEFAULT (1638)
++/**
++* @def LVNV_GSC_OFFSET_MIN
++* MinValue of GSC_offset
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_GSC_OFFSET_MIN (0)
++/**
++* @def LVNV_GSC_OFFSET_MAX
++* MaxValue of GSC_offset
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_GSC_OFFSET_MAX (32767)
++
++/**
++* @def LVNV_DNNS_ECHOGAMMAHI_DEFAULT
++* Default of DNNS_EchoGammaHi
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_ECHOGAMMAHI_DEFAULT (16384)
++/**
++* @def LVNV_DNNS_ECHOGAMMAHI_MIN
++* MinValue of DNNS_EchoGammaHi
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_ECHOGAMMAHI_MIN (0)
++/**
++* @def LVNV_DNNS_ECHOGAMMAHI_MAX
++* MaxValue of DNNS_EchoGammaHi
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_ECHOGAMMAHI_MAX (32767)
++
++/**
++* @def LVNV_DNNS_ECHOGAMMALO_DEFAULT
++* Default of DNNS_EchoGammaLo
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_ECHOGAMMALO_DEFAULT (8192)
++/**
++* @def LVNV_DNNS_ECHOGAMMALO_MIN
++* MinValue of DNNS_EchoGammaLo
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_ECHOGAMMALO_MIN (0)
++/**
++* @def LVNV_DNNS_ECHOGAMMALO_MAX
++* MaxValue of DNNS_EchoGammaLo
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_ECHOGAMMALO_MAX (32767)
++
++/**
++* @def LVNV_DNNS_ECHOALPHAREV_DEFAULT
++* Default of DNNS_EchoAlphaRev
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_ECHOALPHAREV_DEFAULT (12000)
++/**
++* @def LVNV_DNNS_ECHOALPHAREV_MIN
++* MinValue of DNNS_EchoAlphaRev
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_ECHOALPHAREV_MIN (0)
++/**
++* @def LVNV_DNNS_ECHOALPHAREV_MAX
++* MaxValue of DNNS_EchoAlphaRev
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_ECHOALPHAREV_MAX (32767)
++
++/**
++* @def LVNV_DNNS_ECHOTAILPORTION_DEFAULT
++* Default of DNNS_EchoTailPortion
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_ECHOTAILPORTION_DEFAULT (7000)
++/**
++* @def LVNV_DNNS_ECHOTAILPORTION_MIN
++* MinValue of DNNS_EchoTailPortion
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_ECHOTAILPORTION_MIN (0)
++/**
++* @def LVNV_DNNS_ECHOTAILPORTION_MAX
++* MaxValue of DNNS_EchoTailPortion
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_ECHOTAILPORTION_MAX (32767)
++
++/**
++* @def LVNV_DNNS_NLATTEN_DEFAULT
++* Default of DNNS_NlAtten
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_NLATTEN_DEFAULT (256)
++/**
++* @def LVNV_DNNS_NLATTEN_MIN
++* MinValue of DNNS_NlAtten
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_NLATTEN_MIN (0)
++/**
++* @def LVNV_DNNS_NLATTEN_MAX
++* MaxValue of DNNS_NlAtten
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_NLATTEN_MAX (2048)
++
++/**
++* @def LVNV_DNNS_NOISEGAMMAS_DEFAULT
++* Default of DNNS_NoiseGammaS
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_NOISEGAMMAS_DEFAULT (11470)
++/**
++* @def LVNV_DNNS_NOISEGAMMAS_MIN
++* MinValue of DNNS_NoiseGammaS
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_NOISEGAMMAS_MIN (0)
++/**
++* @def LVNV_DNNS_NOISEGAMMAS_MAX
++* MaxValue of DNNS_NoiseGammaS
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_NOISEGAMMAS_MAX (32767)
++
++/**
++* @def LVNV_DNNS_NOISEGAMMAN_DEFAULT
++* Default of DNNS_NoiseGammaN
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_NOISEGAMMAN_DEFAULT (16384)
++/**
++* @def LVNV_DNNS_NOISEGAMMAN_MIN
++* MinValue of DNNS_NoiseGammaN
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_NOISEGAMMAN_MIN (0)
++/**
++* @def LVNV_DNNS_NOISEGAMMAN_MAX
++* MaxValue of DNNS_NoiseGammaN
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_NOISEGAMMAN_MAX (32767)
++
++/**
++* @def LVNV_DNNS_NOISEGAINMINS_DEFAULT
++* Default of DNNS_NoiseGainMinS
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_NOISEGAINMINS_DEFAULT (11140)
++/**
++* @def LVNV_DNNS_NOISEGAINMINS_MIN
++* MinValue of DNNS_NoiseGainMinS
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_NOISEGAINMINS_MIN (0)
++/**
++* @def LVNV_DNNS_NOISEGAINMINS_MAX
++* MaxValue of DNNS_NoiseGainMinS
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_NOISEGAINMINS_MAX (32767)
++
++/**
++* @def LVNV_DNNS_NOISEGAINMINN_DEFAULT
++* Default of DNNS_NoiseGainMinN
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_NOISEGAINMINN_DEFAULT (6554)
++/**
++* @def LVNV_DNNS_NOISEGAINMINN_MIN
++* MinValue of DNNS_NoiseGainMinN
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_NOISEGAINMINN_MIN (0)
++/**
++* @def LVNV_DNNS_NOISEGAINMINN_MAX
++* MaxValue of DNNS_NoiseGainMinN
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_NOISEGAINMINN_MAX (32767)
++
++/**
++* @def LVNV_DNNS_NOISEBIASCOMP_DEFAULT
++* Default of DNNS_NoiseBiasComp
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_NOISEBIASCOMP_DEFAULT (9830)
++/**
++* @def LVNV_DNNS_NOISEBIASCOMP_MIN
++* MinValue of DNNS_NoiseBiasComp
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_NOISEBIASCOMP_MIN (0)
++/**
++* @def LVNV_DNNS_NOISEBIASCOMP_MAX
++* MaxValue of DNNS_NoiseBiasComp
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_NOISEBIASCOMP_MAX (32767)
++
++/**
++* @def LVNV_DNNS_GAINETA_DEFAULT
++* Default of DNNS_GainEta
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_GAINETA_DEFAULT (256)
++/**
++* @def LVNV_DNNS_GAINETA_MIN
++* MinValue of DNNS_GainEta
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_GAINETA_MIN (0)
++/**
++* @def LVNV_DNNS_GAINETA_MAX
++* MaxValue of DNNS_GainEta
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_GAINETA_MAX (32767)
++
++/**
++* @def LVNV_DNNS_ACTHRESHOLD_DEFAULT
++* Default of DNNS_AcThreshold
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_ACTHRESHOLD_DEFAULT (12288)
++/**
++* @def LVNV_DNNS_ACTHRESHOLD_MIN
++* MinValue of DNNS_AcThreshold
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_ACTHRESHOLD_MIN (0)
++/**
++* @def LVNV_DNNS_ACTHRESHOLD_MAX
++* MaxValue of DNNS_AcThreshold
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_ACTHRESHOLD_MAX (32767)
++
++/**
++* @def LVNV_DNNS_WBTHRESHOLD_DEFAULT
++* Default of DNNS_WbThreshold
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_WBTHRESHOLD_DEFAULT (9216)
++/**
++* @def LVNV_DNNS_WBTHRESHOLD_MIN
++* MinValue of DNNS_WbThreshold
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_WBTHRESHOLD_MIN (0)
++/**
++* @def LVNV_DNNS_WBTHRESHOLD_MAX
++* MaxValue of DNNS_WbThreshold
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_WBTHRESHOLD_MAX (32767)
++
++/**
++* @def LVNV_DNNS_LOSTBEAMTHRESHOLD_DEFAULT
++* Default of DNNS_LostBeamThreshold
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_LOSTBEAMTHRESHOLD_DEFAULT (320)
++/**
++* @def LVNV_DNNS_LOSTBEAMTHRESHOLD_MIN
++* MinValue of DNNS_LostBeamThreshold
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_LOSTBEAMTHRESHOLD_MIN (0)
++/**
++* @def LVNV_DNNS_LOSTBEAMTHRESHOLD_MAX
++* MaxValue of DNNS_LostBeamThreshold
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_LOSTBEAMTHRESHOLD_MAX (32767)
++
++/**
++* @def LVNV_PCD_BETA_DEFAULT
++* Default of PCD_beta
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_PCD_BETA_DEFAULT (230)
++/**
++* @def LVNV_PCD_BETA_MIN
++* MinValue of PCD_beta
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_PCD_BETA_MIN (0)
++/**
++* @def LVNV_PCD_BETA_MAX
++* MaxValue of PCD_beta
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_PCD_BETA_MAX (32767)
++
++/**
++* @def LVNV_PCD_THRESHOLD_DEFAULT
++* Default of PCD_Threshold
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_PCD_THRESHOLD_DEFAULT (26213)
++/**
++* @def LVNV_PCD_THRESHOLD_MIN
++* MinValue of PCD_Threshold
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_PCD_THRESHOLD_MIN (0)
++/**
++* @def LVNV_PCD_THRESHOLD_MAX
++* MaxValue of PCD_Threshold
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_PCD_THRESHOLD_MAX (32767)
++
++/**
++* @def LVHF_OPERATINGMODE_DEFAULT
++* Default of OperatingMode
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_OPERATINGMODE_DEFAULT (LVM_MODE_OFF)
++
++/**
++* @def LVHF_MODE_DEFAULT
++* Default of Mode
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_MODE_DEFAULT (4607)
++
++/**
++* @def LVHF_TUNINGMODE_DEFAULT
++* Default of TuningMode
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_TUNINGMODE_DEFAULT (0)
++
++/**
++* @def LVHF_INPUTGAIN_DEFAULT
++* Default of InputGain
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_INPUTGAIN_DEFAULT (8192)
++/**
++* @def LVHF_INPUTGAIN_MIN
++* MinValue of InputGain
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_INPUTGAIN_MIN (0)
++/**
++* @def LVHF_INPUTGAIN_MAX
++* MaxValue of InputGain
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_INPUTGAIN_MAX (32767)
++
++/**
++* @def LVHF_OUTPUTGAIN_DEFAULT
++* Default of OutputGain
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_OUTPUTGAIN_DEFAULT (2048)
++/**
++* @def LVHF_OUTPUTGAIN_MIN
++* MinValue of OutputGain
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_OUTPUTGAIN_MIN (0)
++/**
++* @def LVHF_OUTPUTGAIN_MAX
++* MaxValue of OutputGain
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_OUTPUTGAIN_MAX (32767)
++
++/**
++* @def LVHF_NLMS_LIMIT_DEFAULT
++* Default of NLMS_limit
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_NLMS_LIMIT_DEFAULT (0)
++/**
++* @def LVHF_NLMS_LIMIT_MIN
++* MinValue of NLMS_limit
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_NLMS_LIMIT_MIN (-24)
++/**
++* @def LVHF_NLMS_LIMIT_MAX
++* MaxValue of NLMS_limit
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_NLMS_LIMIT_MAX (0)
++
++/**
++* @def LVHF_NLMS_LB_TAPS_DEFAULT
++* Default of NLMS_LB_taps
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_NLMS_LB_TAPS_DEFAULT (64)
++/**
++* @def LVHF_NLMS_LB_TAPS_MIN
++* MinValue of NLMS_LB_taps
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_NLMS_LB_TAPS_MIN (16)
++/**
++* @def LVHF_NLMS_LB_TAPS_MAX
++* MaxValue of NLMS_LB_taps
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_NLMS_LB_TAPS_MAX (200)
++
++/**
++* @def LVHF_NLMS_LB_TWO_ALPHA_DEFAULT
++* Default of NLMS_LB_two_alpha
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_NLMS_LB_TWO_ALPHA_DEFAULT (8192)
++/**
++* @def LVHF_NLMS_LB_TWO_ALPHA_MIN
++* MinValue of NLMS_LB_two_alpha
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_NLMS_LB_TWO_ALPHA_MIN (0)
++/**
++* @def LVHF_NLMS_LB_TWO_ALPHA_MAX
++* MaxValue of NLMS_LB_two_alpha
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_NLMS_LB_TWO_ALPHA_MAX (32767)
++
++/**
++* @def LVHF_NLMS_LB_ERL_DEFAULT
++* Default of NLMS_LB_erl
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_NLMS_LB_ERL_DEFAULT (128)
++/**
++* @def LVHF_NLMS_LB_ERL_MIN
++* MinValue of NLMS_LB_erl
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_NLMS_LB_ERL_MIN (64)
++/**
++* @def LVHF_NLMS_LB_ERL_MAX
++* MaxValue of NLMS_LB_erl
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_NLMS_LB_ERL_MAX (32767)
++
++/**
++* @def LVHF_NLMS_HB_TAPS_DEFAULT
++* Default of NLMS_HB_taps
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_NLMS_HB_TAPS_DEFAULT (64)
++/**
++* @def LVHF_NLMS_HB_TAPS_MIN
++* MinValue of NLMS_HB_taps
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_NLMS_HB_TAPS_MIN (16)
++/**
++* @def LVHF_NLMS_HB_TAPS_MAX
++* MaxValue of NLMS_HB_taps
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_NLMS_HB_TAPS_MAX (136)
++
++/**
++* @def LVHF_NLMS_HB_TWO_ALPHA_DEFAULT
++* Default of NLMS_HB_two_alpha
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_NLMS_HB_TWO_ALPHA_DEFAULT (8192)
++/**
++* @def LVHF_NLMS_HB_TWO_ALPHA_MIN
++* MinValue of NLMS_HB_two_alpha
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_NLMS_HB_TWO_ALPHA_MIN (0)
++/**
++* @def LVHF_NLMS_HB_TWO_ALPHA_MAX
++* MaxValue of NLMS_HB_two_alpha
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_NLMS_HB_TWO_ALPHA_MAX (32767)
++
++/**
++* @def LVHF_NLMS_HB_ERL_DEFAULT
++* Default of NLMS_HB_erl
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_NLMS_HB_ERL_DEFAULT (128)
++/**
++* @def LVHF_NLMS_HB_ERL_MIN
++* MinValue of NLMS_HB_erl
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_NLMS_HB_ERL_MIN (64)
++/**
++* @def LVHF_NLMS_HB_ERL_MAX
++* MaxValue of NLMS_HB_erl
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_NLMS_HB_ERL_MAX (32767)
++
++/**
++* @def LVHF_NLMS_PRESET_COEFS_DEFAULT
++* Default of NLMS_preset_coefs
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_NLMS_PRESET_COEFS_DEFAULT (1)
++/**
++* @def LVHF_NLMS_PRESET_COEFS_MIN
++* MinValue of NLMS_preset_coefs
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_NLMS_PRESET_COEFS_MIN (0)
++/**
++* @def LVHF_NLMS_PRESET_COEFS_MAX
++* MaxValue of NLMS_preset_coefs
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_NLMS_PRESET_COEFS_MAX (2)
++
++/**
++* @def LVHF_NLMS_OFFSET_DEFAULT
++* Default of NLMS_offset
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_NLMS_OFFSET_DEFAULT (767)
++/**
++* @def LVHF_NLMS_OFFSET_MIN
++* MinValue of NLMS_offset
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_NLMS_OFFSET_MIN (0)
++/**
++* @def LVHF_NLMS_OFFSET_MAX
++* MaxValue of NLMS_offset
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_NLMS_OFFSET_MAX (32767)
++
++/**
++* @def LVHF_DENS_TAIL_ALPHA_LB_DEFAULT
++* Default of DENS_tail_alpha_LB
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_TAIL_ALPHA_LB_DEFAULT (25395)
++/**
++* @def LVHF_DENS_TAIL_ALPHA_LB_MIN
++* MinValue of DENS_tail_alpha_LB
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_TAIL_ALPHA_LB_MIN (0)
++/**
++* @def LVHF_DENS_TAIL_ALPHA_LB_MAX
++* MaxValue of DENS_tail_alpha_LB
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_TAIL_ALPHA_LB_MAX (32767)
++
++/**
++* @def LVHF_DENS_TAIL_PORTION_LB_DEFAULT
++* Default of DENS_tail_portion_LB
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_TAIL_PORTION_LB_DEFAULT (29491)
++/**
++* @def LVHF_DENS_TAIL_PORTION_LB_MIN
++* MinValue of DENS_tail_portion_LB
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_TAIL_PORTION_LB_MIN (0)
++/**
++* @def LVHF_DENS_TAIL_PORTION_LB_MAX
++* MaxValue of DENS_tail_portion_LB
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_TAIL_PORTION_LB_MAX (32767)
++
++/**
++* @def LVHF_DENS_GAMMA_E_HIGH_LB_DEFAULT
++* Default of DENS_gamma_e_high_LB
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_GAMMA_E_HIGH_LB_DEFAULT (512)
++/**
++* @def LVHF_DENS_GAMMA_E_HIGH_LB_MIN
++* MinValue of DENS_gamma_e_high_LB
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_GAMMA_E_HIGH_LB_MIN (0)
++/**
++* @def LVHF_DENS_GAMMA_E_HIGH_LB_MAX
++* MaxValue of DENS_gamma_e_high_LB
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_GAMMA_E_HIGH_LB_MAX (32767)
++
++/**
++* @def LVHF_DENS_GAMMA_E_DT_LB_DEFAULT
++* Default of DENS_gamma_e_dt_LB
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_GAMMA_E_DT_LB_DEFAULT (256)
++/**
++* @def LVHF_DENS_GAMMA_E_DT_LB_MIN
++* MinValue of DENS_gamma_e_dt_LB
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_GAMMA_E_DT_LB_MIN (0)
++/**
++* @def LVHF_DENS_GAMMA_E_DT_LB_MAX
++* MaxValue of DENS_gamma_e_dt_LB
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_GAMMA_E_DT_LB_MAX (32767)
++
++/**
++* @def LVHF_DENS_GAMMA_E_LOW_LB_DEFAULT
++* Default of DENS_gamma_e_low_LB
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_GAMMA_E_LOW_LB_DEFAULT (256)
++/**
++* @def LVHF_DENS_GAMMA_E_LOW_LB_MIN
++* MinValue of DENS_gamma_e_low_LB
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_GAMMA_E_LOW_LB_MIN (0)
++/**
++* @def LVHF_DENS_GAMMA_E_LOW_LB_MAX
++* MaxValue of DENS_gamma_e_low_LB
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_GAMMA_E_LOW_LB_MAX (32767)
++
++/**
++* @def LVHF_DENS_NL_ATTEN_LB_DEFAULT
++* Default of DENS_NL_atten_LB
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_NL_ATTEN_LB_DEFAULT (0)
++/**
++* @def LVHF_DENS_NL_ATTEN_LB_MIN
++* MinValue of DENS_NL_atten_LB
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_NL_ATTEN_LB_MIN (0)
++/**
++* @def LVHF_DENS_NL_ATTEN_LB_MAX
++* MaxValue of DENS_NL_atten_LB
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_NL_ATTEN_LB_MAX (2048)
++
++/**
++* @def LVHF_DENS_TAIL_ALPHA_HB_DEFAULT
++* Default of DENS_tail_alpha_HB
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_TAIL_ALPHA_HB_DEFAULT (25395)
++/**
++* @def LVHF_DENS_TAIL_ALPHA_HB_MIN
++* MinValue of DENS_tail_alpha_HB
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_TAIL_ALPHA_HB_MIN (0)
++/**
++* @def LVHF_DENS_TAIL_ALPHA_HB_MAX
++* MaxValue of DENS_tail_alpha_HB
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_TAIL_ALPHA_HB_MAX (32767)
++
++/**
++* @def LVHF_DENS_TAIL_PORTION_HB_DEFAULT
++* Default of DENS_tail_portion_HB
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_TAIL_PORTION_HB_DEFAULT (29491)
++/**
++* @def LVHF_DENS_TAIL_PORTION_HB_MIN
++* MinValue of DENS_tail_portion_HB
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_TAIL_PORTION_HB_MIN (0)
++/**
++* @def LVHF_DENS_TAIL_PORTION_HB_MAX
++* MaxValue of DENS_tail_portion_HB
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_TAIL_PORTION_HB_MAX (32767)
++
++/**
++* @def LVHF_DENS_GAMMA_E_HIGH_HB_DEFAULT
++* Default of DENS_gamma_e_high_HB
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_GAMMA_E_HIGH_HB_DEFAULT (512)
++/**
++* @def LVHF_DENS_GAMMA_E_HIGH_HB_MIN
++* MinValue of DENS_gamma_e_high_HB
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_GAMMA_E_HIGH_HB_MIN (0)
++/**
++* @def LVHF_DENS_GAMMA_E_HIGH_HB_MAX
++* MaxValue of DENS_gamma_e_high_HB
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_GAMMA_E_HIGH_HB_MAX (32767)
++
++/**
++* @def LVHF_DENS_GAMMA_E_DT_HB_DEFAULT
++* Default of DENS_gamma_e_dt_HB
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_GAMMA_E_DT_HB_DEFAULT (256)
++/**
++* @def LVHF_DENS_GAMMA_E_DT_HB_MIN
++* MinValue of DENS_gamma_e_dt_HB
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_GAMMA_E_DT_HB_MIN (0)
++/**
++* @def LVHF_DENS_GAMMA_E_DT_HB_MAX
++* MaxValue of DENS_gamma_e_dt_HB
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_GAMMA_E_DT_HB_MAX (32767)
++
++/**
++* @def LVHF_DENS_GAMMA_E_LOW_HB_DEFAULT
++* Default of DENS_gamma_e_low_HB
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_GAMMA_E_LOW_HB_DEFAULT (256)
++/**
++* @def LVHF_DENS_GAMMA_E_LOW_HB_MIN
++* MinValue of DENS_gamma_e_low_HB
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_GAMMA_E_LOW_HB_MIN (0)
++/**
++* @def LVHF_DENS_GAMMA_E_LOW_HB_MAX
++* MaxValue of DENS_gamma_e_low_HB
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_GAMMA_E_LOW_HB_MAX (32767)
++
++/**
++* @def LVHF_DENS_NL_ATTEN_HB_DEFAULT
++* Default of DENS_NL_atten_HB
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_NL_ATTEN_HB_DEFAULT (0)
++/**
++* @def LVHF_DENS_NL_ATTEN_HB_MIN
++* MinValue of DENS_NL_atten_HB
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_NL_ATTEN_HB_MIN (0)
++/**
++* @def LVHF_DENS_NL_ATTEN_HB_MAX
++* MaxValue of DENS_NL_atten_HB
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_NL_ATTEN_HB_MAX (2048)
++
++/**
++* @def LVHF_DENS_GAMMA_E_ALPHA_DEFAULT
++* Default of DENS_gamma_e_alpha
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_GAMMA_E_ALPHA_DEFAULT (24000)
++/**
++* @def LVHF_DENS_GAMMA_E_ALPHA_MIN
++* MinValue of DENS_gamma_e_alpha
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_GAMMA_E_ALPHA_MIN (0)
++/**
++* @def LVHF_DENS_GAMMA_E_ALPHA_MAX
++* MaxValue of DENS_gamma_e_alpha
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_GAMMA_E_ALPHA_MAX (32767)
++
++/**
++* @def LVHF_DENS_GAMMA_N_DEFAULT
++* Default of DENS_gamma_n
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_GAMMA_N_DEFAULT (280)
++/**
++* @def LVHF_DENS_GAMMA_N_MIN
++* MinValue of DENS_gamma_n
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_GAMMA_N_MIN (0)
++/**
++* @def LVHF_DENS_GAMMA_N_MAX
++* MaxValue of DENS_gamma_n
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_GAMMA_N_MAX (32767)
++
++/**
++* @def LVHF_DENS_SPDET_NEAR_DEFAULT
++* Default of DENS_spdet_near
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_SPDET_NEAR_DEFAULT (512)
++/**
++* @def LVHF_DENS_SPDET_NEAR_MIN
++* MinValue of DENS_spdet_near
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_SPDET_NEAR_MIN (0)
++/**
++* @def LVHF_DENS_SPDET_NEAR_MAX
++* MaxValue of DENS_spdet_near
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_SPDET_NEAR_MAX (32767)
++
++/**
++* @def LVHF_DENS_SPDET_ACT_DEFAULT
++* Default of DENS_spdet_act
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_SPDET_ACT_DEFAULT (768)
++/**
++* @def LVHF_DENS_SPDET_ACT_MIN
++* MinValue of DENS_spdet_act
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_SPDET_ACT_MIN (0)
++/**
++* @def LVHF_DENS_SPDET_ACT_MAX
++* MaxValue of DENS_spdet_act
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_SPDET_ACT_MAX (32767)
++
++/**
++* @def LVHF_DENS_LIMIT_NS_DEFAULT
++* Default of DENS_limit_ns
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_LIMIT_NS_DEFAULT (10361)
++/**
++* @def LVHF_DENS_LIMIT_NS_MIN
++* MinValue of DENS_limit_ns
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_LIMIT_NS_MIN (0)
++/**
++* @def LVHF_DENS_LIMIT_NS_MAX
++* MaxValue of DENS_limit_ns
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_LIMIT_NS_MAX (32767)
++
++/**
++* @def LVHF_DENS_CNI_GAIN_DEFAULT
++* Default of DENS_CNI_Gain
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_CNI_GAIN_DEFAULT (16384)
++/**
++* @def LVHF_DENS_CNI_GAIN_MIN
++* MinValue of DENS_CNI_Gain
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_CNI_GAIN_MIN (0)
++/**
++* @def LVHF_DENS_CNI_GAIN_MAX
++* MaxValue of DENS_CNI_Gain
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_CNI_GAIN_MAX (32767)
++
++/**
++* @def LVHF_DENS_NFE_BLOCKSIZE_DEFAULT
++* Default of DENS_NFE_blocksize
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_NFE_BLOCKSIZE_DEFAULT (150)
++/**
++* @def LVHF_DENS_NFE_BLOCKSIZE_MIN
++* MinValue of DENS_NFE_blocksize
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_NFE_BLOCKSIZE_MIN (0)
++/**
++* @def LVHF_DENS_NFE_BLOCKSIZE_MAX
++* MaxValue of DENS_NFE_blocksize
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_NFE_BLOCKSIZE_MAX (32767)
++
++/**
++* @def LVHF_SPDET_FAR_DEFAULT
++* Default of SPDET_far
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_SPDET_FAR_DEFAULT (16384)
++/**
++* @def LVHF_SPDET_FAR_MIN
++* MinValue of SPDET_far
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_SPDET_FAR_MIN (0)
++/**
++* @def LVHF_SPDET_FAR_MAX
++* MaxValue of SPDET_far
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_SPDET_FAR_MAX (32767)
++
++/**
++* @def LVHF_SPDET_MIC_DEFAULT
++* Default of SPDET_mic
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_SPDET_MIC_DEFAULT (16384)
++/**
++* @def LVHF_SPDET_MIC_MIN
++* MinValue of SPDET_mic
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_SPDET_MIC_MIN (0)
++/**
++* @def LVHF_SPDET_MIC_MAX
++* MaxValue of SPDET_mic
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_SPDET_MIC_MAX (32767)
++
++/**
++* @def LVHF_SPDET_X_CLIP_DEFAULT
++* Default of SPDET_x_clip
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_SPDET_X_CLIP_DEFAULT (0)
++/**
++* @def LVHF_SPDET_X_CLIP_MIN
++* MinValue of SPDET_x_clip
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_SPDET_X_CLIP_MIN (0)
++/**
++* @def LVHF_SPDET_X_CLIP_MAX
++* MaxValue of SPDET_x_clip
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_SPDET_X_CLIP_MAX (32767)
++
++/**
++* @def LVHF_PCD_THRESHOLD_DEFAULT
++* Default of PCD_threshold
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_PCD_THRESHOLD_DEFAULT (20000)
++/**
++* @def LVHF_PCD_THRESHOLD_MIN
++* MinValue of PCD_threshold
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_PCD_THRESHOLD_MIN (0)
++/**
++* @def LVHF_PCD_THRESHOLD_MAX
++* MaxValue of PCD_threshold
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_PCD_THRESHOLD_MAX (32767)
++
++/**
++* @def LVHF_PCD_TAPS_DEFAULT
++* Default of PCD_taps
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_PCD_TAPS_DEFAULT (16)
++/**
++* @def LVHF_PCD_TAPS_MIN
++* MinValue of PCD_taps
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_PCD_TAPS_MIN (16)
++/**
++* @def LVHF_PCD_TAPS_MAX
++* MaxValue of PCD_taps
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_PCD_TAPS_MAX (64)
++
++/**
++* @def LVHF_PCD_ERL_DEFAULT
++* Default of PCD_erl
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_PCD_ERL_DEFAULT (64)
++/**
++* @def LVHF_PCD_ERL_MIN
++* MinValue of PCD_erl
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_PCD_ERL_MIN (64)
++/**
++* @def LVHF_PCD_ERL_MAX
++* MaxValue of PCD_erl
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_PCD_ERL_MAX (32767)
++
++/**
++* @def LVHF_PCD_MINIMUM_ERL_DEFAULT
++* Default of PCD_minimum_erl
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_PCD_MINIMUM_ERL_DEFAULT (64)
++/**
++* @def LVHF_PCD_MINIMUM_ERL_MIN
++* MinValue of PCD_minimum_erl
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_PCD_MINIMUM_ERL_MIN (64)
++/**
++* @def LVHF_PCD_MINIMUM_ERL_MAX
++* MaxValue of PCD_minimum_erl
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_PCD_MINIMUM_ERL_MAX (32767)
++
++/**
++* @def LVHF_PCD_ERL_STEP_DEFAULT
++* Default of PCD_erl_step
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_PCD_ERL_STEP_DEFAULT (16800)
++/**
++* @def LVHF_PCD_ERL_STEP_MIN
++* MinValue of PCD_erl_step
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_PCD_ERL_STEP_MIN (16384)
++/**
++* @def LVHF_PCD_ERL_STEP_MAX
++* MaxValue of PCD_erl_step
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_PCD_ERL_STEP_MAX (32767)
++
++/**
++* @def LVHF_PCD_GAMMA_E_RESCUE_DEFAULT
++* Default of PCD_gamma_e_rescue
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_PCD_GAMMA_E_RESCUE_DEFAULT (5000)
++/**
++* @def LVHF_PCD_GAMMA_E_RESCUE_MIN
++* MinValue of PCD_gamma_e_rescue
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_PCD_GAMMA_E_RESCUE_MIN (0)
++/**
++* @def LVHF_PCD_GAMMA_E_RESCUE_MAX
++* MaxValue of PCD_gamma_e_rescue
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_PCD_GAMMA_E_RESCUE_MAX (32767)
++
++/**
++* @def LVBD_BD_OPERATINGMODE_DEFAULT
++* Default of BD_OperatingMode
++* @see LVBD_ControlParams_st
++*/
++#define LVBD_BD_OPERATINGMODE_DEFAULT (LVM_MODE_OFF)
++
++/**
++* @def LVBD_BULKDELAY_DEFAULT
++* Default of BulkDelay
++* @see LVBD_ControlParams_st
++*/
++#define LVBD_BULKDELAY_DEFAULT (0)
++/**
++* @def LVBD_BULKDELAY_MIN
++* MinValue of BulkDelay
++* @see LVBD_ControlParams_st
++*/
++#define LVBD_BULKDELAY_MIN (0)
++/**
++* @def LVBD_BULKDELAY_MAX
++* MaxValue of BulkDelay
++* @see LVBD_ControlParams_st
++*/
++#define LVBD_BULKDELAY_MAX (6400)
++
++/**
++* @def LVBD_BD_GAIN_DEFAULT
++* Default of BD_Gain
++* @see LVBD_ControlParams_st
++*/
++#define LVBD_BD_GAIN_DEFAULT (8192)
++/**
++* @def LVBD_BD_GAIN_MIN
++* MinValue of BD_Gain
++* @see LVBD_ControlParams_st
++*/
++#define LVBD_BD_GAIN_MIN (0)
++/**
++* @def LVBD_BD_GAIN_MAX
++* MaxValue of BD_Gain
++* @see LVBD_ControlParams_st
++*/
++#define LVBD_BD_GAIN_MAX (32767)
++
++/**
++* @def LVVE_TX_OPERATINGMODE_DEFAULT
++* Default of OperatingMode
++* @see LVVE_Tx_ControlParams_st
++*/
++#define LVVE_TX_OPERATINGMODE_DEFAULT (LVVE_TX_MODE_OFF)
++
++/**
++* @def LVVE_TX_MUTE_DEFAULT
++* Default of Mute
++* @see LVVE_Tx_ControlParams_st
++*/
++#define LVVE_TX_MUTE_DEFAULT (LVM_MODE_OFF)
++
++/**
++* @def LVVE_TX_BD_OPERATINGMODE_DEFAULT
++* Default of BD_OperatingMode
++* @see LVVE_Tx_ControlParams_st
++*/
++#define LVVE_TX_BD_OPERATINGMODE_DEFAULT (LVM_MODE_OFF)
++
++/**
++* @def LVVE_TX_BULKDELAY_DEFAULT
++* Default of BulkDelay
++* @see LVVE_Tx_ControlParams_st
++*/
++#define LVVE_TX_BULKDELAY_DEFAULT (0)
++/**
++* @def LVVE_TX_BULKDELAY_MIN
++* MinValue of BulkDelay
++* @see LVVE_Tx_ControlParams_st
++*/
++#define LVVE_TX_BULKDELAY_MIN (0)
++/**
++* @def LVVE_TX_BULKDELAY_MAX
++* MaxValue of BulkDelay
++* @see LVVE_Tx_ControlParams_st
++*/
++#define LVVE_TX_BULKDELAY_MAX (6400)
++
++/**
++* @def LVVE_TX_BD_GAIN_DEFAULT
++* Default of BD_Gain
++* @see LVVE_Tx_ControlParams_st
++*/
++#define LVVE_TX_BD_GAIN_DEFAULT (8192)
++/**
++* @def LVVE_TX_BD_GAIN_MIN
++* MinValue of BD_Gain
++* @see LVVE_Tx_ControlParams_st
++*/
++#define LVVE_TX_BD_GAIN_MIN (0)
++/**
++* @def LVVE_TX_BD_GAIN_MAX
++* MaxValue of BD_Gain
++* @see LVVE_Tx_ControlParams_st
++*/
++#define LVVE_TX_BD_GAIN_MAX (32767)
++
++/**
++* @def LVVE_TX_VOL_OPERATINGMODE_DEFAULT
++* Default of VOL_OperatingMode
++* @see LVVE_Tx_ControlParams_st
++*/
++#define LVVE_TX_VOL_OPERATINGMODE_DEFAULT (LVM_MODE_OFF)
++
++/**
++* @def LVVE_TX_VOL_GAIN_DEFAULT
++* Default of VOL_Gain
++* @see LVVE_Tx_ControlParams_st
++*/
++#define LVVE_TX_VOL_GAIN_DEFAULT (0)
++/**
++* @def LVVE_TX_VOL_GAIN_MIN
++* MinValue of VOL_Gain
++* @see LVVE_Tx_ControlParams_st
++*/
++#define LVVE_TX_VOL_GAIN_MIN (-96)
++/**
++* @def LVVE_TX_VOL_GAIN_MAX
++* MaxValue of VOL_Gain
++* @see LVVE_Tx_ControlParams_st
++*/
++#define LVVE_TX_VOL_GAIN_MAX (24)
++
++/**
++* @def LVVE_TX_HPF_OPERATINGMODE_DEFAULT
++* Default of HPF_OperatingMode
++* @see LVVE_Tx_ControlParams_st
++*/
++#define LVVE_TX_HPF_OPERATINGMODE_DEFAULT (LVM_MODE_OFF)
++
++/**
++* @def LVVE_TX_MIC_HPF_CORNERFREQ_DEFAULT
++* Default of MIC_HPF_CornerFreq
++* @see LVVE_Tx_ControlParams_st
++*/
++#define LVVE_TX_MIC_HPF_CORNERFREQ_DEFAULT (50)
++/**
++* @def LVVE_TX_MIC_HPF_CORNERFREQ_MIN
++* MinValue of MIC_HPF_CornerFreq
++* @see LVVE_Tx_ControlParams_st
++*/
++#define LVVE_TX_MIC_HPF_CORNERFREQ_MIN (50)
++/**
++* @def LVVE_TX_MIC_HPF_CORNERFREQ_MAX
++* MaxValue of MIC_HPF_CornerFreq
++* @see LVVE_Tx_ControlParams_st
++*/
++#define LVVE_TX_MIC_HPF_CORNERFREQ_MAX (1500)
++
++
++
++
++/**
++* @def LVVE_TX_EQ_OPERATINGMODE_DEFAULT
++* Default of EQ_OperatingMode
++* @see LVVE_Tx_ControlParams_st
++*/
++#define LVVE_TX_EQ_OPERATINGMODE_DEFAULT (LVM_MODE_OFF)
++
++//adb by xuxinqiang 20150519
++#define LVVE_MAX_EQ_LENGTH_NB 32 /* Maximum equaliser length for narrowband configuration */
++#define LVVE_MAX_EQ_LENGTH_WB 64 /* Maximum equaliser length for wideband configuration */
++
++
++/**
++* @def LVVC_GAIN_DEFAULT
++* Default of Gain
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_GAIN_DEFAULT (0)
++/**
++* @def LVVC_GAIN_MIN
++* MinValue of Gain
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_GAIN_MIN (0)
++/**
++* @def LVVC_GAIN_MAX
++* MaxValue of Gain
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_GAIN_MAX (32767)
++
++/**
++* @def LVVC_SPDETECTED_DEFAULT
++* Default of SpDetected
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_SPDETECTED_DEFAULT (0)
++/**
++* @def LVVC_SPDETECTED_MIN
++* MinValue of SpDetected
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_SPDETECTED_MIN (0)
++/**
++* @def LVVC_SPDETECTED_MAX
++* MaxValue of SpDetected
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_SPDETECTED_MAX (1)
++
++/**
++* @def LVWM_AVL_GAIN_DEFAULT
++* Default of AVL_Gain
++* @see LVWM_ControlParams_st
++*/
++#define LVWM_AVL_GAIN_DEFAULT (0)
++/**
++* @def LVWM_AVL_GAIN_MIN
++* MinValue of AVL_Gain
++* @see LVWM_ControlParams_st
++*/
++#define LVWM_AVL_GAIN_MIN (0)
++/**
++* @def LVWM_AVL_GAIN_MAX
++* MaxValue of AVL_Gain
++* @see LVWM_ControlParams_st
++*/
++#define LVWM_AVL_GAIN_MAX (32767)
++
++
++
++/**
++* @def LVVE_RX_DUMMY_DEFAULT
++* Default of dummy
++* @see LVVE_Rx_ControlParams_st
++*/
++#define LVVE_RX_DUMMY_DEFAULT (0)
++/**
++* @def LVVE_RX_DUMMY_MIN
++* MinValue of dummy
++* @see LVVE_Rx_ControlParams_st
++*/
++#define LVVE_RX_DUMMY_MIN (-128)
++/**
++* @def LVVE_RX_DUMMY_MAX
++* MaxValue of dummy
++* @see LVVE_Rx_ControlParams_st
++*/
++#define LVVE_RX_DUMMY_MAX (127)
++
++/**
++* @def LVNV_STATUS_DEFAULT
++* Default of status
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_STATUS_DEFAULT (0)
++
++/**
++* @def LVNV_DUMMY_DEFAULT
++* Default of Dummy
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DUMMY_DEFAULT (0)
++/**
++* @def LVNV_DUMMY_MIN
++* MinValue of Dummy
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DUMMY_MIN (0)
++/**
++* @def LVNV_DUMMY_MAX
++* MaxValue of Dummy
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DUMMY_MAX (0)
++
++/**
++* @def LVNV_PNLMS0_LB_COEFFS_DEFAULT
++* Default of pNLMS0_LB_Coeffs
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_PNLMS0_LB_COEFFS_DEFAULT (0)
++/**
++* @def LVNV_PNLMS0_LB_COEFFS_MIN
++* MinValue of pNLMS0_LB_Coeffs
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_PNLMS0_LB_COEFFS_MIN (-2147483648)
++/**
++* @def LVNV_PNLMS0_LB_COEFFS_MAX
++* MaxValue of pNLMS0_LB_Coeffs
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_PNLMS0_LB_COEFFS_MAX (2147483647)
++
++/**
++* @def LVNV_PNLMS0_HB_COEFFS_DEFAULT
++* Default of pNLMS0_HB_Coeffs
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_PNLMS0_HB_COEFFS_DEFAULT (0)
++/**
++* @def LVNV_PNLMS0_HB_COEFFS_MIN
++* MinValue of pNLMS0_HB_Coeffs
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_PNLMS0_HB_COEFFS_MIN (-2147483648)
++/**
++* @def LVNV_PNLMS0_HB_COEFFS_MAX
++* MaxValue of pNLMS0_HB_Coeffs
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_PNLMS0_HB_COEFFS_MAX (2147483647)
++
++/**
++* @def LVNV_PNLMS1_LB_COEFFS_DEFAULT
++* Default of pNLMS1_LB_Coeffs
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_PNLMS1_LB_COEFFS_DEFAULT (0)
++/**
++* @def LVNV_PNLMS1_LB_COEFFS_MIN
++* MinValue of pNLMS1_LB_Coeffs
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_PNLMS1_LB_COEFFS_MIN (-2147483648)
++/**
++* @def LVNV_PNLMS1_LB_COEFFS_MAX
++* MaxValue of pNLMS1_LB_Coeffs
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_PNLMS1_LB_COEFFS_MAX (2147483647)
++
++/**
++* @def LVNV_PNLMS1_HB_COEFFS_DEFAULT
++* Default of pNLMS1_HB_Coeffs
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_PNLMS1_HB_COEFFS_DEFAULT (0)
++/**
++* @def LVNV_PNLMS1_HB_COEFFS_MIN
++* MinValue of pNLMS1_HB_Coeffs
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_PNLMS1_HB_COEFFS_MIN (-2147483648)
++/**
++* @def LVNV_PNLMS1_HB_COEFFS_MAX
++* MaxValue of pNLMS1_HB_Coeffs
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_PNLMS1_HB_COEFFS_MAX (2147483647)
++
++/**
++* @def LVNV_PFSB_COEFFS_DEFAULT
++* Default of pFSB_Coeffs
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_PFSB_COEFFS_DEFAULT (0)
++/**
++* @def LVNV_PFSB_COEFFS_MIN
++* MinValue of pFSB_Coeffs
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_PFSB_COEFFS_MIN (-2147483648)
++/**
++* @def LVNV_PFSB_COEFFS_MAX
++* MaxValue of pFSB_Coeffs
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_PFSB_COEFFS_MAX (2147483647)
++
++/**
++* @def LVNV_PGSC_COEFFS_DEFAULT
++* Default of pGSC_Coeffs
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_PGSC_COEFFS_DEFAULT (0)
++/**
++* @def LVNV_PGSC_COEFFS_MIN
++* MinValue of pGSC_Coeffs
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_PGSC_COEFFS_MIN (-2147483648)
++/**
++* @def LVNV_PGSC_COEFFS_MAX
++* MaxValue of pGSC_Coeffs
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_PGSC_COEFFS_MAX (2147483647)
++
++/**
++* @def LVNV_PMICPOWSP_DEFAULT
++* Default of pMicPowSp
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_PMICPOWSP_DEFAULT (0)
++/**
++* @def LVNV_PMICPOWSP_MIN
++* MinValue of pMicPowSp
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_PMICPOWSP_MIN (0)
++/**
++* @def LVNV_PMICPOWSP_MAX
++* MaxValue of pMicPowSp
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_PMICPOWSP_MAX (1)
++
++/**
++* @def LVNV_PCALFACTOR_DEFAULT
++* Default of pCalFactor
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_PCALFACTOR_DEFAULT (0)
++/**
++* @def LVNV_PCALFACTOR_MIN
++* MinValue of pCalFactor
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_PCALFACTOR_MIN (0)
++/**
++* @def LVNV_PCALFACTOR_MAX
++* MaxValue of pCalFactor
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_PCALFACTOR_MAX (32767)
++
++/**
++* @def LVNV_PCALREADY_DEFAULT
++* Default of pCalReady
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_PCALREADY_DEFAULT (0)
++/**
++* @def LVNV_PCALREADY_MIN
++* MinValue of pCalReady
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_PCALREADY_MIN (0)
++/**
++* @def LVNV_PCALREADY_MAX
++* MaxValue of pCalReady
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_PCALREADY_MAX (2)
++
++/**
++* @def LVNV_PBROADSIDE_INTERCC_DEFAULT
++* Default of pBroadside_interCC
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_PBROADSIDE_INTERCC_DEFAULT (0)
++/**
++* @def LVNV_PBROADSIDE_INTERCC_MIN
++* MinValue of pBroadside_interCC
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_PBROADSIDE_INTERCC_MIN (0)
++/**
++* @def LVNV_PBROADSIDE_INTERCC_MAX
++* MaxValue of pBroadside_interCC
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_PBROADSIDE_INTERCC_MAX (32767)
++
++/**
++* @def LVHF_GAMMAE_DEFAULT
++* Default of gammae
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_GAMMAE_DEFAULT (0)
++/**
++* @def LVHF_GAMMAE_MIN
++* MinValue of gammae
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_GAMMAE_MIN (0)
++/**
++* @def LVHF_GAMMAE_MAX
++* MaxValue of gammae
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_GAMMAE_MAX (32767)
++
++/**
++* @def LVHF_STATUS_DEFAULT
++* Default of status
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_STATUS_DEFAULT (0)
++
++/**
++* @def LVHF_PNLMS_LB_COEFS_DEFAULT
++* Default of pNLMS_LB_Coefs
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_PNLMS_LB_COEFS_DEFAULT (0)
++/**
++* @def LVHF_PNLMS_LB_COEFS_MIN
++* MinValue of pNLMS_LB_Coefs
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_PNLMS_LB_COEFS_MIN (-2147483648)
++/**
++* @def LVHF_PNLMS_LB_COEFS_MAX
++* MaxValue of pNLMS_LB_Coefs
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_PNLMS_LB_COEFS_MAX (2147483647)
++
++/**
++* @def LVHF_PNLMS_HB_COEFS_DEFAULT
++* Default of pNLMS_HB_Coefs
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_PNLMS_HB_COEFS_DEFAULT (0)
++/**
++* @def LVHF_PNLMS_HB_COEFS_MIN
++* MinValue of pNLMS_HB_Coefs
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_PNLMS_HB_COEFS_MIN (-2147483648)
++/**
++* @def LVHF_PNLMS_HB_COEFS_MAX
++* MaxValue of pNLMS_HB_Coefs
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_PNLMS_HB_COEFS_MAX (2147483647)
++
++/**
++* @def LVHF_PPCD_COEFS_DEFAULT
++* Default of pPCD_Coefs
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_PPCD_COEFS_DEFAULT (0)
++/**
++* @def LVHF_PPCD_COEFS_MIN
++* MinValue of pPCD_Coefs
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_PPCD_COEFS_MIN (-2147483648)
++/**
++* @def LVHF_PPCD_COEFS_MAX
++* MaxValue of pPCD_Coefs
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_PPCD_COEFS_MAX (2147483647)
++
++
++
++
++/**
++* @def LVVE_TX_DUMMY_DEFAULT
++* Default of dummy
++* @see LVVE_Tx_ControlParams_st
++*/
++#define LVVE_TX_DUMMY_DEFAULT (0)
++/**
++* @def LVVE_TX_DUMMY_MIN
++* MinValue of dummy
++* @see LVVE_Tx_ControlParams_st
++*/
++#define LVVE_TX_DUMMY_MIN (-128)
++/**
++* @def LVVE_TX_DUMMY_MAX
++* MaxValue of dummy
++* @see LVVE_Tx_ControlParams_st
++*/
++#define LVVE_TX_DUMMY_MAX (127)
++
++/**
++* Enum type for LVVIDHeader_MessageID_en
++*/
++typedef enum
++{
++ LVVE_RX_PRESET = 0, ///< VID header Message ID for LVVE_Rx presets
++ LVVE_TX_PRESET = 1, ///< VID header Message ID for LVVE_Tx Presets
++ LVVIDHEADER_MESSAGEID_EN_DUMMY = LVM_MAXENUM
++} LVVIDHeader_MessageID_en;
++
++/**
++* Enum type for LVVIDHeader_ReturnStatus_en
++*/
++typedef enum
++{
++ LVVIDHEADER_NULLADDRESS = 0, ///< LVVIDHeader module returns NULL address error
++ LVVIDHEADER_SUCCESS = 1, ///< LVVIDHeader module returns with success
++ LVVIDHEADER_RETURNSTATUS_EN_DUMMY = LVM_MAXENUM
++} LVVIDHeader_ReturnStatus_en;
++
++/**
++* Enum type for LVVE_Rx_Mode_en
++*/
++typedef enum
++{
++ LVVE_RX_MODE_OFF = 0, ///< Rx voice engine is turned off
++ LVVE_RX_MODE_ON = 1, ///< Rx voice in will run
++ LVVE_RX_MODE_BYPASS = 2, ///< Rx voice engine will run but output will be ignored
++ LVVE_RX_MODE_EN_DUMMY = LVM_MAXENUM
++} LVVE_Rx_Mode_en;
++
++/**
++* Enum type for LVVE_Tx_Mode_en
++*/
++typedef enum
++{
++ LVVE_TX_MODE_OFF = 0, ///< Tx in LVVE engine is disabled
++ LVVE_TX_MODE_ON = 1, ///< TX in LVVE is enabled
++ LVVE_TX_MODE_BYPASS_MIC0 = 2, ///< TX in LVVE engine will run but output will be Mic0 signal
++ LVVE_TX_MODE_BYPASS_MIC1 = 3, ///< Tx in LVVE engine will run but output will be Mic1 signal
++ LVVE_TX_MODE_BYPASS_REF = 4, ///< Tx in LVVE engine will run but output will be Ref signal
++ LVVE_TX_MODE_EN_DUMMY = LVM_MAXENUM
++} LVVE_Tx_Mode_en;
++
++/****************************************************************************************/
++/* */
++/* Structures */
++/* */
++/****************************************************************************************/
++/**
++* The status parameters are used to retrieve the status of the module.
++* @see LVVC_GetStatusParameters
++*/
++typedef struct
++{
++ /**
++ The internal gain setting used by VoiceClarity.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>6.9</td>
++ <td>@ref LVVC_GAIN_MIN (0)</td>
++ <td>@ref LVVC_GAIN_DEFAULT (0)</td>
++ <td>@ref LVVC_GAIN_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 Gain; ///< Gain
++
++ /**
++ 0 (no detection) or 1 (detection).
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>15.0</td>
++ <td>@ref LVVC_SPDETECTED_MIN (0)</td>
++ <td>@ref LVVC_SPDETECTED_DEFAULT (0)</td>
++ <td>@ref LVVC_SPDETECTED_MAX (1)</td>
++ </tr>
++ </table> */
++ LVM_INT16 SpDetected; ///< The speech detector flag.
++
++} LVVC_StatusParams_st;
++
++/**
++* The status parameters are used to retrieve the status of the module.
++* @see LVWM_GetStatusParameters
++*/
++typedef struct
++{
++ /**
++ The internal gain setting used by WhisperMode in dB.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>6.9</td>
++ <td>@ref LVWM_AVL_GAIN_MIN (0)</td>
++ <td>@ref LVWM_AVL_GAIN_DEFAULT (0)</td>
++ <td>@ref LVWM_AVL_GAIN_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 AVL_Gain; ///< gain (dB)
++
++} LVWM_StatusParams_st;
++
++/**
++* The status parameters are used to retrieve the status of the module.
++* @see LVVE_Rx_GetStatusParameters
++*/
++typedef struct
++{
++ /**
++ Voice Clarity Status Parameter Structure.
++ */
++ LVVC_StatusParams_st VC_StatusParams; ///< Voice Clarity Status Parameter Structure
++
++ /**
++ Whisper Mode Status Parameter Structure.
++ */
++ LVWM_StatusParams_st WM_StatusParams; ///< Whisper Mode Status Parameter Structure
++
++ /**
++ Dummy Param.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>1.7</td>
++ <td>@ref LVVE_RX_DUMMY_MIN (-128)</td>
++ <td>@ref LVVE_RX_DUMMY_DEFAULT (0)</td>
++ <td>@ref LVVE_RX_DUMMY_MAX (127)</td>
++ </tr>
++ </table> */
++ LVM_INT8 dummy; ///< Dummy Param
++
++} LVVE_Rx_StatusParams_st;
++
++/**
++* The status parameters are used to retrieve the status of the module.
++* @see LVNV_GetStatusParameters
++*/
++typedef struct
++{
++ /**
++ Bit mask describing the current state of LVNV, used for debugging.
++ */
++ LVNV_StatusWord_bm status; ///< current state
++
++ /**
++ To keep correct memory alignment. To be removed when LVNV_StatusWord_bm has
++ become int32 as it should.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVNV_DUMMY_MIN (0)</td>
++ <td>@ref LVNV_DUMMY_DEFAULT (0)</td>
++ <td>@ref LVNV_DUMMY_MAX (0)</td>
++ </tr>
++ </table> */
++ LVM_INT16 Dummy; ///< Dummy for memory alignment.
++
++ /**
++ Pointer to the coefficients of the primary low-band (0-4kHz) NLMS filter
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>1.30</td>
++ <td>@ref LVNV_PNLMS0_LB_COEFFS_MIN (-2147483648)</td>
++ <td>@ref LVNV_PNLMS0_LB_COEFFS_DEFAULT (0)</td>
++ <td>@ref LVNV_PNLMS0_LB_COEFFS_MAX (2147483647)</td>
++ </tr>
++ </table> */
++ LVM_INT32* pNLMS0_LB_Coeffs; ///< NLMS0 lowband filter coefficients
++
++ /**
++ Pointer to the coefficients of the primary high-band (4-8kHz) NLMS filter
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>1.30</td>
++ <td>@ref LVNV_PNLMS0_HB_COEFFS_MIN (-2147483648)</td>
++ <td>@ref LVNV_PNLMS0_HB_COEFFS_DEFAULT (0)</td>
++ <td>@ref LVNV_PNLMS0_HB_COEFFS_MAX (2147483647)</td>
++ </tr>
++ </table> */
++ LVM_INT32* pNLMS0_HB_Coeffs; ///< NLMS0 highband filter coefficients
++
++ /**
++ Pointer to the coefficients of the secondary low-band (0-4kHz) NLMS filter
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>1.30</td>
++ <td>@ref LVNV_PNLMS1_LB_COEFFS_MIN (-2147483648)</td>
++ <td>@ref LVNV_PNLMS1_LB_COEFFS_DEFAULT (0)</td>
++ <td>@ref LVNV_PNLMS1_LB_COEFFS_MAX (2147483647)</td>
++ </tr>
++ </table> */
++ LVM_INT32* pNLMS1_LB_Coeffs; ///< NLMS1 lowband filter coefficients
++
++ /**
++ Pointer to the coefficients of the secondary high-band (4-8kHz) NLMS filter
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>1.30</td>
++ <td>@ref LVNV_PNLMS1_HB_COEFFS_MIN (-2147483648)</td>
++ <td>@ref LVNV_PNLMS1_HB_COEFFS_DEFAULT (0)</td>
++ <td>@ref LVNV_PNLMS1_HB_COEFFS_MAX (2147483647)</td>
++ </tr>
++ </table> */
++ LVM_INT32* pNLMS1_HB_Coeffs; ///< NLMS1 highband filter coefficients
++
++ /**
++ Pointer to the coefficients of the FSB0 and FSB1 filters
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>16.15</td>
++ <td>@ref LVNV_PFSB_COEFFS_MIN (-2147483648)</td>
++ <td>@ref LVNV_PFSB_COEFFS_DEFAULT (0)</td>
++ <td>@ref LVNV_PFSB_COEFFS_MAX (2147483647)</td>
++ </tr>
++ </table> */
++ LVM_INT32* pFSB_Coeffs; ///< FSB0 and FSB1 coefficients
++
++ /**
++ Pointer to the coefficients of the GSC filter
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>1.30</td>
++ <td>@ref LVNV_PGSC_COEFFS_MIN (-2147483648)</td>
++ <td>@ref LVNV_PGSC_COEFFS_DEFAULT (0)</td>
++ <td>@ref LVNV_PGSC_COEFFS_MAX (2147483647)</td>
++ </tr>
++ </table> */
++ LVM_INT32* pGSC_Coeffs; ///< GSC coefficients
++
++ /**
++ Pointer to the MicPowSp detection flag
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>15.0</td>
++ <td>@ref LVNV_PMICPOWSP_MIN (0)</td>
++ <td>@ref LVNV_PMICPOWSP_DEFAULT (0)</td>
++ <td>@ref LVNV_PMICPOWSP_MAX (1)</td>
++ </tr>
++ </table> */
++ LVM_INT16* pMicPowSp; ///< MicPow Speech detection flag
++
++ /**
++ Pointer to the variable of Calibration factor
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>2.13</td>
++ <td>@ref LVNV_PCALFACTOR_MIN (0)</td>
++ <td>@ref LVNV_PCALFACTOR_DEFAULT (0)</td>
++ <td>@ref LVNV_PCALFACTOR_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16* pCalFactor; ///< Calibration factor value
++
++ /**
++ Pointer to the variable of Calibration ready
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>15.0</td>
++ <td>@ref LVNV_PCALREADY_MIN (0)</td>
++ <td>@ref LVNV_PCALREADY_DEFAULT (0)</td>
++ <td>@ref LVNV_PCALREADY_MAX (2)</td>
++ </tr>
++ </table> */
++ LVM_INT16* pCalReady; ///< Calibration ready value
++
++ /**
++ Pointer to the inter-channel correlation value used in broadside detection.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVNV_PBROADSIDE_INTERCC_MIN (0)</td>
++ <td>@ref LVNV_PBROADSIDE_INTERCC_DEFAULT (0)</td>
++ <td>@ref LVNV_PBROADSIDE_INTERCC_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16* pBroadside_interCC; ///< Broadside correlation
++
++} LVNV_StatusParams_st;
++
++/**
++* The status parameters are used to retrieve the status of the module.
++* @see LVHF_GetStatusParameters
++*/
++typedef struct
++{
++ /**
++ Current value of the echo subtraction factor.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>5.10</td>
++ <td>@ref LVHF_GAMMAE_MIN (0)</td>
++ <td>@ref LVHF_GAMMAE_DEFAULT (0)</td>
++ <td>@ref LVHF_GAMMAE_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 gammae; ///< multiplicator factor of echo suppression
++
++ /**
++ Bit mask describing the current state of LVHF, used for debugging.
++ */
++ LVHF_StatusWord_bm status; ///< current state
++
++ /**
++ Pointer to the coefficients of the LB NLMS.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>1.30</td>
++ <td>@ref LVHF_PNLMS_LB_COEFS_MIN (-2147483648)</td>
++ <td>@ref LVHF_PNLMS_LB_COEFS_DEFAULT (0)</td>
++ <td>@ref LVHF_PNLMS_LB_COEFS_MAX (2147483647)</td>
++ </tr>
++ </table> */
++ LVM_INT32* pNLMS_LB_Coefs; ///< NLMS lowband filter coefficients
++
++ /**
++ Pointer to the coefficients of the HB NLMS.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>1.30</td>
++ <td>@ref LVHF_PNLMS_HB_COEFS_MIN (-2147483648)</td>
++ <td>@ref LVHF_PNLMS_HB_COEFS_DEFAULT (0)</td>
++ <td>@ref LVHF_PNLMS_HB_COEFS_MAX (2147483647)</td>
++ </tr>
++ </table> */
++ LVM_INT32* pNLMS_HB_Coefs; ///< NLMS highband filter coefficients
++
++ /**
++ Pointer to the coefficients of the PCD NLMS.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>1.30</td>
++ <td>@ref LVHF_PPCD_COEFS_MIN (-2147483648)</td>
++ <td>@ref LVHF_PPCD_COEFS_DEFAULT (0)</td>
++ <td>@ref LVHF_PPCD_COEFS_MAX (2147483647)</td>
++ </tr>
++ </table> */
++ LVM_INT32* pPCD_Coefs; ///< PCD NLMS filter coefficients
++
++} LVHF_StatusParams_st;
++
++/**
++* The status parameters are used to retrieve the status of the module.
++* @see LVVE_Tx_GetStatusParameters
++*/
++typedef struct
++{
++ /**
++ HandsFree Status Parameter Structure.
++ */
++ LVHF_StatusParams_st HF_StatusParams; ///< HandsFree Status Parameters Structure
++
++ /**
++ NoiseVoid Status Parameter Structure.
++ */
++ LVNV_StatusParams_st NV_StatusParams; ///< NoiseVoid Status Parameters Structrue
++
++ /**
++ WhisperMode Status Parameter Structure.
++ */
++ LVWM_StatusParams_st WM_StatusParams; ///< WhisperMode Status Parameter Structrue
++
++ /**
++ Dummy Param.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>1.7</td>
++ <td>@ref LVVE_TX_DUMMY_MIN (-128)</td>
++ <td>@ref LVVE_TX_DUMMY_DEFAULT (0)</td>
++ <td>@ref LVVE_TX_DUMMY_MAX (127)</td>
++ </tr>
++ </table> */
++ LVM_INT8 dummy; ///< Dummy Param
++
++} LVVE_Tx_StatusParams_st;
++
++/**
++* The control parameters are used to control the overall module behavior. These parameters may
++* be changed at any time during processing using the LVVIDHeader_SetControlParameters function but they
++* will not take effect until the next call to the LVVIDHeader_Process function.
++*
++* @see LVVIDHeader_SetControlParameters
++* @see LVVIDHeader_Process
++*/
++typedef struct
++{
++ /**
++ This number always increments by one when there is change in the header format.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>8.0</td>
++ <td>@ref LVVIDHEADER_HEADERVERSION_MIN (0)</td>
++ <td>@ref LVVIDHEADER_HEADERVERSION_DEFAULT (3)</td>
++ <td>@ref LVVIDHEADER_HEADERVERSION_MAX (255)</td>
++ </tr>
++ </table> */
++ LVM_UINT8 HeaderVersion; ///< Header Format Version
++
++ /**
++ Initially This variable holds value of the baseline version. The value is in
++ format of xxyyzzpp where xx is major number of the library, yy is minor number,
++ zz is second minor number and pp is patch number of the baseline.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>32.0</td>
++ <td>@ref LVVIDHEADER_BASELINEVERSION_MIN (1)</td>
++ <td>@ref LVVIDHEADER_BASELINEVERSION_DEFAULT (51906816)</td>
++ <td>@ref LVVIDHEADER_BASELINEVERSION_MAX (4294967295)</td>
++ </tr>
++ </table> */
++ LVM_UINT32 BaselineVersion; ///< This is LVVE tagged version name
++
++ /**
++ First LVVE_Rx algorithm mask which holds information of which LVVE_Rx
++ algorithms are present.
++ */
++ LVVIDHeader_LVVE_Rx_Mask1_bm LVVE_Rx_AlgoMask1; ///< This variable forms first part of LVVE_Rx algorithm mask
++
++ /**
++ Second LVVE_Rx algorithm mask which holds information of which LVVE_Rx
++ algorithms are present.
++ */
++ LVVIDHeader_LVVE_Rx_Mask2_bm LVVE_Rx_AlgoMask2; ///< This variable forms second part of LVVE_Rx algorithm mask
++
++ /**
++ First LVVE_Tx algorithm mask which holds information of which LVVE_Tx
++ algorithms are present.
++ */
++ LVVIDHeader_LVVE_Tx_Mask1_bm LVVE_Tx_AlgoMask1; ///< This variable forms first part of LVVE_Tx mask
++
++ /**
++ Second LVVE_Tx algorithm mask which holds information of which LVVE_Tx
++ algorithms are present.
++ */
++ LVVIDHeader_LVVE_Tx_Mask2_bm LVVE_Tx_AlgoMask2; ///< This variable forms second part of LVVE_Tx mask
++
++ /**
++ First LVVE configuration mask which holds information of which configurations
++ of LVVE_Tx and LVVE_Rx algorithm are present.
++ */
++ LVVIDHeader_Configurations_Mask1_bm LVVE_Config_AlgoMask1; ///< This variable forms first part of common LVVE_Tx and LVVE_Rx configuration mask
++
++ /**
++ Second LVVE configuration mask which holds information of which configurations
++ of LVVE_Tx and LVVE_Rx algorithm are present.
++ */
++ LVVIDHeader_Configurations_Mask2_bm LVVE_Config_AlgoMask2; ///< This variable forms second part of common LVVE_Tx and LVVE_Rx configuration mask
++
++ /**
++ Messge ID is used to identify stream
++ */
++ LVVIDHeader_MessageID_en MessageID; ///< This param holds message ID of the buffer
++
++ /**
++ This parameter specifies the sample rate information of the buffer.
++ */
++ LVM_Fs_en SampleRate; ///< Sample rate information of the buffer.
++
++ /**
++ This parameter specifies the volume index corresponding to the subsequent data.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>8.0</td>
++ <td>@ref LVVIDHEADER_VOLUMEINDEX_MIN (0)</td>
++ <td>@ref LVVIDHEADER_VOLUMEINDEX_DEFAULT (0)</td>
++ <td>@ref LVVIDHEADER_VOLUMEINDEX_MAX (255)</td>
++ </tr>
++ </table> */
++ LVM_UINT8 VolumeIndex; ///< Volume index corresponding to the subsequent data.
++
++ /**
++ This parameter specifies how many volumes are present in the binary file.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>8.0</td>
++ <td>@ref LVVIDHEADER_NUMVOLUMES_MIN (0)</td>
++ <td>@ref LVVIDHEADER_NUMVOLUMES_DEFAULT (1)</td>
++ <td>@ref LVVIDHEADER_NUMVOLUMES_MAX (255)</td>
++ </tr>
++ </table> */
++ LVM_UINT8 NumVolumes; ///< Number of volumes present in the binary file.
++
++} LVVIDHeader_ControlParams_st;
++
++/**
++* The control parameters are used to control the overall module behavior. These parameters may
++* be changed at any time during processing using the LVVC_SetControlParameters function but they
++* will not take effect until the next call to the LVVC_Process function.
++*
++* @see LVVC_SetControlParameters
++* @see LVVC_Process
++*/
++typedef struct
++{
++ /**
++ Control the operating mode (ON/OFF) of the algorithm.
++ */
++ LVM_Mode_en OperatingMode; ///< Operating mode
++
++ /**
++ The mode word to enable/disable internal algorithm blocks of VoiceClarity.
++ */
++ LVVC_ModeWord_bm mode; ///< Mode word
++
++ /**
++ Maximum Gain applied to the signal.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>6.9</td>
++ <td>@ref LVVC_GAIN_LIN_MAX_MIN (512)</td>
++ <td>@ref LVVC_GAIN_LIN_MAX_DEFAULT (1286)</td>
++ <td>@ref LVVC_GAIN_LIN_MAX_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 Gain_Lin_Max; ///< Maximum Gain.
++
++ /**
++ The Noise_Sensitivity parameter sets how sensitive VoiceClarity will be to the
++ background noise level. The Noise_Sensitivity parameter allows adjusting the
++ sensitivity of those processing blocks to the nearend noise level. For high
++ values of the Noise_Sensitivity the effect of the mentioned processing blocks
++ will be big, even at low to moderate nearend noise levels. For low values of
++ the Noise_Sensitivity the effect of the processing blocks will be smaller, even
++ for high nearend noise levels.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVVC_NOISE_SENSITIVITY_MIN (-6709)</td>
++ <td>@ref LVVC_NOISE_SENSITIVITY_DEFAULT (20000)</td>
++ <td>@ref LVVC_NOISE_SENSITIVITY_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 Noise_Sensitivity; ///< Noise Sensitivity.
++
++ /**
++ The desired output level of the AGC. <br>
++ AVL_Target_level_lin = \f$32767*10^{Target_Level_dB/20}\f$
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVVC_AVL_TARGET_LEVEL_LIN_MIN (0)</td>
++ <td>@ref LVVC_AVL_TARGET_LEVEL_LIN_DEFAULT (16384)</td>
++ <td>@ref LVVC_AVL_TARGET_LEVEL_LIN_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 AVL_Target_level_lin; ///< The desired output level of the AGC.
++
++ /**
++ The maximal attenuation of the AGC. <br>
++ AVL_MinGainLin = \f$512*10^{MinGain_dB/20}\f$
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>6.9</td>
++ <td>@ref LVVC_AVL_MINGAINLIN_MIN (0)</td>
++ <td>@ref LVVC_AVL_MINGAINLIN_DEFAULT (256)</td>
++ <td>@ref LVVC_AVL_MINGAINLIN_MAX (512)</td>
++ </tr>
++ </table> */
++ LVM_INT16 AVL_MinGainLin; ///< The maximal attenuation of the AGC.
++
++ /**
++ The maximal gain of the AGC. <br>
++ AVL_MaxGainLin = \f$512*10^{MaxGain_dB/20}\f$
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>6.9</td>
++ <td>@ref LVVC_AVL_MAXGAINLIN_MIN (512)</td>
++ <td>@ref LVVC_AVL_MAXGAINLIN_DEFAULT (8192)</td>
++ <td>@ref LVVC_AVL_MAXGAINLIN_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 AVL_MaxGainLin; ///< The maximal gain of the AGC.
++
++ /**
++ The nominal gain of the AGC.<br>
++ AVL_NominalGain = \f$512*10^{NominalGain_dB/20}\f$
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>6.9</td>
++ <td>@ref LVVC_AVL_NOMINALGAIN_MIN (0)</td>
++ <td>@ref LVVC_AVL_NOMINALGAIN_DEFAULT (512)</td>
++ <td>@ref LVVC_AVL_NOMINALGAIN_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 AVL_NominalGain; ///< The nominal gain of the AGC.
++
++ /**
++ The gain of the AGC is smoothed across time. The time constant of the smoothing
++ depends on whether the gain is increasing or decreasing. When a sudden loud
++ signal is encountered (e.g. attack of speech), the attack time is used. When
++ the gain is increasing (e.g. long period of whispered speech), the release time
++ is used. <br>
++
++ AVL_Attack = \f$32767*\exp(-1/(100*AttackTimeSec))\f$
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVVC_AVL_ATTACK_MIN (0)</td>
++ <td>@ref LVVC_AVL_ATTACK_DEFAULT (12055)</td>
++ <td>@ref LVVC_AVL_ATTACK_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 AVL_Attack; ///< The attack time of the AGC.
++
++ /**
++ The gain of the AGC is smoothed across time. The time constant of the smoothing
++ depends on whether the gain is increasing or decreasing. When a sudden loud
++ signal is encountered (e.g. attack of speech), the attack time is used. When
++ the gain is increasing (e.g. long period of whispered speech), the release time
++ is used. <br>
++
++ AVL_Release = \f$32767*\exp(-1/(100*ReleaseTimeSec))\f$
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVVC_AVL_RELEASE_MIN (0)</td>
++ <td>@ref LVVC_AVL_RELEASE_DEFAULT (32604)</td>
++ <td>@ref LVVC_AVL_RELEASE_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 AVL_Release; ///< The release time of the AGC.
++
++ /**
++ The release time at maximum noise level.<br>
++
++ AVL_ReleaseMax = \f$32767*\exp(-1/(100*ReleaseMaxTimeSec))\f$
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVVC_AVL_RELEASEMAX_MIN (0)</td>
++ <td>@ref LVVC_AVL_RELEASEMAX_DEFAULT (32441)</td>
++ <td>@ref LVVC_AVL_RELEASEMAX_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 AVL_ReleaseMax; ///< The release time at maximum noise level.
++
++ /**
++ AVL_Limit_MaxOutputLin = \f$32767*10^{TargetLimiterLeveldB/20}\f$
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVVC_AVL_LIMIT_MAXOUTPUTLIN_MIN (0)</td>
++ <td>@ref LVVC_AVL_LIMIT_MAXOUTPUTLIN_DEFAULT (23170)</td>
++ <td>@ref LVVC_AVL_LIMIT_MAXOUTPUTLIN_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 AVL_Limit_MaxOutputLin; ///< The level to which the signal will be limited.
++
++ /**
++ The higher the value of the threshold, the less speech detections will occur.
++ <br>
++ SpDetect_Threshold = \f$512 * [0,64]\f$
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>6.9</td>
++ <td>@ref LVVC_SPDETECT_THRESHOLD_MIN (0)</td>
++ <td>@ref LVVC_SPDETECT_THRESHOLD_DEFAULT (1024)</td>
++ <td>@ref LVVC_SPDETECT_THRESHOLD_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 SpDetect_Threshold; ///< The threshold used in the speech detector of VoiceClarity.
++
++} LVVC_ControlParams_st;
++
++/**
++* The control parameters are used to control the overall module behavior. These parameters may
++* be changed at any time during processing using the LVFENS_SetControlParameters function but they
++* will not take effect until the next call to the LVFENS_Process function.
++*
++* @see LVFENS_SetControlParameters
++* @see LVFENS_Process
++*/
++typedef struct
++{
++ /**
++ */
++ LVM_Mode_en OperatingMode; ///< Operating Mode
++
++ /**
++ The maximum amount of noise suppression. <br>
++ Unit: dB<br>
++ FENS_limit_ns = \f$32767*10^{-max noise reduction[dB]/20}\f$
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVFENS_FENS_LIMIT_NS_MIN (0)</td>
++ <td>@ref LVFENS_FENS_LIMIT_NS_DEFAULT (10976)</td>
++ <td>@ref LVFENS_FENS_LIMIT_NS_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 FENS_limit_NS; ///< FENS Noise Suppression Limit
++
++ /**
++ The mode word to control the internal operation of FENS.
++ */
++ LVFENS_ModeWord_bm Mode; ///< Mode word
++
++} LVFENS_ControlParams_st;
++
++/**
++* The control parameters are used to control the overall module behavior. These parameters may
++* be changed at any time during processing using the LVWM_SetControlParameters function but they
++* will not take effect until the next call to the LVWM_Process function.
++*
++* @see LVWM_SetControlParameters
++* @see LVWM_Process
++*/
++typedef struct
++{
++ /**
++ Control the operating mode (ON/OFF) of the algorithm.
++ */
++ LVM_Mode_en OperatingMode; ///< Operating mode
++
++ /**
++ The mode word to enable/disable internal algorithm blocks of WhisperMode.
++ */
++ LVWM_ModeWord_bm mode; ///< Mode word
++
++ /**
++ The desired output level of the AGC. <br>
++ AVL_Target_level_lin = \f$32767*10^{TargetLeveldB/20}\f$
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVWM_AVL_TARGET_LEVEL_LIN_MIN (0)</td>
++ <td>@ref LVWM_AVL_TARGET_LEVEL_LIN_DEFAULT (16384)</td>
++ <td>@ref LVWM_AVL_TARGET_LEVEL_LIN_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 AVL_Target_level_lin; ///< The desired output level of the AGC.
++
++ /**
++ The maximal attenuation of the AGC. <br>
++ AVL_MinGainLin = \f$512*10^{MinGaindB/20}\f$
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>6.9</td>
++ <td>@ref LVWM_AVL_MINGAINLIN_MIN (0)</td>
++ <td>@ref LVWM_AVL_MINGAINLIN_DEFAULT (128)</td>
++ <td>@ref LVWM_AVL_MINGAINLIN_MAX (512)</td>
++ </tr>
++ </table> */
++ LVM_INT16 AVL_MinGainLin; ///< The maximal attenuation of the AGC.
++
++ /**
++ The maximal gain of the AGC. <br>
++ AVL_MaxGainLin = \f$512*10^{MaxGaindB/20}\f$
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>6.9</td>
++ <td>@ref LVWM_AVL_MAXGAINLIN_MIN (512)</td>
++ <td>@ref LVWM_AVL_MAXGAINLIN_DEFAULT (8189)</td>
++ <td>@ref LVWM_AVL_MAXGAINLIN_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 AVL_MaxGainLin; ///< The maximal gain of the AGC.
++
++ /**
++ The gain of the AGC is smoothed across time. The time constant of the smoothing
++ depends on whether the gain is increasing or decreasing. When a sudden loud
++ signal is encountered (e.g. attack of speech), the attack time is used. When
++ the gain is increasing (e.g. long period of whispered speech), the release time
++ is used. <br>
++
++ AVL_Attack = \f$32767*\exp(-1/(100*AttackTimeSec))\f$
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVWM_AVL_ATTACK_MIN (0)</td>
++ <td>@ref LVWM_AVL_ATTACK_DEFAULT (25520)</td>
++ <td>@ref LVWM_AVL_ATTACK_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 AVL_Attack; ///< The attack time of the AGC.
++
++ /**
++ The gain of the AGC is smoothed across time. The time constant of the smoothing
++ depends on whether the gain is increasing or decreasing. When a sudden loud
++ signal is encountered (e.g. attack of speech), the attack time is used. When
++ the gain is increasing (e.g. long period of whispered speech), the release time
++ is used. <br>
++
++ AVL_Release = \f$32767*\exp(-1/(100*ReleasTimeSec))\f$
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVWM_AVL_RELEASE_MIN (0)</td>
++ <td>@ref LVWM_AVL_RELEASE_DEFAULT (32685)</td>
++ <td>@ref LVWM_AVL_RELEASE_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 AVL_Release; ///< The release time of the AGC.
++
++ /**
++ AVL_Limit_MaxOutputLin = \f$32767*10^{TargetLimiterLeveldB/20}\f$
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVWM_AVL_LIMIT_MAXOUTPUTLIN_MIN (0)</td>
++ <td>@ref LVWM_AVL_LIMIT_MAXOUTPUTLIN_DEFAULT (23197)</td>
++ <td>@ref LVWM_AVL_LIMIT_MAXOUTPUTLIN_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 AVL_Limit_MaxOutputLin; ///< The level to which the signal will be limited.
++
++ /**
++ The higher the value of the threshold, the less speech detections will occur.
++ <br>
++ SpDetect_Threshold = \f$512 * [0,64]\f$
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>6.9</td>
++ <td>@ref LVWM_SPDETECT_THRESHOLD_MIN (0)</td>
++ <td>@ref LVWM_SPDETECT_THRESHOLD_DEFAULT (9216)</td>
++ <td>@ref LVWM_SPDETECT_THRESHOLD_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 SpDetect_Threshold; ///< The threshold used in the speech detector of WhisperMode.
++
++} LVWM_ControlParams_st;
++
++/**
++* The control parameters are used to control the overall module behavior. These parameters may
++* be changed at any time during processing using the LVDRC_SetControlParameters function but they
++* will not take effect until the next call to the LVDRC_Process function.
++*
++* @see LVDRC_SetControlParameters
++* @see LVDRC_Process
++*/
++typedef struct
++{
++ /**
++ Operating mode for DRC
++ */
++ LVM_Mode_en OperatingMode; ///< Operating mode
++
++ /**
++ Sets the number of sections (knee points) in the compressor curve
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>16.0</td>
++ <td>@ref LVDRC_NUMKNEES_MIN (1)</td>
++ <td>@ref LVDRC_NUMKNEES_DEFAULT (5)</td>
++ <td>@ref LVDRC_NUMKNEES_MAX (5)</td>
++ </tr>
++ </table> */
++ LVM_UINT16 NumKnees; ///< Number of Knee points in compressor curve
++
++ /**
++ An array of size 5(maximum) containing the knee points specified by the
++ compression curve in dBFs. The number of knee points in use is limited by the
++ NumKnees parameter. Th input level for the first knee should be equal to or
++ larger than -96dB, and the input level for the last knee should be 0dB.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>15.0</td>
++ <td>@ref LVDRC_COMPRESSORCURVEINPUTLEVELS_MIN (-96)</td>
++ <td>@ref LVDRC_COMPRESSORCURVEINPUTLEVELS_DEFAULT {-96,-70,-50, -24, 0}</td>
++ <td>@ref LVDRC_COMPRESSORCURVEINPUTLEVELS_MAX (0)</td>
++ </tr>
++ </table> */
++ LVM_INT16 CompressorCurveInputLevels[LVDRC_COMPRESSORCURVEINPUTLEVELS_LENGTH]; ///< Compressor Curve Input Levels
++
++ /**
++ An array of size 5(maximum) containing the knee points specified by the
++ compression curve in dBFs. The number of knee points in use is limited by the
++ NumKnees parameter. The output level for the first knee should be equal to or
++ larger than -96dB, and the output level for the last knee should be equal to or
++ smaller than 0dB.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>15.0</td>
++ <td>@ref LVDRC_COMPRESSORCURVEOUTPUTLEVELS_MIN (-96)</td>
++ <td>@ref LVDRC_COMPRESSORCURVEOUTPUTLEVELS_DEFAULT {-96,-70,-38,-12,0}</td>
++ <td>@ref LVDRC_COMPRESSORCURVEOUTPUTLEVELS_MAX (0)</td>
++ </tr>
++ </table> */
++ LVM_INT16 CompressorCurveOutputLevels[LVDRC_COMPRESSORCURVEOUTPUTLEVELS_LENGTH]; ///< Compressor Curve Output Levels
++
++ /**
++ The AttackTime parameter is the time constant controlling the rate of reaction
++ to increase in signal level. The AttackTime is specified in increments of 100µs
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>15.0</td>
++ <td>@ref LVDRC_ATTACKTIME_MIN (0)</td>
++ <td>@ref LVDRC_ATTACKTIME_DEFAULT (50)</td>
++ <td>@ref LVDRC_ATTACKTIME_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 AttackTime; ///< Attack Time
++
++ /**
++ The ReleaseTime parameter is the time constant controlling the rate of reaction
++ to decrease in signal level. The ReleaseTime is specified in increments of
++ 100µs.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>15.0</td>
++ <td>@ref LVDRC_RELEASETIME_MIN (0)</td>
++ <td>@ref LVDRC_RELEASETIME_DEFAULT (50)</td>
++ <td>@ref LVDRC_RELEASETIME_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 ReleaseTime; ///< Release Time
++
++ /**
++ Enable or Disable limiter with soft clipping.
++ */
++ LVM_Mode_en LimiterOperatingMode; ///< Enable or Disable limiter with soft clipping
++
++ /**
++ Sets the limit level of the compressor in dB.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>15.0</td>
++ <td>@ref LVDRC_LIMITLEVEL_MIN (-96)</td>
++ <td>@ref LVDRC_LIMITLEVEL_DEFAULT (0)</td>
++ <td>@ref LVDRC_LIMITLEVEL_MAX (0)</td>
++ </tr>
++ </table> */
++ LVM_INT16 LimitLevel; ///< Sets the limit level of the compressor in dB
++
++} LVDRC_ControlParams_st;
++
++/**
++* The control parameters are used to control the overall module behavior. These parameters may
++* be changed at any time during processing using the LVNG_SetControlParameters function but they
++* will not take effect until the next call to the LVNG_Process function.
++*
++* @see LVNG_SetControlParameters
++* @see LVNG_Process
++*/
++typedef struct
++{
++ /**
++ Operating mode for Noise Gate
++ */
++ LVM_Mode_en OperatingMode; ///< Operating mode
++
++ /**
++ Sets the number of sections (knee points) in the compressor curve
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>16.0</td>
++ <td>@ref LVNG_NUMKNEES_MIN (1)</td>
++ <td>@ref LVNG_NUMKNEES_DEFAULT (5)</td>
++ <td>@ref LVNG_NUMKNEES_MAX (5)</td>
++ </tr>
++ </table> */
++ LVM_UINT16 NumKnees; ///< Number of Knee points in compressor curve
++
++ /**
++ An array of size 5(maximum) containing the knee points specified by the
++ compression curve in dBFs. The number of knee points in use is limited by the
++ NumKnees parameter. The input level for the first knee should be equal to or
++ larger than -96dB, and the input level for the last knee should be 0dB.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>15.0</td>
++ <td>@ref LVNG_COMPRESSORCURVEINPUTLEVELS_MIN (-96)</td>
++ <td>@ref LVNG_COMPRESSORCURVEINPUTLEVELS_DEFAULT {-80,-70,-50, -24, 0}</td>
++ <td>@ref LVNG_COMPRESSORCURVEINPUTLEVELS_MAX (0)</td>
++ </tr>
++ </table> */
++ LVM_INT16 CompressorCurveInputLevels[LVNG_COMPRESSORCURVEINPUTLEVELS_LENGTH]; ///< Compressor Curve Input Levels
++
++ /**
++ An array of size 5(maximum) containing the knee points specified by the
++ compression curve in dBFs. The number of knee points in use is limited by the
++ NumKnees parameter. The output level for the first knee should be equal to or
++ larger than -96dB, and the output level for the last knee should be equal to or
++ smaller than 0dB.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>15.0</td>
++ <td>@ref LVNG_COMPRESSORCURVEOUTPUTLEVELS_MIN (-96)</td>
++ <td>@ref LVNG_COMPRESSORCURVEOUTPUTLEVELS_DEFAULT {-96,-80,-50, -24, 0}</td>
++ <td>@ref LVNG_COMPRESSORCURVEOUTPUTLEVELS_MAX (0)</td>
++ </tr>
++ </table> */
++ LVM_INT16 CompressorCurveOutputLevels[LVNG_COMPRESSORCURVEOUTPUTLEVELS_LENGTH]; ///< Compressor Curve Output Levels
++
++ /**
++ The AttackTime parameter is the time constant controlling the rate of reaction
++ to increase in signal level. The AttackTime is specified in increments of 100µs
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>15.0</td>
++ <td>@ref LVNG_ATTACKTIME_MIN (0)</td>
++ <td>@ref LVNG_ATTACKTIME_DEFAULT (50)</td>
++ <td>@ref LVNG_ATTACKTIME_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 AttackTime; ///< Attack Time
++
++ /**
++ The ReleaseTime parameter is the time constant controlling the rate of reaction
++ to decrease in signal level. The ReleaseTime is specified in increments of
++ 100µs.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>15.0</td>
++ <td>@ref LVNG_RELEASETIME_MIN (0)</td>
++ <td>@ref LVNG_RELEASETIME_DEFAULT (50)</td>
++ <td>@ref LVNG_RELEASETIME_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 ReleaseTime; ///< Release Time
++
++} LVNG_ControlParams_st;
++
++/**
++* The control parameters are used to control the overall module behavior. These parameters may
++* be changed at any time during processing using the LVNLPP_SetControlParameters function but they
++* will not take effect until the next call to the LVNLPP_Process function.
++*
++* @see LVNLPP_SetControlParameters
++* @see LVNLPP_Process
++*/
++typedef struct
++{
++ /**
++ Limits the signal level compared to digital full scale in dB.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>15.0</td>
++ <td>@ref LVNLPP_NLPP_LIMIT_MIN (-24)</td>
++ <td>@ref LVNLPP_NLPP_LIMIT_DEFAULT (0)</td>
++ <td>@ref LVNLPP_NLPP_LIMIT_MAX (0)</td>
++ </tr>
++ </table> */
++ LVM_INT16 NLPP_Limit; ///< NLPP Limit
++
++ /**
++ Sets the -3dB corner frequency of the high-pass filter in Hz.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>16.0</td>
++ <td>@ref LVNLPP_NLPP_HPF_CORNERFREQ_MIN (50)</td>
++ <td>@ref LVNLPP_NLPP_HPF_CORNERFREQ_DEFAULT (50)</td>
++ <td>@ref LVNLPP_NLPP_HPF_CORNERFREQ_MAX (1000)</td>
++ </tr>
++ </table> */
++ LVM_UINT16 NLPP_HPF_CornerFreq; ///< NLPP HPF Corner Frequency
++
++} LVNLPP_ControlParams_st;
++
++/**
++* The control parameters are used to control the overall module behavior. These parameters may
++* be changed at any time during processing using the LVEQ_SetControlParameters function but they
++* will not take effect until the next call to the LVEQ_Process function.
++*
++* @see LVEQ_SetControlParameters
++* @see LVEQ_Process
++*/
++typedef struct
++{
++ /**
++ Sets the length of the Equalizer impulse response. This must never be more than
++ the value of EQ_MaxLength set at initialization time. The EQ_Length must be a
++ multiple of 8.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>16.0</td>
++ <td>@ref LVEQ_EQ_LENGTH_MIN (8)</td>
++ <td>@ref LVEQ_EQ_LENGTH_DEFAULT (64)</td>
++ <td>@ref LVEQ_EQ_LENGTH_MAX (64)</td>
++ </tr>
++ </table> */
++ LVM_UINT16 EQ_Length; ///< EQ Tap Length
++
++ /**
++ Pointer to an array containing the samples of the Equalizer impulse response.
++ The format of the array content is specified below. The samples of the
++ Equalizer impulse response must be in Q3.12 format.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>3.12</td>
++ <td>@ref LVEQ_EQ_COEFS_MIN (-32768)</td>
++ <td>@ref LVEQ_EQ_COEFS_DEFAULT {4096,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}</td>
++ <td>@ref LVEQ_EQ_COEFS_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 *pEQ_Coefs; ///< Equalizer impulse response
++
++} LVEQ_ControlParams_st;
++
++
++
++/*[Begin] [lvwenhua-2013/10/21]*/
++typedef struct
++{
++ LVM_INT16 EqCoefs[LVVE_MAX_EQ_LENGTH_NB];
++} LVEQ_Coefs_st;
++/*[End] [lvwenhua-2013/10/21]*/
++
++
++
++
++
++
++/**
++* The control parameters are used to control the overall module behavior. These parameters may
++* be changed at any time during processing using the LVVOL_SetControlParameters function but they
++* will not take effect until the next call to the LVVOL_Process function.
++*
++* @see LVVOL_SetControlParameters
++* @see LVVOL_Process
++*/
++typedef struct
++{
++ /**
++ Turns on/off VOL_Gain.
++ */
++ LVM_Mode_en VOL_OperatingMode; ///< Turns on/off VOL_Gain
++
++ /**
++ The volume control gain can be used to set the overall volume level of the
++ signal. The gain is set in dB with steps of 1dB.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>15.0</td>
++ <td>@ref LVVOL_VOL_GAIN_MIN (-96)</td>
++ <td>@ref LVVOL_VOL_GAIN_DEFAULT (0)</td>
++ <td>@ref LVVOL_VOL_GAIN_MAX (24)</td>
++ </tr>
++ </table> */
++ LVM_INT16 VOL_Gain; ///< Apply Gain to Input signal
++
++} LVVOL_ControlParams_st;
++
++/**
++* The control parameters are used to control the overall module behavior. These parameters may
++* be changed at any time during processing using the LVHPF_SetControlParameters function but they
++* will not take effect until the next call to the LVHPF_Process function.
++*
++* @see LVHPF_SetControlParameters
++* @see LVHPF_Process
++*/
++typedef struct
++{
++ /**
++ Turns on/off High Pass filter.
++ */
++ LVM_Mode_en HPF_OperatingMode; ///< Turns on/off High Pass filter
++
++ /**
++ Sets the 3dB corner frequency of the high-pass filter. In case NoiseVoid is
++ enabled, the same high-pass filter will be applied to the second microphone
++ channel.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>16.0</td>
++ <td>@ref LVHPF_HPF_CORNERFREQ_MIN (50)</td>
++ <td>@ref LVHPF_HPF_CORNERFREQ_DEFAULT (50)</td>
++ <td>@ref LVHPF_HPF_CORNERFREQ_MAX (1500)</td>
++ </tr>
++ </table> */
++ LVM_UINT16 HPF_CornerFreq; ///< High Pass Filter Corner Frequency in Hz
++
++} LVHPF_ControlParams_st;
++
++/**
++* The control parameters are used to control the overall module behavior. These parameters may
++* be changed at any time during processing using the LVMUTE_SetControlParameters function but they
++* will not take effect until the next call to the LVMUTE_Process function.
++*
++* @see LVMUTE_SetControlParameters
++* @see LVMUTE_Process
++*/
++typedef struct
++{
++ /**
++ This param can mute unmute the Rx/Tx engine output.
++ */
++ LVM_Mode_en Mute; ///< This param can mute unmute the Rx/Tx engine output
++
++} LVMUTE_ControlParams_st;
++
++/**
++* The control parameters are used to control the overall module behavior. These parameters may
++* be changed at any time during processing using the LVVE_Rx_SetControlParameters function but they
++* will not take effect until the next call to the LVVE_Rx_Process function.
++*
++* @see LVVE_Rx_SetControlParameters
++* @see LVVE_Rx_Process
++*/
++typedef struct
++{
++ /**
++ This enumerated type is used to set the operating mode of the Rx path. The
++ processing can be separately set to enable all processing modules (i.e., ON),
++ to disable all processing modules (i.e., OFF) or to bypass all processing
++ modules (i.e., BYPASS). When bypassed, all processing modules keep on running,
++ but their output is not used.
++ */
++ LVVE_Rx_Mode_en OperatingMode; ///< This param controls the on/off of RX voice engine.
++
++ /**
++ This param can mute unmute the Rx/Tx engine output.
++ */
++ LVM_Mode_en Mute; ///< This param can mute unmute the Rx/Tx engine output
++
++ /**
++ Turns on/off VOL_Gain.
++ */
++ LVM_Mode_en VOL_OperatingMode; ///< Turns on/off VOL_Gain
++
++ /**
++ The volume control gain can be used to set the overall volume level of the
++ signal. The gain is set in dB with steps of 1dB.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>15.0</td>
++ <td>@ref LVVE_RX_VOL_GAIN_MIN (-96)</td>
++ <td>@ref LVVE_RX_VOL_GAIN_DEFAULT (0)</td>
++ <td>@ref LVVE_RX_VOL_GAIN_MAX (24)</td>
++ </tr>
++ </table> */
++ LVM_INT16 VOL_Gain; ///< Apply Gain to Input signal
++
++ /**
++ Far End Noise Suppression Control Parameter Structure.
++ */
++ LVFENS_ControlParams_st FENS_ControlParams; ///< Far End Noise Suppression Control Parameter Structure
++
++ /**
++ Turns on/off NLPP.
++ */
++ LVM_Mode_en NLPP_OperatingMode; ///< Turns on/off NLPP
++
++ /**
++ NLPP Control Parameter Structure.
++ */
++ LVNLPP_ControlParams_st NLPP_ControlParams; ///< NLPP Control Parameter Structure
++
++ /**
++ Voice Clarity Control Parameter Structure.
++ */
++ LVVC_ControlParams_st VC_ControlParams; ///< Voice Clarity Control Parameter Structure
++
++ /**
++ Equalizer Operating mode.
++ */
++ LVM_Mode_en EQ_OperatingMode; ///< Equalizer Operating mode
++
++ /**
++ Equalizer Control Parameters Structure.
++ */
++ LVEQ_ControlParams_st EQ_ControlParams; ///< Equalizer Control Parameters Structure
++
++ /**
++ DRC Control Parameter Strcuture.
++ */
++ LVDRC_ControlParams_st DRC_ControlParams; ///< DRC Control Parameter Strcuture
++
++ /**
++ Turns on/off High Pass filter.
++ */
++ LVM_Mode_en HPF_OperatingMode; ///< Turns on/off High Pass filter
++
++ /**
++ Sets the 3dB corner frequency of the high-pass filter. In case NoiseVoid is
++ enabled, the same high-pass filter will be applied to the second microphone
++ channel.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>16.0</td>
++ <td>@ref LVVE_RX_HPF_CORNERFREQ_MIN (50)</td>
++ <td>@ref LVVE_RX_HPF_CORNERFREQ_DEFAULT (50)</td>
++ <td>@ref LVVE_RX_HPF_CORNERFREQ_MAX (1500)</td>
++ </tr>
++ </table> */
++ LVM_UINT16 HPF_CornerFreq; ///< High Pass Filter Corner Frequency in Hz
++
++ /**
++ Whisper Mode Control Parameter Strcuture.
++ */
++ LVWM_ControlParams_st WM_ControlParams; ///< Whisper Mode Control Parameter Strcuture
++
++ /**
++ Noise Gate Control Parameter Structure.
++ */
++ LVNG_ControlParams_st NG_ControlParams; ///< Noise Gate Control Parameter Structure
++
++} LVVE_Rx_ControlParams_st;
++
++/**
++* The control parameters are used to control the overall module behavior. These parameters may
++* be changed at any time during processing using the LVNV_SetControlParameters function but they
++* will not take effect until the next call to the LVNV_Process function.
++*
++* @see LVNV_SetControlParameters
++* @see LVNV_Process
++*/
++typedef struct
++{
++ /**
++ */
++ LVM_Mode_en OperatingMode; ///< Operating Mode
++
++ /**
++ The mode word to enable/disable internal algorithm blocks of LVNV.
++ */
++ LVNV_ModeWord_bm Mode; ///< Mode word
++
++ /**
++ The mode2 word to allow switching or combining different blocks inside LVNV.
++ */
++ LVNV_Mode2Word_bm Mode2; ///< Mode2 word
++
++ /**
++ The tuning mode word to enable/disable internal algorithm tuning capabilities
++ in the different blocks of LVNV. Only one bit is allowed to be enabled at a
++ time.
++ */
++ LVNV_TuningModeWord_bm Tuning_mode; ///< Tuning mode word
++
++ /**
++ Gain applied at the primary channel in the Tx input. Used to scale the
++ microphone signal in order to give the NLMS0_LB and NLMS0_HB filters headroom
++ for correct operation.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>2.13</td>
++ <td>@ref LVNV_INPUT_GAIN_MIC0_MIN (0)</td>
++ <td>@ref LVNV_INPUT_GAIN_MIC0_DEFAULT (8192)</td>
++ <td>@ref LVNV_INPUT_GAIN_MIC0_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 Input_Gain_Mic0; ///< The primary input gain.
++
++ /**
++ Gain applied at the secondary channel in the Tx input. Used to scale the
++ microphone signal in order to give the NLMS1_LB and NLMS1_HB filters headroom
++ for correct operation.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>2.13</td>
++ <td>@ref LVNV_INPUT_GAIN_MIC1_MIN (0)</td>
++ <td>@ref LVNV_INPUT_GAIN_MIC1_DEFAULT (8192)</td>
++ <td>@ref LVNV_INPUT_GAIN_MIC1_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 Input_Gain_Mic1; ///< The secondary input gain.
++
++ /**
++ Gain applied at the Tx output of LVNV. Compensates the applied Input_Gain_Mic0
++ in order to preserve the overall Tx gain.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>4.11</td>
++ <td>@ref LVNV_OUTPUT_GAIN_MIN (0)</td>
++ <td>@ref LVNV_OUTPUT_GAIN_DEFAULT (2048)</td>
++ <td>@ref LVNV_OUTPUT_GAIN_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 Output_Gain; ///< The output gain.
++
++ /**
++ Length of the low-band (0-4kHz) adaptive echo cancellation filter for the
++ primary channel. The Length should be chosen such that most of the energy of
++ the impulse response is covered by the filter. The length should be a multiple
++ of 8.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>16.0</td>
++ <td>@ref LVNV_NLMS0_LB_TAPS_MIN (16)</td>
++ <td>@ref LVNV_NLMS0_LB_TAPS_DEFAULT (32)</td>
++ <td>@ref LVNV_NLMS0_LB_TAPS_MAX (64)</td>
++ </tr>
++ </table> */
++ LVM_UINT16 NLMS0_LB_taps; ///< Number of NLMS0 low-band taps.
++
++ /**
++ Step size for the update of the low-band adaptive filter coefficients for the
++ primary channel. It is recommended not to change the default value.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVNV_NLMS0_LB_TWOALPHA_MIN (0)</td>
++ <td>@ref LVNV_NLMS0_LB_TWOALPHA_DEFAULT (8192)</td>
++ <td>@ref LVNV_NLMS0_LB_TWOALPHA_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 NLMS0_LB_twoalpha; ///< NLMS0 low-band step size
++
++ /**
++ Adaptive step-size control for the low-band adaptive echo cancellation filter
++ for the primary channel. This parameter is used to slow down the update speed
++ of the adaptive filter during double talk situations.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>9.6</td>
++ <td>@ref LVNV_NLMS0_LB_ERL_MIN (64)</td>
++ <td>@ref LVNV_NLMS0_LB_ERL_DEFAULT (1000)</td>
++ <td>@ref LVNV_NLMS0_LB_ERL_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 NLMS0_LB_erl; ///< NLMS0 low-band erl
++
++ /**
++ Length of the high-band (4-8kHz) adaptive echo cancellation filter for the
++ primary channel. The Length should be chosen such that most of the energy of
++ the impulse response is covered by the filter. The length should be a multiple
++ of 8.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>16.0</td>
++ <td>@ref LVNV_NLMS0_HB_TAPS_MIN (16)</td>
++ <td>@ref LVNV_NLMS0_HB_TAPS_DEFAULT (24)</td>
++ <td>@ref LVNV_NLMS0_HB_TAPS_MAX (64)</td>
++ </tr>
++ </table> */
++ LVM_UINT16 NLMS0_HB_taps; ///< Number of NLMS0 high-band taps.
++
++ /**
++ Step size for the update of the high-band adaptive filter coefficients for the
++ primary channel. It is recommended not to change the default value.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVNV_NLMS0_HB_TWOALPHA_MIN (0)</td>
++ <td>@ref LVNV_NLMS0_HB_TWOALPHA_DEFAULT (8192)</td>
++ <td>@ref LVNV_NLMS0_HB_TWOALPHA_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 NLMS0_HB_twoalpha; ///< NLMS0 high-band step size
++
++ /**
++ Adaptive step-size control for the high-band adaptive echo cancellation filter
++ for the primary channel. This parameter is used to slow down the update speed
++ of the adaptive filter during double talk situations.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>9.6</td>
++ <td>@ref LVNV_NLMS0_HB_ERL_MIN (64)</td>
++ <td>@ref LVNV_NLMS0_HB_ERL_DEFAULT (1000)</td>
++ <td>@ref LVNV_NLMS0_HB_ERL_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 NLMS0_HB_erl; ///< NLMS0 high-band erl
++
++ /**
++ Indicates whether a preset of adaptive filter coefficients should be done.<br>
++ 0 = No preset (coefficients as they are).<br>
++ 1 = Preset with internally calculated coefficients.<br>
++ 2 = Preset with zero coefficients.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>15.0</td>
++ <td>@ref LVNV_NLMS0_PRESET_COEFS_MIN (0)</td>
++ <td>@ref LVNV_NLMS0_PRESET_COEFS_DEFAULT (0)</td>
++ <td>@ref LVNV_NLMS0_PRESET_COEFS_MAX (2)</td>
++ </tr>
++ </table> */
++ LVM_INT16 NLMS0_preset_coefs; ///< NLMS0 preset
++
++ /**
++ Offset added to the normalization of the adaptation of the filter.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVNV_NLMS0_OFFSET_MIN (0)</td>
++ <td>@ref LVNV_NLMS0_OFFSET_DEFAULT (776)</td>
++ <td>@ref LVNV_NLMS0_OFFSET_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 NLMS0_offset; ///< NLMS0 offset
++
++ /**
++ Length of the low-band (0-4kHz) adaptive echo cancellation filter for the
++ secondary channel. The Length should be chosen such that most of the energy of
++ the impulse response is covered by the filter. The length should be a multiple
++ of 8.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>16.0</td>
++ <td>@ref LVNV_NLMS1_LB_TAPS_MIN (16)</td>
++ <td>@ref LVNV_NLMS1_LB_TAPS_DEFAULT (32)</td>
++ <td>@ref LVNV_NLMS1_LB_TAPS_MAX (32)</td>
++ </tr>
++ </table> */
++ LVM_UINT16 NLMS1_LB_taps; ///< Number of NLMS1 low-band taps.
++
++ /**
++ Step size for the update of the low-band adaptive filter coefficients for the
++ secondary channel. It is recommended not to change the default value.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVNV_NLMS1_LB_TWOALPHA_MIN (0)</td>
++ <td>@ref LVNV_NLMS1_LB_TWOALPHA_DEFAULT (8192)</td>
++ <td>@ref LVNV_NLMS1_LB_TWOALPHA_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 NLMS1_LB_twoalpha; ///< NLMS1 low-band step size
++
++ /**
++ Adaptive step-size control for the low-band adaptive echo cancellation filter
++ for the secondary channel. This parameter is used to slow down the update speed
++ of the adaptive filter during double talk situations.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>9.6</td>
++ <td>@ref LVNV_NLMS1_LB_ERL_MIN (64)</td>
++ <td>@ref LVNV_NLMS1_LB_ERL_DEFAULT (1000)</td>
++ <td>@ref LVNV_NLMS1_LB_ERL_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 NLMS1_LB_erl; ///< NLMS1 low-band erl
++
++ /**
++ Length of the high-band (4-8kHz) adaptive echo cancellation filter for the
++ secondary channel. The Length should be chosen such that most of the energy of
++ the impulse response is covered by the filter. The length should be a multiple
++ of 8.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>16.0</td>
++ <td>@ref LVNV_NLMS1_HB_TAPS_MIN (16)</td>
++ <td>@ref LVNV_NLMS1_HB_TAPS_DEFAULT (24)</td>
++ <td>@ref LVNV_NLMS1_HB_TAPS_MAX (32)</td>
++ </tr>
++ </table> */
++ LVM_UINT16 NLMS1_HB_taps; ///< Number of NLMS1 high-band taps.
++
++ /**
++ Step size for the update of the high-band adaptive filter coefficients for the
++ secondary channel. It is recommended not to change the default value.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVNV_NLMS1_HB_TWOALPHA_MIN (0)</td>
++ <td>@ref LVNV_NLMS1_HB_TWOALPHA_DEFAULT (8192)</td>
++ <td>@ref LVNV_NLMS1_HB_TWOALPHA_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 NLMS1_HB_twoalpha; ///< NLMS1 high-band step size
++
++ /**
++ Adaptive step-size control for the high-band adaptive echo cancellation filter
++ for the secondary channel. This parameter is used to slow down the update speed
++ of the adaptive filter during double talk situations.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>9.6</td>
++ <td>@ref LVNV_NLMS1_HB_ERL_MIN (64)</td>
++ <td>@ref LVNV_NLMS1_HB_ERL_DEFAULT (1000)</td>
++ <td>@ref LVNV_NLMS1_HB_ERL_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 NLMS1_HB_erl; ///< NLMS1 high-band erl
++
++ /**
++ Indicates whether a preset of adaptive filter coefficients should be done.<br>
++ 0 = No preset (coefficients as they are).<br>
++ 1 = Preset with internally calculated coefficients.<br>
++ 2 = Preset with zero coefficients.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>15.0</td>
++ <td>@ref LVNV_NLMS1_PRESET_COEFS_MIN (0)</td>
++ <td>@ref LVNV_NLMS1_PRESET_COEFS_DEFAULT (0)</td>
++ <td>@ref LVNV_NLMS1_PRESET_COEFS_MAX (2)</td>
++ </tr>
++ </table> */
++ LVM_INT16 NLMS1_preset_coefs; ///< NLMS1 preset
++
++ /**
++ Offset added to the normalization of the adaptation of the filter.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVNV_NLMS1_OFFSET_MIN (0)</td>
++ <td>@ref LVNV_NLMS1_OFFSET_DEFAULT (776)</td>
++ <td>@ref LVNV_NLMS1_OFFSET_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 NLMS1_offset; ///< NLMS1 offset
++
++ /**
++ A parameter representing a threshold for the detection of instrumental noise.
++ The higher the value for this parameter, the lower noise suppression
++ performance.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVNV_CAL_MICPOWFLOORMIN_MIN (0)</td>
++ <td>@ref LVNV_CAL_MICPOWFLOORMIN_DEFAULT (150)</td>
++ <td>@ref LVNV_CAL_MICPOWFLOORMIN_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 CAL_micPowFloorMin; ///< Instrumental noise threshold
++
++ /**
++ Threshold for Windgush detector. The higher the value, the less sensitive the
++ detection.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>6.9</td>
++ <td>@ref LVNV_WGTHRESHOLD_MIN (0)</td>
++ <td>@ref LVNV_WGTHRESHOLD_DEFAULT (32767)</td>
++ <td>@ref LVNV_WGTHRESHOLD_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 WgThreshold; ///< Windgush threshold
++
++ /**
++ Threshold for speech detector based on power comparison between primary and
++ secondary microphones. The higher the value, the less sensitive the detection.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>3.12</td>
++ <td>@ref LVNV_MPTHRESHOLD_MIN (0)</td>
++ <td>@ref LVNV_MPTHRESHOLD_DEFAULT (6554)</td>
++ <td>@ref LVNV_MPTHRESHOLD_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 MpThreshold; ///< MicPow threshold
++
++ /**
++ Set of first 8 coefficients for adaptive filter FSB0. These values should be
++ determined for the given microphone configuration
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVNV_FSB_INIT_TABLE0_MIN (-32768)</td>
++ <td>@ref LVNV_FSB_INIT_TABLE0_DEFAULT {32767, 0, 0, 0, 0, 0, 0, 0}</td>
++ <td>@ref LVNV_FSB_INIT_TABLE0_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 FSB_init_table0[LVNV_FSB_INIT_TABLE0_LENGTH]; ///< FSB0 initial coefficients.
++
++ /**
++ Set of first 8 coefficients for adaptive filter FSB1. These values should be
++ determined for the given microphone configuration
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVNV_FSB_INIT_TABLE1_MIN (-32768)</td>
++ <td>@ref LVNV_FSB_INIT_TABLE1_DEFAULT {0, 0, 0, 0, 0, 0, 0, 0}</td>
++ <td>@ref LVNV_FSB_INIT_TABLE1_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 FSB_init_table1[LVNV_FSB_INIT_TABLE1_LENGTH]; ///< FSB1 initial coefficients.
++
++ /**
++ Length of the FSB to model the acoustical paths between the speech source and
++ two microphones. The length must be equal to 16 for the handset application.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>16.0</td>
++ <td>@ref LVNV_FSB_TAPS_MIN (8)</td>
++ <td>@ref LVNV_FSB_TAPS_DEFAULT (16)</td>
++ <td>@ref LVNV_FSB_TAPS_MAX (16)</td>
++ </tr>
++ </table> */
++ LVM_UINT16 FSB_taps; ///< Number of FSB taps
++
++ /**
++ Step-size to update the coefficients of the adaptive filters. A higher value
++ leads to a faster speed of the adaptation, while a lower value provides more
++ stability, but a slow adaption speed.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVNV_FSB_TWOALPHA_MIN (0)</td>
++ <td>@ref LVNV_FSB_TWOALPHA_DEFAULT (655)</td>
++ <td>@ref LVNV_FSB_TWOALPHA_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 FSB_twoalpha; ///< FSB step size control
++
++ /**
++ Gain applied on the samples of the second FSB reference signal (fsbref[1]).
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>5.10</td>
++ <td>@ref LVNV_FSB_REF_GAIN_MIN (0)</td>
++ <td>@ref LVNV_FSB_REF_GAIN_DEFAULT (1024)</td>
++ <td>@ref LVNV_FSB_REF_GAIN_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 FSB_ref_gain; ///< FSB ref gain
++
++ /**
++ Length of the GSC to model the transfer function between the noise reference
++ and the residual signal, in order to reduce the noise and interfering sounds
++ from the desired signal. This number should be a multiple of 8.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>16.0</td>
++ <td>@ref LVNV_GSC_TAPS_MIN (8)</td>
++ <td>@ref LVNV_GSC_TAPS_DEFAULT (16)</td>
++ <td>@ref LVNV_GSC_TAPS_MAX (48)</td>
++ </tr>
++ </table> */
++ LVM_UINT16 GSC_taps; ///< Number of GSC taps
++
++ /**
++ Step-size to update the coefficients of the adaptive filter. A higher value
++ leads to a faster speed of the adaptation, while a lower value provides more
++ stability, but a slow adaption speed.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVNV_GSC_TWOALPHA_MIN (0)</td>
++ <td>@ref LVNV_GSC_TWOALPHA_DEFAULT (1638)</td>
++ <td>@ref LVNV_GSC_TWOALPHA_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 GSC_twoalpha; ///< GSC step size control
++
++ /**
++ Adaptive step-size control for GSC to avoid divergence of the adaptive filter
++ during desired speech. In general, GSC_erl is lower than NLMS_erl and ranges
++ between 0 and 30 dB.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>9.6</td>
++ <td>@ref LVNV_GSC_ERL_MIN (64)</td>
++ <td>@ref LVNV_GSC_ERL_DEFAULT (256)</td>
++ <td>@ref LVNV_GSC_ERL_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 GSC_erl; ///< GSC erl
++
++ /**
++ Offset added to the computation of the power of the noise reference to avoid
++ that the power converges towards zero when the input is low.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVNV_GSC_OFFSET_MIN (0)</td>
++ <td>@ref LVNV_GSC_OFFSET_DEFAULT (1638)</td>
++ <td>@ref LVNV_GSC_OFFSET_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 GSC_offset; ///< GSC offset
++
++ /**
++ Echo subtraction factor applied during farend-only.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>2.13</td>
++ <td>@ref LVNV_DNNS_ECHOGAMMAHI_MIN (0)</td>
++ <td>@ref LVNV_DNNS_ECHOGAMMAHI_DEFAULT (16384)</td>
++ <td>@ref LVNV_DNNS_ECHOGAMMAHI_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 DNNS_EchoGammaHi; ///< High echo subtraction factor
++
++ /**
++ Echo subtraction factor applied during double talk and nearend-only.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>2.13</td>
++ <td>@ref LVNV_DNNS_ECHOGAMMALO_MIN (0)</td>
++ <td>@ref LVNV_DNNS_ECHOGAMMALO_DEFAULT (8192)</td>
++ <td>@ref LVNV_DNNS_ECHOGAMMALO_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 DNNS_EchoGammaLo; ///< Low echo subtraction factor
++
++ /**
++ Parameter related to the reverberation time of the acoustical environment,
++ which represents the decay in energy over time of the echo tail of the impulse
++ response.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVNV_DNNS_ECHOALPHAREV_MIN (0)</td>
++ <td>@ref LVNV_DNNS_ECHOALPHAREV_DEFAULT (12000)</td>
++ <td>@ref LVNV_DNNS_ECHOALPHAREV_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 DNNS_EchoAlphaRev; ///< Echo reverberation factor
++
++ /**
++ Parameter representing the portion of the echo tail (estimated by the NLMS
++ filter) that has to be extrapolated in time.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVNV_DNNS_ECHOTAILPORTION_MIN (0)</td>
++ <td>@ref LVNV_DNNS_ECHOTAILPORTION_DEFAULT (7000)</td>
++ <td>@ref LVNV_DNNS_ECHOTAILPORTION_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 DNNS_EchoTailPortion; ///< Echo tail portion
++
++ /**
++ Non-linear echo subtraction factor applied during double talk and nearend-only.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>4.11</td>
++ <td>@ref LVNV_DNNS_NLATTEN_MIN (0)</td>
++ <td>@ref LVNV_DNNS_NLATTEN_DEFAULT (256)</td>
++ <td>@ref LVNV_DNNS_NLATTEN_MAX (2048)</td>
++ </tr>
++ </table> */
++ LVM_INT16 DNNS_NlAtten; ///< Non-linear echo subtraction factor
++
++ /**
++ Gain factor for stationary noise oversubtraction.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>2.13</td>
++ <td>@ref LVNV_DNNS_NOISEGAMMAS_MIN (0)</td>
++ <td>@ref LVNV_DNNS_NOISEGAMMAS_DEFAULT (11470)</td>
++ <td>@ref LVNV_DNNS_NOISEGAMMAS_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 DNNS_NoiseGammaS; ///< Stationary noise oversubtraction factor
++
++ /**
++ Gain factor for non-stationary noise oversubtraction.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>2.13</td>
++ <td>@ref LVNV_DNNS_NOISEGAMMAN_MIN (0)</td>
++ <td>@ref LVNV_DNNS_NOISEGAMMAN_DEFAULT (16384)</td>
++ <td>@ref LVNV_DNNS_NOISEGAMMAN_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 DNNS_NoiseGammaN; ///< Non-stationary noise oversubtraction factor
++
++ /**
++ The maximum amount of stationary noise suppression.<br>
++ DNNS_NoiseGainMinS = \f$2*32767*10^{MaxNoiseReductiondB/20}\f$
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>-1.16</td>
++ <td>@ref LVNV_DNNS_NOISEGAINMINS_MIN (0)</td>
++ <td>@ref LVNV_DNNS_NOISEGAINMINS_DEFAULT (11140)</td>
++ <td>@ref LVNV_DNNS_NOISEGAINMINS_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 DNNS_NoiseGainMinS; ///< Maximum stationary noise suppression.
++
++ /**
++ The maximum amount of non-stationary noise suppression.<br>
++ DNNS_NoiseGainMinN = \f$2*32767*10^{MaxNoiseReductiondB/20}\f$
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>-1.16</td>
++ <td>@ref LVNV_DNNS_NOISEGAINMINN_MIN (0)</td>
++ <td>@ref LVNV_DNNS_NOISEGAINMINN_DEFAULT (6554)</td>
++ <td>@ref LVNV_DNNS_NOISEGAINMINN_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 DNNS_NoiseGainMinN; ///< Maximum non-stationary noise suppression.
++
++ /**
++ Bias compensation factor for stationary noise estimation.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>2.13</td>
++ <td>@ref LVNV_DNNS_NOISEBIASCOMP_MIN (0)</td>
++ <td>@ref LVNV_DNNS_NOISEBIASCOMP_DEFAULT (9830)</td>
++ <td>@ref LVNV_DNNS_NOISEBIASCOMP_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 DNNS_NoiseBiasComp; ///< Bias compensation factor.
++
++ /**
++ Echo oversubtraction factor applied to the estimated non-stationary noise
++ floor.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>3.12</td>
++ <td>@ref LVNV_DNNS_GAINETA_MIN (0)</td>
++ <td>@ref LVNV_DNNS_GAINETA_DEFAULT (256)</td>
++ <td>@ref LVNV_DNNS_GAINETA_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 DNNS_GainEta; ///< Echo oversubtraction factor.
++
++ /**
++ Detection threshold for microphone activity.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>3.12</td>
++ <td>@ref LVNV_DNNS_ACTHRESHOLD_MIN (0)</td>
++ <td>@ref LVNV_DNNS_ACTHRESHOLD_DEFAULT (12288)</td>
++ <td>@ref LVNV_DNNS_ACTHRESHOLD_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 DNNS_AcThreshold; ///< Activity threshold.
++
++ /**
++ Detection threshold for activity within the beam of FSB.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>3.12</td>
++ <td>@ref LVNV_DNNS_WBTHRESHOLD_MIN (0)</td>
++ <td>@ref LVNV_DNNS_WBTHRESHOLD_DEFAULT (9216)</td>
++ <td>@ref LVNV_DNNS_WBTHRESHOLD_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 DNNS_WbThreshold; ///< WithinBeam threshold.
++
++ /**
++ Detection threshold for lost beam where the nearend speaker is speaking outside
++ the beam of the FSB.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>9.6</td>
++ <td>@ref LVNV_DNNS_LOSTBEAMTHRESHOLD_MIN (0)</td>
++ <td>@ref LVNV_DNNS_LOSTBEAMTHRESHOLD_DEFAULT (320)</td>
++ <td>@ref LVNV_DNNS_LOSTBEAMTHRESHOLD_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 DNNS_LostBeamThreshold; ///< Lost beam threshold.
++
++ /**
++ Smoothing factor applied to get a smoothed value of the inter-channel
++ correlation.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>9.6</td>
++ <td>@ref LVNV_PCD_BETA_MIN (0)</td>
++ <td>@ref LVNV_PCD_BETA_DEFAULT (230)</td>
++ <td>@ref LVNV_PCD_BETA_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 PCD_beta; ///< ICC smoothing factor.
++
++ /**
++ Detection threshold for broadside when the nearend speaker is not in end-fire
++ position with respect to the microphone configuration.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>9.6</td>
++ <td>@ref LVNV_PCD_THRESHOLD_MIN (0)</td>
++ <td>@ref LVNV_PCD_THRESHOLD_DEFAULT (26213)</td>
++ <td>@ref LVNV_PCD_THRESHOLD_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 PCD_Threshold; ///< Broadside detection threshold.
++
++} LVNV_ControlParams_st;
++
++/**
++* The control parameters are used to control the overall module behavior. These parameters may
++* be changed at any time during processing using the LVHF_SetControlParameters function but they
++* will not take effect until the next call to the LVHF_Process function.
++*
++* @see LVHF_SetControlParameters
++* @see LVHF_Process
++*/
++typedef struct
++{
++ /**
++ */
++ LVM_Mode_en OperatingMode; ///< Operating Mode
++
++ /**
++ The mode word to enable/disable internal algorithm blocks of HandsFree
++ */
++ LVHF_ModeWord_bm Mode; ///< Mode Word
++
++ /**
++ The tuning mode is used to enable/disable internal algorithm tuning
++ capabilities in the different blocks of HandsFree. Only one bit allowed to be
++ enabled at a time.
++ */
++ LVHF_TuningModeWord TuningMode; ///< Tuning Mode
++
++ /**
++ Gain applied at the Tx input of LVHF. Used to scale the microphone signal in
++ order to give the NLMS filter headroom for correct operation.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>2.13</td>
++ <td>@ref LVHF_INPUTGAIN_MIN (0)</td>
++ <td>@ref LVHF_INPUTGAIN_DEFAULT (8192)</td>
++ <td>@ref LVHF_INPUTGAIN_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 InputGain; ///< Input Gain
++
++ /**
++ Gain applied at the Tx output of LVHF. Compensates the applied InputGain in
++ order to preserve the overall Tx gain.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>4.11</td>
++ <td>@ref LVHF_OUTPUTGAIN_MIN (0)</td>
++ <td>@ref LVHF_OUTPUTGAIN_DEFAULT (2048)</td>
++ <td>@ref LVHF_OUTPUTGAIN_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 OutputGain; ///< Output Gain
++
++ /**
++ Limit the NLMS reference signal. Value in dB Full Scale.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>15.0</td>
++ <td>@ref LVHF_NLMS_LIMIT_MIN (-24)</td>
++ <td>@ref LVHF_NLMS_LIMIT_DEFAULT (0)</td>
++ <td>@ref LVHF_NLMS_LIMIT_MAX (0)</td>
++ </tr>
++ </table> */
++ LVM_INT16 NLMS_limit; ///< Limit the NLMS reference signal.
++
++ /**
++ Length of the low-band (0-4kHz) adaptive echo cancellation filter. The Length
++ should be chosen such that most of the energy of the impulse response is
++ covered by the filter. The length should be a multiple of 8.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>16.0</td>
++ <td>@ref LVHF_NLMS_LB_TAPS_MIN (16)</td>
++ <td>@ref LVHF_NLMS_LB_TAPS_DEFAULT (64)</td>
++ <td>@ref LVHF_NLMS_LB_TAPS_MAX (200)</td>
++ </tr>
++ </table> */
++ LVM_UINT16 NLMS_LB_taps; ///< Number of taps for LB NLMS.
++
++ /**
++ Step size for the update of the low-band (0-4kHz) adaptive filter coefficients.
++ It is recommended not to change the default value.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVHF_NLMS_LB_TWO_ALPHA_MIN (0)</td>
++ <td>@ref LVHF_NLMS_LB_TWO_ALPHA_DEFAULT (8192)</td>
++ <td>@ref LVHF_NLMS_LB_TWO_ALPHA_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 NLMS_LB_two_alpha; ///< Step Size of LB NLMS
++
++ /**
++ Adaptive step size control for the low-band (0-4kHz) adaptive echo cancellation
++ filter. This parameter is used to slow down the update speed of the adaptive
++ filter during double talk situations.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>9.6</td>
++ <td>@ref LVHF_NLMS_LB_ERL_MIN (64)</td>
++ <td>@ref LVHF_NLMS_LB_ERL_DEFAULT (128)</td>
++ <td>@ref LVHF_NLMS_LB_ERL_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 NLMS_LB_erl; ///< ERL of LB NLMS
++
++ /**
++ Length of the high-band (4-8kHz) adaptive echo cancellation filter. The Length
++ should be chosen such that most of the energy of the impulse response is
++ covered by the filter. The length should be a multiple of 8. In case of
++ narrowband processing, this parameter has no effect.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>16.0</td>
++ <td>@ref LVHF_NLMS_HB_TAPS_MIN (16)</td>
++ <td>@ref LVHF_NLMS_HB_TAPS_DEFAULT (64)</td>
++ <td>@ref LVHF_NLMS_HB_TAPS_MAX (136)</td>
++ </tr>
++ </table> */
++ LVM_UINT16 NLMS_HB_taps; ///< Number of taps for HB NLMS.
++
++ /**
++ Step size for the update of the high-band (4-8kHz) adaptive filter
++ coefficients. It is recommended not to change the default value. In case of
++ narrowband processing, this parameter has no effect.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVHF_NLMS_HB_TWO_ALPHA_MIN (0)</td>
++ <td>@ref LVHF_NLMS_HB_TWO_ALPHA_DEFAULT (8192)</td>
++ <td>@ref LVHF_NLMS_HB_TWO_ALPHA_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 NLMS_HB_two_alpha; ///< Step Size of HB NLMS
++
++ /**
++ Adaptive step size control for the high-band (4-8kHz) adaptive echo
++ cancellation filter. This parameter is used to slow down the update speed of
++ the adaptive filter during double talk situations. In case of narrowband
++ processing, this parameter has no effect.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>9.6</td>
++ <td>@ref LVHF_NLMS_HB_ERL_MIN (64)</td>
++ <td>@ref LVHF_NLMS_HB_ERL_DEFAULT (128)</td>
++ <td>@ref LVHF_NLMS_HB_ERL_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 NLMS_HB_erl; ///< ERL of HB NLMS
++
++ /**
++ Indicates whether a preset of adaptive filter coefficients should be done. <br>
++ 0 = No preset (Coefficients as they are)<br>
++ 1= Preset with internally calculated coefficients.<br>
++ 2= Preset with zero coefficients.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>15.0</td>
++ <td>@ref LVHF_NLMS_PRESET_COEFS_MIN (0)</td>
++ <td>@ref LVHF_NLMS_PRESET_COEFS_DEFAULT (1)</td>
++ <td>@ref LVHF_NLMS_PRESET_COEFS_MAX (2)</td>
++ </tr>
++ </table> */
++ LVM_INT16 NLMS_preset_coefs; ///< Coefficient preset.
++
++ /**
++ Offset added to the normalization of the adaptation of the filter.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVHF_NLMS_OFFSET_MIN (0)</td>
++ <td>@ref LVHF_NLMS_OFFSET_DEFAULT (767)</td>
++ <td>@ref LVHF_NLMS_OFFSET_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 NLMS_offset; ///< NLMS offset
++
++ /**
++ Parameter related to the reverberation of the acoustic environment. It
++ represents the decay in time of the energy of the echo tail of the impulse
++ response for the LB.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVHF_DENS_TAIL_ALPHA_LB_MIN (0)</td>
++ <td>@ref LVHF_DENS_TAIL_ALPHA_LB_DEFAULT (25395)</td>
++ <td>@ref LVHF_DENS_TAIL_ALPHA_LB_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 DENS_tail_alpha_LB;
++ /**
++ Parameter related to the portion of the echo tail that has to be extrapolated
++ in time for LB.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVHF_DENS_TAIL_PORTION_LB_MIN (0)</td>
++ <td>@ref LVHF_DENS_TAIL_PORTION_LB_DEFAULT (29491)</td>
++ <td>@ref LVHF_DENS_TAIL_PORTION_LB_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 DENS_tail_portion_LB;
++ /**
++ Echo subtraction factor applied during farend-only for the LB.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>7.8</td>
++ <td>@ref LVHF_DENS_GAMMA_E_HIGH_LB_MIN (0)</td>
++ <td>@ref LVHF_DENS_GAMMA_E_HIGH_LB_DEFAULT (512)</td>
++ <td>@ref LVHF_DENS_GAMMA_E_HIGH_LB_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 DENS_gamma_e_high_LB; ///< FE Echo subtraction LB
++
++ /**
++ Echo subtraction factor applied during double talk for the LB.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>7.8</td>
++ <td>@ref LVHF_DENS_GAMMA_E_DT_LB_MIN (0)</td>
++ <td>@ref LVHF_DENS_GAMMA_E_DT_LB_DEFAULT (256)</td>
++ <td>@ref LVHF_DENS_GAMMA_E_DT_LB_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 DENS_gamma_e_dt_LB; ///< DT Echo subtraction factor LB
++
++ /**
++ Echo subtraction factor applied during nearend-only for the LB.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>7.8</td>
++ <td>@ref LVHF_DENS_GAMMA_E_LOW_LB_MIN (0)</td>
++ <td>@ref LVHF_DENS_GAMMA_E_LOW_LB_DEFAULT (256)</td>
++ <td>@ref LVHF_DENS_GAMMA_E_LOW_LB_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 DENS_gamma_e_low_LB; ///< NE Echo subtraction factor LB
++
++ /**
++ The amount of extra non-linear suppression relative to the maximum linear echo
++ suppression for the LB. The use of these non-linear echo suppression mechanisms
++ should be avoided as much as possible since it affects the double talk
++ performance.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>4.11</td>
++ <td>@ref LVHF_DENS_NL_ATTEN_LB_MIN (0)</td>
++ <td>@ref LVHF_DENS_NL_ATTEN_LB_DEFAULT (0)</td>
++ <td>@ref LVHF_DENS_NL_ATTEN_LB_MAX (2048)</td>
++ </tr>
++ </table> */
++ LVM_INT16 DENS_NL_atten_LB; ///< LB Non linear attenuation
++
++ /**
++ Parameter related to the reverberation of the acoustic environment. It
++ represents the decay in time of the energy of the echo tail of the impulse
++ response for the HB.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVHF_DENS_TAIL_ALPHA_HB_MIN (0)</td>
++ <td>@ref LVHF_DENS_TAIL_ALPHA_HB_DEFAULT (25395)</td>
++ <td>@ref LVHF_DENS_TAIL_ALPHA_HB_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 DENS_tail_alpha_HB;
++ /**
++ Parameter related to the portion of the echo tail that has to be extrapolated
++ in time for HB.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVHF_DENS_TAIL_PORTION_HB_MIN (0)</td>
++ <td>@ref LVHF_DENS_TAIL_PORTION_HB_DEFAULT (29491)</td>
++ <td>@ref LVHF_DENS_TAIL_PORTION_HB_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 DENS_tail_portion_HB;
++ /**
++ Echo subtraction factor applied during farend-only for the HB.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>7.8</td>
++ <td>@ref LVHF_DENS_GAMMA_E_HIGH_HB_MIN (0)</td>
++ <td>@ref LVHF_DENS_GAMMA_E_HIGH_HB_DEFAULT (512)</td>
++ <td>@ref LVHF_DENS_GAMMA_E_HIGH_HB_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 DENS_gamma_e_high_HB; ///< FE Echo subtraction HB
++
++ /**
++ Echo subtraction factor applied during double talk for the HB.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>7.8</td>
++ <td>@ref LVHF_DENS_GAMMA_E_DT_HB_MIN (0)</td>
++ <td>@ref LVHF_DENS_GAMMA_E_DT_HB_DEFAULT (256)</td>
++ <td>@ref LVHF_DENS_GAMMA_E_DT_HB_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 DENS_gamma_e_dt_HB; ///< DT Echo subtraction factor HB
++
++ /**
++ Echo subtraction factor applied during nearend-only for the HB.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>7.8</td>
++ <td>@ref LVHF_DENS_GAMMA_E_LOW_HB_MIN (0)</td>
++ <td>@ref LVHF_DENS_GAMMA_E_LOW_HB_DEFAULT (256)</td>
++ <td>@ref LVHF_DENS_GAMMA_E_LOW_HB_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 DENS_gamma_e_low_HB; ///< NE Echo subtraction factor HB
++
++ /**
++ The amount of extra non-linear suppression relative to the maximum linear echo
++ suppression. for the HB. The use of these non-linear echo suppression
++ mechanisms should be avoided as much as possible since it affects the double
++ talk performance.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>4.11</td>
++ <td>@ref LVHF_DENS_NL_ATTEN_HB_MIN (0)</td>
++ <td>@ref LVHF_DENS_NL_ATTEN_HB_DEFAULT (0)</td>
++ <td>@ref LVHF_DENS_NL_ATTEN_HB_MAX (2048)</td>
++ </tr>
++ </table> */
++ LVM_INT16 DENS_NL_atten_HB; ///< NE Echo subtraction factor HB
++
++ /**
++ Smoothing factor applied when switching between gamma_e values.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVHF_DENS_GAMMA_E_ALPHA_MIN (0)</td>
++ <td>@ref LVHF_DENS_GAMMA_E_ALPHA_DEFAULT (24000)</td>
++ <td>@ref LVHF_DENS_GAMMA_E_ALPHA_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 DENS_gamma_e_alpha; ///< Smoothing factor for gamma_e
++
++ /**
++ Gain factor for Noise subtraction.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>7.8</td>
++ <td>@ref LVHF_DENS_GAMMA_N_MIN (0)</td>
++ <td>@ref LVHF_DENS_GAMMA_N_DEFAULT (280)</td>
++ <td>@ref LVHF_DENS_GAMMA_N_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 DENS_gamma_n; ///< Gain factor
++
++ /**
++ Threshold for nearend activity detection.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>7.8</td>
++ <td>@ref LVHF_DENS_SPDET_NEAR_MIN (0)</td>
++ <td>@ref LVHF_DENS_SPDET_NEAR_DEFAULT (512)</td>
++ <td>@ref LVHF_DENS_SPDET_NEAR_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 DENS_spdet_near;
++ /**
++ Threshold for microphone activity detection.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>7.8</td>
++ <td>@ref LVHF_DENS_SPDET_ACT_MIN (0)</td>
++ <td>@ref LVHF_DENS_SPDET_ACT_DEFAULT (768)</td>
++ <td>@ref LVHF_DENS_SPDET_ACT_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 DENS_spdet_act;
++ /**
++ The maximum amount of noise suppression. <br>
++ DENS_limit_ns = \f$32767*10^{-MaxNoiseReduction[dB]/20}\f$
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVHF_DENS_LIMIT_NS_MIN (0)</td>
++ <td>@ref LVHF_DENS_LIMIT_NS_DEFAULT (10361)</td>
++ <td>@ref LVHF_DENS_LIMIT_NS_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 DENS_limit_ns; ///< Maximum noise suppression.
++
++ /**
++ The amount of comfort noise insertion.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>1.14</td>
++ <td>@ref LVHF_DENS_CNI_GAIN_MIN (0)</td>
++ <td>@ref LVHF_DENS_CNI_GAIN_DEFAULT (16384)</td>
++ <td>@ref LVHF_DENS_CNI_GAIN_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 DENS_CNI_Gain; ///< CNI gain
++
++ /**
++ The window length (expressed in integer multiples of 10ms) for the estimation
++ of the noise components. It is recommended to keep this parameter at its
++ default value.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVHF_DENS_NFE_BLOCKSIZE_MIN (0)</td>
++ <td>@ref LVHF_DENS_NFE_BLOCKSIZE_DEFAULT (150)</td>
++ <td>@ref LVHF_DENS_NFE_BLOCKSIZE_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 DENS_NFE_blocksize; ///< NFE blocksize
++
++ /**
++ Threshold for farend activity detection.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVHF_SPDET_FAR_MIN (0)</td>
++ <td>@ref LVHF_SPDET_FAR_DEFAULT (16384)</td>
++ <td>@ref LVHF_SPDET_FAR_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 SPDET_far;
++ /**
++ Threshold for microphone activity detection.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVHF_SPDET_MIC_MIN (0)</td>
++ <td>@ref LVHF_SPDET_MIC_DEFAULT (16384)</td>
++ <td>@ref LVHF_SPDET_MIC_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 SPDET_mic;
++ /**
++ Threshold to activate the non-linear echo-suppression.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVHF_SPDET_X_CLIP_MIN (0)</td>
++ <td>@ref LVHF_SPDET_X_CLIP_DEFAULT (0)</td>
++ <td>@ref LVHF_SPDET_X_CLIP_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 SPDET_x_clip;
++ /**
++ Threshold to detect acoustical path changes.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVHF_PCD_THRESHOLD_MIN (0)</td>
++ <td>@ref LVHF_PCD_THRESHOLD_DEFAULT (20000)</td>
++ <td>@ref LVHF_PCD_THRESHOLD_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 PCD_threshold; ///< PCD threshold
++
++ /**
++ Length of the background adaptive filter. The length should be chosen such that
++ only the main peak of the impulse response is covered by the filter. The length
++ should be a multiple of 8.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>16.0</td>
++ <td>@ref LVHF_PCD_TAPS_MIN (16)</td>
++ <td>@ref LVHF_PCD_TAPS_DEFAULT (16)</td>
++ <td>@ref LVHF_PCD_TAPS_MAX (64)</td>
++ </tr>
++ </table> */
++ LVM_INT16 PCD_taps; ///< Number of taps of background NLMS.
++
++ /**
++ Adaptive step size control for the background adaptive filter.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>9.6</td>
++ <td>@ref LVHF_PCD_ERL_MIN (64)</td>
++ <td>@ref LVHF_PCD_ERL_DEFAULT (64)</td>
++ <td>@ref LVHF_PCD_ERL_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 PCD_erl; ///< Step size of background NLMS.
++
++ /**
++ If a path change is detected, NLMS_erl of the NLMS is set to this value, to
++ ensure a fast adapting filter.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>9.6</td>
++ <td>@ref LVHF_PCD_MINIMUM_ERL_MIN (64)</td>
++ <td>@ref LVHF_PCD_MINIMUM_ERL_DEFAULT (64)</td>
++ <td>@ref LVHF_PCD_MINIMUM_ERL_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 PCD_minimum_erl; ///< Step size of NLMS after PCD.
++
++ /**
++ After a path change the NLMS_erl of the NLMS increases back to the nominal
++ value. The speed to increase can be controlled by this parameter.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>1.14</td>
++ <td>@ref LVHF_PCD_ERL_STEP_MIN (16384)</td>
++ <td>@ref LVHF_PCD_ERL_STEP_DEFAULT (16800)</td>
++ <td>@ref LVHF_PCD_ERL_STEP_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 PCD_erl_step; ///< Step of ERL increase after PCD.
++
++ /**
++ Gain factor applied to the echo subtraction during acoustical path change.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>7.8</td>
++ <td>@ref LVHF_PCD_GAMMA_E_RESCUE_MIN (0)</td>
++ <td>@ref LVHF_PCD_GAMMA_E_RESCUE_DEFAULT (5000)</td>
++ <td>@ref LVHF_PCD_GAMMA_E_RESCUE_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 PCD_gamma_e_rescue; ///< gamma_e after PCD
++
++} LVHF_ControlParams_st;
++
++/**
++* The control parameters are used to control the overall module behavior. These parameters may
++* be changed at any time during processing using the LVBD_SetControlParameters function but they
++* will not take effect until the next call to the LVBD_Process function.
++*
++* @see LVBD_SetControlParameters
++* @see LVBD_Process
++*/
++typedef struct
++{
++ /**
++ Set Bulk Delay operating mode on/off.
++ */
++ LVM_Mode_en BD_OperatingMode; ///< Set Bulk Delay operating mode on/off
++
++ /**
++ This parameter compensates for the fixed delay in the echo path and can be
++ measured in advance. This delay is caused by the audio I/O buffering, AD/DA
++ converter and propagation time between the loudspeaker and microphone. The unit
++ of 'BulkDelay' is [number of samples] at the respective sampling rate.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>16.0</td>
++ <td>@ref LVBD_BULKDELAY_MIN (0)</td>
++ <td>@ref LVBD_BULKDELAY_DEFAULT (0)</td>
++ <td>@ref LVBD_BULKDELAY_MAX (6400)</td>
++ </tr>
++ </table> */
++ LVM_UINT16 BulkDelay; ///< Sets Bulk Delay
++
++ /**
++ This param sets the gain for the Echo reference signal. Value 8192 belong to
++ 0dB
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>2.13</td>
++ <td>@ref LVBD_BD_GAIN_MIN (0)</td>
++ <td>@ref LVBD_BD_GAIN_DEFAULT (8192)</td>
++ <td>@ref LVBD_BD_GAIN_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 BD_Gain; ///< Apply Gain to Echo reference signal
++
++} LVBD_ControlParams_st;
++
++/**
++* The control parameters are used to control the overall module behavior. These parameters may
++* be changed at any time during processing using the LVVE_Tx_SetControlParameters function but they
++* will not take effect until the next call to the LVVE_Tx_Process function.
++*
++* @see LVVE_Tx_SetControlParameters
++* @see LVVE_Tx_Process
++*/
++typedef struct
++{
++ /**
++ This enumerated type is used to set the operating mode of the Tx path. The
++ processing can be separately set to enable all processing modules (i.e., ON),
++ to disable all processing modules (i.e., OFF) or to bypass all processing
++ modules (i.e., BYPASS). When bypassed, all processing modules keep on running,
++ but their output is not used. When bypassing the Tx processing, the user can
++ select which buffer should be copied to the output buffer, if required: @li
++ Input microphone signal (or secondary microphone signal in case of
++ two-microphone setups); @li Rx reference signal; These operations ensure that
++ the input data is correctly transferred to the output buffer for all
++ combinations of input and output buffer types and input format. When OFF, the
++ input is copied to the output and the LVVE can be provided with invalid
++ parameters for modules. The sub module functions are not executed in this
++ scenario. Their combined functionality is summarized in follwoing table. <br>
++ <div align="center"> <table cellspacing="1" cellpadding="4" border="3">
++ <caption>LVVE Tx operating mode in combination with LVVE microphone routing
++ mode</caption> <tr> <th></th> <th colspan="2">MICROUTING_MODE_DEFAULT</th> <th
++ colspan="2">MICROUTING_MODE_SWAPPED</th> </tr> <tr> <th width="70"></th> <th
++ width="70">Process</th> <th width="70">Output</th> <th width="70">Process</th>
++ <th width="70">Output</th> </tr> <tr align="left"> <td>LVVE_TX_MODE_OFF</td>
++ <td>None</td> <td>Tx input 0</td> <td>None</td> <td>Tx input 1</td> </tr> <tr
++ align="left"> <td>LVVE_TX_MODE_ON</td> <td>Tx input 0</td> <td>Tx output</td>
++ <td>Tx input 1</td> <td>Tx output</td> </tr> <tr align="left">
++ <td>LVVE_TX_MODE_BYPASS_MIC0</td> <td>Tx input 0</td> <td>Tx input 0</td>
++ <td>Tx input 1</td> <td>Tx input 1</td> </tr> <tr align="left">
++ <td>LVVE_TX_MODE_BYPASS_MIC1</td> <td>Tx input 0</td> <td>Tx input 1</td>
++ <td>Tx input 1</td> <td>Tx input 0</td> </tr> <tr align="left">
++ <td>LVVE_TX_MODE_BYPASS_REF</td> <td>Tx input 0</td> <td>Tx ref input</td>
++ <td>Tx input 1</td> <td>Tx ref input</td> </tr> </table> </div>
++ */
++ LVVE_Tx_Mode_en OperatingMode; ///< TX Operating mode
++
++ /**
++ This param can mute unmute the Rx/Tx engine output.
++ */
++ LVM_Mode_en Mute; ///< This param can mute unmute the Rx/Tx engine output
++
++ /**
++ Set Bulk Delay operating mode on/off.
++ */
++ LVM_Mode_en BD_OperatingMode; ///< Set Bulk Delay operating mode on/off
++
++ /**
++ This parameter compensates for the fixed delay in the echo path and can be
++ measured in advance. This delay is caused by the audio I/O buffering, AD/DA
++ converter and propagation time between the loudspeaker and microphone. The unit
++ of 'BulkDelay' is [number of samples] at the respective sampling rate.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>16.0</td>
++ <td>@ref LVVE_TX_BULKDELAY_MIN (0)</td>
++ <td>@ref LVVE_TX_BULKDELAY_DEFAULT (0)</td>
++ <td>@ref LVVE_TX_BULKDELAY_MAX (6400)</td>
++ </tr>
++ </table> */
++ LVM_UINT16 BulkDelay; ///< Sets Bulk Delay
++
++ /**
++ This param sets the gain for the Echo reference signal. Value 8192 belong to
++ 0dB
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>2.13</td>
++ <td>@ref LVVE_TX_BD_GAIN_MIN (0)</td>
++ <td>@ref LVVE_TX_BD_GAIN_DEFAULT (8192)</td>
++ <td>@ref LVVE_TX_BD_GAIN_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 BD_Gain; ///< Apply Gain to Echo reference signal
++
++ /**
++ Turns on/off VOL_Gain.
++ */
++ LVM_Mode_en VOL_OperatingMode; ///< Turns on/off VOL_Gain
++
++ /**
++ The volume control gain can be used to set the overall volume level of the
++ signal. The gain is set in dB with steps of 1dB.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>15.0</td>
++ <td>@ref LVVE_TX_VOL_GAIN_MIN (-96)</td>
++ <td>@ref LVVE_TX_VOL_GAIN_DEFAULT (0)</td>
++ <td>@ref LVVE_TX_VOL_GAIN_MAX (24)</td>
++ </tr>
++ </table> */
++ LVM_INT16 VOL_Gain; ///< Apply Gain to Input signal
++
++ /**
++ Turns on/off High Pass filter.
++ */
++ LVM_Mode_en HPF_OperatingMode; ///< Turns on/off High Pass filter
++
++ /**
++ Sets the 3dB corner frequency of the high-pass filter. In case NoiseVoid is
++ enabled, the same high-pass filter will be applied to the second microphone
++ channel.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>16.0</td>
++ <td>@ref LVVE_TX_MIC_HPF_CORNERFREQ_MIN (50)</td>
++ <td>@ref LVVE_TX_MIC_HPF_CORNERFREQ_DEFAULT (50)</td>
++ <td>@ref LVVE_TX_MIC_HPF_CORNERFREQ_MAX (1500)</td>
++ </tr>
++ </table> */
++ LVM_UINT16 MIC_HPF_CornerFreq; ///< High Pass Filter Corner Frequency in Hz
++
++ /**
++ HandsFree Control Parameter Strcuture.
++ */
++ LVHF_ControlParams_st HF_ControlParams; ///< HandsFree Control Parameter Structure
++
++ /**
++ NoiseVoid Control Parameter Structure.
++ */
++ LVNV_ControlParams_st NV_ControlParams; ///< NoiseVoid Control Parameter Structure
++
++ /**
++ WhisperMode Control Parameter Structure.
++ */
++ LVWM_ControlParams_st WM_ControlParams; ///< WhisperMode Control Parameter Structure
++
++ /**
++ Equalizer Operating mode.
++ */
++ LVM_Mode_en EQ_OperatingMode; ///< Equalizer Operating mode
++
++ /**
++ Equalizer Control Parameter Structure.
++ */
++ LVEQ_ControlParams_st EQ_ControlParams; ///< Equalizer Control Parameters Structure
++
++ /**
++ DRC Control Parameter Structure.
++ */
++ LVDRC_ControlParams_st DRC_ControlParams; ///< DRC Control Parameter Structure
++
++} LVVE_Tx_ControlParams_st;
++
++
++
++/*[Begin] [lvwenhua-2012/3/12]*/
++#define LVVC_VOLUME_NUM 12
++
++typedef struct
++{
++ LVM_INT16 NoiseSensitivity[LVVC_VOLUME_NUM];
++} LVVC_NoiseSens_st;
++/*[End] [lvwenhua-2012/3/12]*/
++
++/*[Begin] [lvwenhua-2011/8/23]*/
++typedef struct
++{
++ LVVE_Tx_ControlParams_st Tx_ControlParams;
++ LVVE_Rx_ControlParams_st Rx_ControlParams;
++ LVEQ_Coefs_st TxEqCoefs;
++ LVEQ_Coefs_st RxEqCoefs;
++ /*[Begin] [lvwenhua-2012/3/12]*/
++ LVVC_NoiseSens_st RxVcNoiseSens;
++ /*[End] [lvwenhua-2012/3/12]*/
++} LVVE_ControlParams_st;
++typedef struct
++{
++ LVM_UINT32 isVpParamInNv;
++ LVVE_ControlParams_st Handset_ControlParams;
++ LVVE_ControlParams_st Handsfree_ControlParams;
++ LVVE_ControlParams_st Headset_ControlParams;
++ LVVE_ControlParams_st Bluetooth_ControlParams;
++} LVVE_ControlParams_All_st;
++/*[End] [lvwenhua-2011/8/23]*/
++
++
++
++
++
++
++
++#ifdef __cplusplus
++}
++#endif /* __cplusplus */
++
++#endif /* __REL_LVVE_HF_NV1_VC_AGC_RX_DRC_RX_WB_VIDPP_H__ */
++
++/* End of file */
+diff --git a/Uboot/cp/ps/driver/src/chipsets/src/audio_base/nxp/tos/PARAM_Default.h b/Uboot/cp/ps/driver/src/chipsets/src/audio_base/nxp/tos/PARAM_Default.h
+new file mode 100755
+index 0000000..857327b
+--- /dev/null
++++ b/Uboot/cp/ps/driver/src/chipsets/src/audio_base/nxp/tos/PARAM_Default.h
+@@ -0,0 +1,213 @@
++static LVM_CHAR LVVE_Tx_Preset_Buffer_Voice_Tool[] ={
++0x03, 0x00, 0x09, 0x18, 0x03, 0xD5, 0x07, 0x00, 0x00, 0xBD, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00,
++0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x11, 0x00, 0x00, 0x00,
++0x20, 0x00, 0x08, 0x00, 0x00, 0x40, 0x00, 0x00, 0x20, 0x80, 0x00, 0x40, 0x00, 0x00, 0x20, 0x80,
++0x00, 0x01, 0x00, 0xFF, 0x02, 0x33, 0x63, 0x33, 0x73, 0x00, 0x02, 0x00, 0x01, 0x00, 0x01, 0x00,
++0x00, 0x33, 0x63, 0x33, 0x73, 0x00, 0x02, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0xC0, 0x5D, 0x18,
++0x01, 0x00, 0x02, 0x00, 0x03, 0x79, 0x28, 0x00, 0x40, 0x96, 0x00, 0x00, 0x40, 0x00, 0x40, 0x00,
++0x00, 0x20, 0x4E, 0x10, 0x00, 0x40, 0x00, 0x40, 0x00, 0xA0, 0x41, 0x88, 0x13, 0x00, 0x00, 0x00,
++0x00, 0xF7, 0x49, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x20, 0x00, 0x08, 0x20, 0x00, 0x00,
++0x20, 0xE8, 0x03, 0x18, 0x00, 0x00, 0x20, 0xE8, 0x03, 0x00, 0x00, 0x08, 0x03, 0x20, 0x00, 0x00,
++0x20, 0xE8, 0x03, 0x18, 0x00, 0x00, 0x20, 0xE8, 0x03, 0x00, 0x00, 0x08, 0x03, 0x96, 0x00, 0xFF,
++0x7F, 0x9A, 0x19, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x10, 0x00, 0x8F, 0x02, 0x00, 0x04, 0x10, 0x00, 0x66, 0x06, 0x00, 0x01, 0x66,
++0x06, 0x00, 0x40, 0x00, 0x20, 0xE0, 0x2E, 0x58, 0x1B, 0x00, 0x01, 0xCE, 0x2C, 0x00, 0x40, 0x84,
++0x2B, 0x9A, 0x19, 0x66, 0x26, 0x00, 0x01, 0x00, 0x30, 0x00, 0x24, 0x40, 0x01, 0xE6, 0x00, 0x65,
++0x66, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x40, 0x80, 0x00, 0xFD, 0x1F, 0xB0, 0x63, 0xAD,
++0x7F, 0x9D, 0x5A, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05,
++0x00, 0xA0, 0xFF, 0xBA, 0xFF, 0xCE, 0xFF, 0xE8, 0xFF, 0x00, 0x00, 0xA0, 0xFF, 0xBA, 0xFF, 0xDA,
++0xFF, 0xF4, 0xFF, 0x00, 0x00, 0x32, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
++};
++static LVM_CHAR LVVE_Rx_Preset_Buffer_Voice_Tool []={
++0x03, 0x00, 0x09, 0x18, 0x03, 0xD5, 0x07, 0x00, 0x00, 0xBD, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x2A, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06,
++0x05, 0x20, 0x4E, 0x00, 0x40, 0x00, 0x01, 0x00, 0x20, 0x00, 0x02, 0x17, 0x2F, 0x5C, 0x7F, 0xB9,
++0x7E, 0x82, 0x5A, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05,
++0x00, 0xA0, 0xFF, 0xBA, 0xFF, 0xCE, 0xFF, 0xE8, 0xFF, 0x00, 0x00, 0xA0, 0xFF, 0xBA, 0xFF, 0xDA,
++0xFF, 0xF4, 0xFF, 0x00, 0x00, 0x32, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x40, 0x80, 0x00, 0xFD,
++0x1F, 0xB0, 0x63, 0xAD, 0x7F, 0x9D, 0x5A, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0xB0,
++0xFF, 0xBA, 0xFF, 0xCE, 0xFF, 0xE8, 0xFF, 0x00, 0x00, 0xA0, 0xFF, 0xB0, 0xFF, 0xCE, 0xFF, 0xE8,
++0xFF, 0x00, 0x00, 0x32, 0x00, 0x32, 0x00, 0x03, 0x00, 0x09, 0x18, 0x03, 0xD5, 0x07, 0x00, 0x00,
++0xBD, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0xE0, 0x2A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x05, 0x20, 0x4E, 0x00, 0x40, 0x00, 0x01, 0x00, 0x20,
++0x00, 0x02, 0x17, 0x2F, 0x5C, 0x7F, 0xB9, 0x7E, 0x82, 0x5A, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00,
++0x20, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0xA0, 0xFF, 0xBA, 0xFF, 0xCE, 0xFF, 0xE8, 0xFF,
++0x00, 0x00, 0xA0, 0xFF, 0xBA, 0xFF, 0xDA, 0xFF, 0xF4, 0xFF, 0x00, 0x00, 0x32, 0x00, 0x32, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x07, 0x00, 0x00, 0x40, 0x80, 0x00, 0xFD, 0x1F, 0xB0, 0x63, 0xAD, 0x7F, 0x9D, 0x5A, 0x00, 0x24,
++0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0xB0, 0xFF, 0xBA, 0xFF, 0xCE, 0xFF, 0xE8, 0xFF, 0x00, 0x00,
++0xA0, 0xFF, 0xB0, 0xFF, 0xCE, 0xFF, 0xE8, 0xFF, 0x00, 0x00, 0x32, 0x00, 0x32, 0x00, 0x03, 0x00,
++0x09, 0x18, 0x03, 0xD5, 0x07, 0x00, 0x00, 0xBD, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x2A, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x05, 0x20,
++0x4E, 0x00, 0x40, 0x00, 0x01, 0x00, 0x20, 0x00, 0x02, 0x17, 0x2F, 0x5C, 0x7F, 0xB9, 0x7E, 0x82,
++0x5A, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0xA0,
++0xFF, 0xBA, 0xFF, 0xCE, 0xFF, 0xE8, 0xFF, 0x00, 0x00, 0xA0, 0xFF, 0xBA, 0xFF, 0xDA, 0xFF, 0xF4,
++0xFF, 0x00, 0x00, 0x32, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x40, 0x80, 0x00, 0xFD, 0x1F, 0xB0,
++0x63, 0xAD, 0x7F, 0x9D, 0x5A, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0xB0, 0xFF, 0xBA,
++0xFF, 0xCE, 0xFF, 0xE8, 0xFF, 0x00, 0x00, 0xA0, 0xFF, 0xB0, 0xFF, 0xCE, 0xFF, 0xE8, 0xFF, 0x00,
++0x00, 0x32, 0x00, 0x32, 0x00, 0x03, 0x00, 0x09, 0x18, 0x03, 0xD5, 0x07, 0x00, 0x00, 0xBD, 0x02,
++0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x06,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0xE0, 0x2A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x06, 0x05, 0x20, 0x4E, 0x00, 0x40, 0x00, 0x01, 0x00, 0x20, 0x00, 0x02,
++0x17, 0x2F, 0x5C, 0x7F, 0xB9, 0x7E, 0x82, 0x5A, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00,
++0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0xA0, 0xFF, 0xBA, 0xFF, 0xCE, 0xFF, 0xE8, 0xFF, 0x00, 0x00,
++0xA0, 0xFF, 0xBA, 0xFF, 0xDA, 0xFF, 0xF4, 0xFF, 0x00, 0x00, 0x32, 0x00, 0x32, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00,
++0x00, 0x40, 0x80, 0x00, 0xFD, 0x1F, 0xB0, 0x63, 0xAD, 0x7F, 0x9D, 0x5A, 0x00, 0x24, 0x00, 0x00,
++0x00, 0x00, 0x05, 0x00, 0xB0, 0xFF, 0xBA, 0xFF, 0xCE, 0xFF, 0xE8, 0xFF, 0x00, 0x00, 0xA0, 0xFF,
++0xB0, 0xFF, 0xCE, 0xFF, 0xE8, 0xFF, 0x00, 0x00, 0x32, 0x00, 0x32, 0x00, 0x03, 0x00, 0x09, 0x18,
++0x03, 0xD5, 0x07, 0x00, 0x00, 0xBD, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x2A, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x05, 0x20, 0x4E, 0x00,
++0x40, 0x00, 0x01, 0x00, 0x20, 0x00, 0x02, 0x17, 0x2F, 0x5C, 0x7F, 0xB9, 0x7E, 0x82, 0x5A, 0x00,
++0x04, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0xA0, 0xFF, 0xBA,
++0xFF, 0xCE, 0xFF, 0xE8, 0xFF, 0x00, 0x00, 0xA0, 0xFF, 0xBA, 0xFF, 0xDA, 0xFF, 0xF4, 0xFF, 0x00,
++0x00, 0x32, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x40, 0x80, 0x00, 0xFD, 0x1F, 0xB0, 0x63, 0xAD,
++0x7F, 0x9D, 0x5A, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0xB0, 0xFF, 0xBA, 0xFF, 0xCE,
++0xFF, 0xE8, 0xFF, 0x00, 0x00, 0xA0, 0xFF, 0xB0, 0xFF, 0xCE, 0xFF, 0xE8, 0xFF, 0x00, 0x00, 0x32,
++0x00, 0x32, 0x00, 0x03, 0x00, 0x09, 0x18, 0x03, 0xD5, 0x07, 0x00, 0x00, 0xBD, 0x02, 0x00, 0x00,
++0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x06, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0xE0, 0x2A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x06, 0x05, 0x20, 0x4E, 0x00, 0x40, 0x00, 0x01, 0x00, 0x20, 0x00, 0x02, 0x17, 0x2F,
++0x5C, 0x7F, 0xB9, 0x7E, 0x82, 0x5A, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x10,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x05, 0x00, 0xA0, 0xFF, 0xBA, 0xFF, 0xCE, 0xFF, 0xE8, 0xFF, 0x00, 0x00, 0xA0, 0xFF,
++0xBA, 0xFF, 0xDA, 0xFF, 0xF4, 0xFF, 0x00, 0x00, 0x32, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x40,
++0x80, 0x00, 0xFD, 0x1F, 0xB0, 0x63, 0xAD, 0x7F, 0x9D, 0x5A, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00,
++0x05, 0x00, 0xB0, 0xFF, 0xBA, 0xFF, 0xCE, 0xFF, 0xE8, 0xFF, 0x00, 0x00, 0xA0, 0xFF, 0xB0, 0xFF,
++0xCE, 0xFF, 0xE8, 0xFF, 0x00, 0x00, 0x32, 0x00, 0x32, 0x00
++};
++
++static LVM_CHAR LVVE_Tx_Mute_File_Buffer[] ={
++0x03, 0x00, 0x09, 0x18, 0x03, 0xD5, 0x07, 0x00, 0x00, 0xBD, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00,
++0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x11, 0x00, 0x00, 0x00,
++0x20, 0x00, 0x08, 0x00, 0x00, 0x40, 0x00, 0x00, 0x20, 0x80, 0x00, 0x40, 0x00, 0x00, 0x20, 0x80,
++0x00, 0x01, 0x00, 0xFF, 0x02, 0x33, 0x63, 0x33, 0x73, 0x00, 0x02, 0x00, 0x01, 0x00, 0x01, 0x00,
++0x00, 0x33, 0x63, 0x33, 0x73, 0x00, 0x02, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0xC0, 0x5D, 0x18,
++0x01, 0x00, 0x02, 0x00, 0x03, 0x79, 0x28, 0x00, 0x40, 0x96, 0x00, 0x00, 0x40, 0x00, 0x40, 0x00,
++0x00, 0x20, 0x4E, 0x10, 0x00, 0x40, 0x00, 0x40, 0x00, 0xA0, 0x41, 0x88, 0x13, 0x00, 0x00, 0x00,
++0x00, 0xF7, 0x49, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x20, 0x00, 0x08, 0x20, 0x00, 0x00,
++0x20, 0xE8, 0x03, 0x18, 0x00, 0x00, 0x20, 0xE8, 0x03, 0x00, 0x00, 0x08, 0x03, 0x20, 0x00, 0x00,
++0x20, 0xE8, 0x03, 0x18, 0x00, 0x00, 0x20, 0xE8, 0x03, 0x00, 0x00, 0x08, 0x03, 0x96, 0x00, 0xFF,
++0x7F, 0x9A, 0x19, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x10, 0x00, 0x8F, 0x02, 0x00, 0x04, 0x10, 0x00, 0x66, 0x06, 0x00, 0x01, 0x66,
++0x06, 0x00, 0x40, 0x00, 0x20, 0xE0, 0x2E, 0x58, 0x1B, 0x00, 0x01, 0xCE, 0x2C, 0x00, 0x40, 0x84,
++0x2B, 0x9A, 0x19, 0x66, 0x26, 0x00, 0x01, 0x00, 0x30, 0x00, 0x24, 0x40, 0x01, 0xE6, 0x00, 0x65,
++0x66, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x40, 0x80, 0x00, 0xFD, 0x1F, 0xB0, 0x63, 0xAD,
++0x7F, 0x9D, 0x5A, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05,
++0x00, 0xA0, 0xFF, 0xBA, 0xFF, 0xCE, 0xFF, 0xE8, 0xFF, 0x00, 0x00, 0xA0, 0xFF, 0xBA, 0xFF, 0xDA,
++0xFF, 0xF4, 0xFF, 0x00, 0x00, 0x32, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
++};
++static LVM_CHAR LVVE_Tx_Wb_Mute_File_Buffer[] ={
++0x03, 0x00, 0x09, 0x18, 0x03, 0xD5, 0x07, 0x00, 0x00, 0xBD, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00,
++0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x11, 0x00, 0x00, 0x00,
++0x20, 0x00, 0x08, 0x00, 0x00, 0x40, 0x00, 0x00, 0x20, 0x80, 0x00, 0x40, 0x00, 0x00, 0x20, 0x80,
++0x00, 0x01, 0x00, 0xFF, 0x02, 0x33, 0x63, 0x33, 0x73, 0x00, 0x02, 0x00, 0x01, 0x00, 0x01, 0x00,
++0x00, 0x33, 0x63, 0x33, 0x73, 0x00, 0x02, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0xC0, 0x5D, 0x18,
++0x01, 0x00, 0x02, 0x00, 0x03, 0x79, 0x28, 0x00, 0x40, 0x96, 0x00, 0x00, 0x40, 0x00, 0x40, 0x00,
++0x00, 0x20, 0x4E, 0x10, 0x00, 0x40, 0x00, 0x40, 0x00, 0xA0, 0x41, 0x88, 0x13, 0x00, 0x00, 0x00,
++0x00, 0xF7, 0x49, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x20, 0x00, 0x08, 0x20, 0x00, 0x00,
++0x20, 0xE8, 0x03, 0x18, 0x00, 0x00, 0x20, 0xE8, 0x03, 0x00, 0x00, 0x08, 0x03, 0x20, 0x00, 0x00,
++0x20, 0xE8, 0x03, 0x18, 0x00, 0x00, 0x20, 0xE8, 0x03, 0x00, 0x00, 0x08, 0x03, 0x96, 0x00, 0xFF,
++0x7F, 0x9A, 0x19, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x10, 0x00, 0x8F, 0x02, 0x00, 0x04, 0x10, 0x00, 0x66, 0x06, 0x00, 0x01, 0x66,
++0x06, 0x00, 0x40, 0x00, 0x20, 0xE0, 0x2E, 0x58, 0x1B, 0x00, 0x01, 0xCE, 0x2C, 0x00, 0x40, 0x84,
++0x2B, 0x9A, 0x19, 0x66, 0x26, 0x00, 0x01, 0x00, 0x30, 0x00, 0x24, 0x40, 0x01, 0xE6, 0x00, 0x65,
++0x66, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x40, 0x80, 0x00, 0xFD, 0x1F, 0xB0, 0x63, 0xAD,
++0x7F, 0x9D, 0x5A, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05,
++0x00, 0xA0, 0xFF, 0xBA, 0xFF, 0xCE, 0xFF, 0xE8, 0xFF, 0x00, 0x00, 0xA0, 0xFF, 0xBA, 0xFF, 0xDA,
++0xFF, 0xF4, 0xFF, 0x00, 0x00, 0x32, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
++};
+diff --git a/Uboot/cp/ps/driver/src/chipsets/src/audio_base/nxp/tos/audio_process.a b/Uboot/cp/ps/driver/src/chipsets/src/audio_base/nxp/tos/audio_process.a
+new file mode 100755
+index 0000000..449febf
+--- /dev/null
++++ b/Uboot/cp/ps/driver/src/chipsets/src/audio_base/nxp/tos/audio_process.a
+Binary files differ
+diff --git a/Uboot/cp/ps/driver/src/chipsets/src/audio_base/nxp/tos/nxp_DrvNvData.h b/Uboot/cp/ps/driver/src/chipsets/src/audio_base/nxp/tos/nxp_DrvNvData.h
+new file mode 100755
+index 0000000..418c259
+--- /dev/null
++++ b/Uboot/cp/ps/driver/src/chipsets/src/audio_base/nxp/tos/nxp_DrvNvData.h
+@@ -0,0 +1,6 @@
++//6 level volume
++//add by zhanglixia
++//#define LVWM_TX_FILE_SIZE 463 //×Ö½ÚÊý
++//#define LVWM_RX_FILE_SIZE 1866
++
++//const static LVM_CHAR LVVE_Param_Test[] ={};
+diff --git a/Uboot/cp/ps/driver/src/chipsets/src/audio_base/nxp/uclinux/LVC_Types.h b/Uboot/cp/ps/driver/src/chipsets/src/audio_base/nxp/uclinux/LVC_Types.h
+new file mode 100755
+index 0000000..14efe8c
+--- /dev/null
++++ b/Uboot/cp/ps/driver/src/chipsets/src/audio_base/nxp/uclinux/LVC_Types.h
+@@ -0,0 +1,383 @@
++/************************************************************************/
++/* Copyright (c) 2004-2014 NXP Software. All rights are reserved. */
++/* Reproduction in whole or in part is prohibited without the prior */
++/* written consent of the copyright owner. */
++/* */
++/* This software and any compilation or derivative thereof is and */
++/* shall remain the proprietary information of NXP Software and is */
++/* highly confidential in nature. Any and all use hereof is restricted */
++/* and is subject to the terms and conditions set forth in the */
++/* software license agreement concluded with NXP Software. */
++/* */
++/* Under no circumstances is this software or any derivative thereof */
++/* to be combined with any Open Source Software in any way or */
++/* licensed under any Open License Terms without the express prior */
++/* written permission of NXP Software. */
++/* */
++/* For the purpose of this clause, the term Open Source Software means */
++/* any software that is licensed under Open License Terms. Open */
++/* License Terms means terms in any license that require as a */
++/* condition of use, modification and/or distribution of a work */
++/* */
++/* 1. the making available of source code or other materials */
++/* preferred for modification, or */
++/* */
++/* 2. the granting of permission for creating derivative */
++/* works, or */
++/* */
++/* 3. the reproduction of certain notices or license terms */
++/* in derivative works or accompanying documentation, or */
++/* */
++/* 4. the granting of a royalty-free license to any party */
++/* under Intellectual Property Rights */
++/* */
++/* regarding the work and/or any work that contains, is combined with, */
++/* requires or otherwise is based on the work. */
++/* */
++/* This software is provided for ease of recompilation only. */
++/* Modification and reverse engineering of this software are strictly */
++/* prohibited. */
++/* */
++/************************************************************************/
++
++/****************************************************************************************
++
++ $Author: beq07720 $
++ $Revision: 55357 $
++ $Date: 2014-03-05 22:16:13 +0530 (Wed, 05 Mar 2014) $
++
++*****************************************************************************************/
++
++/** @file
++ * Header file defining the standard LifeVibes types for use in the application layer
++ * interface of all LifeVibes modules
++ */
++
++#ifndef LVM_TYPES_H
++#define LVM_TYPES_H
++
++#ifdef __cplusplus
++extern "C" {
++#endif /* __cplusplus */
++
++/****************************************************************************************/
++/* */
++/* definitions */
++/* */
++/****************************************************************************************/
++
++#define LVM_NULL 0 ///< NULL pointer
++
++#define LVM_TRUE 1 ///< Boolean True
++#define LVM_FALSE 0 ///< Boolean False
++
++#define LVM_MAXINT_8 127 ///< Maximum positive integer size
++#define LVM_MAXINT_16 32767 ///< Maximum signed int 16 bits number
++#define LVM_MAXINT_32 2147483647 ///< Maximum signed int 32 bits number
++#define LVM_MAXUINT_32 4294967295U ///< Maximum un-signed int 32 bits number
++
++#if ( defined(VARIANT_24BIT) )
++#define LVM_MAXENUM 8388607L ///< Maximum value for enumerator
++#else
++#define LVM_MAXENUM 2147483647 ///< Maximum value for enumerator
++#endif
++
++#define LVM_MODULEID_MASK 0xFF00 ///< Mask to extract the calling module ID from callbackId
++#define LVM_EVENTID_MASK 0x00FF ///< Mask to extract the callback event from callbackId
++
++/* Memory table*/
++#define LVM_MEMREGION_PERSISTENT_SLOW_DATA 0 ///< Offset to the instance memory region
++#define LVM_MEMREGION_PERSISTENT_FAST_DATA 1 ///< Offset to the persistent data memory region
++#define LVM_MEMREGION_PERSISTENT_FAST_COEF 2 ///< Offset to the persistent coefficient memory region
++#define LVM_MEMREGION_TEMPORARY_FAST 3 ///< Offset to temporary memory region
++
++#define LVM_NR_MEMORY_REGIONS 4 ///< Number of memory regions
++
++#define LVM_MODE_LVWIREFORMAT_LENGTH (4) ///< Number of bytes to encode @ref LVM_Mode_en in LVWireFormat
++#define LVM_CONFIG_LVWIREFORMAT_LENGTH (4) ///< Number of bytes to encode @ref LVM_Config_en in LVWireFormat
++#define LVM_FS_LVWIREFORMAT_LENGTH (4) ///< Number of bytes to encode @ref LVM_Fs_en sample Rate in LVWireFormat
++
++#define LVM_CHAR_LVWIREFORMAT_LENGTH (1)
++#define LVM_INT8_LVWIREFORMAT_LENGTH (1)
++#define LVM_UINT8_LVWIREFORMAT_LENGTH (1)
++
++#define LVM_INT16_LVWIREFORMAT_LENGTH (2)
++#define LVM_UINT16_LVWIREFORMAT_LENGTH (2)
++
++#define LVM_INT32_LVWIREFORMAT_LENGTH (4)
++#define LVM_UINT32_LVWIREFORMAT_LENGTH (4)
++
++
++/****************************************************************************************/
++/* */
++/* Basic types */
++/* */
++/****************************************************************************************/
++
++#if defined(CORE_TIC64)
++typedef char LVM_CHAR; ///< ASCII character
++
++typedef char LVM_INT8; ///< Signed 8-bit word
++typedef unsigned char LVM_UINT8; ///< Unsigned 8-bit word
++
++typedef short LVM_INT16; ///< Signed 16-bit word
++typedef unsigned short LVM_UINT16; ///< Unsigned 16-bit word
++
++typedef int LVM_INT32; ///< Signed 32-bit word
++typedef unsigned int LVM_UINT32; ///< Unsigned 32-bit word
++#else
++
++#if ( defined(VARIANT_FRAC16) || defined (VARIANT_REFREAL16) )
++typedef long DATATYPE; ///< long data type
++
++typedef char LVM_CHAR; ///< ASCII character
++
++typedef char LVM_INT8; ///< Signed 8-bit word
++typedef unsigned char LVM_UINT8; ///< Unsigned 8-bit word
++
++typedef long LVM_INT16; ///< Signed 16-bit word
++typedef long LVM_UINT16; ///< Unsigned 16-bit word
++
++typedef long LVM_INT32; ///< Signed 32-bit word
++typedef long LVM_UINT32; ///< Unsigned 32-bit word
++
++#else
++typedef char LVM_CHAR; ///< ASCII character
++
++typedef char LVM_INT8; ///< Signed 8-bit word
++typedef unsigned char LVM_UINT8; ///< Unsigned 8-bit word
++
++typedef short LVM_INT16; ///< Signed 16-bit word
++typedef unsigned short LVM_UINT16; ///< Unsigned 16-bit word
++
++typedef long LVM_INT32; ///< Signed 32-bit word
++typedef unsigned long LVM_UINT32; ///< Unsigned 32-bit word
++#if ( defined(VARIANT_24BIT) )
++
++#define LVM_MAXINT_24 8388607L ///< 24 bit max int
++#define LVM_MININT_24 -8388608L ///< 24bit min int
++
++#define LVM_MAXINT_48 140737488355327LL ///< 48bit max int
++#define LVM_MININT_48 -140737488355328LL ///< 48bit min int
++
++#endif // VARIANT_24BIT
++
++#endif // VARIANT_FRAC16
++
++#endif // CORE_TIC64
++
++/****************************************************************************************/
++/* */
++/* Standard Enumerated types */
++/* */
++/****************************************************************************************/
++
++/**
++The @ref LVM_Mode_en enumerated type is used to set the operating mode of a particular feature inside the LifeVibes modules.
++The feature can be separately set to enable the feature processing (i.e., ON) or to disable all feature processing
++modules (i.e., OFF).
++*/
++typedef enum
++{
++ LVM_MODE_OFF = 0, ///< LVM module disabled
++ LVM_MODE_ON = 1, ///< LVM module enabled
++ LVM_MODE_DUMMY = LVM_MAXENUM
++} LVM_Mode_en;
++
++/**
++Sets stream Format
++*/
++typedef enum
++{
++ LVM_STEREO = 0, ///<Stereo stream
++ LVM_MONOINSTEREO = 1, ///<Mono in stereo stream
++ LVM_MONO = 2, ///<Mono stream
++ LVM_5DOT1 = 3, ///<stream 5.1 formatted
++ LVM_7DOT1 = 4, ///<stream 7.1 formatted
++ LVM_SOURCE_DUMMY = LVM_MAXENUM
++} LVM_Format_en;
++
++/**
++Sets Speaker type
++*/
++typedef enum
++{
++ LVM_SPEAKER_MONO = 0, ///< Mono type speaker
++ LVM_SPEAKER_STEREO = 1, ///< Stereo type speaker
++ LVM_SPEAKER_DUMMY = LVM_MAXENUM
++} LVM_SpeakerType_en;
++
++/**
++Sets Word length
++*/
++typedef enum
++{
++ LVM_16_BIT = 0, ///< 16 bit word length
++ LVM_32_BIT = 1, ///< 32 bit word length
++ LVM_WORDLENGTH_DUMMY = LVM_MAXENUM
++} LVM_WordLength_en;
++
++/**
++The LVM product supports the sample rates specified in @ref LVM_Fs_en. The input and output sample rates are always the same.
++*/
++typedef enum
++{
++ LVM_FS_8000 = 0, ///< 8k sampling rate
++ LVM_FS_11025 = 1, ///< 11.025k sampling rate
++ LVM_FS_12000 = 2, ///< 12k sampling rate
++ LVM_FS_16000 = 3, ///< 16k sampling rate
++ LVM_FS_22050 = 4, ///< 22.050k sampling rate
++ LVM_FS_24000 = 5, ///< 24k sampling rate
++ LVM_FS_32000 = 6, ///< 32k sampling rate
++ LVM_FS_44100 = 7, ///< 44.1k sampling rate
++ LVM_FS_48000 = 8, ///< 48k sampling rate
++ LVM_FS_COUNT = 9, ///< Max sampling rate count
++ LVM_FS_INVALID = LVM_MAXENUM-1,
++ LVM_FS_DUMMY = LVM_MAXENUM
++} LVM_Fs_en;
++
++/**
++The enumerated type is used to select the reset mode for the module.
++@ref LVM_RESET_SOFT is used to select a soft reset (or partial reset) and @ref LVM_RESET_HARD is
++used to select a hard reset (full re-initialization).
++*/
++typedef enum
++{
++/**
++<table border>
++ <tr>
++ <td><b>Name</b></td>
++ <td><b>MODE</b></td>
++ </tr>
++ <tr>
++ <td>ResetType</td>
++ <td>@ref LVM_RESET_SOFT</td>
++ </tr>
++ <tr>
++ <td></td>
++ <td>@ref LVM_RESET_HARD</td>
++ </tr>
++</table>
++*/
++ LVM_RESET_SOFT = 0, ///< Reset type for LVM where a partial reset of the module should be performed
++ LVM_RESET_HARD = 1, ///< Reset type for LVM where a full reset of the module should be performed
++ LVM_RESET_DUMMY = LVM_MAXENUM
++} LVM_ResetType_en;
++
++/**
++The @ref LVM_MemoryTypes_en enumerated type identifies the memory region types so that they can be correctly placed in memory
++by the calling application.
++The module initially has no permanent memory storage and makes no use of persistent memory allocation internally.
++The calling application must allocate memory for the module to use.
++
++Four memory regions are required:
++@li @ref LVM_MEMREGION_PERSISTENT_SLOW_DATA : this type of memory is used to store all the control data that needs to be saved between two consecutive calls to the process function.
++@li @ref LVM_MEMREGION_PERSISTENT_FAST_DATA : this type of memory is used to store data such as filter history
++@li @ref LVM_MEMREGION_PERSISTENT_FAST_COEF : this type of memory is used to store filter coefficients.
++@li @ref LVM_MEMREGION_TEMPORARY_FAST (scratch): this type of memory is used to store temporary data. This memory can be reused by the application in between calls to the process function.
++
++This collection of memory regions forms the module instance.
++
++Typically the memory is allocated by the application dynamically; however, it can be allocated statically if required.
++The sizes of the memory regions can be found by running the GetMemoryTable functions on a simulator and noting
++the returned values. Alternatively contact NXP who can provide the figures.
++It is possible that these memory sizes will change between release versions of the library and hence the dynamic memory allocation method is preferred where possible.
++On some target platforms the placement of memory regions is critical for achieving optimal performance of the module.
++*/
++typedef enum
++{
++ LVM_PERSISTENT_SLOW_DATA = LVM_MEMREGION_PERSISTENT_SLOW_DATA, ///< Persistent slow memory region
++ LVM_PERSISTENT_FAST_DATA = LVM_MEMREGION_PERSISTENT_FAST_DATA, ///< Persistent fast memory region
++ LVM_PERSISTENT_FAST_COEF = LVM_MEMREGION_PERSISTENT_FAST_COEF, ///< Persisten fast memory for coefficient storage
++ LVM_TEMPORARY_FAST = LVM_MEMREGION_TEMPORARY_FAST, ///< Temporary fast memory region
++ LVM_MEMORYTYPE_DUMMY = LVM_MAXENUM
++} LVM_MemoryTypes_en;
++
++/**
++Sets mod of Configuration
++*/
++typedef enum
++{
++ LVM_CONFIG_HANDSET = 0, ///< Handset configuration
++ LVM_CONFIG_SPEAKERPHONE = 1, ///< Speaker mod configuration
++ LVM_CONFIG_EARPIECE = 2, ///< Earpiece configuration
++ LVM_CONFIG_DUMMY = LVM_MAXENUM
++} LVM_Config_en;
++
++/**
++The @ref LVM_MemoryRegion_st type defines a memory region by specifying its size in bytes, its region type and its base pointer.
++@see LVM_MemoryTypes_en
++*/
++#if ( defined(VARIANT_24BIT) )
++typedef struct
++{
++ LVM_INT24 Size; ///< The size of the memory region in bytes
++ LVM_MemoryTypes_en Type; ///< Type of memory region
++ void *pBaseAddress; ///< Pointer to the memory region base address
++} LVM_MemoryRegion_st;
++#else
++typedef struct
++{
++ LVM_UINT32 Size; ///< The size of the memory region in bytes
++ LVM_MemoryTypes_en Type; ///< Type of memory region
++ void *pBaseAddress; ///< Pointer to the memory region base address
++} LVM_MemoryRegion_st;
++#endif
++
++/**
++The LVM_MemoryTable_st type defines the memory requirements of the module as an array of region definitions.
++The number of required memory regions is given by the constant @ref LVM_NR_MEMORY_REGIONS
++@see LVM_MemoryRegion_st
++*/
++typedef struct
++{
++ LVM_MemoryRegion_st Region[LVM_NR_MEMORY_REGIONS]; ///< One definition of all memory regions
++} LVM_MemoryTable_st;
++
++/**
++Beats Per Minute Structure
++*/
++typedef struct
++{
++ LVM_INT16 ShortTermMinimum; ///< Beats per minute in Q9.6 format
++ LVM_INT16 ShortTermAverage; ///< Beats per minute in Q9.6 format
++ LVM_INT16 ShortTermMaximum; ///< Beats per minute in Q9.6 format
++
++ LVM_INT16 Confidence; ///< Beat confidence level: 0 = no confidence, 32767 = maximum confidence
++ LVM_INT16 Strength; ///< Beat strength level: 0 = no beat, 32767 = maximum strength beat
++ LVM_INT16 LongTermMinimum; ///< Beats per minute in Q9.6 format
++ LVM_INT16 LongTermAverage; ///< Beats per minute in Q9.6 format
++ LVM_INT16 LongTermMaximum; ///< Beats per minute in Q9.6 format
++
++} LVM_BPMModuleStats_st;
++
++
++/****************************************************************************************/
++/* */
++/* Standard Function Prototypes */
++/* */
++/****************************************************************************************/
++/**
++@brief General purpose callback function
++
++@param pCallbackData Pointer to the callback data structure
++@param pGeneralPurpose General purpose pointer (e.g. to a data structure needed in the callback)
++@param PresetLength General purpose variable (e.g. to be used as callback ID)
++@return \ref LVM_INT32
++*/
++typedef LVM_INT32 (*LVM_Callback)(void *pCallbackData,
++ void *pGeneralPurpose,
++ LVM_INT16 GeneralPurpose );
++
++
++/****************************************************************************************/
++/* */
++/* End of file */
++/* */
++/****************************************************************************************/
++
++#ifdef __cplusplus
++}
++#endif /* __cplusplus */
++
++#endif /* LVM_TYPES_H */
+diff --git a/Uboot/cp/ps/driver/src/chipsets/src/audio_base/nxp/uclinux/LVVE.h b/Uboot/cp/ps/driver/src/chipsets/src/audio_base/nxp/uclinux/LVVE.h
+new file mode 100755
+index 0000000..9c48d8e
+--- /dev/null
++++ b/Uboot/cp/ps/driver/src/chipsets/src/audio_base/nxp/uclinux/LVVE.h
+@@ -0,0 +1,1371 @@
++/****************************************************************************************/
++/* Copyright (c) 2004-2014 NXP Software. All rights are reserved. */
++/* Reproduction in whole or in part is prohibited without the prior */
++/* written consent of the copyright owner. */
++/* */
++/* This software and any compilation or derivative thereof is and */
++/* shall remain the proprietary information of NXP Software and is */
++/* highly confidential in nature. Any and all use hereof is restricted */
++/* and is subject to the terms and conditions set forth in the */
++/* software license agreement concluded with NXP Software. */
++/* */
++/* Under no circumstances is this software or any derivative thereof */
++/* to be combined with any Open Source Software in any way or */
++/* licensed under any Open License Terms without the express prior */
++/* written permission of NXP Software. */
++/* */
++/* For the purpose of this clause, the term Open Source Software means */
++/* any software that is licensed under Open License Terms. Open */
++/* License Terms means terms in any license that require as a */
++/* condition of use, modification and/or distribution of a work */
++/* */
++/* 1. the making available of source code or other materials */
++/* preferred for modification, or */
++/* */
++/* 2. the granting of permission for creating derivative */
++/* works, or */
++/* */
++/* 3. the reproduction of certain notices or license terms */
++/* in derivative works or accompanying documentation, or */
++/* */
++/* 4. the granting of a royalty-free license to any party */
++/* under Intellectual Property Rights */
++/* */
++/* regarding the work and/or any work that contains, is combined with, */
++/* requires or otherwise is based on the work. */
++/* */
++/* This software is provided for ease of recompilation only. */
++/* Modification and reverse engineering of this software are strictly */
++/* prohibited. */
++/* */
++/****************************************************************************************/
++
++/****************************************************************************************/
++/* */
++/* $Author: nxp65285 $*/
++/* $Revision: 56908 $*/
++/* $Date: 2014-04-10 17:30:02 +0530 (Thu, 10 Apr 2014) $*/
++/* */
++/****************************************************************************************/
++
++/**
++@file
++Header file for the application layer interface of the LVVE module.
++This files includes all definitions, types, structures and function prototypes
++required by the calling layer. All other types, structures and functions are
++private.
++*/
++
++#ifndef __LVVE_H__
++#define __LVVE_H__
++
++#ifdef __cplusplus
++extern "C" {
++#endif /* __cplusplus */
++
++/****************************************************************************************/
++/* */
++/* Includes */
++/* */
++/****************************************************************************************/
++
++#include "LVVE_VID.h"
++
++/****************************************************************************************/
++/* */
++/* Definitions */
++/* */
++/****************************************************************************************/
++/* Below include logic is designed to reduce checks to 1 or 2 conditions due to limitations in the backend stripping code */
++
++
++
++
++
++#define LVVE_MAX_PCM_FRAME_SIZE 160 ///< LVVE maximum processing frame size
++
++
++#define LVVE_NOISESAMPLES_PER_FRAME 2 ///< Number of samples required for noise estimation per frame
++/**
++@def LVVE_RX_PRESET_LENGTH
++Length of the LVVE_Rx preset buffer (number of bytes).
++@see LVVE_Rx_SetPreset
++@ingroup LVVE_Rx
++*/
++#define LVVE_RX_PRESET_LENGTH (LVVIDHEADER_CONTROLPARAMS_LVWIREFORMAT_LENGTH + LVVE_RX_CONTROLPARAMS_LVWIREFORMAT_LENGTH) ///< RX preset Buffer length
++
++/**
++@def LVVE_TX_PRESET_LENGTH
++Length of the LVVE_Tx preset buffer (number of bytes).
++@see LVVE_Tx_SetPreset
++@ingroup LVVE_Tx
++*/
++#define LVVE_TX_PRESET_LENGTH (LVVIDHEADER_CONTROLPARAMS_LVWIREFORMAT_LENGTH + LVVE_TX_CONTROLPARAMS_LVWIREFORMAT_LENGTH) ///< TX preset buffer length
++
++
++/* Deprecated Definitions */
++
++#define LVVE_MAX_BULK_DELAY LVVE_TX_BULKDELAY_MAX
++#define LVVE_RX_MODE_DUMMY LVVE_RX_MODE_EN_DUMMY
++#define LVVE_TX_MODE_DUMMY LVVE_TX_MODE_EN_DUMMY
++
++#define LVVE_MAX_VOL_GAIN_DB LVVE_TX_VOL_GAIN_MAX
++#define LVVE_MIN_VOL_GAIN_DB LVVE_TX_VOL_GAIN_MIN
++
++#define LVVE_MAX_HPF_CORNER_HZ LVVE_TX_MIC_HPF_CORNERFREQ_MAX
++#define LVVE_MIN_HPF_CORNER_HZ LVVE_TX_MIC_HPF_CORNERFREQ_MIN
++
++#define LVVE_MAX_HPF_RX_CORNER_HZ LVVE_RX_HPF_CORNERFREQ_MAX
++
++#define LVVE_MAX_NLPP_LIMIT_DB LVNLPP_NLPP_LIMIT_MAX
++#define LVVE_MIN_NLPP_LIMIT_DB LVNLPP_NLPP_LIMIT_MIN
++
++
++#define LVVE_MAX_DRC_LEVEL LVDRC_COMPRESSORCURVEINPUTLEVELS_MAX
++#define LVVE_MIN_DRC_LEVEL LVDRC_COMPRESSORCURVEINPUTLEVELS_MIN
++#define LVVE_MIN_DRC_NUMKNEES LVDRC_NUMKNEES_MIN
++#define LVVE_MAX_DRC_NUMKNEES LVDRC_NUMKNEES_MAX
++#define LVVE_MIN_DRC_ATTACKTIME LVDRC_ATTACKTIME_MIN
++#define LVVE_MAX_DRC_ATTACKTIME LVDRC_ATTACKTIME_MAX
++#define LVVE_MIN_DRC_RELEASETIME LVDRC_RELEASETIME_MIN
++#define LVVE_MAX_DRC_RELEASETIME LVDRC_RELEASETIME_MAX
++
++
++/* End deprecated defines*/
++/****************************************************************************************/
++/* */
++/* Types */
++/* */
++/****************************************************************************************/
++
++/**
++LVVE_Tx Instance Handle
++This handle is used by most of the LVVE APIs
++@see LVVE_Tx_GetInstanceHandle
++@ingroup LVVE_Tx
++*/
++typedef void *LVVE_Tx_Handle_t; ///< LVVE Tx handle
++/**
++This handle is used by most of the LVVE APIs
++@see LVVE_Rx_GetInstanceHandle
++@ingroup LVVE_Rx
++*/
++typedef void *LVVE_Rx_Handle_t; ///< LVVE Rx handle
++
++/**
++This enum type specifies the different error codes returned by the API functions
++For the exact meaning see the individual function descriptions
++*/
++typedef enum
++{
++ LVVE_SUCCESS = 0, ///< Successful return from a routine
++ LVVE_ALIGNMENTERROR = 1, ///< Memory alignment error
++ LVVE_NULLADDRESS = 2, ///< NULL allocation address
++ LVVE_OUTOFRANGE = 3, ///< Out of range parameter
++ LVVE_INVALIDNUMSAMPLES = 4, ///< Invalid number of samples
++ LVVE_INVALID_ALGORITHM_CONFIGURATION = 5, ///< Mutually exclusive algorithms configured ON
++ LVVE_INVALID_STATE_CONFIGURATION = 6, ///< Invalid state of the algorithm
++ LVVE_PRESET_INVALID_BUFFER_LENGTH = 7, ///< Incorrect length of buffer used in SetPreset
++ LVVE_PRESET_INVALID_VOLUME_INDEX = 8, ///< The volume index exceeds the buffer content in SetPreset
++ LVVE_PRESET_INVALID_BUFFER_VERSION = 9, ///< The version of the preset buffer does not match this library
++ LVVE_PRESET_INVALID_BASELINE_VERSION = 10, ///< Invalid LVVE Baseline Version in preset buffer
++ LVVE_PRESET_INVALID_MASK = 11, ///< Invalid algorithm mask in preset buffer
++ LVVE_PRESET_INVALID_SAMPLE_RATE = 12, ///< Invalid sample rate @ref LVM_Fs_en in preset buffer
++ LVVE_PRESET_INVALID_LVWIREFORMAT_MESSAGEID = 13, ///< Invalid @ref LVVIDHeader_MessageID_en wire format message id in preset buffer
++
++ LVVE_RETURNSTATUS_DUMMY = LVM_MAXENUM
++} LVVE_ReturnStatus_en;
++
++/**
++Byte array containing encoded LVVE_Rx_ControlParams for one or multiple volumes.
++The length of this array should be a multiple of @ref LVVE_RX_PRESET_LENGTH.
++@see LVVE_Rx_SetPreset
++@ingroup LVVE_Rx
++*/
++typedef LVM_CHAR* LVVE_Rx_Preset_t; ///< LVVE Rx preset buffer
++
++/**
++Byte array containing encoded LVVE_Tx_ControlParams for one or multiple volumes.
++The length of this array should be a multiple of @ref LVVE_TX_PRESET_LENGTH.
++@see LVVE_Tx_SetPreset
++@ingroup LVVE_Tx
++*/
++typedef LVM_CHAR* LVVE_Tx_Preset_t; ///< LVVE Tx preset buffer
++
++
++/****************************************************************************************/
++/* */
++/* Structures */
++/* */
++/****************************************************************************************/
++
++/**
++The instance parameters define certain important operating limits required by the calling application.
++These instance parameters affect how much memory is required by the LVVE and hence must be provided
++when the instance is created.
++@see LVVE_Rx_GetMemoryTable
++@see LVVE_Rx_GetInstanceHandle
++@see LVVE_Tx_GetMemoryTable
++@see LVVE_Tx_GetInstanceHandle
++*/
++/**
++EQ Module Instance Parameters Structure.
++@see LVEQ_InstanceParams_st
++*/
++typedef struct
++{
++/**
++Max Size of Equalizer
++Sets the maximum length of the equalizer impulse response that can be used.
++It must be a multiple of 8.
++<table border>
++<caption>EQ Max Length Table</caption>
++ <tr>
++ <td><b>Unit</b></td>
++ <td><b>Q format</b></td>
++ <td><b>Data Range</b></td>
++ <td><b>Default Values</b></td>
++ </tr>
++ <tr>
++ <td><b>Integer Length in Samples</b></td>
++ <td><b>Q16.0</b></td>
++ <td>[8,\ref LVEQ_EQ_LENGTH_MAX]</td>
++ <td>\ref LVEQ_EQ_LENGTH_DEFAULT</td>
++ </tr>
++</table>
++*/
++ LVM_UINT16 EQ_MaxLength; ///< EQ Max Length
++} LVEQ_InstanceParams_st;
++
++/**
++Tx Instance Parameter Structure
++These parameters are set at initialization time and may not be changed during processing
++@ref LVVE_Tx_GetInstanceHandle
++@ingroup LVVE_Tx
++*/
++typedef struct
++{
++ LVM_Fs_en SampleRate; ///< Sample rate
++/**
++Sets the maximum length of the bulk delay between Rx and Tx expressed in samples.
++The unit of MaxBulkDelay is [number of samples] at the respective sampling rate.
++<table border>
++<caption>Max Bulk Delay Table</caption>
++ <tr>
++ <td><b>Type</b></td>
++ <td><b>Unit</b></td>
++ <td><b>Q format</b></td>
++ <td><b>Data Range</b></td>
++ <td><b>Default Values</b></td>
++ </tr>
++ <tr>
++ <td><b>LVM_UINT16</b></td>
++ <td><b>Integer Length in Samples</b></td>
++ <td><b>Q16.0</b></td>
++ <td>[0,6400]</td>
++ <td>None</td>
++ </tr>
++</table>
++*/
++ LVM_UINT16 MaxBulkDelay; ///< Max bulk delay
++
++ LVEQ_InstanceParams_st EQ_InstParams; ///< EQ instance
++} LVVE_Tx_InstanceParams_st;
++
++/**
++Rx Instance Parameter Structure
++These parameters are set at initialization time and may not be changed during processing.
++@ref LVVE_Rx_GetInstanceHandle
++@ingroup LVVE_Rx
++*/
++typedef struct
++{
++ LVM_Fs_en SampleRate; ///< LVVE sample rate
++ LVEQ_InstanceParams_st EQ_InstParams;///< EQ instance
++
++} LVVE_Rx_InstanceParams_st;
++
++/**
++The version information structure contains one character field to store LVVE version number.
++A call to the @ref LVVE_GetVersionInfo function is needed to retrieve this information.
++*/
++typedef struct
++{
++ LVM_CHAR VersionNumber[64]; ///< Version number of the LifeVibes™ VoiceExperience library
++} LVVE_VersionInfo;
++
++/**
++Used to reset LVVE_Rx module any time.
++@ref LVM_ResetType_en parameter determine the type of reset required
++@ingroup LVVE_Rx
++*/
++typedef struct
++{
++ LVM_ResetType_en ResetType; ///< RX Reset Type
++} LVVE_Rx_ResetParams_st;
++
++/**
++Used to reset LVVE_Tx module any time.
++LVM_ResetType_en parameter determine the type of reset required
++@ingroup LVVE_Tx
++*/
++typedef struct
++{
++ LVM_ResetType_en ResetType; ///< TX Reset Type
++} LVVE_Tx_ResetParams_st;
++
++/**
++@brief Retrieve the memory requirements of the LVVE_Tx module.
++
++This function returns a table of memory records that describe size, type and memory space of all buffers
++required by the instance. The number of initialized memory records is defined by LVVE_NR_MEMORY_REGIONS.
++This function is used for two purposes and is called in two different ways:
++
++@li Memory Allocation: When the LVVE_GetMemoryTable functions are called with a NULL instance handle (hInstance = LVM_NULL)
++ the function returns the memory requirements. The base address pointers in the memory table are set to NULL.
++ All elements of the instance parameters structure (pointed to by pInstParams) must contain valid values as the memory
++ requirements are affected by these settings.
++
++@li Memory Free: When called with a non-NULL instance handle (hInstance = a valid instance handle)
++ the function returns the memory table used when the instance was created.
++ The base address pointers returned will be those supplied by the calling application when the memory
++ was allocated and can now be used for freeing memory. The instance parameters (pointed to by pInstParams)
++ are ignored and the pInstParams parameter may be set to NULL.
++@li In case of memory allocation, all elements of the parameter initialization structure defined by pInstParams
++ must contain valid values as the memory requirements are affected by these settings.
++ In some releases of the bundle library one or more memory regions may have a zero size.
++
++@pre The number of memory records in the array defined by pMemoryTable is equal to @ref LVM_NR_MEMORY_REGIONS.
++@pre Exactly @ref LVM_NR_MEMORY_REGIONS memory records of pMemoryTable are initialized.
++
++@post When this function is called with hInstance = NULL the memory base address pointers
++will be NULL on return.
++@post When the function is called for freeing memory, hInstance = Instance Handle the
++memory table returns the allocated memory and base addresses used during
++initialisation.
++
++@return LVVE_SUCCESS when the function call succeeds and the memory table is filled correctly
++@return LVVE_NULLADDRESS when pMemoryTable was NULL
++@return LVVE_NULLADDRESS when pInstParams was NULL and the call was for memory allocation
++ is NULL.
++@return LVVE_OUTOFRANGE when pInstParams contains parameters out of the excepted range
++
++@note This function may be interrupted by the LVVE_Tx_Process function.
++
++@ingroup LVVE_Tx
++
++LVVE_Tx_GetMemoryTable: Memory Allocation Example:
++
++The following example shows how to get the memory requirements for the LVVE_Tx instance.
++\code
++ InstParams_Tx.SampleRate = LVM_FS_8000;
++ // Include the other instance params here
++
++ LVVE_Status = LVVE_Tx_GetMemoryTable ( LVM_NULL,
++ &MemTab_Tx,
++ &InstParams_Tx );
++
++ if( LVVE_Status != LVVE_SUCCESS )
++ {
++ // Handle Errors
++ }
++
++ for( c1 = 0; c1 < LVVE_NR_MEMORY_REGIONS; c1++ )
++ {
++ if( MemTab_Tx.Region[c1].Size != 0 )
++ {
++ MemTab_Tx.Region[c1].pBaseAddress =
++ malloc(MemTab_Tx.Region[c1].Size);
++ }
++ }
++\endcode
++
++LVVE_Tx_GetMemoryTable: Freeing Memory Example:
++
++The following example shows how to free the memory from the LVVE_Tx instance.
++
++\code
++ LVVE_Status = LVVE_Tx_GetMemoryTable( hInstance,
++ &MemTab_Tx,
++ LVM_NULL);
++
++ if (LVVE_Status != LVVE_SUCCESS)
++ {
++ // Handle errors
++ }
++
++ for( c1 = 0; c1 < LVVE_NR_MEMORY_REGIONS; c1++)
++ {
++ if (MemTab_Tx.Region[c1].Size != 0)
++ {
++ free(MemTab_Tx.Region[c1].pBaseAddress);
++ }
++ }
++\endcode
++
++*/
++
++LVVE_ReturnStatus_en LVVE_Tx_GetMemoryTable(LVVE_Tx_Handle_t hInstance,
++ LVM_MemoryTable_st *pMemoryTable,
++ LVVE_Tx_InstanceParams_st *pInstanceParams);
++
++/**
++@brief Retrieve the memory requirements of the LVVE_Rx module.
++
++This function returns a table of memory records that describe size, type and memory space of all buffers
++required by the instance. The number of initialized memory records is defined by LVVE_NR_MEMORY_REGIONS.
++This function is used for two purposes and is called in two different ways:
++
++@li Memory Allocation: When the LVVE_GetMemoryTable functions are called with a NULL instance handle (hInstance = LVM_NULL)
++ the function returns the memory requirements. The base address pointers in the memory table are set to NULL.
++ All elements of the instance parameters structure (pointed to by pInstParams) must contain valid values as the memory
++ requirements are affected by these settings.
++
++@li Memory Free: When called with a non-NULL instance handle (hInstance = a valid instance handle)
++ the function returns the memory table used when the instance was created.
++ The base address pointers returned will be those supplied by the calling application when the memory
++ was allocated and can now be used for freeing memory. The instance parameters (pointed to by pInstParams)
++ are ignored and the pInstParams parameter may be set to NULL.
++@li In case of memory allocation, all elements of the parameter initialization structure defined by pInstParams
++ must contain valid values as the memory requirements are affected by these settings.
++ In some releases of the bundle library one or more memory regions may have a zero size.
++
++@pre The number of memory records in the array defined by pMemoryTable is equal to @ref LVM_NR_MEMORY_REGIONS.
++@pre Exactly @ref LVM_NR_MEMORY_REGIONS memory records of pMemoryTable are initialized.
++
++@post When this function is called with hInstance = NULL the memory base address pointers
++will be NULL on return.
++@post When the function is called for freeing memory, hInstance = Instance Handle the
++memory table returns the allocated memory and base addresses used during
++initialisation.
++
++@return LVVE_SUCCESS when the function call succeeds and the memory table is filled correctly
++@return LVVE_NULLADDRESS when pMemoryTable was NULL
++@return LVVE_NULLADDRESS when pInstParams was NULL and the call was for memory allocation
++ is NULL.
++@return LVVE_OUTOFRANGE when pInstParams contains parameters out of the excepted range
++
++@note This function may be interrupted by the LVVE_Rx_Process function.
++
++@ingroup LVVE_Rx
++
++LVVE_Rx_GetMemoryTable: Memory Allocation Example:
++
++The following example shows how to get the memory requirements for the LVVE_Rx instance.
++
++\code
++ InstParams_Rx.SampleRate = LVM_FS_8000;
++ // Include the other instance params here
++
++ LVVE_Status = LVVE_Rx_GetMemoryTable ( LVM_NULL,
++ &MemTab_Rx,
++ &InstParams_Rx );
++
++ if( LVVE_Status != LVVE_SUCCESS )
++ {
++ // Handle Errors
++ }
++
++ for( c1 = 0; c1 < LVVE_NR_MEMORY_REGIONS; c1++ )
++ {
++ if( MemTab_Rx.Region[c1].Size != 0 )
++ {
++ MemTab_Rx.Region[c1].pBaseAddress =
++ malloc(MemTab_Rx.Region[c1].Size);
++ }
++ }
++\endcode
++
++LVVE_Rx_GetMemoryTable: Freeing Memory Example:
++
++The following example shows how to free the memory from the LVVE_Rx instance.
++
++\code
++ LVVE_Status = LVVE_Rx_GetMemoryTable( hInstance,
++ &MemTab_Rx,
++ LVM_NULL);
++
++ if (LVVE_Status != LVVE_SUCCESS)
++ {
++ // Handle errors
++ }
++
++ for( c1 = 0; c1 < LVVE_NR_MEMORY_REGIONS; c1++)
++ {
++ if (MemTab_Rx.Region[c1].Size != 0)
++ {
++ free(MemTab_Rx.Region[c1].pBaseAddress);
++ }
++ }
++\endcode
++*/
++
++LVVE_ReturnStatus_en LVVE_Rx_GetMemoryTable(LVVE_Rx_Handle_t hInstance,
++ LVM_MemoryTable_st *pMemoryTable,
++ LVVE_Rx_InstanceParams_st *pInstanceParams);
++
++
++/**
++@brief Created handle to the instance of the LVVE_Tx module
++
++This function is used to create the LVVE_Tx instance. All control parameters are set to invalid values.
++The memory table pointed to by pMemoryTable must be created. If the memory table is not correct then an error will be returned.
++The memory requirements of the Rx and Tx unit are dependent on the instance parameters supplied and so the
++instance parameters provided in this function call must be the same as those used in the @ref LVVE_Tx_GetMemoryTable function calls
++used for memory allocation.
++
++@pre The memory records tables defined by pMemoryTable contains pointers to non-overlapping buffers
++with the size as requested via the prior calls to the LVVE_Tx_GetMemoryTable functions.
++@pre The initialization parameter structure defined by pInstParams is identical to the structure passed
++to prior call to @ref LVVE_Tx_GetMemoryTable functions.
++
++
++@param phInstance Pointer to the instance handle.
++@param pMemoryTable Pointer to the memory definition table.
++@param pInstanceParams Pointer to the instance parameters.
++
++@return LVVE_SUCCESS when creation was successful
++@return LVVE_NULLADDRESS When phInstance or pMemoryTable or pInstanceParams is NULL.
++@return LVVE_NULLADDRESS when one or more of the memory regions with a non-zero size has been
++ given a NULL base address pointer.
++@return LVVE_OUTOFRANGE when pInstParams contains parameters out of the excepted range
++
++@ingroup LVVE_Tx
++
++ LVVE_Tx_GetInstanceHandle Example:
++
++The following example shows how to initialize LVVE_Tx_GetInstanceHandle.
++
++\code
++ hInstance_Tx = LVM_NULL;
++ LVVE_Status = LVVE_Tx_GetInstanceHandle( &hInstance_Tx,
++ &MemTab_Tx,
++ &InstParams_Tx );
++ if( LVVE_Status != LVVE_SUCCESS )
++ {
++ // Handle Errors
++ }
++\endcode
++
++*/
++
++LVVE_ReturnStatus_en LVVE_Tx_GetInstanceHandle(LVVE_Tx_Handle_t *phInstance,
++ LVM_MemoryTable_st *pMemoryTable,
++ LVVE_Tx_InstanceParams_st *pInstanceParams);
++
++/**
++@brief Created handle to the instance of the LVVE_Rx module
++
++This functions is used to create LVVE_Rx instance. All control parameters are set to invalid values.
++The memory table pointed to by pMemoryTable must be created. If the memory table is not correct then an error will be returned.
++The memory requirements of the Rx and Rx unit are dependent on the instance parameters supplied and so the
++instance parameters provided in this function call must be the same as those used in the @ref LVVE_Rx_GetMemoryTable function calls
++used for memory allocation.
++
++@pre The memory records tables defined by pMemoryTable contains pointers to non-overlapping buffers
++with the size as requested via the prior calls to the LVVE_Rx_GetMemoryTable functions.
++@pre The initialization parameter structure defined by pInstParams is identical to the structure passed
++to prior call to @ref LVVE_Rx_GetMemoryTable functions.
++
++
++@param phInstance Pointer to the instance handle.
++@param pMemoryTable Pointer to the memory definition table.
++@param pInstanceParams Pointer to the instance parameters.
++
++@return LVVE_SUCCESS when creation was successful
++@return LVVE_NULLADDRESS When phInstance or pMemoryTable or pInstanceParams is NULL.
++@return LVVE_NULLADDRESS when one or more of the memory regions with a non-zero size has been
++ given a NULL base address pointer.
++@return LVVE_OUTOFRANGE when pInstParams contains parameters out of the excepted range
++
++@ingroup LVVE_Rx
++
++ LVVE_Rx_GetInstanceHandle Example:
++
++The following example shows how to initialize LVVE_Rx_GetInstanceHandle.
++
++\code
++ hInstance_Rx = LVM_NULL;
++ LVVE_Status = LVVE_Rx_GetInstanceHandle( &hInstance_Rx,
++ &MemTab_Rx,
++ &InstParams_Rx );
++ if( LVVE_Status != LVVE_SUCCESS )
++ {
++ // Handle Errors
++ }
++\endcode
++
++*/
++
++LVVE_ReturnStatus_en LVVE_Rx_GetInstanceHandle(LVVE_Rx_Handle_t *phInstance,
++ LVM_MemoryTable_st *pMemoryTable,
++ LVVE_Rx_InstanceParams_st *pInstanceParams);
++
++/**
++@brief Retrieve the current LVVE_Tx control parameters.
++
++This function copies the control parameters from the LVVE_Tx into the supplied
++parameter structure, pControlParams. The values returned are the values given in the last successful
++call to the LVVE_Tx_SetControlParameters function.
++
++@param hInstance Instance handle
++@param pControlParams Pointer to the control parameters
++
++@pre hInstance should be valid handle.
++@pre pControlParams should be allocated by caller.
++@post pControlParams will be filled with the values given in the last successful call to
++ the LVVE_Tx_SetControlParameters function. They are not necessarily the values
++ used in the last call to the LVVE_Tx_Process function, this will be the case if
++ LVVE_Tx_SetControlParameters has been called since the last call to LVVE_Tx_Process.
++
++@return LVVE_SUCCESS Succeeded
++@return LVVE_NULLADDRESS When hInstance or pControlParams is NULL
++
++@note The LVVE_Tx_GetControlParameters function can be called at any time during processing.
++
++@ingroup LVVE_Tx
++
++LVVE_Tx_GetControlParameters Example:
++
++The following example shows how to get different control parameters for the LVVE_Tx instance.
++
++\code
++ LVVE_Status = LVVE_Tx_GetControlParameters( &hInstance_Tx,
++ &ControlParams_Tx );
++
++ if( LVVE_Status != LVVE_SUCCESS )
++ {
++ // Handle Errors
++ }
++\endcode
++
++*/
++
++LVVE_ReturnStatus_en LVVE_Tx_GetControlParameters( LVVE_Tx_Handle_t hInstance,
++ LVVE_Tx_ControlParams_st *pControlParams);
++
++/**
++@brief Retrieve the current LVVE_Rx control parameters.
++
++This function copies the control parameters from the LVVE_Tx into the supplied
++parameter structure, pControlParams. The values returned are the values given in the last successful
++call to the LVVE_Rx_SetControlParameters function.
++
++@param hInstance Instance handle
++@param pControlParams Pointer to the control parameters
++
++@pre hInstance should be valid handle.
++@pre pControlParams should be allocated by caller.
++@post pControlParams will be filled with the values given in the last successful call to
++ the LVVE_Rx_SetControlParameters function. They are not necessarily the values
++ used in the last call to the LVVE_Rx_Process function, this will be the case if
++ LVVE_Tx_SetControlParameters has been called since the last call to LVVE_Tx_Process.
++
++@return LVVE_SUCCESS Succeeded
++@return LVVE_NULLADDRESS When hInstance or pControlParams is NULL
++
++@note The LVVE_Rx_GetControlParameters function can be called at any time during processing.
++
++@ingroup LVVE_Rx
++
++LVVE_Rx_GetControlParameters Example:
++
++The following example shows how to get different control parameters for the LVVE_Rx instance.
++
++\code
++ LVVE_Status = LVVE_Rx_GetControlParameters( &hInstance_Rx,
++ &ControlParams_Rx );
++
++ if( LVVE_Status != LVVE_SUCCESS )
++ {
++ // Handle Errors
++ }
++\endcode
++
++*/
++
++LVVE_ReturnStatus_en LVVE_Rx_GetControlParameters( LVVE_Rx_Handle_t hInstance,
++ LVVE_Rx_ControlParams_st *pControlParams);
++
++/**
++@brief Sets or changes the LVVE_Tx module parameters using C-strcuture.
++
++This function takes the new set of parameters and makes a local copy within
++LVVE_Tx but the parameters are only applied on the next call of the LVVE_Tx_Process
++function. When a parameter is unchanged no action is taken. This function can
++be called at any time during the processing, even when the LVVE_Tx_Process function
++is running. LifeVibes™ VoiceExperience control parameters can be set using two methods.
++Control Parameters can be populated in a \"C\" style structure (as explained in example) and then sent to the library.
++Another method is to populate control parameters in a byte array called Preset Buffer, see @ref LVVE_Tx_SetPreset for example usage.
++
++@param hInstance Instance Handle
++@param pNewParams Pointer to a parameter structure
++
++@pre hInstance should be valid handle.
++
++@return LVVE_SUCCESS Succeeded
++@return LVVE_NULLADDRESS When hInstance or pNewParams is NULL
++@return LVVE_OUTOFRANGE When pNewParams contains parameters of activated modules that are out of the excepted range
++@return LVVE_INVALID_ALGORITHM_CONFIGURATION When two mutual exclusive algorithms are both configured ON at run-time
++ (e.g., NoiseVoid and HandsFree)
++
++
++@note This function may be interrupted by the LVVE_Tx_Process function
++
++@ingroup LVVE_Tx
++
++LVVE_Tx_GetControlParameters: Setting Control Parameters using C-Style structure Example:
++
++The following example shows how to set different control parameters for the LVVE_Tx instance.
++
++\code
++ LVVE_Status = LVVE_Tx_GetControlParameters( &hInstance_Tx,
++ &ControlParams_Tx );
++
++ if( LVVE_Status != LVVE_SUCCESS )
++ {
++ // Handle Errors
++ }
++
++ Change Parameters as required
++ ControlParams_Tx.VOL_Gain = VOL_TABLE[i];
++ ControlParams_Tx.VC_ControlParams = VC_TABLE[i];
++
++ // Update instance with new parameters
++ LVVE_Status = LVVE_Tx_SetControlParameters( &hInstance_Tx,
++ &ControlParams_Tx );
++
++ if( LVVE_Status != LVVE_SUCCESS )
++ {
++ // Handle Errors
++ }
++\endcode
++
++*/
++
++LVVE_ReturnStatus_en LVVE_Tx_SetControlParameters( LVVE_Tx_Handle_t hInstance,
++ const LVVE_Tx_ControlParams_st * const pNewParams);
++
++/**
++@brief Sets or changes the LVVE_Rx module parameters using C-structure.
++
++This function takes the new set of parameters and makes a local copy within
++LVVE_Rx but the parameters are only applied on the next call of the LVVE_Rx_Process
++function. When a parameter is unchanged no action is taken. This function can
++be called at any time during the processing, even when the LVVE_Rx_Process function
++is running. LifeVibes™ VoiceExperience control parameters can be set using two methods.
++Control Parameters can be populated in a \"C\" style structure (as explained in example) and then sent to the library.
++Another method is to populate control parameters in a byte array called Preset Buffer, see @ref LVVE_Rx_SetPreset for example usage.
++
++@param hInstance Instance Handle
++@param pNewParams Pointer to a parameter structure
++
++@pre hInstance should be valid handle.
++
++@return LVVE_SUCCESS Succeeded
++@return LVVE_NULLADDRESS When hInstance or pNewParams is NULL
++@return LVVE_OUTOFRANGE When pNewParams contains parameters of activated modules that are out of the excepted range
++@return LVVE_INVALID_ALGORITHM_CONFIGURATION When two mutual exclusive algorithms are both configured ON at run-time
++ (e.g., NoiseVoid and HandsFree)
++
++
++@note This function may be interrupted by the LVVE_Rx_Process function
++
++@ingroup LVVE_Rx
++
++LVVE_Rx_GetControlParameters: Setting Control Parameters using C-Style structure Example:
++
++The following example shows how to set different control parameters for the LVVE_Rx instance.
++
++\code
++ LVVE_Status = LVVE_Rx_GetControlParameters( &hInstance_Rx,
++ &ControlParams_Rx );
++
++ if( LVVE_Status != LVVE_SUCCESS )
++ {
++ // Handle Errors
++ }
++
++ Change Parameters as required
++ ControlParams_Rx.VOL_Gain = VOL_TABLE[i];
++ ControlParams_Rx.VC_ControlParams = VC_TABLE[i];
++
++ // Update instance with new parameters
++ LVVE_Status = LVVE_Rx_SetControlParameters( &hInstance_Rx,
++ &ControlParams_Rx );
++
++ if( LVVE_Status != LVVE_SUCCESS )
++ {
++ // Handle Errors
++ }
++\endcode
++
++*/
++LVVE_ReturnStatus_en LVVE_Rx_SetControlParameters( LVVE_Rx_Handle_t hInstance,
++ const LVVE_Rx_ControlParams_st * const pNewParams);
++
++/**
++@brief Retrieve the current LVVE_Tx status parameters.
++
++This function copies internal status variables into the supplied status
++parameter structures.
++
++@param hInstance Instance handle
++@param pStatusParams Pointer to the status parameters
++
++@pre hInstance should be valid handle.
++@pre pStatusParams should be allocated by caller.
++@post pStatusParams will be filled with the latest status values of LVVE_Tx.
++
++@return LVVE_SUCCESS Succeeded
++@return LVVE_NULLADDRESS When hInstance or pStatusParams is NULL
++
++@note The LVVE_Tx_GetStatusParameters function can be called at any time during processing.
++This function can run in different threads than the process functions.
++
++
++@ingroup LVVE_Tx
++
++LVVE_Tx_GetStatusParameters: Get Internal Algorithm Status Attributes Example:
++The following example shows how to use LVVE_Tx_GetStatusParameters function call.
++
++\code
++ LVVE_Tx_StatusParams_st Tx_Monitor;
++ Status=LVVE_Tx_GetStatusParameters(hInstance_Tx,&Tx_Monitor);
++ if (Status != LVVE_SUCCESS )
++ {
++ // Error Handling
++ }
++\endcode
++
++*/
++
++LVVE_ReturnStatus_en LVVE_Tx_GetStatusParameters( LVVE_Tx_Handle_t hInstance,
++ LVVE_Tx_StatusParams_st *pStatusParams);
++
++/**
++@brief Retrieve the current LVVE_Rx status parameters.
++
++This function copies internal status variables into the supplied status
++parameter structures.
++
++@param hInstance Instance handle
++@param pStatusParams Pointer to the status parameters
++
++@pre hInstance should be valid handle.
++@pre pStatusParams should be allocated by caller.
++@post pStatusParams will be filled with the latest status values of LVVE_Rx.
++
++@return LVVE_SUCCESS Succeeded
++@return LVVE_NULLADDRESS When hInstance or pStatusParams is NULL
++
++@note The LVVE_Rx_GetStatusParameters function can be called at any time during processing.
++This function can run in different threads than the process functions.
++
++@ingroup LVVE_Rx
++
++LVVE_Rx_GetStatusParameters: Get Internal Algorithm Status Attributes Example:
++The following example shows how to use LVVE_Rx_GetStatusParameters function call.
++
++\code
++ LVVE_Rx_StatusParams_st Rx_Monitor;
++ Status=LVVE_Rx_GetStatusParameters(hInstance_Rx,&Rx_Monitor);
++ if (Status != LVVE_SUCCESS )
++ {
++ // Error Handling
++ }
++\endcode
++
++*/
++
++LVVE_ReturnStatus_en LVVE_Rx_GetStatusParameters( LVVE_Rx_Handle_t hInstance,
++ LVVE_Rx_StatusParams_st *pStatusParams);
++
++/**
++@brief Resets the LVVE_Tx module.
++
++The LVVE_Tx module instance memory contains data which depend on the input
++samples that have been processed previously. These data are buffers
++used for filter tabs and delay lines and also adaptive coefficients of the
++algorithm. The LVVE_Tx_ResetInstance function resets this input dependent data.
++
++The LVVE_Tx_ResetInstance function should be called whenever there is a
++discontinuity in the input audio stream. A discontinuity means that the
++current block of samples is not contiguous with the previous block of samples.
++Examples are
++@li Calling the LVVE_Tx_Process function after a period of inactivity
++@li Buffer underrun or overflow in the audio driver
++The LVVE_ResetInstance function of the Tx and/or Tx Unit should only be called when absolutely necessary as re-adaptation
++of internal algorithms will occur.
++The LVVE_ResetInstance functions can be called at any time, even when LVVE_Process is running. The reset will be
++applied at the start of the next call of the LVVE_Tx_Process function.
++
++
++@param hInstance Instance Handle
++@param pResetParams Reset Type
++
++@pre hInstance should be valid handle.
++
++@post Depending on the ResetType value, the LVVE_Tx_ResetInstance function can
++perform:
++@li Soft reset: partial reset of internal buffers and adaptive behavior. To be used for very short
++interruption or discontinuity, e.g., buffer under-run or overflow in the audio driver influencing the echo path delay.
++@li Hard reset: full reset of all internal buffers and adaptive behavior. To be used for long
++interruption or discontinuity, e.g., before calling the LVVE_Tx_Process function after a long period of inactivity
++in between calls in case instance was not freed.
++
++@return LVVE_SUCCESS Succeeded
++@return LVVE_NULLADDRESS When hInstance or pResetParams is NULL
++@return LVVE_OUTOFRANGE When content of pResetParams is invalid
++
++@note This function may be interrupted by the LVVE_Tx_Process function
++
++@ingroup LVVE_Tx
++
++LVVE_Tx_ResetInstance Example:
++
++The following example shows how to use LVVE_Tx_ResetInstance.
++\code
++ LVVE_Status = LVVE_Tx_ResetInstance(hInstance, pResetParams);
++
++ if (LVVE_Status != LVVE_SUCCESS)
++ {
++ // Handle LVVE_Tx_ResetInstance errors
++ }
++\endcode
++
++*/
++LVVE_ReturnStatus_en LVVE_Tx_ResetInstance( LVVE_Tx_Handle_t hInstance,
++ LVVE_Tx_ResetParams_st *pResetParams );
++
++/**
++@brief Resets the LVVE_Rx module.
++
++The LVVE_Rx module instance memory contains data which depend on the input
++samples that have been processed previously. These data are buffers
++used for filter tabs and delay lines and also adaptive coefficients of the
++algorithm. The LVVE_Rx_ResetInstance function resets this input dependent data.
++
++The LVVE_Rx_ResetInstance function should be called whenever there is a
++discontinuity in the input audio stream. A discontinuity means that the
++current block of samples is not contiguous with the previous block of samples.
++Examples are
++@li Calling the LVVE_Rx_Process function after a period of inactivity
++@li Buffer underrun or overflow in the audio driver
++The LVVE_ResetInstance function of the Rx and/or Tx Unit should only be called when absolutely necessary as re-adaptation
++of internal algorithms will occur.
++The LVVE_ResetInstance functions can be called at any time, even when LVVE_Process is running. The reset will be
++applied at the start of the next call of the LVVE_Rx_Process function.
++
++
++@param hInstance Instance Handle
++@param pResetParams Reset Type
++
++@pre hInstance should be valid handle.
++
++@post Depending on the ResetType value, the LVVE_Rx_ResetInstance function can
++perform:
++@li Soft reset: partial reset of internal buffers and adaptive behavior. To be used for very short
++interruption or discontinuity, e.g., buffer under-run or overflow in the audio driver influencing the echo path delay.
++@li Hard reset: full reset of all internal buffers and adaptive behavior. To be used for long
++interruption or discontinuity, e.g., before calling the LVVE_Rx_Process function after a long period of inactivity
++in between calls in case instance was not freed.
++
++@return LVVE_SUCCESS Succeeded
++@return LVVE_NULLADDRESS When hInstance or pResetParams is NULL
++@return LVVE_OUTOFRANGE When content of pResetParams is invalid
++
++@note This function may be interrupted by the LVVE_Rx_Process function
++
++@ingroup LVVE_Rx
++
++LVVE_Rx_ResetInstance Example:
++
++The following example shows how to use LVVE_Rx_ResetInstance.
++\code
++ LVVE_Status = LVVE_Rx_ResetInstance(hInstance, pResetParams);
++
++ if (LVVE_Status != LVVE_SUCCESS)
++ {
++ // Handle LVVE_Rx_ResetInstance errors
++ }
++\endcode
++
++*/
++LVVE_ReturnStatus_en LVVE_Rx_ResetInstance( LVVE_Rx_Handle_t hInstance,
++ LVVE_Rx_ResetParams_st *pResetParams );
++
++/**
++@brief Processes a block of samples by the LVVE_Tx module.
++
++This function processes the block of samples as configured with the current
++parameter settings. If new parameters have been given since the last call to
++LVVE_Tx_Process then these will be applied at the beginning of this process call.
++
++@param hInstance Instance Handle
++@param pInDataMic0 Pointer to the input speech sample buffer (pimary microphone).
++@param pInDataMic1 Pointer to the input speech sample buffer (secondary microphone).
++@param pRefData Pointer to the input farend reference buffer.
++@param pNoiseData Pointer to the output noise reference buffer.
++@param pOutData Pointer to the output sample buffer.
++@param NumSamples The number of samples to process should be integer multiple(n) of values in table.
++ It is a frquency dependant paramter.
++<table border>
++ <tr>
++ <td><b>Unit</b></td>
++ <td><b>Q format</b></td>
++ <td><b>Data Range</b></td>
++ <td><b>Default Values</b></td>
++ </tr>
++ <tr>
++ <td><b>Samples</b></td>
++ <td><b>Q16.0</b></td>
++ <td>nx80 for 8kHz</td>
++ <td>80 for 8kHz</td>
++ </tr>
++ <tr>
++ <td></td>
++ <td></td>
++ <td>nx160 for 16kHz</td>
++ <td>160 for 16kHz</td>
++ </tr>
++ <tr>
++ <td></td>
++ <td></td>
++ <td>nx240 for 24kHz</td>
++ <td>240 for 24kHz</td>
++ </tr>
++ <tr>
++ <td></td>
++ <td></td>
++ <td>nx320 for 32kHz</td>
++ <td>320 for 32kHz</td>
++ </tr>
++ <tr>
++ <td></td>
++ <td></td>
++ <td>nx480 for 48kHz</td>
++ <td>480 for 48kHz</td>
++ </tr>
++</table>
++
++@pre hInstance should be valid handle.
++@pre LVVE_Tx_SetControlParameters should be called successfully once before.
++the first call to LVVE_Tx_Process
++@pre pInData is filled with the input samples to process.
++
++@post pOutData contains the processed samples.
++
++@return LVVE_SUCCESS Succeeded
++@return LVVE_NULLADDRESS When hInstance, pInData or pOutData is NULL
++@return LVVE_INVALIDNUMSAMPLES When the NumSamples is outside the allowed
++range
++@return LVVE_INVALID_STATE_CONFIGURATION When invalid state of the algorithm found
++
++@ingroup LVVE_Tx
++
++LVVE_Tx_Process Example:
++
++The following example shows how to use LVVE_Tx_Process function call
++
++\code
++ // Tx Processing
++ LVVE_STATUS = LVVE_Tx_Process( hInstance_Tx,
++ pInData_Tx0,
++ pInData_Tx1,
++ pInData_Ref,
++ pNoiseData,
++ pOutData_Tx,
++ NumSamples );
++ if (LVVE_STATUS != LVVE_SUCCESS )
++ {
++ // Error Handling
++ }
++\endcode
++
++*/
++LVVE_ReturnStatus_en LVVE_Tx_Process( LVVE_Tx_Handle_t hInstance,
++ const LVM_INT16 *pInDataMic0,
++ const LVM_INT16 *pInDataMic1,
++ const LVM_INT16 *pRefData,
++ LVM_INT16 *pNoiseData,
++ LVM_INT16 *pOutData,
++ const LVM_UINT16 NumSamples);
++
++/**
++@brief Processes a block of samples by the LVVE_Rx module.
++
++This function processes the block of samples as configured with the current
++parameter settings. If new parameters have been given since the last call to
++LVVE_Rx_Process then these will be applied at the beginning of this process call.
++
++@param hInstance Instance Handle
++@param pInData Pointer to the input sample buffer
++@param pNoiseData Pointer to the input noise buffer (for LVVC only). Pointer to the input noise reference buffer.
++ The size of this buffer depends on the number of samples to process: NoiseDataBufferSize = 2 (size of the input buffer in ms) / 10ms
++ i.e. for 20 ms input buffer, the NoiseData buffer size should be 4.
++
++@param pOutData Pointer to the output sample buffer
++@param NumSamples The number of samples to process should be integer multiple(n) of values in table.
++ It is a frquency dependant paramter.
++<table border>
++ <tr>
++ <td><b>Unit</b></td>
++ <td><b>Q format</b></td>
++ <td><b>Data Range</b></td>
++ <td><b>Default Values</b></td>
++ </tr>
++ <tr>
++ <td><b>Samples</b></td>
++ <td><b>Q16.0</b></td>
++ <td>nx80 for 8kHz</td>
++ <td>80 for 8kHz</td>
++ </tr>
++ <tr>
++ <td></td>
++ <td></td>
++ <td>nx160 for 16kHz</td>
++ <td>160 for 16kHz</td>
++ </tr>
++ <tr>
++ <td></td>
++ <td></td>
++ <td>nx240 for 24kHz</td>
++ <td>240 for 24kHz</td>
++ </tr>
++ <tr>
++ <td></td>
++ <td></td>
++ <td>nx320 for 32kHz</td>
++ <td>320 for 32kHz</td>
++ </tr>
++ <tr>
++ <td></td>
++ <td></td>
++ <td>nx480 for 48kHz</td>
++ <td>480 for 48kHz</td>
++ </tr>
++</table>
++
++@pre hInstance should be valid handle.
++@pre LVVE_Rx_SetControlParameters should be called successfully once before.
++the first call to LVVE_Rx_Process
++@pre pInData is filled with the input samples to process.
++
++@post pOutData contains the processed samples.
++
++@return LVVE_SUCCESS Succeeded
++@return LVVE_NULLADDRESS When hInstance, pInData or pOutData is NULL
++@return LVVE_INVALIDNUMSAMPLES When the NumSamples is outside the allowed
++range
++@return LVVE_INVALID_STATE_CONFIGURATION When invalid state of the algorithm found
++
++@ingroup LVVE_Rx
++
++LVVE_Rx_Process Example:
++The following example shows how to use LVVE_Rx_Process function call.
++
++\code
++ // Rx Processing
++ LVVE_STATUS = LVVE_Rx_Process( hInstance_Rx,
++ pInData_Rx,
++ pNoiseData,
++ pOutData_Rx,
++ NumSamples );
++
++ if (LVVE_STATUS != LVVE_SUCCESS )
++ {
++ // Error Handling
++ }
++\endcode
++
++*/
++
++LVVE_ReturnStatus_en LVVE_Rx_Process( LVVE_Rx_Handle_t hInstance,
++ const LVM_INT16 *pInData,
++ const LVM_INT16 *pNoiseData,
++ LVM_INT16 *pOutData,
++ const LVM_UINT16 NumSamples);
++
++
++/**
++\brief get the version number of current of LVVE library.
++
++This function returns, to host, current version of the LVVE library
++@param pVersion version info
++
++@return LVVE_SUCCESS Succeeded
++@return LVVE_NULLADDRESS When one of hInstance, pInData or pOutData is NULL
++
++LVVE_GetVersionInfot Example:
++
++\code
++ //Get the version information
++ LVVE_VersionInfo VersionInfo;
++ LVVE_GetVersionInfo(&VersionInfo);
++\endcode
++
++*/
++LVVE_ReturnStatus_en LVVE_GetVersionInfo( LVVE_VersionInfo *pVersion );
++
++/**
++@brief Sets or changes the LVVE_Tx module parameters through a Preset Buffer.
++
++Sets or changes the LVVE_Tx module parameters through a Preset Buffer. To set parameters using \"C\" structure see
++@ref LVVE_Tx_SetControlParameters
++This function takes the new set of parameters and makes a local copy within the
++LVVE_Tx module but the parameters are only applied on the next call of the LVVE_Tx_Process
++function. When no parameters are changed, no action is taken. This function can
++be called at any time during the processing, even when the LVVE_Tx_Process function
++is running.
++The new parameters are supplied in the form a @ref LVVE_Tx_Preset_t (Byte array).
++The length of the byte array shall be a multiple of @ref LVVE_TX_PRESET_LENGTH.
++
++@param hInstance Instance Handle
++@param pPreset Pointer to a Preset buffer
++@param PresetLength Length in bytes of the Preset buffer
++@param VolumeIndex Volume index to be selected from the Preset buffer
++
++@pre hInstance should be valid handle.
++
++@return @ref LVVE_SUCCESS Succeeded
++@return @ref LVVE_NULLADDRESS When hInstance or pPreset is NULL
++@return @ref LVVE_OUTOFRANGE When PresetLength or any of the new parameters is out of range
++@return @ref LVVE_INVALID_ALGORITHM_CONFIGURATION When mutually exclusive algorithms are enabled in the parameters at the same time
++@return @ref LVVE_PRESET_INVALID_BUFFER_LENGTH When the length of the input buffer is smaller than LVVE_TX_PRESET_LENGTH
++@return @ref LVVE_PRESET_INVALID_VOLUME_INDEX When the volume index exceeds the buffer content
++@return @ref LVVE_PRESET_INVALID_BUFFER_VERSION When the version of the format of the preset buffer does not match the version of the library
++@return @ref LVVE_PRESET_INVALID_BASELINE_VERSION When the baseline version of the provided preset buffer and the baseline version of the library do not match. Is the preset generated for this library ?
++@return @ref LVVE_PRESET_INVALID_MASK When the algorithm mask of the provided preset buffer and the algorithm mask of the library do not match. Is the preset generated for this library ?
++@return @ref LVVE_PRESET_INVALID_SAMPLE_RATE When the sample rate @ref LVM_Fs_en of the preset does not match the sample rate of the hInstance
++@return @ref LVVE_PRESET_INVALID_LVWIREFORMAT_MESSAGEID When the LVWireformat message id @ref LVVIDHeader_MessageID_en of the preset is not valid
++
++@note This function may be interrupted by the LVVE_Tx_Process function
++
++@ingroup LVVE_Tx
++LVVE_Tx_SetPreset: Setting Control Parameters using Preset Buffer Example:
++
++The following example shows how to set different control parameters for the LVVE_Tx instance using Preset Buffer.
++
++\code
++ LVM_CHAR LVVE_Tx_Preset_Buffer[LVVE_TX_PRESET_LENGTH];
++ LVVE_Tx_Preset_t const LVVE_Tx_Preset = LVVE_Tx_Preset_Buffer;
++
++ FILE *PRESETFILE_Tx;
++ LVM_INT32 ReadBytes = 0;
++
++ PRESETFILE_Tx=fopen(filename, "rb" );
++
++ // Read the preset buffer
++ ReadBytes = fread( LVVE_Tx_Preset_Buffer,
++ sizeof(LVM_CHAR),
++ (LVM_UINT32)LVVE_TX_PRESET_LENGTH,
++ PRESETFILE_Tx );
++
++ fclose(PRESETFILE_Tx);
++
++ // Update instance with new preset buffer
++ LVVE_Status = LVVE_Tx_SetPreset( hInstance_Tx,
++ LVVE_Tx_Preset,
++ ReadBytes,
++ 0);
++
++ if ( LVVE_Status != LVVE_SUCCESS )
++ {
++ // Handle Errors
++ }
++\endcode
++
++
++
++*/
++LVVE_ReturnStatus_en LVVE_Tx_SetPreset(LVVE_Tx_Handle_t hInstance,
++ const LVVE_Tx_Preset_t pPreset,
++ LVM_UINT32 PresetLength,
++ LVM_UINT16 VolumeIndex);
++
++/**
++@brief Sets or changes the LVVE_Rx module parameters through a Preset Buffer
++
++Sets or changes the LVVE_Rx module parameters through a Preset Buffer. To set parameters using \"C\" structure see
++@ref LVVE_Rx_SetControlParameters
++This function takes the new set of parameters and makes a local copy within the
++LVVE_Rx module but the parameters are only applied on the next call of the LVVE_Rx_Process
++function. When no parameters are changed, no action is taken. This function can
++be called at any time during the processing, even when the LVVE_Rx_Process function
++is running.
++The new parameters are supplied in the form a @ref LVVE_Rx_Preset_t (Byte array).
++The length of the byte array shall be a multiple of @ref LVVE_RX_PRESET_LENGTH.
++
++@param hInstance Instance Handle
++@param pPreset Pointer to a Preset buffer
++@param PresetLength Length in bytes of the Preset buffer
++@param VolumeIndex Volume index to be selected from the Preset buffer
++
++@pre hInstance should be valid handle.
++
++@return @ref LVVE_SUCCESS Succeeded
++@return @ref LVVE_NULLADDRESS When hInstance or pPreset is NULL
++@return @ref LVVE_OUTOFRANGE When PresetLength or any of the new parameters is out of range
++@return @ref LVVE_INVALID_ALGORITHM_CONFIGURATION When mutually exclusive algorithms are enabled in the parameters at the same time
++@return @ref LVVE_PRESET_INVALID_BUFFER_LENGTH When the length of the input buffer is smaller than LVVE_RX_PRESET_LENGTH
++@return @ref LVVE_PRESET_INVALID_VOLUME_INDEX When the volume index exceeds the buffer content
++@return @ref LVVE_PRESET_INVALID_BUFFER_VERSION When the version of the format of the preset buffer does not match the version of the library
++@return @ref LVVE_PRESET_INVALID_BASELINE_VERSION When the baseline version of the provided preset buffer and the baseline version of the library do not match. Is the preset generated for this library ?
++@return @ref LVVE_PRESET_INVALID_MASK When the algorithm mask of the provided preset buffer and the algorithm mask of the library do not match. Is the preset generated for this library ?
++@return @ref LVVE_PRESET_INVALID_SAMPLE_RATE When the sample rate @ref LVM_Fs_en of the preset does not match the sample rate of the hInstance
++@return @ref LVVE_PRESET_INVALID_LVWIREFORMAT_MESSAGEID When the LVWireformat message id @ref LVVIDHeader_MessageID_en of the preset is not valid
++
++@note This function may be interrupted by the LVVE_Rx_Process function
++
++@ingroup LVVE_Rx
++
++LVVE_Rx_SetPreset: Setting Control Parameters using Preset Buffer Example:
++
++The following example shows how to set different control parameters for the LVVE_Rx instance using Preset Buffer.
++
++\code
++ #define NUM_VOLUMES (5)
++ LVM_CHAR LVVE_Rx_Preset_Buffer[NUM_VOLUMES*LVVE_RX_PRESET_LENGTH];
++ LVVE_Rx_Preset_t const LVVE_Rx_Preset = LVVE_Rx_Preset_Buffer;
++
++ FILE *PRESETFILE_Rx;
++ LVM_INT32 ReadBytes = 0;
++ LVM_UINT16 VolumeIndex = 3;
++
++ PRESETFILE_Rx=fopen(filename, "rb" );
++
++ // Read the preset buffer
++ ReadBytes = fread( LVVE_Rx_Preset_Buffer,
++ sizeof(LVM_CHAR),
++ (LVM_UINT32)(NUM_VOLUMES*LVVE_RX_PRESET_LENGTH),
++ PRESETFILE_Rx );
++
++ fclose(PRESETFILE_Rx);
++
++ // Update instance with new preset buffer
++ LVVE_Status = LVVE_Rx_SetPreset( hInstance_Rx,
++ LVVE_Rx_Preset,
++ ReadBytes,
++ VolumeIndex);
++
++ if ( LVVE_Status != LVVE_SUCCESS )
++ {
++ // Handle Errors
++ }
++\endcode
++
++*/
++LVVE_ReturnStatus_en LVVE_Rx_SetPreset(LVVE_Rx_Handle_t hInstance,
++ const LVVE_Rx_Preset_t pPreset,
++ LVM_UINT32 PresetLength,
++ LVM_UINT16 VolumeIndex);
++
++
++#ifdef __cplusplus
++}
++#endif /* __cplusplus */
++
++#endif /* __LVVE_H__ */
++
++/* End of file */
+diff --git a/Uboot/cp/ps/driver/src/chipsets/src/audio_base/nxp/uclinux/LVVE_VID.h b/Uboot/cp/ps/driver/src/chipsets/src/audio_base/nxp/uclinux/LVVE_VID.h
+new file mode 100755
+index 0000000..79047a8
+--- /dev/null
++++ b/Uboot/cp/ps/driver/src/chipsets/src/audio_base/nxp/uclinux/LVVE_VID.h
+@@ -0,0 +1,8413 @@
++/****************************************************************************************/
++/* Copyright (c) 2004-2016 NXP Software. All rights are reserved. */
++/* Reproduction in whole or in part is prohibited without the prior */
++/* written consent of the copyright owner. */
++/* */
++/* This software and any compilation or derivative thereof is and */
++/* shall remain the proprietary information of NXP Software and is */
++/* highly confidential in nature. Any and all use hereof is restricted */
++/* and is subject to the terms and conditions set forth in the */
++/* software license agreement concluded with NXP Software. */
++/* */
++/* Under no circumstances is this software or any derivative thereof */
++/* to be combined with any Open Source Software in any way or */
++/* licensed under any Open License Terms without the express prior */
++/* written permission of NXP Software. */
++/* */
++/* For the purpose of this clause, the term Open Source Software means */
++/* any software that is licensed under Open License Terms. Open */
++/* License Terms means terms in any license that require as a */
++/* condition of use, modification and/or distribution of a work */
++/* */
++/* 1. the making available of source code or other materials */
++/* preferred for modification, or */
++/* */
++/* 2. the granting of permission for creating derivative */
++/* works, or */
++/* */
++/* 3. the reproduction of certain notices or license terms */
++/* in derivative works or accompanying documentation, or */
++/* */
++/* 4. the granting of a royalty-free license to any party */
++/* under Intellectual Property Rights */
++/* */
++/* regarding the work and/or any work that contains, is combined with, */
++/* requires or otherwise is based on the work. */
++/* */
++/* This software is provided for ease of recompilation only. */
++/* Modification and reverse engineering of this software are strictly */
++/* prohibited. */
++/* */
++/****************************************************************************************/
++
++/****************************************************************************************/
++/* */
++/* $Author: nxp65285 $*/
++/* $Revision: 49390 $*/
++/* $Date: 2013-10-16 18:34:35 +0530 (Wed, 16 Oct 2013) $*/
++/* */
++/****************************************************************************************/
++
++/** @file
++ * Header file for the application layer interface of the REL_LVVE_HF_NV1_VC_AGC_RX_DRC_RX module
++ *
++ * The suffix VID in header file stands for Voice Interface Definition
++ * This files includes all definitions, types, and structures required by the calling
++ * layer. Public functions are defined in the protoypes header files.
++ * All other types, structures and functions are private.
++ */
++
++#ifndef __REL_LVVE_HF_NV1_VC_AGC_RX_DRC_RX_VIDPP_H__
++#define __REL_LVVE_HF_NV1_VC_AGC_RX_DRC_RX_VIDPP_H__
++
++#ifdef __cplusplus
++extern "C" {
++#endif /* __cplusplus */
++
++/****************************************************************************************/
++/* */
++/* Includes */
++/* */
++/****************************************************************************************/
++#include "LVC_Types.h"
++
++/****************************************************************************************/
++/* */
++/* Definitions */
++/* */
++/****************************************************************************************/
++/**
++<table border>
++ <tr>
++ <td><b>Name</b></td>
++ <td><b>Value</b></td>
++ <td><b>Description</b></td>
++ </tr>
++ <tr>
++ <td>@ref LVVIDHEADER_LVVE_RX_LVFENS_MASK1</td>
++ <td>1</td>
++ <td>Far End Noise Suppression is present in the LVVE_Rx</td>
++ </tr>
++ <tr>
++ <td>@ref LVVIDHEADER_LVVE_RX_HPF_MASK1</td>
++ <td>4</td>
++ <td>High Pass Filter is present in the LVVE_Rx</td>
++ </tr>
++ <tr>
++ <td>@ref LVVIDHEADER_LVVE_RX_LVNG_MASK1</td>
++ <td>16</td>
++ <td>Noise Gate is present in the LVVE_Rx</td>
++ </tr>
++ <tr>
++ <td>@ref LVVIDHEADER_LVVE_RX_EQ_MASK1</td>
++ <td>64</td>
++ <td>Equalizer is present in the LVVE_Rx</td>
++ </tr>
++ <tr>
++ <td>@ref LVVIDHEADER_LVVE_RX_AGC_MASK1</td>
++ <td>128</td>
++ <td>Automatic Gain Control is present in the LVVE_Rx</td>
++ </tr>
++ <tr>
++ <td>@ref LVVIDHEADER_LVVE_RX_DRC_MASK1</td>
++ <td>256</td>
++ <td>Dynamic Range Control is present in the LVVE_Rx</td>
++ </tr>
++ <tr>
++ <td>@ref LVVIDHEADER_LVVE_RX_VOL_MASK1</td>
++ <td>512</td>
++ <td>Volume Control is present in the LVVE_Rx</td>
++ </tr>
++ <tr>
++ <td>@ref LVVIDHEADER_LVVE_RX_LVVC_MASK1</td>
++ <td>1024</td>
++ <td>VoiceClarity is present in the LVVE_Rx</td>
++ </tr>
++</table> */
++typedef LVM_UINT16 LVVIDHeader_LVVE_Rx_Mask1_bm;
++/**
++* @def LVVIDHeader_LVVE_Rx_LVFENS_MASK1
++* Far End Noise Suppression is present in the LVVE_Rx
++* @see LVVIDHeader_LVVE_Rx_Mask1_bm
++*/
++#define LVVIDHEADER_LVVE_RX_LVFENS_MASK1 ((LVVIDHeader_LVVE_Rx_Mask1_bm)1)
++/**
++* @def LVVIDHeader_LVVE_Rx_HPF_MASK1
++* High Pass Filter is present in the LVVE_Rx
++* @see LVVIDHeader_LVVE_Rx_Mask1_bm
++*/
++#define LVVIDHEADER_LVVE_RX_HPF_MASK1 ((LVVIDHeader_LVVE_Rx_Mask1_bm)4)
++/**
++* @def LVVIDHeader_LVVE_Rx_LVNG_MASK1
++* Noise Gate is present in the LVVE_Rx
++* @see LVVIDHeader_LVVE_Rx_Mask1_bm
++*/
++#define LVVIDHEADER_LVVE_RX_LVNG_MASK1 ((LVVIDHeader_LVVE_Rx_Mask1_bm)16)
++/**
++* @def LVVIDHeader_LVVE_Rx_EQ_MASK1
++* Equalizer is present in the LVVE_Rx
++* @see LVVIDHeader_LVVE_Rx_Mask1_bm
++*/
++#define LVVIDHEADER_LVVE_RX_EQ_MASK1 ((LVVIDHeader_LVVE_Rx_Mask1_bm)64)
++/**
++* @def LVVIDHeader_LVVE_Rx_AGC_MASK1
++* Automatic Gain Control is present in the LVVE_Rx
++* @see LVVIDHeader_LVVE_Rx_Mask1_bm
++*/
++#define LVVIDHEADER_LVVE_RX_AGC_MASK1 ((LVVIDHeader_LVVE_Rx_Mask1_bm)128)
++/**
++* @def LVVIDHeader_LVVE_Rx_DRC_MASK1
++* Dynamic Range Control is present in the LVVE_Rx
++* @see LVVIDHeader_LVVE_Rx_Mask1_bm
++*/
++#define LVVIDHEADER_LVVE_RX_DRC_MASK1 ((LVVIDHeader_LVVE_Rx_Mask1_bm)256)
++/**
++* @def LVVIDHeader_LVVE_Rx_VOL_MASK1
++* Volume Control is present in the LVVE_Rx
++* @see LVVIDHeader_LVVE_Rx_Mask1_bm
++*/
++#define LVVIDHEADER_LVVE_RX_VOL_MASK1 ((LVVIDHeader_LVVE_Rx_Mask1_bm)512)
++/**
++* @def LVVIDHeader_LVVE_Rx_LVVC_MASK1
++* VoiceClarity is present in the LVVE_Rx
++* @see LVVIDHeader_LVVE_Rx_Mask1_bm
++*/
++#define LVVIDHEADER_LVVE_RX_LVVC_MASK1 ((LVVIDHeader_LVVE_Rx_Mask1_bm)1024)
++/**
++* @def LVVIDHEADER_LVVE_RX_MASK1_BM_MIN
++* Minimal value for LVVIDHeader_LVVE_Rx_Mask1_bm
++* @see LVVIDHeader_LVVE_Rx_Mask1_bm
++*/
++#define LVVIDHEADER_LVVE_RX_MASK1_BM_MIN ((LVVIDHeader_LVVE_Rx_Mask1_bm)0)
++/**
++* @def LVVIDHEADER_LVVE_RX_MASK1_BM_MAX
++* Maximal value for LVVIDHeader_LVVE_Rx_Mask1_bm
++* @see LVVIDHeader_LVVE_Rx_Mask1_bm
++*/
++#define LVVIDHEADER_LVVE_RX_LVFENS_MASK1_FORMAX ((LVVIDHeader_LVVE_Rx_Mask1_bm)1)
++#define LVVIDHEADER_LVVE_RX_HPF_MASK1_FORMAX ((LVVIDHeader_LVVE_Rx_Mask1_bm)4)
++#define LVVIDHEADER_LVVE_RX_LVNG_MASK1_FORMAX ((LVVIDHeader_LVVE_Rx_Mask1_bm)16)
++#define LVVIDHEADER_LVVE_RX_EQ_MASK1_FORMAX ((LVVIDHeader_LVVE_Rx_Mask1_bm)64)
++#define LVVIDHEADER_LVVE_RX_AGC_MASK1_FORMAX ((LVVIDHeader_LVVE_Rx_Mask1_bm)128)
++#define LVVIDHEADER_LVVE_RX_DRC_MASK1_FORMAX ((LVVIDHeader_LVVE_Rx_Mask1_bm)256)
++#define LVVIDHEADER_LVVE_RX_VOL_MASK1_FORMAX ((LVVIDHeader_LVVE_Rx_Mask1_bm)512)
++#define LVVIDHEADER_LVVE_RX_LVVC_MASK1_FORMAX ((LVVIDHeader_LVVE_Rx_Mask1_bm)1024)
++#define LVVIDHEADER_LVVE_RX_MASK1_BM_MAX (LVVIDHEADER_LVVE_RX_LVFENS_MASK1_FORMAX | LVVIDHEADER_LVVE_RX_HPF_MASK1_FORMAX | LVVIDHEADER_LVVE_RX_LVNG_MASK1_FORMAX | LVVIDHEADER_LVVE_RX_EQ_MASK1_FORMAX | LVVIDHEADER_LVVE_RX_AGC_MASK1_FORMAX | LVVIDHEADER_LVVE_RX_DRC_MASK1_FORMAX | LVVIDHEADER_LVVE_RX_VOL_MASK1_FORMAX | LVVIDHEADER_LVVE_RX_LVVC_MASK1_FORMAX | ((LVVIDHeader_LVVE_Rx_Mask1_bm)0))
++/**
++<table border>
++ <tr>
++ <td><b>Name</b></td>
++ <td><b>Value</b></td>
++ <td><b>Description</b></td>
++ </tr>
++</table> */
++typedef LVM_UINT16 LVVIDHeader_LVVE_Rx_Mask2_bm;
++/**
++* @def LVVIDHEADER_LVVE_RX_MASK2_BM_MIN
++* Minimal value for LVVIDHeader_LVVE_Rx_Mask2_bm
++* @see LVVIDHeader_LVVE_Rx_Mask2_bm
++*/
++#define LVVIDHEADER_LVVE_RX_MASK2_BM_MIN ((LVVIDHeader_LVVE_Rx_Mask2_bm)0)
++/**
++* @def LVVIDHEADER_LVVE_RX_MASK2_BM_MAX
++* Maximal value for LVVIDHeader_LVVE_Rx_Mask2_bm
++* @see LVVIDHeader_LVVE_Rx_Mask2_bm
++*/
++#define LVVIDHEADER_LVVE_RX_MASK2_BM_MAX (((LVVIDHeader_LVVE_Rx_Mask2_bm)0))
++/**
++<table border>
++ <tr>
++ <td><b>Name</b></td>
++ <td><b>Value</b></td>
++ <td><b>Description</b></td>
++ </tr>
++ <tr>
++ <td>@ref LVVIDHEADER_LVVE_TX_LVHF_MASK1</td>
++ <td>1</td>
++ <td>HandsFree is present in the LVVE_Tx</td>
++ </tr>
++ <tr>
++ <td>@ref LVVIDHEADER_LVVE_TX_EQ_MASK1</td>
++ <td>4</td>
++ <td>Equalizer is present in the LVVE_Tx</td>
++ </tr>
++ <tr>
++ <td>@ref LVVIDHEADER_LVVE_TX_DRC_MASK1</td>
++ <td>16</td>
++ <td>Dynamic Range Control is present in the LVVE_Tx</td>
++ </tr>
++ <tr>
++ <td>@ref LVVIDHEADER_LVVE_TX_VOL_MASK1</td>
++ <td>32</td>
++ <td>Volume Control is present in the LVVE_Tx</td>
++ </tr>
++ <tr>
++ <td>@ref LVVIDHEADER_LVVE_TX_HPF_MASK1</td>
++ <td>128</td>
++ <td>HPF is present in the LVVE_Tx</td>
++ </tr>
++ <tr>
++ <td>@ref LVVIDHEADER_LVVE_TX_LVNV_01_MASK1</td>
++ <td>512</td>
++ <td>NoiseVoid is present in the LVVE_Tx</td>
++ </tr>
++</table> */
++typedef LVM_UINT16 LVVIDHeader_LVVE_Tx_Mask1_bm;
++/**
++* @def LVVIDHeader_LVVE_Tx_LVHF_MASK1
++* HandsFree is present in the LVVE_Tx
++* @see LVVIDHeader_LVVE_Tx_Mask1_bm
++*/
++#define LVVIDHEADER_LVVE_TX_LVHF_MASK1 ((LVVIDHeader_LVVE_Tx_Mask1_bm)1)
++/**
++* @def LVVIDHeader_LVVE_Tx_EQ_MASK1
++* Equalizer is present in the LVVE_Tx
++* @see LVVIDHeader_LVVE_Tx_Mask1_bm
++*/
++#define LVVIDHEADER_LVVE_TX_EQ_MASK1 ((LVVIDHeader_LVVE_Tx_Mask1_bm)4)
++/**
++* @def LVVIDHeader_LVVE_Tx_DRC_MASK1
++* Dynamic Range Control is present in the LVVE_Tx
++* @see LVVIDHeader_LVVE_Tx_Mask1_bm
++*/
++#define LVVIDHEADER_LVVE_TX_DRC_MASK1 ((LVVIDHeader_LVVE_Tx_Mask1_bm)16)
++/**
++* @def LVVIDHeader_LVVE_Tx_VOL_MASK1
++* Volume Control is present in the LVVE_Tx
++* @see LVVIDHeader_LVVE_Tx_Mask1_bm
++*/
++#define LVVIDHEADER_LVVE_TX_VOL_MASK1 ((LVVIDHeader_LVVE_Tx_Mask1_bm)32)
++/**
++* @def LVVIDHeader_LVVE_Tx_HPF_MASK1
++* HPF is present in the LVVE_Tx
++* @see LVVIDHeader_LVVE_Tx_Mask1_bm
++*/
++#define LVVIDHEADER_LVVE_TX_HPF_MASK1 ((LVVIDHeader_LVVE_Tx_Mask1_bm)128)
++/**
++* @def LVVIDHeader_LVVE_Tx_LVNV_01_MASK1
++* NoiseVoid is present in the LVVE_Tx
++* @see LVVIDHeader_LVVE_Tx_Mask1_bm
++*/
++#define LVVIDHEADER_LVVE_TX_LVNV_01_MASK1 ((LVVIDHeader_LVVE_Tx_Mask1_bm)512)
++/**
++* @def LVVIDHEADER_LVVE_TX_MASK1_BM_MIN
++* Minimal value for LVVIDHeader_LVVE_Tx_Mask1_bm
++* @see LVVIDHeader_LVVE_Tx_Mask1_bm
++*/
++#define LVVIDHEADER_LVVE_TX_MASK1_BM_MIN ((LVVIDHeader_LVVE_Tx_Mask1_bm)0)
++/**
++* @def LVVIDHEADER_LVVE_TX_MASK1_BM_MAX
++* Maximal value for LVVIDHeader_LVVE_Tx_Mask1_bm
++* @see LVVIDHeader_LVVE_Tx_Mask1_bm
++*/
++#define LVVIDHEADER_LVVE_TX_LVHF_MASK1_FORMAX ((LVVIDHeader_LVVE_Tx_Mask1_bm)1)
++#define LVVIDHEADER_LVVE_TX_EQ_MASK1_FORMAX ((LVVIDHeader_LVVE_Tx_Mask1_bm)4)
++#define LVVIDHEADER_LVVE_TX_DRC_MASK1_FORMAX ((LVVIDHeader_LVVE_Tx_Mask1_bm)16)
++#define LVVIDHEADER_LVVE_TX_VOL_MASK1_FORMAX ((LVVIDHeader_LVVE_Tx_Mask1_bm)32)
++#define LVVIDHEADER_LVVE_TX_HPF_MASK1_FORMAX ((LVVIDHeader_LVVE_Tx_Mask1_bm)128)
++#define LVVIDHEADER_LVVE_TX_LVNV_01_MASK1_FORMAX ((LVVIDHeader_LVVE_Tx_Mask1_bm)512)
++#define LVVIDHEADER_LVVE_TX_MASK1_BM_MAX (LVVIDHEADER_LVVE_TX_LVHF_MASK1_FORMAX | LVVIDHEADER_LVVE_TX_EQ_MASK1_FORMAX | LVVIDHEADER_LVVE_TX_DRC_MASK1_FORMAX | LVVIDHEADER_LVVE_TX_VOL_MASK1_FORMAX | LVVIDHEADER_LVVE_TX_HPF_MASK1_FORMAX | LVVIDHEADER_LVVE_TX_LVNV_01_MASK1_FORMAX | ((LVVIDHeader_LVVE_Tx_Mask1_bm)0))
++/**
++<table border>
++ <tr>
++ <td><b>Name</b></td>
++ <td><b>Value</b></td>
++ <td><b>Description</b></td>
++ </tr>
++</table> */
++typedef LVM_UINT16 LVVIDHeader_LVVE_Tx_Mask2_bm;
++/**
++* @def LVVIDHEADER_LVVE_TX_MASK2_BM_MIN
++* Minimal value for LVVIDHeader_LVVE_Tx_Mask2_bm
++* @see LVVIDHeader_LVVE_Tx_Mask2_bm
++*/
++#define LVVIDHEADER_LVVE_TX_MASK2_BM_MIN ((LVVIDHeader_LVVE_Tx_Mask2_bm)0)
++/**
++* @def LVVIDHEADER_LVVE_TX_MASK2_BM_MAX
++* Maximal value for LVVIDHeader_LVVE_Tx_Mask2_bm
++* @see LVVIDHeader_LVVE_Tx_Mask2_bm
++*/
++#define LVVIDHEADER_LVVE_TX_MASK2_BM_MAX (((LVVIDHeader_LVVE_Tx_Mask2_bm)0))
++/**
++<table border>
++ <tr>
++ <td><b>Name</b></td>
++ <td><b>Value</b></td>
++ <td><b>Description</b></td>
++ </tr>
++ <tr>
++ <td>@ref LVVIDHEADER_CONFIGURATIONS_NARROWBAND_MASK1</td>
++ <td>1</td>
++ <td>NarrowBand configuration is present in the LVVE</td>
++ </tr>
++</table> */
++typedef LVM_UINT16 LVVIDHeader_Configurations_Mask1_bm;
++/**
++* @def LVVIDHEADER_CONFIGURATIONS_NARROWBAND_MASK1
++* NarrowBand configuration is present in the LVVE
++* @see LVVIDHeader_Configurations_Mask1_bm
++*/
++#define LVVIDHEADER_CONFIGURATIONS_NARROWBAND_MASK1 ((LVVIDHeader_Configurations_Mask1_bm)1)
++/**
++* @def LVVIDHEADER_CONFIGURATIONS_MASK1_BM_MIN
++* Minimal value for LVVIDHeader_Configurations_Mask1_bm
++* @see LVVIDHeader_Configurations_Mask1_bm
++*/
++#define LVVIDHEADER_CONFIGURATIONS_MASK1_BM_MIN ((LVVIDHeader_Configurations_Mask1_bm)0)
++/**
++* @def LVVIDHEADER_CONFIGURATIONS_MASK1_BM_MAX
++* Maximal value for LVVIDHeader_Configurations_Mask1_bm
++* @see LVVIDHeader_Configurations_Mask1_bm
++*/
++#define LVVIDHEADER_CONFIGURATIONS_NARROWBAND_MASK1_FORMAX ((LVVIDHeader_Configurations_Mask1_bm)1)
++#define LVVIDHEADER_CONFIGURATIONS_MASK1_BM_MAX (LVVIDHEADER_CONFIGURATIONS_NARROWBAND_MASK1_FORMAX | ((LVVIDHeader_Configurations_Mask1_bm)0))
++/**
++<table border>
++ <tr>
++ <td><b>Name</b></td>
++ <td><b>Value</b></td>
++ <td><b>Description</b></td>
++ </tr>
++</table> */
++typedef LVM_UINT16 LVVIDHeader_Configurations_Mask2_bm;
++/**
++* @def LVVIDHEADER_CONFIGURATIONS_MASK2_BM_MIN
++* Minimal value for LVVIDHeader_Configurations_Mask2_bm
++* @see LVVIDHeader_Configurations_Mask2_bm
++*/
++#define LVVIDHEADER_CONFIGURATIONS_MASK2_BM_MIN ((LVVIDHeader_Configurations_Mask2_bm)0)
++/**
++* @def LVVIDHEADER_CONFIGURATIONS_MASK2_BM_MAX
++* Maximal value for LVVIDHeader_Configurations_Mask2_bm
++* @see LVVIDHeader_Configurations_Mask2_bm
++*/
++#define LVVIDHEADER_CONFIGURATIONS_MASK2_BM_MAX (((LVVIDHeader_Configurations_Mask2_bm)0))
++/**
++<table border>
++ <tr>
++ <td><b>Name</b></td>
++ <td><b>Value</b></td>
++ <td><b>Description</b></td>
++ </tr>
++ <tr>
++ <td>@ref LVVC_MODE_AVL</td>
++ <td>2</td>
++ <td>Turns on or off the AGC. If off both AGC and Limiter are bypassed.</td>
++ </tr>
++ <tr>
++ <td>@ref LVVC_MODE_AVL_ADAPT</td>
++ <td>4</td>
++ <td>Allows turning off the dependency of the AGC upon the nearend noise level. When turned off, the AGC uses the default parameters.</td>
++ </tr>
++ <tr>
++ <td>@ref LVVC_MODE_AVL_SPDETECT</td>
++ <td>8</td>
++ <td>Allows disabling speech detection in the AGC. When turned off, the AGC adapts its gain all the time.</td>
++ </tr>
++ <tr>
++ <td>@ref LVVC_MODE_LIMITER</td>
++ <td>16</td>
++ <td>Turns on or off the limiter.</td>
++ </tr>
++ <tr>
++ <td>@ref LVVC_MODE_LPF</td>
++ <td>32</td>
++ <td>Turns on or off the low-pass filter.</td>
++ </tr>
++ <tr>
++ <td>@ref LVVC_MODE_HPF</td>
++ <td>64</td>
++ <td>Turns on or off the high-pass filter.</td>
++ </tr>
++ <tr>
++ <td>@ref LVVC_MODE_VC</td>
++ <td>128</td>
++ <td>Turns on or off the VoiceClarity gain.</td>
++ </tr>
++</table> */
++typedef LVM_UINT16 LVVC_ModeWord_bm;
++/**
++* @def LVVC_MODE_AVL
++* Turns on or off the AGC. If off both AGC and Limiter are bypassed.
++* @see LVVC_ModeWord_bm
++*/
++#define LVVC_MODE_AVL ((LVVC_ModeWord_bm)2)
++/**
++* @def LVVC_MODE_AVL_ADAPT
++* Allows turning off the dependency of the AGC upon the nearend noise level. When turned off, the AGC uses the default parameters.
++* @see LVVC_ModeWord_bm
++*/
++#define LVVC_MODE_AVL_ADAPT ((LVVC_ModeWord_bm)4)
++/**
++* @def LVVC_MODE_AVL_SPDETECT
++* Allows disabling speech detection in the AGC. When turned off, the AGC adapts its gain all the time.
++* @see LVVC_ModeWord_bm
++*/
++#define LVVC_MODE_AVL_SPDETECT ((LVVC_ModeWord_bm)8)
++/**
++* @def LVVC_MODE_LIMITER
++* Turns on or off the limiter.
++* @see LVVC_ModeWord_bm
++*/
++#define LVVC_MODE_LIMITER ((LVVC_ModeWord_bm)16)
++/**
++* @def LVVC_MODE_LPF
++* Turns on or off the low-pass filter.
++* @see LVVC_ModeWord_bm
++*/
++#define LVVC_MODE_LPF ((LVVC_ModeWord_bm)32)
++/**
++* @def LVVC_MODE_HPF
++* Turns on or off the high-pass filter.
++* @see LVVC_ModeWord_bm
++*/
++#define LVVC_MODE_HPF ((LVVC_ModeWord_bm)64)
++/**
++* @def LVVC_MODE_VC
++* Turns on or off the VoiceClarity gain.
++* @see LVVC_ModeWord_bm
++*/
++#define LVVC_MODE_VC ((LVVC_ModeWord_bm)128)
++/**
++* @def LVVC_MODEWORD_BM_MIN
++* Minimal value for LVVC_ModeWord_bm
++* @see LVVC_ModeWord_bm
++*/
++#define LVVC_MODEWORD_BM_MIN ((LVVC_ModeWord_bm)0)
++/**
++* @def LVVC_MODEWORD_BM_MAX
++* Maximal value for LVVC_ModeWord_bm
++* @see LVVC_ModeWord_bm
++*/
++#define LVVC_MODE_AVL_FORMAX ((LVVC_ModeWord_bm)2)
++#define LVVC_MODE_AVL_ADAPT_FORMAX ((LVVC_ModeWord_bm)4)
++#define LVVC_MODE_AVL_SPDETECT_FORMAX ((LVVC_ModeWord_bm)8)
++#define LVVC_MODE_LIMITER_FORMAX ((LVVC_ModeWord_bm)16)
++#define LVVC_MODE_LPF_FORMAX ((LVVC_ModeWord_bm)32)
++#define LVVC_MODE_HPF_FORMAX ((LVVC_ModeWord_bm)64)
++#define LVVC_MODE_VC_FORMAX ((LVVC_ModeWord_bm)128)
++#define LVVC_MODEWORD_BM_MAX (LVVC_MODE_AVL_FORMAX | LVVC_MODE_AVL_ADAPT_FORMAX | LVVC_MODE_AVL_SPDETECT_FORMAX | LVVC_MODE_LIMITER_FORMAX | LVVC_MODE_LPF_FORMAX | LVVC_MODE_HPF_FORMAX | LVVC_MODE_VC_FORMAX | ((LVVC_ModeWord_bm)0))
++/**
++<table border>
++ <tr>
++ <td><b>Name</b></td>
++ <td><b>Value</b></td>
++ <td><b>Description</b></td>
++ </tr>
++ <tr>
++ <td>@ref LVFENS_MODE_HS</td>
++ <td>1</td>
++ <td>Switch ON and OFF Horn Suppressor. Currently Horn Suppressor is not supported.</td>
++ </tr>
++</table> */
++typedef LVM_UINT16 LVFENS_ModeWord_bm;
++/**
++* @def LVFENS_MODE_HS
++* Switch ON and OFF Horn Suppressor. Currently Horn Suppressor is not supported.
++* @see LVFENS_ModeWord_bm
++*/
++#define LVFENS_MODE_HS ((LVFENS_ModeWord_bm)1)
++/**
++* @def LVFENS_MODEWORD_BM_MIN
++* Minimal value for LVFENS_ModeWord_bm
++* @see LVFENS_ModeWord_bm
++*/
++#define LVFENS_MODEWORD_BM_MIN ((LVFENS_ModeWord_bm)0)
++/**
++* @def LVFENS_MODEWORD_BM_MAX
++* Maximal value for LVFENS_ModeWord_bm
++* @see LVFENS_ModeWord_bm
++*/
++#define LVFENS_MODE_HS_FORMAX ((LVFENS_ModeWord_bm)1)
++#define LVFENS_MODEWORD_BM_MAX (LVFENS_MODE_HS_FORMAX | ((LVFENS_ModeWord_bm)0))
++/**
++<table border>
++ <tr>
++ <td><b>Name</b></td>
++ <td><b>Value</b></td>
++ <td><b>Description</b></td>
++ </tr>
++ <tr>
++ <td>@ref LVWM_MODE_AVL</td>
++ <td>1</td>
++ <td>Turns on or off the AVL. If off, both AGC and Limiter are bypassed</td>
++ </tr>
++ <tr>
++ <td>@ref LVWM_MODE_SPDETECT</td>
++ <td>2</td>
++ <td>Allows disabling speech detection in the AVL. When turned off, the AGC adapts its gain all the time.</td>
++ </tr>
++ <tr>
++ <td>@ref LVWM_MODE_LIMITER</td>
++ <td>4</td>
++ <td>Turns on or off the limiter.</td>
++ </tr>
++ <tr>
++ <td>@ref LVWM_MODE_EXT_SPDETECT</td>
++ <td>8</td>
++ <td>Used to tell the WhisperMode module if an external speech detection is available (If 0, there is no external speech detector).</td>
++ </tr>
++</table> */
++typedef LVM_UINT16 LVWM_ModeWord_bm;
++/**
++* @def LVWM_MODE_AVL
++* Turns on or off the AVL. If off, both AGC and Limiter are bypassed
++* @see LVWM_ModeWord_bm
++*/
++#define LVWM_MODE_AVL ((LVWM_ModeWord_bm)1)
++/**
++* @def LVWM_MODE_SPDETECT
++* Allows disabling speech detection in the AVL. When turned off, the AGC adapts its gain all the time.
++* @see LVWM_ModeWord_bm
++*/
++#define LVWM_MODE_SPDETECT ((LVWM_ModeWord_bm)2)
++/**
++* @def LVWM_MODE_LIMITER
++* Turns on or off the limiter.
++* @see LVWM_ModeWord_bm
++*/
++#define LVWM_MODE_LIMITER ((LVWM_ModeWord_bm)4)
++/**
++* @def LVWM_MODE_EXT_SPDETECT
++* Used to tell the WhisperMode module if an external speech detection is available (If 0, there is no external speech detector).
++* @see LVWM_ModeWord_bm
++*/
++#define LVWM_MODE_EXT_SPDETECT ((LVWM_ModeWord_bm)8)
++/**
++* @def LVWM_MODEWORD_BM_MIN
++* Minimal value for LVWM_ModeWord_bm
++* @see LVWM_ModeWord_bm
++*/
++#define LVWM_MODEWORD_BM_MIN ((LVWM_ModeWord_bm)0)
++/**
++* @def LVWM_MODEWORD_BM_MAX
++* Maximal value for LVWM_ModeWord_bm
++* @see LVWM_ModeWord_bm
++*/
++#define LVWM_MODE_AVL_FORMAX ((LVWM_ModeWord_bm)1)
++#define LVWM_MODE_SPDETECT_FORMAX ((LVWM_ModeWord_bm)2)
++#define LVWM_MODE_LIMITER_FORMAX ((LVWM_ModeWord_bm)4)
++#define LVWM_MODE_EXT_SPDETECT_FORMAX ((LVWM_ModeWord_bm)8)
++#define LVWM_MODEWORD_BM_MAX (LVWM_MODE_AVL_FORMAX | LVWM_MODE_SPDETECT_FORMAX | LVWM_MODE_LIMITER_FORMAX | LVWM_MODE_EXT_SPDETECT_FORMAX | ((LVWM_ModeWord_bm)0))
++/**
++<table border>
++ <tr>
++ <td><b>Name</b></td>
++ <td><b>Value</b></td>
++ <td><b>Description</b></td>
++ </tr>
++ <tr>
++ <td>@ref MODE_NLMS0</td>
++ <td>1</td>
++ <td>NLMS0 functionality</td>
++ </tr>
++ <tr>
++ <td>@ref MODE_NLMS1</td>
++ <td>2</td>
++ <td>NLMS1 functionality</td>
++ </tr>
++ <tr>
++ <td>@ref MODE_BEAMFORMER</td>
++ <td>4</td>
++ <td>Fiter-and-Sum Beamformer functionality</td>
++ </tr>
++ <tr>
++ <td>@ref MODE_PCD</td>
++ <td>8</td>
++ <td>Switch between PCD (Path change detector) and BSD (Broadside detector)</td>
++ </tr>
++ <tr>
++ <td>@ref MODE_GSC</td>
++ <td>16</td>
++ <td>Generalized Sidelobe Canceller functionality</td>
++ </tr>
++ <tr>
++ <td>@ref MODE_DNNS</td>
++ <td>32</td>
++ <td>Dynamic Non-stationary Noise Suppression functionality</td>
++ </tr>
++ <tr>
++ <td>@ref MODE_DES</td>
++ <td>64</td>
++ <td>Dynamic Echo Suppression functionality</td>
++ </tr>
++ <tr>
++ <td>@ref MODE_NS</td>
++ <td>128</td>
++ <td>Stationary Noise Suppression functionality</td>
++ </tr>
++ <tr>
++ <td>@ref MODE_NS_N</td>
++ <td>256</td>
++ <td>Non-stationary Noise Suppression functionality</td>
++ </tr>
++ <tr>
++ <td>@ref MODE_CAL</td>
++ <td>2048</td>
++ <td>Switch between initial or continuous calibration</td>
++ </tr>
++ <tr>
++ <td>@ref MODE_HB</td>
++ <td>16384</td>
++ <td>High Band mute/activated</td>
++ </tr>
++ <tr>
++ <td>@ref MODE_HS</td>
++ <td>32768</td>
++ <td>Horn Suppressor functionality (if available)</td>
++ </tr>
++</table> */
++typedef LVM_UINT16 LVNV_ModeWord_bm;
++/**
++* @def MODE_NLMS0
++* NLMS0 functionality
++* @see LVNV_ModeWord_bm
++*/
++#define MODE_NLMS0 ((LVNV_ModeWord_bm)1)
++/**
++* @def MODE_NLMS1
++* NLMS1 functionality
++* @see LVNV_ModeWord_bm
++*/
++#define MODE_NLMS1 ((LVNV_ModeWord_bm)2)
++/**
++* @def MODE_BEAMFORMER
++* Fiter-and-Sum Beamformer functionality
++* @see LVNV_ModeWord_bm
++*/
++#define MODE_BEAMFORMER ((LVNV_ModeWord_bm)4)
++/**
++* @def MODE_PCD
++* Switch between PCD (Path change detector) and BSD (Broadside detector)
++* @see LVNV_ModeWord_bm
++*/
++#define MODE_PCD ((LVNV_ModeWord_bm)8)
++/**
++* @def MODE_GSC
++* Generalized Sidelobe Canceller functionality
++* @see LVNV_ModeWord_bm
++*/
++#define MODE_GSC ((LVNV_ModeWord_bm)16)
++/**
++* @def MODE_DNNS
++* Dynamic Non-stationary Noise Suppression functionality
++* @see LVNV_ModeWord_bm
++*/
++#define MODE_DNNS ((LVNV_ModeWord_bm)32)
++/**
++* @def MODE_DES
++* Dynamic Echo Suppression functionality
++* @see LVNV_ModeWord_bm
++*/
++#define MODE_DES ((LVNV_ModeWord_bm)64)
++/**
++* @def MODE_NS
++* Stationary Noise Suppression functionality
++* @see LVNV_ModeWord_bm
++*/
++#define MODE_NS ((LVNV_ModeWord_bm)128)
++/**
++* @def MODE_NS_N
++* Non-stationary Noise Suppression functionality
++* @see LVNV_ModeWord_bm
++*/
++#define MODE_NS_N ((LVNV_ModeWord_bm)256)
++/**
++* @def MODE_CAL
++* Switch between initial or continuous calibration
++* @see LVNV_ModeWord_bm
++*/
++#define MODE_CAL ((LVNV_ModeWord_bm)2048)
++/**
++* @def MODE_HB
++* High Band mute/activated
++* @see LVNV_ModeWord_bm
++*/
++#define MODE_HB ((LVNV_ModeWord_bm)16384)
++/**
++* @def MODE_HS
++* Horn Suppressor functionality (if available)
++* @see LVNV_ModeWord_bm
++*/
++#define MODE_HS ((LVNV_ModeWord_bm)32768)
++/**
++* @def LVNV_MODEWORD_BM_MIN
++* Minimal value for LVNV_ModeWord_bm
++* @see LVNV_ModeWord_bm
++*/
++#define LVNV_MODEWORD_BM_MIN ((LVNV_ModeWord_bm)0)
++/**
++* @def LVNV_MODEWORD_BM_MAX
++* Maximal value for LVNV_ModeWord_bm
++* @see LVNV_ModeWord_bm
++*/
++#define MODE_NLMS0_FORMAX ((LVNV_ModeWord_bm)1)
++#define MODE_NLMS1_FORMAX ((LVNV_ModeWord_bm)2)
++#define MODE_BEAMFORMER_FORMAX ((LVNV_ModeWord_bm)4)
++#define MODE_PCD_FORMAX ((LVNV_ModeWord_bm)8)
++#define MODE_GSC_FORMAX ((LVNV_ModeWord_bm)16)
++#define MODE_DNNS_FORMAX ((LVNV_ModeWord_bm)32)
++#define MODE_DES_FORMAX ((LVNV_ModeWord_bm)64)
++#define MODE_NS_FORMAX ((LVNV_ModeWord_bm)128)
++#define MODE_NS_N_FORMAX ((LVNV_ModeWord_bm)256)
++#define MODE_CAL_FORMAX ((LVNV_ModeWord_bm)2048)
++#define MODE_HB_FORMAX ((LVNV_ModeWord_bm)16384)
++#define MODE_HS_FORMAX ((LVNV_ModeWord_bm)32768)
++#define LVNV_MODEWORD_BM_MAX (MODE_NLMS0_FORMAX | MODE_NLMS1_FORMAX | MODE_BEAMFORMER_FORMAX | MODE_PCD_FORMAX | MODE_GSC_FORMAX | MODE_DNNS_FORMAX | MODE_DES_FORMAX | MODE_NS_FORMAX | MODE_NS_N_FORMAX | MODE_CAL_FORMAX | MODE_HB_FORMAX | MODE_HS_FORMAX | ((LVNV_ModeWord_bm)0))
++/**
++<table border>
++ <tr>
++ <td><b>Name</b></td>
++ <td><b>Value</b></td>
++ <td><b>Description</b></td>
++ </tr>
++ <tr>
++ <td>@ref MODE2_FSB_CARDIOID</td>
++ <td>1</td>
++ <td>FSB update based on speech detection in cardioid</td>
++ </tr>
++ <tr>
++ <td>@ref MODE2_FSB_WITHINBEAM</td>
++ <td>2</td>
++ <td>FSB update based on withinbeam detection</td>
++ </tr>
++ <tr>
++ <td>@ref MODE2_CAL_UPDATE</td>
++ <td>4</td>
++ <td>Switch for calibration functionality between updated or not-updated</td>
++ </tr>
++ <tr>
++ <td>@ref MODE2_BEAMDAMAGE</td>
++ <td>8</td>
++ <td>Microphone coverage protection</td>
++ </tr>
++</table> */
++typedef LVM_UINT16 LVNV_Mode2Word_bm;
++/**
++* @def MODE2_FSB_CARDIOID
++* FSB update based on speech detection in cardioid
++* @see LVNV_Mode2Word_bm
++*/
++#define MODE2_FSB_CARDIOID ((LVNV_Mode2Word_bm)1)
++/**
++* @def MODE2_FSB_WITHINBEAM
++* FSB update based on withinbeam detection
++* @see LVNV_Mode2Word_bm
++*/
++#define MODE2_FSB_WITHINBEAM ((LVNV_Mode2Word_bm)2)
++/**
++* @def MODE2_CAL_UPDATE
++* Switch for calibration functionality between updated or not-updated
++* @see LVNV_Mode2Word_bm
++*/
++#define MODE2_CAL_UPDATE ((LVNV_Mode2Word_bm)4)
++/**
++* @def MODE2_BEAMDAMAGE
++* Microphone coverage protection
++* @see LVNV_Mode2Word_bm
++*/
++#define MODE2_BEAMDAMAGE ((LVNV_Mode2Word_bm)8)
++/**
++* @def LVNV_MODE2WORD_BM_MIN
++* Minimal value for LVNV_Mode2Word_bm
++* @see LVNV_Mode2Word_bm
++*/
++#define LVNV_MODE2WORD_BM_MIN ((LVNV_Mode2Word_bm)0)
++/**
++* @def LVNV_MODE2WORD_BM_MAX
++* Maximal value for LVNV_Mode2Word_bm
++* @see LVNV_Mode2Word_bm
++*/
++#define MODE2_FSB_CARDIOID_FORMAX ((LVNV_Mode2Word_bm)1)
++#define MODE2_FSB_WITHINBEAM_FORMAX ((LVNV_Mode2Word_bm)2)
++#define MODE2_CAL_UPDATE_FORMAX ((LVNV_Mode2Word_bm)4)
++#define MODE2_BEAMDAMAGE_FORMAX ((LVNV_Mode2Word_bm)8)
++#define LVNV_MODE2WORD_BM_MAX (MODE2_FSB_CARDIOID_FORMAX | MODE2_FSB_WITHINBEAM_FORMAX | MODE2_CAL_UPDATE_FORMAX | MODE2_BEAMDAMAGE_FORMAX | ((LVNV_Mode2Word_bm)0))
++/**
++<table border>
++ <tr>
++ <td><b>Name</b></td>
++ <td><b>Value</b></td>
++ <td><b>Description</b></td>
++ </tr>
++ <tr>
++ <td>@ref TUNING_MODE_NLMS1</td>
++ <td>1</td>
++ <td>NLMS1 output</td>
++ </tr>
++ <tr>
++ <td>@ref TUNING_MODE_FSB</td>
++ <td>2</td>
++ <td>FSB noise reference output</td>
++ </tr>
++ <tr>
++ <td>@ref TUNING_MODE_WITHINBEAM</td>
++ <td>8</td>
++ <td>Tuning beep when Withinbeam=1</td>
++ </tr>
++ <tr>
++ <td>@ref TUNING_MODE_UPDATEONOFF</td>
++ <td>16</td>
++ <td>Tuning beep when FSB is updated</td>
++ </tr>
++ <tr>
++ <td>@ref TUNING_MODE_CAL_MICPOW</td>
++ <td>64</td>
++ <td>Tuning beep when MicPow is lower than Cal_micPowFloorMin</td>
++ </tr>
++ <tr>
++ <td>@ref TUNING_MODE_BROADSIDE</td>
++ <td>128</td>
++ <td>Tuning beep when broadside is detected</td>
++ </tr>
++</table> */
++typedef LVM_UINT16 LVNV_TuningModeWord_bm;
++/**
++* @def TUNING_MODE_NLMS1
++* NLMS1 output
++* @see LVNV_TuningModeWord_bm
++*/
++#define TUNING_MODE_NLMS1 ((LVNV_TuningModeWord_bm)1)
++/**
++* @def TUNING_MODE_FSB
++* FSB noise reference output
++* @see LVNV_TuningModeWord_bm
++*/
++#define TUNING_MODE_FSB ((LVNV_TuningModeWord_bm)2)
++/**
++* @def TUNING_MODE_WITHINBEAM
++* Tuning beep when Withinbeam=1
++* @see LVNV_TuningModeWord_bm
++*/
++#define TUNING_MODE_WITHINBEAM ((LVNV_TuningModeWord_bm)8)
++/**
++* @def TUNING_MODE_UPDATEONOFF
++* Tuning beep when FSB is updated
++* @see LVNV_TuningModeWord_bm
++*/
++#define TUNING_MODE_UPDATEONOFF ((LVNV_TuningModeWord_bm)16)
++/**
++* @def TUNING_MODE_CAL_MICPOW
++* Tuning beep when MicPow is lower than Cal_micPowFloorMin
++* @see LVNV_TuningModeWord_bm
++*/
++#define TUNING_MODE_CAL_MICPOW ((LVNV_TuningModeWord_bm)64)
++/**
++* @def TUNING_MODE_BROADSIDE
++* Tuning beep when broadside is detected
++* @see LVNV_TuningModeWord_bm
++*/
++#define TUNING_MODE_BROADSIDE ((LVNV_TuningModeWord_bm)128)
++/**
++* @def LVNV_TUNINGMODEWORD_BM_MIN
++* Minimal value for LVNV_TuningModeWord_bm
++* @see LVNV_TuningModeWord_bm
++*/
++#define LVNV_TUNINGMODEWORD_BM_MIN ((LVNV_TuningModeWord_bm)0)
++/**
++* @def LVNV_TUNINGMODEWORD_BM_MAX
++* Maximal value for LVNV_TuningModeWord_bm
++* @see LVNV_TuningModeWord_bm
++*/
++#define TUNING_MODE_NLMS1_FORMAX ((LVNV_TuningModeWord_bm)1)
++#define TUNING_MODE_FSB_FORMAX ((LVNV_TuningModeWord_bm)2)
++#define TUNING_MODE_WITHINBEAM_FORMAX ((LVNV_TuningModeWord_bm)8)
++#define TUNING_MODE_UPDATEONOFF_FORMAX ((LVNV_TuningModeWord_bm)16)
++#define TUNING_MODE_CAL_MICPOW_FORMAX ((LVNV_TuningModeWord_bm)64)
++#define TUNING_MODE_BROADSIDE_FORMAX ((LVNV_TuningModeWord_bm)128)
++#define LVNV_TUNINGMODEWORD_BM_MAX (TUNING_MODE_NLMS1_FORMAX | TUNING_MODE_FSB_FORMAX | TUNING_MODE_WITHINBEAM_FORMAX | TUNING_MODE_UPDATEONOFF_FORMAX | TUNING_MODE_CAL_MICPOW_FORMAX | TUNING_MODE_BROADSIDE_FORMAX | ((LVNV_TuningModeWord_bm)0))
++/**
++<table border>
++ <tr>
++ <td><b>Name</b></td>
++ <td><b>Value</b></td>
++ <td><b>Description</b></td>
++ </tr>
++ <tr>
++ <td>@ref LVNV_STATUS_LOST_BEAM</td>
++ <td>1</td>
++ <td>LostBeam detections</td>
++ </tr>
++ <tr>
++ <td>@ref LVNV_STATUS_MIC_COV</td>
++ <td>2</td>
++ <td>Microphone Coverage detections</td>
++ </tr>
++ <tr>
++ <td>@ref LVNV_STATUS_FSB_UPDATE</td>
++ <td>4</td>
++ <td>FSB updates</td>
++ </tr>
++ <tr>
++ <td>@ref LVNV_STATUS_BEAM_DAMAGE</td>
++ <td>8</td>
++ <td>BeamDamage detections</td>
++ </tr>
++ <tr>
++ <td>@ref LVNV_STATUS_GSC_UPDATE</td>
++ <td>16</td>
++ <td>GSC updates</td>
++ </tr>
++ <tr>
++ <td>@ref LVNV_STATUS_DNNS_WBEAM</td>
++ <td>32</td>
++ <td>DNNS WithinBeam detections</td>
++ </tr>
++ <tr>
++ <td>@ref LVNV_STATUS_DNNS_ACTIVITY</td>
++ <td>64</td>
++ <td>DNNS activity detections</td>
++ </tr>
++ <tr>
++ <td>@ref LVNV_STATUS_CAL_MICPOW</td>
++ <td>128</td>
++ <td>Calibration Microphone Power</td>
++ </tr>
++ <tr>
++ <td>@ref LVNV_STATUS_MICPOWSP</td>
++ <td>256</td>
++ <td>(LV1008) MicPow Speech detections</td>
++ </tr>
++ <tr>
++ <td>@ref LVNV_STATUS_BROADSIDE_FLAG</td>
++ <td>512</td>
++ <td>(LV2370) Broadside detection flag</td>
++ </tr>
++ <tr>
++ <td>@ref LVNV_STATUS_CAL_UPDATED</td>
++ <td>1024</td>
++ <td>(LV8237) Calibration updated flag</td>
++ </tr>
++ <tr>
++ <td>@ref LVNV_STATUS_WBEAM_FIX</td>
++ <td>2048</td>
++ <td>WithinBeam detection for Fixed Beamformer (if available).</td>
++ </tr>
++</table> */
++typedef LVM_UINT16 LVNV_StatusWord_bm;
++/**
++* @def LVNV_STATUS_LOST_BEAM
++* LostBeam detections
++* @see LVNV_StatusWord_bm
++*/
++#define LVNV_STATUS_LOST_BEAM ((LVNV_StatusWord_bm)1)
++/**
++* @def LVNV_STATUS_MIC_COV
++* Microphone Coverage detections
++* @see LVNV_StatusWord_bm
++*/
++#define LVNV_STATUS_MIC_COV ((LVNV_StatusWord_bm)2)
++/**
++* @def LVNV_STATUS_FSB_UPDATE
++* FSB updates
++* @see LVNV_StatusWord_bm
++*/
++#define LVNV_STATUS_FSB_UPDATE ((LVNV_StatusWord_bm)4)
++/**
++* @def LVNV_STATUS_BEAM_DAMAGE
++* BeamDamage detections
++* @see LVNV_StatusWord_bm
++*/
++#define LVNV_STATUS_BEAM_DAMAGE ((LVNV_StatusWord_bm)8)
++/**
++* @def LVNV_STATUS_GSC_UPDATE
++* GSC updates
++* @see LVNV_StatusWord_bm
++*/
++#define LVNV_STATUS_GSC_UPDATE ((LVNV_StatusWord_bm)16)
++/**
++* @def LVNV_STATUS_DNNS_WBEAM
++* DNNS WithinBeam detections
++* @see LVNV_StatusWord_bm
++*/
++#define LVNV_STATUS_DNNS_WBEAM ((LVNV_StatusWord_bm)32)
++/**
++* @def LVNV_STATUS_DNNS_ACTIVITY
++* DNNS activity detections
++* @see LVNV_StatusWord_bm
++*/
++#define LVNV_STATUS_DNNS_ACTIVITY ((LVNV_StatusWord_bm)64)
++/**
++* @def LVNV_STATUS_CAL_MICPOW
++* Calibration Microphone Power
++* @see LVNV_StatusWord_bm
++*/
++#define LVNV_STATUS_CAL_MICPOW ((LVNV_StatusWord_bm)128)
++/**
++* @def LVNV_STATUS_MICPOWSP
++* (LV1008) MicPow Speech detections
++* @see LVNV_StatusWord_bm
++*/
++#define LVNV_STATUS_MICPOWSP ((LVNV_StatusWord_bm)256)
++/**
++* @def LVNV_STATUS_BROADSIDE_FLAG
++* (LV2370) Broadside detection flag
++* @see LVNV_StatusWord_bm
++*/
++#define LVNV_STATUS_BROADSIDE_FLAG ((LVNV_StatusWord_bm)512)
++/**
++* @def LVNV_STATUS_CAL_UPDATED
++* (LV8237) Calibration updated flag
++* @see LVNV_StatusWord_bm
++*/
++#define LVNV_STATUS_CAL_UPDATED ((LVNV_StatusWord_bm)1024)
++/**
++* @def LVNV_STATUS_WBEAM_fix
++* WithinBeam detection for Fixed Beamformer (if available).
++* @see LVNV_StatusWord_bm
++*/
++#define LVNV_STATUS_WBEAM_FIX ((LVNV_StatusWord_bm)2048)
++/**
++* @def LVNV_STATUSWORD_BM_MIN
++* Minimal value for LVNV_StatusWord_bm
++* @see LVNV_StatusWord_bm
++*/
++#define LVNV_STATUSWORD_BM_MIN ((LVNV_StatusWord_bm)0)
++/**
++* @def LVNV_STATUSWORD_BM_MAX
++* Maximal value for LVNV_StatusWord_bm
++* @see LVNV_StatusWord_bm
++*/
++#define LVNV_STATUS_LOST_BEAM_FORMAX ((LVNV_StatusWord_bm)1)
++#define LVNV_STATUS_MIC_COV_FORMAX ((LVNV_StatusWord_bm)2)
++#define LVNV_STATUS_FSB_UPDATE_FORMAX ((LVNV_StatusWord_bm)4)
++#define LVNV_STATUS_BEAM_DAMAGE_FORMAX ((LVNV_StatusWord_bm)8)
++#define LVNV_STATUS_GSC_UPDATE_FORMAX ((LVNV_StatusWord_bm)16)
++#define LVNV_STATUS_DNNS_WBEAM_FORMAX ((LVNV_StatusWord_bm)32)
++#define LVNV_STATUS_DNNS_ACTIVITY_FORMAX ((LVNV_StatusWord_bm)64)
++#define LVNV_STATUS_CAL_MICPOW_FORMAX ((LVNV_StatusWord_bm)128)
++#define LVNV_STATUS_MICPOWSP_FORMAX ((LVNV_StatusWord_bm)256)
++#define LVNV_STATUS_BROADSIDE_FLAG_FORMAX ((LVNV_StatusWord_bm)512)
++#define LVNV_STATUS_CAL_UPDATED_FORMAX ((LVNV_StatusWord_bm)1024)
++#define LVNV_STATUS_WBEAM_FIX_FORMAX ((LVNV_StatusWord_bm)2048)
++#define LVNV_STATUSWORD_BM_MAX (LVNV_STATUS_LOST_BEAM_FORMAX | LVNV_STATUS_MIC_COV_FORMAX | LVNV_STATUS_FSB_UPDATE_FORMAX | LVNV_STATUS_BEAM_DAMAGE_FORMAX | LVNV_STATUS_GSC_UPDATE_FORMAX | LVNV_STATUS_DNNS_WBEAM_FORMAX | LVNV_STATUS_DNNS_ACTIVITY_FORMAX | LVNV_STATUS_CAL_MICPOW_FORMAX | LVNV_STATUS_MICPOWSP_FORMAX | LVNV_STATUS_BROADSIDE_FLAG_FORMAX | LVNV_STATUS_CAL_UPDATED_FORMAX | LVNV_STATUS_WBEAM_FIX_FORMAX | ((LVNV_StatusWord_bm)0))
++/**
++<table border>
++ <tr>
++ <td><b>Name</b></td>
++ <td><b>Value</b></td>
++ <td><b>Description</b></td>
++ </tr>
++ <tr>
++ <td>@ref LVHF_CONTROL_TUNE_PATHCHANGE</td>
++ <td>1</td>
++ <td>PCD tuning beep</td>
++ </tr>
++ <tr>
++ <td>@ref LVHF_CONTROL_TUNE_CLIP</td>
++ <td>2</td>
++ <td>SPDET_x_clip tuning beep</td>
++ </tr>
++ <tr>
++ <td>@ref LVHF_CONTROL_TUNE_FAR_SPEAKS</td>
++ <td>4</td>
++ <td>SPDET_far tuning beep</td>
++ </tr>
++ <tr>
++ <td>@ref LVHF_CONTROL_TUNE_MIC_SPEAKS</td>
++ <td>8</td>
++ <td>SPDET_mic tuning beep</td>
++ </tr>
++ <tr>
++ <td>@ref LVHF_CONTROL_TUNE_HB_MUTE</td>
++ <td>16</td>
++ <td>Mute high band (4kHz-8kHz). Should be disabled by default.</td>
++ </tr>
++ <tr>
++ <td>@ref LVHF_CONTROL_TUNE_TB_MUTE</td>
++ <td>32</td>
++ <td>Mute top band (above 8kHz). Should be disabled by default.</td>
++ </tr>
++</table> */
++typedef LVM_UINT16 LVHF_TuningModeWord;
++/**
++* @def LVHF_CONTROL_TUNE_PATHCHANGE
++* PCD tuning beep
++* @see LVHF_TuningModeWord
++*/
++#define LVHF_CONTROL_TUNE_PATHCHANGE ((LVHF_TuningModeWord)1)
++/**
++* @def LVHF_CONTROL_TUNE_CLIP
++* SPDET_x_clip tuning beep
++* @see LVHF_TuningModeWord
++*/
++#define LVHF_CONTROL_TUNE_CLIP ((LVHF_TuningModeWord)2)
++/**
++* @def LVHF_CONTROL_TUNE_FAR_SPEAKS
++* SPDET_far tuning beep
++* @see LVHF_TuningModeWord
++*/
++#define LVHF_CONTROL_TUNE_FAR_SPEAKS ((LVHF_TuningModeWord)4)
++/**
++* @def LVHF_CONTROL_TUNE_MIC_SPEAKS
++* SPDET_mic tuning beep
++* @see LVHF_TuningModeWord
++*/
++#define LVHF_CONTROL_TUNE_MIC_SPEAKS ((LVHF_TuningModeWord)8)
++/**
++* @def LVHF_CONTROL_TUNE_HB_MUTE
++* Mute high band (4kHz-8kHz). Should be disabled by default.
++* @see LVHF_TuningModeWord
++*/
++#define LVHF_CONTROL_TUNE_HB_MUTE ((LVHF_TuningModeWord)16)
++/**
++* @def LVHF_CONTROL_TUNE_TB_MUTE
++* Mute top band (above 8kHz). Should be disabled by default.
++* @see LVHF_TuningModeWord
++*/
++#define LVHF_CONTROL_TUNE_TB_MUTE ((LVHF_TuningModeWord)32)
++/**
++* @def LVHF_TUNINGMODEWORD_MIN
++* Minimal value for LVHF_TuningModeWord
++* @see LVHF_TuningModeWord
++*/
++#define LVHF_TUNINGMODEWORD_MIN ((LVHF_TuningModeWord)0)
++/**
++* @def LVHF_TUNINGMODEWORD_MAX
++* Maximal value for LVHF_TuningModeWord
++* @see LVHF_TuningModeWord
++*/
++#define LVHF_CONTROL_TUNE_PATHCHANGE_FORMAX ((LVHF_TuningModeWord)1)
++#define LVHF_CONTROL_TUNE_CLIP_FORMAX ((LVHF_TuningModeWord)2)
++#define LVHF_CONTROL_TUNE_FAR_SPEAKS_FORMAX ((LVHF_TuningModeWord)4)
++#define LVHF_CONTROL_TUNE_MIC_SPEAKS_FORMAX ((LVHF_TuningModeWord)8)
++#define LVHF_CONTROL_TUNE_HB_MUTE_FORMAX ((LVHF_TuningModeWord)16)
++#define LVHF_CONTROL_TUNE_TB_MUTE_FORMAX ((LVHF_TuningModeWord)32)
++#define LVHF_TUNINGMODEWORD_MAX (LVHF_CONTROL_TUNE_PATHCHANGE_FORMAX | LVHF_CONTROL_TUNE_CLIP_FORMAX | LVHF_CONTROL_TUNE_FAR_SPEAKS_FORMAX | LVHF_CONTROL_TUNE_MIC_SPEAKS_FORMAX | LVHF_CONTROL_TUNE_HB_MUTE_FORMAX | LVHF_CONTROL_TUNE_TB_MUTE_FORMAX | ((LVHF_TuningModeWord)0))
++/**
++<table border>
++ <tr>
++ <td><b>Name</b></td>
++ <td><b>Value</b></td>
++ <td><b>Description</b></td>
++ </tr>
++ <tr>
++ <td>@ref LVHF_MODE_NLMS</td>
++ <td>1</td>
++ <td>NLMS functionality</td>
++ </tr>
++ <tr>
++ <td>@ref LVHF_MODE_DES</td>
++ <td>2</td>
++ <td>DES (Dynamic Echo Suppression)</td>
++ </tr>
++ <tr>
++ <td>@ref LVHF_MODE_NS</td>
++ <td>4</td>
++ <td>NS (Noise Suppression)</td>
++ </tr>
++ <tr>
++ <td>@ref LVHF_MODE_CNI</td>
++ <td>8</td>
++ <td>CNI (Comfort Noise Injection)</td>
++ </tr>
++ <tr>
++ <td>@ref LVHF_MODE_NLES</td>
++ <td>16</td>
++ <td>NLES (Non Linear Echo Suppression)</td>
++ </tr>
++ <tr>
++ <td>@ref LVHF_MODE_PCD_DT</td>
++ <td>64</td>
++ <td>DT (Double Talk) protection after PCD</td>
++ </tr>
++ <tr>
++ <td>@ref LVHF_MODE_PCD</td>
++ <td>128</td>
++ <td>PCD (Path Change Detector)</td>
++ </tr>
++ <tr>
++ <td>@ref LVHF_MODE_INIT_ES</td>
++ <td>256</td>
++ <td>Initial echo suppression setting by PCD_gamma_e_rescue</td>
++ </tr>
++ <tr>
++ <td>@ref LVHF_MODE_HS</td>
++ <td>512</td>
++ <td>HornSuppression (if available)</td>
++ </tr>
++ <tr>
++ <td>@ref LVHF_MODE_PRENLMS</td>
++ <td>4096</td>
++ <td>Pre-NLMS preprocessing</td>
++ </tr>
++</table> */
++typedef LVM_UINT16 LVHF_ModeWord_bm;
++/**
++* @def LVHF_MODE_NLMS
++* NLMS functionality
++* @see LVHF_ModeWord_bm
++*/
++#define LVHF_MODE_NLMS ((LVHF_ModeWord_bm)1)
++/**
++* @def LVHF_MODE_DES
++* DES (Dynamic Echo Suppression)
++* @see LVHF_ModeWord_bm
++*/
++#define LVHF_MODE_DES ((LVHF_ModeWord_bm)2)
++/**
++* @def LVHF_MODE_NS
++* NS (Noise Suppression)
++* @see LVHF_ModeWord_bm
++*/
++#define LVHF_MODE_NS ((LVHF_ModeWord_bm)4)
++/**
++* @def LVHF_MODE_CNI
++* CNI (Comfort Noise Injection)
++* @see LVHF_ModeWord_bm
++*/
++#define LVHF_MODE_CNI ((LVHF_ModeWord_bm)8)
++/**
++* @def LVHF_MODE_NLES
++* NLES (Non Linear Echo Suppression)
++* @see LVHF_ModeWord_bm
++*/
++#define LVHF_MODE_NLES ((LVHF_ModeWord_bm)16)
++/**
++* @def LVHF_MODE_PCD_DT
++* DT (Double Talk) protection after PCD
++* @see LVHF_ModeWord_bm
++*/
++#define LVHF_MODE_PCD_DT ((LVHF_ModeWord_bm)64)
++/**
++* @def LVHF_MODE_PCD
++* PCD (Path Change Detector)
++* @see LVHF_ModeWord_bm
++*/
++#define LVHF_MODE_PCD ((LVHF_ModeWord_bm)128)
++/**
++* @def LVHF_MODE_INIT_ES
++* Initial echo suppression setting by PCD_gamma_e_rescue
++* @see LVHF_ModeWord_bm
++*/
++#define LVHF_MODE_INIT_ES ((LVHF_ModeWord_bm)256)
++/**
++* @def LVHF_MODE_HS
++* HornSuppression (if available)
++* @see LVHF_ModeWord_bm
++*/
++#define LVHF_MODE_HS ((LVHF_ModeWord_bm)512)
++/**
++* @def LVHF_MODE_PRENLMS
++* Pre-NLMS preprocessing
++* @see LVHF_ModeWord_bm
++*/
++#define LVHF_MODE_PRENLMS ((LVHF_ModeWord_bm)4096)
++/**
++* @def LVHF_MODEWORD_BM_MIN
++* Minimal value for LVHF_ModeWord_bm
++* @see LVHF_ModeWord_bm
++*/
++#define LVHF_MODEWORD_BM_MIN ((LVHF_ModeWord_bm)0)
++/**
++* @def LVHF_MODEWORD_BM_MAX
++* Maximal value for LVHF_ModeWord_bm
++* @see LVHF_ModeWord_bm
++*/
++#define LVHF_MODE_NLMS_FORMAX ((LVHF_ModeWord_bm)1)
++#define LVHF_MODE_DES_FORMAX ((LVHF_ModeWord_bm)2)
++#define LVHF_MODE_NS_FORMAX ((LVHF_ModeWord_bm)4)
++#define LVHF_MODE_CNI_FORMAX ((LVHF_ModeWord_bm)8)
++#define LVHF_MODE_NLES_FORMAX ((LVHF_ModeWord_bm)16)
++#define LVHF_MODE_PCD_DT_FORMAX ((LVHF_ModeWord_bm)64)
++#define LVHF_MODE_PCD_FORMAX ((LVHF_ModeWord_bm)128)
++#define LVHF_MODE_INIT_ES_FORMAX ((LVHF_ModeWord_bm)256)
++#define LVHF_MODE_HS_FORMAX ((LVHF_ModeWord_bm)512)
++#define LVHF_MODE_PRENLMS_FORMAX ((LVHF_ModeWord_bm)4096)
++#define LVHF_MODEWORD_BM_MAX (LVHF_MODE_NLMS_FORMAX | LVHF_MODE_DES_FORMAX | LVHF_MODE_NS_FORMAX | LVHF_MODE_CNI_FORMAX | LVHF_MODE_NLES_FORMAX | LVHF_MODE_PCD_DT_FORMAX | LVHF_MODE_PCD_FORMAX | LVHF_MODE_INIT_ES_FORMAX | LVHF_MODE_HS_FORMAX | LVHF_MODE_PRENLMS_FORMAX | ((LVHF_ModeWord_bm)0))
++/**
++<table border>
++ <tr>
++ <td><b>Name</b></td>
++ <td><b>Value</b></td>
++ <td><b>Description</b></td>
++ </tr>
++ <tr>
++ <td>@ref LVHF_STATUS_FAR_SPEAKS</td>
++ <td>1</td>
++ <td>FarEnd is speaking</td>
++ </tr>
++ <tr>
++ <td>@ref LVHF_STATUS_FAR_STARTS</td>
++ <td>2</td>
++ <td>FarEnd starts to speak</td>
++ </tr>
++ <tr>
++ <td>@ref LVHF_STATUS_MIC_SPEAKS</td>
++ <td>4</td>
++ <td>Mic activity detected</td>
++ </tr>
++ <tr>
++ <td>@ref LVHF_STATUS_CLIP</td>
++ <td>8</td>
++ <td>Clipping Detected</td>
++ </tr>
++ <tr>
++ <td>@ref LVHF_STATUS_PATHCHANGE</td>
++ <td>16</td>
++ <td>Path Change detected</td>
++ </tr>
++</table> */
++typedef LVM_UINT16 LVHF_StatusWord_bm;
++/**
++* @def LVHF_STATUS_FAR_SPEAKS
++* FarEnd is speaking
++* @see LVHF_StatusWord_bm
++*/
++#define LVHF_STATUS_FAR_SPEAKS ((LVHF_StatusWord_bm)1)
++/**
++* @def LVHF_STATUS_FAR_STARTS
++* FarEnd starts to speak
++* @see LVHF_StatusWord_bm
++*/
++#define LVHF_STATUS_FAR_STARTS ((LVHF_StatusWord_bm)2)
++/**
++* @def LVHF_STATUS_MIC_SPEAKS
++* Mic activity detected
++* @see LVHF_StatusWord_bm
++*/
++#define LVHF_STATUS_MIC_SPEAKS ((LVHF_StatusWord_bm)4)
++/**
++* @def LVHF_STATUS_CLIP
++* Clipping Detected
++* @see LVHF_StatusWord_bm
++*/
++#define LVHF_STATUS_CLIP ((LVHF_StatusWord_bm)8)
++/**
++* @def LVHF_STATUS_PATHCHANGE
++* Path Change detected
++* @see LVHF_StatusWord_bm
++*/
++#define LVHF_STATUS_PATHCHANGE ((LVHF_StatusWord_bm)16)
++/**
++* @def LVHF_STATUSWORD_BM_MIN
++* Minimal value for LVHF_StatusWord_bm
++* @see LVHF_StatusWord_bm
++*/
++#define LVHF_STATUSWORD_BM_MIN ((LVHF_StatusWord_bm)0)
++/**
++* @def LVHF_STATUSWORD_BM_MAX
++* Maximal value for LVHF_StatusWord_bm
++* @see LVHF_StatusWord_bm
++*/
++#define LVHF_STATUS_FAR_SPEAKS_FORMAX ((LVHF_StatusWord_bm)1)
++#define LVHF_STATUS_FAR_STARTS_FORMAX ((LVHF_StatusWord_bm)2)
++#define LVHF_STATUS_MIC_SPEAKS_FORMAX ((LVHF_StatusWord_bm)4)
++#define LVHF_STATUS_CLIP_FORMAX ((LVHF_StatusWord_bm)8)
++#define LVHF_STATUS_PATHCHANGE_FORMAX ((LVHF_StatusWord_bm)16)
++#define LVHF_STATUSWORD_BM_MAX (LVHF_STATUS_FAR_SPEAKS_FORMAX | LVHF_STATUS_FAR_STARTS_FORMAX | LVHF_STATUS_MIC_SPEAKS_FORMAX | LVHF_STATUS_CLIP_FORMAX | LVHF_STATUS_PATHCHANGE_FORMAX | ((LVHF_StatusWord_bm)0))
++
++#define LVVIDHEADER_LVVE_RX_MASK1_LVWIREFORMAT_LENGTH (2) ///< Number of bytes to encode @ref LVVIDHeader_LVVE_Rx_Mask1_bm in LVWireFormat.
++
++#define LVVIDHEADER_LVVE_RX_MASK2_LVWIREFORMAT_LENGTH (2) ///< Number of bytes to encode @ref LVVIDHeader_LVVE_Rx_Mask2_bm in LVWireFormat.
++
++#define LVVIDHEADER_LVVE_TX_MASK1_LVWIREFORMAT_LENGTH (2) ///< Number of bytes to encode @ref LVVIDHeader_LVVE_Tx_Mask1_bm in LVWireFormat.
++
++#define LVVIDHEADER_LVVE_TX_MASK2_LVWIREFORMAT_LENGTH (2) ///< Number of bytes to encode @ref LVVIDHeader_LVVE_Tx_Mask2_bm in LVWireFormat.
++
++#define LVVIDHEADER_CONFIGURATIONS_MASK1_LVWIREFORMAT_LENGTH (2) ///< Number of bytes to encode @ref LVVIDHeader_Configurations_Mask1_bm in LVWireFormat.
++
++#define LVVIDHEADER_CONFIGURATIONS_MASK2_LVWIREFORMAT_LENGTH (2) ///< Number of bytes to encode @ref LVVIDHeader_Configurations_Mask2_bm in LVWireFormat.
++
++#define LVVC_MODEWORD_LVWIREFORMAT_LENGTH (2) ///< Number of bytes to encode @ref LVVC_ModeWord_bm in LVWireFormat.
++
++#define LVFENS_MODEWORD_LVWIREFORMAT_LENGTH (2) ///< Number of bytes to encode @ref LVFENS_ModeWord_bm in LVWireFormat.
++
++#define LVWM_MODEWORD_LVWIREFORMAT_LENGTH (2) ///< Number of bytes to encode @ref LVWM_ModeWord_bm in LVWireFormat.
++
++#define LVNV_MODEWORD_LVWIREFORMAT_LENGTH (2) ///< Number of bytes to encode @ref LVNV_ModeWord_bm in LVWireFormat.
++
++#define LVNV_MODE2WORD_LVWIREFORMAT_LENGTH (2) ///< Number of bytes to encode @ref LVNV_Mode2Word_bm in LVWireFormat.
++
++#define LVNV_TUNINGMODEWORD_LVWIREFORMAT_LENGTH (2) ///< Number of bytes to encode @ref LVNV_TuningModeWord_bm in LVWireFormat.
++
++#define LVNV_STATUSWORD_LVWIREFORMAT_LENGTH (2) ///< Number of bytes to encode @ref LVNV_StatusWord_bm in LVWireFormat.
++
++#define LVHF_TUNINGMODEWORD_LVWIREFORMAT_LENGTH (2) ///< Number of bytes to encode @ref LVHF_TuningModeWord in LVWireFormat.
++
++#define LVHF_MODEWORD_LVWIREFORMAT_LENGTH (2) ///< Number of bytes to encode @ref LVHF_ModeWord_bm in LVWireFormat.
++
++#define LVHF_STATUSWORD_LVWIREFORMAT_LENGTH (2) ///< Number of bytes to encode @ref LVHF_StatusWord_bm in LVWireFormat.
++
++#define LVM_MODE_LVWIREFORMAT_LENGTH (4) ///< Number of bytes to encode @ref LVM_Mode_en in LVWireFormat.
++
++#define LVM_CONFIG_LVWIREFORMAT_LENGTH (4) ///< Number of bytes to encode @ref LVM_Config_en in LVWireFormat.
++
++#define LVM_FS_LVWIREFORMAT_LENGTH (4) ///< Number of bytes to encode @ref LVM_Fs_en in LVWireFormat.
++
++#define LVVIDHEADER_MESSAGEID_LVWIREFORMAT_LENGTH (4) ///< Number of bytes to encode @ref LVVIDHeader_MessageID_en in LVWireFormat.
++
++#define LVVIDHEADER_RETURNSTATUS_LVWIREFORMAT_LENGTH (4) ///< Number of bytes to encode @ref LVVIDHeader_ReturnStatus_en in LVWireFormat.
++
++#define LVVE_RX_MODE_LVWIREFORMAT_LENGTH (4) ///< Number of bytes to encode @ref LVVE_Rx_Mode_en in LVWireFormat.
++
++#define LVVE_TX_MODE_LVWIREFORMAT_LENGTH (4) ///< Number of bytes to encode @ref LVVE_Tx_Mode_en in LVWireFormat.
++
++#define LVVIDHEADER_CONTROLPARAMS_LVWIREFORMAT_LENGTH (7 \
++ + LVVIDHEADER_LVVE_RX_MASK1_LVWIREFORMAT_LENGTH \
++ + LVVIDHEADER_LVVE_RX_MASK2_LVWIREFORMAT_LENGTH \
++ + LVVIDHEADER_LVVE_TX_MASK1_LVWIREFORMAT_LENGTH \
++ + LVVIDHEADER_LVVE_TX_MASK2_LVWIREFORMAT_LENGTH \
++ + LVVIDHEADER_CONFIGURATIONS_MASK1_LVWIREFORMAT_LENGTH \
++ + LVVIDHEADER_CONFIGURATIONS_MASK2_LVWIREFORMAT_LENGTH \
++ + LVVIDHEADER_MESSAGEID_LVWIREFORMAT_LENGTH \
++ + LVM_FS_LVWIREFORMAT_LENGTH) ///< Number of bytes to encode LVVIDHeader ControlParameters in LVWireFormat.
++
++#define LVVC_CONTROLPARAMS_LVWIREFORMAT_LENGTH (22 \
++ + LVM_MODE_LVWIREFORMAT_LENGTH \
++ + LVVC_MODEWORD_LVWIREFORMAT_LENGTH) ///< Number of bytes to encode LVVC ControlParameters in LVWireFormat.
++
++#define LVFENS_CONTROLPARAMS_LVWIREFORMAT_LENGTH (2 \
++ + LVM_MODE_LVWIREFORMAT_LENGTH \
++ + LVFENS_MODEWORD_LVWIREFORMAT_LENGTH) ///< Number of bytes to encode LVFENS ControlParameters in LVWireFormat.
++
++#define LVWM_CONTROLPARAMS_LVWIREFORMAT_LENGTH (14 \
++ + LVM_MODE_LVWIREFORMAT_LENGTH \
++ + LVWM_MODEWORD_LVWIREFORMAT_LENGTH) ///< Number of bytes to encode LVWM ControlParameters in LVWireFormat.
++
++#define LVDRC_CONTROLPARAMS_LVWIREFORMAT_LENGTH (28 \
++ + LVM_MODE_LVWIREFORMAT_LENGTH \
++ + LVM_MODE_LVWIREFORMAT_LENGTH) ///< Number of bytes to encode LVDRC ControlParameters in LVWireFormat.
++
++#define LVNG_CONTROLPARAMS_LVWIREFORMAT_LENGTH (26 \
++ + LVM_MODE_LVWIREFORMAT_LENGTH) ///< Number of bytes to encode LVNG ControlParameters in LVWireFormat.
++
++#define LVNLPP_CONTROLPARAMS_LVWIREFORMAT_LENGTH (4) ///< Number of bytes to encode LVNLPP ControlParameters in LVWireFormat.
++
++#define LVEQ_CONTROLPARAMS_LVWIREFORMAT_LENGTH (66) ///< Number of bytes to encode LVEQ ControlParameters in LVWireFormat.
++
++#define LVVOL_CONTROLPARAMS_LVWIREFORMAT_LENGTH (2 \
++ + LVM_MODE_LVWIREFORMAT_LENGTH) ///< Number of bytes to encode LVVOL ControlParameters in LVWireFormat.
++
++#define LVHPF_CONTROLPARAMS_LVWIREFORMAT_LENGTH (2 \
++ + LVM_MODE_LVWIREFORMAT_LENGTH) ///< Number of bytes to encode LVHPF ControlParameters in LVWireFormat.
++
++#define LVMUTE_CONTROLPARAMS_LVWIREFORMAT_LENGTH (LVM_MODE_LVWIREFORMAT_LENGTH) ///< Number of bytes to encode LVMUTE ControlParameters in LVWireFormat.
++
++#define LVVE_RX_CONTROLPARAMS_LVWIREFORMAT_LENGTH (4 \
++ + LVVE_RX_MODE_LVWIREFORMAT_LENGTH \
++ + LVM_MODE_LVWIREFORMAT_LENGTH \
++ + LVM_MODE_LVWIREFORMAT_LENGTH \
++ + LVFENS_CONTROLPARAMS_LVWIREFORMAT_LENGTH \
++ + LVM_MODE_LVWIREFORMAT_LENGTH \
++ + LVNLPP_CONTROLPARAMS_LVWIREFORMAT_LENGTH \
++ + LVVC_CONTROLPARAMS_LVWIREFORMAT_LENGTH \
++ + LVM_MODE_LVWIREFORMAT_LENGTH \
++ + LVEQ_CONTROLPARAMS_LVWIREFORMAT_LENGTH \
++ + LVDRC_CONTROLPARAMS_LVWIREFORMAT_LENGTH \
++ + LVM_MODE_LVWIREFORMAT_LENGTH \
++ + LVWM_CONTROLPARAMS_LVWIREFORMAT_LENGTH \
++ + LVNG_CONTROLPARAMS_LVWIREFORMAT_LENGTH) ///< Number of bytes to encode LVVE_Rx ControlParameters in LVWireFormat.
++
++#define LVNV_CONTROLPARAMS_LVWIREFORMAT_LENGTH (122 \
++ + LVM_MODE_LVWIREFORMAT_LENGTH \
++ + LVNV_MODEWORD_LVWIREFORMAT_LENGTH \
++ + LVNV_MODE2WORD_LVWIREFORMAT_LENGTH \
++ + LVNV_TUNINGMODEWORD_LVWIREFORMAT_LENGTH) ///< Number of bytes to encode LVNV ControlParameters in LVWireFormat.
++
++#define LVHF_CONTROLPARAMS_LVWIREFORMAT_LENGTH (78 \
++ + LVM_MODE_LVWIREFORMAT_LENGTH \
++ + LVHF_MODEWORD_LVWIREFORMAT_LENGTH \
++ + LVHF_TUNINGMODEWORD_LVWIREFORMAT_LENGTH) ///< Number of bytes to encode LVHF ControlParameters in LVWireFormat.
++
++#define LVBD_CONTROLPARAMS_LVWIREFORMAT_LENGTH (4 \
++ + LVM_MODE_LVWIREFORMAT_LENGTH) ///< Number of bytes to encode LVBD ControlParameters in LVWireFormat.
++
++#define LVVE_TX_CONTROLPARAMS_LVWIREFORMAT_LENGTH (8 \
++ + LVVE_TX_MODE_LVWIREFORMAT_LENGTH \
++ + LVM_MODE_LVWIREFORMAT_LENGTH \
++ + LVM_MODE_LVWIREFORMAT_LENGTH \
++ + LVM_MODE_LVWIREFORMAT_LENGTH \
++ + LVM_MODE_LVWIREFORMAT_LENGTH \
++ + LVHF_CONTROLPARAMS_LVWIREFORMAT_LENGTH \
++ + LVNV_CONTROLPARAMS_LVWIREFORMAT_LENGTH \
++ + LVM_MODE_LVWIREFORMAT_LENGTH \
++ + LVEQ_CONTROLPARAMS_LVWIREFORMAT_LENGTH \
++ + LVDRC_CONTROLPARAMS_LVWIREFORMAT_LENGTH) ///< Number of bytes to encode LVVE_Tx ControlParameters in LVWireFormat.
++
++/**
++* @def LVVIDHEADER_HEADERVERSION_DEFAULT
++* Default of HeaderVersion
++* @see LVVIDHeader_ControlParams_st
++*/
++#define LVVIDHEADER_HEADERVERSION_DEFAULT (3)
++/**
++* @def LVVIDHEADER_HEADERVERSION_MIN
++* MinValue of HeaderVersion
++* @see LVVIDHeader_ControlParams_st
++*/
++#define LVVIDHEADER_HEADERVERSION_MIN (0)
++/**
++* @def LVVIDHEADER_HEADERVERSION_MAX
++* MaxValue of HeaderVersion
++* @see LVVIDHeader_ControlParams_st
++*/
++#define LVVIDHEADER_HEADERVERSION_MAX (255)
++
++/**
++* @def LVVIDHEADER_BASELINEVERSION_DEFAULT
++* Default of BaselineVersion
++* @see LVVIDHeader_ControlParams_st
++*/
++#define LVVIDHEADER_BASELINEVERSION_DEFAULT (51906816)
++/**
++* @def LVVIDHEADER_BASELINEVERSION_MIN
++* MinValue of BaselineVersion
++* @see LVVIDHeader_ControlParams_st
++*/
++#define LVVIDHEADER_BASELINEVERSION_MIN (1)
++/**
++* @def LVVIDHEADER_BASELINEVERSION_MAX
++* MaxValue of BaselineVersion
++* @see LVVIDHeader_ControlParams_st
++*/
++#define LVVIDHEADER_BASELINEVERSION_MAX (4294967295)
++
++/**
++* @def LVVIDHEADER_LVVE_RX_ALGOMASK1_DEFAULT
++* Default of LVVE_Rx_AlgoMask1
++* @see LVVIDHeader_ControlParams_st
++*/
++#define LVVIDHEADER_LVVE_RX_ALGOMASK1_DEFAULT (LVVIDHEADER_LVVE_RX_MASK1_BM_MAX)
++
++/**
++* @def LVVIDHEADER_LVVE_RX_ALGOMASK2_DEFAULT
++* Default of LVVE_Rx_AlgoMask2
++* @see LVVIDHeader_ControlParams_st
++*/
++#define LVVIDHEADER_LVVE_RX_ALGOMASK2_DEFAULT (LVVIDHEADER_LVVE_RX_MASK2_BM_MAX)
++
++/**
++* @def LVVIDHEADER_LVVE_TX_ALGOMASK1_DEFAULT
++* Default of LVVE_Tx_AlgoMask1
++* @see LVVIDHeader_ControlParams_st
++*/
++#define LVVIDHEADER_LVVE_TX_ALGOMASK1_DEFAULT (LVVIDHEADER_LVVE_TX_MASK1_BM_MAX)
++
++/**
++* @def LVVIDHEADER_LVVE_TX_ALGOMASK2_DEFAULT
++* Default of LVVE_Tx_AlgoMask2
++* @see LVVIDHeader_ControlParams_st
++*/
++#define LVVIDHEADER_LVVE_TX_ALGOMASK2_DEFAULT (LVVIDHEADER_LVVE_TX_MASK2_BM_MAX)
++
++/**
++* @def LVVIDHEADER_LVVE_CONFIG_ALGOMASK1_DEFAULT
++* Default of LVVE_Config_AlgoMask1
++* @see LVVIDHeader_ControlParams_st
++*/
++#define LVVIDHEADER_LVVE_CONFIG_ALGOMASK1_DEFAULT (LVVIDHEADER_CONFIGURATIONS_MASK1_BM_MAX)
++
++/**
++* @def LVVIDHEADER_LVVE_CONFIG_ALGOMASK2_DEFAULT
++* Default of LVVE_Config_AlgoMask2
++* @see LVVIDHeader_ControlParams_st
++*/
++#define LVVIDHEADER_LVVE_CONFIG_ALGOMASK2_DEFAULT (LVVIDHEADER_CONFIGURATIONS_MASK2_BM_MAX)
++
++/**
++* @def LVVIDHEADER_MESSAGEID_DEFAULT
++* Default of MessageID
++* @see LVVIDHeader_ControlParams_st
++*/
++#define LVVIDHEADER_MESSAGEID_DEFAULT (LVVE_RX_PRESET)
++
++/**
++* @def LVVIDHEADER_SAMPLERATE_DEFAULT
++* Default of SampleRate
++* @see LVVIDHeader_ControlParams_st
++*/
++#define LVVIDHEADER_SAMPLERATE_DEFAULT (LVM_FS_8000)
++
++/**
++* @def LVVIDHEADER_VOLUMEINDEX_DEFAULT
++* Default of VolumeIndex
++* @see LVVIDHeader_ControlParams_st
++*/
++#define LVVIDHEADER_VOLUMEINDEX_DEFAULT (0)
++/**
++* @def LVVIDHEADER_VOLUMEINDEX_MIN
++* MinValue of VolumeIndex
++* @see LVVIDHeader_ControlParams_st
++*/
++#define LVVIDHEADER_VOLUMEINDEX_MIN (0)
++/**
++* @def LVVIDHEADER_VOLUMEINDEX_MAX
++* MaxValue of VolumeIndex
++* @see LVVIDHeader_ControlParams_st
++*/
++#define LVVIDHEADER_VOLUMEINDEX_MAX (255)
++
++/**
++* @def LVVIDHEADER_NUMVOLUMES_DEFAULT
++* Default of NumVolumes
++* @see LVVIDHeader_ControlParams_st
++*/
++#define LVVIDHEADER_NUMVOLUMES_DEFAULT (1)
++/**
++* @def LVVIDHEADER_NUMVOLUMES_MIN
++* MinValue of NumVolumes
++* @see LVVIDHeader_ControlParams_st
++*/
++#define LVVIDHEADER_NUMVOLUMES_MIN (0)
++/**
++* @def LVVIDHEADER_NUMVOLUMES_MAX
++* MaxValue of NumVolumes
++* @see LVVIDHeader_ControlParams_st
++*/
++#define LVVIDHEADER_NUMVOLUMES_MAX (255)
++
++/**
++* @def LVVC_OPERATINGMODE_DEFAULT
++* Default of OperatingMode
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_OPERATINGMODE_DEFAULT (LVM_MODE_OFF)
++
++/**
++* @def LVVC_MODE_DEFAULT
++* Default of mode
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_MODE_DEFAULT (0)
++
++/**
++* @def LVVC_GAIN_LIN_MAX_DEFAULT
++* Default of Gain_Lin_Max
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_GAIN_LIN_MAX_DEFAULT (1286)
++/**
++* @def LVVC_GAIN_LIN_MAX_MIN
++* MinValue of Gain_Lin_Max
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_GAIN_LIN_MAX_MIN (512)
++/**
++* @def LVVC_GAIN_LIN_MAX_MAX
++* MaxValue of Gain_Lin_Max
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_GAIN_LIN_MAX_MAX (32767)
++
++/**
++* @def LVVC_NOISE_SENSITIVITY_DEFAULT
++* Default of Noise_Sensitivity
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_NOISE_SENSITIVITY_DEFAULT (20000)
++/**
++* @def LVVC_NOISE_SENSITIVITY_MIN
++* MinValue of Noise_Sensitivity
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_NOISE_SENSITIVITY_MIN (-6709)
++/**
++* @def LVVC_NOISE_SENSITIVITY_MAX
++* MaxValue of Noise_Sensitivity
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_NOISE_SENSITIVITY_MAX (32767)
++
++/**
++* @def LVVC_AVL_TARGET_LEVEL_LIN_DEFAULT
++* Default of AVL_Target_level_lin
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_AVL_TARGET_LEVEL_LIN_DEFAULT (16384)
++/**
++* @def LVVC_AVL_TARGET_LEVEL_LIN_MIN
++* MinValue of AVL_Target_level_lin
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_AVL_TARGET_LEVEL_LIN_MIN (0)
++/**
++* @def LVVC_AVL_TARGET_LEVEL_LIN_MAX
++* MaxValue of AVL_Target_level_lin
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_AVL_TARGET_LEVEL_LIN_MAX (32767)
++
++/**
++* @def LVVC_AVL_MINGAINLIN_DEFAULT
++* Default of AVL_MinGainLin
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_AVL_MINGAINLIN_DEFAULT (256)
++/**
++* @def LVVC_AVL_MINGAINLIN_MIN
++* MinValue of AVL_MinGainLin
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_AVL_MINGAINLIN_MIN (0)
++/**
++* @def LVVC_AVL_MINGAINLIN_MAX
++* MaxValue of AVL_MinGainLin
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_AVL_MINGAINLIN_MAX (512)
++
++/**
++* @def LVVC_AVL_MAXGAINLIN_DEFAULT
++* Default of AVL_MaxGainLin
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_AVL_MAXGAINLIN_DEFAULT (8192)
++/**
++* @def LVVC_AVL_MAXGAINLIN_MIN
++* MinValue of AVL_MaxGainLin
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_AVL_MAXGAINLIN_MIN (512)
++/**
++* @def LVVC_AVL_MAXGAINLIN_MAX
++* MaxValue of AVL_MaxGainLin
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_AVL_MAXGAINLIN_MAX (32767)
++
++/**
++* @def LVVC_AVL_NOMINALGAIN_DEFAULT
++* Default of AVL_NominalGain
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_AVL_NOMINALGAIN_DEFAULT (512)
++/**
++* @def LVVC_AVL_NOMINALGAIN_MIN
++* MinValue of AVL_NominalGain
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_AVL_NOMINALGAIN_MIN (0)
++/**
++* @def LVVC_AVL_NOMINALGAIN_MAX
++* MaxValue of AVL_NominalGain
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_AVL_NOMINALGAIN_MAX (32767)
++
++/**
++* @def LVVC_AVL_ATTACK_DEFAULT
++* Default of AVL_Attack
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_AVL_ATTACK_DEFAULT (12055)
++/**
++* @def LVVC_AVL_ATTACK_MIN
++* MinValue of AVL_Attack
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_AVL_ATTACK_MIN (0)
++/**
++* @def LVVC_AVL_ATTACK_MAX
++* MaxValue of AVL_Attack
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_AVL_ATTACK_MAX (32767)
++
++/**
++* @def LVVC_AVL_RELEASE_DEFAULT
++* Default of AVL_Release
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_AVL_RELEASE_DEFAULT (32604)
++/**
++* @def LVVC_AVL_RELEASE_MIN
++* MinValue of AVL_Release
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_AVL_RELEASE_MIN (0)
++/**
++* @def LVVC_AVL_RELEASE_MAX
++* MaxValue of AVL_Release
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_AVL_RELEASE_MAX (32767)
++
++/**
++* @def LVVC_AVL_RELEASEMAX_DEFAULT
++* Default of AVL_ReleaseMax
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_AVL_RELEASEMAX_DEFAULT (32441)
++/**
++* @def LVVC_AVL_RELEASEMAX_MIN
++* MinValue of AVL_ReleaseMax
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_AVL_RELEASEMAX_MIN (0)
++/**
++* @def LVVC_AVL_RELEASEMAX_MAX
++* MaxValue of AVL_ReleaseMax
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_AVL_RELEASEMAX_MAX (32767)
++
++/**
++* @def LVVC_AVL_LIMIT_MAXOUTPUTLIN_DEFAULT
++* Default of AVL_Limit_MaxOutputLin
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_AVL_LIMIT_MAXOUTPUTLIN_DEFAULT (23170)
++/**
++* @def LVVC_AVL_LIMIT_MAXOUTPUTLIN_MIN
++* MinValue of AVL_Limit_MaxOutputLin
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_AVL_LIMIT_MAXOUTPUTLIN_MIN (0)
++/**
++* @def LVVC_AVL_LIMIT_MAXOUTPUTLIN_MAX
++* MaxValue of AVL_Limit_MaxOutputLin
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_AVL_LIMIT_MAXOUTPUTLIN_MAX (32767)
++
++/**
++* @def LVVC_SPDETECT_THRESHOLD_DEFAULT
++* Default of SpDetect_Threshold
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_SPDETECT_THRESHOLD_DEFAULT (1024)
++/**
++* @def LVVC_SPDETECT_THRESHOLD_MIN
++* MinValue of SpDetect_Threshold
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_SPDETECT_THRESHOLD_MIN (0)
++/**
++* @def LVVC_SPDETECT_THRESHOLD_MAX
++* MaxValue of SpDetect_Threshold
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_SPDETECT_THRESHOLD_MAX (32767)
++
++/**
++* @def LVFENS_OPERATINGMODE_DEFAULT
++* Default of OperatingMode
++* @see LVFENS_ControlParams_st
++*/
++#define LVFENS_OPERATINGMODE_DEFAULT (LVM_MODE_OFF)
++
++/**
++* @def LVFENS_FENS_LIMIT_NS_DEFAULT
++* Default of FENS_limit_NS
++* @see LVFENS_ControlParams_st
++*/
++#define LVFENS_FENS_LIMIT_NS_DEFAULT (10976)
++/**
++* @def LVFENS_FENS_LIMIT_NS_MIN
++* MinValue of FENS_limit_NS
++* @see LVFENS_ControlParams_st
++*/
++#define LVFENS_FENS_LIMIT_NS_MIN (0)
++/**
++* @def LVFENS_FENS_LIMIT_NS_MAX
++* MaxValue of FENS_limit_NS
++* @see LVFENS_ControlParams_st
++*/
++#define LVFENS_FENS_LIMIT_NS_MAX (32767)
++
++/**
++* @def LVFENS_MODE_DEFAULT
++* Default of Mode
++* @see LVFENS_ControlParams_st
++*/
++#define LVFENS_MODE_DEFAULT (0)
++
++/**
++* @def LVWM_OPERATINGMODE_DEFAULT
++* Default of OperatingMode
++* @see LVWM_ControlParams_st
++*/
++#define LVWM_OPERATINGMODE_DEFAULT (LVM_MODE_OFF)
++
++/**
++* @def LVWM_MODE_DEFAULT
++* Default of mode
++* @see LVWM_ControlParams_st
++*/
++#define LVWM_MODE_DEFAULT (7)
++
++/**
++* @def LVWM_AVL_TARGET_LEVEL_LIN_DEFAULT
++* Default of AVL_Target_level_lin
++* @see LVWM_ControlParams_st
++*/
++#define LVWM_AVL_TARGET_LEVEL_LIN_DEFAULT (16384)
++/**
++* @def LVWM_AVL_TARGET_LEVEL_LIN_MIN
++* MinValue of AVL_Target_level_lin
++* @see LVWM_ControlParams_st
++*/
++#define LVWM_AVL_TARGET_LEVEL_LIN_MIN (0)
++/**
++* @def LVWM_AVL_TARGET_LEVEL_LIN_MAX
++* MaxValue of AVL_Target_level_lin
++* @see LVWM_ControlParams_st
++*/
++#define LVWM_AVL_TARGET_LEVEL_LIN_MAX (32767)
++
++/**
++* @def LVWM_AVL_MINGAINLIN_DEFAULT
++* Default of AVL_MinGainLin
++* @see LVWM_ControlParams_st
++*/
++#define LVWM_AVL_MINGAINLIN_DEFAULT (128)
++/**
++* @def LVWM_AVL_MINGAINLIN_MIN
++* MinValue of AVL_MinGainLin
++* @see LVWM_ControlParams_st
++*/
++#define LVWM_AVL_MINGAINLIN_MIN (0)
++/**
++* @def LVWM_AVL_MINGAINLIN_MAX
++* MaxValue of AVL_MinGainLin
++* @see LVWM_ControlParams_st
++*/
++#define LVWM_AVL_MINGAINLIN_MAX (512)
++
++/**
++* @def LVWM_AVL_MAXGAINLIN_DEFAULT
++* Default of AVL_MaxGainLin
++* @see LVWM_ControlParams_st
++*/
++#define LVWM_AVL_MAXGAINLIN_DEFAULT (8189)
++/**
++* @def LVWM_AVL_MAXGAINLIN_MIN
++* MinValue of AVL_MaxGainLin
++* @see LVWM_ControlParams_st
++*/
++#define LVWM_AVL_MAXGAINLIN_MIN (512)
++/**
++* @def LVWM_AVL_MAXGAINLIN_MAX
++* MaxValue of AVL_MaxGainLin
++* @see LVWM_ControlParams_st
++*/
++#define LVWM_AVL_MAXGAINLIN_MAX (32767)
++
++/**
++* @def LVWM_AVL_ATTACK_DEFAULT
++* Default of AVL_Attack
++* @see LVWM_ControlParams_st
++*/
++#define LVWM_AVL_ATTACK_DEFAULT (25520)
++/**
++* @def LVWM_AVL_ATTACK_MIN
++* MinValue of AVL_Attack
++* @see LVWM_ControlParams_st
++*/
++#define LVWM_AVL_ATTACK_MIN (0)
++/**
++* @def LVWM_AVL_ATTACK_MAX
++* MaxValue of AVL_Attack
++* @see LVWM_ControlParams_st
++*/
++#define LVWM_AVL_ATTACK_MAX (32767)
++
++/**
++* @def LVWM_AVL_RELEASE_DEFAULT
++* Default of AVL_Release
++* @see LVWM_ControlParams_st
++*/
++#define LVWM_AVL_RELEASE_DEFAULT (32685)
++/**
++* @def LVWM_AVL_RELEASE_MIN
++* MinValue of AVL_Release
++* @see LVWM_ControlParams_st
++*/
++#define LVWM_AVL_RELEASE_MIN (0)
++/**
++* @def LVWM_AVL_RELEASE_MAX
++* MaxValue of AVL_Release
++* @see LVWM_ControlParams_st
++*/
++#define LVWM_AVL_RELEASE_MAX (32767)
++
++/**
++* @def LVWM_AVL_LIMIT_MAXOUTPUTLIN_DEFAULT
++* Default of AVL_Limit_MaxOutputLin
++* @see LVWM_ControlParams_st
++*/
++#define LVWM_AVL_LIMIT_MAXOUTPUTLIN_DEFAULT (23197)
++/**
++* @def LVWM_AVL_LIMIT_MAXOUTPUTLIN_MIN
++* MinValue of AVL_Limit_MaxOutputLin
++* @see LVWM_ControlParams_st
++*/
++#define LVWM_AVL_LIMIT_MAXOUTPUTLIN_MIN (0)
++/**
++* @def LVWM_AVL_LIMIT_MAXOUTPUTLIN_MAX
++* MaxValue of AVL_Limit_MaxOutputLin
++* @see LVWM_ControlParams_st
++*/
++#define LVWM_AVL_LIMIT_MAXOUTPUTLIN_MAX (32767)
++
++/**
++* @def LVWM_SPDETECT_THRESHOLD_DEFAULT
++* Default of SpDetect_Threshold
++* @see LVWM_ControlParams_st
++*/
++#define LVWM_SPDETECT_THRESHOLD_DEFAULT (9216)
++/**
++* @def LVWM_SPDETECT_THRESHOLD_MIN
++* MinValue of SpDetect_Threshold
++* @see LVWM_ControlParams_st
++*/
++#define LVWM_SPDETECT_THRESHOLD_MIN (0)
++/**
++* @def LVWM_SPDETECT_THRESHOLD_MAX
++* MaxValue of SpDetect_Threshold
++* @see LVWM_ControlParams_st
++*/
++#define LVWM_SPDETECT_THRESHOLD_MAX (32767)
++
++/**
++* @def LVDRC_OPERATINGMODE_DEFAULT
++* Default of OperatingMode
++* @see LVDRC_ControlParams_st
++*/
++#define LVDRC_OPERATINGMODE_DEFAULT (LVM_MODE_OFF)
++
++/**
++* @def LVDRC_NUMKNEES_DEFAULT
++* Default of NumKnees
++* @see LVDRC_ControlParams_st
++*/
++#define LVDRC_NUMKNEES_DEFAULT (5)
++/**
++* @def LVDRC_NUMKNEES_MIN
++* MinValue of NumKnees
++* @see LVDRC_ControlParams_st
++*/
++#define LVDRC_NUMKNEES_MIN (1)
++/**
++* @def LVDRC_NUMKNEES_MAX
++* MaxValue of NumKnees
++* @see LVDRC_ControlParams_st
++*/
++#define LVDRC_NUMKNEES_MAX (5)
++
++/**
++* @def LVDRC_COMPRESSORCURVEINPUTLEVELS_DEFAULT
++* Default of CompressorCurveInputLevels
++* @see LVDRC_ControlParams_st
++*/
++#define LVDRC_COMPRESSORCURVEINPUTLEVELS_DEFAULT {-96,-70,-50, -24, 0}
++/**
++* @def LVDRC_COMPRESSORCURVEINPUTLEVELS_MIN
++* MinValue of CompressorCurveInputLevels
++* @see LVDRC_ControlParams_st
++*/
++#define LVDRC_COMPRESSORCURVEINPUTLEVELS_MIN (-96)
++/**
++* @def LVDRC_COMPRESSORCURVEINPUTLEVELS_MAX
++* MaxValue of CompressorCurveInputLevels
++* @see LVDRC_ControlParams_st
++*/
++#define LVDRC_COMPRESSORCURVEINPUTLEVELS_MAX (0)
++/**
++* @def LVDRC_COMPRESSORCURVEINPUTLEVELS_LENGTH
++* Length of CompressorCurveInputLevels
++* @see LVDRC_ControlParams_st
++*/
++#define LVDRC_COMPRESSORCURVEINPUTLEVELS_LENGTH (5)
++
++/**
++* @def LVDRC_COMPRESSORCURVEOUTPUTLEVELS_DEFAULT
++* Default of CompressorCurveOutputLevels
++* @see LVDRC_ControlParams_st
++*/
++#define LVDRC_COMPRESSORCURVEOUTPUTLEVELS_DEFAULT {-96,-70,-38,-12,0}
++/**
++* @def LVDRC_COMPRESSORCURVEOUTPUTLEVELS_MIN
++* MinValue of CompressorCurveOutputLevels
++* @see LVDRC_ControlParams_st
++*/
++#define LVDRC_COMPRESSORCURVEOUTPUTLEVELS_MIN (-96)
++/**
++* @def LVDRC_COMPRESSORCURVEOUTPUTLEVELS_MAX
++* MaxValue of CompressorCurveOutputLevels
++* @see LVDRC_ControlParams_st
++*/
++#define LVDRC_COMPRESSORCURVEOUTPUTLEVELS_MAX (0)
++/**
++* @def LVDRC_COMPRESSORCURVEOUTPUTLEVELS_LENGTH
++* Length of CompressorCurveOutputLevels
++* @see LVDRC_ControlParams_st
++*/
++#define LVDRC_COMPRESSORCURVEOUTPUTLEVELS_LENGTH (5)
++
++/**
++* @def LVDRC_ATTACKTIME_DEFAULT
++* Default of AttackTime
++* @see LVDRC_ControlParams_st
++*/
++#define LVDRC_ATTACKTIME_DEFAULT (50)
++/**
++* @def LVDRC_ATTACKTIME_MIN
++* MinValue of AttackTime
++* @see LVDRC_ControlParams_st
++*/
++#define LVDRC_ATTACKTIME_MIN (0)
++/**
++* @def LVDRC_ATTACKTIME_MAX
++* MaxValue of AttackTime
++* @see LVDRC_ControlParams_st
++*/
++#define LVDRC_ATTACKTIME_MAX (32767)
++
++/**
++* @def LVDRC_RELEASETIME_DEFAULT
++* Default of ReleaseTime
++* @see LVDRC_ControlParams_st
++*/
++#define LVDRC_RELEASETIME_DEFAULT (50)
++/**
++* @def LVDRC_RELEASETIME_MIN
++* MinValue of ReleaseTime
++* @see LVDRC_ControlParams_st
++*/
++#define LVDRC_RELEASETIME_MIN (0)
++/**
++* @def LVDRC_RELEASETIME_MAX
++* MaxValue of ReleaseTime
++* @see LVDRC_ControlParams_st
++*/
++#define LVDRC_RELEASETIME_MAX (32767)
++
++/**
++* @def LVDRC_LIMITEROPERATINGMODE_DEFAULT
++* Default of LimiterOperatingMode
++* @see LVDRC_ControlParams_st
++*/
++#define LVDRC_LIMITEROPERATINGMODE_DEFAULT (LVM_MODE_OFF)
++
++/**
++* @def LVDRC_LIMITLEVEL_DEFAULT
++* Default of LimitLevel
++* @see LVDRC_ControlParams_st
++*/
++#define LVDRC_LIMITLEVEL_DEFAULT (0)
++/**
++* @def LVDRC_LIMITLEVEL_MIN
++* MinValue of LimitLevel
++* @see LVDRC_ControlParams_st
++*/
++#define LVDRC_LIMITLEVEL_MIN (-96)
++/**
++* @def LVDRC_LIMITLEVEL_MAX
++* MaxValue of LimitLevel
++* @see LVDRC_ControlParams_st
++*/
++#define LVDRC_LIMITLEVEL_MAX (0)
++
++/**
++* @def LVNG_OPERATINGMODE_DEFAULT
++* Default of OperatingMode
++* @see LVNG_ControlParams_st
++*/
++#define LVNG_OPERATINGMODE_DEFAULT (LVM_MODE_OFF)
++
++/**
++* @def LVNG_NUMKNEES_DEFAULT
++* Default of NumKnees
++* @see LVNG_ControlParams_st
++*/
++#define LVNG_NUMKNEES_DEFAULT (5)
++/**
++* @def LVNG_NUMKNEES_MIN
++* MinValue of NumKnees
++* @see LVNG_ControlParams_st
++*/
++#define LVNG_NUMKNEES_MIN (1)
++/**
++* @def LVNG_NUMKNEES_MAX
++* MaxValue of NumKnees
++* @see LVNG_ControlParams_st
++*/
++#define LVNG_NUMKNEES_MAX (5)
++
++/**
++* @def LVNG_COMPRESSORCURVEINPUTLEVELS_DEFAULT
++* Default of CompressorCurveInputLevels
++* @see LVNG_ControlParams_st
++*/
++#define LVNG_COMPRESSORCURVEINPUTLEVELS_DEFAULT {-80,-70,-50, -24, 0}
++/**
++* @def LVNG_COMPRESSORCURVEINPUTLEVELS_MIN
++* MinValue of CompressorCurveInputLevels
++* @see LVNG_ControlParams_st
++*/
++#define LVNG_COMPRESSORCURVEINPUTLEVELS_MIN (-96)
++/**
++* @def LVNG_COMPRESSORCURVEINPUTLEVELS_MAX
++* MaxValue of CompressorCurveInputLevels
++* @see LVNG_ControlParams_st
++*/
++#define LVNG_COMPRESSORCURVEINPUTLEVELS_MAX (0)
++/**
++* @def LVNG_COMPRESSORCURVEINPUTLEVELS_LENGTH
++* Length of CompressorCurveInputLevels
++* @see LVNG_ControlParams_st
++*/
++#define LVNG_COMPRESSORCURVEINPUTLEVELS_LENGTH (5)
++
++/**
++* @def LVNG_COMPRESSORCURVEOUTPUTLEVELS_DEFAULT
++* Default of CompressorCurveOutputLevels
++* @see LVNG_ControlParams_st
++*/
++#define LVNG_COMPRESSORCURVEOUTPUTLEVELS_DEFAULT {-96,-80,-50, -24, 0}
++/**
++* @def LVNG_COMPRESSORCURVEOUTPUTLEVELS_MIN
++* MinValue of CompressorCurveOutputLevels
++* @see LVNG_ControlParams_st
++*/
++#define LVNG_COMPRESSORCURVEOUTPUTLEVELS_MIN (-96)
++/**
++* @def LVNG_COMPRESSORCURVEOUTPUTLEVELS_MAX
++* MaxValue of CompressorCurveOutputLevels
++* @see LVNG_ControlParams_st
++*/
++#define LVNG_COMPRESSORCURVEOUTPUTLEVELS_MAX (0)
++/**
++* @def LVNG_COMPRESSORCURVEOUTPUTLEVELS_LENGTH
++* Length of CompressorCurveOutputLevels
++* @see LVNG_ControlParams_st
++*/
++#define LVNG_COMPRESSORCURVEOUTPUTLEVELS_LENGTH (5)
++
++/**
++* @def LVNG_ATTACKTIME_DEFAULT
++* Default of AttackTime
++* @see LVNG_ControlParams_st
++*/
++#define LVNG_ATTACKTIME_DEFAULT (50)
++/**
++* @def LVNG_ATTACKTIME_MIN
++* MinValue of AttackTime
++* @see LVNG_ControlParams_st
++*/
++#define LVNG_ATTACKTIME_MIN (0)
++/**
++* @def LVNG_ATTACKTIME_MAX
++* MaxValue of AttackTime
++* @see LVNG_ControlParams_st
++*/
++#define LVNG_ATTACKTIME_MAX (32767)
++
++/**
++* @def LVNG_RELEASETIME_DEFAULT
++* Default of ReleaseTime
++* @see LVNG_ControlParams_st
++*/
++#define LVNG_RELEASETIME_DEFAULT (50)
++/**
++* @def LVNG_RELEASETIME_MIN
++* MinValue of ReleaseTime
++* @see LVNG_ControlParams_st
++*/
++#define LVNG_RELEASETIME_MIN (0)
++/**
++* @def LVNG_RELEASETIME_MAX
++* MaxValue of ReleaseTime
++* @see LVNG_ControlParams_st
++*/
++#define LVNG_RELEASETIME_MAX (32767)
++
++/**
++* @def LVNLPP_NLPP_LIMIT_DEFAULT
++* Default of NLPP_Limit
++* @see LVNLPP_ControlParams_st
++*/
++#define LVNLPP_NLPP_LIMIT_DEFAULT (0)
++/**
++* @def LVNLPP_NLPP_LIMIT_MIN
++* MinValue of NLPP_Limit
++* @see LVNLPP_ControlParams_st
++*/
++#define LVNLPP_NLPP_LIMIT_MIN (-24)
++/**
++* @def LVNLPP_NLPP_LIMIT_MAX
++* MaxValue of NLPP_Limit
++* @see LVNLPP_ControlParams_st
++*/
++#define LVNLPP_NLPP_LIMIT_MAX (0)
++
++/**
++* @def LVNLPP_NLPP_HPF_CORNERFREQ_DEFAULT
++* Default of NLPP_HPF_CornerFreq
++* @see LVNLPP_ControlParams_st
++*/
++#define LVNLPP_NLPP_HPF_CORNERFREQ_DEFAULT (50)
++/**
++* @def LVNLPP_NLPP_HPF_CORNERFREQ_MIN
++* MinValue of NLPP_HPF_CornerFreq
++* @see LVNLPP_ControlParams_st
++*/
++#define LVNLPP_NLPP_HPF_CORNERFREQ_MIN (50)
++/**
++* @def LVNLPP_NLPP_HPF_CORNERFREQ_MAX
++* MaxValue of NLPP_HPF_CornerFreq
++* @see LVNLPP_ControlParams_st
++*/
++#define LVNLPP_NLPP_HPF_CORNERFREQ_MAX (1000)
++
++/**
++* @def LVEQ_EQ_LENGTH_DEFAULT
++* Default of EQ_Length
++* @see LVEQ_ControlParams_st
++*/
++#define LVEQ_EQ_LENGTH_DEFAULT (32)
++/**
++* @def LVEQ_EQ_LENGTH_MIN
++* MinValue of EQ_Length
++* @see LVEQ_ControlParams_st
++*/
++#define LVEQ_EQ_LENGTH_MIN (8)
++/**
++* @def LVEQ_EQ_LENGTH_MAX
++* MaxValue of EQ_Length
++* @see LVEQ_ControlParams_st
++*/
++#define LVEQ_EQ_LENGTH_MAX (32)
++
++/**
++* @def LVEQ_EQ_COEFS_DEFAULT
++* Default of EQ_Coefs
++* @see LVEQ_ControlParams_st
++*/
++#define LVEQ_EQ_COEFS_DEFAULT {4096,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}
++/**
++* @def LVEQ_EQ_COEFS_MIN
++* MinValue of EQ_Coefs
++* @see LVEQ_ControlParams_st
++*/
++#define LVEQ_EQ_COEFS_MIN (-32768)
++/**
++* @def LVEQ_EQ_COEFS_MAX
++* MaxValue of EQ_Coefs
++* @see LVEQ_ControlParams_st
++*/
++#define LVEQ_EQ_COEFS_MAX (32767)
++/**
++* @def LVEQ_EQ_COEFS_LENGTH
++* Length of EQ_Coefs
++* @see LVEQ_ControlParams_st
++*/
++#define LVEQ_EQ_COEFS_LENGTH (32)
++
++/**
++* @def LVVOL_VOL_OPERATINGMODE_DEFAULT
++* Default of VOL_OperatingMode
++* @see LVVOL_ControlParams_st
++*/
++#define LVVOL_VOL_OPERATINGMODE_DEFAULT (LVM_MODE_OFF)
++
++/**
++* @def LVVOL_VOL_GAIN_DEFAULT
++* Default of VOL_Gain
++* @see LVVOL_ControlParams_st
++*/
++#define LVVOL_VOL_GAIN_DEFAULT (0)
++/**
++* @def LVVOL_VOL_GAIN_MIN
++* MinValue of VOL_Gain
++* @see LVVOL_ControlParams_st
++*/
++#define LVVOL_VOL_GAIN_MIN (-96)
++/**
++* @def LVVOL_VOL_GAIN_MAX
++* MaxValue of VOL_Gain
++* @see LVVOL_ControlParams_st
++*/
++#define LVVOL_VOL_GAIN_MAX (24)
++
++/**
++* @def LVHPF_HPF_OPERATINGMODE_DEFAULT
++* Default of HPF_OperatingMode
++* @see LVHPF_ControlParams_st
++*/
++#define LVHPF_HPF_OPERATINGMODE_DEFAULT (LVM_MODE_OFF)
++
++/**
++* @def LVHPF_HPF_CORNERFREQ_DEFAULT
++* Default of HPF_CornerFreq
++* @see LVHPF_ControlParams_st
++*/
++#define LVHPF_HPF_CORNERFREQ_DEFAULT (50)
++/**
++* @def LVHPF_HPF_CORNERFREQ_MIN
++* MinValue of HPF_CornerFreq
++* @see LVHPF_ControlParams_st
++*/
++#define LVHPF_HPF_CORNERFREQ_MIN (50)
++/**
++* @def LVHPF_HPF_CORNERFREQ_MAX
++* MaxValue of HPF_CornerFreq
++* @see LVHPF_ControlParams_st
++*/
++#define LVHPF_HPF_CORNERFREQ_MAX (1500)
++
++/**
++* @def LVMUTE_MUTE_DEFAULT
++* Default of Mute
++* @see LVMUTE_ControlParams_st
++*/
++#define LVMUTE_MUTE_DEFAULT (LVM_MODE_OFF)
++
++/**
++* @def LVVE_RX_OPERATINGMODE_DEFAULT
++* Default of OperatingMode
++* @see LVVE_Rx_ControlParams_st
++*/
++#define LVVE_RX_OPERATINGMODE_DEFAULT (LVVE_RX_MODE_OFF)
++
++/**
++* @def LVVE_RX_MUTE_DEFAULT
++* Default of Mute
++* @see LVVE_Rx_ControlParams_st
++*/
++#define LVVE_RX_MUTE_DEFAULT (LVM_MODE_OFF)
++
++/**
++* @def LVVE_RX_VOL_OPERATINGMODE_DEFAULT
++* Default of VOL_OperatingMode
++* @see LVVE_Rx_ControlParams_st
++*/
++#define LVVE_RX_VOL_OPERATINGMODE_DEFAULT (LVM_MODE_OFF)
++
++/**
++* @def LVVE_RX_VOL_GAIN_DEFAULT
++* Default of VOL_Gain
++* @see LVVE_Rx_ControlParams_st
++*/
++#define LVVE_RX_VOL_GAIN_DEFAULT (0)
++/**
++* @def LVVE_RX_VOL_GAIN_MIN
++* MinValue of VOL_Gain
++* @see LVVE_Rx_ControlParams_st
++*/
++#define LVVE_RX_VOL_GAIN_MIN (-96)
++/**
++* @def LVVE_RX_VOL_GAIN_MAX
++* MaxValue of VOL_Gain
++* @see LVVE_Rx_ControlParams_st
++*/
++#define LVVE_RX_VOL_GAIN_MAX (24)
++
++
++/**
++* @def LVVE_RX_NLPP_OPERATINGMODE_DEFAULT
++* Default of NLPP_OperatingMode
++* @see LVVE_Rx_ControlParams_st
++*/
++#define LVVE_RX_NLPP_OPERATINGMODE_DEFAULT (LVM_MODE_OFF)
++
++
++
++/**
++* @def LVVE_RX_EQ_OPERATINGMODE_DEFAULT
++* Default of EQ_OperatingMode
++* @see LVVE_Rx_ControlParams_st
++*/
++#define LVVE_RX_EQ_OPERATINGMODE_DEFAULT (LVM_MODE_OFF)
++
++
++
++/**
++* @def LVVE_RX_HPF_OPERATINGMODE_DEFAULT
++* Default of HPF_OperatingMode
++* @see LVVE_Rx_ControlParams_st
++*/
++#define LVVE_RX_HPF_OPERATINGMODE_DEFAULT (LVM_MODE_OFF)
++
++/**
++* @def LVVE_RX_HPF_CORNERFREQ_DEFAULT
++* Default of HPF_CornerFreq
++* @see LVVE_Rx_ControlParams_st
++*/
++#define LVVE_RX_HPF_CORNERFREQ_DEFAULT (50)
++/**
++* @def LVVE_RX_HPF_CORNERFREQ_MIN
++* MinValue of HPF_CornerFreq
++* @see LVVE_Rx_ControlParams_st
++*/
++#define LVVE_RX_HPF_CORNERFREQ_MIN (50)
++/**
++* @def LVVE_RX_HPF_CORNERFREQ_MAX
++* MaxValue of HPF_CornerFreq
++* @see LVVE_Rx_ControlParams_st
++*/
++#define LVVE_RX_HPF_CORNERFREQ_MAX (1500)
++
++
++
++/**
++* @def LVNV_OPERATINGMODE_DEFAULT
++* Default of OperatingMode
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_OPERATINGMODE_DEFAULT (LVM_MODE_OFF)
++
++/**
++* @def LVNV_MODE_DEFAULT
++* Default of Mode
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_MODE_DEFAULT (18935)
++
++/**
++* @def LVNV_MODE2_DEFAULT
++* Default of Mode2
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_MODE2_DEFAULT (14)
++
++/**
++* @def LVNV_TUNING_MODE_DEFAULT
++* Default of Tuning_mode
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_TUNING_MODE_DEFAULT (0)
++
++/**
++* @def LVNV_INPUT_GAIN_MIC0_DEFAULT
++* Default of Input_Gain_Mic0
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_INPUT_GAIN_MIC0_DEFAULT (8192)
++/**
++* @def LVNV_INPUT_GAIN_MIC0_MIN
++* MinValue of Input_Gain_Mic0
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_INPUT_GAIN_MIC0_MIN (0)
++/**
++* @def LVNV_INPUT_GAIN_MIC0_MAX
++* MaxValue of Input_Gain_Mic0
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_INPUT_GAIN_MIC0_MAX (32767)
++
++/**
++* @def LVNV_INPUT_GAIN_MIC1_DEFAULT
++* Default of Input_Gain_Mic1
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_INPUT_GAIN_MIC1_DEFAULT (8192)
++/**
++* @def LVNV_INPUT_GAIN_MIC1_MIN
++* MinValue of Input_Gain_Mic1
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_INPUT_GAIN_MIC1_MIN (0)
++/**
++* @def LVNV_INPUT_GAIN_MIC1_MAX
++* MaxValue of Input_Gain_Mic1
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_INPUT_GAIN_MIC1_MAX (32767)
++
++/**
++* @def LVNV_OUTPUT_GAIN_DEFAULT
++* Default of Output_Gain
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_OUTPUT_GAIN_DEFAULT (2048)
++/**
++* @def LVNV_OUTPUT_GAIN_MIN
++* MinValue of Output_Gain
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_OUTPUT_GAIN_MIN (0)
++/**
++* @def LVNV_OUTPUT_GAIN_MAX
++* MaxValue of Output_Gain
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_OUTPUT_GAIN_MAX (32767)
++
++/**
++* @def LVNV_NLMS0_LB_TAPS_DEFAULT
++* Default of NLMS0_LB_taps
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS0_LB_TAPS_DEFAULT (32)
++/**
++* @def LVNV_NLMS0_LB_TAPS_MIN
++* MinValue of NLMS0_LB_taps
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS0_LB_TAPS_MIN (16)
++/**
++* @def LVNV_NLMS0_LB_TAPS_MAX
++* MaxValue of NLMS0_LB_taps
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS0_LB_TAPS_MAX (64)
++
++/**
++* @def LVNV_NLMS0_LB_TWOALPHA_DEFAULT
++* Default of NLMS0_LB_twoalpha
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS0_LB_TWOALPHA_DEFAULT (8192)
++/**
++* @def LVNV_NLMS0_LB_TWOALPHA_MIN
++* MinValue of NLMS0_LB_twoalpha
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS0_LB_TWOALPHA_MIN (0)
++/**
++* @def LVNV_NLMS0_LB_TWOALPHA_MAX
++* MaxValue of NLMS0_LB_twoalpha
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS0_LB_TWOALPHA_MAX (32767)
++
++/**
++* @def LVNV_NLMS0_LB_ERL_DEFAULT
++* Default of NLMS0_LB_erl
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS0_LB_ERL_DEFAULT (1000)
++/**
++* @def LVNV_NLMS0_LB_ERL_MIN
++* MinValue of NLMS0_LB_erl
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS0_LB_ERL_MIN (64)
++/**
++* @def LVNV_NLMS0_LB_ERL_MAX
++* MaxValue of NLMS0_LB_erl
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS0_LB_ERL_MAX (32767)
++
++/**
++* @def LVNV_NLMS0_HB_TAPS_DEFAULT
++* Default of NLMS0_HB_taps
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS0_HB_TAPS_DEFAULT (24)
++/**
++* @def LVNV_NLMS0_HB_TAPS_MIN
++* MinValue of NLMS0_HB_taps
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS0_HB_TAPS_MIN (16)
++/**
++* @def LVNV_NLMS0_HB_TAPS_MAX
++* MaxValue of NLMS0_HB_taps
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS0_HB_TAPS_MAX (64)
++
++/**
++* @def LVNV_NLMS0_HB_TWOALPHA_DEFAULT
++* Default of NLMS0_HB_twoalpha
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS0_HB_TWOALPHA_DEFAULT (8192)
++/**
++* @def LVNV_NLMS0_HB_TWOALPHA_MIN
++* MinValue of NLMS0_HB_twoalpha
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS0_HB_TWOALPHA_MIN (0)
++/**
++* @def LVNV_NLMS0_HB_TWOALPHA_MAX
++* MaxValue of NLMS0_HB_twoalpha
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS0_HB_TWOALPHA_MAX (32767)
++
++/**
++* @def LVNV_NLMS0_HB_ERL_DEFAULT
++* Default of NLMS0_HB_erl
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS0_HB_ERL_DEFAULT (1000)
++/**
++* @def LVNV_NLMS0_HB_ERL_MIN
++* MinValue of NLMS0_HB_erl
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS0_HB_ERL_MIN (64)
++/**
++* @def LVNV_NLMS0_HB_ERL_MAX
++* MaxValue of NLMS0_HB_erl
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS0_HB_ERL_MAX (32767)
++
++/**
++* @def LVNV_NLMS0_PRESET_COEFS_DEFAULT
++* Default of NLMS0_preset_coefs
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS0_PRESET_COEFS_DEFAULT (0)
++/**
++* @def LVNV_NLMS0_PRESET_COEFS_MIN
++* MinValue of NLMS0_preset_coefs
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS0_PRESET_COEFS_MIN (0)
++/**
++* @def LVNV_NLMS0_PRESET_COEFS_MAX
++* MaxValue of NLMS0_preset_coefs
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS0_PRESET_COEFS_MAX (2)
++
++/**
++* @def LVNV_NLMS0_OFFSET_DEFAULT
++* Default of NLMS0_offset
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS0_OFFSET_DEFAULT (776)
++/**
++* @def LVNV_NLMS0_OFFSET_MIN
++* MinValue of NLMS0_offset
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS0_OFFSET_MIN (0)
++/**
++* @def LVNV_NLMS0_OFFSET_MAX
++* MaxValue of NLMS0_offset
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS0_OFFSET_MAX (32767)
++
++/**
++* @def LVNV_NLMS1_LB_TAPS_DEFAULT
++* Default of NLMS1_LB_taps
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS1_LB_TAPS_DEFAULT (32)
++/**
++* @def LVNV_NLMS1_LB_TAPS_MIN
++* MinValue of NLMS1_LB_taps
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS1_LB_TAPS_MIN (16)
++/**
++* @def LVNV_NLMS1_LB_TAPS_MAX
++* MaxValue of NLMS1_LB_taps
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS1_LB_TAPS_MAX (32)
++
++/**
++* @def LVNV_NLMS1_LB_TWOALPHA_DEFAULT
++* Default of NLMS1_LB_twoalpha
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS1_LB_TWOALPHA_DEFAULT (8192)
++/**
++* @def LVNV_NLMS1_LB_TWOALPHA_MIN
++* MinValue of NLMS1_LB_twoalpha
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS1_LB_TWOALPHA_MIN (0)
++/**
++* @def LVNV_NLMS1_LB_TWOALPHA_MAX
++* MaxValue of NLMS1_LB_twoalpha
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS1_LB_TWOALPHA_MAX (32767)
++
++/**
++* @def LVNV_NLMS1_LB_ERL_DEFAULT
++* Default of NLMS1_LB_erl
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS1_LB_ERL_DEFAULT (1000)
++/**
++* @def LVNV_NLMS1_LB_ERL_MIN
++* MinValue of NLMS1_LB_erl
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS1_LB_ERL_MIN (64)
++/**
++* @def LVNV_NLMS1_LB_ERL_MAX
++* MaxValue of NLMS1_LB_erl
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS1_LB_ERL_MAX (32767)
++
++/**
++* @def LVNV_NLMS1_HB_TAPS_DEFAULT
++* Default of NLMS1_HB_taps
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS1_HB_TAPS_DEFAULT (24)
++/**
++* @def LVNV_NLMS1_HB_TAPS_MIN
++* MinValue of NLMS1_HB_taps
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS1_HB_TAPS_MIN (16)
++/**
++* @def LVNV_NLMS1_HB_TAPS_MAX
++* MaxValue of NLMS1_HB_taps
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS1_HB_TAPS_MAX (32)
++
++/**
++* @def LVNV_NLMS1_HB_TWOALPHA_DEFAULT
++* Default of NLMS1_HB_twoalpha
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS1_HB_TWOALPHA_DEFAULT (8192)
++/**
++* @def LVNV_NLMS1_HB_TWOALPHA_MIN
++* MinValue of NLMS1_HB_twoalpha
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS1_HB_TWOALPHA_MIN (0)
++/**
++* @def LVNV_NLMS1_HB_TWOALPHA_MAX
++* MaxValue of NLMS1_HB_twoalpha
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS1_HB_TWOALPHA_MAX (32767)
++
++/**
++* @def LVNV_NLMS1_HB_ERL_DEFAULT
++* Default of NLMS1_HB_erl
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS1_HB_ERL_DEFAULT (1000)
++/**
++* @def LVNV_NLMS1_HB_ERL_MIN
++* MinValue of NLMS1_HB_erl
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS1_HB_ERL_MIN (64)
++/**
++* @def LVNV_NLMS1_HB_ERL_MAX
++* MaxValue of NLMS1_HB_erl
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS1_HB_ERL_MAX (32767)
++
++/**
++* @def LVNV_NLMS1_PRESET_COEFS_DEFAULT
++* Default of NLMS1_preset_coefs
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS1_PRESET_COEFS_DEFAULT (0)
++/**
++* @def LVNV_NLMS1_PRESET_COEFS_MIN
++* MinValue of NLMS1_preset_coefs
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS1_PRESET_COEFS_MIN (0)
++/**
++* @def LVNV_NLMS1_PRESET_COEFS_MAX
++* MaxValue of NLMS1_preset_coefs
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS1_PRESET_COEFS_MAX (2)
++
++/**
++* @def LVNV_NLMS1_OFFSET_DEFAULT
++* Default of NLMS1_offset
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS1_OFFSET_DEFAULT (776)
++/**
++* @def LVNV_NLMS1_OFFSET_MIN
++* MinValue of NLMS1_offset
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS1_OFFSET_MIN (0)
++/**
++* @def LVNV_NLMS1_OFFSET_MAX
++* MaxValue of NLMS1_offset
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_NLMS1_OFFSET_MAX (32767)
++
++/**
++* @def LVNV_CAL_MICPOWFLOORMIN_DEFAULT
++* Default of CAL_micPowFloorMin
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_CAL_MICPOWFLOORMIN_DEFAULT (150)
++/**
++* @def LVNV_CAL_MICPOWFLOORMIN_MIN
++* MinValue of CAL_micPowFloorMin
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_CAL_MICPOWFLOORMIN_MIN (0)
++/**
++* @def LVNV_CAL_MICPOWFLOORMIN_MAX
++* MaxValue of CAL_micPowFloorMin
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_CAL_MICPOWFLOORMIN_MAX (32767)
++
++/**
++* @def LVNV_WGTHRESHOLD_DEFAULT
++* Default of WgThreshold
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_WGTHRESHOLD_DEFAULT (32767)
++/**
++* @def LVNV_WGTHRESHOLD_MIN
++* MinValue of WgThreshold
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_WGTHRESHOLD_MIN (0)
++/**
++* @def LVNV_WGTHRESHOLD_MAX
++* MaxValue of WgThreshold
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_WGTHRESHOLD_MAX (32767)
++
++/**
++* @def LVNV_MPTHRESHOLD_DEFAULT
++* Default of MpThreshold
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_MPTHRESHOLD_DEFAULT (6554)
++/**
++* @def LVNV_MPTHRESHOLD_MIN
++* MinValue of MpThreshold
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_MPTHRESHOLD_MIN (0)
++/**
++* @def LVNV_MPTHRESHOLD_MAX
++* MaxValue of MpThreshold
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_MPTHRESHOLD_MAX (32767)
++
++/**
++* @def LVNV_FSB_INIT_TABLE0_DEFAULT
++* Default of FSB_init_table0
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_FSB_INIT_TABLE0_DEFAULT {32767, 0, 0, 0, 0, 0, 0, 0}
++/**
++* @def LVNV_FSB_INIT_TABLE0_MIN
++* MinValue of FSB_init_table0
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_FSB_INIT_TABLE0_MIN (-32768)
++/**
++* @def LVNV_FSB_INIT_TABLE0_MAX
++* MaxValue of FSB_init_table0
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_FSB_INIT_TABLE0_MAX (32767)
++/**
++* @def LVNV_FSB_INIT_TABLE0_LENGTH
++* Length of FSB_init_table0
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_FSB_INIT_TABLE0_LENGTH (8)
++
++/**
++* @def LVNV_FSB_INIT_TABLE1_DEFAULT
++* Default of FSB_init_table1
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_FSB_INIT_TABLE1_DEFAULT {0, 0, 0, 0, 0, 0, 0, 0}
++/**
++* @def LVNV_FSB_INIT_TABLE1_MIN
++* MinValue of FSB_init_table1
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_FSB_INIT_TABLE1_MIN (-32768)
++/**
++* @def LVNV_FSB_INIT_TABLE1_MAX
++* MaxValue of FSB_init_table1
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_FSB_INIT_TABLE1_MAX (32767)
++/**
++* @def LVNV_FSB_INIT_TABLE1_LENGTH
++* Length of FSB_init_table1
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_FSB_INIT_TABLE1_LENGTH (8)
++
++/**
++* @def LVNV_FSB_TAPS_DEFAULT
++* Default of FSB_taps
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_FSB_TAPS_DEFAULT (16)
++/**
++* @def LVNV_FSB_TAPS_MIN
++* MinValue of FSB_taps
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_FSB_TAPS_MIN (8)
++/**
++* @def LVNV_FSB_TAPS_MAX
++* MaxValue of FSB_taps
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_FSB_TAPS_MAX (16)
++
++/**
++* @def LVNV_FSB_TWOALPHA_DEFAULT
++* Default of FSB_twoalpha
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_FSB_TWOALPHA_DEFAULT (655)
++/**
++* @def LVNV_FSB_TWOALPHA_MIN
++* MinValue of FSB_twoalpha
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_FSB_TWOALPHA_MIN (0)
++/**
++* @def LVNV_FSB_TWOALPHA_MAX
++* MaxValue of FSB_twoalpha
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_FSB_TWOALPHA_MAX (32767)
++
++/**
++* @def LVNV_FSB_REF_GAIN_DEFAULT
++* Default of FSB_ref_gain
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_FSB_REF_GAIN_DEFAULT (1024)
++/**
++* @def LVNV_FSB_REF_GAIN_MIN
++* MinValue of FSB_ref_gain
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_FSB_REF_GAIN_MIN (0)
++/**
++* @def LVNV_FSB_REF_GAIN_MAX
++* MaxValue of FSB_ref_gain
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_FSB_REF_GAIN_MAX (32767)
++
++/**
++* @def LVNV_GSC_TAPS_DEFAULT
++* Default of GSC_taps
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_GSC_TAPS_DEFAULT (16)
++/**
++* @def LVNV_GSC_TAPS_MIN
++* MinValue of GSC_taps
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_GSC_TAPS_MIN (8)
++/**
++* @def LVNV_GSC_TAPS_MAX
++* MaxValue of GSC_taps
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_GSC_TAPS_MAX (48)
++
++/**
++* @def LVNV_GSC_TWOALPHA_DEFAULT
++* Default of GSC_twoalpha
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_GSC_TWOALPHA_DEFAULT (1638)
++/**
++* @def LVNV_GSC_TWOALPHA_MIN
++* MinValue of GSC_twoalpha
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_GSC_TWOALPHA_MIN (0)
++/**
++* @def LVNV_GSC_TWOALPHA_MAX
++* MaxValue of GSC_twoalpha
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_GSC_TWOALPHA_MAX (32767)
++
++/**
++* @def LVNV_GSC_ERL_DEFAULT
++* Default of GSC_erl
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_GSC_ERL_DEFAULT (256)
++/**
++* @def LVNV_GSC_ERL_MIN
++* MinValue of GSC_erl
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_GSC_ERL_MIN (64)
++/**
++* @def LVNV_GSC_ERL_MAX
++* MaxValue of GSC_erl
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_GSC_ERL_MAX (32767)
++
++/**
++* @def LVNV_GSC_OFFSET_DEFAULT
++* Default of GSC_offset
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_GSC_OFFSET_DEFAULT (1638)
++/**
++* @def LVNV_GSC_OFFSET_MIN
++* MinValue of GSC_offset
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_GSC_OFFSET_MIN (0)
++/**
++* @def LVNV_GSC_OFFSET_MAX
++* MaxValue of GSC_offset
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_GSC_OFFSET_MAX (32767)
++
++/**
++* @def LVNV_DNNS_ECHOGAMMAHI_DEFAULT
++* Default of DNNS_EchoGammaHi
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_ECHOGAMMAHI_DEFAULT (16384)
++/**
++* @def LVNV_DNNS_ECHOGAMMAHI_MIN
++* MinValue of DNNS_EchoGammaHi
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_ECHOGAMMAHI_MIN (0)
++/**
++* @def LVNV_DNNS_ECHOGAMMAHI_MAX
++* MaxValue of DNNS_EchoGammaHi
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_ECHOGAMMAHI_MAX (32767)
++
++/**
++* @def LVNV_DNNS_ECHOGAMMALO_DEFAULT
++* Default of DNNS_EchoGammaLo
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_ECHOGAMMALO_DEFAULT (8192)
++/**
++* @def LVNV_DNNS_ECHOGAMMALO_MIN
++* MinValue of DNNS_EchoGammaLo
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_ECHOGAMMALO_MIN (0)
++/**
++* @def LVNV_DNNS_ECHOGAMMALO_MAX
++* MaxValue of DNNS_EchoGammaLo
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_ECHOGAMMALO_MAX (32767)
++
++/**
++* @def LVNV_DNNS_ECHOALPHAREV_DEFAULT
++* Default of DNNS_EchoAlphaRev
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_ECHOALPHAREV_DEFAULT (12000)
++/**
++* @def LVNV_DNNS_ECHOALPHAREV_MIN
++* MinValue of DNNS_EchoAlphaRev
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_ECHOALPHAREV_MIN (0)
++/**
++* @def LVNV_DNNS_ECHOALPHAREV_MAX
++* MaxValue of DNNS_EchoAlphaRev
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_ECHOALPHAREV_MAX (32767)
++
++/**
++* @def LVNV_DNNS_ECHOTAILPORTION_DEFAULT
++* Default of DNNS_EchoTailPortion
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_ECHOTAILPORTION_DEFAULT (7000)
++/**
++* @def LVNV_DNNS_ECHOTAILPORTION_MIN
++* MinValue of DNNS_EchoTailPortion
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_ECHOTAILPORTION_MIN (0)
++/**
++* @def LVNV_DNNS_ECHOTAILPORTION_MAX
++* MaxValue of DNNS_EchoTailPortion
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_ECHOTAILPORTION_MAX (32767)
++
++/**
++* @def LVNV_DNNS_NLATTEN_DEFAULT
++* Default of DNNS_NlAtten
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_NLATTEN_DEFAULT (256)
++/**
++* @def LVNV_DNNS_NLATTEN_MIN
++* MinValue of DNNS_NlAtten
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_NLATTEN_MIN (0)
++/**
++* @def LVNV_DNNS_NLATTEN_MAX
++* MaxValue of DNNS_NlAtten
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_NLATTEN_MAX (2048)
++
++/**
++* @def LVNV_DNNS_NOISEGAMMAS_DEFAULT
++* Default of DNNS_NoiseGammaS
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_NOISEGAMMAS_DEFAULT (11470)
++/**
++* @def LVNV_DNNS_NOISEGAMMAS_MIN
++* MinValue of DNNS_NoiseGammaS
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_NOISEGAMMAS_MIN (0)
++/**
++* @def LVNV_DNNS_NOISEGAMMAS_MAX
++* MaxValue of DNNS_NoiseGammaS
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_NOISEGAMMAS_MAX (32767)
++
++/**
++* @def LVNV_DNNS_NOISEGAMMAN_DEFAULT
++* Default of DNNS_NoiseGammaN
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_NOISEGAMMAN_DEFAULT (16384)
++/**
++* @def LVNV_DNNS_NOISEGAMMAN_MIN
++* MinValue of DNNS_NoiseGammaN
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_NOISEGAMMAN_MIN (0)
++/**
++* @def LVNV_DNNS_NOISEGAMMAN_MAX
++* MaxValue of DNNS_NoiseGammaN
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_NOISEGAMMAN_MAX (32767)
++
++/**
++* @def LVNV_DNNS_NOISEGAINMINS_DEFAULT
++* Default of DNNS_NoiseGainMinS
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_NOISEGAINMINS_DEFAULT (11140)
++/**
++* @def LVNV_DNNS_NOISEGAINMINS_MIN
++* MinValue of DNNS_NoiseGainMinS
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_NOISEGAINMINS_MIN (0)
++/**
++* @def LVNV_DNNS_NOISEGAINMINS_MAX
++* MaxValue of DNNS_NoiseGainMinS
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_NOISEGAINMINS_MAX (32767)
++
++/**
++* @def LVNV_DNNS_NOISEGAINMINN_DEFAULT
++* Default of DNNS_NoiseGainMinN
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_NOISEGAINMINN_DEFAULT (6554)
++/**
++* @def LVNV_DNNS_NOISEGAINMINN_MIN
++* MinValue of DNNS_NoiseGainMinN
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_NOISEGAINMINN_MIN (0)
++/**
++* @def LVNV_DNNS_NOISEGAINMINN_MAX
++* MaxValue of DNNS_NoiseGainMinN
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_NOISEGAINMINN_MAX (32767)
++
++/**
++* @def LVNV_DNNS_NOISEBIASCOMP_DEFAULT
++* Default of DNNS_NoiseBiasComp
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_NOISEBIASCOMP_DEFAULT (9830)
++/**
++* @def LVNV_DNNS_NOISEBIASCOMP_MIN
++* MinValue of DNNS_NoiseBiasComp
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_NOISEBIASCOMP_MIN (0)
++/**
++* @def LVNV_DNNS_NOISEBIASCOMP_MAX
++* MaxValue of DNNS_NoiseBiasComp
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_NOISEBIASCOMP_MAX (32767)
++
++/**
++* @def LVNV_DNNS_GAINETA_DEFAULT
++* Default of DNNS_GainEta
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_GAINETA_DEFAULT (256)
++/**
++* @def LVNV_DNNS_GAINETA_MIN
++* MinValue of DNNS_GainEta
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_GAINETA_MIN (0)
++/**
++* @def LVNV_DNNS_GAINETA_MAX
++* MaxValue of DNNS_GainEta
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_GAINETA_MAX (32767)
++
++/**
++* @def LVNV_DNNS_ACTHRESHOLD_DEFAULT
++* Default of DNNS_AcThreshold
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_ACTHRESHOLD_DEFAULT (12288)
++/**
++* @def LVNV_DNNS_ACTHRESHOLD_MIN
++* MinValue of DNNS_AcThreshold
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_ACTHRESHOLD_MIN (0)
++/**
++* @def LVNV_DNNS_ACTHRESHOLD_MAX
++* MaxValue of DNNS_AcThreshold
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_ACTHRESHOLD_MAX (32767)
++
++/**
++* @def LVNV_DNNS_WBTHRESHOLD_DEFAULT
++* Default of DNNS_WbThreshold
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_WBTHRESHOLD_DEFAULT (9216)
++/**
++* @def LVNV_DNNS_WBTHRESHOLD_MIN
++* MinValue of DNNS_WbThreshold
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_WBTHRESHOLD_MIN (0)
++/**
++* @def LVNV_DNNS_WBTHRESHOLD_MAX
++* MaxValue of DNNS_WbThreshold
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_WBTHRESHOLD_MAX (32767)
++
++/**
++* @def LVNV_DNNS_LOSTBEAMTHRESHOLD_DEFAULT
++* Default of DNNS_LostBeamThreshold
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_LOSTBEAMTHRESHOLD_DEFAULT (320)
++/**
++* @def LVNV_DNNS_LOSTBEAMTHRESHOLD_MIN
++* MinValue of DNNS_LostBeamThreshold
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_LOSTBEAMTHRESHOLD_MIN (0)
++/**
++* @def LVNV_DNNS_LOSTBEAMTHRESHOLD_MAX
++* MaxValue of DNNS_LostBeamThreshold
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DNNS_LOSTBEAMTHRESHOLD_MAX (32767)
++
++/**
++* @def LVNV_PCD_BETA_DEFAULT
++* Default of PCD_beta
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_PCD_BETA_DEFAULT (230)
++/**
++* @def LVNV_PCD_BETA_MIN
++* MinValue of PCD_beta
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_PCD_BETA_MIN (0)
++/**
++* @def LVNV_PCD_BETA_MAX
++* MaxValue of PCD_beta
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_PCD_BETA_MAX (32767)
++
++/**
++* @def LVNV_PCD_THRESHOLD_DEFAULT
++* Default of PCD_Threshold
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_PCD_THRESHOLD_DEFAULT (26213)
++/**
++* @def LVNV_PCD_THRESHOLD_MIN
++* MinValue of PCD_Threshold
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_PCD_THRESHOLD_MIN (0)
++/**
++* @def LVNV_PCD_THRESHOLD_MAX
++* MaxValue of PCD_Threshold
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_PCD_THRESHOLD_MAX (32767)
++
++/**
++* @def LVHF_OPERATINGMODE_DEFAULT
++* Default of OperatingMode
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_OPERATINGMODE_DEFAULT (LVM_MODE_OFF)
++
++/**
++* @def LVHF_MODE_DEFAULT
++* Default of Mode
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_MODE_DEFAULT (4607)
++
++/**
++* @def LVHF_TUNINGMODE_DEFAULT
++* Default of TuningMode
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_TUNINGMODE_DEFAULT (0)
++
++/**
++* @def LVHF_INPUTGAIN_DEFAULT
++* Default of InputGain
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_INPUTGAIN_DEFAULT (8192)
++/**
++* @def LVHF_INPUTGAIN_MIN
++* MinValue of InputGain
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_INPUTGAIN_MIN (0)
++/**
++* @def LVHF_INPUTGAIN_MAX
++* MaxValue of InputGain
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_INPUTGAIN_MAX (32767)
++
++/**
++* @def LVHF_OUTPUTGAIN_DEFAULT
++* Default of OutputGain
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_OUTPUTGAIN_DEFAULT (2048)
++/**
++* @def LVHF_OUTPUTGAIN_MIN
++* MinValue of OutputGain
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_OUTPUTGAIN_MIN (0)
++/**
++* @def LVHF_OUTPUTGAIN_MAX
++* MaxValue of OutputGain
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_OUTPUTGAIN_MAX (32767)
++
++/**
++* @def LVHF_NLMS_LIMIT_DEFAULT
++* Default of NLMS_limit
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_NLMS_LIMIT_DEFAULT (0)
++/**
++* @def LVHF_NLMS_LIMIT_MIN
++* MinValue of NLMS_limit
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_NLMS_LIMIT_MIN (-24)
++/**
++* @def LVHF_NLMS_LIMIT_MAX
++* MaxValue of NLMS_limit
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_NLMS_LIMIT_MAX (0)
++
++/**
++* @def LVHF_NLMS_LB_TAPS_DEFAULT
++* Default of NLMS_LB_taps
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_NLMS_LB_TAPS_DEFAULT (64)
++/**
++* @def LVHF_NLMS_LB_TAPS_MIN
++* MinValue of NLMS_LB_taps
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_NLMS_LB_TAPS_MIN (16)
++/**
++* @def LVHF_NLMS_LB_TAPS_MAX
++* MaxValue of NLMS_LB_taps
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_NLMS_LB_TAPS_MAX (200)
++
++/**
++* @def LVHF_NLMS_LB_TWO_ALPHA_DEFAULT
++* Default of NLMS_LB_two_alpha
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_NLMS_LB_TWO_ALPHA_DEFAULT (8192)
++/**
++* @def LVHF_NLMS_LB_TWO_ALPHA_MIN
++* MinValue of NLMS_LB_two_alpha
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_NLMS_LB_TWO_ALPHA_MIN (0)
++/**
++* @def LVHF_NLMS_LB_TWO_ALPHA_MAX
++* MaxValue of NLMS_LB_two_alpha
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_NLMS_LB_TWO_ALPHA_MAX (32767)
++
++/**
++* @def LVHF_NLMS_LB_ERL_DEFAULT
++* Default of NLMS_LB_erl
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_NLMS_LB_ERL_DEFAULT (128)
++/**
++* @def LVHF_NLMS_LB_ERL_MIN
++* MinValue of NLMS_LB_erl
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_NLMS_LB_ERL_MIN (64)
++/**
++* @def LVHF_NLMS_LB_ERL_MAX
++* MaxValue of NLMS_LB_erl
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_NLMS_LB_ERL_MAX (32767)
++
++/**
++* @def LVHF_NLMS_HB_TAPS_DEFAULT
++* Default of NLMS_HB_taps
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_NLMS_HB_TAPS_DEFAULT (64)
++/**
++* @def LVHF_NLMS_HB_TAPS_MIN
++* MinValue of NLMS_HB_taps
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_NLMS_HB_TAPS_MIN (16)
++/**
++* @def LVHF_NLMS_HB_TAPS_MAX
++* MaxValue of NLMS_HB_taps
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_NLMS_HB_TAPS_MAX (136)
++
++/**
++* @def LVHF_NLMS_HB_TWO_ALPHA_DEFAULT
++* Default of NLMS_HB_two_alpha
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_NLMS_HB_TWO_ALPHA_DEFAULT (8192)
++/**
++* @def LVHF_NLMS_HB_TWO_ALPHA_MIN
++* MinValue of NLMS_HB_two_alpha
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_NLMS_HB_TWO_ALPHA_MIN (0)
++/**
++* @def LVHF_NLMS_HB_TWO_ALPHA_MAX
++* MaxValue of NLMS_HB_two_alpha
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_NLMS_HB_TWO_ALPHA_MAX (32767)
++
++/**
++* @def LVHF_NLMS_HB_ERL_DEFAULT
++* Default of NLMS_HB_erl
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_NLMS_HB_ERL_DEFAULT (128)
++/**
++* @def LVHF_NLMS_HB_ERL_MIN
++* MinValue of NLMS_HB_erl
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_NLMS_HB_ERL_MIN (64)
++/**
++* @def LVHF_NLMS_HB_ERL_MAX
++* MaxValue of NLMS_HB_erl
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_NLMS_HB_ERL_MAX (32767)
++
++/**
++* @def LVHF_NLMS_PRESET_COEFS_DEFAULT
++* Default of NLMS_preset_coefs
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_NLMS_PRESET_COEFS_DEFAULT (1)
++/**
++* @def LVHF_NLMS_PRESET_COEFS_MIN
++* MinValue of NLMS_preset_coefs
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_NLMS_PRESET_COEFS_MIN (0)
++/**
++* @def LVHF_NLMS_PRESET_COEFS_MAX
++* MaxValue of NLMS_preset_coefs
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_NLMS_PRESET_COEFS_MAX (2)
++
++/**
++* @def LVHF_NLMS_OFFSET_DEFAULT
++* Default of NLMS_offset
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_NLMS_OFFSET_DEFAULT (767)
++/**
++* @def LVHF_NLMS_OFFSET_MIN
++* MinValue of NLMS_offset
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_NLMS_OFFSET_MIN (0)
++/**
++* @def LVHF_NLMS_OFFSET_MAX
++* MaxValue of NLMS_offset
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_NLMS_OFFSET_MAX (32767)
++
++/**
++* @def LVHF_DENS_TAIL_ALPHA_LB_DEFAULT
++* Default of DENS_tail_alpha_LB
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_TAIL_ALPHA_LB_DEFAULT (25395)
++/**
++* @def LVHF_DENS_TAIL_ALPHA_LB_MIN
++* MinValue of DENS_tail_alpha_LB
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_TAIL_ALPHA_LB_MIN (0)
++/**
++* @def LVHF_DENS_TAIL_ALPHA_LB_MAX
++* MaxValue of DENS_tail_alpha_LB
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_TAIL_ALPHA_LB_MAX (32767)
++
++/**
++* @def LVHF_DENS_TAIL_PORTION_LB_DEFAULT
++* Default of DENS_tail_portion_LB
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_TAIL_PORTION_LB_DEFAULT (29491)
++/**
++* @def LVHF_DENS_TAIL_PORTION_LB_MIN
++* MinValue of DENS_tail_portion_LB
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_TAIL_PORTION_LB_MIN (0)
++/**
++* @def LVHF_DENS_TAIL_PORTION_LB_MAX
++* MaxValue of DENS_tail_portion_LB
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_TAIL_PORTION_LB_MAX (32767)
++
++/**
++* @def LVHF_DENS_GAMMA_E_HIGH_LB_DEFAULT
++* Default of DENS_gamma_e_high_LB
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_GAMMA_E_HIGH_LB_DEFAULT (512)
++/**
++* @def LVHF_DENS_GAMMA_E_HIGH_LB_MIN
++* MinValue of DENS_gamma_e_high_LB
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_GAMMA_E_HIGH_LB_MIN (0)
++/**
++* @def LVHF_DENS_GAMMA_E_HIGH_LB_MAX
++* MaxValue of DENS_gamma_e_high_LB
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_GAMMA_E_HIGH_LB_MAX (32767)
++
++/**
++* @def LVHF_DENS_GAMMA_E_DT_LB_DEFAULT
++* Default of DENS_gamma_e_dt_LB
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_GAMMA_E_DT_LB_DEFAULT (256)
++/**
++* @def LVHF_DENS_GAMMA_E_DT_LB_MIN
++* MinValue of DENS_gamma_e_dt_LB
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_GAMMA_E_DT_LB_MIN (0)
++/**
++* @def LVHF_DENS_GAMMA_E_DT_LB_MAX
++* MaxValue of DENS_gamma_e_dt_LB
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_GAMMA_E_DT_LB_MAX (32767)
++
++/**
++* @def LVHF_DENS_GAMMA_E_LOW_LB_DEFAULT
++* Default of DENS_gamma_e_low_LB
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_GAMMA_E_LOW_LB_DEFAULT (256)
++/**
++* @def LVHF_DENS_GAMMA_E_LOW_LB_MIN
++* MinValue of DENS_gamma_e_low_LB
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_GAMMA_E_LOW_LB_MIN (0)
++/**
++* @def LVHF_DENS_GAMMA_E_LOW_LB_MAX
++* MaxValue of DENS_gamma_e_low_LB
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_GAMMA_E_LOW_LB_MAX (32767)
++
++/**
++* @def LVHF_DENS_NL_ATTEN_LB_DEFAULT
++* Default of DENS_NL_atten_LB
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_NL_ATTEN_LB_DEFAULT (0)
++/**
++* @def LVHF_DENS_NL_ATTEN_LB_MIN
++* MinValue of DENS_NL_atten_LB
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_NL_ATTEN_LB_MIN (0)
++/**
++* @def LVHF_DENS_NL_ATTEN_LB_MAX
++* MaxValue of DENS_NL_atten_LB
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_NL_ATTEN_LB_MAX (2048)
++
++/**
++* @def LVHF_DENS_TAIL_ALPHA_HB_DEFAULT
++* Default of DENS_tail_alpha_HB
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_TAIL_ALPHA_HB_DEFAULT (25395)
++/**
++* @def LVHF_DENS_TAIL_ALPHA_HB_MIN
++* MinValue of DENS_tail_alpha_HB
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_TAIL_ALPHA_HB_MIN (0)
++/**
++* @def LVHF_DENS_TAIL_ALPHA_HB_MAX
++* MaxValue of DENS_tail_alpha_HB
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_TAIL_ALPHA_HB_MAX (32767)
++
++/**
++* @def LVHF_DENS_TAIL_PORTION_HB_DEFAULT
++* Default of DENS_tail_portion_HB
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_TAIL_PORTION_HB_DEFAULT (29491)
++/**
++* @def LVHF_DENS_TAIL_PORTION_HB_MIN
++* MinValue of DENS_tail_portion_HB
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_TAIL_PORTION_HB_MIN (0)
++/**
++* @def LVHF_DENS_TAIL_PORTION_HB_MAX
++* MaxValue of DENS_tail_portion_HB
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_TAIL_PORTION_HB_MAX (32767)
++
++/**
++* @def LVHF_DENS_GAMMA_E_HIGH_HB_DEFAULT
++* Default of DENS_gamma_e_high_HB
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_GAMMA_E_HIGH_HB_DEFAULT (512)
++/**
++* @def LVHF_DENS_GAMMA_E_HIGH_HB_MIN
++* MinValue of DENS_gamma_e_high_HB
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_GAMMA_E_HIGH_HB_MIN (0)
++/**
++* @def LVHF_DENS_GAMMA_E_HIGH_HB_MAX
++* MaxValue of DENS_gamma_e_high_HB
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_GAMMA_E_HIGH_HB_MAX (32767)
++
++/**
++* @def LVHF_DENS_GAMMA_E_DT_HB_DEFAULT
++* Default of DENS_gamma_e_dt_HB
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_GAMMA_E_DT_HB_DEFAULT (256)
++/**
++* @def LVHF_DENS_GAMMA_E_DT_HB_MIN
++* MinValue of DENS_gamma_e_dt_HB
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_GAMMA_E_DT_HB_MIN (0)
++/**
++* @def LVHF_DENS_GAMMA_E_DT_HB_MAX
++* MaxValue of DENS_gamma_e_dt_HB
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_GAMMA_E_DT_HB_MAX (32767)
++
++/**
++* @def LVHF_DENS_GAMMA_E_LOW_HB_DEFAULT
++* Default of DENS_gamma_e_low_HB
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_GAMMA_E_LOW_HB_DEFAULT (256)
++/**
++* @def LVHF_DENS_GAMMA_E_LOW_HB_MIN
++* MinValue of DENS_gamma_e_low_HB
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_GAMMA_E_LOW_HB_MIN (0)
++/**
++* @def LVHF_DENS_GAMMA_E_LOW_HB_MAX
++* MaxValue of DENS_gamma_e_low_HB
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_GAMMA_E_LOW_HB_MAX (32767)
++
++/**
++* @def LVHF_DENS_NL_ATTEN_HB_DEFAULT
++* Default of DENS_NL_atten_HB
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_NL_ATTEN_HB_DEFAULT (0)
++/**
++* @def LVHF_DENS_NL_ATTEN_HB_MIN
++* MinValue of DENS_NL_atten_HB
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_NL_ATTEN_HB_MIN (0)
++/**
++* @def LVHF_DENS_NL_ATTEN_HB_MAX
++* MaxValue of DENS_NL_atten_HB
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_NL_ATTEN_HB_MAX (2048)
++
++/**
++* @def LVHF_DENS_GAMMA_E_ALPHA_DEFAULT
++* Default of DENS_gamma_e_alpha
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_GAMMA_E_ALPHA_DEFAULT (24000)
++/**
++* @def LVHF_DENS_GAMMA_E_ALPHA_MIN
++* MinValue of DENS_gamma_e_alpha
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_GAMMA_E_ALPHA_MIN (0)
++/**
++* @def LVHF_DENS_GAMMA_E_ALPHA_MAX
++* MaxValue of DENS_gamma_e_alpha
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_GAMMA_E_ALPHA_MAX (32767)
++
++/**
++* @def LVHF_DENS_GAMMA_N_DEFAULT
++* Default of DENS_gamma_n
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_GAMMA_N_DEFAULT (280)
++/**
++* @def LVHF_DENS_GAMMA_N_MIN
++* MinValue of DENS_gamma_n
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_GAMMA_N_MIN (0)
++/**
++* @def LVHF_DENS_GAMMA_N_MAX
++* MaxValue of DENS_gamma_n
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_GAMMA_N_MAX (32767)
++
++/**
++* @def LVHF_DENS_SPDET_NEAR_DEFAULT
++* Default of DENS_spdet_near
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_SPDET_NEAR_DEFAULT (512)
++/**
++* @def LVHF_DENS_SPDET_NEAR_MIN
++* MinValue of DENS_spdet_near
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_SPDET_NEAR_MIN (0)
++/**
++* @def LVHF_DENS_SPDET_NEAR_MAX
++* MaxValue of DENS_spdet_near
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_SPDET_NEAR_MAX (32767)
++
++/**
++* @def LVHF_DENS_SPDET_ACT_DEFAULT
++* Default of DENS_spdet_act
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_SPDET_ACT_DEFAULT (768)
++/**
++* @def LVHF_DENS_SPDET_ACT_MIN
++* MinValue of DENS_spdet_act
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_SPDET_ACT_MIN (0)
++/**
++* @def LVHF_DENS_SPDET_ACT_MAX
++* MaxValue of DENS_spdet_act
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_SPDET_ACT_MAX (32767)
++
++/**
++* @def LVHF_DENS_LIMIT_NS_DEFAULT
++* Default of DENS_limit_ns
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_LIMIT_NS_DEFAULT (10361)
++/**
++* @def LVHF_DENS_LIMIT_NS_MIN
++* MinValue of DENS_limit_ns
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_LIMIT_NS_MIN (0)
++/**
++* @def LVHF_DENS_LIMIT_NS_MAX
++* MaxValue of DENS_limit_ns
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_LIMIT_NS_MAX (32767)
++
++/**
++* @def LVHF_DENS_CNI_GAIN_DEFAULT
++* Default of DENS_CNI_Gain
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_CNI_GAIN_DEFAULT (16384)
++/**
++* @def LVHF_DENS_CNI_GAIN_MIN
++* MinValue of DENS_CNI_Gain
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_CNI_GAIN_MIN (0)
++/**
++* @def LVHF_DENS_CNI_GAIN_MAX
++* MaxValue of DENS_CNI_Gain
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_CNI_GAIN_MAX (32767)
++
++/**
++* @def LVHF_DENS_NFE_BLOCKSIZE_DEFAULT
++* Default of DENS_NFE_blocksize
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_NFE_BLOCKSIZE_DEFAULT (150)
++/**
++* @def LVHF_DENS_NFE_BLOCKSIZE_MIN
++* MinValue of DENS_NFE_blocksize
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_NFE_BLOCKSIZE_MIN (0)
++/**
++* @def LVHF_DENS_NFE_BLOCKSIZE_MAX
++* MaxValue of DENS_NFE_blocksize
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_DENS_NFE_BLOCKSIZE_MAX (32767)
++
++/**
++* @def LVHF_SPDET_FAR_DEFAULT
++* Default of SPDET_far
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_SPDET_FAR_DEFAULT (16384)
++/**
++* @def LVHF_SPDET_FAR_MIN
++* MinValue of SPDET_far
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_SPDET_FAR_MIN (0)
++/**
++* @def LVHF_SPDET_FAR_MAX
++* MaxValue of SPDET_far
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_SPDET_FAR_MAX (32767)
++
++/**
++* @def LVHF_SPDET_MIC_DEFAULT
++* Default of SPDET_mic
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_SPDET_MIC_DEFAULT (16384)
++/**
++* @def LVHF_SPDET_MIC_MIN
++* MinValue of SPDET_mic
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_SPDET_MIC_MIN (0)
++/**
++* @def LVHF_SPDET_MIC_MAX
++* MaxValue of SPDET_mic
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_SPDET_MIC_MAX (32767)
++
++/**
++* @def LVHF_SPDET_X_CLIP_DEFAULT
++* Default of SPDET_x_clip
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_SPDET_X_CLIP_DEFAULT (0)
++/**
++* @def LVHF_SPDET_X_CLIP_MIN
++* MinValue of SPDET_x_clip
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_SPDET_X_CLIP_MIN (0)
++/**
++* @def LVHF_SPDET_X_CLIP_MAX
++* MaxValue of SPDET_x_clip
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_SPDET_X_CLIP_MAX (32767)
++
++/**
++* @def LVHF_PCD_THRESHOLD_DEFAULT
++* Default of PCD_threshold
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_PCD_THRESHOLD_DEFAULT (20000)
++/**
++* @def LVHF_PCD_THRESHOLD_MIN
++* MinValue of PCD_threshold
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_PCD_THRESHOLD_MIN (0)
++/**
++* @def LVHF_PCD_THRESHOLD_MAX
++* MaxValue of PCD_threshold
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_PCD_THRESHOLD_MAX (32767)
++
++/**
++* @def LVHF_PCD_TAPS_DEFAULT
++* Default of PCD_taps
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_PCD_TAPS_DEFAULT (16)
++/**
++* @def LVHF_PCD_TAPS_MIN
++* MinValue of PCD_taps
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_PCD_TAPS_MIN (16)
++/**
++* @def LVHF_PCD_TAPS_MAX
++* MaxValue of PCD_taps
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_PCD_TAPS_MAX (64)
++
++/**
++* @def LVHF_PCD_ERL_DEFAULT
++* Default of PCD_erl
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_PCD_ERL_DEFAULT (64)
++/**
++* @def LVHF_PCD_ERL_MIN
++* MinValue of PCD_erl
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_PCD_ERL_MIN (64)
++/**
++* @def LVHF_PCD_ERL_MAX
++* MaxValue of PCD_erl
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_PCD_ERL_MAX (32767)
++
++/**
++* @def LVHF_PCD_MINIMUM_ERL_DEFAULT
++* Default of PCD_minimum_erl
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_PCD_MINIMUM_ERL_DEFAULT (64)
++/**
++* @def LVHF_PCD_MINIMUM_ERL_MIN
++* MinValue of PCD_minimum_erl
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_PCD_MINIMUM_ERL_MIN (64)
++/**
++* @def LVHF_PCD_MINIMUM_ERL_MAX
++* MaxValue of PCD_minimum_erl
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_PCD_MINIMUM_ERL_MAX (32767)
++
++/**
++* @def LVHF_PCD_ERL_STEP_DEFAULT
++* Default of PCD_erl_step
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_PCD_ERL_STEP_DEFAULT (16800)
++/**
++* @def LVHF_PCD_ERL_STEP_MIN
++* MinValue of PCD_erl_step
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_PCD_ERL_STEP_MIN (16384)
++/**
++* @def LVHF_PCD_ERL_STEP_MAX
++* MaxValue of PCD_erl_step
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_PCD_ERL_STEP_MAX (32767)
++
++/**
++* @def LVHF_PCD_GAMMA_E_RESCUE_DEFAULT
++* Default of PCD_gamma_e_rescue
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_PCD_GAMMA_E_RESCUE_DEFAULT (5000)
++/**
++* @def LVHF_PCD_GAMMA_E_RESCUE_MIN
++* MinValue of PCD_gamma_e_rescue
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_PCD_GAMMA_E_RESCUE_MIN (0)
++/**
++* @def LVHF_PCD_GAMMA_E_RESCUE_MAX
++* MaxValue of PCD_gamma_e_rescue
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_PCD_GAMMA_E_RESCUE_MAX (32767)
++
++/**
++* @def LVBD_BD_OPERATINGMODE_DEFAULT
++* Default of BD_OperatingMode
++* @see LVBD_ControlParams_st
++*/
++#define LVBD_BD_OPERATINGMODE_DEFAULT (LVM_MODE_OFF)
++
++/**
++* @def LVBD_BULKDELAY_DEFAULT
++* Default of BulkDelay
++* @see LVBD_ControlParams_st
++*/
++#define LVBD_BULKDELAY_DEFAULT (0)
++/**
++* @def LVBD_BULKDELAY_MIN
++* MinValue of BulkDelay
++* @see LVBD_ControlParams_st
++*/
++#define LVBD_BULKDELAY_MIN (0)
++/**
++* @def LVBD_BULKDELAY_MAX
++* MaxValue of BulkDelay
++* @see LVBD_ControlParams_st
++*/
++#define LVBD_BULKDELAY_MAX (6400)
++
++/**
++* @def LVBD_BD_GAIN_DEFAULT
++* Default of BD_Gain
++* @see LVBD_ControlParams_st
++*/
++#define LVBD_BD_GAIN_DEFAULT (8192)
++/**
++* @def LVBD_BD_GAIN_MIN
++* MinValue of BD_Gain
++* @see LVBD_ControlParams_st
++*/
++#define LVBD_BD_GAIN_MIN (0)
++/**
++* @def LVBD_BD_GAIN_MAX
++* MaxValue of BD_Gain
++* @see LVBD_ControlParams_st
++*/
++#define LVBD_BD_GAIN_MAX (32767)
++
++/**
++* @def LVVE_TX_OPERATINGMODE_DEFAULT
++* Default of OperatingMode
++* @see LVVE_Tx_ControlParams_st
++*/
++#define LVVE_TX_OPERATINGMODE_DEFAULT (LVVE_TX_MODE_OFF)
++
++/**
++* @def LVVE_TX_MUTE_DEFAULT
++* Default of Mute
++* @see LVVE_Tx_ControlParams_st
++*/
++#define LVVE_TX_MUTE_DEFAULT (LVM_MODE_OFF)
++
++/**
++* @def LVVE_TX_BD_OPERATINGMODE_DEFAULT
++* Default of BD_OperatingMode
++* @see LVVE_Tx_ControlParams_st
++*/
++#define LVVE_TX_BD_OPERATINGMODE_DEFAULT (LVM_MODE_OFF)
++
++/**
++* @def LVVE_TX_BULKDELAY_DEFAULT
++* Default of BulkDelay
++* @see LVVE_Tx_ControlParams_st
++*/
++#define LVVE_TX_BULKDELAY_DEFAULT (0)
++/**
++* @def LVVE_TX_BULKDELAY_MIN
++* MinValue of BulkDelay
++* @see LVVE_Tx_ControlParams_st
++*/
++#define LVVE_TX_BULKDELAY_MIN (0)
++/**
++* @def LVVE_TX_BULKDELAY_MAX
++* MaxValue of BulkDelay
++* @see LVVE_Tx_ControlParams_st
++*/
++#define LVVE_TX_BULKDELAY_MAX (6400)
++
++/**
++* @def LVVE_TX_BD_GAIN_DEFAULT
++* Default of BD_Gain
++* @see LVVE_Tx_ControlParams_st
++*/
++#define LVVE_TX_BD_GAIN_DEFAULT (8192)
++/**
++* @def LVVE_TX_BD_GAIN_MIN
++* MinValue of BD_Gain
++* @see LVVE_Tx_ControlParams_st
++*/
++#define LVVE_TX_BD_GAIN_MIN (0)
++/**
++* @def LVVE_TX_BD_GAIN_MAX
++* MaxValue of BD_Gain
++* @see LVVE_Tx_ControlParams_st
++*/
++#define LVVE_TX_BD_GAIN_MAX (32767)
++
++/**
++* @def LVVE_TX_VOL_OPERATINGMODE_DEFAULT
++* Default of VOL_OperatingMode
++* @see LVVE_Tx_ControlParams_st
++*/
++#define LVVE_TX_VOL_OPERATINGMODE_DEFAULT (LVM_MODE_OFF)
++
++/**
++* @def LVVE_TX_VOL_GAIN_DEFAULT
++* Default of VOL_Gain
++* @see LVVE_Tx_ControlParams_st
++*/
++#define LVVE_TX_VOL_GAIN_DEFAULT (0)
++/**
++* @def LVVE_TX_VOL_GAIN_MIN
++* MinValue of VOL_Gain
++* @see LVVE_Tx_ControlParams_st
++*/
++#define LVVE_TX_VOL_GAIN_MIN (-96)
++/**
++* @def LVVE_TX_VOL_GAIN_MAX
++* MaxValue of VOL_Gain
++* @see LVVE_Tx_ControlParams_st
++*/
++#define LVVE_TX_VOL_GAIN_MAX (24)
++
++/**
++* @def LVVE_TX_HPF_OPERATINGMODE_DEFAULT
++* Default of HPF_OperatingMode
++* @see LVVE_Tx_ControlParams_st
++*/
++#define LVVE_TX_HPF_OPERATINGMODE_DEFAULT (LVM_MODE_OFF)
++
++/**
++* @def LVVE_TX_MIC_HPF_CORNERFREQ_DEFAULT
++* Default of MIC_HPF_CornerFreq
++* @see LVVE_Tx_ControlParams_st
++*/
++#define LVVE_TX_MIC_HPF_CORNERFREQ_DEFAULT (50)
++/**
++* @def LVVE_TX_MIC_HPF_CORNERFREQ_MIN
++* MinValue of MIC_HPF_CornerFreq
++* @see LVVE_Tx_ControlParams_st
++*/
++#define LVVE_TX_MIC_HPF_CORNERFREQ_MIN (50)
++/**
++* @def LVVE_TX_MIC_HPF_CORNERFREQ_MAX
++* MaxValue of MIC_HPF_CornerFreq
++* @see LVVE_Tx_ControlParams_st
++*/
++#define LVVE_TX_MIC_HPF_CORNERFREQ_MAX (1500)
++
++
++
++/**
++* @def LVVE_TX_EQ_OPERATINGMODE_DEFAULT
++* Default of EQ_OperatingMode
++* @see LVVE_Tx_ControlParams_st
++*/
++#define LVVE_TX_EQ_OPERATINGMODE_DEFAULT (LVM_MODE_OFF)
++
++
++
++/**
++* @def LVVC_GAIN_DEFAULT
++* Default of Gain
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_GAIN_DEFAULT (0)
++/**
++* @def LVVC_GAIN_MIN
++* MinValue of Gain
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_GAIN_MIN (0)
++/**
++* @def LVVC_GAIN_MAX
++* MaxValue of Gain
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_GAIN_MAX (32767)
++
++/**
++* @def LVVC_SPDETECTED_DEFAULT
++* Default of SpDetected
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_SPDETECTED_DEFAULT (0)
++/**
++* @def LVVC_SPDETECTED_MIN
++* MinValue of SpDetected
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_SPDETECTED_MIN (0)
++/**
++* @def LVVC_SPDETECTED_MAX
++* MaxValue of SpDetected
++* @see LVVC_ControlParams_st
++*/
++#define LVVC_SPDETECTED_MAX (1)
++
++/**
++* @def LVWM_AVL_GAIN_DEFAULT
++* Default of AVL_Gain
++* @see LVWM_ControlParams_st
++*/
++#define LVWM_AVL_GAIN_DEFAULT (0)
++/**
++* @def LVWM_AVL_GAIN_MIN
++* MinValue of AVL_Gain
++* @see LVWM_ControlParams_st
++*/
++#define LVWM_AVL_GAIN_MIN (0)
++/**
++* @def LVWM_AVL_GAIN_MAX
++* MaxValue of AVL_Gain
++* @see LVWM_ControlParams_st
++*/
++#define LVWM_AVL_GAIN_MAX (32767)
++
++
++
++/**
++* @def LVVE_RX_DUMMY_DEFAULT
++* Default of dummy
++* @see LVVE_Rx_ControlParams_st
++*/
++#define LVVE_RX_DUMMY_DEFAULT (0)
++/**
++* @def LVVE_RX_DUMMY_MIN
++* MinValue of dummy
++* @see LVVE_Rx_ControlParams_st
++*/
++#define LVVE_RX_DUMMY_MIN (-128)
++/**
++* @def LVVE_RX_DUMMY_MAX
++* MaxValue of dummy
++* @see LVVE_Rx_ControlParams_st
++*/
++#define LVVE_RX_DUMMY_MAX (127)
++
++/**
++* @def LVNV_STATUS_DEFAULT
++* Default of status
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_STATUS_DEFAULT (0)
++
++/**
++* @def LVNV_DUMMY_DEFAULT
++* Default of Dummy
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DUMMY_DEFAULT (0)
++/**
++* @def LVNV_DUMMY_MIN
++* MinValue of Dummy
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DUMMY_MIN (0)
++/**
++* @def LVNV_DUMMY_MAX
++* MaxValue of Dummy
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_DUMMY_MAX (0)
++
++/**
++* @def LVNV_PNLMS0_LB_COEFFS_DEFAULT
++* Default of pNLMS0_LB_Coeffs
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_PNLMS0_LB_COEFFS_DEFAULT (0)
++/**
++* @def LVNV_PNLMS0_LB_COEFFS_MIN
++* MinValue of pNLMS0_LB_Coeffs
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_PNLMS0_LB_COEFFS_MIN (-2147483648)
++/**
++* @def LVNV_PNLMS0_LB_COEFFS_MAX
++* MaxValue of pNLMS0_LB_Coeffs
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_PNLMS0_LB_COEFFS_MAX (2147483647)
++
++/**
++* @def LVNV_PNLMS0_HB_COEFFS_DEFAULT
++* Default of pNLMS0_HB_Coeffs
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_PNLMS0_HB_COEFFS_DEFAULT (0)
++/**
++* @def LVNV_PNLMS0_HB_COEFFS_MIN
++* MinValue of pNLMS0_HB_Coeffs
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_PNLMS0_HB_COEFFS_MIN (-2147483648)
++/**
++* @def LVNV_PNLMS0_HB_COEFFS_MAX
++* MaxValue of pNLMS0_HB_Coeffs
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_PNLMS0_HB_COEFFS_MAX (2147483647)
++
++/**
++* @def LVNV_PNLMS1_LB_COEFFS_DEFAULT
++* Default of pNLMS1_LB_Coeffs
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_PNLMS1_LB_COEFFS_DEFAULT (0)
++/**
++* @def LVNV_PNLMS1_LB_COEFFS_MIN
++* MinValue of pNLMS1_LB_Coeffs
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_PNLMS1_LB_COEFFS_MIN (-2147483648)
++/**
++* @def LVNV_PNLMS1_LB_COEFFS_MAX
++* MaxValue of pNLMS1_LB_Coeffs
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_PNLMS1_LB_COEFFS_MAX (2147483647)
++
++/**
++* @def LVNV_PNLMS1_HB_COEFFS_DEFAULT
++* Default of pNLMS1_HB_Coeffs
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_PNLMS1_HB_COEFFS_DEFAULT (0)
++/**
++* @def LVNV_PNLMS1_HB_COEFFS_MIN
++* MinValue of pNLMS1_HB_Coeffs
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_PNLMS1_HB_COEFFS_MIN (-2147483648)
++/**
++* @def LVNV_PNLMS1_HB_COEFFS_MAX
++* MaxValue of pNLMS1_HB_Coeffs
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_PNLMS1_HB_COEFFS_MAX (2147483647)
++
++/**
++* @def LVNV_PFSB_COEFFS_DEFAULT
++* Default of pFSB_Coeffs
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_PFSB_COEFFS_DEFAULT (0)
++/**
++* @def LVNV_PFSB_COEFFS_MIN
++* MinValue of pFSB_Coeffs
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_PFSB_COEFFS_MIN (-2147483648)
++/**
++* @def LVNV_PFSB_COEFFS_MAX
++* MaxValue of pFSB_Coeffs
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_PFSB_COEFFS_MAX (2147483647)
++
++/**
++* @def LVNV_PGSC_COEFFS_DEFAULT
++* Default of pGSC_Coeffs
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_PGSC_COEFFS_DEFAULT (0)
++/**
++* @def LVNV_PGSC_COEFFS_MIN
++* MinValue of pGSC_Coeffs
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_PGSC_COEFFS_MIN (-2147483648)
++/**
++* @def LVNV_PGSC_COEFFS_MAX
++* MaxValue of pGSC_Coeffs
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_PGSC_COEFFS_MAX (2147483647)
++
++/**
++* @def LVNV_PMICPOWSP_DEFAULT
++* Default of pMicPowSp
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_PMICPOWSP_DEFAULT (0)
++/**
++* @def LVNV_PMICPOWSP_MIN
++* MinValue of pMicPowSp
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_PMICPOWSP_MIN (0)
++/**
++* @def LVNV_PMICPOWSP_MAX
++* MaxValue of pMicPowSp
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_PMICPOWSP_MAX (1)
++
++/**
++* @def LVNV_PCALFACTOR_DEFAULT
++* Default of pCalFactor
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_PCALFACTOR_DEFAULT (0)
++/**
++* @def LVNV_PCALFACTOR_MIN
++* MinValue of pCalFactor
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_PCALFACTOR_MIN (0)
++/**
++* @def LVNV_PCALFACTOR_MAX
++* MaxValue of pCalFactor
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_PCALFACTOR_MAX (32767)
++
++/**
++* @def LVNV_PCALREADY_DEFAULT
++* Default of pCalReady
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_PCALREADY_DEFAULT (0)
++/**
++* @def LVNV_PCALREADY_MIN
++* MinValue of pCalReady
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_PCALREADY_MIN (0)
++/**
++* @def LVNV_PCALREADY_MAX
++* MaxValue of pCalReady
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_PCALREADY_MAX (2)
++
++/**
++* @def LVNV_PBROADSIDE_INTERCC_DEFAULT
++* Default of pBroadside_interCC
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_PBROADSIDE_INTERCC_DEFAULT (0)
++/**
++* @def LVNV_PBROADSIDE_INTERCC_MIN
++* MinValue of pBroadside_interCC
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_PBROADSIDE_INTERCC_MIN (0)
++/**
++* @def LVNV_PBROADSIDE_INTERCC_MAX
++* MaxValue of pBroadside_interCC
++* @see LVNV_ControlParams_st
++*/
++#define LVNV_PBROADSIDE_INTERCC_MAX (32767)
++
++/**
++* @def LVHF_GAMMAE_DEFAULT
++* Default of gammae
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_GAMMAE_DEFAULT (0)
++/**
++* @def LVHF_GAMMAE_MIN
++* MinValue of gammae
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_GAMMAE_MIN (0)
++/**
++* @def LVHF_GAMMAE_MAX
++* MaxValue of gammae
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_GAMMAE_MAX (32767)
++
++/**
++* @def LVHF_STATUS_DEFAULT
++* Default of status
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_STATUS_DEFAULT (0)
++
++/**
++* @def LVHF_PNLMS_LB_COEFS_DEFAULT
++* Default of pNLMS_LB_Coefs
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_PNLMS_LB_COEFS_DEFAULT (0)
++/**
++* @def LVHF_PNLMS_LB_COEFS_MIN
++* MinValue of pNLMS_LB_Coefs
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_PNLMS_LB_COEFS_MIN (-2147483648)
++/**
++* @def LVHF_PNLMS_LB_COEFS_MAX
++* MaxValue of pNLMS_LB_Coefs
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_PNLMS_LB_COEFS_MAX (2147483647)
++
++/**
++* @def LVHF_PNLMS_HB_COEFS_DEFAULT
++* Default of pNLMS_HB_Coefs
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_PNLMS_HB_COEFS_DEFAULT (0)
++/**
++* @def LVHF_PNLMS_HB_COEFS_MIN
++* MinValue of pNLMS_HB_Coefs
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_PNLMS_HB_COEFS_MIN (-2147483648)
++/**
++* @def LVHF_PNLMS_HB_COEFS_MAX
++* MaxValue of pNLMS_HB_Coefs
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_PNLMS_HB_COEFS_MAX (2147483647)
++
++/**
++* @def LVHF_PPCD_COEFS_DEFAULT
++* Default of pPCD_Coefs
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_PPCD_COEFS_DEFAULT (0)
++/**
++* @def LVHF_PPCD_COEFS_MIN
++* MinValue of pPCD_Coefs
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_PPCD_COEFS_MIN (-2147483648)
++/**
++* @def LVHF_PPCD_COEFS_MAX
++* MaxValue of pPCD_Coefs
++* @see LVHF_ControlParams_st
++*/
++#define LVHF_PPCD_COEFS_MAX (2147483647)
++
++
++
++/**
++* @def LVVE_TX_DUMMY_DEFAULT
++* Default of dummy
++* @see LVVE_Tx_ControlParams_st
++*/
++#define LVVE_TX_DUMMY_DEFAULT (0)
++/**
++* @def LVVE_TX_DUMMY_MIN
++* MinValue of dummy
++* @see LVVE_Tx_ControlParams_st
++*/
++#define LVVE_TX_DUMMY_MIN (-128)
++/**
++* @def LVVE_TX_DUMMY_MAX
++* MaxValue of dummy
++* @see LVVE_Tx_ControlParams_st
++*/
++#define LVVE_TX_DUMMY_MAX (127)
++
++/**
++* Enum type for LVVIDHeader_MessageID_en
++*/
++typedef enum
++{
++ LVVE_RX_PRESET = 0, ///< VID header Message ID for LVVE_Rx presets
++ LVVE_TX_PRESET = 1, ///< VID header Message ID for LVVE_Tx Presets
++ LVVIDHEADER_MESSAGEID_EN_DUMMY = LVM_MAXENUM
++} LVVIDHeader_MessageID_en;
++
++/**
++* Enum type for LVVIDHeader_ReturnStatus_en
++*/
++typedef enum
++{
++ LVVIDHEADER_NULLADDRESS = 0, ///< LVVIDHeader module returns NULL address error
++ LVVIDHEADER_SUCCESS = 1, ///< LVVIDHeader module returns with success
++ LVVIDHEADER_RETURNSTATUS_EN_DUMMY = LVM_MAXENUM
++} LVVIDHeader_ReturnStatus_en;
++
++/**
++* Enum type for LVVE_Rx_Mode_en
++*/
++typedef enum
++{
++ LVVE_RX_MODE_OFF = 0, ///< Rx voice engine is turned off
++ LVVE_RX_MODE_ON = 1, ///< Rx voice in will run
++ LVVE_RX_MODE_BYPASS = 2, ///< Rx voice engine will run but output will be ignored
++ LVVE_RX_MODE_EN_DUMMY = LVM_MAXENUM
++} LVVE_Rx_Mode_en;
++
++/**
++* Enum type for LVVE_Tx_Mode_en
++*/
++typedef enum
++{
++ LVVE_TX_MODE_OFF = 0, ///< Tx in LVVE engine is disabled
++ LVVE_TX_MODE_ON = 1, ///< TX in LVVE is enabled
++ LVVE_TX_MODE_BYPASS_MIC0 = 2, ///< TX in LVVE engine will run but output will be Mic0 signal
++ LVVE_TX_MODE_BYPASS_MIC1 = 3, ///< Tx in LVVE engine will run but output will be Mic1 signal
++ LVVE_TX_MODE_BYPASS_REF = 4, ///< Tx in LVVE engine will run but output will be Ref signal
++ LVVE_TX_MODE_EN_DUMMY = LVM_MAXENUM
++} LVVE_Tx_Mode_en;
++
++/****************************************************************************************/
++/* */
++/* Structures */
++/* */
++/****************************************************************************************/
++/**
++* The status parameters are used to retrieve the status of the module.
++* @see LVVC_GetStatusParameters
++*/
++typedef struct
++{
++ /**
++ The internal gain setting used by VoiceClarity.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>6.9</td>
++ <td>@ref LVVC_GAIN_MIN (0)</td>
++ <td>@ref LVVC_GAIN_DEFAULT (0)</td>
++ <td>@ref LVVC_GAIN_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 Gain; ///< Gain
++
++ /**
++ 0 (no detection) or 1 (detection).
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>15.0</td>
++ <td>@ref LVVC_SPDETECTED_MIN (0)</td>
++ <td>@ref LVVC_SPDETECTED_DEFAULT (0)</td>
++ <td>@ref LVVC_SPDETECTED_MAX (1)</td>
++ </tr>
++ </table> */
++ LVM_INT16 SpDetected; ///< The speech detector flag.
++
++} LVVC_StatusParams_st;
++
++/**
++* The status parameters are used to retrieve the status of the module.
++* @see LVWM_GetStatusParameters
++*/
++typedef struct
++{
++ /**
++ The internal gain setting used by WhisperMode in dB.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>6.9</td>
++ <td>@ref LVWM_AVL_GAIN_MIN (0)</td>
++ <td>@ref LVWM_AVL_GAIN_DEFAULT (0)</td>
++ <td>@ref LVWM_AVL_GAIN_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 AVL_Gain; ///< gain (dB)
++
++} LVWM_StatusParams_st;
++
++/**
++* The status parameters are used to retrieve the status of the module.
++* @see LVVE_Rx_GetStatusParameters
++*/
++typedef struct
++{
++ /**
++ Voice Clarity Status Parameter Structure.
++ */
++ LVVC_StatusParams_st VC_StatusParams; ///< Voice Clarity Status Parameter Structure
++
++ /**
++ Whisper Mode Status Parameter Structure.
++ */
++ LVWM_StatusParams_st WM_StatusParams; ///< Whisper Mode Status Parameter Structure
++
++ /**
++ Dummy Param.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>1.7</td>
++ <td>@ref LVVE_RX_DUMMY_MIN (-128)</td>
++ <td>@ref LVVE_RX_DUMMY_DEFAULT (0)</td>
++ <td>@ref LVVE_RX_DUMMY_MAX (127)</td>
++ </tr>
++ </table> */
++ LVM_INT8 dummy; ///< Dummy Param
++
++} LVVE_Rx_StatusParams_st;
++
++/**
++* The status parameters are used to retrieve the status of the module.
++* @see LVNV_GetStatusParameters
++*/
++typedef struct
++{
++ /**
++ Bit mask describing the current state of LVNV, used for debugging.
++ */
++ LVNV_StatusWord_bm status; ///< current state
++
++ /**
++ To keep correct memory alignment. To be removed when LVNV_StatusWord_bm has
++ become int32 as it should.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVNV_DUMMY_MIN (0)</td>
++ <td>@ref LVNV_DUMMY_DEFAULT (0)</td>
++ <td>@ref LVNV_DUMMY_MAX (0)</td>
++ </tr>
++ </table> */
++ LVM_INT16 Dummy; ///< Dummy for memory alignment.
++
++ /**
++ Pointer to the coefficients of the primary low-band (0-4kHz) NLMS filter
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>1.30</td>
++ <td>@ref LVNV_PNLMS0_LB_COEFFS_MIN (-2147483648)</td>
++ <td>@ref LVNV_PNLMS0_LB_COEFFS_DEFAULT (0)</td>
++ <td>@ref LVNV_PNLMS0_LB_COEFFS_MAX (2147483647)</td>
++ </tr>
++ </table> */
++ LVM_INT32* pNLMS0_LB_Coeffs; ///< NLMS0 lowband filter coefficients
++
++ /**
++ Pointer to the coefficients of the primary high-band (4-8kHz) NLMS filter
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>1.30</td>
++ <td>@ref LVNV_PNLMS0_HB_COEFFS_MIN (-2147483648)</td>
++ <td>@ref LVNV_PNLMS0_HB_COEFFS_DEFAULT (0)</td>
++ <td>@ref LVNV_PNLMS0_HB_COEFFS_MAX (2147483647)</td>
++ </tr>
++ </table> */
++ LVM_INT32* pNLMS0_HB_Coeffs; ///< NLMS0 highband filter coefficients
++
++ /**
++ Pointer to the coefficients of the secondary low-band (0-4kHz) NLMS filter
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>1.30</td>
++ <td>@ref LVNV_PNLMS1_LB_COEFFS_MIN (-2147483648)</td>
++ <td>@ref LVNV_PNLMS1_LB_COEFFS_DEFAULT (0)</td>
++ <td>@ref LVNV_PNLMS1_LB_COEFFS_MAX (2147483647)</td>
++ </tr>
++ </table> */
++ LVM_INT32* pNLMS1_LB_Coeffs; ///< NLMS1 lowband filter coefficients
++
++ /**
++ Pointer to the coefficients of the secondary high-band (4-8kHz) NLMS filter
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>1.30</td>
++ <td>@ref LVNV_PNLMS1_HB_COEFFS_MIN (-2147483648)</td>
++ <td>@ref LVNV_PNLMS1_HB_COEFFS_DEFAULT (0)</td>
++ <td>@ref LVNV_PNLMS1_HB_COEFFS_MAX (2147483647)</td>
++ </tr>
++ </table> */
++ LVM_INT32* pNLMS1_HB_Coeffs; ///< NLMS1 highband filter coefficients
++
++ /**
++ Pointer to the coefficients of the FSB0 and FSB1 filters
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>16.15</td>
++ <td>@ref LVNV_PFSB_COEFFS_MIN (-2147483648)</td>
++ <td>@ref LVNV_PFSB_COEFFS_DEFAULT (0)</td>
++ <td>@ref LVNV_PFSB_COEFFS_MAX (2147483647)</td>
++ </tr>
++ </table> */
++ LVM_INT32* pFSB_Coeffs; ///< FSB0 and FSB1 coefficients
++
++ /**
++ Pointer to the coefficients of the GSC filter
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>1.30</td>
++ <td>@ref LVNV_PGSC_COEFFS_MIN (-2147483648)</td>
++ <td>@ref LVNV_PGSC_COEFFS_DEFAULT (0)</td>
++ <td>@ref LVNV_PGSC_COEFFS_MAX (2147483647)</td>
++ </tr>
++ </table> */
++ LVM_INT32* pGSC_Coeffs; ///< GSC coefficients
++
++ /**
++ Pointer to the MicPowSp detection flag
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>15.0</td>
++ <td>@ref LVNV_PMICPOWSP_MIN (0)</td>
++ <td>@ref LVNV_PMICPOWSP_DEFAULT (0)</td>
++ <td>@ref LVNV_PMICPOWSP_MAX (1)</td>
++ </tr>
++ </table> */
++ LVM_INT16* pMicPowSp; ///< MicPow Speech detection flag
++
++ /**
++ Pointer to the variable of Calibration factor
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>2.13</td>
++ <td>@ref LVNV_PCALFACTOR_MIN (0)</td>
++ <td>@ref LVNV_PCALFACTOR_DEFAULT (0)</td>
++ <td>@ref LVNV_PCALFACTOR_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16* pCalFactor; ///< Calibration factor value
++
++ /**
++ Pointer to the variable of Calibration ready
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>15.0</td>
++ <td>@ref LVNV_PCALREADY_MIN (0)</td>
++ <td>@ref LVNV_PCALREADY_DEFAULT (0)</td>
++ <td>@ref LVNV_PCALREADY_MAX (2)</td>
++ </tr>
++ </table> */
++ LVM_INT16* pCalReady; ///< Calibration ready value
++
++ /**
++ Pointer to the inter-channel correlation value used in broadside detection.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVNV_PBROADSIDE_INTERCC_MIN (0)</td>
++ <td>@ref LVNV_PBROADSIDE_INTERCC_DEFAULT (0)</td>
++ <td>@ref LVNV_PBROADSIDE_INTERCC_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16* pBroadside_interCC; ///< Broadside correlation
++
++} LVNV_StatusParams_st;
++
++/**
++* The status parameters are used to retrieve the status of the module.
++* @see LVHF_GetStatusParameters
++*/
++typedef struct
++{
++ /**
++ Current value of the echo subtraction factor.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>5.10</td>
++ <td>@ref LVHF_GAMMAE_MIN (0)</td>
++ <td>@ref LVHF_GAMMAE_DEFAULT (0)</td>
++ <td>@ref LVHF_GAMMAE_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 gammae; ///< multiplicator factor of echo suppression
++
++ /**
++ Bit mask describing the current state of LVHF, used for debugging.
++ */
++ LVHF_StatusWord_bm status; ///< current state
++
++ /**
++ Pointer to the coefficients of the LB NLMS.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>1.30</td>
++ <td>@ref LVHF_PNLMS_LB_COEFS_MIN (-2147483648)</td>
++ <td>@ref LVHF_PNLMS_LB_COEFS_DEFAULT (0)</td>
++ <td>@ref LVHF_PNLMS_LB_COEFS_MAX (2147483647)</td>
++ </tr>
++ </table> */
++ LVM_INT32* pNLMS_LB_Coefs; ///< NLMS lowband filter coefficients
++
++ /**
++ Pointer to the coefficients of the HB NLMS.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>1.30</td>
++ <td>@ref LVHF_PNLMS_HB_COEFS_MIN (-2147483648)</td>
++ <td>@ref LVHF_PNLMS_HB_COEFS_DEFAULT (0)</td>
++ <td>@ref LVHF_PNLMS_HB_COEFS_MAX (2147483647)</td>
++ </tr>
++ </table> */
++ LVM_INT32* pNLMS_HB_Coefs; ///< NLMS highband filter coefficients
++
++ /**
++ Pointer to the coefficients of the PCD NLMS.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>1.30</td>
++ <td>@ref LVHF_PPCD_COEFS_MIN (-2147483648)</td>
++ <td>@ref LVHF_PPCD_COEFS_DEFAULT (0)</td>
++ <td>@ref LVHF_PPCD_COEFS_MAX (2147483647)</td>
++ </tr>
++ </table> */
++ LVM_INT32* pPCD_Coefs; ///< PCD NLMS filter coefficients
++
++} LVHF_StatusParams_st;
++
++/**
++* The status parameters are used to retrieve the status of the module.
++* @see LVVE_Tx_GetStatusParameters
++*/
++typedef struct
++{
++ /**
++ HandsFree Status Parameter Structure.
++ */
++ LVHF_StatusParams_st HF_StatusParams; ///< HandsFree Status Parameters Structure
++
++ /**
++ NoiseVoid Status Parameter Structure.
++ */
++ LVNV_StatusParams_st NV_StatusParams; ///< NoiseVoid Status Parameters Structrue
++
++ /**
++ Dummy Param.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>1.7</td>
++ <td>@ref LVVE_TX_DUMMY_MIN (-128)</td>
++ <td>@ref LVVE_TX_DUMMY_DEFAULT (0)</td>
++ <td>@ref LVVE_TX_DUMMY_MAX (127)</td>
++ </tr>
++ </table> */
++ LVM_INT8 dummy; ///< Dummy Param
++
++} LVVE_Tx_StatusParams_st;
++
++/**
++* The control parameters are used to control the overall module behavior. These parameters may
++* be changed at any time during processing using the LVVIDHeader_SetControlParameters function but they
++* will not take effect until the next call to the LVVIDHeader_Process function.
++*
++* @see LVVIDHeader_SetControlParameters
++* @see LVVIDHeader_Process
++*/
++typedef struct
++{
++ /**
++ This number always increments by one when there is change in the header format.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>8.0</td>
++ <td>@ref LVVIDHEADER_HEADERVERSION_MIN (0)</td>
++ <td>@ref LVVIDHEADER_HEADERVERSION_DEFAULT (3)</td>
++ <td>@ref LVVIDHEADER_HEADERVERSION_MAX (255)</td>
++ </tr>
++ </table> */
++ LVM_UINT8 HeaderVersion; ///< Header Format Version
++
++ /**
++ Initially This variable holds value of the baseline version. The value is in
++ format of xxyyzzpp where xx is major number of the library, yy is minor number,
++ zz is second minor number and pp is patch number of the baseline.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>32.0</td>
++ <td>@ref LVVIDHEADER_BASELINEVERSION_MIN (1)</td>
++ <td>@ref LVVIDHEADER_BASELINEVERSION_DEFAULT (51906816)</td>
++ <td>@ref LVVIDHEADER_BASELINEVERSION_MAX (4294967295)</td>
++ </tr>
++ </table> */
++ LVM_UINT32 BaselineVersion; ///< This is LVVE tagged version name
++
++ /**
++ First LVVE_Rx algorithm mask which holds information of which LVVE_Rx
++ algorithms are present.
++ */
++ LVVIDHeader_LVVE_Rx_Mask1_bm LVVE_Rx_AlgoMask1; ///< This variable forms first part of LVVE_Rx algorithm mask
++
++ /**
++ Second LVVE_Rx algorithm mask which holds information of which LVVE_Rx
++ algorithms are present.
++ */
++ LVVIDHeader_LVVE_Rx_Mask2_bm LVVE_Rx_AlgoMask2; ///< This variable forms second part of LVVE_Rx algorithm mask
++
++ /**
++ First LVVE_Tx algorithm mask which holds information of which LVVE_Tx
++ algorithms are present.
++ */
++ LVVIDHeader_LVVE_Tx_Mask1_bm LVVE_Tx_AlgoMask1; ///< This variable forms first part of LVVE_Tx mask
++
++ /**
++ Second LVVE_Tx algorithm mask which holds information of which LVVE_Tx
++ algorithms are present.
++ */
++ LVVIDHeader_LVVE_Tx_Mask2_bm LVVE_Tx_AlgoMask2; ///< This variable forms second part of LVVE_Tx mask
++
++ /**
++ First LVVE configuration mask which holds information of which configurations
++ of LVVE_Tx and LVVE_Rx algorithm are present.
++ */
++ LVVIDHeader_Configurations_Mask1_bm LVVE_Config_AlgoMask1; ///< This variable forms first part of common LVVE_Tx and LVVE_Rx configuration mask
++
++ /**
++ Second LVVE configuration mask which holds information of which configurations
++ of LVVE_Tx and LVVE_Rx algorithm are present.
++ */
++ LVVIDHeader_Configurations_Mask2_bm LVVE_Config_AlgoMask2; ///< This variable forms second part of common LVVE_Tx and LVVE_Rx configuration mask
++
++ /**
++ Messge ID is used to identify stream
++ */
++ LVVIDHeader_MessageID_en MessageID; ///< This param holds message ID of the buffer
++
++ /**
++ This parameter specifies the sample rate information of the buffer.
++ */
++ LVM_Fs_en SampleRate; ///< Sample rate information of the buffer.
++
++ /**
++ This parameter specifies the volume index corresponding to the subsequent data.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>8.0</td>
++ <td>@ref LVVIDHEADER_VOLUMEINDEX_MIN (0)</td>
++ <td>@ref LVVIDHEADER_VOLUMEINDEX_DEFAULT (0)</td>
++ <td>@ref LVVIDHEADER_VOLUMEINDEX_MAX (255)</td>
++ </tr>
++ </table> */
++ LVM_UINT8 VolumeIndex; ///< Volume index corresponding to the subsequent data.
++
++ /**
++ This parameter specifies how many volumes are present in the binary file.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>8.0</td>
++ <td>@ref LVVIDHEADER_NUMVOLUMES_MIN (0)</td>
++ <td>@ref LVVIDHEADER_NUMVOLUMES_DEFAULT (1)</td>
++ <td>@ref LVVIDHEADER_NUMVOLUMES_MAX (255)</td>
++ </tr>
++ </table> */
++ LVM_UINT8 NumVolumes; ///< Number of volumes present in the binary file.
++
++} LVVIDHeader_ControlParams_st;
++
++/**
++* The control parameters are used to control the overall module behavior. These parameters may
++* be changed at any time during processing using the LVVC_SetControlParameters function but they
++* will not take effect until the next call to the LVVC_Process function.
++*
++* @see LVVC_SetControlParameters
++* @see LVVC_Process
++*/
++typedef struct
++{
++ /**
++ Control the operating mode (ON/OFF) of the algorithm.
++ */
++ LVM_Mode_en OperatingMode; ///< Operating mode
++
++ /**
++ The mode word to enable/disable internal algorithm blocks of VoiceClarity.
++ */
++ LVVC_ModeWord_bm mode; ///< Mode word
++
++ /**
++ Maximum Gain applied to the signal.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>6.9</td>
++ <td>@ref LVVC_GAIN_LIN_MAX_MIN (512)</td>
++ <td>@ref LVVC_GAIN_LIN_MAX_DEFAULT (1286)</td>
++ <td>@ref LVVC_GAIN_LIN_MAX_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 Gain_Lin_Max; ///< Maximum Gain.
++
++ /**
++ The Noise_Sensitivity parameter sets how sensitive VoiceClarity will be to the
++ background noise level. The Noise_Sensitivity parameter allows adjusting the
++ sensitivity of those processing blocks to the nearend noise level. For high
++ values of the Noise_Sensitivity the effect of the mentioned processing blocks
++ will be big, even at low to moderate nearend noise levels. For low values of
++ the Noise_Sensitivity the effect of the processing blocks will be smaller, even
++ for high nearend noise levels.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVVC_NOISE_SENSITIVITY_MIN (-6709)</td>
++ <td>@ref LVVC_NOISE_SENSITIVITY_DEFAULT (20000)</td>
++ <td>@ref LVVC_NOISE_SENSITIVITY_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 Noise_Sensitivity; ///< Noise Sensitivity.
++
++ /**
++ The desired output level of the AGC. <br>
++ AVL_Target_level_lin = \f$32767*10^{Target_Level_dB/20}\f$
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVVC_AVL_TARGET_LEVEL_LIN_MIN (0)</td>
++ <td>@ref LVVC_AVL_TARGET_LEVEL_LIN_DEFAULT (16384)</td>
++ <td>@ref LVVC_AVL_TARGET_LEVEL_LIN_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 AVL_Target_level_lin; ///< The desired output level of the AGC.
++
++ /**
++ The maximal attenuation of the AGC. <br>
++ AVL_MinGainLin = \f$512*10^{MinGain_dB/20}\f$
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>6.9</td>
++ <td>@ref LVVC_AVL_MINGAINLIN_MIN (0)</td>
++ <td>@ref LVVC_AVL_MINGAINLIN_DEFAULT (256)</td>
++ <td>@ref LVVC_AVL_MINGAINLIN_MAX (512)</td>
++ </tr>
++ </table> */
++ LVM_INT16 AVL_MinGainLin; ///< The maximal attenuation of the AGC.
++
++ /**
++ The maximal gain of the AGC. <br>
++ AVL_MaxGainLin = \f$512*10^{MaxGain_dB/20}\f$
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>6.9</td>
++ <td>@ref LVVC_AVL_MAXGAINLIN_MIN (512)</td>
++ <td>@ref LVVC_AVL_MAXGAINLIN_DEFAULT (8192)</td>
++ <td>@ref LVVC_AVL_MAXGAINLIN_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 AVL_MaxGainLin; ///< The maximal gain of the AGC.
++
++ /**
++ The nominal gain of the AGC.<br>
++ AVL_NominalGain = \f$512*10^{NominalGain_dB/20}\f$
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>6.9</td>
++ <td>@ref LVVC_AVL_NOMINALGAIN_MIN (0)</td>
++ <td>@ref LVVC_AVL_NOMINALGAIN_DEFAULT (512)</td>
++ <td>@ref LVVC_AVL_NOMINALGAIN_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 AVL_NominalGain; ///< The nominal gain of the AGC.
++
++ /**
++ The gain of the AGC is smoothed across time. The time constant of the smoothing
++ depends on whether the gain is increasing or decreasing. When a sudden loud
++ signal is encountered (e.g. attack of speech), the attack time is used. When
++ the gain is increasing (e.g. long period of whispered speech), the release time
++ is used. <br>
++
++ AVL_Attack = \f$32767*\exp(-1/(100*AttackTimeSec))\f$
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVVC_AVL_ATTACK_MIN (0)</td>
++ <td>@ref LVVC_AVL_ATTACK_DEFAULT (12055)</td>
++ <td>@ref LVVC_AVL_ATTACK_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 AVL_Attack; ///< The attack time of the AGC.
++
++ /**
++ The gain of the AGC is smoothed across time. The time constant of the smoothing
++ depends on whether the gain is increasing or decreasing. When a sudden loud
++ signal is encountered (e.g. attack of speech), the attack time is used. When
++ the gain is increasing (e.g. long period of whispered speech), the release time
++ is used. <br>
++
++ AVL_Release = \f$32767*\exp(-1/(100*ReleaseTimeSec))\f$
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVVC_AVL_RELEASE_MIN (0)</td>
++ <td>@ref LVVC_AVL_RELEASE_DEFAULT (32604)</td>
++ <td>@ref LVVC_AVL_RELEASE_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 AVL_Release; ///< The release time of the AGC.
++
++ /**
++ The release time at maximum noise level.<br>
++
++ AVL_ReleaseMax = \f$32767*\exp(-1/(100*ReleaseMaxTimeSec))\f$
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVVC_AVL_RELEASEMAX_MIN (0)</td>
++ <td>@ref LVVC_AVL_RELEASEMAX_DEFAULT (32441)</td>
++ <td>@ref LVVC_AVL_RELEASEMAX_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 AVL_ReleaseMax; ///< The release time at maximum noise level.
++
++ /**
++ AVL_Limit_MaxOutputLin = \f$32767*10^{TargetLimiterLeveldB/20}\f$
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVVC_AVL_LIMIT_MAXOUTPUTLIN_MIN (0)</td>
++ <td>@ref LVVC_AVL_LIMIT_MAXOUTPUTLIN_DEFAULT (23170)</td>
++ <td>@ref LVVC_AVL_LIMIT_MAXOUTPUTLIN_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 AVL_Limit_MaxOutputLin; ///< The level to which the signal will be limited.
++
++ /**
++ The higher the value of the threshold, the less speech detections will occur.
++ <br>
++ SpDetect_Threshold = \f$512 * [0,64]\f$
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>6.9</td>
++ <td>@ref LVVC_SPDETECT_THRESHOLD_MIN (0)</td>
++ <td>@ref LVVC_SPDETECT_THRESHOLD_DEFAULT (1024)</td>
++ <td>@ref LVVC_SPDETECT_THRESHOLD_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 SpDetect_Threshold; ///< The threshold used in the speech detector of VoiceClarity.
++
++} LVVC_ControlParams_st;
++
++/**
++* The control parameters are used to control the overall module behavior. These parameters may
++* be changed at any time during processing using the LVFENS_SetControlParameters function but they
++* will not take effect until the next call to the LVFENS_Process function.
++*
++* @see LVFENS_SetControlParameters
++* @see LVFENS_Process
++*/
++typedef struct
++{
++ /**
++ */
++ LVM_Mode_en OperatingMode; ///< Operating Mode
++
++ /**
++ The maximum amount of noise suppression. <br>
++ Unit: dB<br>
++ FENS_limit_ns = \f$32767*10^{-max noise reduction[dB]/20}\f$
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVFENS_FENS_LIMIT_NS_MIN (0)</td>
++ <td>@ref LVFENS_FENS_LIMIT_NS_DEFAULT (10976)</td>
++ <td>@ref LVFENS_FENS_LIMIT_NS_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 FENS_limit_NS; ///< FENS Noise Suppression Limit
++
++ /**
++ The mode word to control the internal operation of FENS.
++ */
++ LVFENS_ModeWord_bm Mode; ///< Mode word
++
++} LVFENS_ControlParams_st;
++
++/**
++* The control parameters are used to control the overall module behavior. These parameters may
++* be changed at any time during processing using the LVWM_SetControlParameters function but they
++* will not take effect until the next call to the LVWM_Process function.
++*
++* @see LVWM_SetControlParameters
++* @see LVWM_Process
++*/
++typedef struct
++{
++ /**
++ Control the operating mode (ON/OFF) of the algorithm.
++ */
++ LVM_Mode_en OperatingMode; ///< Operating mode
++
++ /**
++ The mode word to enable/disable internal algorithm blocks of WhisperMode.
++ */
++ LVWM_ModeWord_bm mode; ///< Mode word
++
++ /**
++ The desired output level of the AGC. <br>
++ AVL_Target_level_lin = \f$32767*10^{TargetLeveldB/20}\f$
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVWM_AVL_TARGET_LEVEL_LIN_MIN (0)</td>
++ <td>@ref LVWM_AVL_TARGET_LEVEL_LIN_DEFAULT (16384)</td>
++ <td>@ref LVWM_AVL_TARGET_LEVEL_LIN_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 AVL_Target_level_lin; ///< The desired output level of the AGC.
++
++ /**
++ The maximal attenuation of the AGC. <br>
++ AVL_MinGainLin = \f$512*10^{MinGaindB/20}\f$
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>6.9</td>
++ <td>@ref LVWM_AVL_MINGAINLIN_MIN (0)</td>
++ <td>@ref LVWM_AVL_MINGAINLIN_DEFAULT (128)</td>
++ <td>@ref LVWM_AVL_MINGAINLIN_MAX (512)</td>
++ </tr>
++ </table> */
++ LVM_INT16 AVL_MinGainLin; ///< The maximal attenuation of the AGC.
++
++ /**
++ The maximal gain of the AGC. <br>
++ AVL_MaxGainLin = \f$512*10^{MaxGaindB/20}\f$
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>6.9</td>
++ <td>@ref LVWM_AVL_MAXGAINLIN_MIN (512)</td>
++ <td>@ref LVWM_AVL_MAXGAINLIN_DEFAULT (8189)</td>
++ <td>@ref LVWM_AVL_MAXGAINLIN_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 AVL_MaxGainLin; ///< The maximal gain of the AGC.
++
++ /**
++ The gain of the AGC is smoothed across time. The time constant of the smoothing
++ depends on whether the gain is increasing or decreasing. When a sudden loud
++ signal is encountered (e.g. attack of speech), the attack time is used. When
++ the gain is increasing (e.g. long period of whispered speech), the release time
++ is used. <br>
++
++ AVL_Attack = \f$32767*\exp(-1/(100*AttackTimeSec))\f$
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVWM_AVL_ATTACK_MIN (0)</td>
++ <td>@ref LVWM_AVL_ATTACK_DEFAULT (25520)</td>
++ <td>@ref LVWM_AVL_ATTACK_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 AVL_Attack; ///< The attack time of the AGC.
++
++ /**
++ The gain of the AGC is smoothed across time. The time constant of the smoothing
++ depends on whether the gain is increasing or decreasing. When a sudden loud
++ signal is encountered (e.g. attack of speech), the attack time is used. When
++ the gain is increasing (e.g. long period of whispered speech), the release time
++ is used. <br>
++
++ AVL_Release = \f$32767*\exp(-1/(100*ReleasTimeSec))\f$
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVWM_AVL_RELEASE_MIN (0)</td>
++ <td>@ref LVWM_AVL_RELEASE_DEFAULT (32685)</td>
++ <td>@ref LVWM_AVL_RELEASE_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 AVL_Release; ///< The release time of the AGC.
++
++ /**
++ AVL_Limit_MaxOutputLin = \f$32767*10^{TargetLimiterLeveldB/20}\f$
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVWM_AVL_LIMIT_MAXOUTPUTLIN_MIN (0)</td>
++ <td>@ref LVWM_AVL_LIMIT_MAXOUTPUTLIN_DEFAULT (23197)</td>
++ <td>@ref LVWM_AVL_LIMIT_MAXOUTPUTLIN_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 AVL_Limit_MaxOutputLin; ///< The level to which the signal will be limited.
++
++ /**
++ The higher the value of the threshold, the less speech detections will occur.
++ <br>
++ SpDetect_Threshold = \f$512 * [0,64]\f$
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>6.9</td>
++ <td>@ref LVWM_SPDETECT_THRESHOLD_MIN (0)</td>
++ <td>@ref LVWM_SPDETECT_THRESHOLD_DEFAULT (9216)</td>
++ <td>@ref LVWM_SPDETECT_THRESHOLD_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 SpDetect_Threshold; ///< The threshold used in the speech detector of WhisperMode.
++
++} LVWM_ControlParams_st;
++
++/**
++* The control parameters are used to control the overall module behavior. These parameters may
++* be changed at any time during processing using the LVDRC_SetControlParameters function but they
++* will not take effect until the next call to the LVDRC_Process function.
++*
++* @see LVDRC_SetControlParameters
++* @see LVDRC_Process
++*/
++typedef struct
++{
++ /**
++ Operating mode for DRC
++ */
++ LVM_Mode_en OperatingMode; ///< Operating mode
++
++ /**
++ Sets the number of sections (knee points) in the compressor curve
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>16.0</td>
++ <td>@ref LVDRC_NUMKNEES_MIN (1)</td>
++ <td>@ref LVDRC_NUMKNEES_DEFAULT (5)</td>
++ <td>@ref LVDRC_NUMKNEES_MAX (5)</td>
++ </tr>
++ </table> */
++ LVM_UINT16 NumKnees; ///< Number of Knee points in compressor curve
++
++ /**
++ An array of size 5(maximum) containing the knee points specified by the
++ compression curve in dBFs. The number of knee points in use is limited by the
++ NumKnees parameter. Th input level for the first knee should be equal to or
++ larger than -96dB, and the input level for the last knee should be 0dB.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>15.0</td>
++ <td>@ref LVDRC_COMPRESSORCURVEINPUTLEVELS_MIN (-96)</td>
++ <td>@ref LVDRC_COMPRESSORCURVEINPUTLEVELS_DEFAULT {-96,-70,-50, -24, 0}</td>
++ <td>@ref LVDRC_COMPRESSORCURVEINPUTLEVELS_MAX (0)</td>
++ </tr>
++ </table> */
++ LVM_INT16 CompressorCurveInputLevels[LVDRC_COMPRESSORCURVEINPUTLEVELS_LENGTH]; ///< Compressor Curve Input Levels
++
++ /**
++ An array of size 5(maximum) containing the knee points specified by the
++ compression curve in dBFs. The number of knee points in use is limited by the
++ NumKnees parameter. The output level for the first knee should be equal to or
++ larger than -96dB, and the output level for the last knee should be equal to or
++ smaller than 0dB.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>15.0</td>
++ <td>@ref LVDRC_COMPRESSORCURVEOUTPUTLEVELS_MIN (-96)</td>
++ <td>@ref LVDRC_COMPRESSORCURVEOUTPUTLEVELS_DEFAULT {-96,-70,-38,-12,0}</td>
++ <td>@ref LVDRC_COMPRESSORCURVEOUTPUTLEVELS_MAX (0)</td>
++ </tr>
++ </table> */
++ LVM_INT16 CompressorCurveOutputLevels[LVDRC_COMPRESSORCURVEOUTPUTLEVELS_LENGTH]; ///< Compressor Curve Output Levels
++
++ /**
++ The AttackTime parameter is the time constant controlling the rate of reaction
++ to increase in signal level. The AttackTime is specified in increments of 100µs
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>15.0</td>
++ <td>@ref LVDRC_ATTACKTIME_MIN (0)</td>
++ <td>@ref LVDRC_ATTACKTIME_DEFAULT (50)</td>
++ <td>@ref LVDRC_ATTACKTIME_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 AttackTime; ///< Attack Time
++
++ /**
++ The ReleaseTime parameter is the time constant controlling the rate of reaction
++ to decrease in signal level. The ReleaseTime is specified in increments of
++ 100µs.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>15.0</td>
++ <td>@ref LVDRC_RELEASETIME_MIN (0)</td>
++ <td>@ref LVDRC_RELEASETIME_DEFAULT (50)</td>
++ <td>@ref LVDRC_RELEASETIME_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 ReleaseTime; ///< Release Time
++
++ /**
++ Enable or Disable limiter with soft clipping.
++ */
++ LVM_Mode_en LimiterOperatingMode; ///< Enable or Disable limiter with soft clipping
++
++ /**
++ Sets the limit level of the compressor in dB.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>15.0</td>
++ <td>@ref LVDRC_LIMITLEVEL_MIN (-96)</td>
++ <td>@ref LVDRC_LIMITLEVEL_DEFAULT (0)</td>
++ <td>@ref LVDRC_LIMITLEVEL_MAX (0)</td>
++ </tr>
++ </table> */
++ LVM_INT16 LimitLevel; ///< Sets the limit level of the compressor in dB
++
++} LVDRC_ControlParams_st;
++
++/**
++* The control parameters are used to control the overall module behavior. These parameters may
++* be changed at any time during processing using the LVNG_SetControlParameters function but they
++* will not take effect until the next call to the LVNG_Process function.
++*
++* @see LVNG_SetControlParameters
++* @see LVNG_Process
++*/
++typedef struct
++{
++ /**
++ Operating mode for Noise Gate
++ */
++ LVM_Mode_en OperatingMode; ///< Operating mode
++
++ /**
++ Sets the number of sections (knee points) in the compressor curve
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>16.0</td>
++ <td>@ref LVNG_NUMKNEES_MIN (1)</td>
++ <td>@ref LVNG_NUMKNEES_DEFAULT (5)</td>
++ <td>@ref LVNG_NUMKNEES_MAX (5)</td>
++ </tr>
++ </table> */
++ LVM_UINT16 NumKnees; ///< Number of Knee points in compressor curve
++
++ /**
++ An array of size 5(maximum) containing the knee points specified by the
++ compression curve in dBFs. The number of knee points in use is limited by the
++ NumKnees parameter. The input level for the first knee should be equal to or
++ larger than -96dB, and the input level for the last knee should be 0dB.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>15.0</td>
++ <td>@ref LVNG_COMPRESSORCURVEINPUTLEVELS_MIN (-96)</td>
++ <td>@ref LVNG_COMPRESSORCURVEINPUTLEVELS_DEFAULT {-80,-70,-50, -24, 0}</td>
++ <td>@ref LVNG_COMPRESSORCURVEINPUTLEVELS_MAX (0)</td>
++ </tr>
++ </table> */
++ LVM_INT16 CompressorCurveInputLevels[LVNG_COMPRESSORCURVEINPUTLEVELS_LENGTH]; ///< Compressor Curve Input Levels
++
++ /**
++ An array of size 5(maximum) containing the knee points specified by the
++ compression curve in dBFs. The number of knee points in use is limited by the
++ NumKnees parameter. The output level for the first knee should be equal to or
++ larger than -96dB, and the output level for the last knee should be equal to or
++ smaller than 0dB.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>15.0</td>
++ <td>@ref LVNG_COMPRESSORCURVEOUTPUTLEVELS_MIN (-96)</td>
++ <td>@ref LVNG_COMPRESSORCURVEOUTPUTLEVELS_DEFAULT {-96,-80,-50, -24, 0}</td>
++ <td>@ref LVNG_COMPRESSORCURVEOUTPUTLEVELS_MAX (0)</td>
++ </tr>
++ </table> */
++ LVM_INT16 CompressorCurveOutputLevels[LVNG_COMPRESSORCURVEOUTPUTLEVELS_LENGTH]; ///< Compressor Curve Output Levels
++
++ /**
++ The AttackTime parameter is the time constant controlling the rate of reaction
++ to increase in signal level. The AttackTime is specified in increments of 100µs
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>15.0</td>
++ <td>@ref LVNG_ATTACKTIME_MIN (0)</td>
++ <td>@ref LVNG_ATTACKTIME_DEFAULT (50)</td>
++ <td>@ref LVNG_ATTACKTIME_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 AttackTime; ///< Attack Time
++
++ /**
++ The ReleaseTime parameter is the time constant controlling the rate of reaction
++ to decrease in signal level. The ReleaseTime is specified in increments of
++ 100µs.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>15.0</td>
++ <td>@ref LVNG_RELEASETIME_MIN (0)</td>
++ <td>@ref LVNG_RELEASETIME_DEFAULT (50)</td>
++ <td>@ref LVNG_RELEASETIME_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 ReleaseTime; ///< Release Time
++
++} LVNG_ControlParams_st;
++
++/**
++* The control parameters are used to control the overall module behavior. These parameters may
++* be changed at any time during processing using the LVNLPP_SetControlParameters function but they
++* will not take effect until the next call to the LVNLPP_Process function.
++*
++* @see LVNLPP_SetControlParameters
++* @see LVNLPP_Process
++*/
++typedef struct
++{
++ /**
++ Limits the signal level compared to digital full scale in dB.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>15.0</td>
++ <td>@ref LVNLPP_NLPP_LIMIT_MIN (-24)</td>
++ <td>@ref LVNLPP_NLPP_LIMIT_DEFAULT (0)</td>
++ <td>@ref LVNLPP_NLPP_LIMIT_MAX (0)</td>
++ </tr>
++ </table> */
++ LVM_INT16 NLPP_Limit; ///< NLPP Limit
++
++ /**
++ Sets the -3dB corner frequency of the high-pass filter in Hz.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>16.0</td>
++ <td>@ref LVNLPP_NLPP_HPF_CORNERFREQ_MIN (50)</td>
++ <td>@ref LVNLPP_NLPP_HPF_CORNERFREQ_DEFAULT (50)</td>
++ <td>@ref LVNLPP_NLPP_HPF_CORNERFREQ_MAX (1000)</td>
++ </tr>
++ </table> */
++ LVM_UINT16 NLPP_HPF_CornerFreq; ///< NLPP HPF Corner Frequency
++
++} LVNLPP_ControlParams_st;
++
++/**
++* The control parameters are used to control the overall module behavior. These parameters may
++* be changed at any time during processing using the LVEQ_SetControlParameters function but they
++* will not take effect until the next call to the LVEQ_Process function.
++*
++* @see LVEQ_SetControlParameters
++* @see LVEQ_Process
++*/
++typedef struct
++{
++ /**
++ Sets the length of the Equalizer impulse response. This must never be more than
++ the value of EQ_MaxLength set at initialization time. The EQ_Length must be a
++ multiple of 8.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>16.0</td>
++ <td>@ref LVEQ_EQ_LENGTH_MIN (8)</td>
++ <td>@ref LVEQ_EQ_LENGTH_DEFAULT (32)</td>
++ <td>@ref LVEQ_EQ_LENGTH_MAX (32)</td>
++ </tr>
++ </table> */
++ LVM_UINT16 EQ_Length; ///< EQ Tap Length
++
++ /**
++ Pointer to an array containing the samples of the Equalizer impulse response.
++ The format of the array content is specified below. The samples of the
++ Equalizer impulse response must be in Q3.12 format.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>3.12</td>
++ <td>@ref LVEQ_EQ_COEFS_MIN (-32768)</td>
++ <td>@ref LVEQ_EQ_COEFS_DEFAULT {4096,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}</td>
++ <td>@ref LVEQ_EQ_COEFS_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 *pEQ_Coefs; ///< Equalizer impulse response
++
++} LVEQ_ControlParams_st;
++
++/**
++* The control parameters are used to control the overall module behavior. These parameters may
++* be changed at any time during processing using the LVVOL_SetControlParameters function but they
++* will not take effect until the next call to the LVVOL_Process function.
++*
++* @see LVVOL_SetControlParameters
++* @see LVVOL_Process
++*/
++typedef struct
++{
++ /**
++ Turns on/off VOL_Gain.
++ */
++ LVM_Mode_en VOL_OperatingMode; ///< Turns on/off VOL_Gain
++
++ /**
++ The volume control gain can be used to set the overall volume level of the
++ signal. The gain is set in dB with steps of 1dB.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>15.0</td>
++ <td>@ref LVVOL_VOL_GAIN_MIN (-96)</td>
++ <td>@ref LVVOL_VOL_GAIN_DEFAULT (0)</td>
++ <td>@ref LVVOL_VOL_GAIN_MAX (24)</td>
++ </tr>
++ </table> */
++ LVM_INT16 VOL_Gain; ///< Apply Gain to Input signal
++
++} LVVOL_ControlParams_st;
++
++/**
++* The control parameters are used to control the overall module behavior. These parameters may
++* be changed at any time during processing using the LVHPF_SetControlParameters function but they
++* will not take effect until the next call to the LVHPF_Process function.
++*
++* @see LVHPF_SetControlParameters
++* @see LVHPF_Process
++*/
++typedef struct
++{
++ /**
++ Turns on/off High Pass filter.
++ */
++ LVM_Mode_en HPF_OperatingMode; ///< Turns on/off High Pass filter
++
++ /**
++ Sets the 3dB corner frequency of the high-pass filter. In case NoiseVoid is
++ enabled, the same high-pass filter will be applied to the second microphone
++ channel.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>16.0</td>
++ <td>@ref LVHPF_HPF_CORNERFREQ_MIN (50)</td>
++ <td>@ref LVHPF_HPF_CORNERFREQ_DEFAULT (50)</td>
++ <td>@ref LVHPF_HPF_CORNERFREQ_MAX (1500)</td>
++ </tr>
++ </table> */
++ LVM_UINT16 HPF_CornerFreq; ///< High Pass Filter Corner Frequency in Hz
++
++} LVHPF_ControlParams_st;
++
++/**
++* The control parameters are used to control the overall module behavior. These parameters may
++* be changed at any time during processing using the LVMUTE_SetControlParameters function but they
++* will not take effect until the next call to the LVMUTE_Process function.
++*
++* @see LVMUTE_SetControlParameters
++* @see LVMUTE_Process
++*/
++typedef struct
++{
++ /**
++ This param can mute unmute the Rx/Tx engine output.
++ */
++ LVM_Mode_en Mute; ///< This param can mute unmute the Rx/Tx engine output
++
++} LVMUTE_ControlParams_st;
++
++/**
++* The control parameters are used to control the overall module behavior. These parameters may
++* be changed at any time during processing using the LVVE_Rx_SetControlParameters function but they
++* will not take effect until the next call to the LVVE_Rx_Process function.
++*
++* @see LVVE_Rx_SetControlParameters
++* @see LVVE_Rx_Process
++*/
++typedef struct
++{
++ /**
++ This enumerated type is used to set the operating mode of the Rx path. The
++ processing can be separately set to enable all processing modules (i.e., ON),
++ to disable all processing modules (i.e., OFF) or to bypass all processing
++ modules (i.e., BYPASS). When bypassed, all processing modules keep on running,
++ but their output is not used.
++ */
++ LVVE_Rx_Mode_en OperatingMode; ///< This param controls the on/off of RX voice engine.
++
++ /**
++ This param can mute unmute the Rx/Tx engine output.
++ */
++ LVM_Mode_en Mute; ///< This param can mute unmute the Rx/Tx engine output
++
++ /**
++ Turns on/off VOL_Gain.
++ */
++ LVM_Mode_en VOL_OperatingMode; ///< Turns on/off VOL_Gain
++
++ /**
++ The volume control gain can be used to set the overall volume level of the
++ signal. The gain is set in dB with steps of 1dB.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>15.0</td>
++ <td>@ref LVVE_RX_VOL_GAIN_MIN (-96)</td>
++ <td>@ref LVVE_RX_VOL_GAIN_DEFAULT (0)</td>
++ <td>@ref LVVE_RX_VOL_GAIN_MAX (24)</td>
++ </tr>
++ </table> */
++ LVM_INT16 VOL_Gain; ///< Apply Gain to Input signal
++
++ /**
++ Far End Noise Suppression Control Parameter Structure.
++ */
++ LVFENS_ControlParams_st FENS_ControlParams; ///< Far End Noise Suppression Control Parameter Structure
++
++ /**
++ Turns on/off NLPP.
++ */
++ LVM_Mode_en NLPP_OperatingMode; ///< Turns on/off NLPP
++
++ /**
++ NLPP Control Parameter Structure.
++ */
++ LVNLPP_ControlParams_st NLPP_ControlParams; ///< NLPP Control Parameter Structure
++
++ /**
++ Voice Clarity Control Parameter Structure.
++ */
++ LVVC_ControlParams_st VC_ControlParams; ///< Voice Clarity Control Parameter Structure
++
++ /**
++ Equalizer Operating mode.
++ */
++ LVM_Mode_en EQ_OperatingMode; ///< Equalizer Operating mode
++
++ /**
++ Equalizer Control Parameters Structure.
++ */
++ LVEQ_ControlParams_st EQ_ControlParams; ///< Equalizer Control Parameters Structure
++
++ /**
++ DRC Control Parameter Strcuture.
++ */
++ LVDRC_ControlParams_st DRC_ControlParams; ///< DRC Control Parameter Strcuture
++
++ /**
++ Turns on/off High Pass filter.
++ */
++ LVM_Mode_en HPF_OperatingMode; ///< Turns on/off High Pass filter
++
++ /**
++ Sets the 3dB corner frequency of the high-pass filter. In case NoiseVoid is
++ enabled, the same high-pass filter will be applied to the second microphone
++ channel.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>16.0</td>
++ <td>@ref LVVE_RX_HPF_CORNERFREQ_MIN (50)</td>
++ <td>@ref LVVE_RX_HPF_CORNERFREQ_DEFAULT (50)</td>
++ <td>@ref LVVE_RX_HPF_CORNERFREQ_MAX (1500)</td>
++ </tr>
++ </table> */
++ LVM_UINT16 HPF_CornerFreq; ///< High Pass Filter Corner Frequency in Hz
++
++ /**
++ Whisper Mode Control Parameter Strcuture.
++ */
++ LVWM_ControlParams_st WM_ControlParams; ///< Whisper Mode Control Parameter Strcuture
++
++ /**
++ Noise Gate Control Parameter Structure.
++ */
++ LVNG_ControlParams_st NG_ControlParams; ///< Noise Gate Control Parameter Structure
++
++} LVVE_Rx_ControlParams_st;
++
++/**
++* The control parameters are used to control the overall module behavior. These parameters may
++* be changed at any time during processing using the LVNV_SetControlParameters function but they
++* will not take effect until the next call to the LVNV_Process function.
++*
++* @see LVNV_SetControlParameters
++* @see LVNV_Process
++*/
++typedef struct
++{
++ /**
++ */
++ LVM_Mode_en OperatingMode; ///< Operating Mode
++
++ /**
++ The mode word to enable/disable internal algorithm blocks of LVNV.
++ */
++ LVNV_ModeWord_bm Mode; ///< Mode word
++
++ /**
++ The mode2 word to allow switching or combining different blocks inside LVNV.
++ */
++ LVNV_Mode2Word_bm Mode2; ///< Mode2 word
++
++ /**
++ The tuning mode word to enable/disable internal algorithm tuning capabilities
++ in the different blocks of LVNV. Only one bit is allowed to be enabled at a
++ time.
++ */
++ LVNV_TuningModeWord_bm Tuning_mode; ///< Tuning mode word
++
++ /**
++ Gain applied at the primary channel in the Tx input. Used to scale the
++ microphone signal in order to give the NLMS0_LB and NLMS0_HB filters headroom
++ for correct operation.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>2.13</td>
++ <td>@ref LVNV_INPUT_GAIN_MIC0_MIN (0)</td>
++ <td>@ref LVNV_INPUT_GAIN_MIC0_DEFAULT (8192)</td>
++ <td>@ref LVNV_INPUT_GAIN_MIC0_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 Input_Gain_Mic0; ///< The primary input gain.
++
++ /**
++ Gain applied at the secondary channel in the Tx input. Used to scale the
++ microphone signal in order to give the NLMS1_LB and NLMS1_HB filters headroom
++ for correct operation.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>2.13</td>
++ <td>@ref LVNV_INPUT_GAIN_MIC1_MIN (0)</td>
++ <td>@ref LVNV_INPUT_GAIN_MIC1_DEFAULT (8192)</td>
++ <td>@ref LVNV_INPUT_GAIN_MIC1_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 Input_Gain_Mic1; ///< The secondary input gain.
++
++ /**
++ Gain applied at the Tx output of LVNV. Compensates the applied Input_Gain_Mic0
++ in order to preserve the overall Tx gain.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>4.11</td>
++ <td>@ref LVNV_OUTPUT_GAIN_MIN (0)</td>
++ <td>@ref LVNV_OUTPUT_GAIN_DEFAULT (2048)</td>
++ <td>@ref LVNV_OUTPUT_GAIN_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 Output_Gain; ///< The output gain.
++
++ /**
++ Length of the low-band (0-4kHz) adaptive echo cancellation filter for the
++ primary channel. The Length should be chosen such that most of the energy of
++ the impulse response is covered by the filter. The length should be a multiple
++ of 8.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>16.0</td>
++ <td>@ref LVNV_NLMS0_LB_TAPS_MIN (16)</td>
++ <td>@ref LVNV_NLMS0_LB_TAPS_DEFAULT (32)</td>
++ <td>@ref LVNV_NLMS0_LB_TAPS_MAX (64)</td>
++ </tr>
++ </table> */
++ LVM_UINT16 NLMS0_LB_taps; ///< Number of NLMS0 low-band taps.
++
++ /**
++ Step size for the update of the low-band adaptive filter coefficients for the
++ primary channel. It is recommended not to change the default value.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVNV_NLMS0_LB_TWOALPHA_MIN (0)</td>
++ <td>@ref LVNV_NLMS0_LB_TWOALPHA_DEFAULT (8192)</td>
++ <td>@ref LVNV_NLMS0_LB_TWOALPHA_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 NLMS0_LB_twoalpha; ///< NLMS0 low-band step size
++
++ /**
++ Adaptive step-size control for the low-band adaptive echo cancellation filter
++ for the primary channel. This parameter is used to slow down the update speed
++ of the adaptive filter during double talk situations.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>9.6</td>
++ <td>@ref LVNV_NLMS0_LB_ERL_MIN (64)</td>
++ <td>@ref LVNV_NLMS0_LB_ERL_DEFAULT (1000)</td>
++ <td>@ref LVNV_NLMS0_LB_ERL_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 NLMS0_LB_erl; ///< NLMS0 low-band erl
++
++ /**
++ Length of the high-band (4-8kHz) adaptive echo cancellation filter for the
++ primary channel. The Length should be chosen such that most of the energy of
++ the impulse response is covered by the filter. The length should be a multiple
++ of 8.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>16.0</td>
++ <td>@ref LVNV_NLMS0_HB_TAPS_MIN (16)</td>
++ <td>@ref LVNV_NLMS0_HB_TAPS_DEFAULT (24)</td>
++ <td>@ref LVNV_NLMS0_HB_TAPS_MAX (64)</td>
++ </tr>
++ </table> */
++ LVM_UINT16 NLMS0_HB_taps; ///< Number of NLMS0 high-band taps.
++
++ /**
++ Step size for the update of the high-band adaptive filter coefficients for the
++ primary channel. It is recommended not to change the default value.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVNV_NLMS0_HB_TWOALPHA_MIN (0)</td>
++ <td>@ref LVNV_NLMS0_HB_TWOALPHA_DEFAULT (8192)</td>
++ <td>@ref LVNV_NLMS0_HB_TWOALPHA_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 NLMS0_HB_twoalpha; ///< NLMS0 high-band step size
++
++ /**
++ Adaptive step-size control for the high-band adaptive echo cancellation filter
++ for the primary channel. This parameter is used to slow down the update speed
++ of the adaptive filter during double talk situations.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>9.6</td>
++ <td>@ref LVNV_NLMS0_HB_ERL_MIN (64)</td>
++ <td>@ref LVNV_NLMS0_HB_ERL_DEFAULT (1000)</td>
++ <td>@ref LVNV_NLMS0_HB_ERL_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 NLMS0_HB_erl; ///< NLMS0 high-band erl
++
++ /**
++ Indicates whether a preset of adaptive filter coefficients should be done.<br>
++ 0 = No preset (coefficients as they are).<br>
++ 1 = Preset with internally calculated coefficients.<br>
++ 2 = Preset with zero coefficients.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>15.0</td>
++ <td>@ref LVNV_NLMS0_PRESET_COEFS_MIN (0)</td>
++ <td>@ref LVNV_NLMS0_PRESET_COEFS_DEFAULT (0)</td>
++ <td>@ref LVNV_NLMS0_PRESET_COEFS_MAX (2)</td>
++ </tr>
++ </table> */
++ LVM_INT16 NLMS0_preset_coefs; ///< NLMS0 preset
++
++ /**
++ Offset added to the normalization of the adaptation of the filter.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVNV_NLMS0_OFFSET_MIN (0)</td>
++ <td>@ref LVNV_NLMS0_OFFSET_DEFAULT (776)</td>
++ <td>@ref LVNV_NLMS0_OFFSET_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 NLMS0_offset; ///< NLMS0 offset
++
++ /**
++ Length of the low-band (0-4kHz) adaptive echo cancellation filter for the
++ secondary channel. The Length should be chosen such that most of the energy of
++ the impulse response is covered by the filter. The length should be a multiple
++ of 8.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>16.0</td>
++ <td>@ref LVNV_NLMS1_LB_TAPS_MIN (16)</td>
++ <td>@ref LVNV_NLMS1_LB_TAPS_DEFAULT (32)</td>
++ <td>@ref LVNV_NLMS1_LB_TAPS_MAX (32)</td>
++ </tr>
++ </table> */
++ LVM_UINT16 NLMS1_LB_taps; ///< Number of NLMS1 low-band taps.
++
++ /**
++ Step size for the update of the low-band adaptive filter coefficients for the
++ secondary channel. It is recommended not to change the default value.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVNV_NLMS1_LB_TWOALPHA_MIN (0)</td>
++ <td>@ref LVNV_NLMS1_LB_TWOALPHA_DEFAULT (8192)</td>
++ <td>@ref LVNV_NLMS1_LB_TWOALPHA_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 NLMS1_LB_twoalpha; ///< NLMS1 low-band step size
++
++ /**
++ Adaptive step-size control for the low-band adaptive echo cancellation filter
++ for the secondary channel. This parameter is used to slow down the update speed
++ of the adaptive filter during double talk situations.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>9.6</td>
++ <td>@ref LVNV_NLMS1_LB_ERL_MIN (64)</td>
++ <td>@ref LVNV_NLMS1_LB_ERL_DEFAULT (1000)</td>
++ <td>@ref LVNV_NLMS1_LB_ERL_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 NLMS1_LB_erl; ///< NLMS1 low-band erl
++
++ /**
++ Length of the high-band (4-8kHz) adaptive echo cancellation filter for the
++ secondary channel. The Length should be chosen such that most of the energy of
++ the impulse response is covered by the filter. The length should be a multiple
++ of 8.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>16.0</td>
++ <td>@ref LVNV_NLMS1_HB_TAPS_MIN (16)</td>
++ <td>@ref LVNV_NLMS1_HB_TAPS_DEFAULT (24)</td>
++ <td>@ref LVNV_NLMS1_HB_TAPS_MAX (32)</td>
++ </tr>
++ </table> */
++ LVM_UINT16 NLMS1_HB_taps; ///< Number of NLMS1 high-band taps.
++
++ /**
++ Step size for the update of the high-band adaptive filter coefficients for the
++ secondary channel. It is recommended not to change the default value.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVNV_NLMS1_HB_TWOALPHA_MIN (0)</td>
++ <td>@ref LVNV_NLMS1_HB_TWOALPHA_DEFAULT (8192)</td>
++ <td>@ref LVNV_NLMS1_HB_TWOALPHA_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 NLMS1_HB_twoalpha; ///< NLMS1 high-band step size
++
++ /**
++ Adaptive step-size control for the high-band adaptive echo cancellation filter
++ for the secondary channel. This parameter is used to slow down the update speed
++ of the adaptive filter during double talk situations.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>9.6</td>
++ <td>@ref LVNV_NLMS1_HB_ERL_MIN (64)</td>
++ <td>@ref LVNV_NLMS1_HB_ERL_DEFAULT (1000)</td>
++ <td>@ref LVNV_NLMS1_HB_ERL_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 NLMS1_HB_erl; ///< NLMS1 high-band erl
++
++ /**
++ Indicates whether a preset of adaptive filter coefficients should be done.<br>
++ 0 = No preset (coefficients as they are).<br>
++ 1 = Preset with internally calculated coefficients.<br>
++ 2 = Preset with zero coefficients.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>15.0</td>
++ <td>@ref LVNV_NLMS1_PRESET_COEFS_MIN (0)</td>
++ <td>@ref LVNV_NLMS1_PRESET_COEFS_DEFAULT (0)</td>
++ <td>@ref LVNV_NLMS1_PRESET_COEFS_MAX (2)</td>
++ </tr>
++ </table> */
++ LVM_INT16 NLMS1_preset_coefs; ///< NLMS1 preset
++
++ /**
++ Offset added to the normalization of the adaptation of the filter.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVNV_NLMS1_OFFSET_MIN (0)</td>
++ <td>@ref LVNV_NLMS1_OFFSET_DEFAULT (776)</td>
++ <td>@ref LVNV_NLMS1_OFFSET_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 NLMS1_offset; ///< NLMS1 offset
++
++ /**
++ A parameter representing a threshold for the detection of instrumental noise.
++ The higher the value for this parameter, the lower noise suppression
++ performance.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVNV_CAL_MICPOWFLOORMIN_MIN (0)</td>
++ <td>@ref LVNV_CAL_MICPOWFLOORMIN_DEFAULT (150)</td>
++ <td>@ref LVNV_CAL_MICPOWFLOORMIN_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 CAL_micPowFloorMin; ///< Instrumental noise threshold
++
++ /**
++ Threshold for Windgush detector. The higher the value, the less sensitive the
++ detection.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>6.9</td>
++ <td>@ref LVNV_WGTHRESHOLD_MIN (0)</td>
++ <td>@ref LVNV_WGTHRESHOLD_DEFAULT (32767)</td>
++ <td>@ref LVNV_WGTHRESHOLD_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 WgThreshold; ///< Windgush threshold
++
++ /**
++ Threshold for speech detector based on power comparison between primary and
++ secondary microphones. The higher the value, the less sensitive the detection.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>3.12</td>
++ <td>@ref LVNV_MPTHRESHOLD_MIN (0)</td>
++ <td>@ref LVNV_MPTHRESHOLD_DEFAULT (6554)</td>
++ <td>@ref LVNV_MPTHRESHOLD_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 MpThreshold; ///< MicPow threshold
++
++ /**
++ Set of first 8 coefficients for adaptive filter FSB0. These values should be
++ determined for the given microphone configuration
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVNV_FSB_INIT_TABLE0_MIN (-32768)</td>
++ <td>@ref LVNV_FSB_INIT_TABLE0_DEFAULT {32767, 0, 0, 0, 0, 0, 0, 0}</td>
++ <td>@ref LVNV_FSB_INIT_TABLE0_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 FSB_init_table0[LVNV_FSB_INIT_TABLE0_LENGTH]; ///< FSB0 initial coefficients.
++
++ /**
++ Set of first 8 coefficients for adaptive filter FSB1. These values should be
++ determined for the given microphone configuration
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVNV_FSB_INIT_TABLE1_MIN (-32768)</td>
++ <td>@ref LVNV_FSB_INIT_TABLE1_DEFAULT {0, 0, 0, 0, 0, 0, 0, 0}</td>
++ <td>@ref LVNV_FSB_INIT_TABLE1_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 FSB_init_table1[LVNV_FSB_INIT_TABLE1_LENGTH]; ///< FSB1 initial coefficients.
++
++ /**
++ Length of the FSB to model the acoustical paths between the speech source and
++ two microphones. The length must be equal to 16 for the handset application.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>16.0</td>
++ <td>@ref LVNV_FSB_TAPS_MIN (8)</td>
++ <td>@ref LVNV_FSB_TAPS_DEFAULT (16)</td>
++ <td>@ref LVNV_FSB_TAPS_MAX (16)</td>
++ </tr>
++ </table> */
++ LVM_UINT16 FSB_taps; ///< Number of FSB taps
++
++ /**
++ Step-size to update the coefficients of the adaptive filters. A higher value
++ leads to a faster speed of the adaptation, while a lower value provides more
++ stability, but a slow adaption speed.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVNV_FSB_TWOALPHA_MIN (0)</td>
++ <td>@ref LVNV_FSB_TWOALPHA_DEFAULT (655)</td>
++ <td>@ref LVNV_FSB_TWOALPHA_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 FSB_twoalpha; ///< FSB step size control
++
++ /**
++ Gain applied on the samples of the second FSB reference signal (fsbref[1]).
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>5.10</td>
++ <td>@ref LVNV_FSB_REF_GAIN_MIN (0)</td>
++ <td>@ref LVNV_FSB_REF_GAIN_DEFAULT (1024)</td>
++ <td>@ref LVNV_FSB_REF_GAIN_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 FSB_ref_gain; ///< FSB ref gain
++
++ /**
++ Length of the GSC to model the transfer function between the noise reference
++ and the residual signal, in order to reduce the noise and interfering sounds
++ from the desired signal. This number should be a multiple of 8.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>16.0</td>
++ <td>@ref LVNV_GSC_TAPS_MIN (8)</td>
++ <td>@ref LVNV_GSC_TAPS_DEFAULT (16)</td>
++ <td>@ref LVNV_GSC_TAPS_MAX (48)</td>
++ </tr>
++ </table> */
++ LVM_UINT16 GSC_taps; ///< Number of GSC taps
++
++ /**
++ Step-size to update the coefficients of the adaptive filter. A higher value
++ leads to a faster speed of the adaptation, while a lower value provides more
++ stability, but a slow adaption speed.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVNV_GSC_TWOALPHA_MIN (0)</td>
++ <td>@ref LVNV_GSC_TWOALPHA_DEFAULT (1638)</td>
++ <td>@ref LVNV_GSC_TWOALPHA_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 GSC_twoalpha; ///< GSC step size control
++
++ /**
++ Adaptive step-size control for GSC to avoid divergence of the adaptive filter
++ during desired speech. In general, GSC_erl is lower than NLMS_erl and ranges
++ between 0 and 30 dB.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>9.6</td>
++ <td>@ref LVNV_GSC_ERL_MIN (64)</td>
++ <td>@ref LVNV_GSC_ERL_DEFAULT (256)</td>
++ <td>@ref LVNV_GSC_ERL_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 GSC_erl; ///< GSC erl
++
++ /**
++ Offset added to the computation of the power of the noise reference to avoid
++ that the power converges towards zero when the input is low.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVNV_GSC_OFFSET_MIN (0)</td>
++ <td>@ref LVNV_GSC_OFFSET_DEFAULT (1638)</td>
++ <td>@ref LVNV_GSC_OFFSET_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 GSC_offset; ///< GSC offset
++
++ /**
++ Echo subtraction factor applied during farend-only.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>2.13</td>
++ <td>@ref LVNV_DNNS_ECHOGAMMAHI_MIN (0)</td>
++ <td>@ref LVNV_DNNS_ECHOGAMMAHI_DEFAULT (16384)</td>
++ <td>@ref LVNV_DNNS_ECHOGAMMAHI_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 DNNS_EchoGammaHi; ///< High echo subtraction factor
++
++ /**
++ Echo subtraction factor applied during double talk and nearend-only.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>2.13</td>
++ <td>@ref LVNV_DNNS_ECHOGAMMALO_MIN (0)</td>
++ <td>@ref LVNV_DNNS_ECHOGAMMALO_DEFAULT (8192)</td>
++ <td>@ref LVNV_DNNS_ECHOGAMMALO_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 DNNS_EchoGammaLo; ///< Low echo subtraction factor
++
++ /**
++ Parameter related to the reverberation time of the acoustical environment,
++ which represents the decay in energy over time of the echo tail of the impulse
++ response.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVNV_DNNS_ECHOALPHAREV_MIN (0)</td>
++ <td>@ref LVNV_DNNS_ECHOALPHAREV_DEFAULT (12000)</td>
++ <td>@ref LVNV_DNNS_ECHOALPHAREV_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 DNNS_EchoAlphaRev; ///< Echo reverberation factor
++
++ /**
++ Parameter representing the portion of the echo tail (estimated by the NLMS
++ filter) that has to be extrapolated in time.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVNV_DNNS_ECHOTAILPORTION_MIN (0)</td>
++ <td>@ref LVNV_DNNS_ECHOTAILPORTION_DEFAULT (7000)</td>
++ <td>@ref LVNV_DNNS_ECHOTAILPORTION_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 DNNS_EchoTailPortion; ///< Echo tail portion
++
++ /**
++ Non-linear echo subtraction factor applied during double talk and nearend-only.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>4.11</td>
++ <td>@ref LVNV_DNNS_NLATTEN_MIN (0)</td>
++ <td>@ref LVNV_DNNS_NLATTEN_DEFAULT (256)</td>
++ <td>@ref LVNV_DNNS_NLATTEN_MAX (2048)</td>
++ </tr>
++ </table> */
++ LVM_INT16 DNNS_NlAtten; ///< Non-linear echo subtraction factor
++
++ /**
++ Gain factor for stationary noise oversubtraction.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>2.13</td>
++ <td>@ref LVNV_DNNS_NOISEGAMMAS_MIN (0)</td>
++ <td>@ref LVNV_DNNS_NOISEGAMMAS_DEFAULT (11470)</td>
++ <td>@ref LVNV_DNNS_NOISEGAMMAS_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 DNNS_NoiseGammaS; ///< Stationary noise oversubtraction factor
++
++ /**
++ Gain factor for non-stationary noise oversubtraction.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>2.13</td>
++ <td>@ref LVNV_DNNS_NOISEGAMMAN_MIN (0)</td>
++ <td>@ref LVNV_DNNS_NOISEGAMMAN_DEFAULT (16384)</td>
++ <td>@ref LVNV_DNNS_NOISEGAMMAN_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 DNNS_NoiseGammaN; ///< Non-stationary noise oversubtraction factor
++
++ /**
++ The maximum amount of stationary noise suppression.<br>
++ DNNS_NoiseGainMinS = \f$2*32767*10^{MaxNoiseReductiondB/20}\f$
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>-1.16</td>
++ <td>@ref LVNV_DNNS_NOISEGAINMINS_MIN (0)</td>
++ <td>@ref LVNV_DNNS_NOISEGAINMINS_DEFAULT (11140)</td>
++ <td>@ref LVNV_DNNS_NOISEGAINMINS_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 DNNS_NoiseGainMinS; ///< Maximum stationary noise suppression.
++
++ /**
++ The maximum amount of non-stationary noise suppression.<br>
++ DNNS_NoiseGainMinN = \f$2*32767*10^{MaxNoiseReductiondB/20}\f$
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>-1.16</td>
++ <td>@ref LVNV_DNNS_NOISEGAINMINN_MIN (0)</td>
++ <td>@ref LVNV_DNNS_NOISEGAINMINN_DEFAULT (6554)</td>
++ <td>@ref LVNV_DNNS_NOISEGAINMINN_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 DNNS_NoiseGainMinN; ///< Maximum non-stationary noise suppression.
++
++ /**
++ Bias compensation factor for stationary noise estimation.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>2.13</td>
++ <td>@ref LVNV_DNNS_NOISEBIASCOMP_MIN (0)</td>
++ <td>@ref LVNV_DNNS_NOISEBIASCOMP_DEFAULT (9830)</td>
++ <td>@ref LVNV_DNNS_NOISEBIASCOMP_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 DNNS_NoiseBiasComp; ///< Bias compensation factor.
++
++ /**
++ Echo oversubtraction factor applied to the estimated non-stationary noise
++ floor.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>3.12</td>
++ <td>@ref LVNV_DNNS_GAINETA_MIN (0)</td>
++ <td>@ref LVNV_DNNS_GAINETA_DEFAULT (256)</td>
++ <td>@ref LVNV_DNNS_GAINETA_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 DNNS_GainEta; ///< Echo oversubtraction factor.
++
++ /**
++ Detection threshold for microphone activity.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>3.12</td>
++ <td>@ref LVNV_DNNS_ACTHRESHOLD_MIN (0)</td>
++ <td>@ref LVNV_DNNS_ACTHRESHOLD_DEFAULT (12288)</td>
++ <td>@ref LVNV_DNNS_ACTHRESHOLD_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 DNNS_AcThreshold; ///< Activity threshold.
++
++ /**
++ Detection threshold for activity within the beam of FSB.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>3.12</td>
++ <td>@ref LVNV_DNNS_WBTHRESHOLD_MIN (0)</td>
++ <td>@ref LVNV_DNNS_WBTHRESHOLD_DEFAULT (9216)</td>
++ <td>@ref LVNV_DNNS_WBTHRESHOLD_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 DNNS_WbThreshold; ///< WithinBeam threshold.
++
++ /**
++ Detection threshold for lost beam where the nearend speaker is speaking outside
++ the beam of the FSB.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>9.6</td>
++ <td>@ref LVNV_DNNS_LOSTBEAMTHRESHOLD_MIN (0)</td>
++ <td>@ref LVNV_DNNS_LOSTBEAMTHRESHOLD_DEFAULT (320)</td>
++ <td>@ref LVNV_DNNS_LOSTBEAMTHRESHOLD_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 DNNS_LostBeamThreshold; ///< Lost beam threshold.
++
++ /**
++ Smoothing factor applied to get a smoothed value of the inter-channel
++ correlation.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>9.6</td>
++ <td>@ref LVNV_PCD_BETA_MIN (0)</td>
++ <td>@ref LVNV_PCD_BETA_DEFAULT (230)</td>
++ <td>@ref LVNV_PCD_BETA_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 PCD_beta; ///< ICC smoothing factor.
++
++ /**
++ Detection threshold for broadside when the nearend speaker is not in end-fire
++ position with respect to the microphone configuration.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>9.6</td>
++ <td>@ref LVNV_PCD_THRESHOLD_MIN (0)</td>
++ <td>@ref LVNV_PCD_THRESHOLD_DEFAULT (26213)</td>
++ <td>@ref LVNV_PCD_THRESHOLD_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 PCD_Threshold; ///< Broadside detection threshold.
++
++} LVNV_ControlParams_st;
++
++/**
++* The control parameters are used to control the overall module behavior. These parameters may
++* be changed at any time during processing using the LVHF_SetControlParameters function but they
++* will not take effect until the next call to the LVHF_Process function.
++*
++* @see LVHF_SetControlParameters
++* @see LVHF_Process
++*/
++typedef struct
++{
++ /**
++ */
++ LVM_Mode_en OperatingMode; ///< Operating Mode
++
++ /**
++ The mode word to enable/disable internal algorithm blocks of HandsFree
++ */
++ LVHF_ModeWord_bm Mode; ///< Mode Word
++
++ /**
++ The tuning mode is used to enable/disable internal algorithm tuning
++ capabilities in the different blocks of HandsFree. Only one bit allowed to be
++ enabled at a time.
++ */
++ LVHF_TuningModeWord TuningMode; ///< Tuning Mode
++
++ /**
++ Gain applied at the Tx input of LVHF. Used to scale the microphone signal in
++ order to give the NLMS filter headroom for correct operation.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>2.13</td>
++ <td>@ref LVHF_INPUTGAIN_MIN (0)</td>
++ <td>@ref LVHF_INPUTGAIN_DEFAULT (8192)</td>
++ <td>@ref LVHF_INPUTGAIN_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 InputGain; ///< Input Gain
++
++ /**
++ Gain applied at the Tx output of LVHF. Compensates the applied InputGain in
++ order to preserve the overall Tx gain.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>4.11</td>
++ <td>@ref LVHF_OUTPUTGAIN_MIN (0)</td>
++ <td>@ref LVHF_OUTPUTGAIN_DEFAULT (2048)</td>
++ <td>@ref LVHF_OUTPUTGAIN_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 OutputGain; ///< Output Gain
++
++ /**
++ Limit the NLMS reference signal. Value in dB Full Scale.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>15.0</td>
++ <td>@ref LVHF_NLMS_LIMIT_MIN (-24)</td>
++ <td>@ref LVHF_NLMS_LIMIT_DEFAULT (0)</td>
++ <td>@ref LVHF_NLMS_LIMIT_MAX (0)</td>
++ </tr>
++ </table> */
++ LVM_INT16 NLMS_limit; ///< Limit the NLMS reference signal.
++
++ /**
++ Length of the low-band (0-4kHz) adaptive echo cancellation filter. The Length
++ should be chosen such that most of the energy of the impulse response is
++ covered by the filter. The length should be a multiple of 8.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>16.0</td>
++ <td>@ref LVHF_NLMS_LB_TAPS_MIN (16)</td>
++ <td>@ref LVHF_NLMS_LB_TAPS_DEFAULT (64)</td>
++ <td>@ref LVHF_NLMS_LB_TAPS_MAX (200)</td>
++ </tr>
++ </table> */
++ LVM_UINT16 NLMS_LB_taps; ///< Number of taps for LB NLMS.
++
++ /**
++ Step size for the update of the low-band (0-4kHz) adaptive filter coefficients.
++ It is recommended not to change the default value.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVHF_NLMS_LB_TWO_ALPHA_MIN (0)</td>
++ <td>@ref LVHF_NLMS_LB_TWO_ALPHA_DEFAULT (8192)</td>
++ <td>@ref LVHF_NLMS_LB_TWO_ALPHA_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 NLMS_LB_two_alpha; ///< Step Size of LB NLMS
++
++ /**
++ Adaptive step size control for the low-band (0-4kHz) adaptive echo cancellation
++ filter. This parameter is used to slow down the update speed of the adaptive
++ filter during double talk situations.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>9.6</td>
++ <td>@ref LVHF_NLMS_LB_ERL_MIN (64)</td>
++ <td>@ref LVHF_NLMS_LB_ERL_DEFAULT (128)</td>
++ <td>@ref LVHF_NLMS_LB_ERL_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 NLMS_LB_erl; ///< ERL of LB NLMS
++
++ /**
++ Length of the high-band (4-8kHz) adaptive echo cancellation filter. The Length
++ should be chosen such that most of the energy of the impulse response is
++ covered by the filter. The length should be a multiple of 8. In case of
++ narrowband processing, this parameter has no effect.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>16.0</td>
++ <td>@ref LVHF_NLMS_HB_TAPS_MIN (16)</td>
++ <td>@ref LVHF_NLMS_HB_TAPS_DEFAULT (64)</td>
++ <td>@ref LVHF_NLMS_HB_TAPS_MAX (136)</td>
++ </tr>
++ </table> */
++ LVM_UINT16 NLMS_HB_taps; ///< Number of taps for HB NLMS.
++
++ /**
++ Step size for the update of the high-band (4-8kHz) adaptive filter
++ coefficients. It is recommended not to change the default value. In case of
++ narrowband processing, this parameter has no effect.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVHF_NLMS_HB_TWO_ALPHA_MIN (0)</td>
++ <td>@ref LVHF_NLMS_HB_TWO_ALPHA_DEFAULT (8192)</td>
++ <td>@ref LVHF_NLMS_HB_TWO_ALPHA_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 NLMS_HB_two_alpha; ///< Step Size of HB NLMS
++
++ /**
++ Adaptive step size control for the high-band (4-8kHz) adaptive echo
++ cancellation filter. This parameter is used to slow down the update speed of
++ the adaptive filter during double talk situations. In case of narrowband
++ processing, this parameter has no effect.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>9.6</td>
++ <td>@ref LVHF_NLMS_HB_ERL_MIN (64)</td>
++ <td>@ref LVHF_NLMS_HB_ERL_DEFAULT (128)</td>
++ <td>@ref LVHF_NLMS_HB_ERL_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 NLMS_HB_erl; ///< ERL of HB NLMS
++
++ /**
++ Indicates whether a preset of adaptive filter coefficients should be done. <br>
++ 0 = No preset (Coefficients as they are)<br>
++ 1= Preset with internally calculated coefficients.<br>
++ 2= Preset with zero coefficients.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>15.0</td>
++ <td>@ref LVHF_NLMS_PRESET_COEFS_MIN (0)</td>
++ <td>@ref LVHF_NLMS_PRESET_COEFS_DEFAULT (1)</td>
++ <td>@ref LVHF_NLMS_PRESET_COEFS_MAX (2)</td>
++ </tr>
++ </table> */
++ LVM_INT16 NLMS_preset_coefs; ///< Coefficient preset.
++
++ /**
++ Offset added to the normalization of the adaptation of the filter.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVHF_NLMS_OFFSET_MIN (0)</td>
++ <td>@ref LVHF_NLMS_OFFSET_DEFAULT (767)</td>
++ <td>@ref LVHF_NLMS_OFFSET_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 NLMS_offset; ///< NLMS offset
++
++ /**
++ Parameter related to the reverberation of the acoustic environment. It
++ represents the decay in time of the energy of the echo tail of the impulse
++ response for the LB.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVHF_DENS_TAIL_ALPHA_LB_MIN (0)</td>
++ <td>@ref LVHF_DENS_TAIL_ALPHA_LB_DEFAULT (25395)</td>
++ <td>@ref LVHF_DENS_TAIL_ALPHA_LB_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 DENS_tail_alpha_LB;
++ /**
++ Parameter related to the portion of the echo tail that has to be extrapolated
++ in time for LB.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVHF_DENS_TAIL_PORTION_LB_MIN (0)</td>
++ <td>@ref LVHF_DENS_TAIL_PORTION_LB_DEFAULT (29491)</td>
++ <td>@ref LVHF_DENS_TAIL_PORTION_LB_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 DENS_tail_portion_LB;
++ /**
++ Echo subtraction factor applied during farend-only for the LB.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>7.8</td>
++ <td>@ref LVHF_DENS_GAMMA_E_HIGH_LB_MIN (0)</td>
++ <td>@ref LVHF_DENS_GAMMA_E_HIGH_LB_DEFAULT (512)</td>
++ <td>@ref LVHF_DENS_GAMMA_E_HIGH_LB_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 DENS_gamma_e_high_LB; ///< FE Echo subtraction LB
++
++ /**
++ Echo subtraction factor applied during double talk for the LB.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>7.8</td>
++ <td>@ref LVHF_DENS_GAMMA_E_DT_LB_MIN (0)</td>
++ <td>@ref LVHF_DENS_GAMMA_E_DT_LB_DEFAULT (256)</td>
++ <td>@ref LVHF_DENS_GAMMA_E_DT_LB_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 DENS_gamma_e_dt_LB; ///< DT Echo subtraction factor LB
++
++ /**
++ Echo subtraction factor applied during nearend-only for the LB.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>7.8</td>
++ <td>@ref LVHF_DENS_GAMMA_E_LOW_LB_MIN (0)</td>
++ <td>@ref LVHF_DENS_GAMMA_E_LOW_LB_DEFAULT (256)</td>
++ <td>@ref LVHF_DENS_GAMMA_E_LOW_LB_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 DENS_gamma_e_low_LB; ///< NE Echo subtraction factor LB
++
++ /**
++ The amount of extra non-linear suppression relative to the maximum linear echo
++ suppression for the LB. The use of these non-linear echo suppression mechanisms
++ should be avoided as much as possible since it affects the double talk
++ performance.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>4.11</td>
++ <td>@ref LVHF_DENS_NL_ATTEN_LB_MIN (0)</td>
++ <td>@ref LVHF_DENS_NL_ATTEN_LB_DEFAULT (0)</td>
++ <td>@ref LVHF_DENS_NL_ATTEN_LB_MAX (2048)</td>
++ </tr>
++ </table> */
++ LVM_INT16 DENS_NL_atten_LB; ///< LB Non linear attenuation
++
++ /**
++ Parameter related to the reverberation of the acoustic environment. It
++ represents the decay in time of the energy of the echo tail of the impulse
++ response for the HB.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVHF_DENS_TAIL_ALPHA_HB_MIN (0)</td>
++ <td>@ref LVHF_DENS_TAIL_ALPHA_HB_DEFAULT (25395)</td>
++ <td>@ref LVHF_DENS_TAIL_ALPHA_HB_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 DENS_tail_alpha_HB;
++ /**
++ Parameter related to the portion of the echo tail that has to be extrapolated
++ in time for HB.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVHF_DENS_TAIL_PORTION_HB_MIN (0)</td>
++ <td>@ref LVHF_DENS_TAIL_PORTION_HB_DEFAULT (29491)</td>
++ <td>@ref LVHF_DENS_TAIL_PORTION_HB_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 DENS_tail_portion_HB;
++ /**
++ Echo subtraction factor applied during farend-only for the HB.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>7.8</td>
++ <td>@ref LVHF_DENS_GAMMA_E_HIGH_HB_MIN (0)</td>
++ <td>@ref LVHF_DENS_GAMMA_E_HIGH_HB_DEFAULT (512)</td>
++ <td>@ref LVHF_DENS_GAMMA_E_HIGH_HB_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 DENS_gamma_e_high_HB; ///< FE Echo subtraction HB
++
++ /**
++ Echo subtraction factor applied during double talk for the HB.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>7.8</td>
++ <td>@ref LVHF_DENS_GAMMA_E_DT_HB_MIN (0)</td>
++ <td>@ref LVHF_DENS_GAMMA_E_DT_HB_DEFAULT (256)</td>
++ <td>@ref LVHF_DENS_GAMMA_E_DT_HB_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 DENS_gamma_e_dt_HB; ///< DT Echo subtraction factor HB
++
++ /**
++ Echo subtraction factor applied during nearend-only for the HB.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>7.8</td>
++ <td>@ref LVHF_DENS_GAMMA_E_LOW_HB_MIN (0)</td>
++ <td>@ref LVHF_DENS_GAMMA_E_LOW_HB_DEFAULT (256)</td>
++ <td>@ref LVHF_DENS_GAMMA_E_LOW_HB_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 DENS_gamma_e_low_HB; ///< NE Echo subtraction factor HB
++
++ /**
++ The amount of extra non-linear suppression relative to the maximum linear echo
++ suppression. for the HB. The use of these non-linear echo suppression
++ mechanisms should be avoided as much as possible since it affects the double
++ talk performance.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>4.11</td>
++ <td>@ref LVHF_DENS_NL_ATTEN_HB_MIN (0)</td>
++ <td>@ref LVHF_DENS_NL_ATTEN_HB_DEFAULT (0)</td>
++ <td>@ref LVHF_DENS_NL_ATTEN_HB_MAX (2048)</td>
++ </tr>
++ </table> */
++ LVM_INT16 DENS_NL_atten_HB; ///< NE Echo subtraction factor HB
++
++ /**
++ Smoothing factor applied when switching between gamma_e values.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVHF_DENS_GAMMA_E_ALPHA_MIN (0)</td>
++ <td>@ref LVHF_DENS_GAMMA_E_ALPHA_DEFAULT (24000)</td>
++ <td>@ref LVHF_DENS_GAMMA_E_ALPHA_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 DENS_gamma_e_alpha; ///< Smoothing factor for gamma_e
++
++ /**
++ Gain factor for Noise subtraction.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>7.8</td>
++ <td>@ref LVHF_DENS_GAMMA_N_MIN (0)</td>
++ <td>@ref LVHF_DENS_GAMMA_N_DEFAULT (280)</td>
++ <td>@ref LVHF_DENS_GAMMA_N_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 DENS_gamma_n; ///< Gain factor
++
++ /**
++ Threshold for nearend activity detection.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>7.8</td>
++ <td>@ref LVHF_DENS_SPDET_NEAR_MIN (0)</td>
++ <td>@ref LVHF_DENS_SPDET_NEAR_DEFAULT (512)</td>
++ <td>@ref LVHF_DENS_SPDET_NEAR_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 DENS_spdet_near;
++ /**
++ Threshold for microphone activity detection.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>7.8</td>
++ <td>@ref LVHF_DENS_SPDET_ACT_MIN (0)</td>
++ <td>@ref LVHF_DENS_SPDET_ACT_DEFAULT (768)</td>
++ <td>@ref LVHF_DENS_SPDET_ACT_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 DENS_spdet_act;
++ /**
++ The maximum amount of noise suppression. <br>
++ DENS_limit_ns = \f$32767*10^{-MaxNoiseReduction[dB]/20}\f$
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVHF_DENS_LIMIT_NS_MIN (0)</td>
++ <td>@ref LVHF_DENS_LIMIT_NS_DEFAULT (10361)</td>
++ <td>@ref LVHF_DENS_LIMIT_NS_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 DENS_limit_ns; ///< Maximum noise suppression.
++
++ /**
++ The amount of comfort noise insertion.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>1.14</td>
++ <td>@ref LVHF_DENS_CNI_GAIN_MIN (0)</td>
++ <td>@ref LVHF_DENS_CNI_GAIN_DEFAULT (16384)</td>
++ <td>@ref LVHF_DENS_CNI_GAIN_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 DENS_CNI_Gain; ///< CNI gain
++
++ /**
++ The window length (expressed in integer multiples of 10ms) for the estimation
++ of the noise components. It is recommended to keep this parameter at its
++ default value.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVHF_DENS_NFE_BLOCKSIZE_MIN (0)</td>
++ <td>@ref LVHF_DENS_NFE_BLOCKSIZE_DEFAULT (150)</td>
++ <td>@ref LVHF_DENS_NFE_BLOCKSIZE_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 DENS_NFE_blocksize; ///< NFE blocksize
++
++ /**
++ Threshold for farend activity detection.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVHF_SPDET_FAR_MIN (0)</td>
++ <td>@ref LVHF_SPDET_FAR_DEFAULT (16384)</td>
++ <td>@ref LVHF_SPDET_FAR_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 SPDET_far;
++ /**
++ Threshold for microphone activity detection.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVHF_SPDET_MIC_MIN (0)</td>
++ <td>@ref LVHF_SPDET_MIC_DEFAULT (16384)</td>
++ <td>@ref LVHF_SPDET_MIC_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 SPDET_mic;
++ /**
++ Threshold to activate the non-linear echo-suppression.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVHF_SPDET_X_CLIP_MIN (0)</td>
++ <td>@ref LVHF_SPDET_X_CLIP_DEFAULT (0)</td>
++ <td>@ref LVHF_SPDET_X_CLIP_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 SPDET_x_clip;
++ /**
++ Threshold to detect acoustical path changes.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>0.15</td>
++ <td>@ref LVHF_PCD_THRESHOLD_MIN (0)</td>
++ <td>@ref LVHF_PCD_THRESHOLD_DEFAULT (20000)</td>
++ <td>@ref LVHF_PCD_THRESHOLD_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 PCD_threshold; ///< PCD threshold
++
++ /**
++ Length of the background adaptive filter. The length should be chosen such that
++ only the main peak of the impulse response is covered by the filter. The length
++ should be a multiple of 8.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>16.0</td>
++ <td>@ref LVHF_PCD_TAPS_MIN (16)</td>
++ <td>@ref LVHF_PCD_TAPS_DEFAULT (16)</td>
++ <td>@ref LVHF_PCD_TAPS_MAX (64)</td>
++ </tr>
++ </table> */
++ LVM_INT16 PCD_taps; ///< Number of taps of background NLMS.
++
++ /**
++ Adaptive step size control for the background adaptive filter.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>9.6</td>
++ <td>@ref LVHF_PCD_ERL_MIN (64)</td>
++ <td>@ref LVHF_PCD_ERL_DEFAULT (64)</td>
++ <td>@ref LVHF_PCD_ERL_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 PCD_erl; ///< Step size of background NLMS.
++
++ /**
++ If a path change is detected, NLMS_erl of the NLMS is set to this value, to
++ ensure a fast adapting filter.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>9.6</td>
++ <td>@ref LVHF_PCD_MINIMUM_ERL_MIN (64)</td>
++ <td>@ref LVHF_PCD_MINIMUM_ERL_DEFAULT (64)</td>
++ <td>@ref LVHF_PCD_MINIMUM_ERL_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 PCD_minimum_erl; ///< Step size of NLMS after PCD.
++
++ /**
++ After a path change the NLMS_erl of the NLMS increases back to the nominal
++ value. The speed to increase can be controlled by this parameter.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>1.14</td>
++ <td>@ref LVHF_PCD_ERL_STEP_MIN (16384)</td>
++ <td>@ref LVHF_PCD_ERL_STEP_DEFAULT (16800)</td>
++ <td>@ref LVHF_PCD_ERL_STEP_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 PCD_erl_step; ///< Step of ERL increase after PCD.
++
++ /**
++ Gain factor applied to the echo subtraction during acoustical path change.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>7.8</td>
++ <td>@ref LVHF_PCD_GAMMA_E_RESCUE_MIN (0)</td>
++ <td>@ref LVHF_PCD_GAMMA_E_RESCUE_DEFAULT (5000)</td>
++ <td>@ref LVHF_PCD_GAMMA_E_RESCUE_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 PCD_gamma_e_rescue; ///< gamma_e after PCD
++
++} LVHF_ControlParams_st;
++
++/**
++* The control parameters are used to control the overall module behavior. These parameters may
++* be changed at any time during processing using the LVBD_SetControlParameters function but they
++* will not take effect until the next call to the LVBD_Process function.
++*
++* @see LVBD_SetControlParameters
++* @see LVBD_Process
++*/
++typedef struct
++{
++ /**
++ Set Bulk Delay operating mode on/off.
++ */
++ LVM_Mode_en BD_OperatingMode; ///< Set Bulk Delay operating mode on/off
++
++ /**
++ This parameter compensates for the fixed delay in the echo path and can be
++ measured in advance. This delay is caused by the audio I/O buffering, AD/DA
++ converter and propagation time between the loudspeaker and microphone. The unit
++ of 'BulkDelay' is [number of samples] at the respective sampling rate.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>16.0</td>
++ <td>@ref LVBD_BULKDELAY_MIN (0)</td>
++ <td>@ref LVBD_BULKDELAY_DEFAULT (0)</td>
++ <td>@ref LVBD_BULKDELAY_MAX (6400)</td>
++ </tr>
++ </table> */
++ LVM_UINT16 BulkDelay; ///< Sets Bulk Delay
++
++ /**
++ This param sets the gain for the Echo reference signal. Value 8192 belong to
++ 0dB
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>2.13</td>
++ <td>@ref LVBD_BD_GAIN_MIN (0)</td>
++ <td>@ref LVBD_BD_GAIN_DEFAULT (8192)</td>
++ <td>@ref LVBD_BD_GAIN_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 BD_Gain; ///< Apply Gain to Echo reference signal
++
++} LVBD_ControlParams_st;
++
++/**
++* The control parameters are used to control the overall module behavior. These parameters may
++* be changed at any time during processing using the LVVE_Tx_SetControlParameters function but they
++* will not take effect until the next call to the LVVE_Tx_Process function.
++*
++* @see LVVE_Tx_SetControlParameters
++* @see LVVE_Tx_Process
++*/
++typedef struct
++{
++ /**
++ This enumerated type is used to set the operating mode of the Tx path. The
++ processing can be separately set to enable all processing modules (i.e., ON),
++ to disable all processing modules (i.e., OFF) or to bypass all processing
++ modules (i.e., BYPASS). When bypassed, all processing modules keep on running,
++ but their output is not used. When bypassing the Tx processing, the user can
++ select which buffer should be copied to the output buffer, if required: @li
++ Input microphone signal (or secondary microphone signal in case of
++ two-microphone setups); @li Rx reference signal; These operations ensure that
++ the input data is correctly transferred to the output buffer for all
++ combinations of input and output buffer types and input format. When OFF, the
++ input is copied to the output and the LVVE can be provided with invalid
++ parameters for modules. The sub module functions are not executed in this
++ scenario. Their combined functionality is summarized in follwoing table. <br>
++ <div align="center"> <table cellspacing="1" cellpadding="4" border="3">
++ <caption>LVVE Tx operating mode in combination with LVVE microphone routing
++ mode</caption> <tr> <th></th> <th colspan="2">MICROUTING_MODE_DEFAULT</th> <th
++ colspan="2">MICROUTING_MODE_SWAPPED</th> </tr> <tr> <th width="70"></th> <th
++ width="70">Process</th> <th width="70">Output</th> <th width="70">Process</th>
++ <th width="70">Output</th> </tr> <tr align="left"> <td>LVVE_TX_MODE_OFF</td>
++ <td>None</td> <td>Tx input 0</td> <td>None</td> <td>Tx input 1</td> </tr> <tr
++ align="left"> <td>LVVE_TX_MODE_ON</td> <td>Tx input 0</td> <td>Tx output</td>
++ <td>Tx input 1</td> <td>Tx output</td> </tr> <tr align="left">
++ <td>LVVE_TX_MODE_BYPASS_MIC0</td> <td>Tx input 0</td> <td>Tx input 0</td>
++ <td>Tx input 1</td> <td>Tx input 1</td> </tr> <tr align="left">
++ <td>LVVE_TX_MODE_BYPASS_MIC1</td> <td>Tx input 0</td> <td>Tx input 1</td>
++ <td>Tx input 1</td> <td>Tx input 0</td> </tr> <tr align="left">
++ <td>LVVE_TX_MODE_BYPASS_REF</td> <td>Tx input 0</td> <td>Tx ref input</td>
++ <td>Tx input 1</td> <td>Tx ref input</td> </tr> </table> </div>
++ */
++ LVVE_Tx_Mode_en OperatingMode; ///< TX Operating mode
++
++ /**
++ This param can mute unmute the Rx/Tx engine output.
++ */
++ LVM_Mode_en Mute; ///< This param can mute unmute the Rx/Tx engine output
++
++ /**
++ Set Bulk Delay operating mode on/off.
++ */
++ LVM_Mode_en BD_OperatingMode; ///< Set Bulk Delay operating mode on/off
++
++ /**
++ This parameter compensates for the fixed delay in the echo path and can be
++ measured in advance. This delay is caused by the audio I/O buffering, AD/DA
++ converter and propagation time between the loudspeaker and microphone. The unit
++ of 'BulkDelay' is [number of samples] at the respective sampling rate.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>16.0</td>
++ <td>@ref LVVE_TX_BULKDELAY_MIN (0)</td>
++ <td>@ref LVVE_TX_BULKDELAY_DEFAULT (0)</td>
++ <td>@ref LVVE_TX_BULKDELAY_MAX (6400)</td>
++ </tr>
++ </table> */
++ LVM_UINT16 BulkDelay; ///< Sets Bulk Delay
++
++ /**
++ This param sets the gain for the Echo reference signal. Value 8192 belong to
++ 0dB
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>2.13</td>
++ <td>@ref LVVE_TX_BD_GAIN_MIN (0)</td>
++ <td>@ref LVVE_TX_BD_GAIN_DEFAULT (8192)</td>
++ <td>@ref LVVE_TX_BD_GAIN_MAX (32767)</td>
++ </tr>
++ </table> */
++ LVM_INT16 BD_Gain; ///< Apply Gain to Echo reference signal
++
++ /**
++ Turns on/off VOL_Gain.
++ */
++ LVM_Mode_en VOL_OperatingMode; ///< Turns on/off VOL_Gain
++
++ /**
++ The volume control gain can be used to set the overall volume level of the
++ signal. The gain is set in dB with steps of 1dB.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>15.0</td>
++ <td>@ref LVVE_TX_VOL_GAIN_MIN (-96)</td>
++ <td>@ref LVVE_TX_VOL_GAIN_DEFAULT (0)</td>
++ <td>@ref LVVE_TX_VOL_GAIN_MAX (24)</td>
++ </tr>
++ </table> */
++ LVM_INT16 VOL_Gain; ///< Apply Gain to Input signal
++
++ /**
++ Turns on/off High Pass filter.
++ */
++ LVM_Mode_en HPF_OperatingMode; ///< Turns on/off High Pass filter
++
++ /**
++ Sets the 3dB corner frequency of the high-pass filter. In case NoiseVoid is
++ enabled, the same high-pass filter will be applied to the second microphone
++ channel.
++ <table border>
++ <tr>
++ <td><b>Q-format</b></td>
++ <td><b>Min</b></td>
++ <td><b>Default</b></td>
++ <td><b>Max</b></td>
++ </tr>
++ <tr>
++ <td>16.0</td>
++ <td>@ref LVVE_TX_MIC_HPF_CORNERFREQ_MIN (50)</td>
++ <td>@ref LVVE_TX_MIC_HPF_CORNERFREQ_DEFAULT (50)</td>
++ <td>@ref LVVE_TX_MIC_HPF_CORNERFREQ_MAX (1500)</td>
++ </tr>
++ </table> */
++ LVM_UINT16 MIC_HPF_CornerFreq; ///< High Pass Filter Corner Frequency in Hz
++
++ /**
++ HandsFree Control Parameter Strcuture.
++ */
++ LVHF_ControlParams_st HF_ControlParams; ///< HandsFree Control Parameter Structure
++
++ /**
++ NoiseVoid Control Parameter Structure.
++ */
++ LVNV_ControlParams_st NV_ControlParams; ///< NoiseVoid Control Parameter Structure
++
++ /**
++ Equalizer Operating mode.
++ */
++ LVM_Mode_en EQ_OperatingMode; ///< Equalizer Operating mode
++
++ /**
++ Equalizer Control Parameter Structure.
++ */
++ LVEQ_ControlParams_st EQ_ControlParams; ///< Equalizer Control Parameters Structure
++
++ /**
++ DRC Control Parameter Structure.
++ */
++ LVDRC_ControlParams_st DRC_ControlParams; ///< DRC Control Parameter Structure
++
++} LVVE_Tx_ControlParams_st;
++
++//adb by xuxinqiang 20150519
++#define LVVE_MAX_EQ_LENGTH_NB 32 /* Maximum equaliser length for narrowband configuration */
++#define LVVE_MAX_EQ_LENGTH_WB 64 /* Maximum equaliser length for wideband configuration */
++/*[Begin] [lvwenhua-2013/10/21]*/
++typedef struct
++{
++ LVM_INT16 EqCoefs[LVVE_MAX_EQ_LENGTH_NB];
++} LVEQ_Coefs_st;
++/*[End] [lvwenhua-2013/10/21]*/
++/*[Begin] [lvwenhua-2012/3/12]*/
++#define LVVC_VOLUME_NUM 12
++
++typedef struct
++{
++ LVM_INT16 NoiseSensitivity[LVVC_VOLUME_NUM];
++} LVVC_NoiseSens_st;
++/*[End] [lvwenhua-2012/3/12]*/
++
++/*[Begin] [lvwenhua-2011/8/23]*/
++typedef struct
++{
++ LVVE_Tx_ControlParams_st Tx_ControlParams;
++ LVVE_Rx_ControlParams_st Rx_ControlParams;
++ LVEQ_Coefs_st TxEqCoefs;
++ LVEQ_Coefs_st RxEqCoefs;
++ /*[Begin] [lvwenhua-2012/3/12]*/
++ LVVC_NoiseSens_st RxVcNoiseSens;
++ /*[End] [lvwenhua-2012/3/12]*/
++} LVVE_ControlParams_st;
++typedef struct
++{
++ LVM_UINT32 isVpParamInNv;
++ LVVE_ControlParams_st Handset_ControlParams;
++ LVVE_ControlParams_st Handsfree_ControlParams;
++ LVVE_ControlParams_st Headset_ControlParams;
++ LVVE_ControlParams_st Bluetooth_ControlParams;
++} LVVE_ControlParams_All_st;
++/*[End] [lvwenhua-2011/8/23]*/
++
++
++
++#ifdef __cplusplus
++}
++#endif /* __cplusplus */
++
++#endif /* __REL_LVVE_HF_NV1_VC_AGC_RX_DRC_RX_VIDPP_H__ */
++
++/* End of file */
+diff --git a/Uboot/cp/ps/driver/src/chipsets/src/audio_base/nxp/uclinux/PARAM_Default.h b/Uboot/cp/ps/driver/src/chipsets/src/audio_base/nxp/uclinux/PARAM_Default.h
+new file mode 100755
+index 0000000..0153e82
+--- /dev/null
++++ b/Uboot/cp/ps/driver/src/chipsets/src/audio_base/nxp/uclinux/PARAM_Default.h
+@@ -0,0 +1,178 @@
++static LVM_CHAR LVVE_Tx_Preset_Buffer_Voice_Tool[] ={
++0x03, 0x00, 0x09, 0x18, 0x03, 0xD5, 0x07, 0x00, 0x00, 0xB5, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00,
++0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x11, 0x00, 0x00, 0x00,
++0x20, 0x00, 0x08, 0x00, 0x00, 0x40, 0x00, 0x00, 0x20, 0x80, 0x00, 0x40, 0x00, 0x00, 0x20, 0x80,
++0x00, 0x01, 0x00, 0xFF, 0x02, 0x33, 0x63, 0x33, 0x73, 0x00, 0x02, 0x00, 0x01, 0x00, 0x01, 0x00,
++0x00, 0x33, 0x63, 0x33, 0x73, 0x00, 0x02, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0xC0, 0x5D, 0x18,
++0x01, 0x00, 0x02, 0x00, 0x03, 0x79, 0x28, 0x00, 0x40, 0x96, 0x00, 0x00, 0x40, 0x00, 0x40, 0x00,
++0x00, 0x20, 0x4E, 0x10, 0x00, 0x40, 0x00, 0x40, 0x00, 0xA0, 0x41, 0x88, 0x13, 0x00, 0x00, 0x00,
++0x00, 0xF7, 0x49, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x20, 0x00, 0x08, 0x20, 0x00, 0x00,
++0x20, 0xE8, 0x03, 0x18, 0x00, 0x00, 0x20, 0xE8, 0x03, 0x00, 0x00, 0x08, 0x03, 0x20, 0x00, 0x00,
++0x20, 0xE8, 0x03, 0x18, 0x00, 0x00, 0x20, 0xE8, 0x03, 0x00, 0x00, 0x08, 0x03, 0x96, 0x00, 0xFF,
++0x7F, 0x9A, 0x19, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x10, 0x00, 0x8F, 0x02, 0x00, 0x04, 0x10, 0x00, 0x66, 0x06, 0x00, 0x01, 0x66,
++0x06, 0x00, 0x40, 0x00, 0x20, 0xE0, 0x2E, 0x58, 0x1B, 0x00, 0x01, 0xCE, 0x2C, 0x00, 0x40, 0x84,
++0x2B, 0x9A, 0x19, 0x66, 0x26, 0x00, 0x01, 0x00, 0x30, 0x00, 0x24, 0x40, 0x01, 0xE6, 0x00, 0x65,
++0x66, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0xA0, 0xFF, 0xBA,
++0xFF, 0xCE, 0xFF, 0xE8, 0xFF, 0x00, 0x00, 0xA0, 0xFF, 0xBA, 0xFF, 0xDA, 0xFF, 0xF4, 0xFF, 0x00,
++0x00, 0x32, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
++};
++static LVM_CHAR LVVE_Rx_Preset_Buffer_Voice_Tool []={
++0x03, 0x00, 0x09, 0x18, 0x03, 0xD5, 0x07, 0x00, 0x00, 0xB5, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x2A, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06,
++0x05, 0x20, 0x4E, 0x00, 0x40, 0x00, 0x01, 0x00, 0x20, 0x00, 0x02, 0x17, 0x2F, 0x5C, 0x7F, 0xB9,
++0x7E, 0x82, 0x5A, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05,
++0x00, 0xA0, 0xFF, 0xBA, 0xFF, 0xCE, 0xFF, 0xE8, 0xFF, 0x00, 0x00, 0xA0, 0xFF, 0xBA, 0xFF, 0xDA,
++0xFF, 0xF4, 0xFF, 0x00, 0x00, 0x32, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x40, 0x80, 0x00, 0xFD,
++0x1F, 0xB0, 0x63, 0xAD, 0x7F, 0x9D, 0x5A, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0xB0,
++0xFF, 0xBA, 0xFF, 0xCE, 0xFF, 0xE8, 0xFF, 0x00, 0x00, 0xA0, 0xFF, 0xB0, 0xFF, 0xCE, 0xFF, 0xE8,
++0xFF, 0x00, 0x00, 0x32, 0x00, 0x32, 0x00, 0x03, 0x00, 0x09, 0x18, 0x03, 0xD5, 0x07, 0x00, 0x00,
++0xB5, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0xE0, 0x2A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x05, 0x20, 0x4E, 0x00, 0x40, 0x00, 0x01, 0x00, 0x20,
++0x00, 0x02, 0x17, 0x2F, 0x5C, 0x7F, 0xB9, 0x7E, 0x82, 0x5A, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00,
++0x20, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0xA0, 0xFF, 0xBA, 0xFF, 0xCE, 0xFF, 0xE8, 0xFF,
++0x00, 0x00, 0xA0, 0xFF, 0xBA, 0xFF, 0xDA, 0xFF, 0xF4, 0xFF, 0x00, 0x00, 0x32, 0x00, 0x32, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x07, 0x00, 0x00, 0x40, 0x80, 0x00, 0xFD, 0x1F, 0xB0, 0x63, 0xAD, 0x7F, 0x9D, 0x5A, 0x00, 0x24,
++0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0xB0, 0xFF, 0xBA, 0xFF, 0xCE, 0xFF, 0xE8, 0xFF, 0x00, 0x00,
++0xA0, 0xFF, 0xB0, 0xFF, 0xCE, 0xFF, 0xE8, 0xFF, 0x00, 0x00, 0x32, 0x00, 0x32, 0x00, 0x03, 0x00,
++0x09, 0x18, 0x03, 0xD5, 0x07, 0x00, 0x00, 0xB5, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x2A, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x05, 0x20,
++0x4E, 0x00, 0x40, 0x00, 0x01, 0x00, 0x20, 0x00, 0x02, 0x17, 0x2F, 0x5C, 0x7F, 0xB9, 0x7E, 0x82,
++0x5A, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0xA0,
++0xFF, 0xBA, 0xFF, 0xCE, 0xFF, 0xE8, 0xFF, 0x00, 0x00, 0xA0, 0xFF, 0xBA, 0xFF, 0xDA, 0xFF, 0xF4,
++0xFF, 0x00, 0x00, 0x32, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x40, 0x80, 0x00, 0xFD, 0x1F, 0xB0,
++0x63, 0xAD, 0x7F, 0x9D, 0x5A, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0xB0, 0xFF, 0xBA,
++0xFF, 0xCE, 0xFF, 0xE8, 0xFF, 0x00, 0x00, 0xA0, 0xFF, 0xB0, 0xFF, 0xCE, 0xFF, 0xE8, 0xFF, 0x00,
++0x00, 0x32, 0x00, 0x32, 0x00, 0x03, 0x00, 0x09, 0x18, 0x03, 0xD5, 0x07, 0x00, 0x00, 0xB5, 0x02,
++0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x06,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0xE0, 0x2A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x06, 0x05, 0x20, 0x4E, 0x00, 0x40, 0x00, 0x01, 0x00, 0x20, 0x00, 0x02,
++0x17, 0x2F, 0x5C, 0x7F, 0xB9, 0x7E, 0x82, 0x5A, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00,
++0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0xA0, 0xFF, 0xBA, 0xFF, 0xCE, 0xFF, 0xE8, 0xFF, 0x00, 0x00,
++0xA0, 0xFF, 0xBA, 0xFF, 0xDA, 0xFF, 0xF4, 0xFF, 0x00, 0x00, 0x32, 0x00, 0x32, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00,
++0x00, 0x40, 0x80, 0x00, 0xFD, 0x1F, 0xB0, 0x63, 0xAD, 0x7F, 0x9D, 0x5A, 0x00, 0x24, 0x00, 0x00,
++0x00, 0x00, 0x05, 0x00, 0xB0, 0xFF, 0xBA, 0xFF, 0xCE, 0xFF, 0xE8, 0xFF, 0x00, 0x00, 0xA0, 0xFF,
++0xB0, 0xFF, 0xCE, 0xFF, 0xE8, 0xFF, 0x00, 0x00, 0x32, 0x00, 0x32, 0x00, 0x03, 0x00, 0x09, 0x18,
++0x03, 0xD5, 0x07, 0x00, 0x00, 0xB5, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x2A, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x05, 0x20, 0x4E, 0x00,
++0x40, 0x00, 0x01, 0x00, 0x20, 0x00, 0x02, 0x17, 0x2F, 0x5C, 0x7F, 0xB9, 0x7E, 0x82, 0x5A, 0x00,
++0x04, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0xA0, 0xFF, 0xBA,
++0xFF, 0xCE, 0xFF, 0xE8, 0xFF, 0x00, 0x00, 0xA0, 0xFF, 0xBA, 0xFF, 0xDA, 0xFF, 0xF4, 0xFF, 0x00,
++0x00, 0x32, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x40, 0x80, 0x00, 0xFD, 0x1F, 0xB0, 0x63, 0xAD,
++0x7F, 0x9D, 0x5A, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0xB0, 0xFF, 0xBA, 0xFF, 0xCE,
++0xFF, 0xE8, 0xFF, 0x00, 0x00, 0xA0, 0xFF, 0xB0, 0xFF, 0xCE, 0xFF, 0xE8, 0xFF, 0x00, 0x00, 0x32,
++0x00, 0x32, 0x00, 0x03, 0x00, 0x09, 0x18, 0x03, 0xD5, 0x07, 0x00, 0x00, 0xB5, 0x02, 0x00, 0x00,
++0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x06, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0xE0, 0x2A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x06, 0x05, 0x20, 0x4E, 0x00, 0x40, 0x00, 0x01, 0x00, 0x20, 0x00, 0x02, 0x17, 0x2F,
++0x5C, 0x7F, 0xB9, 0x7E, 0x82, 0x5A, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x10,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x05, 0x00, 0xA0, 0xFF, 0xBA, 0xFF, 0xCE, 0xFF, 0xE8, 0xFF, 0x00, 0x00, 0xA0, 0xFF,
++0xBA, 0xFF, 0xDA, 0xFF, 0xF4, 0xFF, 0x00, 0x00, 0x32, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x40,
++0x80, 0x00, 0xFD, 0x1F, 0xB0, 0x63, 0xAD, 0x7F, 0x9D, 0x5A, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00,
++0x05, 0x00, 0xB0, 0xFF, 0xBA, 0xFF, 0xCE, 0xFF, 0xE8, 0xFF, 0x00, 0x00, 0xA0, 0xFF, 0xB0, 0xFF,
++0xCE, 0xFF, 0xE8, 0xFF, 0x00, 0x00, 0x32, 0x00, 0x32, 0x00
++};
++const static LVM_CHAR LVVE_Tx_Mute_File_Buffer[] ={
++0x03, 0x00, 0x09, 0x18, 0x03, 0xD5, 0x07, 0x00, 0x00, 0xB5, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00,
++0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x11, 0x00, 0x00, 0x00,
++0x20, 0x00, 0x08, 0x00, 0x00, 0x40, 0x00, 0x00, 0x20, 0x80, 0x00, 0x40, 0x00, 0x00, 0x20, 0x80,
++0x00, 0x01, 0x00, 0xFF, 0x02, 0x33, 0x63, 0x33, 0x73, 0x00, 0x02, 0x00, 0x01, 0x00, 0x01, 0x00,
++0x00, 0x33, 0x63, 0x33, 0x73, 0x00, 0x02, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0xC0, 0x5D, 0x18,
++0x01, 0x00, 0x02, 0x00, 0x03, 0x79, 0x28, 0x00, 0x40, 0x96, 0x00, 0x00, 0x40, 0x00, 0x40, 0x00,
++0x00, 0x20, 0x4E, 0x10, 0x00, 0x40, 0x00, 0x40, 0x00, 0xA0, 0x41, 0x88, 0x13, 0x00, 0x00, 0x00,
++0x00, 0xF7, 0x49, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x20, 0x00, 0x08, 0x20, 0x00, 0x00,
++0x20, 0xE8, 0x03, 0x18, 0x00, 0x00, 0x20, 0xE8, 0x03, 0x00, 0x00, 0x08, 0x03, 0x20, 0x00, 0x00,
++0x20, 0xE8, 0x03, 0x18, 0x00, 0x00, 0x20, 0xE8, 0x03, 0x00, 0x00, 0x08, 0x03, 0x96, 0x00, 0xFF,
++0x7F, 0x9A, 0x19, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x10, 0x00, 0x8F, 0x02, 0x00, 0x04, 0x10, 0x00, 0x66, 0x06, 0x00, 0x01, 0x66,
++0x06, 0x00, 0x40, 0x00, 0x20, 0xE0, 0x2E, 0x58, 0x1B, 0x00, 0x01, 0xCE, 0x2C, 0x00, 0x40, 0x84,
++0x2B, 0x9A, 0x19, 0x66, 0x26, 0x00, 0x01, 0x00, 0x30, 0x00, 0x24, 0x40, 0x01, 0xE6, 0x00, 0x65,
++0x66, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0xA0, 0xFF, 0xBA,
++0xFF, 0xCE, 0xFF, 0xE8, 0xFF, 0x00, 0x00, 0xA0, 0xFF, 0xBA, 0xFF, 0xDA, 0xFF, 0xF4, 0xFF, 0x00,
++0x00, 0x32, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
++};
++const static LVM_CHAR LVVE_Tx_Wb_Mute_File_Buffer[] ={
++0x03, 0x00, 0x09, 0x18, 0x03, 0xD5, 0x07, 0x00, 0x00, 0xBD, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00,
++0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x11, 0x00, 0x00, 0x00,
++0x20, 0x00, 0x08, 0x00, 0x00, 0x40, 0x00, 0x00, 0x20, 0x80, 0x00, 0x40, 0x00, 0x00, 0x20, 0x80,
++0x00, 0x01, 0x00, 0xFF, 0x02, 0x33, 0x63, 0x33, 0x73, 0x00, 0x02, 0x00, 0x01, 0x00, 0x01, 0x00,
++0x00, 0x33, 0x63, 0x33, 0x73, 0x00, 0x02, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0xC0, 0x5D, 0x18,
++0x01, 0x00, 0x02, 0x00, 0x03, 0x79, 0x28, 0x00, 0x40, 0x96, 0x00, 0x00, 0x40, 0x00, 0x40, 0x00,
++0x00, 0x20, 0x4E, 0x10, 0x00, 0x40, 0x00, 0x40, 0x00, 0xA0, 0x41, 0x88, 0x13, 0x00, 0x00, 0x00,
++0x00, 0xF7, 0x49, 0x0E, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x20, 0x00, 0x08, 0x20, 0x00, 0x00,
++0x20, 0xE8, 0x03, 0x18, 0x00, 0x00, 0x20, 0xE8, 0x03, 0x00, 0x00, 0x08, 0x03, 0x20, 0x00, 0x00,
++0x20, 0xE8, 0x03, 0x18, 0x00, 0x00, 0x20, 0xE8, 0x03, 0x00, 0x00, 0x08, 0x03, 0x96, 0x00, 0xFF,
++0x7F, 0x9A, 0x19, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x10, 0x00, 0x8F, 0x02, 0x00, 0x04, 0x10, 0x00, 0x66, 0x06, 0x00, 0x01, 0x66,
++0x06, 0x00, 0x40, 0x00, 0x20, 0xE0, 0x2E, 0x58, 0x1B, 0x00, 0x01, 0xCE, 0x2C, 0x00, 0x40, 0x84,
++0x2B, 0x9A, 0x19, 0x66, 0x26, 0x00, 0x01, 0x00, 0x30, 0x00, 0x24, 0x40, 0x01, 0xE6, 0x00, 0x65,
++0x66, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x40, 0x80, 0x00, 0xFD, 0x1F, 0xB0, 0x63, 0xAD,
++0x7F, 0x9D, 0x5A, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05,
++0x00, 0xA0, 0xFF, 0xBA, 0xFF, 0xCE, 0xFF, 0xE8, 0xFF, 0x00, 0x00, 0xA0, 0xFF, 0xBA, 0xFF, 0xDA,
++0xFF, 0xF4, 0xFF, 0x00, 0x00, 0x32, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
++};
+diff --git a/Uboot/cp/ps/driver/src/chipsets/src/audio_base/nxp/uclinux/audio_process.a b/Uboot/cp/ps/driver/src/chipsets/src/audio_base/nxp/uclinux/audio_process.a
+new file mode 100755
+index 0000000..449febf
+--- /dev/null
++++ b/Uboot/cp/ps/driver/src/chipsets/src/audio_base/nxp/uclinux/audio_process.a
+Binary files differ
+diff --git a/Uboot/cp/ps/driver/src/chipsets/src/audio_base/nxp/uclinux/nxp_DrvNvData.h b/Uboot/cp/ps/driver/src/chipsets/src/audio_base/nxp/uclinux/nxp_DrvNvData.h
+new file mode 100755
+index 0000000..ce95a87
+--- /dev/null
++++ b/Uboot/cp/ps/driver/src/chipsets/src/audio_base/nxp/uclinux/nxp_DrvNvData.h
+@@ -0,0 +1,10 @@
++//6 level volume
++//#define LVWM_TX_FILE_SIZE 463 //×Ö½ÚÊý
++//#define LVWM_RX_FILE_SIZE 1866
++//uc actual size
++//#define LVWM_TX_FILE_SIZE 379 //×Ö½ÚÊý
++//#define LVWM_RX_FILE_SIZE 1482
++
++
++
++//const static LVM_CHAR LVVE_Param_Test[] ={};
+diff --git a/Uboot/cp/ps/driver/src/chipsets/src/audio_base/tdm/hal_tdm.c b/Uboot/cp/ps/driver/src/chipsets/src/audio_base/tdm/hal_tdm.c
+index 322aea4..50e28da 100755
+--- a/Uboot/cp/ps/driver/src/chipsets/src/audio_base/tdm/hal_tdm.c
++++ b/Uboot/cp/ps/driver/src/chipsets/src/audio_base/tdm/hal_tdm.c
+@@ -54,6 +54,7 @@
+ #define TDM_DRIVER_VERSION 1
+
+ //#define ARM_TDM_LOOP_SET *((volatile unsigned int *)(ZX_SOC_SYS_BASE + 0x60))
++#define ARM_TDM_LOOP_CFG *((volatile UINT32 *)(SOC_SYS_REG_BASE+0x60))
+
+ /* version register */
+ #define TDM_VERSION 0x0104 /*TDM Version V1.4*/
+@@ -2415,7 +2416,12 @@
+ memset(temp, 0, sizeof(temp));
+ tdmDmaState[TDM_RX].channel = DMA_CH_TDM_RX0;
+ tdmDmaState[TDM_RX].ch = dma_request_channel(mask, zx29_dma_filter_fn, (void*)(tdmDmaState[TDM_RX].channel));
+-
++ if(!tdmDmaState[TDM_RX].ch){
++
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO,"%s: dma_request_channel fail, dma_id(%d).\n",__func__,tdmDmaState[TDM_RX].channel);
++ return DRV_ERR_BUSY;
++
++ }
+ for (i = 0; i < TDM_OUT_BUF_NUM; i++) {
+ temp[i].dest_addr = tdmDmaState[TDM_RX].dma_phyaddr + (tdmStream->rxLen) * i;
+ temp[i].src_addr = ZX29_TDM_PHYS + 0x24;
+@@ -2484,6 +2490,12 @@
+ memset(temp, 0, sizeof(temp));
+ tdmDmaState[TDM_TX].channel = DMA_CH_TDM_TX0;
+ tdmDmaState[TDM_TX].ch = dma_request_channel(mask, zx29_dma_filter_fn, (void*)(tdmDmaState[TDM_TX].channel));
++ if(!tdmDmaState[TDM_TX].ch){
++
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO,"%s: dma_request_channel fail, dma_id(%d).\n",__func__,tdmDmaState[TDM_TX].channel);
++ return DRV_ERR_BUSY;
++
++ }
+
+ for (i = 0; i < TDM_OUT_BUF_NUM; i++) {
+ temp[i].src_addr = tdmDmaState[TDM_TX].dma_phyaddr + (txStream->txLen) * i;
+@@ -2840,6 +2852,7 @@
+ SINT32 ret = DRV_SUCCESS;
+
+ ret = tdm_Reset();
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "zDrvTDM_Reset , ret=%d",ret);
+
+ return ret;
+ }
+@@ -3751,6 +3764,21 @@
+
+ VOID vp_SetTopTdmConfig(VOID)
+ {
++ UINT32 AmrRegBit = 0;
++
++ /* inter loop */
++ AmrRegBit = ARM_TDM_LOOP_CFG;
++
++ AmrRegBit &= 0xfffffe07;
++ AmrRegBit |= 0x000000a8; /* 0x000000a8 loop dsp afe(loop i2s1)--arm i2s2(loop i2s2) 0x00000150 loop dsp arm(loop i2s1)--afe i2s2(loop i2s2)*/
++
++ ARM_TDM_LOOP_CFG = AmrRegBit;
++
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_SetTopTDMConfig ARM_TDM_LOOP_CFG=0x%x\n", ARM_TDM_LOOP_CFG);
++
++
++
++
+ #if 0
+ UINT32 AmrRegBit = 0;
+ int ret = 0;
+diff --git a/Uboot/cp/ps/driver/src/chipsets/src/audio_base/voiceprocess/hal_voicebuffer.c b/Uboot/cp/ps/driver/src/chipsets/src/audio_base/voiceprocess/hal_voicebuffer.c
+new file mode 100755
+index 0000000..8d0e5f7
+--- /dev/null
++++ b/Uboot/cp/ps/driver/src/chipsets/src/audio_base/voiceprocess/hal_voicebuffer.c
+@@ -0,0 +1,1065 @@
++/*******************************************************************************
++ * Copyright (C) 2007, ZTE Corporation.
++ *
++ * File Name:hal_voicebuffer.c
++ * File Mark:
++ * Description: voice buffer function.
++ * Others:
++ * Version:
++ * Author: xxq
++ * Date: 2024-07-03
++ * History 1:
++ * Date:
++ * Version:
++ * Author:
++ * Modification: edit for union version
++ * History 2:
++ ********************************************************************************/
++
++/****************************************************************************
++* Include files
++****************************************************************************/
++#include "drvs_general.h"
++#include "drvs_volte.h"
++#include "drvs_i2s.h"
++#include "drvs_voiceprocess.h"
++#include "hal_voiceprocess.h"
++#include "drvs_voice_config.h"
++//#include "hal_pcmmixer.h"
++#include "NvParam_drv.h"
++#include "drvs_io_voice.h"
++#include "hal_ringdata.h"
++#include "drvs_tdm.h"
++#include "hal_dtmf_detect.h"
++#include "hal_audio_data.h"
++//#define TEST_WHITE_NOISE
++
++//#define VB_DATA_LOSS_TEST
++#ifdef TEST_WHITE_NOISE
++#include "Fs8000_WhiteNoise_Mon.h"
++//#include "Fs8000_Sine_440Hz_Mon.h"
++#endif
++
++#include "drvs_icp.h"
++#include "drvs_rpmsg.h"
++//#include <linux/completion.h>
++#include "hal_voicebuffer.h"
++
++/****************************************************************************
++* Local Macros
++****************************************************************************/
++//#define USE_AUDIO_RING
++//#define VP_GET_TX_ALL_DATA
++
++
++/****************************************************************************
++* Local Types
++****************************************************************************/
++
++
++/****************************************************************************
++* Local Constants
++****************************************************************************/
++static SINT32 vp_Get_Add_RpMsg_Vbuffer(VOID);
++
++/****************************************************************************
++* Local Function Prototypes
++****************************************************************************/
++
++/****************************************************************************
++* Global Constants
++****************************************************************************/
++
++
++/****************************************************************************
++* Global Variables
++****************************************************************************/
++//static T_zDrvVp_SpeechState *s_pSpeechState = NULL;
++extern T_zDrvVp_SpeechState s_speechState; //104 bytes
++extern T_zDrvVoice_GbVar g_voiceVar;
++extern T_zDrvVp_State s_vpState;
++
++
++#ifdef ECALL_SUPPORT
++extern int eWrErr;
++extern UINT8 e_reg_flag;
++
++#endif
++
++//for test whiteNoise
++#ifdef TEST_WHITE_NOISE
++extern UINT32 tempCount;
++extern UINT8 *pVoiceTempBuf;
++#endif
++
++
++extern T_ZDrv_VpInOutBuffer vpInOutBuffer;
++
++extern T_HalMixerToneInfo mixerToneInfo;
++
++static int vbuffer_init_flag = 0;
++
++/****************************************************************************
++* Global Function Prototypes
++****************************************************************************/
++//aduvoice config code
++
++
++
++
++
++
++extern SINT32 voice_ToneMixerData(UINT8 *pvdata, UINT32 size, UINT8 *pmixdata);//xiu gai chu sheng ming
++extern SINT32 zDrvI2S_Read_Start(T_ZDrvI2S_Id tId, T_ZDrvI2s_Params *params, T_ZDrvI2S_Cfg *ptCfg);//xiu gai chu sheng ming
++extern SINT32 zDrvI2S_Write_Start(T_ZDrvI2S_Id tId, T_ZDrvI2s_Params *params, T_ZDrvI2S_Cfg *ptCfg);//xiu gai chu sheng ming
++
++
++
++/****************************************************************************
++* Function Definitions
++****************************************************************************/
++ZOSS_TIMER_ID s_voiceTimerId ;
++ZOSS_SEMAPHORE_ID s_voiceRdSema;
++ZOSS_SEMAPHORE_ID s_voiceWrSema;
++
++//#ifdef CONFIG_VOICE_BUFFER_DRV
++//#ifdef _VBUFF_IN_MULTI_CORE
++//voice buffer use in multi core
++//#define RPMSG_CAP_ID 1
++
++
++
++int timer_cb_count = 0;
++int first_full_flag = 0;
++int first_empty_flag = 0;
++
++int vb_read_count = 0;
++int vb_write_count = 0;
++
++
++
++struct voice_ring_buffer *voice_buff[2] = {NULL,NULL};
++
++
++
++static bool voice_buff_is_full(int read_pos, int write_pos)
++{
++
++
++ if ((write_pos - read_pos) >= 20000000) {
++ write_pos = write_pos - 20000000;
++ //voice_buff[UP_LINK]->write_pos = write_pos;
++ voice_buff[DOWN_LINK]->write_pos = write_pos;
++ }
++ return ((write_pos - read_pos) == MAX_BUF_NUM);
++}
++static bool voice_buff_is_empty(int read_pos, int write_pos)
++{
++
++ return (write_pos == read_pos);
++}
++static int voice_buffer_write( char *buf, int count)
++{
++ int read_pos, write_pos;
++
++
++ read_pos = voice_buff[DOWN_LINK]->read_pos;
++ write_pos = voice_buff[DOWN_LINK]->write_pos;
++ if(vb_write_count == 0){
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO,"%s: first read_pos=%d write_pos=%d \n",__FUNCTION__,read_pos,write_pos);
++ }
++
++
++ if(voice_buff_is_full(read_pos, write_pos)){
++ //zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "voice_buffer_read readbuffer is full \n");
++ first_full_flag++;
++ VB_INT_OVERFLOW(first_full_flag);
++ if(first_full_flag == 1)
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "%s: writebuffer is full read_pos %d,write_pos %d,vb_write_count %d,count %d\n",__FUNCTION__,read_pos,write_pos,vb_write_count,count);
++ return DRV_ERROR_FULL;
++ }
++ else {
++ vb_write_count++;
++
++ VB_INT_OVERFLOW(vb_write_count);
++ first_full_flag = 0;
++ zOss_Memcpy(&(voice_buff[DOWN_LINK]->data[(write_pos%MAX_BUF_NUM)*MAX_BUF_SIZE]), buf, count);
++
++ write_pos++;
++
++ voice_buff[DOWN_LINK]->write_pos = write_pos;
++
++ }
++
++ return DRV_SUCCESS;
++}
++static int voice_buffer_read(char *buf, size_t count)
++{
++ int read_pos, write_pos;
++ int* buf_int;
++ int i;
++
++ read_pos = voice_buff[UP_LINK]->read_pos;
++ write_pos = voice_buff[UP_LINK]->write_pos;
++ if(vb_read_count == 0){
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO,"%s: first read_pos=%d write_pos=%d \n",__FUNCTION__,read_pos,write_pos);
++ }
++
++ if ((count > 0) && (count <= MAX_BUF_SIZE)) {
++ if(voice_buff_is_empty(read_pos, write_pos)){
++ first_empty_flag++;
++ VB_INT_OVERFLOW(first_empty_flag);
++ if(first_empty_flag ==1)
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO,"%s: readbuffer is empty,read_pos %d,write_pos %d,vb_read_count %d,count %d\n",__FUNCTION__,read_pos,write_pos,vb_read_count,count);
++ //add memset,del return . edit for far end hear near end repreat voice pcm, FROM MBB TEST
++
++ #ifndef VB_DATA_LOSS_TEST
++ zOss_Memset(&(voice_buff[UP_LINK]->data[(read_pos%MAX_BUF_NUM)*MAX_BUF_SIZE]),0, count);
++ zOss_Memset(buf,0, count);
++ #endif
++ //return DRV_ERROR_EMPTY;
++
++
++ }
++ else {
++
++ vb_read_count++;
++ VB_INT_OVERFLOW(vb_read_count);
++ first_empty_flag = 0;
++
++ zOss_Memcpy(buf, &(voice_buff[UP_LINK]->data[(read_pos%MAX_BUF_NUM)*MAX_BUF_SIZE]), count);
++ //zOss_Memset(&(voice_buff[UP_LINK]->data[(read_pos%MAX_BUF_NUM)*MAX_BUF_SIZE]),0, count);
++
++#ifdef VB_DATA_LOSS_TEST
++
++
++ if(vb_read_count < 5){
++ pr_info("ps :count=%d vb_read_count=%d,read_pos=%d,write_pos=%d\n",count,vb_read_count,read_pos,write_pos);
++
++
++ buf_int =( int*) &voice_buff[UP_LINK]->data[(write_pos%MAX_BUF_NUM)*MAX_BUF_SIZE];
++
++ for(i=0;i<(count/4);i++){
++ //*(buf_int+i) = i;
++ //buf_int[i] = i;
++ if(i>0x1f)
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO,"ps: *(buf_int+%d)=%d\n",i,*(buf_int+i));
++ }
++
++ }
++#endif
++ read_pos++;
++ if(read_pos == 20000000)
++ read_pos = 0;
++ voice_buff[UP_LINK]->read_pos = read_pos;
++ }
++
++
++ }
++
++
++ return DRV_SUCCESS;
++}
++
++
++//voice buffer use in single core
++extern int voicebuffer_ulqueue_read(void *buf, unsigned int size);
++extern int voicebuffer_dlqueue_write(void *buf, unsigned int size);
++extern void voice_inform_to_app(void);
++//static DECLARE_COMPLETION(s_voice_completion);
++//ZOSS_TIMER_ID s_voiceTimerId ;
++//ZOSS_SEMAPHORE_ID s_voiceRdSema;
++//ZOSS_SEMAPHORE_ID s_voiceWrSema;
++static void voiceTimerCallBack(SINT32 para)
++{
++
++
++ if (g_voiceVar.voiceBufferType == 1)//multi core
++ {
++
++
++ T_ZDrvRpMsg_Msg icp_pMsg = {0};
++
++ UINT8 s = 1;
++ icp_pMsg.actorID = RPMSG_CAP_ID;
++
++ icp_pMsg.chID = channel_41;
++ icp_pMsg.flag |= RPMSG_WRITE_INT;
++ icp_pMsg.buf = (void *)&s;
++ icp_pMsg.len = 1;
++
++
++ zOss_PutSemaphore(s_voiceWrSema);
++ zOss_PutSemaphore(s_voiceRdSema);
++ //zDrvRpMsg_Write(&icp_pMsg);
++#ifdef _USE_VEHICLE_DC
++ zDrvRpMsg_Write_Cap(&icp_pMsg);
++#endif
++ timer_cb_count++;
++ VB_INT_OVERFLOW(timer_cb_count);
++#ifdef VB_DATA_LOSS_TEST
++
++ if((timer_cb_count%1000 ) == 0){
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "%s:timer_cb_count(%d)\n",__FUNCTION__,timer_cb_count);
++ if(timer_cb_count> 10000000)
++ timer_cb_count=0;
++ }
++
++#endif
++
++
++ }
++ else{
++
++
++
++ // complete_all(&s_voice_completion);
++ zOss_PutSemaphore(s_voiceWrSema);
++ zOss_PutSemaphore(s_voiceRdSema);
++ voice_inform_to_app();
++ // zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "voiceTimerCallBack timer=%u\n", cpu_clock(0)>>10);
++ }
++
++
++}
++
++
++
++
++
++static SINT32 vp_rxsem_count_Init(void)
++{
++ UINT32 i = 0;
++ UINT32 semCount = 0;
++ SINT32 Count = 0;
++
++ semCount = zOss_GetSemaphoreCount(s_voiceRdSema);
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_rxsem_count_Init rxSem count=%d\n", semCount);
++
++ Count = semCount;
++ if(Count > 0) {
++ for(i = 0; i < Count; i++) {
++ zOss_GetSemaphore(s_voiceRdSema, ZOSS_NO_WAIT);
++ }
++ }
++
++ return DRV_SUCCESS;
++}
++
++static SINT32 vp_txsem_count_Init(void)
++{
++ UINT32 i = 0;
++ UINT32 semCount = 0;
++ SINT32 Count = 0;
++
++ semCount = zOss_GetSemaphoreCount(s_voiceWrSema);
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_txsem_count_Init txSem count=%d \n", semCount);
++
++ Count = 3 - semCount;
++ if(Count > 0) {
++ for(i = 0; i < Count; i++) {
++ zOss_PutSemaphore(s_voiceWrSema);
++ }
++ } else if(Count < 0) {
++ Count = 0 - Count;
++ for(i = 0; i < Count; i++) {
++ zOss_GetSemaphore(s_voiceWrSema, ZOSS_NO_WAIT);
++ }
++ }
++
++ return DRV_SUCCESS;
++}
++
++
++
++
++
++SINT32 vp_Open_Vbuffer(void)
++{
++ SINT32 ret = DRV_SUCCESS;
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "%s: start \n", __func__);
++ if (g_voiceVar.voiceBufferType == 1)//multi core
++ {
++ vp_Get_Add_RpMsg_Vbuffer();
++
++ vp_rxsem_count_Init();
++ vp_txsem_count_Init();
++ voice_buff[UP_LINK]->read_pos = 0;
++ voice_buff[UP_LINK]->write_pos = 0;
++ voice_buff[DOWN_LINK]->read_pos = 0;
++ voice_buff[DOWN_LINK]->write_pos = 0;
++ zOss_Memset(&(voice_buff[DOWN_LINK]->data[0]),0, MAX_BUF_NUM*MAX_BUF_SIZE);
++ zOss_Memset(&(voice_buff[UP_LINK]->data[0]),0, MAX_BUF_NUM*MAX_BUF_SIZE);
++ //for debug
++ timer_cb_count = 0;
++ first_full_flag = 0;
++ first_empty_flag = 0;
++
++ vb_read_count = 0;
++ vb_write_count = 0;
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_Open_Vbuffer init voice buffer val!\n");
++
++
++ }else{
++
++ // INIT_COMPLETION(s_voice_copletion);
++ vp_rxsem_count_Init();
++ vp_txsem_count_Init();
++ }
++
++ return DRV_SUCCESS;
++
++}
++
++
++SINT32 vp_Close_Vbuffer(void)
++{
++ SINT32 ret = DRV_SUCCESS;
++
++ if (g_voiceVar.voiceBufferType == 1)//multi core
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "%s: timer_cb_count %d,first_full_flag %d,first_empty_flag %d,vb_read_count %d,vb_write_count %d!\n",__FUNCTION__,timer_cb_count,first_full_flag,first_empty_flag,vb_read_count,vb_write_count);
++ }
++
++ return DRV_SUCCESS;
++}
++
++SINT32 vp_VoiceI2sStart_Vbuffer(VOID)
++{
++ SINT32 ret = DRV_SUCCESS;
++
++ UINT8 *read_buf = NULL;
++ UINT8 *write_buf = NULL;
++ UINT32 read_len = 0;
++ UINT32 write_len = 0;
++
++
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "%s: start.\n",__func__);
++
++
++ ret = zDrvI2S_Read_Start(I2S_2, &s_speechState.i2sReadParam, s_vpState.pVpInnerI2sCfg);
++ if (ret != DRV_SUCCESS)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart_Vbuffer failed ret is %d .\n", ret);
++ return DRV_ERROR;
++ }
++
++ zOss_StartTimer(s_voiceTimerId, 20, voiceTimerCallBack, 0);
++
++
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart_Vbuffer VB zOss_StartTimer\n");
++
++ ret = zDrvI2S_Write_Start(I2S_2, &s_speechState.i2sWriteParam, s_vpState.pVpInnerI2sCfg);
++
++ ret += zDrvI2S_GetBuf(I2S_2, &write_buf, &write_len);
++ if (ret != DRV_SUCCESS)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart_Vbuffer error7:zDrvI2S_GetBuf I2S_2 ret=%d", ret);
++ return DRV_ERROR;
++ }
++ zOss_Memset(write_buf, 0, write_len);
++ ret = zDrvI2S_Write(I2S_2, write_buf, write_len);
++ if (ret != DRV_SUCCESS)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart_Vbuffer error12:zDrvI2S_Write I2S_2 ret=%d", ret);
++ }
++
++ ret += zDrvI2S_GetBuf(I2S_2, &write_buf, &write_len);
++ if (ret != DRV_SUCCESS)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart_Vbuffer error13:zDrvI2S_GetBuf I2S_2 ret=%d", ret);
++ return DRV_ERROR;
++ }
++ zOss_Memset(write_buf, 0, write_len);
++ ret = zDrvI2S_Write(I2S_2, write_buf, write_len);
++ if (ret != DRV_SUCCESS)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart_Vbuffer error14:zDrvI2S_Write I2S_2 ret=%d", ret);
++ }
++
++ if (g_voiceVar.voiceBufferType == 1)//multi core
++ {
++
++ voice_buffer_write(s_speechState.pVpTempRxOutPutBuffer, s_speechState.totalFrameBufSize);
++
++ }else{
++ voicebuffer_dlqueue_write(s_speechState.pVpTempRxOutPutBuffer, s_speechState.totalFrameBufSize);
++ }
++
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "%s: end.\n",__func__);
++ return ret;
++}
++VOID vp_VoiceI2sStop_Vbuffer(VOID)
++{
++ SINT32 ret = DRV_SUCCESS;
++ return ret;
++}
++
++
++
++SINT32 zDrvVp_VoiceWorkStop_Vbuffer(VOID)
++{
++ SINT32 ret = DRV_SUCCESS;
++
++ //complete_all(&s_voice_completion);
++ zOss_PutSemaphore(s_voiceRdSema);
++ zOss_PutSemaphore(s_voiceWrSema);
++ zOss_StopTimer(s_voiceTimerId);
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "%s: zOss_StopTimer\n",__func__);
++
++
++
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "%s: success",__func__);
++ return DRV_SUCCESS;
++}
++
++
++SINT32 vp_VolteReadStart_Vbuffer(VOID)
++{
++ SINT32 ret = DRV_SUCCESS;
++
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VolteReadStart_Vbuffer start\n");
++
++ zOss_StartTimer(s_voiceTimerId, 20, voiceTimerCallBack, 0);
++
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VolteReadStart_Vbuffer zOss_StartTimer start\n");
++
++ return DRV_SUCCESS;
++}
++//whole replace
++SINT32 vp_VolteReadStop_Vbuffer(VOID)
++{
++ SINT32 ret = DRV_SUCCESS;
++
++ if (g_voiceVar.useVoiceBuffer == 1)
++ {
++ zOss_PutSemaphore(s_voiceRdSema);
++
++ }
++ else
++ {
++
++#ifdef CONFIG_VOICE_BUFFER_DRV
++ zOss_PutSemaphore(s_voiceRdSema);
++#else
++
++ //zDrvI2s_RxRlsSemaBeforeStop(I2S_1);
++ zDrvExtAudio_RxRlsSemaBeforeStop();
++
++#if 0//move to close lvwenhua 20150910
++ ret = zDrvExtAudio_Read_Stop();
++ if (ret != DRV_SUCCESS)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "zDrvVolte_ReadStop I2S1 Stop wrong ret=%d", ret);
++ }
++#endif
++#endif
++
++ }
++
++ if (s_speechState.volteVpCfgEnFlag == 1)
++ {
++ ret = halVpCfg_Disable();
++ if (ret != DRV_SUCCESS)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "%s: halVpCfg_Enable err ret=%x !\n",__func__, ret);
++ }
++ else
++ {
++ s_speechState.volteVpCfgEnFlag = 0;
++ }
++ }
++
++ s_speechState.volteVpReadStopFlag = 1;//together control vp s_speechState
++ if ((s_speechState.volteVpWriteStopFlag == 1) && (s_speechState.volteVpReadStopFlag == 1))
++ {
++ g_voiceVar.vpI2sStatus = VP_I2S_OPEN;
++
++ if (g_voiceVar.useVoiceBuffer == 1)
++ {
++ zOss_StopTimer(s_voiceTimerId);
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "%s: zOss_StopTimer\n",__func__);
++
++ }
++ else
++ {
++#ifdef CONFIG_VOICE_BUFFER_DRV
++ zOss_StopTimer(s_voiceTimerId);
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VolteReadStop_Vbuffer zOss_StopTimer\n");
++#endif
++ }
++ }
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "%s: end\n",__func__);
++ return ret;
++}
++
++SINT32 vp_VolteWriteStart_Vbuffer(VOID)
++{
++ SINT32 ret = DRV_SUCCESS;
++
++ //???? for check
++ if (g_voiceVar.voiceBufferType == 1)//multi core
++ {
++ voice_buffer_write(s_speechState.pVpTempRxOutPutBuffer, s_speechState.totalFrameBufSize);
++ }
++ else
++ {
++ voicebuffer_dlqueue_write(s_speechState.pVpTempRxOutPutBuffer, s_speechState.totalFrameBufSize);
++ }
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "%s:end \n",__func__);
++
++ return ret;
++}
++//whole replace
++SINT32 vp_VolteWriteStop_Vbuffer(VOID)
++{
++ SINT32 ret = DRV_SUCCESS;
++ if (g_voiceVar.useVoiceBuffer == 1)
++ {
++ zOss_PutSemaphore(s_voiceWrSema);
++
++ }
++ else
++ {
++
++#ifdef CONFIG_VOICE_BUFFER_DRV
++ //complete_all(&s_voice_completion);
++ zOss_PutSemaphore(s_voiceWrSema);
++#else
++ //zDrvI2s_TxRlsSemaBeforeStop(I2S_1);
++ zDrvExtAudio_TxRlsSemaBeforeStop();
++#endif
++ }
++#if 0//move to close lvwenhua 20150910
++ //wait for write drain semaphore
++#ifdef VOICE_TONE_MIXER_FUNCTION
++ voice_ToneMixerStop();
++#endif
++
++ ret = zDrvExtAudio_Write_Stop();
++ if (ret != DRV_SUCCESS)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "zDrvVolte_WriteStop I2S1 Stop wrong ret=%d", ret);
++ }
++
++ //s_VolteWriteSema = 0;
++#endif
++
++ if (s_speechState.volteVpCfgEnFlag == 1)
++ {
++ ret = halVpCfg_Disable();
++ if (ret != DRV_SUCCESS)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VolteWriteStop_Vbuffer halVpCfg_Enable err ret=%x !\n", ret);
++ }
++ else
++ {
++ s_speechState.volteVpCfgEnFlag = 0;
++ }
++ }
++
++ s_speechState.volteVpWriteStopFlag = 1;//together control vp s_speechState
++ if ((s_speechState.volteVpWriteStopFlag == 1) && (s_speechState.volteVpReadStopFlag == 1))
++ {
++ g_voiceVar.vpI2sStatus = VP_I2S_OPEN;
++
++ if (g_voiceVar.useVoiceBuffer == 1)
++ {
++
++ zOss_StopTimer(s_voiceTimerId);
++
++ }
++ else
++ {
++
++#ifdef CONFIG_VOICE_BUFFER_DRV
++ zOss_StopTimer(s_voiceTimerId);
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VolteWriteStop_Vbuffer zOss_StopTimer\n");
++#endif
++ }
++ }
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VolteWriteStop_Vbuffer \n");
++ return ret;
++}
++
++
++/*******************************************************************************
++ * For union version
++ * Others:
++ ********************************************************************************/
++SINT32 vp_WriteDataToCodec_Vbuffer(UINT8 *pBuf, UINT32 count)
++{
++ SINT32 ret = DRV_SUCCESS;
++ SINT32 e_ret = DRV_SUCCESS;
++ UINT8 *write_buf = NULL;
++ UINT32 write_len = 0;
++ UINT8 *e_write_buf = NULL;
++ UINT32 e_write_len = 0;
++ UINT32 i = 0, j = 0;
++#ifdef TEST_WHITE_NOISE
++ // UINT32 tempCount = 0;
++ //zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "test the white noise");
++ //UINT8 *pVoiceTempBuf = s_voiceTempBuffer;
++#endif
++
++
++
++ if (pBuf == NULL)
++ {
++ return DRV_ERR_INVALID_PARAM;
++ }
++
++ if (count != s_speechState.i2sWriteParam.buffersize)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_WriteDataToCodec_Vbuffer write data length err,count=%d,writebuffersize=%d \n", count, s_speechState.i2sWriteParam.buffersize);
++ return DRV_ERR_INVALID_PARAM;
++ }
++ #ifdef ECALL_SUPPORT
++
++ if(e_reg_flag == 1)
++ {
++ e_ret = update_ecall_state(DIR_RX);
++ if (e_ret == DRV_ERR_NOT_SUPPORTED)
++ {
++ zOss_Printf(SUBMDL_HAL, PRINT_LEVEL_NORMAL, "vp_WriteDataToCodec_Vbuffer get__ecall_state fun not register or invalid para,e_ret=%d !\n",e_ret);
++
++ }
++ }
++ #endif
++
++
++
++ #ifdef TEST_WHITE_NOISE
++
++ zOss_Memcpy(s_speechState.pVpTempRxInBuffer, pVoiceTempBuf, s_speechState.totalFrameBufSize);
++
++ pVoiceTempBuf += s_speechState.totalFrameBufSize;
++ tempCount += s_speechState.totalFrameBufSize;
++ if (tempCount >= 0x4df80) //307200
++ //if(tempCount >= 0x4e200) //320000
++ {
++ pVoiceTempBuf = s_voiceTempBuffer;
++ tempCount = 0;
++ }
++ #endif
++
++ #ifdef VOICE_TONE_MIXER_FUNCTION
++
++ if (mixerToneInfo.StartMixer == TRUE)
++ {
++ //voice_ToneMixerData( s_speechState.pVpTempRxInBuffer);
++ if ((g_voiceVar.voiceInVolteMode == 1) && (g_voiceVar.volteIsWb == 1))
++ {
++ voice_ToneMixerData(s_speechState.pVpTempRxInBuffer, 640, s_speechState.pVpTempRxInBuffer);
++ }
++ else
++ {
++ voice_ToneMixerData(s_speechState.pVpTempRxInBuffer, 320, s_speechState.pVpTempRxInBuffer);
++ }
++
++ }
++
++ #endif
++ if (pBuf != s_speechState.pVpTempRxInBuffer)
++ {
++ zOss_Memcpy(s_speechState.pVpTempRxInBuffer, pBuf, s_speechState.totalFrameBufSize);
++ }
++
++ if (g_voiceVar.vProcIsNormal == TRUE)
++ {
++ VoiceProc_RxProcess(& s_speechState.pVpTempRxInBuffer, & s_speechState.pVpTempRxOutPutBuffer, s_speechState.frameCount);
++ }
++ else
++ {
++ zOss_Memcpy((VOID *)(s_speechState.pVpTempRxOutPutBuffer), (VOID *) s_speechState.pVpTempRxInBuffer, s_speechState.totalFrameBufSize);
++ }
++ //wait_for_completion_timeout(&s_voice_completion, 60);
++ zOss_GetSemaphore(s_voiceWrSema, 60);
++ //#ifdef _VBUFF_IN_MULTI_CORE
++ if (g_voiceVar.voiceBufferType == 1)
++ {
++ voice_buffer_write(s_speechState.pVpTempRxOutPutBuffer, s_speechState.totalFrameBufSize);
++ }
++ else
++ {
++ voicebuffer_dlqueue_write(s_speechState.pVpTempRxOutPutBuffer, s_speechState.totalFrameBufSize);
++ }
++ if (g_voiceVar.voiceInVolteMode == 1)
++ {
++ s_speechState.rxSaveLen += s_speechState.totalFrameBufSize;
++ if (s_speechState.rxSaveLen >= s_speechState.inOutBufUseSize)
++ {
++ s_speechState.rxSaveLen = 0;
++ }
++ s_speechState.pVpTempRxInBuffer = s_vpState.pVpRxInBuffer + s_speechState.rxSaveLen;
++ #ifdef _USE_VP_OUTPUT_RXOUT_DATA
++ s_speechState.pVpTempRxOutPutBuffer = s_vpState.pVpRxOutPutBuffer + s_speechState.rxSaveLen;
++ #else
++ s_speechState.pVpTempRxOutPutBuffer = s_vpState.pVpRxOutPutBuffer;
++ #endif
++ }
++
++
++ if (s_speechState.firstWriteDataFlag == FALSE)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_WriteDataToCodec_Vbuffer first write ret=%d,tick=%d.\n", ret, zOss_GetTickCount());
++ s_speechState.firstWriteDataFlag = TRUE;
++ }
++
++ return ret;
++}
++
++
++
++SINT32 vp_ReadDataFromCodec_Vbuffer(UINT8 *pBuf, UINT32 count)
++{
++ SINT32 ret = DRV_SUCCESS;
++ UINT8 *read_buf = NULL;
++ UINT32 read_len = 0;
++
++ UINT32 i = 0, j = 0;
++#ifdef CONFIG_ARCH_ZX297520V3_CPE_SWITCH
++ UINT8 temp8bit = 0;
++ UINT8 *ptemp8bit = NULL;
++#endif
++
++ if (pBuf == NULL)
++ {
++ return DRV_ERR_INVALID_PARAM;
++ }
++
++ if (count != s_speechState.i2sReadParam.buffersize)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "%s: read data length err,count=%d,readbuffersize=%d \n",__func__, count, s_speechState.i2sReadParam.buffersize);
++ return DRV_ERR_INVALID_PARAM;
++ }
++#ifdef ECALL_SUPPORT
++
++ if(e_reg_flag == 1)
++ {
++ ret = update_ecall_state(DIR_TX);
++ if (ret == DRV_ERR_NOT_SUPPORTED)
++ {
++ zOss_Printf(SUBMDL_HAL, PRINT_LEVEL_NORMAL, "vp_ReadDataFromCodecvp_ReadDataFromCodec get__ecall_state fun not register,ret=%d !\n",ret);
++
++ }
++ }
++#endif
++
++
++// wait_for_completion_timeout(&s_voice_completion, 60);
++ zOss_GetSemaphore(s_voiceRdSema, 60);
++ if (g_voiceVar.voiceBufferType == 1)
++ {
++ voice_buffer_read(s_speechState.pVpTempTxInBuffer, s_speechState.totalFrameBufSize);
++
++ }
++ else
++ {
++ voicebuffer_ulqueue_read(s_speechState.pVpTempTxInBuffer, s_speechState.totalFrameBufSize);
++ }
++ if (g_voiceVar.vProcIsNormal == TRUE)
++ {
++ VoiceProc_TxProcess(&s_speechState.pVpTempTxInBuffer, NULL, &s_speechState.pVpTempTxOutPutBuffer, s_speechState.frameCount);
++ }
++ else
++ {
++ zOss_Memcpy((VOID *)(s_speechState.pVpTempTxOutPutBuffer), (VOID *) s_speechState.pVpTempTxInBuffer, s_speechState.totalFrameBufSize);
++ }
++
++ if (pBuf != s_speechState.pVpTempTxOutPutBuffer)
++ {
++ zOss_Memcpy(pBuf, s_speechState.pVpTempTxOutPutBuffer, s_speechState.totalFrameBufSize);
++ }
++
++ if (g_voiceVar.voiceInVolteMode == 1)
++ {
++ // s_speechState.txSaveLen += VP_FRAME_BUFFER_SIZE;
++ s_speechState.txSaveLen += s_speechState.totalFrameBufSize;
++ if (s_speechState.txSaveLen >= s_speechState.inOutBufUseSize)
++ {
++ s_speechState.txSaveLen = 0;
++ }
++ s_speechState.pVpTempTxInBuffer = s_vpState.pVpTxInBuffer + s_speechState.txSaveLen;
++ s_speechState.pVpTempTxOutPutBuffer = s_vpState.pVpTxOutPutBuffer + s_speechState.txSaveLen;
++ }
++
++
++ if (s_speechState.firstReadDataFlag == FALSE)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_ReadDataFromCodec first read tick=%d.\n", zOss_GetTickCount());
++ s_speechState.firstReadDataFlag = TRUE;
++ }
++
++ return ret;
++}
++
++
++
++
++SINT32 vp_CreateThreadSemaph_Vbuffer(VOID)
++{
++ SINT32 ret = 0;
++//#ifdef CONFIG_VOICE_BUFFER_DRV
++// init_completion(&s_voice_completion);
++ /*
++ if(vbuffer_init_flag == 1){
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vbuffer already init,return! \n");
++ return DRV_SUCCESS;
++
++ }
++ */
++ s_voiceRdSema = zOss_CreateSemaphore("voice_rx_sem", 0);
++ if(NULL == s_voiceRdSema) {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "create voice_rx_sem err \n");
++ return DRV_ERROR;
++ }
++
++ s_voiceWrSema = zOss_CreateSemaphore("voice_tx_sem", 0);
++ if(NULL == s_voiceWrSema) {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "create voice_tx_sem err \n");
++ return DRV_ERROR;
++ }
++
++
++
++ s_voiceTimerId = zOss_CreateTimer("voice_frameTimer", voiceTimerCallBack, 0, TRUE);
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "s_voiceTimerId=%p\n", s_voiceTimerId);
++ if(!s_voiceTimerId)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "voice_frameTimer failed\n");
++ return DRV_ERROR;
++ }
++
++
++
++
++ //ret = zDrvRpMsg_CreateChannel(IPC_MSG_ACTOR_A9,channel_41,0x10);
++#ifdef _USE_VEHICLE_DC
++ ret = zDrvRpMsg_CreateChannel_Cap(RPMSG_CAP_ID,channel_41,0x10);
++
++ if(DRV_SUCCESS != ret) {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "create rpmsg err(%d) \n",ret);
++ return DRV_ERROR;
++ }
++/*
++ volatile T_ZDrvRpMsg_Msg icp_pMsg = {0};
++ volatile unsigned int rpMsgBuf[2] = {0,0};
++ //printk( "vir_buf1:0x%x, vir_buf2:0x%x, phy_buf1:0x%x, phy_buf2:0x%x,\n",voice_buff[0],voice_buff[1],rpMsgBuf[0],rpMsgBuf[1]);
++ icp_pMsg.actorID = RPMSG_CAP_ID;
++ icp_pMsg.chID = channel_41;
++ icp_pMsg.flag &= ~RPMSG_READ_POLL;
++ icp_pMsg.buf = rpMsgBuf;
++ icp_pMsg.len = 8;
++
++
++ ret = zDrvRpMsg_Read_Cap(&icp_pMsg);
++ if(ret <= 0){
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "voice buffer rpmsg addr read fail,ret=%d \n",ret);
++ zOss_Printf(SUBMDL_HAL, PRINT_LEVEL_NORMAL, "ps voice buffer rpmsg addr read fail,ret=%d \n",ret);
++
++
++ }
++ else{
++ #if 0
++
++ voice_buff[UP_LINK] = (struct voice_ring_buffer *)(rpMsgBuf[0]);
++ voice_buff[DOWN_LINK] = (struct voice_ring_buffer *)(rpMsgBuf[1]);
++ #else
++
++ voice_buff[UP_LINK] = (struct voice_ring_buffer *)ioremap_wc(rpMsgBuf[0], (sizeof(struct voice_ring_buffer) + MAX_BUF_SIZE*MAX_BUF_NUM));
++ voice_buff[DOWN_LINK] = (struct voice_ring_buffer *)ioremap_wc(rpMsgBuf[1],(sizeof(struct voice_ring_buffer) + MAX_BUF_SIZE*MAX_BUF_NUM));
++ #endif
++
++ zOss_Printf(SUBMDL_HAL, PRINT_LEVEL_NORMAL, "ps rpmsg voice buffer addr,up vir buf=0x%x, down vir buf=0x%x ,up phy buf=0x%x, down phy buf=0x%x,size=%d \n" \
++ ,voice_buff[0],voice_buff[1],rpMsgBuf[0],rpMsgBuf[1],(sizeof(struct voice_ring_buffer) + MAX_BUF_SIZE*MAX_BUF_NUM));
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "voice buffer addr,up vir buf=0x%x, down vir buf=0x%x ,up phy buf=0x%x, down phy buf=0x%x,size=%d \n" \
++ ,voice_buff[0],voice_buff[1],rpMsgBuf[0],rpMsgBuf[1],(sizeof(struct voice_ring_buffer) + MAX_BUF_SIZE*MAX_BUF_NUM));
++ }
++*/
++
++
++#endif
++ //vbuffer_init_flag = 1;
++
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_CreateThreadSemaph success. \r\n");
++ return DRV_SUCCESS;
++}
++
++
++
++
++static SINT32 vp_Get_Add_RpMsg_Vbuffer(VOID)
++{
++ SINT32 ret = 0;
++//#ifdef CONFIG_VOICE_BUFFER_DRV
++// init_completion(&s_voice_completion);
++
++ if(vbuffer_init_flag == 1){
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vbuffer already init,return! \n");
++ return DRV_SUCCESS;
++
++ }
++
++ //ret = zDrvRpMsg_CreateChannel(IPC_MSG_ACTOR_A9,channel_41,0x10);
++#ifdef _USE_VEHICLE_DC
++
++ volatile T_ZDrvRpMsg_Msg icp_pMsg = {0};
++ volatile unsigned int rpMsgBuf[2] = {0,0};
++ //printk( "vir_buf1:0x%x, vir_buf2:0x%x, phy_buf1:0x%x, phy_buf2:0x%x,\n",voice_buff[0],voice_buff[1],rpMsgBuf[0],rpMsgBuf[1]);
++ icp_pMsg.actorID = RPMSG_CAP_ID;
++ icp_pMsg.chID = channel_41;
++ icp_pMsg.flag &= ~RPMSG_READ_POLL;
++ icp_pMsg.buf = rpMsgBuf;
++ icp_pMsg.len = 8;
++
++
++ ret = zDrvRpMsg_Read_Cap(&icp_pMsg);
++ if(ret <= 0){
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "voice buffer rpmsg addr read fail,ret=%d \n",ret);
++ zOss_Printf(SUBMDL_HAL, PRINT_LEVEL_NORMAL, "ps voice buffer rpmsg addr read fail,ret=%d \n",ret);
++
++
++ }
++ else{
++ #if 0
++
++ voice_buff[UP_LINK] = (struct voice_ring_buffer *)(rpMsgBuf[0]);
++ voice_buff[DOWN_LINK] = (struct voice_ring_buffer *)(rpMsgBuf[1]);
++ #else
++
++ voice_buff[UP_LINK] = (struct voice_ring_buffer *)ioremap_wc(rpMsgBuf[0], (sizeof(struct voice_ring_buffer) + MAX_BUF_SIZE*MAX_BUF_NUM));
++ voice_buff[DOWN_LINK] = (struct voice_ring_buffer *)ioremap_wc(rpMsgBuf[1],(sizeof(struct voice_ring_buffer) + MAX_BUF_SIZE*MAX_BUF_NUM));
++ #endif
++
++ zOss_Printf(SUBMDL_HAL, PRINT_LEVEL_NORMAL, "ps rpmsg voice buffer addr,up vir buf=0x%x, down vir buf=0x%x ,up phy buf=0x%x, down phy buf=0x%x,size=%d \n" \
++ ,voice_buff[0],voice_buff[1],rpMsgBuf[0],rpMsgBuf[1],(sizeof(struct voice_ring_buffer) + MAX_BUF_SIZE*MAX_BUF_NUM));
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "voice buffer addr,up vir buf=0x%x, down vir buf=0x%x ,up phy buf=0x%x, down phy buf=0x%x,size=%d \n" \
++ ,voice_buff[0],voice_buff[1],rpMsgBuf[0],rpMsgBuf[1],(sizeof(struct voice_ring_buffer) + MAX_BUF_SIZE*MAX_BUF_NUM));
++
++ vbuffer_init_flag = 1;
++
++ }
++
++
++
++#endif
++
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "%s: success. \r\n",__func__);
++ return DRV_SUCCESS;
++}
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
+diff --git a/Uboot/cp/ps/driver/src/chipsets/src/audio_base/voiceprocess/hal_voiceprocess.c b/Uboot/cp/ps/driver/src/chipsets/src/audio_base/voiceprocess/hal_voiceprocess.c
+index f34d0b7..3296dad 100755
+--- a/Uboot/cp/ps/driver/src/chipsets/src/audio_base/voiceprocess/hal_voiceprocess.c
++++ b/Uboot/cp/ps/driver/src/chipsets/src/audio_base/voiceprocess/hal_voiceprocess.c
+@@ -34,9 +34,7 @@
+ #include "drvs_tdm.h"
+ #include "hal_dtmf_detect.h"
+ #include "hal_audio_data.h"
+-//#define TEST_WHITE_NOISE
+
+-//#define VB_DATA_LOSS_TEST
+ #ifdef TEST_WHITE_NOISE
+ #include "Fs8000_WhiteNoise_Mon.h"
+ //#include "Fs8000_Sine_440Hz_Mon.h"
+@@ -45,40 +43,19 @@
+ #include "drvs_icp.h"
+ #include "drvs_rpmsg.h"
+ //#include <linux/completion.h>
++
++#include "hal_voicebuffer.h"
++
+ /****************************************************************************
+ * Local Macros
+ ****************************************************************************/
+ //#define USE_AUDIO_RING
+ //#define VP_GET_TX_ALL_DATA
+
+-#define VP_BUF_LENGTH 0x7FF80 //0xFFD80 //0x7FE40 //0x4df80// (0.5M 0x80000)
+-#define VP_FRAME_BUFFER_SIZE 320 //20ms 800KHZ
+-#define VP_I2S_BUFFER_SIZE 320
+-#define VOICE_SYNC_TIMEOUT_TIME 100
+-
+-#define VP_INOUT_BAK_BUFFER_SIZE 0x30000 // 0x60000
+-#define VP_INOUT_NOBAK_BUFSIZE 640
+-#define VB_MAX_INT 0x7fffffff
+-#define VB_MIN_INT 0 //(0-2<<31)//0x80000000
+-
+-#define VB_INT_OVERFLOW(x) if((x < VB_MIN_INT)||(x > VB_MAX_INT)) x = 0;
+ /****************************************************************************
+ * Local Types
+ ****************************************************************************/
+- typedef enum
+- {
+- VBUF_SEM = 0,//voice buffer
+- ECALL_SEM,
+- SEM_MAX
+- } T_Sem_Owner;
+
+- typedef enum
+- {
+- DIR_RX,
+- DIR_TX,
+- DIR_ALL,
+- DIR_MAX
+- } T_Data_Dir_Type;
+
+ /****************************************************************************
+ * Local Constants
+@@ -104,7 +81,46 @@
+ * Global Variables
+ ****************************************************************************/
+ //static T_zDrvVp_SpeechState *s_pSpeechState = NULL;
++#if 0
+ static T_zDrvVp_SpeechState s_speechState = {0}; //104 bytes
++#else
++T_zDrvVp_SpeechState s_speechState = {
++ //use for vp data process
++ .pVpTempRxInBuffer = NULL,
++ .pVpTempTxInBuffer = NULL,
++ .pVpTempRxOutPutBuffer = NULL,
++ .pVpTempTxOutPutBuffer = NULL,
++
++ .pVpI2sCfg = NULL,
++
++ .vpCfgParam = {0},
++
++ .i2sWriteParam = {0},
++ .i2sReadParam = {0},
++
++ .frameCount = 0,
++ .totalFrameBufSize = 0,
++ .inOutBufUseSize = 0,
++ .rxSaveLen = 0,
++ .txSaveLen = 0,
++ .saveLen = 0,
++
++ .pcmSlotNum = 0,
++ .pcmWbSecDataPosition = 0,
++
++ .volteVpWriteStopFlag = 0,
++ .volteVpReadStopFlag = 0,
++ . volteVpCfgEnFlag = 0,
++ .firstWriteDataFlag = FALSE,
++ .firstReadDataFlag = FALSE,
++ .i2sIsRstFlag = FALSE,
++
++};
++
++
++#endif
++
++#if 0
+
+ T_zDrvVoice_GbVar g_voiceVar =
+ {
+@@ -138,32 +154,104 @@
+ #endif
+ 0 //27 voice_nv_update
+ };
++#else
++T_zDrvVoice_GbVar g_voiceVar =
++{
++ .volteIsWb = 0, //volteIsWb
++ .isUseSlicCodec = 0, //isUseSlicCodec
++ .g_isUseTdm = 0, //g_isUseTdm
++ .voiceInGsmTdMode = 0, //voiceInGsmTdMode
++ .voiceInVolteMode = 0, //voiceInVolteMode
++ .innerI2sIsMaster = FALSE, //innerI2sIsMaster
++ .innerI2sIsI2sMode = TRUE, //innerI2sIsI2sMode
++ .vpLoopRuning = FALSE, //vpLoopRunning
++ .muteEn = FALSE, //muteEn
++ .vProcIsNormal = FALSE, //vProcIsNormal
++ .vpI2sStatus = VP_I2S_IDLE, //vpI2sStatus
++ .vpPath = VP_PATH_HANDSET, //vpPath
++ .vpLoopPath = VP_PATH_HANDSET, //vpLoopPath
++ .vpVol = VP_VOL_3, //vpVol
++ .voiceMode = MAX_VOICE_MODE, //voiceMode
++ .vpInitGain = -1, //vpInitGain
++ .audio_ctrlFlag = {0}, //audio_ctrlFlag
++
++ .dtmfDirSel = DTMF_IDLE, //dtmfDirSel
++ .sample_rate = 0, //sample_rate
++ .useDtmfLoop = 0, //useDtmfLoop
++ .muteCount = 0, //muteCount
++ .vpLoopBkRunning = FALSE, //vpLoopBkRunning
++ .rxMuteEn = FALSE, //rxMuteEn
++ .firstRegZCATFlag = FALSE,
++#ifdef ECALL_SUPPORT
++ .ecallData = {0}, //ecallData
++#endif
++ .voice_nv_update = 0, // voice_nv_update
++ .useVoiceBuffer = 0,// 0 not use,1 use
++ .voiceBufferType = 0, //0 single core, 1 dual core
++
++};
++
++#endif
++
++#if 0
++
+
+ static T_zDrvVp_State s_vpState =
+ {
+- NULL,
+- NULL,
+- NULL,
+- NULL,
+- 0,
+- NULL,
+- NULL,
+- NULL,
+- NULL,
+- NULL,
+- NULL,
+- {0},
+- {0},
+- 0,
+- NULL,
+- NULL,
+- NULL,
+- NULL,
+- NULL,
+- NULL,
+- NULL
++ NULL,//1 pVpRxInBuffer
++ NULL,//2 pVpTxInBuffer
++ NULL,//3 pVpRxOutPutBuffer
++ NULL,//4 pVpTxOutPutBuffer
++ 0,//5 inOutBufSize
++ NULL,//6 pVpInnerI2sCfg
++ NULL,//7 pVpExtI2sCfg
++ NULL,//8 pVpExtI2sWbCfg
++ NULL,//9 s_pVpTdmCfg
++ NULL,//10 s_pVpTdmWbCfg
++ NULL,//11 pVpTdmCfg
++ {0},//12 pMsg
++ {0},//13 pMsgBuf[2]
++ //0,//14
++ NULL,//15 vpThread
++ NULL,//16 rcvDtmfThread
++ NULL,//17 vpSemaphore
++ NULL,//18 vpThreadQuitSema
++ NULL,//19 vpLoopThread
++ NULL,//20 vpLoopSemaphore
++ NULL//21 vpState
+ // {0}
+ };
++#else
++T_zDrvVp_State s_vpState =
++{
++ .pVpRxInBuffer = NULL,//1
++ .pVpTxInBuffer = NULL,//2
++ .pVpRxOutPutBuffer = NULL,//3
++ .pVpTxOutPutBuffer = NULL,//4
++ .inOutBufSize = 0,//5
++ .pVpInnerI2sCfg = NULL,//6
++ .pVpExtI2sCfg = NULL,//7
++ .pVpExtI2sWbCfg = NULL,//8
++ .s_pVpTdmCfg = NULL,//9
++ .s_pVpTdmWbCfg = NULL,//10
++ .pVpTdmCfg = NULL,//11
++ .pMsg = {0},//12
++ .pMsgBuf = {0},//13
++ .vpThread = NULL,//14
++ .rcvDtmfThread = NULL,//15
++ .vpSemaphore = NULL,//16
++ .vpThreadQuitSema = NULL,//17
++ .vpLoopThread = NULL,//18
++ .vpLoopSemaphore = NULL,//19
++
++ .vpState = NULL,//
++// {0}
++};
++
++
++#endif
++
++
+
+ //for test whiteNoise
+ #ifdef TEST_WHITE_NOISE
+@@ -271,8 +359,8 @@
+ ****************************************************************************/
+ #ifdef CONFIG_VOICE_BUFFER_DRV
+ #ifdef _VBUFF_IN_MULTI_CORE
+-#define RPMSG_CAP_ID 1
+-
++//#define RPMSG_CAP_ID 1
++#if 0
+ ZOSS_TIMER_ID s_voiceTimerId ;
+ ZOSS_SEMAPHORE_ID s_voiceRdSema;
+ ZOSS_SEMAPHORE_ID s_voiceWrSema;
+@@ -283,9 +371,22 @@
+
+ int vb_read_count = 0;
+ int vb_write_count = 0;
++#else
++//define in hal_voicebuffer.c
++extern ZOSS_TIMER_ID s_voiceTimerId ;
++extern ZOSS_SEMAPHORE_ID s_voiceRdSema;
++extern ZOSS_SEMAPHORE_ID s_voiceWrSema;
+
++extern int timer_cb_count;
++extern int first_full_flag;
++extern int first_empty_flag;
+
+-void voiceTimerCallBack(SINT32 para)
++extern int vb_read_count;
++extern int vb_write_count;
++
++#endif
++
++static void voiceTimerCallBack(SINT32 para)
+ {
+ T_ZDrvRpMsg_Msg icp_pMsg = {0};
+
+@@ -316,22 +417,8 @@
+
+ // zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "voiceTimerCallBack timer=%u\n", cpu_clock(0)>>10);
+ }
+-#define MAX_BUF_SIZE 640
+-#define MAX_BUF_NUM 3
+
+-
+-enum{
+- UP_LINK,
+- DOWN_LINK
+-};
+-
+-struct voice_ring_buffer {
+- volatile uint read_pos;
+- volatile uint write_pos;
+- volatile char data[];
+-
+-};
+-struct voice_ring_buffer *voice_buff[2] = {NULL,NULL};
++extern struct voice_ring_buffer *voice_buff[2];
+
+
+
+@@ -460,10 +547,10 @@
+ extern int voicebuffer_dlqueue_write(void *buf, unsigned int size);
+ extern void voice_inform_to_app(void);
+ //static DECLARE_COMPLETION(s_voice_completion);
+-ZOSS_TIMER_ID s_voiceTimerId ;
+-ZOSS_SEMAPHORE_ID s_voiceRdSema;
+-ZOSS_SEMAPHORE_ID s_voiceWrSema;
+-void voiceTimerCallBack(SINT32 para)
++extern ZOSS_TIMER_ID s_voiceTimerId ;
++extern ZOSS_SEMAPHORE_ID s_voiceRdSema;
++extern ZOSS_SEMAPHORE_ID s_voiceWrSema;
++static void voiceTimerCallBack(SINT32 para)
+ {
+ // complete_all(&s_voice_completion);
+ zOss_PutSemaphore(s_voiceWrSema);
+@@ -476,7 +563,7 @@
+
+ #endif
+
+-SINT32 vp_rxsem_count_Init(void)
++static SINT32 vp_rxsem_count_Init(void)
+ {
+ UINT32 i = 0;
+ UINT32 semCount = 0;
+@@ -495,7 +582,7 @@
+ return DRV_SUCCESS;
+ }
+
+-SINT32 vp_txsem_count_Init(void)
++static SINT32 vp_txsem_count_Init(void)
+ {
+ UINT32 i = 0;
+ UINT32 semCount = 0;
+@@ -522,6 +609,7 @@
+ #endif
+
+
++
+ #ifdef ECALL_SUPPORT
+ int eWrErr = 0;
+ UINT8 e_reg_flag = 0;
+@@ -533,6 +621,7 @@
+ T_Ecall_State preEcallRxSta = 0;
+ T_Ecall_State preEcallTxSta = 0;
+
++
+ //tx
+ SINT32 rdsem_count_Init(T_Sem_Owner owner)
+ {
+@@ -706,7 +795,7 @@
+
+ e_startCount = 0;
+ e_stopCount = 0;
+- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "ecall_Open end!\n");
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "ecall_Open bufsize=%d end!\n",bufsize);
+
+ return DRV_SUCCESS;
+
+@@ -758,7 +847,7 @@
+ {
+ SINT32 ret = DRV_SUCCESS;
+
+- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "%s start e_startCount=%d \n",__FUNCTION__,e_startCount);
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "%s: start e_startCount=%d \n",__FUNCTION__,e_startCount);
+ if(g_voiceVar.ecallData.ecallSta == ECALL_ST_START)
+ {
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "ecall_Start repeat ecallSta=%d\n",g_voiceVar.ecallData.ecallSta);
+@@ -785,7 +874,7 @@
+ SINT32 ecall_Stop(VOID)
+ {
+ SINT32 ret = DRV_SUCCESS;
+- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "%s start e_stopCount=%d \n",__FUNCTION__,e_stopCount);
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "%s: start e_stopCount=%d \n",__FUNCTION__,e_stopCount);
+
+ if((g_voiceVar.ecallData.ecallSta == ECALL_ST_STOP)||(g_voiceVar.ecallData.ecallSta == ECALL_ST_CLOSE))
+ {
+@@ -833,7 +922,7 @@
+ {
+ if(dir == DIR_RX)
+ {
+-
++
+ preEcallRxSta = g_voiceVar.ecallData.ecallRxSta;
+ g_voiceVar.ecallData.ecallRxSta = ECALL_ST_RX_INUSE;
+ //zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "update_ecall_state rx state change to ecallRxSta = %d\n", g_voiceVar.ecallData.ecallRxSta);
+@@ -964,9 +1053,15 @@
+ return DRV_SUCCESS;
+ }
+
++
+ SINT32 zDrvExtAudio_Open(T_ZDrvI2s_TransMode i2sTransMode)
+ {
++
+ int ret = 0;
++ if (g_voiceVar.useVoiceBuffer == 1){
++ return ret;
++ }
++
+ #ifdef CONFIG_VOICE_BUFFER_DRV
+ #else
+ if (g_voiceVar.g_isUseTdm != 1)
+@@ -984,6 +1079,9 @@
+ SINT32 zDrvExtAudio_Reset()
+ {
+ int ret = 0;
++ if (g_voiceVar.useVoiceBuffer == 1){
++ return ret;
++ }
+ #ifdef CONFIG_VOICE_BUFFER_DRV
+ #else
+ if (g_voiceVar.g_isUseTdm != 1)
+@@ -1000,6 +1098,9 @@
+ SINT32 zDrvExtAudio_Close()
+ {
+ int ret = 0;
++ if (g_voiceVar.useVoiceBuffer == 1){
++ return ret;
++ }
+ #ifdef CONFIG_VOICE_BUFFER_DRV
+ #else
+ if (g_voiceVar.g_isUseTdm != 1)
+@@ -1017,6 +1118,9 @@
+ SINT32 zDrvExtAudio_Write_Prepare(T_ZDrvI2S_Cfg *i2sCfg, T_ZDrvTdm_Cfg *tdmCfg)
+ {
+ int ret = 0;
++ if (g_voiceVar.useVoiceBuffer == 1){
++ return ret;
++ }
+ #ifdef CONFIG_VOICE_BUFFER_DRV
+ #else
+ if (g_voiceVar.g_isUseTdm != 1)
+@@ -1035,6 +1139,9 @@
+ T_ZDrvTdm_Params *tdmParams, T_ZDrvTdm_Cfg *tdmCfg)
+ {
+ int ret = 0;
++ if (g_voiceVar.useVoiceBuffer == 1){
++ return ret;
++ }
+ #ifdef CONFIG_VOICE_BUFFER_DRV
+ #else
+ if (g_voiceVar.g_isUseTdm != 1)
+@@ -1052,6 +1159,9 @@
+ T_ZDrvTdm_Params *tdmParams, T_ZDrvTdm_Cfg *tdmCfg)
+ {
+ int ret = 0;
++ if (g_voiceVar.useVoiceBuffer == 1){
++ return ret;
++ }
+ #ifdef CONFIG_VOICE_BUFFER_DRV
+ #else
+ if (g_voiceVar.g_isUseTdm != 1)
+@@ -1068,6 +1178,9 @@
+ SINT32 zDrvExtAudio_Read_Prepare(T_ZDrvI2S_Cfg *i2sCfg, T_ZDrvTdm_Cfg *tdmCfg)
+ {
+ int ret = 0;
++ if (g_voiceVar.useVoiceBuffer == 1){
++ return ret;
++ }
+ #ifdef CONFIG_VOICE_BUFFER_DRV
+ #else
+ if (g_voiceVar.g_isUseTdm != 1)
+@@ -1086,6 +1199,9 @@
+ T_ZDrvTdm_Params *tdmParams, T_ZDrvTdm_Cfg *tdmCfg)
+ {
+ int ret = 0;
++ if (g_voiceVar.useVoiceBuffer == 1){
++ return ret;
++ }
+ #ifdef CONFIG_VOICE_BUFFER_DRV
+ #else
+ if (g_voiceVar.g_isUseTdm != 1)
+@@ -1103,6 +1219,9 @@
+ T_ZDrvTdm_Params *tdmParams, T_ZDrvTdm_Cfg *tdmCfg)
+ {
+ int ret = 0;
++ if (g_voiceVar.useVoiceBuffer == 1){
++ return ret;
++ }
+ #ifdef CONFIG_VOICE_BUFFER_DRV
+ #else
+ if (g_voiceVar.g_isUseTdm != 1)
+@@ -1119,6 +1238,9 @@
+ SINT32 zDrvExtAudio_Write(const UINT8 *pBuf, UINT32 uiLen)
+ {
+ int ret = 0;
++ if (g_voiceVar.useVoiceBuffer == 1){
++ return ret;
++ }
+ #ifdef CONFIG_VOICE_BUFFER_DRV
+ #else
+ if (g_voiceVar.g_isUseTdm != 1)
+@@ -1136,6 +1258,9 @@
+ SINT32 zDrvExtAudio_Read(const UINT8 **pBuf, UINT32 *uiLen)
+ {
+ int ret = 0;
++ if (g_voiceVar.useVoiceBuffer == 1){
++ return ret;
++ }
+ #ifdef CONFIG_VOICE_BUFFER_DRV
+ #else
+ if (g_voiceVar.g_isUseTdm != 1)
+@@ -1195,9 +1320,13 @@
+ return ret;
+ }
+ #endif
++
+ SINT32 zDrvExtAudio_Write_Stop()
+ {
+ int ret = 0;
++ if (g_voiceVar.useVoiceBuffer == 1){
++ return ret;
++ }
+ #ifdef CONFIG_VOICE_BUFFER_DRV
+ #else
+ if (g_voiceVar.g_isUseTdm != 1)
+@@ -1215,6 +1344,9 @@
+ SINT32 zDrvExtAudio_Read_Stop()
+ {
+ int ret = 0;
++ if (g_voiceVar.useVoiceBuffer == 1){
++ return ret;
++ }
+ #ifdef CONFIG_VOICE_BUFFER_DRV
+ #else
+ if (g_voiceVar.g_isUseTdm != 1)
+@@ -1232,6 +1364,9 @@
+ SINT32 zDrvExtAudio_GetBuf(UINT8 **pBuf, UINT32 *uiLen)
+ {
+ int ret = 0;
++ if (g_voiceVar.useVoiceBuffer == 1){
++ return ret;
++ }
+ #ifdef CONFIG_VOICE_BUFFER_DRV
+ #else
+ if (g_voiceVar.g_isUseTdm != 1)
+@@ -1263,6 +1398,9 @@
+ SINT32 zDrvExtAudio_FreeBuf(UINT8 *pBuf)
+ {
+ int ret = 0;
++ if (g_voiceVar.useVoiceBuffer == 1){
++ return ret;
++ }
+ #ifdef CONFIG_VOICE_BUFFER_DRV
+ #else
+ if (g_voiceVar.g_isUseTdm != 1)
+@@ -1279,6 +1417,10 @@
+
+ void zDrvExtAudio_RlsAllSemaBeforeStop(void)
+ {
++ if (g_voiceVar.useVoiceBuffer == 1){
++ return;
++ }
++
+ #ifdef CONFIG_VOICE_BUFFER_DRV
+ #else
+ if (g_voiceVar.g_isUseTdm == 1)
+@@ -1296,6 +1438,10 @@
+
+ void zDrvExtAudio_RxRlsSemaBeforeStop(void)
+ {
++ if (g_voiceVar.useVoiceBuffer == 1){
++ return;
++ }
++
+ #ifdef CONFIG_VOICE_BUFFER_DRV
+ #else
+ if (g_voiceVar.g_isUseTdm == 1)
+@@ -1311,6 +1457,10 @@
+
+ void zDrvExtAudio_TxRlsSemaBeforeStop(void)
+ {
++ if (g_voiceVar.useVoiceBuffer == 1){
++ return;
++ }
++
+ #ifdef CONFIG_VOICE_BUFFER_DRV
+ #else
+ if (g_voiceVar.g_isUseTdm == 1)
+@@ -1595,7 +1745,19 @@
+
+ ext_aRdCount = 0;
+ ext_aRdFBufCount = 0;
++
++
+
++ if (g_voiceVar.useVoiceBuffer == 1)
++ {
++ ret = vp_Open_Vbuffer();
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_Open_Vbuffer ret=%d!\n",ret);
++ }
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_Open_Vbuffer useVoiceBuffer=%d voiceBufferType=%d!\n",g_voiceVar.useVoiceBuffer,g_voiceVar.voiceBufferType);
++
++
++
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_Open end!\n");
+
+ return DRV_SUCCESS;
+
+@@ -2282,7 +2444,7 @@
+ ret = ecall_Close();
+ if (ret != DRV_SUCCESS)
+ {
+- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "ecall_Open error,ret=%d", ret);
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "%s:ecall_Close error,ret=%d",__func__,ret);
+ }
+ e_reg_flag = 0;
+ }
+@@ -2305,6 +2467,12 @@
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "%s: timer_cb_count %d,first_full_flag %d,first_empty_flag %d,vb_read_count %d,vb_write_count %d!\n",__FUNCTION__,timer_cb_count,first_full_flag,first_empty_flag,vb_read_count,vb_write_count);
+ #endif
+
++ if(g_voiceVar.useVoiceBuffer == 1)
++ {
++ ret = vp_Close_Vbuffer();
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_Close_Vbuffer ret=%d!\n",ret);
++
++ }
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "%s: ext_aRdCount %d,ext_aRdFBufCount %d!\n",__FUNCTION__,ext_aRdCount,ext_aRdFBufCount);
+
+
+@@ -2337,176 +2505,185 @@
+ // {
+ // zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "is the i2s loopback mode");
+ // }
++
++ if (g_voiceVar.useVoiceBuffer == 1)
++ {
++ ret = vp_VoiceI2sStart_Vbuffer();
++ }
++ else
++ {
++
+ #ifdef CONFIG_VOICE_BUFFER_DRV
+- ret = zDrvI2S_Read_Start(I2S_2, &s_speechState.i2sReadParam, s_vpState.pVpInnerI2sCfg);
+- if (ret != DRV_SUCCESS)
+- {
+- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "zDrvI2S2_Read_Start failed ret is %d .\n", ret);
+- return DRV_ERROR;
+- }
+-
+- zOss_StartTimer(s_voiceTimerId, 20, voiceTimerCallBack, 0);
+- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart VB zOss_StartTimer\n");
++ ret = zDrvI2S_Read_Start(I2S_2, &s_speechState.i2sReadParam, s_vpState.pVpInnerI2sCfg);
++ if (ret != DRV_SUCCESS)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "zDrvI2S2_Read_Start failed ret is %d .\n", ret);
++ return DRV_ERROR;
++ }
++
++ zOss_StartTimer(s_voiceTimerId, 20, voiceTimerCallBack, 0);
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart VB zOss_StartTimer\n");
+
+- ret = zDrvI2S_Write_Start(I2S_2, &s_speechState.i2sWriteParam, s_vpState.pVpInnerI2sCfg);
++ ret = zDrvI2S_Write_Start(I2S_2, &s_speechState.i2sWriteParam, s_vpState.pVpInnerI2sCfg);
+
+- ret += zDrvI2S_GetBuf(I2S_2, &write_buf, &write_len);
+- if (ret != DRV_SUCCESS)
+- {
+- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart error7:zDrvI2S_GetBuf I2S_2 ret=%d", ret);
+- return DRV_ERROR;
+- }
+- zOss_Memset(write_buf, 0, write_len);
+- ret = zDrvI2S_Write(I2S_2, write_buf, write_len);
+- if (ret != DRV_SUCCESS)
+- {
+- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart error12:zDrvI2S_Write I2S_2 ret=%d", ret);
+- }
+-
+- ret += zDrvI2S_GetBuf(I2S_2, &write_buf, &write_len);
+- if (ret != DRV_SUCCESS)
+- {
+- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart error13:zDrvI2S_GetBuf I2S_2 ret=%d", ret);
+- return DRV_ERROR;
+- }
+- zOss_Memset(write_buf, 0, write_len);
+- ret = zDrvI2S_Write(I2S_2, write_buf, write_len);
+- if (ret != DRV_SUCCESS)
+- {
+- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart error14:zDrvI2S_Write I2S_2 ret=%d", ret);
+- }
++ ret += zDrvI2S_GetBuf(I2S_2, &write_buf, &write_len);
++ if (ret != DRV_SUCCESS)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart error7:zDrvI2S_GetBuf I2S_2 ret=%d", ret);
++ return DRV_ERROR;
++ }
++ zOss_Memset(write_buf, 0, write_len);
++ ret = zDrvI2S_Write(I2S_2, write_buf, write_len);
++ if (ret != DRV_SUCCESS)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart error12:zDrvI2S_Write I2S_2 ret=%d", ret);
++ }
++
++ ret += zDrvI2S_GetBuf(I2S_2, &write_buf, &write_len);
++ if (ret != DRV_SUCCESS)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart error13:zDrvI2S_GetBuf I2S_2 ret=%d", ret);
++ return DRV_ERROR;
++ }
++ zOss_Memset(write_buf, 0, write_len);
++ ret = zDrvI2S_Write(I2S_2, write_buf, write_len);
++ if (ret != DRV_SUCCESS)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart error14:zDrvI2S_Write I2S_2 ret=%d", ret);
++ }
+ #ifdef _VBUFF_IN_MULTI_CORE
+- voice_buffer_write(s_speechState.pVpTempRxOutPutBuffer, s_speechState.totalFrameBufSize);
++ voice_buffer_write(s_speechState.pVpTempRxOutPutBuffer, s_speechState.totalFrameBufSize);
+
+ #else
+- voicebuffer_dlqueue_write(s_speechState.pVpTempRxOutPutBuffer, s_speechState.totalFrameBufSize);
++ voicebuffer_dlqueue_write(s_speechState.pVpTempRxOutPutBuffer, s_speechState.totalFrameBufSize);
+ #endif
+ #else
+- if (g_voiceVar.isUseSlicCodec == 1)
+- {
+-
+- if (s_speechState.i2sIsRstFlag == FALSE)
++ if (g_voiceVar.isUseSlicCodec == 1)
+ {
+- ret = zDrvExtAudio_Reset();
+- if (ret != DRV_SUCCESS)
++
++ if (s_speechState.i2sIsRstFlag == FALSE)
+ {
+- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart zDrvExtAudio_Reset() err ret=%d ", ret);
+- return DRV_ERROR;
++ ret = zDrvExtAudio_Reset();
++ if (ret != DRV_SUCCESS)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart zDrvExtAudio_Reset() err ret=%d ", ret);
++ return DRV_ERROR;
++ }
++ s_speechState.i2sIsRstFlag = TRUE;
+ }
+- s_speechState.i2sIsRstFlag = TRUE;
++
+ }
+
+- }
++ ret = zDrvI2S_Read_Start(I2S_2, &s_speechState.i2sReadParam, s_vpState.pVpInnerI2sCfg);
++ if (ret != DRV_SUCCESS)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "zDrvI2S2_Read_Start failed ret is %d .\n", ret);
++ return DRV_ERROR;
++ }
+
+- ret = zDrvI2S_Read_Start(I2S_2, &s_speechState.i2sReadParam, s_vpState.pVpInnerI2sCfg);
+- if (ret != DRV_SUCCESS)
+- {
+- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "zDrvI2S2_Read_Start failed ret is %d .\n", ret);
+- return DRV_ERROR;
+- }
++ ret += zDrvExtAudio_Read_Start(&s_speechState.i2sReadParam, s_speechState.pVpI2sCfg, &s_vpTdmReadParam, s_vpState.pVpTdmCfg);
+
+- ret += zDrvExtAudio_Read_Start(&s_speechState.i2sReadParam, s_speechState.pVpI2sCfg, &s_vpTdmReadParam, s_vpState.pVpTdmCfg);
++ if (ret != DRV_SUCCESS)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "zDrvI2S1_Read_Start failed ret is %d .\n", ret);
++ zDrvI2S_Read_Stop(I2S_2);
++ return DRV_ERROR;
++ }
+
+- if (ret != DRV_SUCCESS)
+- {
+- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "zDrvI2S1_Read_Start failed ret is %d .\n", ret);
+- zDrvI2S_Read_Stop(I2S_2);
+- return DRV_ERROR;
+- }
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart zDrvI2S_Read_Start ret=%d", ret);
+
+- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart zDrvI2S_Read_Start ret=%d", ret);
++ ret = zDrvI2S_Read(I2S_2, &read_buf, &read_len);
++ if (ret != DRV_SUCCESS)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart error:zDrvI2S_Read I2S_2 ret=%d", ret);
++ return DRV_ERROR;
++ }
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart zDrvI2S_Read I2S_2 ret=%d", ret);
+
+- ret = zDrvI2S_Read(I2S_2, &read_buf, &read_len);
+- if (ret != DRV_SUCCESS)
+- {
+- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart error:zDrvI2S_Read I2S_2 ret=%d", ret);
+- return DRV_ERROR;
+- }
+- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart zDrvI2S_Read I2S_2 ret=%d", ret);
++ ret = zDrvExtAudio_Read(&read_buf, &read_len);
++ if (ret != DRV_SUCCESS)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart error:zDrvI2S_Read ret=%d", ret);
++ return DRV_ERROR;
++ }
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart zDrvI2S_Read I2S_1 ret=%d", ret);
+
+- ret = zDrvExtAudio_Read(&read_buf, &read_len);
+- if (ret != DRV_SUCCESS)
+- {
+- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart error:zDrvI2S_Read ret=%d", ret);
+- return DRV_ERROR;
+- }
+- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart zDrvI2S_Read I2S_1 ret=%d", ret);
++ ret += zDrvExtAudio_Read_Stop();
++ ret += zDrvI2S_Read_Stop(I2S_2);
++ if (ret != DRV_SUCCESS)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart error:zDrvI2S_Read ret=%d", ret);
++ return DRV_ERROR;
++ }
+
+- ret += zDrvExtAudio_Read_Stop();
+- ret += zDrvI2S_Read_Stop(I2S_2);
+- if (ret != DRV_SUCCESS)
+- {
+- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart error:zDrvI2S_Read ret=%d", ret);
+- return DRV_ERROR;
+- }
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart first read/write stop ret=%d", ret);
+
+- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart first read/write stop ret=%d", ret);
++ ret += zDrvExtAudio_Read_Start(&s_speechState.i2sReadParam, s_speechState.pVpI2sCfg, &s_vpTdmReadParam, s_vpState.pVpTdmCfg);
+
+- ret += zDrvExtAudio_Read_Start(&s_speechState.i2sReadParam, s_speechState.pVpI2sCfg, &s_vpTdmReadParam, s_vpState.pVpTdmCfg);
++ ret += zDrvI2S_Read_Start(I2S_2, &s_speechState.i2sReadParam, s_vpState.pVpInnerI2sCfg);
+
+- ret += zDrvI2S_Read_Start(I2S_2, &s_speechState.i2sReadParam, s_vpState.pVpInnerI2sCfg);
++ ret += zDrvExtAudio_Write_Start(&s_speechState.i2sWriteParam, s_speechState.pVpI2sCfg, &s_VpTdmWriteParam, s_vpState.pVpTdmCfg);
++ if (ret != DRV_SUCCESS)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart error4:zDrvI2S_Write_Start ret=%d", ret);
++ return DRV_ERROR;
++ }
++ ret += zDrvExtAudio_GetBuf(&write_buf, &write_len);
++ if (ret != DRV_SUCCESS)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart error5:zDrvI2S_GetBuf ret=%d", ret);
++ return DRV_ERROR;
++ }
+
+- ret += zDrvExtAudio_Write_Start(&s_speechState.i2sWriteParam, s_speechState.pVpI2sCfg, &s_VpTdmWriteParam, s_vpState.pVpTdmCfg);
+- if (ret != DRV_SUCCESS)
+- {
+- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart error4:zDrvI2S_Write_Start ret=%d", ret);
+- return DRV_ERROR;
+- }
+- ret += zDrvExtAudio_GetBuf(&write_buf, &write_len);
+- if (ret != DRV_SUCCESS)
+- {
+- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart error5:zDrvI2S_GetBuf ret=%d", ret);
+- return DRV_ERROR;
+- }
+-
+- zOss_Memset(write_buf, 0, write_len);
+- ret += zDrvExtAudio_Write(write_buf, write_len);
+- if (ret != DRV_SUCCESS)
+- {
+- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart error6:zDrvI2S_Write ret=%d", ret);
+- return DRV_ERROR;
+- }
+- ret = zDrvI2S_Write_Start(I2S_2, &s_speechState.i2sWriteParam, s_vpState.pVpInnerI2sCfg);
+- ret += zDrvI2S_GetBuf(I2S_2, &write_buf, &write_len);
+- if (ret != DRV_SUCCESS)
+- {
+- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart error7:zDrvI2S_GetBuf I2S_2 ret=%d", ret);
+- return DRV_ERROR;
+- }
+- zOss_Memset(write_buf, 0, write_len);
+- ret = zDrvI2S_Write(I2S_2, write_buf, write_len);
+- if (ret != DRV_SUCCESS)
+- {
+- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart error8:zDrvI2S_Write I2S_2 ret=%d", ret);
+- return DRV_ERROR;
+- }
+- ret += zDrvExtAudio_GetBuf(&write_buf, &write_len);
+- if (ret != DRV_SUCCESS)
+- {
+- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart error9:zDrvI2S_GetBuf ret=%d", ret);
+- return DRV_ERROR;
+- }
+- zOss_Memset(write_buf, 0, write_len);
+- ret += zDrvExtAudio_Write(write_buf, write_len);
+- if (ret != DRV_SUCCESS)
+- {
+- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart error10:zDrvI2S_Write ret=%d", ret);
+- return DRV_ERROR;
+- }
+- ret += zDrvI2S_GetBuf(I2S_2, &write_buf, &write_len);
+- if (ret != DRV_SUCCESS)
+- {
+- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart error11:zDrvI2S_GetBuf I2S_2 ret=%d", ret);
+- return DRV_ERROR;
+- }
+- zOss_Memset(write_buf, 0, write_len);
+- ret = zDrvI2S_Write(I2S_2, write_buf, write_len);
+- if (ret != DRV_SUCCESS)
+- {
+- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart error12:zDrvI2S_Write I2S_2 ret=%d", ret);
+- }
++ zOss_Memset(write_buf, 0, write_len);
++ ret += zDrvExtAudio_Write(write_buf, write_len);
++ if (ret != DRV_SUCCESS)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart error6:zDrvI2S_Write ret=%d", ret);
++ return DRV_ERROR;
++ }
++ ret = zDrvI2S_Write_Start(I2S_2, &s_speechState.i2sWriteParam, s_vpState.pVpInnerI2sCfg);
++ ret += zDrvI2S_GetBuf(I2S_2, &write_buf, &write_len);
++ if (ret != DRV_SUCCESS)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart error7:zDrvI2S_GetBuf I2S_2 ret=%d", ret);
++ return DRV_ERROR;
++ }
++ zOss_Memset(write_buf, 0, write_len);
++ ret = zDrvI2S_Write(I2S_2, write_buf, write_len);
++ if (ret != DRV_SUCCESS)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart error8:zDrvI2S_Write I2S_2 ret=%d", ret);
++ return DRV_ERROR;
++ }
++ ret += zDrvExtAudio_GetBuf(&write_buf, &write_len);
++ if (ret != DRV_SUCCESS)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart error9:zDrvI2S_GetBuf ret=%d", ret);
++ return DRV_ERROR;
++ }
++ zOss_Memset(write_buf, 0, write_len);
++ ret += zDrvExtAudio_Write(write_buf, write_len);
++ if (ret != DRV_SUCCESS)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart error10:zDrvI2S_Write ret=%d", ret);
++ return DRV_ERROR;
++ }
++ ret += zDrvI2S_GetBuf(I2S_2, &write_buf, &write_len);
++ if (ret != DRV_SUCCESS)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart error11:zDrvI2S_GetBuf I2S_2 ret=%d", ret);
++ return DRV_ERROR;
++ }
++ zOss_Memset(write_buf, 0, write_len);
++ ret = zDrvI2S_Write(I2S_2, write_buf, write_len);
++ if (ret != DRV_SUCCESS)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VoiceI2sStart error12:zDrvI2S_Write I2S_2 ret=%d", ret);
++ }
+
+ #endif
++ }
+ #ifdef ECALL_SUPPORT
+ if((g_voiceVar.audio_ctrlFlag.isUseEcall == 1)&&(e_reg_flag == 1))
+ {
+@@ -2657,18 +2834,27 @@
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "zDrvVp_VoiceWorkStop call voice_ToneMixerStop !\n");
+
+ g_voiceVar.vpI2sStatus = VP_I2S_OPEN;
+-#ifdef CONFIG_VOICE_BUFFER_DRV
+- //complete_all(&s_voice_completion);
+- zOss_PutSemaphore(s_voiceRdSema);
+- zOss_PutSemaphore(s_voiceWrSema);
+- zOss_StopTimer(s_voiceTimerId);
+- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "zDrvVp_VoiceWorkStop zOss_StopTimer\n");
+-#else
+- //zDrvI2s_RxRlsSemaBeforeStop(I2S_1);
+- //zDrvI2s_TxRlsSemaBeforeStop(I2S_1);
+- zDrvExtAudio_RlsAllSemaBeforeStop();
+-#endif
++
+
++
++ if (g_voiceVar.useVoiceBuffer == 1)
++ {
++ ret = zDrvVp_VoiceWorkStop_Vbuffer();
++ }
++ else
++ {
++#ifdef CONFIG_VOICE_BUFFER_DRV
++ //complete_all(&s_voice_completion);
++ zOss_PutSemaphore(s_voiceRdSema);
++ zOss_PutSemaphore(s_voiceWrSema);
++ zOss_StopTimer(s_voiceTimerId);
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "zDrvVp_VoiceWorkStop zOss_StopTimer\n");
++#else
++ //zDrvI2s_RxRlsSemaBeforeStop(I2S_1);
++ //zDrvI2s_TxRlsSemaBeforeStop(I2S_1);
++ zDrvExtAudio_RlsAllSemaBeforeStop();
++#endif
++ }
+ zDrvI2s_RxRlsSemaBeforeStop(I2S_2);
+ zDrvI2s_TxRlsSemaBeforeStop(I2S_2);
+
+@@ -2736,10 +2922,19 @@
+ }
+
+ g_voiceVar.vpI2sStatus = VP_I2S_INUSE;
++
++
++ if (g_voiceVar.useVoiceBuffer == 1)
++ {
++ ret = vp_VolteReadStart_Vbuffer();
++ }
++ else
++ {
+ #ifdef CONFIG_VOICE_BUFFER_DRV
+- zOss_StartTimer(s_voiceTimerId, 20, voiceTimerCallBack, 0);
+- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VolteReadStart zOss_StartTimer start\n");
+-#endif
++ zOss_StartTimer(s_voiceTimerId, 20, voiceTimerCallBack, 0);
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VolteReadStart zOss_StartTimer start\n");
++#endif
++ }
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VolteReadStart \n");
+
+ return DRV_SUCCESS;
+@@ -2748,6 +2943,15 @@
+ SINT32 vp_VolteReadStop(VOID)
+ {
+ SINT32 ret = DRV_SUCCESS;
++
++
++ if (g_voiceVar.useVoiceBuffer == 1)
++ {
++ ret = vp_VolteReadStop_Vbuffer();
++ return ret;
++ }
++
++
+ #ifdef CONFIG_VOICE_BUFFER_DRV
+ zOss_PutSemaphore(s_voiceRdSema);
+ #else
+@@ -2844,46 +3048,54 @@
+ }
+
+ g_voiceVar.vpI2sStatus = VP_I2S_INUSE;
++
++ if (g_voiceVar.useVoiceBuffer == 1)
++ {
++ vp_VolteWriteStart_Vbuffer();
++ }
++ else
++ {
+ #ifdef CONFIG_VOICE_BUFFER_DRV
+ #ifdef _VBUFF_IN_MULTI_CORE
+- voice_buffer_write(s_speechState.pVpTempRxOutPutBuffer, s_speechState.totalFrameBufSize);
++ voice_buffer_write(s_speechState.pVpTempRxOutPutBuffer, s_speechState.totalFrameBufSize);
+
+ #else
+- voicebuffer_dlqueue_write(s_speechState.pVpTempRxOutPutBuffer, s_speechState.totalFrameBufSize);
++ voicebuffer_dlqueue_write(s_speechState.pVpTempRxOutPutBuffer, s_speechState.totalFrameBufSize);
+ #endif
+ #else
+- ret = zDrvExtAudio_GetBuf(&write_buf, &write_len);
+- if (ret != DRV_SUCCESS)
+- {
+- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VolteWriteStart error1:zDrvI2S_GetBuf I2S_1 ret=%d", ret);
+- zDrvExtAudio_Write_Stop();
+- return DRV_ERROR;
+- }
+- zOss_Memset(write_buf, 0, write_len);
+- ret = zDrvExtAudio_Write(write_buf, write_len);
+- if (ret != DRV_SUCCESS)
+- {
+- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VolteWriteStart error2:zDrvI2S_Write I2S_1 ret=%d", ret);
+- zDrvExtAudio_Write_Stop();
+- return DRV_ERROR;
+- }
+- ret = zDrvExtAudio_GetBuf(&write_buf, &write_len);
+- if (ret != DRV_SUCCESS)
+- {
+- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VolteWriteStart error3:zDrvI2S_GetBuf I2S_1 ret=%d", ret);
+- zDrvExtAudio_Write_Stop();
+- return DRV_ERROR;
+- }
+- zOss_Memset(write_buf, 0, write_len);
+- ret = zDrvExtAudio_Write(write_buf, write_len);
+- if (ret != DRV_SUCCESS)
+- {
+- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VolteWriteStart error4:zDrvI2S_Write I2S_1 ret=%d", ret);
+- zDrvExtAudio_Write_Stop();
+- return DRV_ERROR;
+- }
++ ret = zDrvExtAudio_GetBuf(&write_buf, &write_len);
++ if (ret != DRV_SUCCESS)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VolteWriteStart error1:zDrvI2S_GetBuf I2S_1 ret=%d", ret);
++ zDrvExtAudio_Write_Stop();
++ return DRV_ERROR;
++ }
++ zOss_Memset(write_buf, 0, write_len);
++ ret = zDrvExtAudio_Write(write_buf, write_len);
++ if (ret != DRV_SUCCESS)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VolteWriteStart error2:zDrvI2S_Write I2S_1 ret=%d", ret);
++ zDrvExtAudio_Write_Stop();
++ return DRV_ERROR;
++ }
++ ret = zDrvExtAudio_GetBuf(&write_buf, &write_len);
++ if (ret != DRV_SUCCESS)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VolteWriteStart error3:zDrvI2S_GetBuf I2S_1 ret=%d", ret);
++ zDrvExtAudio_Write_Stop();
++ return DRV_ERROR;
++ }
++ zOss_Memset(write_buf, 0, write_len);
++ ret = zDrvExtAudio_Write(write_buf, write_len);
++ if (ret != DRV_SUCCESS)
++ {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VolteWriteStart error4:zDrvI2S_Write I2S_1 ret=%d", ret);
++ zDrvExtAudio_Write_Stop();
++ return DRV_ERROR;
++ }
+ #endif
+- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VolteWriteStart \n");
++ }
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_VolteWriteStart end\n");
+
+ return DRV_SUCCESS;
+ }
+@@ -2891,6 +3103,13 @@
+ SINT32 vp_VolteWriteStop(VOID)
+ {
+ SINT32 ret = DRV_SUCCESS;
++ if (g_voiceVar.useVoiceBuffer == 1)
++ {
++ ret = vp_VolteWriteStop_Vbuffer();
++ return ret;
++ }
++
++
+
+ #ifdef CONFIG_VOICE_BUFFER_DRV
+ //complete_all(&s_voice_completion);
+@@ -2961,6 +3180,11 @@
+ //UINT8 *pVoiceTempBuf = s_voiceTempBuffer;
+ #endif
+
++ if (g_voiceVar.useVoiceBuffer == 1)
++ {
++ ret = vp_WriteDataToCodec_Vbuffer(pBuf, count);
++ return ret;
++ }
+
+
+ if (pBuf == NULL)
+@@ -3285,6 +3509,14 @@
+ UINT8 *ptemp8bit = NULL;
+ #endif
+
++ if (g_voiceVar.useVoiceBuffer == 1)
++ {
++ ret = vp_ReadDataFromCodec_Vbuffer(pBuf, count);
++ return ret;
++ }
++
++
++
+ if (pBuf == NULL)
+ {
+ return DRV_ERR_INVALID_PARAM;
+@@ -3313,6 +3545,8 @@
+ // wait_for_completion_timeout(&s_voice_completion, 60);
+ zOss_GetSemaphore(s_voiceRdSema, 60);
+ #ifdef _VBUFF_IN_MULTI_CORE
++
++
+ voice_buffer_read(s_speechState.pVpTempTxInBuffer, s_speechState.totalFrameBufSize);
+
+ #else
+@@ -3911,11 +4145,14 @@
+
+ SINT32 vp_CreateThreadSemaph(VOID)
+ {
++ SINT32 ret = 0;
++
+ s_vpState.vpSemaphore = zOss_CreateSemaphore("VpI2sReadWriteSemaphore", 0);
+ #ifdef _USE_WEBRTC_AUD
+ s_vpState.vpThread = zOss_CreateThread("vp_DataProcessThreadEntry", vp_DataProcessThreadEntry, 0, 8192, 15, 0, 1);
+ #else
+- s_vpState.vpThread = zOss_CreateThread("vp_DataProcessThreadEntry", vp_DataProcessThreadEntry, 0, 1024, 15, 0, 1);
++ //s_vpState.vpThread = zOss_CreateThread("vp_DataProcessThreadEntry", vp_DataProcessThreadEntry, 0, 1024, 15, 0, 1);
++ s_vpState.vpThread = zOss_CreateThread("vp_DataProcessThreadEntry", vp_DataProcessThreadEntry, 0, 8192, 15, 0, 1);
+ #endif
+
+ #ifdef _OS_TOS
+@@ -3937,6 +4174,9 @@
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "create vp Thread sem err s_vpState.vpThread=%p,s_vpState.vpSemaphore=%p !\r\n", s_vpState.vpThread, s_vpState.vpSemaphore);
+ return DRV_ERROR;
+ }
++
++
++
+ #ifdef CONFIG_VOICE_BUFFER_DRV
+ // init_completion(&s_voice_completion);
+ s_voiceRdSema = zOss_CreateSemaphore("voice_rx_sem", 0);
+@@ -3959,50 +4199,57 @@
+ return DRV_ERROR;
+ }
+ #ifdef _VBUFF_IN_MULTI_CORE
+- SINT32 ret = 0;
++ //SINT32 ret = 0;
+
+- //ret = zDrvRpMsg_CreateChannel(IPC_MSG_ACTOR_A9,channel_41,0x10);
+- ret = zDrvRpMsg_CreateChannel_Cap(RPMSG_CAP_ID,channel_41,0x10);
++ //ret = zDrvRpMsg_CreateChannel(IPC_MSG_ACTOR_A9,channel_41,0x10);
++ ret = zDrvRpMsg_CreateChannel_Cap(RPMSG_CAP_ID,channel_41,0x10);
+
+- if(DRV_SUCCESS != ret) {
+- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "create rpmsg err(%d) \n",ret);
+- return DRV_ERROR;
+- }
++ if(DRV_SUCCESS != ret) {
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "create rpmsg err(%d) \n",ret);
++ return DRV_ERROR;
++ }
++
++ volatile T_ZDrvRpMsg_Msg icp_pMsg = {0};
++ volatile unsigned int rpMsgBuf[2] = {0,0};
++ //printk( "vir_buf1:0x%x, vir_buf2:0x%x, phy_buf1:0x%x, phy_buf2:0x%x,\n",voice_buff[0],voice_buff[1],rpMsgBuf[0],rpMsgBuf[1]);
++ icp_pMsg.actorID = RPMSG_CAP_ID;
++ icp_pMsg.chID = channel_41;
++ icp_pMsg.flag &= ~RPMSG_READ_POLL;
++ icp_pMsg.buf = rpMsgBuf;
++ icp_pMsg.len = 8;
++ ret = zDrvRpMsg_Read_Cap(&icp_pMsg);
++ if(ret <= 0){
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "voice buffer rpmsg addr read fail,ret=%d \n",ret);
++ zOss_Printf(SUBMDL_HAL, PRINT_LEVEL_NORMAL, "ps voice buffer rpmsg addr read fail,ret=%d \n",ret);
+
+- volatile T_ZDrvRpMsg_Msg icp_pMsg = {0};
+- volatile unsigned int rpMsgBuf[2] = {0,0};
+- //printk( "vir_buf1:0x%x, vir_buf2:0x%x, phy_buf1:0x%x, phy_buf2:0x%x,\n",voice_buff[0],voice_buff[1],rpMsgBuf[0],rpMsgBuf[1]);
+- icp_pMsg.actorID = RPMSG_CAP_ID;
+- icp_pMsg.chID = channel_41;
+- icp_pMsg.flag &= ~RPMSG_READ_POLL;
+- icp_pMsg.buf = rpMsgBuf;
+- icp_pMsg.len = 8;
+- ret = zDrvRpMsg_Read_Cap(&icp_pMsg);
+- if(ret <= 0){
+- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "voice buffer rpmsg addr read fail,ret=%d \n",ret);
+- zOss_Printf(SUBMDL_HAL, PRINT_LEVEL_NORMAL, "ps voice buffer rpmsg addr read fail,ret=%d \n",ret);
+-
+
+- }
+- else{
+- #if 0
++ }
++ else{
++ #if 0
+
+- voice_buff[UP_LINK] = (struct voice_ring_buffer *)(rpMsgBuf[0]);
+- voice_buff[DOWN_LINK] = (struct voice_ring_buffer *)(rpMsgBuf[1]);
+- #else
++ voice_buff[UP_LINK] = (struct voice_ring_buffer *)(rpMsgBuf[0]);
++ voice_buff[DOWN_LINK] = (struct voice_ring_buffer *)(rpMsgBuf[1]);
++ #else
+
+- voice_buff[UP_LINK] = (struct voice_ring_buffer *)ioremap_wc(rpMsgBuf[0], (sizeof(struct voice_ring_buffer) + MAX_BUF_SIZE*MAX_BUF_NUM));
+- voice_buff[DOWN_LINK] = (struct voice_ring_buffer *)ioremap_wc(rpMsgBuf[1],(sizeof(struct voice_ring_buffer) + MAX_BUF_SIZE*MAX_BUF_NUM));
+- #endif
+-
+- zOss_Printf(SUBMDL_HAL, PRINT_LEVEL_NORMAL, "ps rpmsg voice buffer addr,up vir buf=0x%x, down vir buf=0x%x ,up phy buf=0x%x, down phy buf=0x%x,size=%d \n" \
++ voice_buff[UP_LINK] = (struct voice_ring_buffer *)ioremap_wc(rpMsgBuf[0], (sizeof(struct voice_ring_buffer) + MAX_BUF_SIZE*MAX_BUF_NUM));
++ voice_buff[DOWN_LINK] = (struct voice_ring_buffer *)ioremap_wc(rpMsgBuf[1],(sizeof(struct voice_ring_buffer) + MAX_BUF_SIZE*MAX_BUF_NUM));
++ #endif
++
++ zOss_Printf(SUBMDL_HAL, PRINT_LEVEL_NORMAL, "ps rpmsg voice buffer addr,up vir buf=0x%x, down vir buf=0x%x ,up phy buf=0x%x, down phy buf=0x%x,size=%d \n" \
++ ,voice_buff[0],voice_buff[1],rpMsgBuf[0],rpMsgBuf[1],(sizeof(struct voice_ring_buffer) + MAX_BUF_SIZE*MAX_BUF_NUM));
++ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "voice buffer addr,up vir buf=0x%x, down vir buf=0x%x ,up phy buf=0x%x, down phy buf=0x%x,size=%d \n" \
+ ,voice_buff[0],voice_buff[1],rpMsgBuf[0],rpMsgBuf[1],(sizeof(struct voice_ring_buffer) + MAX_BUF_SIZE*MAX_BUF_NUM));
+- zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "voice buffer addr,up vir buf=0x%x, down vir buf=0x%x ,up phy buf=0x%x, down phy buf=0x%x,size=%d \n" \
+- ,voice_buff[0],voice_buff[1],rpMsgBuf[0],rpMsgBuf[1],(sizeof(struct voice_ring_buffer) + MAX_BUF_SIZE*MAX_BUF_NUM));
+- }
++ }
+ #endif
++
++#else
++ //flag ctrl voicebuffer func
++ vp_CreateThreadSemaph_Vbuffer();
++
++
+ #endif
+-
++
++
+ zDrvRamlog_PRINTF(RAMLOG_MOD_AUDIO, "vp_CreateThreadSemaph success. \r\n");
+ return DRV_SUCCESS;
+ }
+diff --git a/Uboot/cp/ps/modem/com/src/appstart/inc/version_number.h b/Uboot/cp/ps/modem/com/src/appstart/inc/version_number.h
+index 072f131..a9ae08f 100755
+--- a/Uboot/cp/ps/modem/com/src/appstart/inc/version_number.h
++++ b/Uboot/cp/ps/modem/com/src/appstart/inc/version_number.h
+@@ -1,9 +1,9 @@
+ #if defined _CHIP_ZX297520
+-#define VERSION_NUMBER "7520SCV2.01.01.02P56U06"
++#define VERSION_NUMBER "7520SCV2.01.01.02P56U09"
+ #endif
+ #if defined _CHIP_ZX297520V2
+-#define VERSION_NUMBER "7520V2SCV2.01.01.02P56U06"
++#define VERSION_NUMBER "7520V2SCV2.01.01.02P56U09"
+ #endif
+ #if defined _CHIP_ZX297520V3
+-#define VERSION_NUMBER "7520V3SCV2.01.01.02P56U06"
++#define VERSION_NUMBER "7520V3SCV2.01.01.02P56U09"
+ #endif
+diff --git a/Uboot/cp/ps/modem/ps/inc/apuiccint.h b/Uboot/cp/ps/modem/ps/inc/apuiccint.h
+index 57d364f..6d07534 100755
+--- a/Uboot/cp/ps/modem/ps/inc/apuiccint.h
++++ b/Uboot/cp/ps/modem/ps/inc/apuiccint.h
+@@ -1614,6 +1614,11 @@
+
+ #define Z_APUICC_EID_LEN (BYTE)10
+
++#define Z_UICC_CARD_READY (BYTE)0
++#define Z_UICC_CARD_PWROFF (BYTE)1
++#define Z_UICC_CARD_REMOVE (BYTE)2
++#define Z_UICC_CARD_ERROR (BYTE)3
++
+ /**************************************************************************
+ * È«¾ÖÊý¾ÝÀàÐͶ¨Òå *
+ **************************************************************************/
+diff --git a/Uboot/cp/ps/modem/ps/inc/atipscom.h b/Uboot/cp/ps/modem/ps/inc/atipscom.h
+index 72560ba..19bf907 100755
+--- a/Uboot/cp/ps/modem/ps/inc/atipscom.h
++++ b/Uboot/cp/ps/modem/ps/inc/atipscom.h
+@@ -429,6 +429,15 @@
+ #define Z_DEV_NV_RAT_VERSION_GSM_PRIORITY (BYTE)3
+ #define Z_DEV_NV_RAT_VERSION_DEFAULT (BYTE)4
+
++/*************************CEER¼Ç¼ģ¿éÃû*******************/
++#define Z_CEER_MM_ID (BYTE)0
++#define Z_CEER_SM_ID (BYTE)1
++#define Z_CEER_UICCMNG_ID (BYTE)2
++#define Z_CEER_ATI_ID (BYTE)3
++#define Z_CEER_CC_ID (BYTE)4
++#define Z_CEER_SMS_ID (BYTE)5
++#define Z_CEER_SS_ID (BYTE)6
++
+ /*V2-V3Ãû×Ö¼æÈÝend*/
+ #define Z_SUBMDL_NUM (BYTE)((SUBMDL_PSEND - SUBMDL_PSBASE) + 1)
+
+diff --git a/Uboot/cp/ps/modem/ps/inc/atipsint.h b/Uboot/cp/ps/modem/ps/inc/atipsint.h
+index 5a79eba..d037340 100755
+--- a/Uboot/cp/ps/modem/ps/inc/atipsint.h
++++ b/Uboot/cp/ps/modem/ps/inc/atipsint.h
+@@ -258,8 +258,14 @@
+ #define Z_ATIUMM_MsgNormalWithNewCell_Err (BYTE)180 //retry upon entry into a new cell
+ #define Z_ATIUMM_UeSecurityCapaMismatch (BYTE)181 //UE security capabilities mismatch
+ #define Z_ATIUMM_Securitymoderejected (BYTE)182 //Security mode rejected, unspecified
+-#define Z_ATIUMM_TemperatureStart (BYTE)183 //οؿªÊ¼
+-#define Z_ATIUMM_TemperatureStop (BYTE)184 //οؽáÊø
++#define Z_ATIUMM_TemperatureStart (BYTE)183 //οؿªÊ¼
++#define Z_ATIUMM_TemperatureStop (BYTE)184 //οؽáÊø
++#define Z_ATIUMM_GsmRfOnFail (BYTE)190 //GSM¿ªÉäÆµÊ§°Ü
++#define Z_ATIUMM_GsmRfOffFail (BYTE)191 //GSM¹ØÉäÆµÊ§°Ü
++#define Z_ATIUMM_WRfOnFail (BYTE)192 //W¿ªÉäÆµÊ§°Ü
++#define Z_ATIUMM_WRfOffFail (BYTE)193 //W¹ØÉäÆµÊ§°Ü
++#define Z_ATIUMM_LteRfOnFail (BYTE)194 //LTE¿ªÉäÆµÊ§°Ü
++#define Z_ATIUMM_LteRfOffFail (BYTE)195 //LTE¹ØÉäÆµÊ§°Ü
+
+ /*============MMÄ£¿éCEER´íÎóÂë=============================== */
+ #define Z_ATIMM_ImsiUnknownInHlr (BYTE)2 //IMSI unknown in HLR
+@@ -315,7 +321,17 @@
+ #define Z_ATIMM_MsgNotCompatProtocolState (BYTE)101 //Message not compatible with protocol state
+ #define Z_ATIMM_ProtocolError (BYTE)111 //Protocol error, unspecified
+
+-#define Z_ATIMM_UnspecifiedFail (BYTE)120 //Unspecified Failure
++#define Z_ATIMM_UnspecifiedFail (BYTE)120 //Unspecified Failure
++#define Z_ATIMM_RrcFailUnspecifiedFail (BYTE)121 //RRCÁ´Â·Ê§°Ü£¬·ÇÌØÊâÔÒò
++
++#define Z_ATIMM_T3210Exipre (BYTE)123 //3210³¬Ê±
++#define Z_ATIMM_T3213Exipre (BYTE)123 //3213³¬Ê±
++#define Z_ATIMM_T3214_16Exipre (BYTE)124 //3214/3216³¬Ê±
++#define Z_ATIMM_T3220Exipre (BYTE)125 //3220³¬Ê±
++#define Z_ATIMM_T3230Exipre (BYTE)126 //3230³¬Ê±
++#define Z_ATIMM_T3225Exipre (BYTE)127 //3225³¬Ê±
++#define Z_ATIMM_T3231Exipre (BYTE)128 //3231³¬Ê±
++#define Z_ATIMM_TwpgrExipre (BYTE)129 //Twpgr³¬Ê±
+
+ /*================ Ë«¿¨Ë«´ýÅжÏÁ½ÕÅ¿¨ÊÇ·ñÐèÒª½»»»===============================*/
+ #define Z_NO_NEED_CHANGE (BYTE)0
+@@ -7674,7 +7690,12 @@
+ BYTE bRxlev; /*LTE Rsrp 0-97 GSM Rxlev 0-64 TD&W Rscp 0-91*/
+ BYTE bBlerFlg; /*ÊÇ·ñ´æÔÚBLERÖµÉϱ¨.bBlerFlg = 1±íʾÓÐÎóÂëÂÊÉϱ¨,bBlerFlg = 0±íʾÎÞÎóÂëÂÊÉϱ¨*/
+ BYTE bBler;
+- BYTE abPadding[3];
++ BYTE bRsrq;/*LTE·þÎñÐ¡ÇøµÄRSRQ,ÎÞЧֵ0xff*/
++ BYTE bSinrInt; /*LTE·þÎñÐ¡ÇøµÄSINRµÄÕûÊýÖµ,ȡֵ·¶Î§0~60; ÕæÊµÖµ»ù´¡ÉϼÓ20;ÕæÊµÖµÈ¡Öµ·¶Î§: -20~40*/
++ BYTE bSinrDec; /*LTE·þÎñÐ¡ÇøµÄSINRȡֵ·¶Î§ 0~9*/
++ BYTE bRssiInt; /*LTE·þÎñÐ¡ÇøµÄRSSIµÄÕûÊýÖµ,ȡֵ·¶Î§0~133,0xffΪÎÞЧֵ; ÕæÊµÖµ»ù´¡ÉϼÓ129;ÕæÊµÖµÈ¡Öµ·¶Î§: -129~-4*/
++ BYTE bEcno; /*W·þÎñÐ¡ÇøµÄECNOµÄ²âÁ¿Öµ,ȡֵ·¶Î§0~49,0xffΪÎÞЧֵ*/
++ BYTE abPadding[2];
+ }T_zMmiaAs_RptRxlev_Ind;
+
+ /*==============================================================================
+@@ -7689,7 +7710,7 @@
+ BYTE bSrcIndex; /* Ô´Ë÷Òý */
+ BYTE bDesIndex; /* Ä¿µÄË÷Òý*/
+ BYTE bAction; /*1:´ò¿ªÐ¡ÇøÐÅÏ¢Ö÷¶¯Éϱ¨£¬0:¹Ø±ÕÐ¡ÇøÐÅÏ¢Ö÷¶¯Éϱ¨*/
+- BYTE bPadding;
++ BYTE bAtType;
+ }T_zMmiaAs_EM_CellInfo_Req;
+
+ /*==============================================================================
+@@ -9040,5 +9061,8 @@
+ extern int get_cid_state(unsigned char cid);
+ extern BYTE zAti_GetS0Value(VOID);
+ extern DWORD zAti_GetUlRateIndTimerVal(BYTE bInsIdx);
++
++extern VOID zAs_AddNasTraceInfo(BYTE bRat, WORD bCeer, BYTE ModeId, BYTE bDomain);
++
+ #endif
+
+diff --git a/Uboot/cp/ps/modem/ps/inc/pstraceint.h b/Uboot/cp/ps/modem/ps/inc/pstraceint.h
+index 5e1b179..35ced57 100755
+--- a/Uboot/cp/ps/modem/ps/inc/pstraceint.h
++++ b/Uboot/cp/ps/modem/ps/inc/pstraceint.h
+@@ -3445,9 +3445,10 @@
+ WORD wDrx; //DRXÖÜÆÚ£¬µ¥Î»ms
+ WORD wTac;
+ WORD wT3412; //T3412¶¨Ê±Æ÷³¤¶È£¬µ¥Î»s
+- WORD wPadding;
++ BYTE bSinrInt; /*·þÎñÐ¡ÇøµÄSINRµÄÕûÊýÖµ,ȡֵ·¶Î§0~60; ÕæÊµÖµ»ù´¡ÉϼÓ20;ÕæÊµÖµÈ¡Öµ·¶Î§: -20~40*/
++ BYTE bSinrDec; /*·þÎñÐ¡ÇøµÄSINRȡֵ·¶Î§ 0~9*/
+ T_zEM_PlmnId tPlmnId; /*µ±Ç°×¤ÁôµÄplmnid*/
+- BYTE bPadding;
++ BYTE bRssiInt; /*·þÎñÐ¡ÇøµÄRSSIµÄÕûÊýÖµ,ȡֵ·¶Î§0~133,0xffΪÎÞЧֵ;ÕæÊµÖµ»ù´¡ÉϼÓ129;ÕæÊµÖµÈ¡Öµ·¶Î§: -129~-4*/
+ }T_zEm_Lte_NasInfo;
+
+ /* QoS Ïà¹ØÐÅÏ¢ */
+@@ -4412,6 +4413,52 @@
+ }uEmInfo;
+ }T_zEM_EmInfo_Ind;
+
++typedef struct {
++ DWORD dwCellId;
++ WORD wLac;
++ BYTE bBer;
++ BYTE bPadding;
++ BYTE bRssi;
++ T_zEM_PlmnId tPlmn;
++}T_zAt_Gsm_SCellInfo;
++
++typedef struct {
++ BYTE bStateInd;
++ T_zEM_PlmnId tPlmn;
++ DWORD dwCellId;
++ WORD wLac;
++ WORD wPsc;
++ BYTE bRscp;
++ BYTE bEcNo;
++ BYTE abPadding[2];
++}T_zAt_W_SCellInfo;
++
++typedef struct {
++ DWORD dwEarfcn;
++ DWORD dwCellId;
++ WORD wPci;
++ WORD wTac;
++ T_zEM_PlmnId tPlmnId;
++ BYTE bScellRsrp; //·þÎñÐ¡Çø²âÁ¿½á¹û
++ BYTE bScellRsrq;
++ BYTE bSinrInt; /*·þÎñÐ¡ÇøµÄSINRµÄÕûÊýÖµ,ȡֵ·¶Î§0~60; ÕæÊµÖµ»ù´¡ÉϼÓ20;ÕæÊµÖµÈ¡Öµ·¶Î§: -20~40*/
++ BYTE bSinrDec; /*·þÎñÐ¡ÇøµÄSINRȡֵ·¶Î§ 0~9*/
++ BYTE bRssiInt; /*·þÎñÐ¡ÇøµÄRSSIµÄÕûÊýÖµ,ȡֵ·¶Î§0~133,0xffΪÎÞЧֵ;ÕæÊµÖµ»ù´¡ÉϼÓ129;ÕæÊµÖµÈ¡Öµ·¶Î§: -129~-4*/
++}T_zAt_Lte_SCellInfo;
++
++typedef struct {
++ BYTE bVersion;
++ BYTE bRatType;/* ÖÆÊ½Ö¸Ê¾£º0x04-GSM¡¢0x01-TDSCDMA¡¢0x02-WCDMA¡¢0x10-LTE¡¢0x20-NRÆäËûÖµ±£Áô*/
++ BYTE bSrcIndex;/*Ô±¾Îªpaddingλ,ÏÖË÷ÒýÖµ·ÅÔÚ´Ë´¦±ÜÃâ¶ÔAP²àµÄʹÓòúÉúÓ°Ïì*/
++ BYTE bDesIndex;
++
++ union{
++ T_zAt_Gsm_SCellInfo tGsmScellInfo;
++ T_zAt_W_SCellInfo tWScellInfo;
++ T_zAt_Lte_SCellInfo tLteScellInfo;
++ }uScellInfo;
++}T_zAt_CellInfo_Ind;
++
+
+ /**************************************************************************
+ * º¯ÊýÀàÐͶ¨Òå *
+diff --git a/Uboot/cp/ps/modem/ps/src/nas/ati/inc/zat_api.h b/Uboot/cp/ps/modem/ps/src/nas/ati/inc/zat_api.h
+index 58bc12f..957fa25 100755
+--- a/Uboot/cp/ps/modem/ps/src/nas/ati/inc/zat_api.h
++++ b/Uboot/cp/ps/modem/ps/src/nas/ati/inc/zat_api.h
+@@ -114,6 +114,7 @@
+ ZAT2_CFG_ZVREG,
+ ZAT2_CFG_ZPOWSTAT,
+ ZAT2_CFG_ZLOWPWR,
++ ZAT2_CFG_ZPSABNORMAL,
+ ZAT2_CFG_END,
+
+ /*-----------MMÄ£¿é-------------*/
+@@ -406,6 +407,8 @@
+ ZAT2_EM_CESQ,
+ ZAT2_EM_ZEMLTEHO,
+ ZAT2_EM_ZLOCKCELL,
++ ZAT2_EM_ZSCIQ,
++ ZAT2_EM_ZSCIND,
+
+ /*-----------USATÄ£¿é--------------*/
+ ZAT2_USAT_ZUEC,
+diff --git a/Uboot/cp/ps/modem/ps/src/nas/ati/inc/zat_fnc.h b/Uboot/cp/ps/modem/ps/src/nas/ati/inc/zat_fnc.h
+index 68e2b53..66c3225 100755
+--- a/Uboot/cp/ps/modem/ps/src/nas/ati/inc/zat_fnc.h
++++ b/Uboot/cp/ps/modem/ps/src/nas/ati/inc/zat_fnc.h
+@@ -1298,6 +1298,7 @@
+ T_ZAt_ParseCmd2MsgRslt zAt_PsDecZpowstatQry(T_ZAt_DecCmdInfo * pDecCmdInfo);
+ T_ZAt_ParseCmd2MsgRslt zAt_PsDecZlowPwrSetReq(T_ZAt_DecCmdInfo * pDecCmdInfo);
+ T_ZAt_ParseCmd2MsgRslt zAt_PsDecZlowPwrQryReq(T_ZAt_DecCmdInfo * pDecCmdInfo);
++T_ZAt_ParseCmd2MsgRslt zAt_PsDecZpsabnormalQryReq(T_ZAt_DecCmdInfo * pDecCmdInfo);
+ #ifdef DSDS_VSIM
+ T_ZAt_ParseCmd2MsgRslt zAt_PsDecZcardSwitchReq(T_ZAt_DecCmdInfo *pDecCmdInfo);
+ UINT16 zAt_PsEncCardSwitchReqCnf(T_ZAt_EncCmdInfo * pEncCmdInfo);
+diff --git a/Uboot/cp/ps/modem/ps/src/nas/ati/inc/zati_com.h b/Uboot/cp/ps/modem/ps/src/nas/ati/inc/zati_com.h
+index 4a047e7..5eb21d6 100755
+--- a/Uboot/cp/ps/modem/ps/src/nas/ati/inc/zati_com.h
++++ b/Uboot/cp/ps/modem/ps/src/nas/ati/inc/zati_com.h
+@@ -109,6 +109,9 @@
+ /* ATIÔ´Ë÷Òý*/
+ #define Z_ATI_SRCINDEX (BYTE)0xff
+
++#define Z_ATI_PS_NORMAL (BYTE)0
++#define Z_ATI_PS_ABNORMAL (BYTE)1
++
+
+ /* ÈÎÎñÄ£¿éID */
+ #define Z_ATI_TASKID_MMIA (BYTE)(SUBMDL_Z_ATI - SUBMDL_PSBASE)
+@@ -1169,7 +1172,7 @@
+ BYTE bSearchPlmnFg; /*¼Ç¼ÊÇ·ñ½øÐйýËÑÍø*/
+ BYTE bZcwaFg; /*¼Ç¼ZCWAÉèÖõÄÖµ£¬0:ÊÕµ½waiting callʱֱ½Ó¾Ü¾ø²»Éϱ¨£¬1:Õý³£Éϱ¨*/
+ BYTE bZemsciqIndex;/*¼Ç¼¹¤³Ìģʽ²éѯ¸ñʽ¶ÔÓ¦µÄË÷Òý*/
+- BYTE bZemPadding;
++ BYTE bZemsciType;/*Çø·Ö¹¤³ÌģʽÖ÷¶¯Éϱ¨ÃüÁîÀàÐÍ,0-ZEMSCI,1-ZSCIND*/
+ #ifdef Z_DUALSTANDBY
+ BYTE bZpsStat; /*¼Ç¼PSÒµÎñ״̬*/
+ #endif
+@@ -1277,6 +1280,7 @@
+ #ifdef DSDS_VSIM
+ T_zAti_CardSitchStat tCardSwitch;
+ #endif
++ BYTE bPsAbnormal;
+ } T_zAti_Data;
+
+ typedef struct {
+@@ -1788,7 +1792,7 @@
+ BYTE zAti_GetRegState(VOID);
+
+ extern BOOL zAti_IsHasValidFg(BYTE *pbFg, BYTE bLen);
+-
++extern VOID zAt_PsAbnormalStatusInd(BYTE bStat);
+ extern VOID zAti_SetS0Value(BYTE bS0Value);
+ extern BYTE zAti_GetS0Value(VOID);
+ BYTE zAt_IsBeepCallNum(T_z_CallNum *ptCheckedNum);
+diff --git a/Uboot/cp/ps/modem/ps/src/nas/ati/inc/zati_int.h b/Uboot/cp/ps/modem/ps/src/nas/ati/inc/zati_int.h
+index 73cd495..8db7567 100755
+--- a/Uboot/cp/ps/modem/ps/src/nas/ati/inc/zati_int.h
++++ b/Uboot/cp/ps/modem/ps/src/nas/ati/inc/zati_int.h
+@@ -1496,6 +1496,9 @@
+
+ #define AP_MMIA_ZEPCG_SET (BYTE)0
+ #define AP_MMIA_ZEPCG_QRY (BYTE)1
++
++#define Z_AT_ZEMSCI_IND (BYTE)0
++#define Z_AT_ZSCIND (BYTE)1
+ /************************************************************************************
+ * ½Ó¿ÚÊý¾Ý½á¹¹¶¨Òå *
+ ************************************************************************************/
+@@ -8704,9 +8707,27 @@
+ */
+ BYTE bAct;
+ BYTE abPadding[3];
+-}T_zApMmia_Rxlev_Cnf, T_zApMmia_ZRptRxlev_Ind;
++}T_zApMmia_Rxlev_Cnf;
+
+-
++typedef struct {
++ BYTE bSrcIndex;
++ BYTE bDesIndex;
++ BYTE bRxlev; /* ÐźÅÇ¿¶È
++ * TDDȡֵ£º100£199 ÌØÊâÖµ 99
++ * GSMȡֵ£º0£31 ÌØÊâÖµ 99
++ */
++ BYTE bBler; /* ÐŵÀÎóÂëÂÊ
++ * TDDȡֵ£ºTDÇé¿öÏ´ËÖµÎÞЧ£¬Îª99
++ * GSMȡֵ£ºbBler £º 0£7 ÎÞЧֵ99
++ */
++ BYTE bAct;
++ BYTE bRsrq;/*LTE·þÎñÐ¡ÇøµÄRSRQ,ÎÞЧֵ0xff*/
++ BYTE bSinrInt; /*LTE·þÎñÐ¡ÇøµÄSINRµÄÕûÊýÖµ,ȡֵ·¶Î§0~60; ÕæÊµÖµ»ù´¡ÉϼÓ20;ÕæÊµÖµÈ¡Öµ·¶Î§: -20~40*/
++ BYTE bSinrDec; /*LTE·þÎñÐ¡ÇøµÄSINRȡֵ·¶Î§ 0~9*/
++ BYTE bRssiInt; /*LTE·þÎñÐ¡ÇøµÄRSSIµÄÕûÊýÖµ,ȡֵ·¶Î§0~133,0xffΪÎÞЧֵ; ÕæÊµÖµ»ù´¡ÉϼÓ129;ÕæÊµÖµÈ¡Öµ·¶Î§: -129~-4*/
++ BYTE bEcno; /*W·þÎñÐ¡ÇøµÄECNOµÄ²âÁ¿Öµ,ȡֵ·¶Î§0~49,0xffΪÎÞЧֵ*/
++ BYTE abPadding[2];
++}T_zApMmia_ZRptRxlev_Ind;
+ /****************************************************************************
+ ÔÓï:Z_APMMIA_ZRptRxlevQueryCnf_Ev(MMMIA->ATI)
+ ¹¦ÄÜ:²éѯÊÇ·ñÉèÖÃÁËÖ÷¶¯Éϱ¨ÐźÅÇ¿¶ÈµÄ»Ø¸´
+diff --git a/Uboot/cp/ps/modem/ps/src/nas/ati/inc/zati_othr.h b/Uboot/cp/ps/modem/ps/src/nas/ati/inc/zati_othr.h
+index 62cb645..5b9dc6a 100755
+--- a/Uboot/cp/ps/modem/ps/src/nas/ati/inc/zati_othr.h
++++ b/Uboot/cp/ps/modem/ps/src/nas/ati/inc/zati_othr.h
+@@ -76,6 +76,7 @@
+ VOID zAti_EM_CpyGrrCellInfo(T_z_CellInfo_Ind *ptApMmiaInd, T_zMmiaAs_EM_GCellInfo_Ind *ptMmiaAsInd);
+ VOID zAti_EM_CpyUmcrCellInfo(T_z_CellInfo_Ind *ptApMmiaInd, T_zMmiaAs_EM_UCellInfo_Ind *ptMmiaAsInd);
+ VOID zAti_EM_CpyEumcrCellInfo(T_z_CellInfo_Ind *ptApMmiaInd, T_zMmiaAs_EM_EUCellInfo_Ind *ptMmiaAsInd);
++VOID zAt_EM_CpyScellInfo(T_zEM_EmInfo_Ind *ptEmInfoInd, T_zAt_CellInfo_Ind *ptCellInfoInd);
+ VOID zAti_ZulrtindTimerExpir(VOID);
+ #endif
+
+diff --git a/Uboot/cp/ps/modem/ps/src/nas/ati/src/zat_fnc.c b/Uboot/cp/ps/modem/ps/src/nas/ati/src/zat_fnc.c
+index 0aca45e..bd32a78 100755
+--- a/Uboot/cp/ps/modem/ps/src/nas/ati/src/zat_fnc.c
++++ b/Uboot/cp/ps/modem/ps/src/nas/ati/src/zat_fnc.c
+@@ -13095,7 +13095,12 @@
+ if(!zAt_PsDecNextParamDecimalNumByteNeed( &prsCmd2Msg, strSubBuf, &pDecCmdStr, &zemciSetReq.bAction, NULL)
+ || (zemciSetReq.bAction > Z_ATI_EM_TIMER_MAXLEN))
+ {
+- return zAt_GetParseRslt2(&prsCmd2Msg,ZAT2_CMD_PARAM_ERR);
++ return zAt_GetParseRslt2(&prsCmd2Msg, ZAT2_CMD_PARAM_ERR);
++ }
++
++ if(pDecCmdInfo->curCmdId == ZAT2_EM_ZSCIND)
++ {
++ zemciSetReq.bAtType = Z_AT_ZSCIND;
+ }
+
+ return zAt_PsDecFinishParse(&prsCmd2Msg, pDecCmdStr, &zemciSetReq, sizeof(T_zMmiaAs_EM_CellInfo_Req), TRUE);
+@@ -19458,7 +19463,9 @@
+ T_zApMmia_ZRptRxlev_Ind *pZsqrInd = (T_zApMmia_ZRptRxlev_Ind*) pEncCmdInfo->pMsgBody;
+
+ /* +ZSQR: <rssi>[,<ber>] */
+- return (UINT16)sprintf((char *)pEncCmdInfo->pStrCmd, "%s+ZSQR: %d,%d,%d%s", g_zAt_CRLF, pZsqrInd->bRssi, pZsqrInd->bBler, pZsqrInd->bAct, g_zAt_CRLF);
++ return (UINT16)sprintf((char *)pEncCmdInfo->pStrCmd, "%s+ZSQR: %d,%d,%d,%d,%d,%d,%d,%d%s", g_zAt_CRLF,
++ pZsqrInd->bRxlev, pZsqrInd->bBler, pZsqrInd->bAct, pZsqrInd->bEcno, pZsqrInd->bSinrInt, pZsqrInd->bSinrDec,
++ pZsqrInd->bRssiInt, pZsqrInd->bRsrq, g_zAt_CRLF);
+ }
+
+
+@@ -25952,6 +25959,30 @@
+ prsCmd2Msg.decRslt2nd = ZAT2_CMD_REPLY_DIRECT;
+ return prsCmd2Msg;
+ }
++
++T_ZAt_ParseCmd2MsgRslt zAt_PsDecZpsabnormalQryReq(T_ZAt_DecCmdInfo * pDecCmdInfo)
++{
++ T_ZAt_ParseCmd2MsgRslt prsCmd2Msg = {0};
++
++ sprintf((char *)g_zAt_EncBuf, "%s+ZPSABNORMAL: %d%s%s", g_zAt_CRLF, g_zAti_ptData->bPsAbnormal, g_zAt_CRLF, g_zAt_OK);
++
++ prsCmd2Msg.decRslt2nd = ZAT2_CMD_REPLY_DIRECT;
++ return prsCmd2Msg;
++}
++
++VOID zAt_PsAbnormalStatusInd(BYTE bStat)
++{
++ UINT16 strLen=0;
++ CHAR abStr[30] = {0};
++
++ /*+ZPSABNORMAL: <status>*/
++ sprintf((char *)abStr, "%s+ZPSABNORMAL: %d%s", g_zAt_CRLF, bStat, g_zAt_CRLF);
++ strLen = (UINT16)strlen((const char *)abStr);
++
++ zAti_DeliverAllMsg(AP_MMIA_ZPSABNORMAL_IND_EV, abStr, strLen);
++
++ return;
++}
+ /**************************************************************************
+ * º¯ÊýÃû³Æ£º zAt_PsDecZtpmrReq
+ * ¹¦ÄÜÃèÊö£º ¸ù¾ÝµÚ1²½½âÎö½á¹û£¬ÌîдÏûÏ¢¶ÔÓ¦µÄ½á¹¹Ìå
+diff --git a/Uboot/cp/ps/modem/ps/src/nas/ati/src/zat_fnc_sup.c b/Uboot/cp/ps/modem/ps/src/nas/ati/src/zat_fnc_sup.c
+index 4ac962d..7825509 100755
+--- a/Uboot/cp/ps/modem/ps/src/nas/ati/src/zat_fnc_sup.c
++++ b/Uboot/cp/ps/modem/ps/src/nas/ati/src/zat_fnc_sup.c
+@@ -5505,25 +5505,46 @@
+ UINT16 __ps_static_func zAt_PsEncEmZemsciInd(T_ZAt_EncCmdInfo * pEncCmdInfo)
+ {
+ CHAR * pStrWalk = pEncCmdInfo->pStrCmd;
+- WORD wInfoLen = sizeof(T_zEM_EmInfo_Ind);
++ WORD wInfoLen = 0;
+ WORD wLen = 0;
+ T_zEM_EmInfo_Ind *ptEmInfoInd = (T_zEM_EmInfo_Ind*)pEncCmdInfo->pMsgBody;
++ T_zAt_CellInfo_Ind *ptAtCellInfo = ZOSS_NULL;
+
+ /* ³¬³¤ÃüÁÐèÒª·ÖÅäZAT2_LONG_CMD_LEN * 2³¤¶È¿Õ¼ä */
+ if (g_zAti_atDataEx[g_zAti_CurInstance].bCellInfSet != Z_APMMIA_EM_IND_DISABLE)
+ {
+ #ifndef BTRUNK_SUPPORT
+- zAti_RetUB((VOID**)&pEncCmdInfo->pStrCmd);
+- pEncCmdInfo->pStrCmd = (CHAR *)zAti_GetUB(sizeof(T_zEM_EmInfo_Ind) * 2 + 100);//100ÊÇΪÃüÁîÍ·ºÍÃüÁîβÁôµÄ
+- pStrWalk = pEncCmdInfo->pStrCmd;
+-
+- pStrWalk += sprintf((char *)pStrWalk, "%s+ZEMSCI: ", g_zAt_CRLF);
+-
+- for(wLen = 0; wLen < wInfoLen; wLen++)
++ if(g_zAti_atDataEx[g_zAti_CurInstance].bZemsciType == Z_AT_ZSCIND)
+ {
+- pStrWalk += sprintf((char *)pStrWalk, "%02X", *((PBYTE)(ptEmInfoInd)+wLen));
+- }
++ wInfoLen = sizeof(T_zAt_CellInfo_Ind);
++ ptAtCellInfo = (T_zAt_CellInfo_Ind*)zAti_GetUB(wInfoLen);
+
++ zAt_EM_CpyScellInfo(ptEmInfoInd, ptAtCellInfo);
++
++ pStrWalk += sprintf((char *)pStrWalk, "%s+ZSCIND: ", g_zAt_CRLF);
++
++ for(wLen = 0; wLen < wInfoLen; wLen++)
++ {
++ pStrWalk += sprintf((char *)pStrWalk, "%02X", *((PBYTE)(ptAtCellInfo)+wLen));
++ }
++
++ zAti_RetUB((VOID**)&ptAtCellInfo);
++ }
++ else
++ {
++ zAti_RetUB((VOID**)&pEncCmdInfo->pStrCmd);
++ pEncCmdInfo->pStrCmd = (CHAR *)zAti_GetUB(sizeof(T_zEM_EmInfo_Ind) * 2 + 100);//100ÊÇΪÃüÁîÍ·ºÍÃüÁîβÁôµÄ
++ pStrWalk = pEncCmdInfo->pStrCmd;
++
++ pStrWalk += sprintf((char *)pStrWalk, "%s+ZEMSCI: ", g_zAt_CRLF);
++
++ wInfoLen = sizeof(T_zEM_EmInfo_Ind);
++
++ for(wLen = 0; wLen < wInfoLen; wLen++)
++ {
++ pStrWalk += sprintf((char *)pStrWalk, "%02X", *((PBYTE)(ptEmInfoInd)+wLen));
++ }
++ }
+ sprintf((char *)pStrWalk, "%s", g_zAt_CRLF);
+ #else
+ if(ptEmInfoInd->bRatType == Z_LTE_ACT)
+@@ -5583,25 +5604,47 @@
+ UINT16 zAt_PsEncZemsciQCnf(T_ZAt_EncCmdInfo * pEncCmdInfo)
+ {
+ CHAR * pStrWalk = pEncCmdInfo->pStrCmd;
+- WORD wInfoLen = sizeof(T_zEM_EmInfo_Ind);
++ WORD wInfoLen = 0;
+ WORD wLen = 0;
+ T_zEM_EmInfo_Ind *ptAscellInfoCnf = (T_zEM_EmInfo_Ind*)pEncCmdInfo->pMsgBody;
++ T_zAt_CellInfo_Ind *ptAtCellInfo = ZOSS_NULL;
+
+ if(Z_NO_ACT == ptAscellInfoCnf->bRatType)
+ {
+ zAti_SendExpt2TraceAgt(ERR_InvalidPara, TRACE_ERR_LEVEL_NORMAL,"");
+ return zAt_EncErrorCode(pStrWalk, pEncCmdInfo->cmdId, ZAT2_CMEE_GETNOINFO_ERR);
+ }
+- zAti_RetUB((VOID**)&pEncCmdInfo->pStrCmd);
+- pEncCmdInfo->pStrCmd = (CHAR *)zAti_GetUB(sizeof(T_zEM_EmInfo_Ind) * 2 + 100);//100ÊÇΪÃüÁîÍ·ºÍÃüÁîβÁôµÄ
+- pStrWalk = pEncCmdInfo->pStrCmd;
+
+- pStrWalk += sprintf((char *)pStrWalk, "%s+ZEMSCIQ: ", g_zAt_CRLF);
+- for(wLen = 0; wLen < wInfoLen; wLen++)
++ if(pEncCmdInfo->cmdId == ZAT2_EM_ZSCIQ)
+ {
+- pStrWalk += sprintf((char *)pStrWalk, "%02X", *((PBYTE)ptAscellInfoCnf+wLen));
+- }
++ wInfoLen = sizeof(T_zAt_CellInfo_Ind);
++ ptAtCellInfo = (T_zAt_CellInfo_Ind*)zAti_GetUB(wInfoLen);
+
++ zAt_EM_CpyScellInfo(ptAscellInfoCnf, ptAtCellInfo);
++
++ pStrWalk += sprintf((char *)pStrWalk, "%s+ZSCIQ: ", g_zAt_CRLF);
++
++ for(wLen = 0; wLen < wInfoLen; wLen++)
++ {
++ pStrWalk += sprintf((char *)pStrWalk, "%02X", *((PBYTE)ptAtCellInfo+wLen));
++ }
++
++ zAti_RetUB((VOID**)&ptAtCellInfo);
++ }
++ else
++ {
++ zAti_RetUB((VOID**)&pEncCmdInfo->pStrCmd);
++ pEncCmdInfo->pStrCmd = (CHAR *)zAti_GetUB(sizeof(T_zEM_EmInfo_Ind) * 2 + 100);//100ÊÇΪÃüÁîÍ·ºÍÃüÁîβÁôµÄ
++ pStrWalk = pEncCmdInfo->pStrCmd;
++
++ wInfoLen = sizeof(T_zEM_EmInfo_Ind);
++
++ pStrWalk += sprintf((char *)pStrWalk, "%s+ZEMSCIQ: ", g_zAt_CRLF);
++ for(wLen = 0; wLen < wInfoLen; wLen++)
++ {
++ pStrWalk += sprintf((char *)pStrWalk, "%02X", *((PBYTE)ptAscellInfoCnf+wLen));
++ }
++ }
+ sprintf((char *)pStrWalk, "%s%s", g_zAt_CRLF, g_zAt_OK);
+
+ return (UINT16)strlen((const char *)pEncCmdInfo->pStrCmd);
+diff --git a/Uboot/cp/ps/modem/ps/src/nas/ati/src/zat_var.c b/Uboot/cp/ps/modem/ps/src/nas/ati/src/zat_var.c
+index 82ab961..3a6ce62 100755
+--- a/Uboot/cp/ps/modem/ps/src/nas/ati/src/zat_var.c
++++ b/Uboot/cp/ps/modem/ps/src/nas/ati/src/zat_var.c
+@@ -101,6 +101,7 @@
+ { "+ZULRTIND", ZAT2_CFG_ZULRTIND, "" },
+ { "+ZPOWSTAT", ZAT2_CFG_ZPOWSTAT, "+ZPOWSTAT: (0-2)" },
+ { "+ZLOWPWR", ZAT2_CFG_ZLOWPWR, "+ZLOWPWR: (0,1)" },
++ { "+ZPSABNORMAL", ZAT2_CFG_ZPSABNORMAL, "" },
+
+ /********************************* MMÄ£¿é ************************************/
+ { "+CREG", ZAT2_MM_CREG, "+CREG: (0-2)" },
+@@ -391,6 +392,8 @@
+ #if !defined (BTRUNK_SUPPORT) && (defined (_CHIP_ZX297520_LATER) || defined (_CHIP_ZX2804))
+ { "+ZEMSCI", ZAT2_EM_ZEMSCI, "" },
+ { "+ZEMSCIQ", ZAT2_EM_ZEMSCIQ, "" },
++ { "+ZSCIQ", ZAT2_EM_ZSCIQ, "" },
++ { "+ZSCIND", ZAT2_EM_ZSCIND, "" },
+ #else
+ { "+ZEMCI", ZAT2_EM_ZEMCI, "" },
+ { "+ZEMCIQ", ZAT2_EM_ZEMCIQ, "" },
+@@ -724,7 +727,11 @@
+
+ /***********************************+ZLOWPWR*********************************************/
+ { ZAT2_CFG_ZLOWPWR, ZAT2_CO_SET_REQ, ATI_DISTRIBUTE_FUNC_ZLOWPWR_REQ_EV, zAt_PsDecZlowPwrSetReq },
+- { ZAT2_CFG_ZLOWPWR, ZAT2_CO_QUERY_REQ, 0, zAt_PsDecZlowPwrQryReq},
++ { ZAT2_CFG_ZLOWPWR, ZAT2_CO_QUERY_REQ, 0, zAt_PsDecZlowPwrQryReq },
++
++ /***********************************+ZPSABNORMAL************************************/
++ { ZAT2_CFG_ZPSABNORMAL, ZAT2_CO_QUERY_REQ, 0, zAt_PsDecZpsabnormalQryReq },
++
+ /***********************************************************************************************
+ MMÄ£¿é
+ ***********************************************************************************************/
+@@ -1439,6 +1446,8 @@
+ { ZAT2_EM_ZEMSCI, ZAT2_CO_QUERY_REQ, AP_MMIA_EM_CELL_INFO_QUERY_REQ_EV, zAt_PsDecCommonReq },
+ { ZAT2_EM_ZEMSCIQ, ZAT2_CO_QUERY_REQ, ATI_DISTRIBUTE_FUNC_CELLINFO_QRY_REQ_EV, zAt_PsDecCommonReq},
+ { ZAT2_EM_ZEMSCIQ, ZAT2_CO_SET_REQ, ATI_DISTRIBUTE_FUNC_CELLQRY_REQ_EV, zAt_PsDecEmZemsciqByIndexReq},
++ { ZAT2_EM_ZSCIND, ZAT2_CO_SET_REQ, ATI_DISTRIBUTE_FUNC_EM_CELL_INFO_REQ_EV, zAt_PsDecEmZemciSetReq},
++ { ZAT2_EM_ZSCIQ, ZAT2_CO_QUERY_REQ, ATI_DISTRIBUTE_FUNC_CELLINFO_QRY_REQ_EV, zAt_PsDecCommonReq},
+ #else
+ /******************************************* +ZEMCI *******************************************/
+ { ZAT2_EM_ZEMCI, ZAT2_CO_SET_REQ, ATI_DISTRIBUTE_FUNC_EM_CELL_INFO_REQ_EV, zAt_PsDecEmZemciSetReq },
+diff --git a/Uboot/cp/ps/modem/ps/src/nas/ati/src/zati_distribute_fnc.c b/Uboot/cp/ps/modem/ps/src/nas/ati/src/zati_distribute_fnc.c
+index 9a3235c..3fb3142 100755
+--- a/Uboot/cp/ps/modem/ps/src/nas/ati/src/zati_distribute_fnc.c
++++ b/Uboot/cp/ps/modem/ps/src/nas/ati/src/zati_distribute_fnc.c
+@@ -2458,6 +2458,8 @@
+ else
+ {
+ g_zAti_atDataEx[g_zAti_CurInstance].bCellInfSet = ptApMmiaReq->bAction;
++ g_zAti_atDataEx[g_zAti_CurInstance].bZemsciType = ptApMmiaReq->bAtType;
++
+ sprintf((char *)g_zAt_EncBuf, "%s", g_zAt_OK);
+ return Z_APMMIA_NOERROR_ERR;
+ }
+@@ -2709,21 +2711,26 @@
+ ·µ »Ø£ºT_zApMmia_ZRptRxlev_Ind ½á¹¹Ö¸Õë
+
+ ************************************************************************/
+-T_zApMmia_ZRptRxlev_Ind* __ps_2g_func zAti_CreateZRptRxlevIndMsg(BYTE bSourceIndex, BYTE bDestIndex, BYTE bRssi, BYTE bBler, BYTE bAct)
++T_zApMmia_ZRptRxlev_Ind* __ps_2g_func zAti_CreateZRptRxlevIndMsg(BYTE bRxlev, BYTE bBler, BYTE bAct, T_zMmiaAs_RptRxlev_Ind *ptAsInd)
+ {
+ T_zApMmia_ZRptRxlev_Ind * ptApInd = (T_zApMmia_ZRptRxlev_Ind*)zAti_GetUB(sizeof(T_zApMmia_ZRptRxlev_Ind));
+
+- ptApInd->bSrcIndex = bSourceIndex;
+- ptApInd->bDesIndex = bDestIndex;
+- ptApInd->bRssi = bRssi;
++ ptApInd->bRxlev = bRxlev;
+ ptApInd->bBler = bBler;
+ ptApInd->bAct = bAct;
++ ptApInd->bRsrq = ptAsInd->bRsrq;
++ ptApInd->bSinrInt = ptAsInd->bSinrInt;
++ ptApInd->bSinrDec = ptAsInd->bSinrDec;
++ ptApInd->bRssiInt = ptAsInd->bRssiInt;
++ ptApInd->bEcno = ptAsInd->bEcno;
+
+ return ptApInd;
+ }
+
+ DWORD zAti_ZRptRxlevEnable (T_zApMmia_ZRptRxlev_Req *ptRxlevReq)
+ {
++ T_zMmiaAs_RptRxlev_Ind tRptInd = {0};
++ T_zApMmia_ZRptRxlev_Ind *ptApInd = ZOSS_NULL;
+ BYTE bRegState = Z_APMMIA_REGSTATE_UNKNOWN;
+ BYTE bInsNo = ((g_zAti_CurInstance == Z_ATI_INSNO_1)? Z_ATI_INSNO_1 : Z_ATI_INSNO_2);
+
+@@ -2749,7 +2756,10 @@
+
+ if (bRegState == Z_APMMIA_REGSTATE_REGDENIED || bRegState == Z_APMMIA_REGSTATE_UNKNOWN)
+ {
+- T_zApMmia_ZRptRxlev_Ind *ptApInd = zAti_CreateZRptRxlevIndMsg(ptRxlevReq->bDesIndex, ptRxlevReq->bSrcIndex, 0, 99, Z_APMMIA_NOSERVE);
++ zOss_Memset(&tRptInd, 255, sizeof(T_zMmiaAs_RptRxlev_Ind));
++ ptApInd = zAti_CreateZRptRxlevIndMsg(0, 99, Z_APMMIA_NOSERVE, &tRptInd);
++ ptApInd->bDesIndex = ptRxlevReq->bSrcIndex;
++ ptApInd->bSrcIndex = ptRxlevReq->bDesIndex;
+ zAti_MsgSend(AP_MMIA_ZRPT_RXLEVIND_EV, (PBYTE)ptApInd, sizeof(T_zApMmia_ZRptRxlev_Ind), Z_ATI_TASKID_ATI);
+ }
+ return zAti_ZRptRxlevProc (ptRxlevReq);
+@@ -4817,6 +4827,10 @@
+ if (Z_FAIL == ptRfCtrl->bResult) /* ʧ°Ü */
+ {
+ g_zAti_atDataEx[g_zAti_CurInstance].tFun.bFunBak = Z_ATI_INVALID_BYTE;
++
++ g_zAti_ptData->bPsAbnormal = Z_ATI_PS_ABNORMAL;
++ zAt_PsAbnormalStatusInd(Z_ATI_PS_ABNORMAL);
++
+ return Z_APMMIA_UNKNOWN_ERR;
+ }
+ else /* ³É¹¦ */
+@@ -4825,6 +4839,8 @@
+ g_zAti_atDataEx[g_zAti_CurInstance].tFun.bRfVal = g_zAti_atDataEx[g_zAti_CurInstance].tFun.bFunBak;
+ g_zAti_atDataEx[g_zAti_CurInstance].tFun.bFunBak = Z_ATI_INVALID_BYTE;
+
++ g_zAti_ptData->bPsAbnormal = Z_ATI_PS_NORMAL;
++
+ zDev_AtMemReadItem(Z_AtMem_ID_MmiaPrvtMem, 0, (PBYTE)&tAtData, g_zAti_CurInstance);
+
+ if (Z_APMMIA_CFUNFUN_FULLFUN == g_zAti_atDataEx[g_zAti_CurInstance].tFun.bFunVal)
+@@ -7435,6 +7451,11 @@
+ ºÍµ±Ç°ÎÞפÁôÇÒδËÑÍøÊ±²Å±¨£¬*/
+ if (Z_VALID == zAti_ZsqrInvalidRxlevProc(&ptAsInd->bRxlev, &bAct))
+ {
++ ptAsInd->bEcno = 0xff;
++ ptAsInd->bRsrq = 0xff;
++ ptAsInd->bRssiInt = 0xff;
++ ptAsInd->bSinrInt = 0xff;
++ ptAsInd->bSinrDec = 0xff;
+ g_zAti_atDataEx[g_zAti_CurInstance].bPreLevel = 0xff;
+ bRssi = zAti_GetTdRssi(ptAsInd->bRxlev);
+ bAct = Z_APMMIA_NOSERVE;
+@@ -7446,16 +7467,26 @@
+ if (tTaskId == zDev_GetTaskId(Z_ATI_TASKID_EUMCR, 0) ||tTaskId == zDev_GetTaskId(Z_ATI_TASKID_EUMCR, 1))
+ {
+ flag = zAti_IsLtePowerLevelChng(ptAsInd->bRxlev);
++ ptAsInd->bEcno = 0xff;
+ bAct = Z_APMMIA_LTE;
+ }
+ else if(tTaskId == zDev_GetTaskId(Z_ATI_TASKID_WMCR, 0) ||tTaskId == zDev_GetTaskId(Z_ATI_TASKID_WMCR, 1))
+ {
+ flag = zAti_IsWPowerLevelChng(ptAsInd->bRxlev);
++ ptAsInd->bRsrq = 0xff;
++ ptAsInd->bRssiInt = 0xff;
++ ptAsInd->bSinrInt = 0xff;
++ ptAsInd->bSinrDec = 0xff;
+ bAct = Z_APMMIA_WCDMA;
+ }
+ else //MCR
+ {
+ flag = zAti_IsTdPowerLevelChng(ptAsInd->bRxlev);
++ ptAsInd->bEcno = 0xff;
++ ptAsInd->bRsrq = 0xff;
++ ptAsInd->bRssiInt = 0xff;
++ ptAsInd->bSinrInt = 0xff;
++ ptAsInd->bSinrDec = 0xff;
+ bAct = Z_APMMIA_TDSCDMA;
+ }
+ }
+@@ -7463,7 +7494,9 @@
+ if (flag == Z_VALID)
+ {
+ bBler = (ptAsInd->bBlerFlg == Z_VALID)? ptAsInd->bBler : 99;
+- ptApInd = zAti_CreateZRptRxlevIndMsg(0xfe, 0xff, bRssi, bBler, bAct);
++ ptApInd = zAti_CreateZRptRxlevIndMsg(bRssi, bBler, bAct, ptAsInd);
++ ptApInd->bDesIndex = 0xff;
++ ptApInd->bSrcIndex = 0xfe;
+ zAti_RecvServerHandlerSlaver(AP_MMIA_ZRPT_RXLEVIND_EV, (UINT8 *)ptApInd, sizeof(T_zApMmia_ZRptRxlev_Ind));
+ }
+ }
+@@ -7635,6 +7668,12 @@
+ zAti_SendExpt2TraceAgt(ERR_InvalidPara, TRACE_ERR_LEVEL_SEVERE,"");
+ return ;
+ }
++
++ ptAsInd->bRsrq = 0xff;
++ ptAsInd->bSinrInt = 0xff;
++ ptAsInd->bSinrDec = 0xff;
++ ptAsInd->bRssiInt = 0xff;
++ ptAsInd->bEcno = 0xff;
+ /*ÎÞЧֵ99Ê±ÖÆÊ½Í³Ò»±¨NOSERVE*/
+ if(ptAsInd->bRxlev == 99)
+ {
+@@ -7657,7 +7696,9 @@
+ if (flag == Z_VALID)
+ {
+ bBler = (ptAsInd->bBlerFlg == Z_VALID)? ptAsInd->bBler : 99;
+- ptApInd = zAti_CreateZRptRxlevIndMsg(0xfe, 0xff, bRssi, bBler, bAct);
++ ptApInd = zAti_CreateZRptRxlevIndMsg(bRssi, bBler, bAct, ptAsInd);
++ ptApInd->bDesIndex = 0xff;
++ ptApInd->bSrcIndex = 0xfe;
+ zAti_RecvServerHandlerSlaver(AP_MMIA_ZRPT_RXLEVIND_EV, (UINT8 *)ptApInd, sizeof(T_zApMmia_ZRptRxlev_Ind));
+ }
+ }
+@@ -7784,11 +7825,13 @@
+ g_zAti_atDataEx[g_zAti_CurInstance].bPreCsqAct = bAct;
+ }
+
+- ptApRxlevCnf = (T_zApMmia_Rxlev_Cnf*)zAti_CreateZRptRxlevIndMsg(
+- ptAsRptRxlevInd->bSrcIndex,
+- ptAsRptRxlevInd->bDesIndex,
+- zAti_GetGsmRssi(ptAsRptRxlevInd->bRxlev),
+- (BYTE)((ptAsRptRxlevInd->bBlerFlg == Z_VALID)? ptAsRptRxlevInd->bBler : 99),bAct);
++ ptApRxlevCnf = (T_zApMmia_Rxlev_Cnf*)zAti_GetUB(sizeof(T_zApMmia_Rxlev_Cnf));
++
++ ptApRxlevCnf->bDesIndex = ptAsRptRxlevInd->bDesIndex;
++ ptApRxlevCnf->bSrcIndex = ptAsRptRxlevInd->bSrcIndex;
++ ptApRxlevCnf->bRssi = zAti_GetGsmRssi(ptAsRptRxlevInd->bRxlev);
++ ptApRxlevCnf->bBler = (ptAsRptRxlevInd->bBlerFlg == Z_VALID)? ptAsRptRxlevInd->bBler : 99;
++ ptApRxlevCnf->bAct = bAct;
+
+ zAti_RecvServerHandlerSlaver(AP_MMIA_RXLEV_CNF_EV, (UINT8 *)ptApRxlevCnf, sizeof(T_zApMmia_Rxlev_Cnf));
+ }
+diff --git a/Uboot/cp/ps/modem/ps/src/nas/ati/src/zati_fnc.c b/Uboot/cp/ps/modem/ps/src/nas/ati/src/zati_fnc.c
+index ab3a03f..55236e0 100755
+--- a/Uboot/cp/ps/modem/ps/src/nas/ati/src/zati_fnc.c
++++ b/Uboot/cp/ps/modem/ps/src/nas/ati/src/zati_fnc.c
+@@ -3152,6 +3152,17 @@
+ }
+
+ /**************************************************************************
++*º¯ÊýÃû³Æ:zAt_AddAtiTraceInfo
++*º¯Êý¹¦ÄÜ:ͨµÀ¶ÂÈûÐÅÏ¢¼ÓÈëά²âÐÅÏ¢
++**************************************************************************/
++VOID zAt_AddAtiTraceInfo(WORD wCmdId, BYTE bChnelID)
++{
++ BYTE bCurAct = zAti_GetCurAct_ByIndex(g_zAti_CurInstance);
++
++ zAs_AddNasTraceInfo(bCurAct, wCmdId, Z_CEER_ATI_ID, bChnelID);
++}
++
++/**************************************************************************
+ * º¯ÊýÃû³Æ : zAti_ProcessCmd
+ * ¹¦ÄÜÃèÊö : ´¦ÀíÉϲ㷢À´µÄÃüÁî
+ * ²ÎÊý˵Ã÷£º (IN)£º
+@@ -3178,6 +3189,10 @@
+
+ if ( ZAT2_NO_COMMAND != pChnelNode->cmd_id && ZAT2_CO_INVALID != pChnelNode->cmd_op)
+ {
++ CHAR abStr[30] = {0};
++ sprintf(abStr, "Conflict Cmd id=%d\n", pChnelNode->cmd_id);
++ zAti_SendExpt2TraceAgt(ERR_InvalidMsg, TRACE_ERR_LEVEL_NORMAL, abStr);
++ zAt_AddAtiTraceInfo(pChnelNode->cmd_id, pChnelNode->iChnelId);
+ zAti_ProcChnelConflict(pChnelNode);
+ return;
+ }
+diff --git a/Uboot/cp/ps/modem/ps/src/nas/ati/src/zati_main.c b/Uboot/cp/ps/modem/ps/src/nas/ati/src/zati_main.c
+index 32f9fe7..ea68869 100755
+--- a/Uboot/cp/ps/modem/ps/src/nas/ati/src/zati_main.c
++++ b/Uboot/cp/ps/modem/ps/src/nas/ati/src/zati_main.c
+@@ -392,7 +392,8 @@
+ g_zAti_atDataEx[bInstance].tFun.bRfVal = Z_APMMIA_CFUNFUN_MINIFUN;
+ zAti_RetUB((VOID **)&g_zAti_atDataEx[bInstance].ptUrrcHoInd);
+ zAti_RetUB((VOID **)&g_zAti_atDataEx[bInstance].ptGrrcHoInd);
+- g_zAti_atDataEx[bInstance].bCellInfSet = 0;
++ g_zAti_atDataEx[bInstance].bCellInfSet = 0;
++ g_zAti_atDataEx[bInstance].bZemsciType = 0;
+ g_zAti_atDataEx[bInstance].bHoInfoSet = 0;
+ g_zAti_atDataEx[bInstance].bZsqrSet = 0;
+ g_zAti_atDataEx[bInstance].bRange = 0;
+@@ -475,6 +476,7 @@
+ g_zAti_ptData->bEModeType = 0xff;
+ g_zAti_ptData->bPowerIndFlag = FALSE;
+ g_zAti_ptData->bSmOnlyL2PFlag = FALSE;
++ g_zAti_ptData->bPsAbnormal = Z_ATI_PS_NORMAL;
+ #ifdef DSDS_VSIM
+ g_zAti_ptData->tCardSwitch.bSim1Stat = Z_ATI_CARD_ACT;
+ g_zAti_ptData->tCardSwitch.bSim2Stat = Z_ATI_CARD_DEACT;
+@@ -622,7 +624,8 @@
+ g_zAti_atDataEx[bInstance].tFun.bFunVal = Z_APMMIA_CFUNFUN_MINIFUN;
+ zAti_RetUB((VOID **)&g_zAti_atDataEx[bInstance].ptUrrcHoInd);
+ zAti_RetUB((VOID **)&g_zAti_atDataEx[bInstance].ptGrrcHoInd);
+- g_zAti_atDataEx[bInstance].bCellInfSet = 0;
++ g_zAti_atDataEx[bInstance].bCellInfSet = 0;
++ g_zAti_atDataEx[bInstance].bZemsciType = 0;
+ g_zAti_atDataEx[bInstance].bHoInfoSet = 0;
+ g_zAti_atDataEx[bInstance].bZsqrSet = 0;
+ g_zAti_atDataEx[bInstance].bRange = 0;
+@@ -687,6 +690,7 @@
+ zAti_RetUB((VOID **)&g_zAti_atDataEx[bInstance].ptUrrcHoInd);
+ zAti_RetUB((VOID **)&g_zAti_atDataEx[bInstance].ptGrrcHoInd);
+ g_zAti_atDataEx[bInstance].bCellInfSet = 0;
++ g_zAti_atDataEx[bInstance].bZemsciType = 0;
+ g_zAti_atDataEx[bInstance].bHoInfoSet = 0;
+ g_zAti_atDataEx[bInstance].bZsqrSet = 0;
+ g_zAti_atDataEx[bInstance].bRange = 0;
+diff --git a/Uboot/cp/ps/modem/ps/src/nas/ati/src/zati_othr.c b/Uboot/cp/ps/modem/ps/src/nas/ati/src/zati_othr.c
+index 6880eeb..a5009fd 100755
+--- a/Uboot/cp/ps/modem/ps/src/nas/ati/src/zati_othr.c
++++ b/Uboot/cp/ps/modem/ps/src/nas/ati/src/zati_othr.c
+@@ -1647,6 +1647,73 @@
+ zAti_EM_CpyEumcrCellInfoLtePart(ptApMmiaInd, ptMmiaAsInd);
+ }
+
++VOID zAt_EM_CpyScellInfo(T_zEM_EmInfo_Ind *ptEmInfoInd, T_zAt_CellInfo_Ind *ptCellInfoInd)
++{
++ T_zEm_W_DchMeasInfo *ptDchInfo = ZOSS_NULL;
++ T_zEm_W_NotDchMeasInfo *ptNotDchInfo = ZOSS_NULL;
++
++ if(ptEmInfoInd == ZOSS_NULL || ptCellInfoInd == ZOSS_NULL)
++ {
++ return;
++ }
++
++ ptCellInfoInd->bRatType = ptEmInfoInd->bRatType;
++ ptCellInfoInd->bVersion = ptEmInfoInd->bVersion;
++ ptCellInfoInd->bDesIndex = ptEmInfoInd->bDesIndex;
++ ptCellInfoInd->bSrcIndex = ptEmInfoInd->bSrcIndex;
++
++ if(ptEmInfoInd->bRatType == Z_LTE_ACT)
++ {
++ ptCellInfoInd->uScellInfo.tLteScellInfo.dwEarfcn = ptEmInfoInd->uEmInfo.tLteEmInfo.tScellPara.tScellInfo.dwEarfcn;
++ ptCellInfoInd->uScellInfo.tLteScellInfo.dwCellId = ptEmInfoInd->uEmInfo.tLteEmInfo.tScellPara.tScellInfo.dwCellId;
++ ptCellInfoInd->uScellInfo.tLteScellInfo.wPci = ptEmInfoInd->uEmInfo.tLteEmInfo.tScellPara.tScellInfo.wPci;
++ ptCellInfoInd->uScellInfo.tLteScellInfo.wTac = ptEmInfoInd->uEmInfo.tLteEmInfo.tScellPara.tNasInfo.wTac;
++ ptCellInfoInd->uScellInfo.tLteScellInfo.tPlmnId = ptEmInfoInd->uEmInfo.tLteEmInfo.tScellPara.tNasInfo.tPlmnId;
++ ptCellInfoInd->uScellInfo.tLteScellInfo.bScellRsrp = ptEmInfoInd->uEmInfo.tLteEmInfo.tMeasInfo.bScellRsrp;
++ ptCellInfoInd->uScellInfo.tLteScellInfo.bScellRsrq = ptEmInfoInd->uEmInfo.tLteEmInfo.tMeasInfo.bScellRsrq;
++ ptCellInfoInd->uScellInfo.tLteScellInfo.bSinrInt = ptEmInfoInd->uEmInfo.tLteEmInfo.tScellPara.tNasInfo.bSinrInt;
++ ptCellInfoInd->uScellInfo.tLteScellInfo.bSinrDec = ptEmInfoInd->uEmInfo.tLteEmInfo.tScellPara.tNasInfo.bSinrDec;
++ ptCellInfoInd->uScellInfo.tLteScellInfo.bRssiInt = ptEmInfoInd->uEmInfo.tLteEmInfo.tScellPara.tNasInfo.bRssiInt;
++ }
++ else if(ptEmInfoInd->bRatType == Z_W_ACT)
++ {
++ ptCellInfoInd->uScellInfo.tWScellInfo.bStateInd = ptEmInfoInd->uEmInfo.tWEmInfo.bStateInd;
++ ptCellInfoInd->uScellInfo.tWScellInfo.dwCellId = ptEmInfoInd->uEmInfo.tWEmInfo.tCampPara.dwCellId;
++ ptCellInfoInd->uScellInfo.tWScellInfo.tPlmn = ptEmInfoInd->uEmInfo.tWEmInfo.tCampPara.tNasInfo.tPlmn;
++ ptCellInfoInd->uScellInfo.tWScellInfo.wLac = ptEmInfoInd->uEmInfo.tWEmInfo.tCampPara.tNasInfo.wLac;
++
++ if(ptEmInfoInd->uEmInfo.tWEmInfo.bStateInd == 0)
++ {
++ ptDchInfo = &ptEmInfoInd->uEmInfo.tWEmInfo.uWcellMeasInfo.tDchInfo;
++
++ ptCellInfoInd->uScellInfo.tWScellInfo.bRscp = ptDchInfo->tFreqAsVasInfo.tUsedFreqAsInfo.atAsVasCell[0].bRscp;
++ ptCellInfoInd->uScellInfo.tWScellInfo.wPsc = ptDchInfo->tFreqAsVasInfo.tUsedFreqAsInfo.atAsVasCell[0].wPsc;
++ ptCellInfoInd->uScellInfo.tWScellInfo.bEcNo = ptDchInfo->tFreqAsVasInfo.tUsedFreqAsInfo.atAsVasCell[0].bEcNo;
++ }
++ else
++ {
++ ptNotDchInfo = &ptEmInfoInd->uEmInfo.tWEmInfo.uWcellMeasInfo.tNotDchInfo;
++
++ ptCellInfoInd->uScellInfo.tWScellInfo.bRscp = ptNotDchInfo->tFddSCellReselInfo.tScellInfo.bRscp;
++ ptCellInfoInd->uScellInfo.tWScellInfo.wPsc = ptNotDchInfo->tFddSCellReselInfo.tScellInfo.wPsc;
++ ptCellInfoInd->uScellInfo.tWScellInfo.bEcNo = ptNotDchInfo->tFddSCellReselInfo.tScellInfo.bEcNo;
++ }
++ }
++ else if(ptEmInfoInd->bRatType == Z_GSM_ACT)
++ {
++ ptCellInfoInd->uScellInfo.tGsmScellInfo.dwCellId = ptEmInfoInd->uEmInfo.tGsmEmInfo.tScellPara.tScellInfo.dwCellId;
++ ptCellInfoInd->uScellInfo.tGsmScellInfo.wLac = ptEmInfoInd->uEmInfo.tGsmEmInfo.tScellPara.tNasInfo.wLac;
++ ptCellInfoInd->uScellInfo.tGsmScellInfo.tPlmn = ptEmInfoInd->uEmInfo.tGsmEmInfo.tScellPara.tNasInfo.tPlmn;
++ ptCellInfoInd->uScellInfo.tGsmScellInfo.bRssi = ptEmInfoInd->uEmInfo.tGsmEmInfo.tMeasInfo.bRssi;
++ ptCellInfoInd->uScellInfo.tGsmScellInfo.bBer = ptEmInfoInd->uEmInfo.tGsmEmInfo.tScellInfo.bBER;
++
++ if(ptCellInfoInd->uScellInfo.tGsmScellInfo.bBer == 255)
++ {
++ ptCellInfoInd->uScellInfo.tGsmScellInfo.bBer = 99;//¸úCSQÎÞЧֵ±£³ÖÒ»ÖÂ
++ }
++ }
++}
++
+ VOID zAti_ZulrtindTimerExpir(VOID)
+ {
+ DWORD dwAckCnt = 0;
+diff --git a/Uboot/cp/ps/plat/inc/oss/oss_sup.h b/Uboot/cp/ps/plat/inc/oss/oss_sup.h
+index 686c318..313ccd4 100755
+--- a/Uboot/cp/ps/plat/inc/oss/oss_sup.h
++++ b/Uboot/cp/ps/plat/inc/oss/oss_sup.h
+@@ -462,7 +462,7 @@
+ VOID zOss_RamPrintf(VOID);
+
+ /* ά²â */
+-UINT32 zOss_DebugInfoRecord(UINT32 id, const VOID *pFormat, ...);
++UINT32 zOss_DebugInfoRecord(char *id, const VOID *pFormat, ...);
+
+ /* shellÄ£¿é */
+ UINT32 zOss_AddShellCmd(const CHAR *cmd_name, const Shell_Func func, const CHAR *description);
+diff --git a/Uboot/cp/ps/plat/src/oss/sup/src/sup_except.c b/Uboot/cp/ps/plat/src/oss/sup/src/sup_except.c
+index fd355b2..8c87a48 100755
+--- a/Uboot/cp/ps/plat/src/oss/sup/src/sup_except.c
++++ b/Uboot/cp/ps/plat/src/oss/sup/src/sup_except.c
+@@ -371,7 +371,7 @@
+ * ·µ »Ø Öµ£º ³É¹¦: дÈ볤¶È; ʧ°Ü: ZOSS_ERROR
+ * ÆäËü˵Ã÷£º
+ **************************************************************************/
+-UINT32 zOss_DebugInfoRecord(UINT32 id, const VOID *pFormat, ...)
++UINT32 zOss_DebugInfoRecord(char *id, const VOID *pFormat, ...)
+ {
+ #ifdef _OS_WIN
+ return ZOSS_ERROR;
+@@ -387,7 +387,7 @@
+ #endif
+ }
+ #else
+-UINT32 zOss_DebugInfoRecord(UINT32 id, const VOID *pFormat, ...)
++UINT32 zOss_DebugInfoRecord(char *id, const VOID *pFormat, ...)
+ {
+ return ZOSS_SUCCESS;
+ }
+diff --git a/Uboot/pub/include/infra/pub_debug_info.h b/Uboot/pub/include/infra/pub_debug_info.h
+index 10357aa..95a480f 100755
+--- a/Uboot/pub/include/infra/pub_debug_info.h
++++ b/Uboot/pub/include/infra/pub_debug_info.h
+@@ -6,62 +6,43 @@
+ #define DEBUG_INFO_DEV_PATH "/dev/debug_info"
+
+ /* AP²àºÍCAP²àµÄPS\KERNEL\DRIVER\FS\APP ÒÔSTART~ENDÎªÇø¼ä£¬¸÷²¿·ÖÔ¤ÁôÁË100¸öID */
+-#define MODULE_ID_PS_START (1)
+-#define MODULE_ID_PS_NAS (1)
+-#define MODULE_ID_PS_RRC (2)
+-#define MODULE_ID_PS_L2 (3)
+-#define MODULE_ID_PS_UICC (99)
+-#define MODULE_ID_PS_END (100)
+
+-#define MODULE_ID_AP_KERNEL_START (101)
+-#define MODULE_ID_AP_KERNEL_END (200)
++#define MODULE_ID_PS_NAS ("ps_nas")
++#define MODULE_ID_PS_RRC ("ps_rrc")
++#define MODULE_ID_PS_L2 ("ps_l2")
++#define MODULE_ID_PS_UICC ("ps_uicc")
++#define MODULE_ID_AP_USB ("ap_usb")
++#define MODULE_ID_AP_REBOOT ("ap_reboot")
++#define MODULE_ID_AP_TSC ("ap_tsc")
++#define MODULE_ID_AP_PSM ("ap_psm")
++#define MODULE_ID_AP_NAND ("ap_nand")
++#define MODULE_ID_AP_MMC ("ap_mmc")
++#define MODULE_ID_AP_WIFI ("ap_wifi")
+
+-#define MODULE_ID_CAP_KERNEL_START (201)
+-#define MODULE_ID_CAP_KERNEL_END (300)
+
+-#define MODULE_ID_AP_DRIVES_START (301)
+-#define MODULE_ID_AP_USB (301)
+-#define MODULE_ID_AP_REBOOT (302)
+-#define MODULE_ID_AP_TSC (303)
+-#define MODULE_ID_AP_PSM (304)
+-#define MODULE_ID_AP_NAND (305)
+-#define MODULE_ID_AP_MMC (306)
+-#define MODULE_ID_AP_WIFI (307)
+-#define MODULE_ID_AP_DRIVES_END (400)
++#define MODULE_ID_CAP_USB ("cap_usb")
++#define MODULE_ID_CAP_TSC ("cap_tsc")
++#define MODULE_ID_CAP_PSM ("cap_psm")
++#define MODULE_ID_CAP_NAND ("cap_nand")
++#define MODULE_ID_CAP_SPI ("cap_spi")
++#define MODULE_ID_CAP_MMC ("cap_mmc")
++#define MODULE_ID_CAP_UART ("cap_uart")
++#define MODULE_ID_CAP_PM ("cap_pm")
+
+-#define MODULE_ID_CAP_DRIVES_START (401)
+-#define MODULE_ID_CAP_USB (401)
+-#define MODULE_ID_CAP_TSC (402)
+-#define MODULE_ID_CAP_PSM (403)
+-#define MODULE_ID_CAP_NAND (404)
+-#define MODULE_ID_CAP_SPI (405)
+-#define MODULE_ID_CAP_MMC (406)
+-#define MODULE_ID_CAP_UART (407)
+-#define MODULE_ID_CAP_DRIVES_END (500)
+
+-#define MODULE_ID_AP_FS_START (501)
+-#define MODULE_ID_AP_JFFS2 (501)
+-#define MODULE_ID_AP_FS_END (600)
++#define MODULE_ID_AP_JFFS2 ("ap_jffs2")
++#define MODULE_ID_AP_FOTA ("ap_fota")
++#define MODULE_ID_AP_FS_CHECK ("ap_fs_check")
+
+-#define MODULE_ID_CAP_FS_START (601)
+-#define MODULE_ID_CAP_FS_END (700)
+-
+-#define MODULE_ID_AP_APP_START (701)
+-#define MODULE_ID_AP_FOTA (701)
+-#define MODULE_ID_AP_FS_CHECK (702)
+-#define MODULE_ID_AP_APP_END (800)
+-
+-#define MODULE_ID_CAP_APP_START (801)
+-#define MODULE_ID_CAP_FOTA (801)
+-#define MODULE_ID_CAP_FS_CHECK (802)
+-#define MODULE_ID_CAP_APP_END (900)
+-
+-#if defined(_USE_ZXIC_DEBUG_INFO) && !defined(CONFIG_SYSTEM_RECOVERY)
+-int sc_debug_info_vrecord(unsigned int id, const char *format, va_list args);
+-int sc_debug_info_record(unsigned int id, const char *format, ...);
++#define MODULE_ID_CAP_FOTA ("cap_fota")
++#define MODULE_ID_CAP_FS_CHECK ("cap_fs_check")
++
++#if defined(_USE_ZXIC_DEBUG_INFO)
++int sc_debug_info_vrecord(char *id, const char *format, va_list args);
++int sc_debug_info_record(char *id, const char *format, ...);
+ #else
+-static inline int sc_debug_info_vrecord(unsigned int id, const char *format, va_list args) { return 0; }
+-static inline int sc_debug_info_record(unsigned int id, const char *format, ...) { return 0; }
++static inline int sc_debug_info_vrecord(char *id, const char *format, va_list args) { return 0; }
++static inline int sc_debug_info_record(char *id, const char *format, ...) { return 0; }
+ #endif
+
+ #endif
+\ No newline at end of file
+diff --git a/Uboot/pub/include/ps_phy/atipsevent.h b/Uboot/pub/include/ps_phy/atipsevent.h
+index 2bd5386..92e71e6 100755
+--- a/Uboot/pub/include/ps_phy/atipsevent.h
++++ b/Uboot/pub/include/ps_phy/atipsevent.h
+@@ -421,6 +421,7 @@
+ #define AP_MMIA_ZCOPS_TEST_CNF_EV (DWORD)(AP_MMIA_MM_RSP_EVENT + 25)
+ #define AP_MMIA_TIMEZONE_IND_EV (DWORD)(AP_MMIA_MM_RSP_EVENT + 26)
+ #define AP_MMIA_ZULRTIND_IND_EV (DWORD)(AP_MMIA_MM_RSP_EVENT + 27)
++#define AP_MMIA_ZPSABNORMAL_IND_EV (DWORD)(AP_MMIA_MM_RSP_EVENT + 28)
+ /* ========================================================================
+ AP-MMIA CCÏà¹Ø²¿·ÖÏûÏ¢ºÅ
+ ======================================================================== */
+diff --git a/Uboot/pub/project/zx297520v3/include/drv/NvParam_drv.h b/Uboot/pub/project/zx297520v3/include/drv/NvParam_drv.h
+index 66c6f6d..95c3158 100755
+--- a/Uboot/pub/project/zx297520v3/include/drv/NvParam_drv.h
++++ b/Uboot/pub/project/zx297520v3/include/drv/NvParam_drv.h
+@@ -214,8 +214,10 @@
+ UINT8 isUseTxDtmfDet;
+ UINT8 isUseRxMixData;
+ UINT8 isUseTxMixData;//12
+- UINT8 isUseEcall;
+- UINT8 reserved[19];//32-13
++ UINT8 isUseEcall; //13
++ UINT8 isUseVoiceBuffer; //14 0 not use,1 use
++ UINT8 selVoiceBufferType; //15 0 single core, 1 dual core
++ UINT8 reserved[17];//32-15
+
+ } T_Audio_NvFlag;
+
+diff --git a/Uboot/pub/project/zx297520v3/include/infra/ram_base_config_7520v3.h b/Uboot/pub/project/zx297520v3/include/infra/ram_base_config_7520v3.h
+index 6a1626d..edb3bfb 100755
+--- a/Uboot/pub/project/zx297520v3/include/infra/ram_base_config_7520v3.h
++++ b/Uboot/pub/project/zx297520v3/include/infra/ram_base_config_7520v3.h
+@@ -163,7 +163,7 @@
+ #define DDR_BASE_OFF_CAP (DDR_BASE_OFF_CAP_BUF + DDR_BASE_LEN_CAP_BUF)
+
+ /* capºËµÄdtbµØÖ·¹©ubootºËcap kernelʹÓà */
+-#define DDR_BASE_CAP_DTB_ADDR (DDR_BASE_ADDR_CAP_BUF + (0x00100000UL>>CPU_SHIFT))
++#define DDR_BASE_CAP_DTB_ADDR (DDR_BASE_ADDR_CAP_BUF + (0x00194000UL>>CPU_SHIFT))
+ #else
+ /* 42.75M£¬AP¹²ºË°æ±¾(´Ë´óСÊǰ´ÕÕº¬CAPºËµÄ64MÄÚ´æÅäÖö¨Ò壬¸Ãºê±ð´¦²»»á±»Ê¹ÓÃ) */
+ #define DDR_BASE_ADDR_AP (DDR_BASE_ADDR_RAMDUMP + DDR_BASE_LEN_RAMDUMP)
+@@ -253,6 +253,13 @@
+ #define TEE_SHARE_BUF_ADDR (RAMDUMP_AP_TO_CAP_BUF_ADDR + RAMDUMP_AP_TO_CAP_BUF_LEN)
+ #define TEE_SHARE_BUF_LEN ((384 * 1024UL)>>CPU_SHIFT)
+
++/* psά²â¿Õ¼ä(Êý¾Ý + ¿ØÖÆ)¸´ÓÃAP_TO_CAPµÄramdump´æ´¢¿Õ¼ä */
++#define PS_DEBUG_INFO_LEN_ADDR (RAMDUMP_AP_TO_CAP_BUF_ADDR + ((4 * 1024UL)>>CPU_SHIFT))
++#define PS_DEBUG_INFO_LEN_SIZE ((4 * 1024UL)>>CPU_SHIFT)
++
++#define PS_DEBUG_INFO_ADDR (PS_DEBUG_INFO_LEN_ADDR + PS_DEBUG_INFO_LEN_SIZE)
++#define PS_DEBUG_INFO_SIZE ((64 * 1024UL)>>CPU_SHIFT)
++
+ #define ICP_CAP_BUF_ADDR_PA DDR_BASE_CAPBUF_ADDR_PA
+ #define TOOL_CAP_BUF_ADDR_PA (ICP_CAP_BUF_ADDR_PA + ICP_CAP_BUF_LEN)
+ #define RINGBUF_CAP_TO_AP_ADDR_PA (TOOL_CAP_BUF_ADDR_PA + TOOL_CAP_BUF_LEN)
+@@ -262,6 +269,9 @@
+ #define TOOL_ZSP_TO_CAP_LOG_ADDR_PA (RINGBUF_AP_TO_CAP_ADDR_PA + RINGBUF_AP_TO_CAP_LEN)
+ #define RAMDUMP_AP_TO_CAP_BUF_ADDR_PA (TOOL_ZSP_TO_CAP_LOG_ADDR_PA + TOOL_ZSP_TO_CAP_LOG_LEN)
+ #define TEE_SHARE_BUF_ADDR_PA (RAMDUMP_AP_TO_CAP_BUF_ADDR_PA + RAMDUMP_AP_TO_CAP_BUF_LEN)
++
++#define PS_DEBUG_INFO_LEN_ADDR_PA (RAMDUMP_AP_TO_CAP_BUF_ADDR_PA + ((4 * 1024UL)>>CPU_SHIFT))
++#define PS_DEBUG_INFO_ADDR_PA (PS_DEBUG_INFO_LEN_ADDR_PA + PS_DEBUG_INFO_LEN_SIZE)
+ #endif
+
+ /* 7520V3оƬIRAM0ѹËõ£¬ÐÒéÕ»ÎïÀí²ã½»»¥¿Õ¼äÒÆ¶¯µ½DDR£¬¸´ÓÃRamdump¿Õ¼ä */
+diff --git a/Uboot/rpm/project/zx297520v3/bin/tos/modem_7520v3/evb_cpurpm.elf b/Uboot/rpm/project/zx297520v3/bin/tos/modem_7520v3/evb_cpurpm.elf
+index 25435d8..e955a1c 100755
+--- a/Uboot/rpm/project/zx297520v3/bin/tos/modem_7520v3/evb_cpurpm.elf
++++ b/Uboot/rpm/project/zx297520v3/bin/tos/modem_7520v3/evb_cpurpm.elf
+Binary files differ
+diff --git a/Uboot/rpm/project/zx297520v3/bin/tos/modem_7520v3/evb_cpurpm.img b/Uboot/rpm/project/zx297520v3/bin/tos/modem_7520v3/evb_cpurpm.img
+index c177ef6..23e491e 100755
+--- a/Uboot/rpm/project/zx297520v3/bin/tos/modem_7520v3/evb_cpurpm.img
++++ b/Uboot/rpm/project/zx297520v3/bin/tos/modem_7520v3/evb_cpurpm.img
+Binary files differ
+diff --git a/Uboot/rpm/project/zx297520v3/bin/tos/modem_7520v3/evb_cpurpm.map b/Uboot/rpm/project/zx297520v3/bin/tos/modem_7520v3/evb_cpurpm.map
+index 0bc39a0..191ab18 100755
+--- a/Uboot/rpm/project/zx297520v3/bin/tos/modem_7520v3/evb_cpurpm.map
++++ b/Uboot/rpm/project/zx297520v3/bin/tos/modem_7520v3/evb_cpurpm.map
+@@ -246,9 +246,9 @@
+ 0x00000000 0xb8 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_spinlock.o)
+ .text.zDrvSysSpinlock_SoftUnlock
+ 0x00000000 0x80 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_spinlock.o)
+- .rodata.__FUNCTION__.5142
++ .rodata.__FUNCTION__.5154
+ 0x00000000 0x1c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_spinlock.o)
+- .bss.lock_count.5134
++ .bss.lock_count.5146
+ 0x00000000 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_spinlock.o)
+ .text 0x00000000 0x0 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sys.o)
+ .data 0x00000000 0x0 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sys.o)
+@@ -429,22 +429,22 @@
+ 0x00000000 0x168 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_i2c.o)
+ .text.zDrvI2c_DevWrite_ByteStream
+ 0x00000000 0x140 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_i2c.o)
+- .rodata.__FUNCTION__.5357
++ .rodata.__FUNCTION__.5362
+ 0x00000000 0x1c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_i2c.o)
+- .rodata.__FUNCTION__.5298
++ .rodata.__FUNCTION__.5303
+ 0x00000000 0x14 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_i2c.o)
+- .rodata.__FUNCTION__.5376
++ .rodata.__FUNCTION__.5381
+ 0x00000000 0x1c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_i2c.o)
+- .rodata.__FUNCTION__.5318
++ .rodata.__FUNCTION__.5323
+ 0x00000000 0x14 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_i2c.o)
+- .rodata.__FUNCTION__.5278
++ .rodata.__FUNCTION__.5283
+ 0x00000000 0x10 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_i2c.o)
+ .text 0x00000000 0x0 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
+ .data 0x00000000 0x0 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
+ .bss 0x00000000 0x0 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
+ .text.wdt_set_switch
+- 0x00000000 0x4c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
+- .rodata.__FUNCTION__.5281
++ 0x00000000 0x50 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
++ .rodata.__FUNCTION__.5324
+ 0x00000000 0x10 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
+ .text 0x00000000 0x0 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sysclk.o)
+ .data 0x00000000 0x0 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sysclk.o)
+@@ -453,10 +453,10 @@
+ 0x00000000 0x48 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sysclk.o)
+ .text.zDrvSysClk_IsAutoGate
+ 0x00000000 0x48 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sysclk.o)
+- .rodata.__FUNCTION__.5162
+- 0x00000000 0x14 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sysclk.o)
+- .rodata.__FUNCTION__.5167
++ .rodata.__FUNCTION__.5172
+ 0x00000000 0x18 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sysclk.o)
++ .rodata.__FUNCTION__.5167
++ 0x00000000 0x14 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sysclk.o)
+ .text 0x00000000 0x0 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_clkinfo.o)
+ .data 0x00000000 0x0 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_clkinfo.o)
+ .bss 0x00000000 0x0 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_clkinfo.o)
+@@ -1449,7 +1449,7 @@
+ 0x000001f0 hal_virtual_vector_table_end = (hal_virtual_vector_table + 0x100)
+ 0x0000c000 hal_startup_stack = 0xc000
+
+-.debug_aranges 0x00000000 0x1530
++.debug_aranges 0x00000000 0x1540
+ *(.debug_aranges)
+ .debug_aranges
+ 0x00000000 0x20 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/vectors.o
+@@ -1462,274 +1462,274 @@
+ .debug_aranges
+ 0x000000f8 0x20 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_init.o)
+ .debug_aranges
+- 0x00000118 0x68 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_spinlock.o)
++ 0x00000118 0x70 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_spinlock.o)
+ .debug_aranges
+- 0x00000180 0x28 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sys.o)
++ 0x00000188 0x28 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sys.o)
+ .debug_aranges
+- 0x000001a8 0xa0 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(icp_rpMsg.o)
++ 0x000001b0 0xa0 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(icp_rpMsg.o)
+ .debug_aranges
+- 0x00000248 0x20 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_gpio.o)
++ 0x00000250 0x28 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_gpio.o)
+ .debug_aranges
+- 0x00000268 0xa8 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_int.o)
++ 0x00000278 0xa8 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_int.o)
+ .debug_aranges
+- 0x00000310 0x78 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_timer.o)
++ 0x00000320 0x78 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_timer.o)
+ .debug_aranges
+- 0x00000388 0x60 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_dma.o)
++ 0x00000398 0x60 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_dma.o)
+ .debug_aranges
+- 0x000003e8 0x70 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow.o)
++ 0x000003f8 0x70 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow.o)
+ .debug_aranges
+- 0x00000458 0x150 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_ddr_syno_inno.o)
++ 0x00000468 0x150 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_ddr_syno_inno.o)
+ .debug_aranges
+- 0x000005a8 0x40 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_debug.o)
++ 0x000005b8 0x40 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_debug.o)
+ .debug_aranges
+- 0x000005e8 0xa8 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pd_context.o)
++ 0x000005f8 0xa8 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pd_context.o)
+ .debug_aranges
+- 0x00000690 0x78 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_i2c.o)
++ 0x000006a0 0x78 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_i2c.o)
+ .debug_aranges
+- 0x00000708 0xa8 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
++ 0x00000718 0xa8 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
+ .debug_aranges
+- 0x000007b0 0x98 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sysclk.o)
++ 0x000007c0 0x98 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sysclk.o)
+ .debug_aranges
+- 0x00000848 0x18 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_clkinfo.o)
++ 0x00000858 0x18 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_clkinfo.o)
+ .debug_aranges
+- 0x00000860 0x18 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(int_cfg.o)
++ 0x00000870 0x18 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(int_cfg.o)
+ .debug_aranges
+- 0x00000878 0x38 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_clk.o)
++ 0x00000888 0x38 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_clk.o)
+ .debug_aranges
+- 0x000008b0 0xa8 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/peripheral.a(hal_pm.o)
++ 0x000008c0 0xa8 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/peripheral.a(hal_pm.o)
+ .debug_aranges
+- 0x00000958 0x60 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/peripheral.a(hal_pmic_i2c.o)
++ 0x00000968 0x60 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/peripheral.a(hal_pmic_i2c.o)
+ .debug_aranges
+- 0x000009b8 0x28 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/public.a(hal_assert.o)
++ 0x000009c8 0x28 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/public.a(hal_assert.o)
+ .debug_aranges
+- 0x000009e0 0x40 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_osa_tos.a(tos_except_cortexm.o)
++ 0x000009f0 0x40 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_osa_tos.a(tos_except_cortexm.o)
+ .debug_aranges
+- 0x00000a20 0xb8 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_osa_tos.a(tos_irq.o)
++ 0x00000a30 0xb8 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_osa_tos.a(tos_irq.o)
+ .debug_aranges
+- 0x00000ad8 0x28 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_sup.a(sup_agent_logctrl.o)
++ 0x00000ae8 0x28 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_sup.a(sup_agent_logctrl.o)
+ .debug_aranges
+- 0x00000b00 0x48 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_sup.a(sup_ramdump_client_lib.o)
++ 0x00000b10 0x48 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_sup.a(sup_ramdump_client_lib.o)
+ .debug_aranges
+- 0x00000b48 0xb0 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_arch_hal_misc.o)
++ 0x00000b58 0xb0 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_arch_hal_misc.o)
+ .debug_aranges
+- 0x00000bf8 0x48 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_tos_var_tos_misc.o)
++ 0x00000c08 0x48 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_tos_var_tos_misc.o)
+ .debug_aranges
+- 0x00000c40 0x28 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_tos_tos_m0_tos_m0_misc.o)
++ 0x00000c50 0x28 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_tos_tos_m0_tos_m0_misc.o)
+ .debug_aranges
+- 0x00000c68 0x30 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_common_hal_misc.o)
++ 0x00000c78 0x30 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_common_hal_misc.o)
+ .debug_aranges
+- 0x00000c98 0x20 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(infra_startup.o)
++ 0x00000ca8 0x20 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(infra_startup.o)
+ .debug_aranges
+- 0x00000cb8 0x38 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(infra_buffer.o)
++ 0x00000cc8 0x38 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(infra_buffer.o)
+ .debug_aranges
+- 0x00000cf0 0x3c8 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_kapi.o)
++ 0x00000d00 0x3c8 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_kapi.o)
+ .debug_aranges
+- 0x000010b8 0xe0 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_thread.o)
++ 0x000010c8 0xe0 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_thread.o)
+ .debug_aranges
+- 0x00001198 0xd0 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_intr.o)
++ 0x000011a8 0xd0 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_intr.o)
+ .debug_aranges
+- 0x00001268 0x90 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_bitmap.o)
++ 0x00001278 0x90 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_bitmap.o)
+ .debug_aranges
+- 0x000012f8 0x58 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_sched.o)
++ 0x00001308 0x58 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_sched.o)
+ .debug_aranges
+- 0x00001350 0x48 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_cnt_sem.o)
++ 0x00001360 0x48 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_cnt_sem.o)
+ .debug_aranges
+- 0x00001398 0x98 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_mutex.o)
++ 0x000013a8 0x98 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_mutex.o)
+ .debug_aranges
+- 0x00001430 0x20 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_arch_context.o)
++ 0x00001440 0x20 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_arch_context.o)
+ .debug_aranges
+- 0x00001450 0xe0 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_clock.o)
++ 0x00001460 0xe0 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_clock.o)
+
+ .debug_pubnames
+ *(.debug_pubnames)
+
+-.debug_info 0x00000000 0x3172f
++.debug_info 0x00000000 0x31a2c
+ *(.debug_info)
+ .debug_info 0x00000000 0xbf K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/vectors.o
+ .debug_info 0x000000bf 0x112 K:/rpm/project/zx297520v3/obj/tos/all/debug/appstart/SysEntry.o
+ .debug_info 0x000001d1 0xbe K:/rpm/project/zx297520v3/obj/tos/all/debug/appstart/appstart.o
+ .debug_info 0x0000028f 0x34f K:/rpm/project/zx297520v3/obj/tos/all/debug/os/tos/tos_irq.o
+ .debug_info 0x000005de 0x23e K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_init.o)
+- .debug_info 0x0000081c 0x934 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_spinlock.o)
+- .debug_info 0x00001150 0x3a4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sys.o)
+- .debug_info 0x000014f4 0x1bd4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(icp_rpMsg.o)
+- .debug_info 0x000030c8 0x367 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_gpio.o)
+- .debug_info 0x0000342f 0xe82 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_int.o)
+- .debug_info 0x000042b1 0xf82 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_timer.o)
+- .debug_info 0x00005233 0xf47 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_dma.o)
+- .debug_info 0x0000617a 0x1cf6 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow.o)
+- .debug_info 0x00007e70 0xb40 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_ddr_syno_inno.o)
+- .debug_info 0x000089b0 0x8a8 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_debug.o)
+- .debug_info 0x00009258 0x2343 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pd_context.o)
+- .debug_info 0x0000b59b 0x2286 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_i2c.o)
+- .debug_info 0x0000d821 0x1825 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
+- .debug_info 0x0000f046 0x1073 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sysclk.o)
+- .debug_info 0x000100b9 0x486 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_clkinfo.o)
+- .debug_info 0x0001053f 0xeb K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(int_cfg.o)
+- .debug_info 0x0001062a 0xe0d K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_clk.o)
+- .debug_info 0x00011437 0xf45 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/peripheral.a(hal_pm.o)
+- .debug_info 0x0001237c 0x89f K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/peripheral.a(hal_pmic_i2c.o)
+- .debug_info 0x00012c1b 0x34e K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/public.a(hal_assert.o)
+- .debug_info 0x00012f69 0x368 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_osa_tos.a(tos_except_cortexm.o)
+- .debug_info 0x000132d1 0xbba K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_osa_tos.a(tos_irq.o)
+- .debug_info 0x00013e8b 0x4f4 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_sup.a(sup_agent_logctrl.o)
+- .debug_info 0x0001437f 0xa45 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_sup.a(sup_ramdump_client_lib.o)
+- .debug_info 0x00014dc4 0xc60 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_arch_hal_misc.o)
+- .debug_info 0x00015a24 0x254 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_tos_var_tos_misc.o)
+- .debug_info 0x00015c78 0x1b5 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_tos_tos_m0_tos_m0_misc.o)
+- .debug_info 0x00015e2d 0x217 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_common_hal_misc.o)
+- .debug_info 0x00016044 0xd7 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(infra_startup.o)
+- .debug_info 0x0001611b 0x175d K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(infra_buffer.o)
+- .debug_info 0x00017878 0x67a7 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_kapi.o)
+- .debug_info 0x0001e01f 0x445c K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_thread.o)
+- .debug_info 0x0002247b 0x2a7c K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_intr.o)
+- .debug_info 0x00024ef7 0x1fa9 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_bitmap.o)
+- .debug_info 0x00026ea0 0x25c5 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_sched.o)
+- .debug_info 0x00029465 0x2232 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_cnt_sem.o)
+- .debug_info 0x0002b697 0x387d K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_mutex.o)
+- .debug_info 0x0002ef14 0xbf K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_arch_context.o)
+- .debug_info 0x0002efd3 0x275c K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_clock.o)
++ .debug_info 0x0000081c 0xa3c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_spinlock.o)
++ .debug_info 0x00001258 0x3a4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sys.o)
++ .debug_info 0x000015fc 0x1bd4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(icp_rpMsg.o)
++ .debug_info 0x000031d0 0x3eb K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_gpio.o)
++ .debug_info 0x000035bb 0xe82 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_int.o)
++ .debug_info 0x0000443d 0xf82 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_timer.o)
++ .debug_info 0x000053bf 0xf4e K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_dma.o)
++ .debug_info 0x0000630d 0x1cf6 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow.o)
++ .debug_info 0x00008003 0xb40 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_ddr_syno_inno.o)
++ .debug_info 0x00008b43 0x8a8 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_debug.o)
++ .debug_info 0x000093eb 0x2343 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pd_context.o)
++ .debug_info 0x0000b72e 0x228c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_i2c.o)
++ .debug_info 0x0000d9ba 0x1989 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
++ .debug_info 0x0000f343 0x1073 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sysclk.o)
++ .debug_info 0x000103b6 0x486 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_clkinfo.o)
++ .debug_info 0x0001083c 0xeb K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(int_cfg.o)
++ .debug_info 0x00010927 0xe0d K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_clk.o)
++ .debug_info 0x00011734 0xf45 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/peripheral.a(hal_pm.o)
++ .debug_info 0x00012679 0x89f K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/peripheral.a(hal_pmic_i2c.o)
++ .debug_info 0x00012f18 0x34e K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/public.a(hal_assert.o)
++ .debug_info 0x00013266 0x368 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_osa_tos.a(tos_except_cortexm.o)
++ .debug_info 0x000135ce 0xbba K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_osa_tos.a(tos_irq.o)
++ .debug_info 0x00014188 0x4f4 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_sup.a(sup_agent_logctrl.o)
++ .debug_info 0x0001467c 0xa45 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_sup.a(sup_ramdump_client_lib.o)
++ .debug_info 0x000150c1 0xc60 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_arch_hal_misc.o)
++ .debug_info 0x00015d21 0x254 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_tos_var_tos_misc.o)
++ .debug_info 0x00015f75 0x1b5 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_tos_tos_m0_tos_m0_misc.o)
++ .debug_info 0x0001612a 0x217 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_common_hal_misc.o)
++ .debug_info 0x00016341 0xd7 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(infra_startup.o)
++ .debug_info 0x00016418 0x175d K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(infra_buffer.o)
++ .debug_info 0x00017b75 0x67a7 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_kapi.o)
++ .debug_info 0x0001e31c 0x445c K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_thread.o)
++ .debug_info 0x00022778 0x2a7c K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_intr.o)
++ .debug_info 0x000251f4 0x1fa9 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_bitmap.o)
++ .debug_info 0x0002719d 0x25c5 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_sched.o)
++ .debug_info 0x00029762 0x2232 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_cnt_sem.o)
++ .debug_info 0x0002b994 0x387d K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_mutex.o)
++ .debug_info 0x0002f211 0xbf K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_arch_context.o)
++ .debug_info 0x0002f2d0 0x275c K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_clock.o)
+
+-.debug_abbrev 0x00000000 0x80f5
++.debug_abbrev 0x00000000 0x8138
+ *(.debug_abbrev)
+ .debug_abbrev 0x00000000 0x14 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/vectors.o
+ .debug_abbrev 0x00000014 0xab K:/rpm/project/zx297520v3/obj/tos/all/debug/appstart/SysEntry.o
+ .debug_abbrev 0x000000bf 0x87 K:/rpm/project/zx297520v3/obj/tos/all/debug/appstart/appstart.o
+ .debug_abbrev 0x00000146 0x187 K:/rpm/project/zx297520v3/obj/tos/all/debug/os/tos/tos_irq.o
+ .debug_abbrev 0x000002cd 0xdd K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_init.o)
+- .debug_abbrev 0x000003aa 0x278 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_spinlock.o)
+- .debug_abbrev 0x00000622 0x109 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sys.o)
+- .debug_abbrev 0x0000072b 0x3c2 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(icp_rpMsg.o)
+- .debug_abbrev 0x00000aed 0xd0 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_gpio.o)
+- .debug_abbrev 0x00000bbd 0x378 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_int.o)
+- .debug_abbrev 0x00000f35 0x30c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_timer.o)
+- .debug_abbrev 0x00001241 0x29b K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_dma.o)
+- .debug_abbrev 0x000014dc 0x407 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow.o)
+- .debug_abbrev 0x000018e3 0x2f0 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_ddr_syno_inno.o)
+- .debug_abbrev 0x00001bd3 0x21c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_debug.o)
+- .debug_abbrev 0x00001def 0x2fb K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pd_context.o)
+- .debug_abbrev 0x000020ea 0x33b K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_i2c.o)
+- .debug_abbrev 0x00002425 0x304 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
+- .debug_abbrev 0x00002729 0x216 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sysclk.o)
+- .debug_abbrev 0x0000293f 0xc6 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_clkinfo.o)
+- .debug_abbrev 0x00002a05 0x72 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(int_cfg.o)
+- .debug_abbrev 0x00002a77 0x24c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_clk.o)
+- .debug_abbrev 0x00002cc3 0x2b6 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/peripheral.a(hal_pm.o)
+- .debug_abbrev 0x00002f79 0x1f3 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/peripheral.a(hal_pmic_i2c.o)
+- .debug_abbrev 0x0000316c 0x148 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/public.a(hal_assert.o)
+- .debug_abbrev 0x000032b4 0x1be K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_osa_tos.a(tos_except_cortexm.o)
+- .debug_abbrev 0x00003472 0x26f K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_osa_tos.a(tos_irq.o)
+- .debug_abbrev 0x000036e1 0x197 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_sup.a(sup_agent_logctrl.o)
+- .debug_abbrev 0x00003878 0x314 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_sup.a(sup_ramdump_client_lib.o)
+- .debug_abbrev 0x00003b8c 0x31c K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_arch_hal_misc.o)
+- .debug_abbrev 0x00003ea8 0x14d K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_tos_var_tos_misc.o)
+- .debug_abbrev 0x00003ff5 0x104 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_tos_tos_m0_tos_m0_misc.o)
+- .debug_abbrev 0x000040f9 0x167 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_common_hal_misc.o)
+- .debug_abbrev 0x00004260 0x9d K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(infra_startup.o)
+- .debug_abbrev 0x000042fd 0x3d2 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(infra_buffer.o)
+- .debug_abbrev 0x000046cf 0x985 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_kapi.o)
+- .debug_abbrev 0x00005054 0x84e K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_thread.o)
+- .debug_abbrev 0x000058a2 0x7cb K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_intr.o)
+- .debug_abbrev 0x0000606d 0x5ba K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_bitmap.o)
+- .debug_abbrev 0x00006627 0x735 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_sched.o)
+- .debug_abbrev 0x00006d5c 0x5b6 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_cnt_sem.o)
+- .debug_abbrev 0x00007312 0x62c K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_mutex.o)
+- .debug_abbrev 0x0000793e 0x14 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_arch_context.o)
+- .debug_abbrev 0x00007952 0x7a3 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_clock.o)
++ .debug_abbrev 0x000003aa 0x283 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_spinlock.o)
++ .debug_abbrev 0x0000062d 0x109 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sys.o)
++ .debug_abbrev 0x00000736 0x3c2 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(icp_rpMsg.o)
++ .debug_abbrev 0x00000af8 0x108 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_gpio.o)
++ .debug_abbrev 0x00000c00 0x378 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_int.o)
++ .debug_abbrev 0x00000f78 0x30c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_timer.o)
++ .debug_abbrev 0x00001284 0x29b K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_dma.o)
++ .debug_abbrev 0x0000151f 0x407 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow.o)
++ .debug_abbrev 0x00001926 0x2f0 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_ddr_syno_inno.o)
++ .debug_abbrev 0x00001c16 0x21c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_debug.o)
++ .debug_abbrev 0x00001e32 0x2fb K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pd_context.o)
++ .debug_abbrev 0x0000212d 0x33b K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_i2c.o)
++ .debug_abbrev 0x00002468 0x304 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
++ .debug_abbrev 0x0000276c 0x216 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sysclk.o)
++ .debug_abbrev 0x00002982 0xc6 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_clkinfo.o)
++ .debug_abbrev 0x00002a48 0x72 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(int_cfg.o)
++ .debug_abbrev 0x00002aba 0x24c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_clk.o)
++ .debug_abbrev 0x00002d06 0x2b6 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/peripheral.a(hal_pm.o)
++ .debug_abbrev 0x00002fbc 0x1f3 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/peripheral.a(hal_pmic_i2c.o)
++ .debug_abbrev 0x000031af 0x148 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/public.a(hal_assert.o)
++ .debug_abbrev 0x000032f7 0x1be K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_osa_tos.a(tos_except_cortexm.o)
++ .debug_abbrev 0x000034b5 0x26f K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_osa_tos.a(tos_irq.o)
++ .debug_abbrev 0x00003724 0x197 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_sup.a(sup_agent_logctrl.o)
++ .debug_abbrev 0x000038bb 0x314 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_sup.a(sup_ramdump_client_lib.o)
++ .debug_abbrev 0x00003bcf 0x31c K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_arch_hal_misc.o)
++ .debug_abbrev 0x00003eeb 0x14d K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_tos_var_tos_misc.o)
++ .debug_abbrev 0x00004038 0x104 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_tos_tos_m0_tos_m0_misc.o)
++ .debug_abbrev 0x0000413c 0x167 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_common_hal_misc.o)
++ .debug_abbrev 0x000042a3 0x9d K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(infra_startup.o)
++ .debug_abbrev 0x00004340 0x3d2 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(infra_buffer.o)
++ .debug_abbrev 0x00004712 0x985 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_kapi.o)
++ .debug_abbrev 0x00005097 0x84e K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_thread.o)
++ .debug_abbrev 0x000058e5 0x7cb K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_intr.o)
++ .debug_abbrev 0x000060b0 0x5ba K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_bitmap.o)
++ .debug_abbrev 0x0000666a 0x735 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_sched.o)
++ .debug_abbrev 0x00006d9f 0x5b6 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_cnt_sem.o)
++ .debug_abbrev 0x00007355 0x62c K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_mutex.o)
++ .debug_abbrev 0x00007981 0x14 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_arch_context.o)
++ .debug_abbrev 0x00007995 0x7a3 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_clock.o)
+
+-.debug_line 0x00000000 0x94e0
++.debug_line 0x00000000 0x957c
+ *(.debug_line)
+ .debug_line 0x00000000 0xf0 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/vectors.o
+ .debug_line 0x000000f0 0x8e K:/rpm/project/zx297520v3/obj/tos/all/debug/appstart/SysEntry.o
+ .debug_line 0x0000017e 0xb0 K:/rpm/project/zx297520v3/obj/tos/all/debug/appstart/appstart.o
+ .debug_line 0x0000022e 0x178 K:/rpm/project/zx297520v3/obj/tos/all/debug/os/tos/tos_irq.o
+ .debug_line 0x000003a6 0xa4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_init.o)
+- .debug_line 0x0000044a 0x24f K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_spinlock.o)
+- .debug_line 0x00000699 0xd8 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sys.o)
+- .debug_line 0x00000771 0x493 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(icp_rpMsg.o)
+- .debug_line 0x00000c04 0xac K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_gpio.o)
+- .debug_line 0x00000cb0 0x345 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_int.o)
+- .debug_line 0x00000ff5 0x2b3 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_timer.o)
+- .debug_line 0x000012a8 0x288 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_dma.o)
+- .debug_line 0x00001530 0x3c4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow.o)
+- .debug_line 0x000018f4 0x568 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_ddr_syno_inno.o)
+- .debug_line 0x00001e5c 0x147 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_debug.o)
+- .debug_line 0x00001fa3 0x5ea K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pd_context.o)
+- .debug_line 0x0000258d 0x52c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_i2c.o)
+- .debug_line 0x00002ab9 0x3b2 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
+- .debug_line 0x00002e6b 0x2ff K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sysclk.o)
+- .debug_line 0x0000316a 0x96 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_clkinfo.o)
+- .debug_line 0x00003200 0x82 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(int_cfg.o)
+- .debug_line 0x00003282 0x19b K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_clk.o)
+- .debug_line 0x0000341d 0x319 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/peripheral.a(hal_pm.o)
+- .debug_line 0x00003736 0x192 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/peripheral.a(hal_pmic_i2c.o)
+- .debug_line 0x000038c8 0xda K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/public.a(hal_assert.o)
+- .debug_line 0x000039a2 0x1d3 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_osa_tos.a(tos_except_cortexm.o)
+- .debug_line 0x00003b75 0x32f K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_osa_tos.a(tos_irq.o)
+- .debug_line 0x00003ea4 0x110 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_sup.a(sup_agent_logctrl.o)
+- .debug_line 0x00003fb4 0x317 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_sup.a(sup_ramdump_client_lib.o)
+- .debug_line 0x000042cb 0x486 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_arch_hal_misc.o)
+- .debug_line 0x00004751 0x18c K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_tos_var_tos_misc.o)
+- .debug_line 0x000048dd 0x16c K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_tos_tos_m0_tos_m0_misc.o)
+- .debug_line 0x00004a49 0x156 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_common_hal_misc.o)
+- .debug_line 0x00004b9f 0x126 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(infra_startup.o)
+- .debug_line 0x00004cc5 0x1d2 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(infra_buffer.o)
+- .debug_line 0x00004e97 0x1292 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_kapi.o)
+- .debug_line 0x00006129 0xddd K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_thread.o)
+- .debug_line 0x00006f06 0x593 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_intr.o)
+- .debug_line 0x00007499 0x3eb K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_bitmap.o)
+- .debug_line 0x00007884 0x526 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_sched.o)
+- .debug_line 0x00007daa 0x4b7 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_cnt_sem.o)
+- .debug_line 0x00008261 0xabe K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_mutex.o)
+- .debug_line 0x00008d1f 0xb9 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_arch_context.o)
+- .debug_line 0x00008dd8 0x708 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_clock.o)
++ .debug_line 0x0000044a 0x29f K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_spinlock.o)
++ .debug_line 0x000006e9 0xd8 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sys.o)
++ .debug_line 0x000007c1 0x493 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(icp_rpMsg.o)
++ .debug_line 0x00000c54 0xe2 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_gpio.o)
++ .debug_line 0x00000d36 0x345 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_int.o)
++ .debug_line 0x0000107b 0x2b3 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_timer.o)
++ .debug_line 0x0000132e 0x288 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_dma.o)
++ .debug_line 0x000015b6 0x3c4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow.o)
++ .debug_line 0x0000197a 0x568 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_ddr_syno_inno.o)
++ .debug_line 0x00001ee2 0x147 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_debug.o)
++ .debug_line 0x00002029 0x5ea K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pd_context.o)
++ .debug_line 0x00002613 0x52c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_i2c.o)
++ .debug_line 0x00002b3f 0x3c8 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
++ .debug_line 0x00002f07 0x2ff K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sysclk.o)
++ .debug_line 0x00003206 0x96 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_clkinfo.o)
++ .debug_line 0x0000329c 0x82 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(int_cfg.o)
++ .debug_line 0x0000331e 0x19b K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_clk.o)
++ .debug_line 0x000034b9 0x319 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/peripheral.a(hal_pm.o)
++ .debug_line 0x000037d2 0x192 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/peripheral.a(hal_pmic_i2c.o)
++ .debug_line 0x00003964 0xda K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/public.a(hal_assert.o)
++ .debug_line 0x00003a3e 0x1d3 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_osa_tos.a(tos_except_cortexm.o)
++ .debug_line 0x00003c11 0x32f K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_osa_tos.a(tos_irq.o)
++ .debug_line 0x00003f40 0x110 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_sup.a(sup_agent_logctrl.o)
++ .debug_line 0x00004050 0x317 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_sup.a(sup_ramdump_client_lib.o)
++ .debug_line 0x00004367 0x486 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_arch_hal_misc.o)
++ .debug_line 0x000047ed 0x18c K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_tos_var_tos_misc.o)
++ .debug_line 0x00004979 0x16c K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_tos_tos_m0_tos_m0_misc.o)
++ .debug_line 0x00004ae5 0x156 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_common_hal_misc.o)
++ .debug_line 0x00004c3b 0x126 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(infra_startup.o)
++ .debug_line 0x00004d61 0x1d2 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(infra_buffer.o)
++ .debug_line 0x00004f33 0x1292 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_kapi.o)
++ .debug_line 0x000061c5 0xddd K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_thread.o)
++ .debug_line 0x00006fa2 0x593 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_intr.o)
++ .debug_line 0x00007535 0x3eb K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_bitmap.o)
++ .debug_line 0x00007920 0x526 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_sched.o)
++ .debug_line 0x00007e46 0x4b7 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_cnt_sem.o)
++ .debug_line 0x000082fd 0xabe K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_mutex.o)
++ .debug_line 0x00008dbb 0xb9 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_arch_context.o)
++ .debug_line 0x00008e74 0x708 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_clock.o)
+
+-.debug_frame 0x00000000 0x37a8
++.debug_frame 0x00000000 0x37ec
+ *(.debug_frame)
+ .debug_frame 0x00000000 0x28 K:/rpm/project/zx297520v3/obj/tos/all/debug/appstart/SysEntry.o
+ .debug_frame 0x00000028 0x38 K:/rpm/project/zx297520v3/obj/tos/all/debug/appstart/appstart.o
+ .debug_frame 0x00000060 0x120 K:/rpm/project/zx297520v3/obj/tos/all/debug/os/tos/tos_irq.o
+ .debug_frame 0x00000180 0x2c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_init.o)
+- .debug_frame 0x000001ac 0x13c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_spinlock.o)
+- .debug_frame 0x000002e8 0x40 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sys.o)
+- .debug_frame 0x00000328 0x220 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(icp_rpMsg.o)
+- .debug_frame 0x00000548 0x2c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_gpio.o)
+- .debug_frame 0x00000574 0x194 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_int.o)
+- .debug_frame 0x00000708 0x13c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_timer.o)
+- .debug_frame 0x00000844 0x128 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_dma.o)
+- .debug_frame 0x0000096c 0x128 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow.o)
+- .debug_frame 0x00000a94 0x310 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_ddr_syno_inno.o)
+- .debug_frame 0x00000da4 0x70 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_debug.o)
+- .debug_frame 0x00000e14 0x1c4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pd_context.o)
+- .debug_frame 0x00000fd8 0x1a8 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_i2c.o)
+- .debug_frame 0x00001180 0x1f8 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
+- .debug_frame 0x00001378 0x1d0 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sysclk.o)
+- .debug_frame 0x00001548 0x7c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_clk.o)
+- .debug_frame 0x000015c4 0x1c0 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/peripheral.a(hal_pm.o)
+- .debug_frame 0x00001784 0x118 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/peripheral.a(hal_pmic_i2c.o)
+- .debug_frame 0x0000189c 0x44 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/public.a(hal_assert.o)
+- .debug_frame 0x000018e0 0x7c K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_osa_tos.a(tos_except_cortexm.o)
+- .debug_frame 0x0000195c 0x1f8 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_osa_tos.a(tos_irq.o)
+- .debug_frame 0x00001b54 0x48 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_sup.a(sup_agent_logctrl.o)
+- .debug_frame 0x00001b9c 0xb8 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_sup.a(sup_ramdump_client_lib.o)
+- .debug_frame 0x00001c54 0x1d0 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_arch_hal_misc.o)
+- .debug_frame 0x00001e24 0x98 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_tos_var_tos_misc.o)
+- .debug_frame 0x00001ebc 0x38 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_tos_tos_m0_tos_m0_misc.o)
+- .debug_frame 0x00001ef4 0x50 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_common_hal_misc.o)
+- .debug_frame 0x00001f44 0x28 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(infra_startup.o)
+- .debug_frame 0x00001f6c 0x6c K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(infra_buffer.o)
+- .debug_frame 0x00001fd8 0xadc K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_kapi.o)
+- .debug_frame 0x00002ab4 0x2e0 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_thread.o)
+- .debug_frame 0x00002d94 0x24c K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_intr.o)
+- .debug_frame 0x00002fe0 0x15c K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_bitmap.o)
+- .debug_frame 0x0000313c 0xe8 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_sched.o)
+- .debug_frame 0x00003224 0xcc K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_cnt_sem.o)
+- .debug_frame 0x000032f0 0x214 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_mutex.o)
+- .debug_frame 0x00003504 0x254 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_clock.o)
+- .debug_frame 0x00003758 0x20 /cygdrive/k/build/compiler/gcc_arm/arm-eabi/bin/../lib/gcc/arm-eabi/4.7.1/thumb/libgcc.a(_udivsi3.o)
+- .debug_frame 0x00003778 0x30 /cygdrive/k/build/compiler/gcc_arm/arm-eabi/bin/../lib/gcc/arm-eabi/4.7.1/thumb/libgcc.a(_muldi3.o)
++ .debug_frame 0x000001ac 0x168 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_spinlock.o)
++ .debug_frame 0x00000314 0x40 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sys.o)
++ .debug_frame 0x00000354 0x220 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(icp_rpMsg.o)
++ .debug_frame 0x00000574 0x44 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_gpio.o)
++ .debug_frame 0x000005b8 0x194 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_int.o)
++ .debug_frame 0x0000074c 0x13c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_timer.o)
++ .debug_frame 0x00000888 0x128 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_dma.o)
++ .debug_frame 0x000009b0 0x128 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow.o)
++ .debug_frame 0x00000ad8 0x310 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_ddr_syno_inno.o)
++ .debug_frame 0x00000de8 0x70 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_debug.o)
++ .debug_frame 0x00000e58 0x1c4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pd_context.o)
++ .debug_frame 0x0000101c 0x1a8 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_i2c.o)
++ .debug_frame 0x000011c4 0x1f8 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
++ .debug_frame 0x000013bc 0x1d0 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sysclk.o)
++ .debug_frame 0x0000158c 0x7c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_clk.o)
++ .debug_frame 0x00001608 0x1c0 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/peripheral.a(hal_pm.o)
++ .debug_frame 0x000017c8 0x118 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/peripheral.a(hal_pmic_i2c.o)
++ .debug_frame 0x000018e0 0x44 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/public.a(hal_assert.o)
++ .debug_frame 0x00001924 0x7c K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_osa_tos.a(tos_except_cortexm.o)
++ .debug_frame 0x000019a0 0x1f8 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_osa_tos.a(tos_irq.o)
++ .debug_frame 0x00001b98 0x48 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_sup.a(sup_agent_logctrl.o)
++ .debug_frame 0x00001be0 0xb8 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_sup.a(sup_ramdump_client_lib.o)
++ .debug_frame 0x00001c98 0x1d0 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_arch_hal_misc.o)
++ .debug_frame 0x00001e68 0x98 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_tos_var_tos_misc.o)
++ .debug_frame 0x00001f00 0x38 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_tos_tos_m0_tos_m0_misc.o)
++ .debug_frame 0x00001f38 0x50 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_common_hal_misc.o)
++ .debug_frame 0x00001f88 0x28 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(infra_startup.o)
++ .debug_frame 0x00001fb0 0x6c K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(infra_buffer.o)
++ .debug_frame 0x0000201c 0xadc K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_kapi.o)
++ .debug_frame 0x00002af8 0x2e0 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_thread.o)
++ .debug_frame 0x00002dd8 0x24c K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_intr.o)
++ .debug_frame 0x00003024 0x15c K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_bitmap.o)
++ .debug_frame 0x00003180 0xe8 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_sched.o)
++ .debug_frame 0x00003268 0xcc K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_cnt_sem.o)
++ .debug_frame 0x00003334 0x214 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_mutex.o)
++ .debug_frame 0x00003548 0x254 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_clock.o)
++ .debug_frame 0x0000379c 0x20 /cygdrive/k/build/compiler/gcc_arm/arm-eabi/bin/../lib/gcc/arm-eabi/4.7.1/thumb/libgcc.a(_udivsi3.o)
++ .debug_frame 0x000037bc 0x30 /cygdrive/k/build/compiler/gcc_arm/arm-eabi/bin/../lib/gcc/arm-eabi/4.7.1/thumb/libgcc.a(_muldi3.o)
+
+-.debug_str 0x00000000 0xb073
++.debug_str 0x00000000 0xb0f6
+ *(.debug_str)
+ .debug_str 0x00000000 0xec K:/rpm/project/zx297520v3/obj/tos/all/debug/appstart/SysEntry.o
+ 0x12c (size before relaxing)
+@@ -1739,125 +1739,125 @@
+ 0x23b (size before relaxing)
+ .debug_str 0x000002dd 0x3c6 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_init.o)
+ 0x491 (size before relaxing)
+- .debug_str 0x000006a3 0x3e7 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_spinlock.o)
+- 0x809 (size before relaxing)
+- .debug_str 0x00000a8a 0x2d3 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sys.o)
++ .debug_str 0x000006a3 0x42c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_spinlock.o)
++ 0x85a (size before relaxing)
++ .debug_str 0x00000acf 0x2d3 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sys.o)
+ 0x6e3 (size before relaxing)
+- .debug_str 0x00000d5d 0x80e K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(icp_rpMsg.o)
++ .debug_str 0x00000da2 0x80e K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(icp_rpMsg.o)
+ 0xdd8 (size before relaxing)
+- .debug_str 0x0000156b 0xb6 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_gpio.o)
+- 0x68e (size before relaxing)
+- .debug_str 0x00001621 0x513 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_int.o)
++ .debug_str 0x000015b0 0xfc K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_gpio.o)
++ 0x6e1 (size before relaxing)
++ .debug_str 0x000016ac 0x513 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_int.o)
+ 0xc6c (size before relaxing)
+- .debug_str 0x00001b34 0x4ae K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_timer.o)
++ .debug_str 0x00001bbf 0x4ae K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_timer.o)
+ 0xcdf (size before relaxing)
+- .debug_str 0x00001fe2 0x8ba K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_dma.o)
+- 0xdc3 (size before relaxing)
+- .debug_str 0x0000289c 0xb59 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow.o)
++ .debug_str 0x0000206d 0x8ba K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_dma.o)
++ 0xdce (size before relaxing)
++ .debug_str 0x00002927 0xb59 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow.o)
+ 0x18df (size before relaxing)
+- .debug_str 0x000033f5 0x434 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_ddr_syno_inno.o)
++ .debug_str 0x00003480 0x434 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_ddr_syno_inno.o)
+ 0x567 (size before relaxing)
+- .debug_str 0x00003829 0x16a K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_debug.o)
++ .debug_str 0x000038b4 0x16a K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_debug.o)
+ 0x827 (size before relaxing)
+- .debug_str 0x00003993 0xd33 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pd_context.o)
++ .debug_str 0x00003a1e 0xd33 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pd_context.o)
+ 0x15c4 (size before relaxing)
+- .debug_str 0x000046c6 0x5d2 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_i2c.o)
+- 0xf68 (size before relaxing)
+- .debug_str 0x00004c98 0x33c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
+- 0xff2 (size before relaxing)
+- .debug_str 0x00004fd4 0x236 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sysclk.o)
++ .debug_str 0x00004751 0x5ca K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_i2c.o)
++ 0xf77 (size before relaxing)
++ .debug_str 0x00004d1b 0x33c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
++ 0x11ea (size before relaxing)
++ .debug_str 0x00005057 0x236 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sysclk.o)
+ 0xbc6 (size before relaxing)
+- .debug_str 0x0000520a 0x37 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_clkinfo.o)
++ .debug_str 0x0000528d 0x37 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_clkinfo.o)
+ 0x5fd (size before relaxing)
+- .debug_str 0x00005241 0x33 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(int_cfg.o)
++ .debug_str 0x000052c4 0x33 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(int_cfg.o)
+ 0x127 (size before relaxing)
+- .debug_str 0x00005274 0x17a K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_clk.o)
++ .debug_str 0x000052f7 0x17a K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_clk.o)
+ 0x10a1 (size before relaxing)
+- .debug_str 0x000053ee 0x8fc K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/peripheral.a(hal_pm.o)
++ .debug_str 0x00005471 0x8fc K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/peripheral.a(hal_pm.o)
+ 0xec6 (size before relaxing)
+- .debug_str 0x00005cea 0xc7 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/peripheral.a(hal_pmic_i2c.o)
++ .debug_str 0x00005d6d 0xc7 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/peripheral.a(hal_pmic_i2c.o)
+ 0x777 (size before relaxing)
+- .debug_str 0x00005db1 0xc6 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/public.a(hal_assert.o)
++ .debug_str 0x00005e34 0xc6 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/public.a(hal_assert.o)
+ 0x527 (size before relaxing)
+- .debug_str 0x00005e77 0x1b6 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_osa_tos.a(tos_except_cortexm.o)
++ .debug_str 0x00005efa 0x1b6 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_osa_tos.a(tos_except_cortexm.o)
+ 0x2ba (size before relaxing)
+- .debug_str 0x0000602d 0x653 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_osa_tos.a(tos_irq.o)
++ .debug_str 0x000060b0 0x653 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_osa_tos.a(tos_irq.o)
+ 0x84d (size before relaxing)
+- .debug_str 0x00006680 0xac K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_sup.a(sup_agent_logctrl.o)
++ .debug_str 0x00006703 0xac K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_sup.a(sup_agent_logctrl.o)
+ 0x703 (size before relaxing)
+- .debug_str 0x0000672c 0x260 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_sup.a(sup_ramdump_client_lib.o)
++ .debug_str 0x000067af 0x260 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_sup.a(sup_ramdump_client_lib.o)
+ 0x54c (size before relaxing)
+- .debug_str 0x0000698c 0x3bb K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_arch_hal_misc.o)
++ .debug_str 0x00006a0f 0x3bb K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_arch_hal_misc.o)
+ 0x55f (size before relaxing)
+- .debug_str 0x00006d47 0x132 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_tos_var_tos_misc.o)
++ .debug_str 0x00006dca 0x132 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_tos_var_tos_misc.o)
+ 0x280 (size before relaxing)
+- .debug_str 0x00006e79 0xbb K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_tos_tos_m0_tos_m0_misc.o)
++ .debug_str 0x00006efc 0xbb K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_tos_tos_m0_tos_m0_misc.o)
+ 0x1de (size before relaxing)
+- .debug_str 0x00006f34 0xda K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_common_hal_misc.o)
++ .debug_str 0x00006fb7 0xda K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_common_hal_misc.o)
+ 0x1fc (size before relaxing)
+- .debug_str 0x0000700e 0xbc K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(infra_startup.o)
++ .debug_str 0x00007091 0xbc K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(infra_startup.o)
+ 0x16e (size before relaxing)
+- .debug_str 0x000070ca 0x14c4 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(infra_buffer.o)
++ .debug_str 0x0000714d 0x14c4 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(infra_buffer.o)
+ 0x194b (size before relaxing)
+- .debug_str 0x0000858e 0x1b2a K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_kapi.o)
++ .debug_str 0x00008611 0x1b2a K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_kapi.o)
+ 0x38f7 (size before relaxing)
+- .debug_str 0x0000a0b8 0x774 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_thread.o)
++ .debug_str 0x0000a13b 0x774 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_thread.o)
+ 0x2380 (size before relaxing)
+- .debug_str 0x0000a82c 0x232 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_intr.o)
++ .debug_str 0x0000a8af 0x232 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_intr.o)
+ 0x2365 (size before relaxing)
+- .debug_str 0x0000aa5e 0xdb K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_bitmap.o)
++ .debug_str 0x0000aae1 0xdb K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_bitmap.o)
+ 0x1f06 (size before relaxing)
+- .debug_str 0x0000ab39 0x179 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_sched.o)
++ .debug_str 0x0000abbc 0x179 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_sched.o)
+ 0x22c8 (size before relaxing)
+- .debug_str 0x0000acb2 0xa4 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_cnt_sem.o)
++ .debug_str 0x0000ad35 0xa4 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_cnt_sem.o)
+ 0x1c8c (size before relaxing)
+- .debug_str 0x0000ad56 0xe5 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_mutex.o)
++ .debug_str 0x0000add9 0xe5 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_mutex.o)
+ 0x1ec0 (size before relaxing)
+- .debug_str 0x0000ae3b 0x238 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_clock.o)
++ .debug_str 0x0000aebe 0x238 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_clock.o)
+ 0x14ca (size before relaxing)
+
+-.debug_loc 0x00000000 0x147e4
++.debug_loc 0x00000000 0x14b33
+ *(.debug_loc)
+ .debug_loc 0x00000000 0x20 K:/rpm/project/zx297520v3/obj/tos/all/debug/appstart/SysEntry.o
+ .debug_loc 0x00000020 0x20 K:/rpm/project/zx297520v3/obj/tos/all/debug/appstart/appstart.o
+ .debug_loc 0x00000040 0x160 K:/rpm/project/zx297520v3/obj/tos/all/debug/os/tos/tos_irq.o
+ .debug_loc 0x000001a0 0x47 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_init.o)
+- .debug_loc 0x000001e7 0x552 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_spinlock.o)
+- .debug_loc 0x00000739 0x165 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sys.o)
+- .debug_loc 0x0000089e 0x1238 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(icp_rpMsg.o)
+- .debug_loc 0x00001ad6 0x70 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_gpio.o)
+- .debug_loc 0x00001b46 0x7cc K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_int.o)
+- .debug_loc 0x00002312 0x60c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_timer.o)
+- .debug_loc 0x0000291e 0xae3 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_dma.o)
+- .debug_loc 0x00003401 0x711 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow.o)
+- .debug_loc 0x00003b12 0x572 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_ddr_syno_inno.o)
+- .debug_loc 0x00004084 0x116 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_debug.o)
+- .debug_loc 0x0000419a 0x1686 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pd_context.o)
+- .debug_loc 0x00005820 0x1fed K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_i2c.o)
+- .debug_loc 0x0000780d 0x90e K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
+- .debug_loc 0x0000811b 0xe69 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sysclk.o)
+- .debug_loc 0x00008f84 0x512 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_clk.o)
+- .debug_loc 0x00009496 0xb9b K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/peripheral.a(hal_pm.o)
+- .debug_loc 0x0000a031 0x6c6 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/peripheral.a(hal_pmic_i2c.o)
+- .debug_loc 0x0000a6f7 0xdc K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/public.a(hal_assert.o)
+- .debug_loc 0x0000a7d3 0x1b7 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_osa_tos.a(tos_except_cortexm.o)
+- .debug_loc 0x0000a98a 0x658 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_osa_tos.a(tos_irq.o)
+- .debug_loc 0x0000afe2 0x15b K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_sup.a(sup_agent_logctrl.o)
+- .debug_loc 0x0000b13d 0xb70 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_sup.a(sup_ramdump_client_lib.o)
+- .debug_loc 0x0000bcad 0x7e0 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_arch_hal_misc.o)
+- .debug_loc 0x0000c48d 0x147 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_tos_var_tos_misc.o)
+- .debug_loc 0x0000c5d4 0x20 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_tos_tos_m0_tos_m0_misc.o)
+- .debug_loc 0x0000c5f4 0xed K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_common_hal_misc.o)
+- .debug_loc 0x0000c6e1 0x20 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(infra_startup.o)
+- .debug_loc 0x0000c701 0x146 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(infra_buffer.o)
+- .debug_loc 0x0000c847 0x2a0e K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_kapi.o)
+- .debug_loc 0x0000f255 0x1cf1 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_thread.o)
+- .debug_loc 0x00010f46 0x87e K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_intr.o)
+- .debug_loc 0x000117c4 0x58e K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_bitmap.o)
+- .debug_loc 0x00011d52 0x6e8 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_sched.o)
+- .debug_loc 0x0001243a 0x5c7 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_cnt_sem.o)
+- .debug_loc 0x00012a01 0xfdc K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_mutex.o)
+- .debug_loc 0x000139dd 0xe07 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_clock.o)
++ .debug_loc 0x000001e7 0x6bd K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_spinlock.o)
++ .debug_loc 0x000008a4 0x165 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sys.o)
++ .debug_loc 0x00000a09 0x1238 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(icp_rpMsg.o)
++ .debug_loc 0x00001c41 0x254 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_gpio.o)
++ .debug_loc 0x00001e95 0x7cc K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_int.o)
++ .debug_loc 0x00002661 0x60c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_timer.o)
++ .debug_loc 0x00002c6d 0xae3 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_dma.o)
++ .debug_loc 0x00003750 0x711 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow.o)
++ .debug_loc 0x00003e61 0x572 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_ddr_syno_inno.o)
++ .debug_loc 0x000043d3 0x116 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_debug.o)
++ .debug_loc 0x000044e9 0x1686 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pd_context.o)
++ .debug_loc 0x00005b6f 0x1fed K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_i2c.o)
++ .debug_loc 0x00007b5c 0x90e K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
++ .debug_loc 0x0000846a 0xe69 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sysclk.o)
++ .debug_loc 0x000092d3 0x512 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_clk.o)
++ .debug_loc 0x000097e5 0xb9b K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/peripheral.a(hal_pm.o)
++ .debug_loc 0x0000a380 0x6c6 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/peripheral.a(hal_pmic_i2c.o)
++ .debug_loc 0x0000aa46 0xdc K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/public.a(hal_assert.o)
++ .debug_loc 0x0000ab22 0x1b7 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_osa_tos.a(tos_except_cortexm.o)
++ .debug_loc 0x0000acd9 0x658 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_osa_tos.a(tos_irq.o)
++ .debug_loc 0x0000b331 0x15b K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_sup.a(sup_agent_logctrl.o)
++ .debug_loc 0x0000b48c 0xb70 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_sup.a(sup_ramdump_client_lib.o)
++ .debug_loc 0x0000bffc 0x7e0 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_arch_hal_misc.o)
++ .debug_loc 0x0000c7dc 0x147 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_tos_var_tos_misc.o)
++ .debug_loc 0x0000c923 0x20 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_tos_tos_m0_tos_m0_misc.o)
++ .debug_loc 0x0000c943 0xed K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_common_hal_misc.o)
++ .debug_loc 0x0000ca30 0x20 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(infra_startup.o)
++ .debug_loc 0x0000ca50 0x146 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(infra_buffer.o)
++ .debug_loc 0x0000cb96 0x2a0e K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_kapi.o)
++ .debug_loc 0x0000f5a4 0x1cf1 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_thread.o)
++ .debug_loc 0x00011295 0x87e K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_intr.o)
++ .debug_loc 0x00011b13 0x58e K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_bitmap.o)
++ .debug_loc 0x000120a1 0x6e8 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_sched.o)
++ .debug_loc 0x00012789 0x5c7 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_cnt_sem.o)
++ .debug_loc 0x00012d50 0xfdc K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_mutex.o)
++ .debug_loc 0x00013d2c 0xe07 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_clock.o)
+
+ .debug_macinfo
+ *(.debug_macinfo)
+@@ -1964,7 +1964,7 @@
+ 0x000001f8 . = .
+ 0x000001f8 __exidx_end = ABSOLUTE (.)
+
+-.text 0x000001f8 0x6aec
++.text 0x000001f8 0x6c28
+ *(.text*)
+ .text 0x000001f8 0xc4 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/vectors.o
+ 0x000001f8 _start
+@@ -2011,693 +2011,699 @@
+ .text.zDrvSysSpinlock_SoftLockPsm
+ 0x000003b8 0x80 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_spinlock.o)
+ 0x000003b8 zDrvSysSpinlock_SoftLockPsm
++ .text.zDrvSysSpinlock_SoftLockPsmTimeout
++ 0x00000438 0xb0 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_spinlock.o)
++ 0x00000438 zDrvSysSpinlock_SoftLockPsmTimeout
+ .text.zDrvSysSpinlock_SoftUnlockPsm
+- 0x00000438 0x84 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_spinlock.o)
+- 0x00000438 zDrvSysSpinlock_SoftUnlockPsm
++ 0x000004e8 0x80 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_spinlock.o)
++ 0x000004e8 zDrvSysSpinlock_SoftUnlockPsm
+ .text.zDrvSysSpinlock_RegLock
+- 0x000004bc 0x3c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_spinlock.o)
+- 0x000004bc zDrvSysSpinlock_RegLock
++ 0x00000568 0x3c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_spinlock.o)
++ 0x00000568 zDrvSysSpinlock_RegLock
+ .text.zDrvSysSpinlock_RegUnlock
+- 0x000004f8 0x18 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_spinlock.o)
+- 0x000004f8 zDrvSysSpinlock_RegUnlock
++ 0x000005a4 0x18 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_spinlock.o)
++ 0x000005a4 zDrvSysSpinlock_RegUnlock
+ .text.zDrvSysSpinlock_Initiate
+- 0x00000510 0x90 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_spinlock.o)
+- 0x00000510 zDrvSysSpinlock_Initiate
++ 0x000005bc 0x94 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_spinlock.o)
++ 0x000005bc zDrvSysSpinlock_Initiate
+ .text.zDrvSys_Initiate
+- 0x000005a0 0xc K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sys.o)
+- 0x000005a0 zDrvSys_Initiate
+- .text.mem_cpy 0x000005ac 0x20 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(icp_rpMsg.o)
++ 0x00000650 0xc K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sys.o)
++ 0x00000650 zDrvSys_Initiate
++ .text.mem_cpy 0x0000065c 0x20 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(icp_rpMsg.o)
+ .text.Icp_IsRecvChEmpty
+- 0x000005cc 0x18 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(icp_rpMsg.o)
++ 0x0000067c 0x18 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(icp_rpMsg.o)
+ .text.rpMsg_Write.part.2
+- 0x000005e4 0xa0 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(icp_rpMsg.o)
++ 0x00000694 0xa0 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(icp_rpMsg.o)
+ .text.rpMsg_read.part.3
+- 0x00000684 0x60 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(icp_rpMsg.o)
++ 0x00000734 0x60 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(icp_rpMsg.o)
+ .text.Icp_DispatchRpMsg
+- 0x000006e4 0xe4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(icp_rpMsg.o)
++ 0x00000794 0xe4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(icp_rpMsg.o)
+ .text.Icp_AllIsr
+- 0x000007c8 0xbc K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(icp_rpMsg.o)
+- 0x000007c8 Icp_AllIsr
++ 0x00000878 0xbc K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(icp_rpMsg.o)
++ 0x00000878 Icp_AllIsr
+ .text.Icp_PHYIsr
+- 0x00000884 0xc K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(icp_rpMsg.o)
++ 0x00000934 0xc K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(icp_rpMsg.o)
+ .text.Icp_PSIsr
+- 0x00000890 0xc K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(icp_rpMsg.o)
++ 0x00000940 0xc K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(icp_rpMsg.o)
+ .text.Icp_APIsr
+- 0x0000089c 0xc K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(icp_rpMsg.o)
++ 0x0000094c 0xc K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(icp_rpMsg.o)
+ .text.zDrvRpMsg_UnMask
+- 0x000008a8 0x74 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(icp_rpMsg.o)
+- 0x000008a8 zDrvRpMsg_UnMask
++ 0x00000958 0x74 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(icp_rpMsg.o)
++ 0x00000958 zDrvRpMsg_UnMask
+ .text.zDrvRpMsg_Write
+- 0x0000091c 0x16c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(icp_rpMsg.o)
+- 0x0000091c zDrvRpMsg_Write
++ 0x000009cc 0x16c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(icp_rpMsg.o)
++ 0x000009cc zDrvRpMsg_Write
+ .text.zDrvRpMsg_CreateChannel
+- 0x00000a88 0xec K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(icp_rpMsg.o)
+- 0x00000a88 zDrvRpMsg_CreateChannel
++ 0x00000b38 0xec K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(icp_rpMsg.o)
++ 0x00000b38 zDrvRpMsg_CreateChannel
+ .text.zDrvRpMsg_RegCallBack
+- 0x00000b74 0x58 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(icp_rpMsg.o)
+- 0x00000b74 zDrvRpMsg_RegCallBack
++ 0x00000c24 0x58 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(icp_rpMsg.o)
++ 0x00000c24 zDrvRpMsg_RegCallBack
+ .text.zDrvRpMsg_Initiate
+- 0x00000bcc 0xd0 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(icp_rpMsg.o)
+- 0x00000bcc zDrvRpMsg_Initiate
++ 0x00000c7c 0xd0 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(icp_rpMsg.o)
++ 0x00000c7c zDrvRpMsg_Initiate
++ .text.zDrvGpio_SetValue
++ 0x00000d4c 0x70 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_gpio.o)
++ 0x00000d4c zDrvGpio_SetValue
+ .text.zDrvGpio_Initiate
+- 0x00000c9c 0x4c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_gpio.o)
+- 0x00000c9c zDrvGpio_Initiate
++ 0x00000dbc 0x4c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_gpio.o)
++ 0x00000dbc zDrvGpio_Initiate
+ .text.__disable_irq
+- 0x00000ce8 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_int.o)
+- 0x00000ce8 __disable_irq
++ 0x00000e08 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_int.o)
++ 0x00000e08 __disable_irq
+ .text.zDrvInt_MaskIrq
+- 0x00000cec 0x18 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_int.o)
+- 0x00000cec zDrvInt_MaskIrq
++ 0x00000e0c 0x18 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_int.o)
++ 0x00000e0c zDrvInt_MaskIrq
+ .text.zDrvInt_UnmaskIrq
+- 0x00000d04 0x2c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_int.o)
+- 0x00000d04 zDrvInt_UnmaskIrq
++ 0x00000e24 0x2c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_int.o)
++ 0x00000e24 zDrvInt_UnmaskIrq
+ .text.zDrvInt_PreInit
+- 0x00000d30 0x48 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_int.o)
+- 0x00000d30 zDrvInt_PreInit
++ 0x00000e50 0x48 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_int.o)
++ 0x00000e50 zDrvInt_PreInit
+ .text.zDrvInt_InstallIsrDsr
+- 0x00000d78 0xd4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_int.o)
+- 0x00000d78 zDrvInt_InstallIsrDsr
++ 0x00000e98 0xd4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_int.o)
++ 0x00000e98 zDrvInt_InstallIsrDsr
+ .text.zDrvInt_InstallIsr
+- 0x00000e4c 0xc K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_int.o)
+- 0x00000e4c zDrvInt_InstallIsr
++ 0x00000f6c 0xc K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_int.o)
++ 0x00000f6c zDrvInt_InstallIsr
+ .text.zDrvInt_UninstallIsr
+- 0x00000e58 0x48 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_int.o)
+- 0x00000e58 zDrvInt_UninstallIsr
++ 0x00000f78 0x48 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_int.o)
++ 0x00000f78 zDrvInt_UninstallIsr
+ .text.zDrvPcu_ClearInt
+- 0x00000ea0 0x98 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_int.o)
+- 0x00000ea0 zDrvPcu_ClearInt
++ 0x00000fc0 0x98 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_int.o)
++ 0x00000fc0 zDrvPcu_ClearInt
+ .text.zDrvPcu_SetIntLevel
+- 0x00000f38 0xf4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_int.o)
+- 0x00000f38 zDrvPcu_SetIntLevel
++ 0x00001058 0xf4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_int.o)
++ 0x00001058 zDrvPcu_SetIntLevel
+ .text.zDrvInt_IrqMaskSave
+- 0x0000102c 0x18 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_int.o)
+- 0x0000102c zDrvInt_IrqMaskSave
++ 0x0000114c 0x18 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_int.o)
++ 0x0000114c zDrvInt_IrqMaskSave
+ .text.zDrvInt_IrqMaskAllIrq
+- 0x00001044 0x1c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_int.o)
+- 0x00001044 zDrvInt_IrqMaskAllIrq
++ 0x00001164 0x1c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_int.o)
++ 0x00001164 zDrvInt_IrqMaskAllIrq
+ .text.zDrvInt_IrqMaskRestore
+- 0x00001060 0x14 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_int.o)
+- 0x00001060 zDrvInt_IrqMaskRestore
++ 0x00001180 0x14 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_int.o)
++ 0x00001180 zDrvInt_IrqMaskRestore
+ .text.zDrvInt_DisSysTickInt
+- 0x00001074 0x10 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_int.o)
+- 0x00001074 zDrvInt_DisSysTickInt
++ 0x00001194 0x10 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_int.o)
++ 0x00001194 zDrvInt_DisSysTickInt
+ .text.zDrvInt_EnableSysTickInt
+- 0x00001084 0x10 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_int.o)
+- 0x00001084 zDrvInt_EnableSysTickInt
++ 0x000011a4 0x10 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_int.o)
++ 0x000011a4 zDrvInt_EnableSysTickInt
+ .text.zDrvTimer_Initiate
+- 0x00001094 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_timer.o)
+- 0x00001094 zDrvTimer_Initiate
++ 0x000011b4 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_timer.o)
++ 0x000011b4 zDrvTimer_Initiate
+ .text.zDrvTimer_PreInit
+- 0x00001098 0x94 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_timer.o)
+- 0x00001098 zDrvTimer_PreInit
++ 0x000011b8 0x94 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_timer.o)
++ 0x000011b8 zDrvTimer_PreInit
+ .text.dma_ResetChannel
+- 0x0000112c 0x74 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_dma.o)
+- 0x0000112c dma_ResetChannel
++ 0x0000124c 0x74 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_dma.o)
++ 0x0000124c dma_ResetChannel
+ .text.zDrvDma_GetStatus
+- 0x000011a0 0x84 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_dma.o)
+- 0x000011a0 zDrvDma_GetStatus
++ 0x000012c0 0x84 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_dma.o)
++ 0x000012c0 zDrvDma_GetStatus
+ .text.zDrvDma_Initiate
+- 0x00001224 0x40 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_dma.o)
+- 0x00001224 zDrvDma_Initiate
++ 0x00001344 0x40 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_dma.o)
++ 0x00001344 zDrvDma_Initiate
+ .text.zDrvDma_AllocChannel
+- 0x00001264 0x38 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_dma.o)
+- 0x00001264 zDrvDma_AllocChannel
++ 0x00001384 0x38 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_dma.o)
++ 0x00001384 zDrvDma_AllocChannel
+ .text.zDrvDma_ConfigChannel
+- 0x0000129c 0x11c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_dma.o)
+- 0x0000129c zDrvDma_ConfigChannel
++ 0x000013bc 0x11c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_dma.o)
++ 0x000013bc zDrvDma_ConfigChannel
+ .text.zDrvDma_StartChannel
+- 0x000013b8 0x60 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_dma.o)
+- 0x000013b8 zDrvDma_StartChannel
++ 0x000014d8 0x60 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_dma.o)
++ 0x000014d8 zDrvDma_StartChannel
+ .text.zDrvDma_DeAllocChannel
+- 0x00001418 0x3c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_dma.o)
+- 0x00001418 zDrvDma_DeAllocChannel
++ 0x00001538 0x3c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_dma.o)
++ 0x00001538 zDrvDma_DeAllocChannel
+ .text.zDrvDma_M2mPsm
+- 0x00001454 0x11c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_dma.o)
+- 0x00001454 zDrvDma_M2mPsm
++ 0x00001574 0x11c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_dma.o)
++ 0x00001574 zDrvDma_M2mPsm
+ .text.pow_SetVcoreOnOff.part.0
+- 0x00001570 0x18 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow.o)
++ 0x00001690 0x18 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow.o)
+ .text.pow_Pcu2M0IntStatu
+- 0x00001588 0x40 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow.o)
++ 0x000016a8 0x40 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow.o)
+ .text.pow_PsmCallBackRpMsg
+- 0x000015c8 0x58 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow.o)
++ 0x000016e8 0x58 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow.o)
+ .text.pow_hwen_set.part.5
+- 0x00001620 0x44 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow.o)
++ 0x00001740 0x44 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow.o)
+ .text.pow_PsmIdleThread
+- 0x00001664 0x38 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow.o)
++ 0x00001784 0x38 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow.o)
+ .text.pow_hwen_set
+- 0x0000169c 0x50 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow.o)
+- 0x0000169c pow_hwen_set
++ 0x000017bc 0x50 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow.o)
++ 0x000017bc pow_hwen_set
+ .text.pow_SaveRestoreDsr
+- 0x000016ec 0x3c8 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow.o)
++ 0x0000180c 0x3c8 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow.o)
+ .text.pow_IcpInit
+- 0x00001ab4 0x48 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow.o)
+- 0x00001ab4 pow_IcpInit
++ 0x00001bd4 0x48 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow.o)
++ 0x00001bd4 pow_IcpInit
+ .text.zDrvPow_CoreIsActive
+- 0x00001afc 0x3c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow.o)
+- 0x00001afc zDrvPow_CoreIsActive
++ 0x00001c1c 0x3c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow.o)
++ 0x00001c1c zDrvPow_CoreIsActive
+ .text.zDrvPow_Init
+- 0x00001b38 0x20c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow.o)
+- 0x00001b38 zDrvPow_Init
++ 0x00001c58 0x20c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow.o)
++ 0x00001c58 zDrvPow_Init
+ .text.pow_DdrGetSize
+- 0x00001d44 0x40 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_ddr_syno_inno.o)
+- 0x00001d44 pow_DdrGetSize
++ 0x00001e64 0x40 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_ddr_syno_inno.o)
++ 0x00001e64 pow_DdrGetSize
+ .text.pow_DdrPhyConfig
+- 0x00001d84 0x188 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_ddr_syno_inno.o)
+- 0x00001d84 pow_DdrPhyConfig
++ 0x00001ea4 0x188 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_ddr_syno_inno.o)
++ 0x00001ea4 pow_DdrPhyConfig
+ .text.pow_DdrCtrlConfig
+- 0x00001f0c 0x234 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_ddr_syno_inno.o)
+- 0x00001f0c pow_DdrCtrlConfig
++ 0x0000202c 0x234 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_ddr_syno_inno.o)
++ 0x0000202c pow_DdrCtrlConfig
+ .text.pow_DdrPllDllLock
+- 0x00002140 0x70 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_ddr_syno_inno.o)
+- 0x00002140 pow_DdrPllDllLock
++ 0x00002260 0x70 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_ddr_syno_inno.o)
++ 0x00002260 pow_DdrPllDllLock
+ .text.pow_DdrReinit
+- 0x000021b0 0x194 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_ddr_syno_inno.o)
+- 0x000021b0 pow_DdrReinit
++ 0x000022d0 0x194 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_ddr_syno_inno.o)
++ 0x000022d0 pow_DdrReinit
+ .text.pow_DdrDfiInitCompleteEn
+- 0x00002344 0x20 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_ddr_syno_inno.o)
+- 0x00002344 pow_DdrDfiInitCompleteEn
++ 0x00002464 0x20 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_ddr_syno_inno.o)
++ 0x00002464 pow_DdrDfiInitCompleteEn
+ .text.zDrvPow_DdrHwSrEnable
+- 0x00002364 0x40 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_ddr_syno_inno.o)
+- 0x00002364 zDrvPow_DdrHwSrEnable
++ 0x00002484 0x40 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_ddr_syno_inno.o)
++ 0x00002484 zDrvPow_DdrHwSrEnable
+ .text.zDrvPow_DdrHwSrDisable
+- 0x000023a4 0x44 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_ddr_syno_inno.o)
+- 0x000023a4 zDrvPow_DdrHwSrDisable
++ 0x000024c4 0x44 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_ddr_syno_inno.o)
++ 0x000024c4 zDrvPow_DdrHwSrDisable
+ .text.zDrvPow_DdrAutoLpEnable
+- 0x000023e8 0x40 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_ddr_syno_inno.o)
+- 0x000023e8 zDrvPow_DdrAutoLpEnable
++ 0x00002508 0x40 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_ddr_syno_inno.o)
++ 0x00002508 zDrvPow_DdrAutoLpEnable
+ .text.pow_DdrInit
+- 0x00002428 0x78 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_ddr_syno_inno.o)
+- 0x00002428 pow_DdrInit
++ 0x00002548 0x78 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_ddr_syno_inno.o)
++ 0x00002548 pow_DdrInit
+ .text.pow_DdrLpEnable
+- 0x000024a0 0x1c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_ddr_syno_inno.o)
+- 0x000024a0 pow_DdrLpEnable
++ 0x000025c0 0x1c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_ddr_syno_inno.o)
++ 0x000025c0 pow_DdrLpEnable
+ .text.zDrvPow_DdrAutoLpDisable
+- 0x000024bc 0x44 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_ddr_syno_inno.o)
+- 0x000024bc zDrvPow_DdrAutoLpDisable
++ 0x000025dc 0x44 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_ddr_syno_inno.o)
++ 0x000025dc zDrvPow_DdrAutoLpDisable
+ .text.pow_DdrLpDisable
+- 0x00002500 0x20 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_ddr_syno_inno.o)
+- 0x00002500 pow_DdrLpDisable
++ 0x00002620 0x20 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_ddr_syno_inno.o)
++ 0x00002620 pow_DdrLpDisable
+ .text.zDrvPow_DdrLpEnterHandle
+- 0x00002520 0x2f4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_ddr_syno_inno.o)
+- 0x00002520 zDrvPow_DdrLpEnterHandle
++ 0x00002640 0x2f4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_ddr_syno_inno.o)
++ 0x00002640 zDrvPow_DdrLpEnterHandle
+ .text.zDrvPow_DdrLpExitHandle
+- 0x00002814 0xc4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_ddr_syno_inno.o)
+- 0x00002814 zDrvPow_DdrLpExitHandle
++ 0x00002934 0xc4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_ddr_syno_inno.o)
++ 0x00002934 zDrvPow_DdrLpExitHandle
+ .text.Pow_DebugIramInit
+- 0x000028d8 0x50 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_debug.o)
+- 0x000028d8 Pow_DebugIramInit
++ 0x000029f8 0x50 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_debug.o)
++ 0x000029f8 Pow_DebugIramInit
+ .text.pow_LpTypeCheck
+- 0x00002928 0x14 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_debug.o)
+- 0x00002928 pow_LpTypeCheck
++ 0x00002a48 0x14 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_debug.o)
++ 0x00002a48 pow_LpTypeCheck
+ .text.pow_SetLpModeCallback
+- 0x0000293c 0x124 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_debug.o)
+- 0x0000293c pow_SetLpModeCallback
++ 0x00002a5c 0x124 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_debug.o)
++ 0x00002a5c pow_SetLpModeCallback
+ .text.pow_SpifcSave
+- 0x00002a60 0x44 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pd_context.o)
+- 0x00002a60 pow_SpifcSave
++ 0x00002b80 0x44 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pd_context.o)
++ 0x00002b80 pow_SpifcSave
+ .text.pow_SpifcRestore
+- 0x00002aa4 0x44 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pd_context.o)
+- 0x00002aa4 pow_SpifcRestore
++ 0x00002bc4 0x44 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pd_context.o)
++ 0x00002bc4 pow_SpifcRestore
+ .text.pow_IcpSave
+- 0x00002ae8 0x48 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pd_context.o)
+- 0x00002ae8 pow_IcpSave
++ 0x00002c08 0x48 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pd_context.o)
++ 0x00002c08 pow_IcpSave
+ .text.pow_IcpRestore
+- 0x00002b30 0x44 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pd_context.o)
+- 0x00002b30 pow_IcpRestore
++ 0x00002c50 0x44 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pd_context.o)
++ 0x00002c50 pow_IcpRestore
+ .text.pow_SpiSave
+- 0x00002b74 0x68 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pd_context.o)
+- 0x00002b74 pow_SpiSave
++ 0x00002c94 0x68 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pd_context.o)
++ 0x00002c94 pow_SpiSave
+ .text.pow_SpiRestore
+- 0x00002bdc 0x84 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pd_context.o)
+- 0x00002bdc pow_SpiRestore
++ 0x00002cfc 0x84 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pd_context.o)
++ 0x00002cfc pow_SpiRestore
+ .text.pow_VouSave
+- 0x00002c60 0x64 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pd_context.o)
+- 0x00002c60 pow_VouSave
++ 0x00002d80 0x64 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pd_context.o)
++ 0x00002d80 pow_VouSave
+ .text.pow_VouRestore
+- 0x00002cc4 0x40 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pd_context.o)
+- 0x00002cc4 pow_VouRestore
++ 0x00002de4 0x40 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pd_context.o)
++ 0x00002de4 pow_VouRestore
+ .text.pow_Iram0Save
+- 0x00002d04 0x2c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pd_context.o)
+- 0x00002d04 pow_Iram0Save
++ 0x00002e24 0x2c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pd_context.o)
++ 0x00002e24 pow_Iram0Save
+ .text.pow_Iram0Restore
+- 0x00002d30 0x30 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pd_context.o)
+- 0x00002d30 pow_Iram0Restore
++ 0x00002e50 0x30 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pd_context.o)
++ 0x00002e50 pow_Iram0Restore
+ .text.zDrvPow_PdcoreRegsSave
+- 0x00002d60 0x66c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pd_context.o)
+- 0x00002d60 zDrvPow_PdcoreRegsSave
++ 0x00002e80 0x66c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pd_context.o)
++ 0x00002e80 zDrvPow_PdcoreRegsSave
+ .text.zDrvPow_PdcoreRegsRestore
+- 0x000033cc 0x7ec K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pd_context.o)
+- 0x000033cc zDrvPow_PdcoreRegsRestore
++ 0x000034ec 0x7ec K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pd_context.o)
++ 0x000034ec zDrvPow_PdcoreRegsRestore
+ .text.i2c_WaitTransferOver.isra.0
+- 0x00003bb8 0x68 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_i2c.o)
++ 0x00003cd8 0x68 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_i2c.o)
+ .text.i2c_SetMode.isra.1
+- 0x00003c20 0x50 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_i2c.o)
++ 0x00003d40 0x50 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_i2c.o)
+ .text.i2c_SetSlaveAddress
+- 0x00003c70 0x24 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_i2c.o)
++ 0x00003d90 0x24 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_i2c.o)
+ .text.zDrvI2c_DevWrite_PSM
+- 0x00003c94 0x160 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_i2c.o)
+- 0x00003c94 zDrvI2c_DevWrite_PSM
++ 0x00003db4 0x160 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_i2c.o)
++ 0x00003db4 zDrvI2c_DevWrite_PSM
+ .text.zDrvI2c_Initiate
+- 0x00003df4 0x98 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_i2c.o)
+- 0x00003df4 zDrvI2c_Initiate
++ 0x00003f14 0x98 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_i2c.o)
++ 0x00003f14 zDrvI2c_Initiate
+ .text.wdt_rpmsg_callback
+- 0x00003e8c 0x38 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
++ 0x00003fac 0x3c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
+ .text.wdt_get_switch
+- 0x00003ec4 0x40 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
+- 0x00003ec4 wdt_get_switch
++ 0x00003fe8 0x40 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
++ 0x00003fe8 wdt_get_switch
+ .text.wdt_get_time_out
+- 0x00003f04 0x40 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
+- 0x00003f04 wdt_get_time_out
++ 0x00004028 0x40 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
++ 0x00004028 wdt_get_time_out
+ .text.wdt_set_time_out
+- 0x00003f44 0x50 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
+- 0x00003f44 wdt_set_time_out
++ 0x00004068 0x4c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
++ 0x00004068 wdt_set_time_out
+ .text.wdt_set_value
+- 0x00003f94 0x54 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
+- 0x00003f94 wdt_set_value
++ 0x000040b4 0x58 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
++ 0x000040b4 wdt_set_value
+ .text.wdt_set_int_value
+- 0x00003fe8 0x58 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
+- 0x00003fe8 wdt_set_int_value
++ 0x0000410c 0x54 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
++ 0x0000410c wdt_set_int_value
+ .text.wdt_start_config
+- 0x00004040 0x50 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
+- 0x00004040 wdt_start_config
++ 0x00004160 0x50 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
++ 0x00004160 wdt_start_config
+ .text.wdt_refresh_config
+- 0x00004090 0x44 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
+- 0x00004090 wdt_refresh_config
++ 0x000041b0 0x44 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
++ 0x000041b0 wdt_refresh_config
+ .text.wdt_set_clk_div
+- 0x000040d4 0x54 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
+- 0x000040d4 wdt_set_clk_div
++ 0x000041f4 0x50 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
++ 0x000041f4 wdt_set_clk_div
+ .text.wdt_set_src_clk
+- 0x00004128 0x50 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
+- 0x00004128 wdt_set_src_clk
++ 0x00004244 0x50 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
++ 0x00004244 wdt_set_src_clk
+ .text.wdt_reset_all_config
+- 0x00004178 0x2c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
+- 0x00004178 wdt_reset_all_config
++ 0x00004294 0x2c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
++ 0x00004294 wdt_reset_all_config
+ .text.wdt_feed_dog
+- 0x000041a4 0x8 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
+- 0x000041a4 wdt_feed_dog
++ 0x000042c0 0x8 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
++ 0x000042c0 wdt_feed_dog
+ .text.wdt_icp_wake_up
+- 0x000041ac 0xec K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
+- 0x000041ac wdt_icp_wake_up
+- .text.wdt_isr 0x00004298 0x12c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
+- 0x00004298 wdt_isr
++ 0x000042c8 0xec K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
++ 0x000042c8 wdt_icp_wake_up
++ .text.wdt_isr 0x000043b4 0x14c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
++ 0x000043b4 wdt_isr
+ .text.wdt_IsWdtFuncOpen
+- 0x000043c4 0x54 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
+- 0x000043c4 wdt_IsWdtFuncOpen
++ 0x00004500 0x54 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
++ 0x00004500 wdt_IsWdtFuncOpen
+ .text.zDrvWdt_RpmRebootRecord
+- 0x00004418 0x3c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
+- 0x00004418 zDrvWdt_RpmRebootRecord
++ 0x00004554 0x3c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
++ 0x00004554 zDrvWdt_RpmRebootRecord
+ .text.zDrvWdt_Initiate
+- 0x00004454 0xe0 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
+- 0x00004454 zDrvWdt_Initiate
++ 0x00004590 0xe0 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
++ 0x00004590 zDrvWdt_Initiate
+ .text.sysclk_CommSetFreq
+- 0x00004534 0x9c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sysclk.o)
+- 0x00004534 sysclk_CommSetFreq
++ 0x00004670 0x9c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sysclk.o)
++ 0x00004670 sysclk_CommSetFreq
+ .text.sysclk_CommResetCtrl
+- 0x000045d0 0x40 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sysclk.o)
+- 0x000045d0 sysclk_CommResetCtrl
++ 0x0000470c 0x40 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sysclk.o)
++ 0x0000470c sysclk_CommResetCtrl
+ .text.sysclk_CommHwGateCtrl
+- 0x00004610 0x7c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sysclk.o)
+- 0x00004610 sysclk_CommHwGateCtrl
++ 0x0000474c 0x7c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sysclk.o)
++ 0x0000474c sysclk_CommHwGateCtrl
+ .text.sysclk_MatrixAxiHwGate
+- 0x0000468c 0x24 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sysclk.o)
+- 0x0000468c sysclk_MatrixAxiHwGate
++ 0x000047c8 0x24 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sysclk.o)
++ 0x000047c8 sysclk_MatrixAxiHwGate
+ .text.sysclk_CommSwGateCtrl
+- 0x000046b0 0x7c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sysclk.o)
+- 0x000046b0 sysclk_CommSwGateCtrl
++ 0x000047ec 0x7c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sysclk.o)
++ 0x000047ec sysclk_CommSwGateCtrl
+ .text.sysclk_SwGateCtrl0
+- 0x0000472c 0x14 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sysclk.o)
+- 0x0000472c sysclk_SwGateCtrl0
++ 0x00004868 0x14 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sysclk.o)
++ 0x00004868 sysclk_SwGateCtrl0
+ .text.sysclk_MatrixAxiSwGate
+- 0x00004740 0x24 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sysclk.o)
+- 0x00004740 sysclk_MatrixAxiSwGate
++ 0x0000487c 0x24 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sysclk.o)
++ 0x0000487c sysclk_MatrixAxiSwGate
+ .text.sysclk_DisableUnused
+- 0x00004764 0x64 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sysclk.o)
+- 0x00004764 sysclk_DisableUnused
++ 0x000048a0 0x64 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sysclk.o)
++ 0x000048a0 sysclk_DisableUnused
+ .text.sysclk_AutoGateInit
+- 0x000047c8 0x40 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sysclk.o)
+- 0x000047c8 sysclk_AutoGateInit
++ 0x00004904 0x40 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sysclk.o)
++ 0x00004904 sysclk_AutoGateInit
+ .text.zDrvSysClk_SetGate
+- 0x00004808 0xac K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sysclk.o)
+- 0x00004808 zDrvSysClk_SetGate
++ 0x00004944 0xac K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sysclk.o)
++ 0x00004944 zDrvSysClk_SetGate
+ .text.zDrvSysClk_SetFreq
+- 0x000048b4 0x5c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sysclk.o)
+- 0x000048b4 zDrvSysClk_SetFreq
++ 0x000049f0 0x5c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sysclk.o)
++ 0x000049f0 zDrvSysClk_SetFreq
+ .text.zDrvSysClk_Reset
+- 0x00004910 0x50 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sysclk.o)
+- 0x00004910 zDrvSysClk_Reset
++ 0x00004a4c 0x50 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sysclk.o)
++ 0x00004a4c zDrvSysClk_Reset
+ .text.zDrvSysClk_Release
+- 0x00004960 0x50 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sysclk.o)
+- 0x00004960 zDrvSysClk_Release
++ 0x00004a9c 0x50 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sysclk.o)
++ 0x00004a9c zDrvSysClk_Release
+ .text.sysclk_Initiate
+- 0x000049b0 0x20 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sysclk.o)
+- 0x000049b0 sysclk_Initiate
++ 0x00004aec 0x20 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sysclk.o)
++ 0x00004aec sysclk_Initiate
+ .text.pow_ClkGateInit
+- 0x000049d0 0x24 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_clk.o)
+- 0x000049d0 pow_ClkGateInit
++ 0x00004b0c 0x24 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_clk.o)
++ 0x00004b0c pow_ClkGateInit
+ .text.pow_AxiClk_Change
+- 0x000049f4 0x240 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_clk.o)
+- 0x000049f4 pow_AxiClk_Change
++ 0x00004b30 0x240 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_clk.o)
++ 0x00004b30 pow_AxiClk_Change
+ .text.zDrvPow_AxiChangeClk
+- 0x00004c34 0x5c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_clk.o)
+- 0x00004c34 zDrvPow_AxiChangeClk
++ 0x00004d70 0x5c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_clk.o)
++ 0x00004d70 zDrvPow_AxiChangeClk
+ .text.zDrvPmic_SetVcoreOnOffPSM
+- 0x00004c90 0x28 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/peripheral.a(hal_pm.o)
+- 0x00004c90 zDrvPmic_SetVcoreOnOffPSM
++ 0x00004dcc 0x28 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/peripheral.a(hal_pm.o)
++ 0x00004dcc zDrvPmic_SetVcoreOnOffPSM
+ .text.zDrvPmic_I2cWrite_PSM
+- 0x00004cb8 0x2c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/peripheral.a(hal_pmic_i2c.o)
+- 0x00004cb8 zDrvPmic_I2cWrite_PSM
++ 0x00004df4 0x2c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/peripheral.a(hal_pmic_i2c.o)
++ 0x00004df4 zDrvPmic_I2cWrite_PSM
+ .text.zDrvExcep_Handler
+- 0x00004ce4 0x40 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/public.a(hal_assert.o)
+- 0x00004ce4 zDrvExcep_Handler
++ 0x00004e20 0x40 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/public.a(hal_assert.o)
++ 0x00004e20 zDrvExcep_Handler
+ .text.tos_assert_failed
+- 0x00004d24 0x30 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_osa_tos.a(tos_except_cortexm.o)
+- 0x00004d24 tos_assert_failed
++ 0x00004e60 0x30 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_osa_tos.a(tos_except_cortexm.o)
++ 0x00004e60 tos_assert_failed
+ .text.tos_idle_thread
+- 0x00004d54 0x8 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_osa_tos.a(tos_except_cortexm.o)
+- 0x00004d54 tos_idle_thread
++ 0x00004e90 0x8 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_osa_tos.a(tos_except_cortexm.o)
++ 0x00004e90 tos_idle_thread
+ .text.tos_default_isr
+- 0x00004d5c 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_osa_tos.a(tos_irq.o)
+- 0x00004d5c tos_default_isr
++ 0x00004e98 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_osa_tos.a(tos_irq.o)
++ 0x00004e98 tos_default_isr
+ .text.tos_create_irq
+- 0x00004d60 0x78 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_osa_tos.a(tos_irq.o)
+- 0x00004d60 tos_create_irq
++ 0x00004e9c 0x78 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_osa_tos.a(tos_irq.o)
++ 0x00004e9c tos_create_irq
+ .text.tos_delete_irq
+- 0x00004dd8 0x3c K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_osa_tos.a(tos_irq.o)
+- 0x00004dd8 tos_delete_irq
++ 0x00004f14 0x3c K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_osa_tos.a(tos_irq.o)
++ 0x00004f14 tos_delete_irq
+ .text.zLogCtrl_NotifyCapWakeUp
+- 0x00004e14 0x4c K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_sup.a(sup_agent_logctrl.o)
++ 0x00004f50 0x4c K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_sup.a(sup_agent_logctrl.o)
+ .text.zOss_LogWakeUpInit
+- 0x00004e60 0x54 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_sup.a(sup_agent_logctrl.o)
+- 0x00004e60 zOss_LogWakeUpInit
+- .text.memset 0x00004eb4 0x18 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_sup.a(sup_ramdump_client_lib.o)
+- 0x00004eb4 memset
++ 0x00004f9c 0x54 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_sup.a(sup_agent_logctrl.o)
++ 0x00004f9c zOss_LogWakeUpInit
++ .text.memset 0x00004ff0 0x18 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_sup.a(sup_ramdump_client_lib.o)
++ 0x00004ff0 memset
+ .text.zOss_RamdumpInit
+- 0x00004ecc 0x20 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_sup.a(sup_ramdump_client_lib.o)
+- 0x00004ecc zOss_RamdumpInit
++ 0x00005008 0x20 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_sup.a(sup_ramdump_client_lib.o)
++ 0x00005008 zOss_RamdumpInit
+ .text.zOss_RamdumpHandle
+- 0x00004eec 0x48 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_sup.a(sup_ramdump_client_lib.o)
+- 0x00004eec zOss_RamdumpHandle
++ 0x00005028 0x48 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_sup.a(sup_ramdump_client_lib.o)
++ 0x00005028 zOss_RamdumpHandle
+ .text.hal_reset_vsr
+- 0x00004f34 0x130 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_arch_hal_misc.o)
+- 0x00004f34 hal_reset_vsr
++ 0x00005070 0x130 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_arch_hal_misc.o)
++ 0x00005070 hal_reset_vsr
+ .text.hal_deliver_exception
+- 0x00005064 0x24 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_arch_hal_misc.o)
+- 0x00005064 hal_deliver_exception
++ 0x000051a0 0x24 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_arch_hal_misc.o)
++ 0x000051a0 hal_deliver_exception
+ .text.hal_interrupt_end
+- 0x00005088 0x1c K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_arch_hal_misc.o)
+- 0x00005088 hal_interrupt_end
++ 0x000051c4 0x1c K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_arch_hal_misc.o)
++ 0x000051c4 hal_interrupt_end
+ .text.hal_interrupt_mask
+- 0x000050a4 0x34 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_arch_hal_misc.o)
+- 0x000050a4 hal_interrupt_mask
++ 0x000051e0 0x34 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_arch_hal_misc.o)
++ 0x000051e0 hal_interrupt_mask
+ .text.hal_deliver_interrupt
+- 0x000050d8 0x60 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_arch_hal_misc.o)
+- 0x000050d8 hal_deliver_interrupt
++ 0x00005214 0x60 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_arch_hal_misc.o)
++ 0x00005214 hal_deliver_interrupt
+ .text.hal_interrupt_unmask
+- 0x00005138 0x40 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_arch_hal_misc.o)
+- 0x00005138 hal_interrupt_unmask
++ 0x00005274 0x40 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_arch_hal_misc.o)
++ 0x00005274 hal_interrupt_unmask
+ .text.hal_interrupt_unmask_safe
+- 0x00005178 0x8 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_arch_hal_misc.o)
+- 0x00005178 hal_interrupt_unmask_safe
++ 0x000052b4 0x8 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_arch_hal_misc.o)
++ 0x000052b4 hal_interrupt_unmask_safe
+ .text.hal_interrupt_set_level
+- 0x00005180 0x4 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_arch_hal_misc.o)
+- 0x00005180 hal_interrupt_set_level
++ 0x000052bc 0x4 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_arch_hal_misc.o)
++ 0x000052bc hal_interrupt_set_level
+ .text.hal_interrupt_set_priority
+- 0x00005184 0x6c K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_arch_hal_misc.o)
+- 0x00005184 hal_interrupt_set_priority
++ 0x000052c0 0x6c K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_arch_hal_misc.o)
++ 0x000052c0 hal_interrupt_set_priority
+ .text.hal_arch_default_isr
+- 0x000051f0 0x24 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_arch_hal_misc.o)
+- 0x000051f0 hal_arch_default_isr
++ 0x0000532c 0x24 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_arch_hal_misc.o)
++ 0x0000532c hal_arch_default_isr
+ .text.hal_lsbindex
+- 0x00005214 0x20 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_arch_hal_misc.o)
+- 0x00005214 hal_lsbindex
++ 0x00005350 0x20 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_arch_hal_misc.o)
++ 0x00005350 hal_lsbindex
+ .text.hal_clock_initialize
+- 0x00005234 0x14 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_tos_var_tos_misc.o)
+- 0x00005234 hal_clock_initialize
++ 0x00005370 0x14 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_tos_var_tos_misc.o)
++ 0x00005370 hal_clock_initialize
+ .text.hal_clock_isr
+- 0x00005248 0x8 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_tos_var_tos_misc.o)
+- 0x00005248 hal_clock_isr
++ 0x00005384 0x8 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_tos_var_tos_misc.o)
++ 0x00005384 hal_clock_isr
+ .text.hal_variant_init
+- 0x00005250 0x14 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_tos_var_tos_misc.o)
+- 0x00005250 hal_variant_init
++ 0x0000538c 0x14 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_tos_var_tos_misc.o)
++ 0x0000538c hal_variant_init
+ .text.hal_system_init
+- 0x00005264 0x4 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_tos_tos_m0_tos_m0_misc.o)
+- 0x00005264 hal_system_init
++ 0x000053a0 0x4 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_tos_tos_m0_tos_m0_misc.o)
++ 0x000053a0 hal_system_init
+ .text.hal_platform_init
+- 0x00005268 0x4c K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_tos_tos_m0_tos_m0_misc.o)
+- 0x00005268 hal_platform_init
++ 0x000053a4 0x4c K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_tos_tos_m0_tos_m0_misc.o)
++ 0x000053a4 hal_platform_init
+ .text.hal_default_isr
+- 0x000052b4 0x28 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_common_hal_misc.o)
+- 0x000052b4 hal_default_isr
++ 0x000053f0 0x28 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_common_hal_misc.o)
++ 0x000053f0 hal_default_isr
+ .text.cyg_start
+- 0x000052dc 0xc K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(infra_startup.o)
+- 0x000052dc cyg_start
++ 0x00005418 0xc K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(infra_startup.o)
++ 0x00005418 cyg_start
+ .text.cyg_assert_fail
+- 0x000052e8 0x14 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(infra_buffer.o)
+- 0x000052e8 cyg_assert_fail
++ 0x00005424 0x14 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(infra_buffer.o)
++ 0x00005424 cyg_assert_fail
+ .text.cyg_check_data_ptr
+- 0x000052fc 0x28 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(infra_buffer.o)
+- 0x000052fc cyg_check_data_ptr
++ 0x00005438 0x28 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(infra_buffer.o)
++ 0x00005438 cyg_check_data_ptr
+ .text.unlikely._ZnwjPv.isra.2.part.3
+- 0x00005324 0x14 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_kapi.o)
++ 0x00005460 0x14 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_kapi.o)
+ .text.cyg_thread_create
+- 0x00005338 0x70 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_kapi.o)
+- 0x00005338 cyg_thread_create
++ 0x00005474 0x70 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_kapi.o)
++ 0x00005474 cyg_thread_create
+ .text.cyg_thread_resume
+- 0x000053a8 0x18 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_kapi.o)
+- 0x000053a8 cyg_thread_resume
++ 0x000054e4 0x18 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_kapi.o)
++ 0x000054e4 cyg_thread_resume
+ .text.cyg_interrupt_create
+- 0x000053c0 0x70 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_kapi.o)
+- 0x000053c0 cyg_interrupt_create
++ 0x000054fc 0x70 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_kapi.o)
++ 0x000054fc cyg_interrupt_create
+ .text.cyg_interrupt_delete
+- 0x00005430 0x8 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_kapi.o)
+- 0x00005430 cyg_interrupt_delete
++ 0x0000556c 0x8 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_kapi.o)
++ 0x0000556c cyg_interrupt_delete
+ .text.cyg_interrupt_attach
+- 0x00005438 0x8 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_kapi.o)
+- 0x00005438 cyg_interrupt_attach
++ 0x00005574 0x8 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_kapi.o)
++ 0x00005574 cyg_interrupt_attach
+ .text.cyg_interrupt_detach
+- 0x00005440 0x8 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_kapi.o)
+- 0x00005440 cyg_interrupt_detach
++ 0x0000557c 0x8 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_kapi.o)
++ 0x0000557c cyg_interrupt_detach
+ .text.cyg_interrupt_mask
+- 0x00005448 0x8 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_kapi.o)
+- 0x00005448 cyg_interrupt_mask
++ 0x00005584 0x8 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_kapi.o)
++ 0x00005584 cyg_interrupt_mask
+ .text.cyg_interrupt_unmask
+- 0x00005450 0x8 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_kapi.o)
+- 0x00005450 cyg_interrupt_unmask
++ 0x0000558c 0x8 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_kapi.o)
++ 0x0000558c cyg_interrupt_unmask
+ .text.cyg_semaphore_init
+- 0x00005458 0x28 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_kapi.o)
+- 0x00005458 cyg_semaphore_init
++ 0x00005594 0x28 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_kapi.o)
++ 0x00005594 cyg_semaphore_init
+ .text.cyg_semaphore_post
+- 0x00005480 0x8 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_kapi.o)
+- 0x00005480 cyg_semaphore_post
++ 0x000055bc 0x8 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_kapi.o)
++ 0x000055bc cyg_semaphore_post
+ .text.cyg_mutex_init
+- 0x00005488 0x24 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_kapi.o)
+- 0x00005488 cyg_mutex_init
++ 0x000055c4 0x24 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_kapi.o)
++ 0x000055c4 cyg_mutex_init
+ .text.cyg_mutex_lock
+- 0x000054ac 0x8 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_kapi.o)
+- 0x000054ac cyg_mutex_lock
++ 0x000055e8 0x8 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_kapi.o)
++ 0x000055e8 cyg_mutex_lock
+ .text.cyg_mutex_unlock
+- 0x000054b4 0x8 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_kapi.o)
+- 0x000054b4 cyg_mutex_unlock
++ 0x000055f0 0x8 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_kapi.o)
++ 0x000055f0 cyg_mutex_unlock
+ .text.startup._GLOBAL__sub_I_cyg_scheduler_start
+- 0x000054bc 0xc K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_kapi.o)
++ 0x000055f8 0xc K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_kapi.o)
+ .text._Z16idle_thread_mainj
+- 0x000054c8 0x40 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_thread.o)
+- 0x000054c8 idle_thread_main(unsigned int)
++ 0x00005604 0x40 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_thread.o)
++ 0x00005604 idle_thread_main(unsigned int)
+ .text._ZN10Cyg_ThreadC2EjPFvjEjPcjj
+- 0x00005508 0x270 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_thread.o)
+- 0x00005508 Cyg_Thread::Cyg_Thread(unsigned int, void (*)(unsigned int), unsigned int, char*, unsigned int, unsigned int)
+- 0x00005508 Cyg_Thread::Cyg_Thread(unsigned int, void (*)(unsigned int), unsigned int, char*, unsigned int, unsigned int)
++ 0x00005644 0x270 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_thread.o)
++ 0x00005644 Cyg_Thread::Cyg_Thread(unsigned int, void (*)(unsigned int), unsigned int, char*, unsigned int, unsigned int)
++ 0x00005644 Cyg_Thread::Cyg_Thread(unsigned int, void (*)(unsigned int), unsigned int, char*, unsigned int, unsigned int)
+ .text._ZNK10Cyg_Thread10check_thisE21cyg_assert_class_zeal
+- 0x00005778 0x40 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_thread.o)
+- 0x00005778 Cyg_Thread::check_this(cyg_assert_class_zeal) const
++ 0x000058b4 0x40 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_thread.o)
++ 0x000058b4 Cyg_Thread::check_this(cyg_assert_class_zeal) const
+ .text._ZN10Cyg_Thread12reinitializeEv
+- 0x000057b8 0xc0 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_thread.o)
+- 0x000057b8 Cyg_Thread::reinitialize()
++ 0x000058f4 0xc0 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_thread.o)
++ 0x000058f4 Cyg_Thread::reinitialize()
+ .text._ZN10Cyg_Thread5sleepEv
+- 0x00005878 0x90 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_thread.o)
+- 0x00005878 Cyg_Thread::sleep()
++ 0x000059b4 0x90 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_thread.o)
++ 0x000059b4 Cyg_Thread::sleep()
+ .text._ZN10Cyg_Thread4wakeEv
+- 0x00005908 0x78 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_thread.o)
+- 0x00005908 Cyg_Thread::wake()
++ 0x00005a44 0x78 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_thread.o)
++ 0x00005a44 Cyg_Thread::wake()
+ .text._ZN15Cyg_ThreadTimer5alarmEP9Cyg_Alarmj
+- 0x00005980 0x8c K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_thread.o)
+- 0x00005980 Cyg_ThreadTimer::alarm(Cyg_Alarm*, unsigned int)
++ 0x00005abc 0x8c K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_thread.o)
++ 0x00005abc Cyg_ThreadTimer::alarm(Cyg_Alarm*, unsigned int)
+ .text._ZN10Cyg_Thread6resumeEv
+- 0x00005a0c 0x94 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_thread.o)
+- 0x00005a0c Cyg_Thread::resume()
++ 0x00005b48 0x94 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_thread.o)
++ 0x00005b48 Cyg_Thread::resume()
+ .text._ZN10Cyg_Thread4exitEv
+- 0x00005aa0 0x3c K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_thread.o)
+- 0x00005aa0 Cyg_Thread::exit()
++ 0x00005bdc 0x3c K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_thread.o)
++ 0x00005bdc Cyg_Thread::exit()
+ .text._ZN18Cyg_HardwareThread12thread_entryEP10Cyg_Thread
+- 0x00005adc 0x1c K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_thread.o)
+- 0x00005adc Cyg_HardwareThread::thread_entry(Cyg_Thread*)
++ 0x00005c18 0x1c K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_thread.o)
++ 0x00005c18 Cyg_HardwareThread::thread_entry(Cyg_Thread*)
+ .text._ZN14Cyg_IdleThreadC2Ev
+- 0x00005af8 0x54 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_thread.o)
+- 0x00005af8 Cyg_IdleThread::Cyg_IdleThread()
+- 0x00005af8 Cyg_IdleThread::Cyg_IdleThread()
++ 0x00005c34 0x54 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_thread.o)
++ 0x00005c34 Cyg_IdleThread::Cyg_IdleThread()
++ 0x00005c34 Cyg_IdleThread::Cyg_IdleThread()
+ .text.startup._GLOBAL__sub_I.15000__ZN18Cyg_HardwareThread12thread_entryEP10Cyg_Thread
+- 0x00005b4c 0x10 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_thread.o)
++ 0x00005c88 0x10 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_thread.o)
+ .text._ZN13Cyg_InterruptC2EjijPFjjjEPFvjjjE
+- 0x00005b5c 0x10 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_intr.o)
+- 0x00005b5c Cyg_Interrupt::Cyg_Interrupt(unsigned int, int, unsigned int, unsigned int (*)(unsigned int, unsigned int), void (*)(unsigned int, unsigned int, unsigned int))
+- 0x00005b5c Cyg_Interrupt::Cyg_Interrupt(unsigned int, int, unsigned int, unsigned int (*)(unsigned int, unsigned int), void (*)(unsigned int, unsigned int, unsigned int))
++ 0x00005c98 0x10 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_intr.o)
++ 0x00005c98 Cyg_Interrupt::Cyg_Interrupt(unsigned int, int, unsigned int, unsigned int (*)(unsigned int, unsigned int), void (*)(unsigned int, unsigned int, unsigned int))
++ 0x00005c98 Cyg_Interrupt::Cyg_Interrupt(unsigned int, int, unsigned int, unsigned int (*)(unsigned int, unsigned int), void (*)(unsigned int, unsigned int, unsigned int))
+ .text._ZN13Cyg_Interrupt17call_pending_DSRsEv
+- 0x00005b6c 0x38 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_intr.o)
+- 0x00005b6c Cyg_Interrupt::call_pending_DSRs()
++ 0x00005ca8 0x38 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_intr.o)
++ 0x00005ca8 Cyg_Interrupt::call_pending_DSRs()
+ .text.cyg_interrupt_post_dsr
+- 0x00005ba4 0x30 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_intr.o)
+- 0x00005ba4 cyg_interrupt_post_dsr
++ 0x00005ce0 0x30 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_intr.o)
++ 0x00005ce0 cyg_interrupt_post_dsr
+ .text.interrupt_end
+- 0x00005bd4 0x74 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_intr.o)
+- 0x00005bd4 interrupt_end
++ 0x00005d10 0x74 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_intr.o)
++ 0x00005d10 interrupt_end
+ .text._ZN13Cyg_Interrupt6attachEv
+- 0x00005c48 0x8c K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_intr.o)
+- 0x00005c48 Cyg_Interrupt::attach()
++ 0x00005d84 0x8c K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_intr.o)
++ 0x00005d84 Cyg_Interrupt::attach()
+ .text._ZN13Cyg_Interrupt6detachEv
+- 0x00005cd4 0x60 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_intr.o)
+- 0x00005cd4 Cyg_Interrupt::detach()
++ 0x00005e10 0x60 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_intr.o)
++ 0x00005e10 Cyg_Interrupt::detach()
+ .text._ZN13Cyg_InterruptD2Ev
+- 0x00005d34 0xc K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_intr.o)
+- 0x00005d34 Cyg_Interrupt::~Cyg_Interrupt()
+- 0x00005d34 Cyg_Interrupt::~Cyg_Interrupt()
++ 0x00005e70 0xc K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_intr.o)
++ 0x00005e70 Cyg_Interrupt::~Cyg_Interrupt()
++ 0x00005e70 Cyg_Interrupt::~Cyg_Interrupt()
+ .text._ZN13Cyg_Interrupt14mask_interruptEj
+- 0x00005d40 0x38 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_intr.o)
+- 0x00005d40 Cyg_Interrupt::mask_interrupt(unsigned int)
++ 0x00005e7c 0x38 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_intr.o)
++ 0x00005e7c Cyg_Interrupt::mask_interrupt(unsigned int)
+ .text._ZN13Cyg_Interrupt16unmask_interruptEj
+- 0x00005d78 0x38 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_intr.o)
+- 0x00005d78 Cyg_Interrupt::unmask_interrupt(unsigned int)
++ 0x00005eb4 0x38 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_intr.o)
++ 0x00005eb4 Cyg_Interrupt::unmask_interrupt(unsigned int)
+ .text._ZN13Cyg_Interrupt23call_pending_DSRs_innerEv
+- 0x00005db0 0x88 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_intr.o)
+- 0x00005db0 Cyg_Interrupt::call_pending_DSRs_inner()
++ 0x00005eec 0x88 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_intr.o)
++ 0x00005eec Cyg_Interrupt::call_pending_DSRs_inner()
+ .text.cyg_interrupt_call_pending_DSRs
+- 0x00005e38 0x8 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_intr.o)
+- 0x00005e38 cyg_interrupt_call_pending_DSRs
++ 0x00005f74 0x8 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_intr.o)
++ 0x00005f74 cyg_interrupt_call_pending_DSRs
+ .text.startup._GLOBAL__sub_I.12000__ZN13Cyg_Interrupt15disable_counterE
+- 0x00005e40 0xc K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_intr.o)
++ 0x00005f7c 0xc K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_intr.o)
+ .text._ZN28Cyg_Scheduler_ImplementationC2Ev
+- 0x00005e4c 0xc K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_bitmap.o)
+- 0x00005e4c Cyg_Scheduler_Implementation::Cyg_Scheduler_Implementation()
+- 0x00005e4c Cyg_Scheduler_Implementation::Cyg_Scheduler_Implementation()
++ 0x00005f88 0xc K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_bitmap.o)
++ 0x00005f88 Cyg_Scheduler_Implementation::Cyg_Scheduler_Implementation()
++ 0x00005f88 Cyg_Scheduler_Implementation::Cyg_Scheduler_Implementation()
+ .text._ZN28Cyg_Scheduler_Implementation8scheduleEv
+- 0x00005e58 0x30 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_bitmap.o)
+- 0x00005e58 Cyg_Scheduler_Implementation::schedule()
++ 0x00005f94 0x30 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_bitmap.o)
++ 0x00005f94 Cyg_Scheduler_Implementation::schedule()
+ .text._ZN28Cyg_Scheduler_Implementation10add_threadEP10Cyg_Thread
+- 0x00005e88 0x8c K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_bitmap.o)
+- 0x00005e88 Cyg_Scheduler_Implementation::add_thread(Cyg_Thread*)
++ 0x00005fc4 0x8c K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_bitmap.o)
++ 0x00005fc4 Cyg_Scheduler_Implementation::add_thread(Cyg_Thread*)
+ .text._ZN28Cyg_Scheduler_Implementation10rem_threadEP10Cyg_Thread
+- 0x00005f14 0x68 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_bitmap.o)
+- 0x00005f14 Cyg_Scheduler_Implementation::rem_thread(Cyg_Thread*)
++ 0x00006050 0x68 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_bitmap.o)
++ 0x00006050 Cyg_Scheduler_Implementation::rem_thread(Cyg_Thread*)
+ .text._ZN28Cyg_Scheduler_Implementation15set_idle_threadEP10Cyg_Threadj
+- 0x00005f7c 0x14 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_bitmap.o)
+- 0x00005f7c Cyg_Scheduler_Implementation::set_idle_thread(Cyg_Thread*, unsigned int)
++ 0x000060b8 0x14 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_bitmap.o)
++ 0x000060b8 Cyg_Scheduler_Implementation::set_idle_thread(Cyg_Thread*, unsigned int)
+ .text._ZN28Cyg_Scheduler_Implementation15register_threadEP10Cyg_Thread
+- 0x00005f90 0x38 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_bitmap.o)
+- 0x00005f90 Cyg_Scheduler_Implementation::register_thread(Cyg_Thread*)
++ 0x000060cc 0x38 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_bitmap.o)
++ 0x000060cc Cyg_Scheduler_Implementation::register_thread(Cyg_Thread*)
+ .text._ZN28Cyg_Scheduler_Implementation17deregister_threadEP10Cyg_Thread
+- 0x00005fc8 0x38 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_bitmap.o)
+- 0x00005fc8 Cyg_Scheduler_Implementation::deregister_thread(Cyg_Thread*)
++ 0x00006104 0x38 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_bitmap.o)
++ 0x00006104 Cyg_Scheduler_Implementation::deregister_thread(Cyg_Thread*)
+ .text._ZN28Cyg_Scheduler_Implementation6uniqueEi
+- 0x00006000 0x30 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_bitmap.o)
+- 0x00006000 Cyg_Scheduler_Implementation::unique(int)
++ 0x0000613c 0x30 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_bitmap.o)
++ 0x0000613c Cyg_Scheduler_Implementation::unique(int)
+ .text._ZN30Cyg_SchedThread_ImplementationC2Ej
+- 0x00006030 0x24 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_bitmap.o)
+- 0x00006030 Cyg_SchedThread_Implementation::Cyg_SchedThread_Implementation(unsigned int)
+- 0x00006030 Cyg_SchedThread_Implementation::Cyg_SchedThread_Implementation(unsigned int)
++ 0x0000616c 0x24 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_bitmap.o)
++ 0x0000616c Cyg_SchedThread_Implementation::Cyg_SchedThread_Implementation(unsigned int)
++ 0x0000616c Cyg_SchedThread_Implementation::Cyg_SchedThread_Implementation(unsigned int)
+ .text._ZN30Cyg_ThreadQueue_ImplementationC2Ev
+- 0x00006054 0x8 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_bitmap.o)
+- 0x00006054 Cyg_ThreadQueue_Implementation::Cyg_ThreadQueue_Implementation()
+- 0x00006054 Cyg_ThreadQueue_Implementation::Cyg_ThreadQueue_Implementation()
++ 0x00006190 0x8 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_bitmap.o)
++ 0x00006190 Cyg_ThreadQueue_Implementation::Cyg_ThreadQueue_Implementation()
++ 0x00006190 Cyg_ThreadQueue_Implementation::Cyg_ThreadQueue_Implementation()
+ .text._ZN30Cyg_ThreadQueue_Implementation7enqueueEP10Cyg_Thread
+- 0x0000605c 0x10 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_bitmap.o)
+- 0x0000605c Cyg_ThreadQueue_Implementation::enqueue(Cyg_Thread*)
++ 0x00006198 0x10 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_bitmap.o)
++ 0x00006198 Cyg_ThreadQueue_Implementation::enqueue(Cyg_Thread*)
+ .text._ZN30Cyg_ThreadQueue_Implementation7dequeueEv
+- 0x0000606c 0x2c K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_bitmap.o)
+- 0x0000606c Cyg_ThreadQueue_Implementation::dequeue()
++ 0x000061a8 0x2c K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_bitmap.o)
++ 0x000061a8 Cyg_ThreadQueue_Implementation::dequeue()
+ .text._ZN30Cyg_ThreadQueue_Implementation6removeEP10Cyg_Thread
+- 0x00006098 0x14 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_bitmap.o)
+- 0x00006098 Cyg_ThreadQueue_Implementation::remove(Cyg_Thread*)
++ 0x000061d4 0x14 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_bitmap.o)
++ 0x000061d4 Cyg_ThreadQueue_Implementation::remove(Cyg_Thread*)
+ .text._ZN13Cyg_Scheduler12unlock_innerEj
+- 0x000060ac 0x324 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_sched.o)
+- 0x000060ac Cyg_Scheduler::unlock_inner(unsigned int)
++ 0x000061e8 0x324 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_sched.o)
++ 0x000061e8 Cyg_Scheduler::unlock_inner(unsigned int)
+ .text._ZN13Cyg_Scheduler12thread_entryEP10Cyg_Thread
+- 0x000063d0 0x60 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_sched.o)
+- 0x000063d0 Cyg_Scheduler::thread_entry(Cyg_Thread*)
++ 0x0000650c 0x60 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_sched.o)
++ 0x0000650c Cyg_Scheduler::thread_entry(Cyg_Thread*)
+ .text._ZN13Cyg_Scheduler9start_cpuEv
+- 0x00006430 0x58 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_sched.o)
+- 0x00006430 Cyg_Scheduler::start_cpu()
++ 0x0000656c 0x58 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_sched.o)
++ 0x0000656c Cyg_Scheduler::start_cpu()
+ .text._ZN13Cyg_Scheduler5startEv
+- 0x00006488 0x8 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_sched.o)
+- 0x00006488 Cyg_Scheduler::start()
++ 0x000065c4 0x8 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_sched.o)
++ 0x000065c4 Cyg_Scheduler::start()
+ .text._ZN15Cyg_SchedThreadC2EP10Cyg_Threadj
+- 0x00006490 0x14 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_sched.o)
+- 0x00006490 Cyg_SchedThread::Cyg_SchedThread(Cyg_Thread*, unsigned int)
+- 0x00006490 Cyg_SchedThread::Cyg_SchedThread(Cyg_Thread*, unsigned int)
++ 0x000065cc 0x14 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_sched.o)
++ 0x000065cc Cyg_SchedThread::Cyg_SchedThread(Cyg_Thread*, unsigned int)
++ 0x000065cc Cyg_SchedThread::Cyg_SchedThread(Cyg_Thread*, unsigned int)
+ .text.startup._GLOBAL__sub_I.11000_cyg_scheduler_sched_lock
+- 0x000064a4 0x10 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_sched.o)
++ 0x000065e0 0x10 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_sched.o)
+ .text._ZN22Cyg_Counting_SemaphoreC2Ei
+- 0x000064b4 0x14 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_cnt_sem.o)
+- 0x000064b4 Cyg_Counting_Semaphore::Cyg_Counting_Semaphore(int)
+- 0x000064b4 Cyg_Counting_Semaphore::Cyg_Counting_Semaphore(int)
++ 0x000065f0 0x14 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_cnt_sem.o)
++ 0x000065f0 Cyg_Counting_Semaphore::Cyg_Counting_Semaphore(int)
++ 0x000065f0 Cyg_Counting_Semaphore::Cyg_Counting_Semaphore(int)
+ .text._ZN22Cyg_Counting_Semaphore4postEv
+- 0x000064c8 0x68 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_cnt_sem.o)
+- 0x000064c8 Cyg_Counting_Semaphore::post()
++ 0x00006604 0x68 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_cnt_sem.o)
++ 0x00006604 Cyg_Counting_Semaphore::post()
+ .text._ZN9Cyg_MutexC2Ev
+- 0x00006530 0x14 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_mutex.o)
+- 0x00006530 Cyg_Mutex::Cyg_Mutex()
+- 0x00006530 Cyg_Mutex::Cyg_Mutex()
++ 0x0000666c 0x14 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_mutex.o)
++ 0x0000666c Cyg_Mutex::Cyg_Mutex()
++ 0x0000666c Cyg_Mutex::Cyg_Mutex()
+ .text._ZNK9Cyg_Mutex10check_thisE21cyg_assert_class_zeal
+- 0x00006544 0x40 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_mutex.o)
+- 0x00006544 Cyg_Mutex::check_this(cyg_assert_class_zeal) const
++ 0x00006680 0x40 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_mutex.o)
++ 0x00006680 Cyg_Mutex::check_this(cyg_assert_class_zeal) const
+ .text._ZN9Cyg_Mutex4lockEv
+- 0x00006584 0x16c K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_mutex.o)
+- 0x00006584 Cyg_Mutex::lock()
++ 0x000066c0 0x16c K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_mutex.o)
++ 0x000066c0 Cyg_Mutex::lock()
+ .text._ZN9Cyg_Mutex6unlockEv
+- 0x000066f0 0x118 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_mutex.o)
+- 0x000066f0 Cyg_Mutex::unlock()
+- .text 0x00006808 0x52 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_arch_context.o)
+- 0x00006808 hal_thread_switch_context
+- 0x0000682e hal_thread_load_context
+- 0x0000684e hal_setjmp
+- 0x00006854 hal_longjmp
+- *fill* 0x0000685a 0x2
++ 0x0000682c 0x118 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_mutex.o)
++ 0x0000682c Cyg_Mutex::unlock()
++ .text 0x00006944 0x52 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_arch_context.o)
++ 0x00006944 hal_thread_switch_context
++ 0x0000696a hal_thread_load_context
++ 0x0000698a hal_setjmp
++ 0x00006990 hal_longjmp
++ *fill* 0x00006996 0x2
+ .text._ZN17Cyg_RealTimeClock3isrEjj
+- 0x0000685c 0xc K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_clock.o)
+- 0x0000685c Cyg_RealTimeClock::isr(unsigned int, unsigned int)
++ 0x00006998 0xc K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_clock.o)
++ 0x00006998 Cyg_RealTimeClock::isr(unsigned int, unsigned int)
+ .text._ZN11Cyg_Counter9add_alarmEP9Cyg_Alarm
+- 0x00006868 0xc4 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_clock.o)
+- 0x00006868 Cyg_Counter::add_alarm(Cyg_Alarm*)
++ 0x000069a4 0xc4 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_clock.o)
++ 0x000069a4 Cyg_Counter::add_alarm(Cyg_Alarm*)
+ .text._ZN11Cyg_Counter4tickEj
+- 0x0000692c 0x140 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_clock.o)
+- 0x0000692c Cyg_Counter::tick(unsigned int)
++ 0x00006a68 0x140 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_clock.o)
++ 0x00006a68 Cyg_Counter::tick(unsigned int)
+ .text._ZN17Cyg_RealTimeClock3dsrEjjj
+- 0x00006a6c 0xc K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_clock.o)
+- 0x00006a6c Cyg_RealTimeClock::dsr(unsigned int, unsigned int, unsigned int)
++ 0x00006ba8 0xc K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_clock.o)
++ 0x00006ba8 Cyg_RealTimeClock::dsr(unsigned int, unsigned int, unsigned int)
+ .text._ZN11Cyg_Counter9rem_alarmEP9Cyg_Alarm
+- 0x00006a78 0x98 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_clock.o)
+- 0x00006a78 Cyg_Counter::rem_alarm(Cyg_Alarm*)
++ 0x00006bb4 0x98 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_clock.o)
++ 0x00006bb4 Cyg_Counter::rem_alarm(Cyg_Alarm*)
+ .text._ZN9Cyg_AlarmC2EP11Cyg_CounterPFvPS_jEj
+- 0x00006b10 0x1c K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_clock.o)
+- 0x00006b10 Cyg_Alarm::Cyg_Alarm(Cyg_Counter*, void (*)(Cyg_Alarm*, unsigned int), unsigned int)
+- 0x00006b10 Cyg_Alarm::Cyg_Alarm(Cyg_Counter*, void (*)(Cyg_Alarm*, unsigned int), unsigned int)
++ 0x00006c4c 0x1c K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_clock.o)
++ 0x00006c4c Cyg_Alarm::Cyg_Alarm(Cyg_Counter*, void (*)(Cyg_Alarm*, unsigned int), unsigned int)
++ 0x00006c4c Cyg_Alarm::Cyg_Alarm(Cyg_Counter*, void (*)(Cyg_Alarm*, unsigned int), unsigned int)
+ .text._ZN9Cyg_Alarm7disableEv
+- 0x00006b2c 0x54 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_clock.o)
+- 0x00006b2c Cyg_Alarm::disable()
++ 0x00006c68 0x54 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_clock.o)
++ 0x00006c68 Cyg_Alarm::disable()
+ .text._ZN17Cyg_RealTimeClockC2Ev
+- 0x00006b80 0x70 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_clock.o)
+- 0x00006b80 Cyg_RealTimeClock::Cyg_RealTimeClock()
+- 0x00006b80 Cyg_RealTimeClock::Cyg_RealTimeClock()
++ 0x00006cbc 0x70 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_clock.o)
++ 0x00006cbc Cyg_RealTimeClock::Cyg_RealTimeClock()
++ 0x00006cbc Cyg_RealTimeClock::Cyg_RealTimeClock()
+ .text.startup._GLOBAL__sub_I.14000__ZN9Cyg_Clock15real_time_clockE
+- 0x00006bf0 0x10 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_clock.o)
+- .text 0x00006c00 0x9c /cygdrive/k/build/compiler/gcc_arm/arm-eabi/bin/../lib/gcc/arm-eabi/4.7.1/thumb/libgcc.a(_udivsi3.o)
+- 0x00006c00 __udivsi3
+- 0x00006c00 __aeabi_uidiv
+- 0x00006c88 __aeabi_uidivmod
+- .text 0x00006c9c 0x4 /cygdrive/k/build/compiler/gcc_arm/arm-eabi/bin/../lib/gcc/arm-eabi/4.7.1/thumb/libgcc.a(_dvmd_tls.o)
+- 0x00006c9c __aeabi_ldiv0
+- 0x00006c9c __aeabi_idiv0
+- .text 0x00006ca0 0x44 /cygdrive/k/build/compiler/gcc_arm/arm-eabi/bin/../lib/gcc/arm-eabi/4.7.1/thumb/libgcc.a(_muldi3.o)
+- 0x00006ca0 __aeabi_lmul
+- 0x00006ca0 __muldi3
++ 0x00006d2c 0x10 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_clock.o)
++ .text 0x00006d3c 0x9c /cygdrive/k/build/compiler/gcc_arm/arm-eabi/bin/../lib/gcc/arm-eabi/4.7.1/thumb/libgcc.a(_udivsi3.o)
++ 0x00006d3c __udivsi3
++ 0x00006d3c __aeabi_uidiv
++ 0x00006dc4 __aeabi_uidivmod
++ .text 0x00006dd8 0x4 /cygdrive/k/build/compiler/gcc_arm/arm-eabi/bin/../lib/gcc/arm-eabi/4.7.1/thumb/libgcc.a(_dvmd_tls.o)
++ 0x00006dd8 __aeabi_ldiv0
++ 0x00006dd8 __aeabi_idiv0
++ .text 0x00006ddc 0x44 /cygdrive/k/build/compiler/gcc_arm/arm-eabi/bin/../lib/gcc/arm-eabi/4.7.1/thumb/libgcc.a(_muldi3.o)
++ 0x00006ddc __aeabi_lmul
++ 0x00006ddc __muldi3
+ *(.gnu.warning)
+ *(.gnu.linkonce.t.*)
+ *(.init)
+@@ -2705,321 +2711,321 @@
+ .glue_7 0x00000000 0x0 linker stubs
+ *(.glue_7t)
+ .glue_7t 0x00000000 0x0 linker stubs
+- 0x00006ce4 __CTOR_LIST__ = ABSOLUTE (.)
++ 0x00006e20 __CTOR_LIST__ = ABSOLUTE (.)
+ *(SORT(.ctors*))
+- 0x00006ce4 __CTOR_END__ = ABSOLUTE (.)
+- 0x00006ce4 __DTOR_LIST__ = ABSOLUTE (.)
++ 0x00006e20 __CTOR_END__ = ABSOLUTE (.)
++ 0x00006e20 __DTOR_LIST__ = ABSOLUTE (.)
+ *(SORT(.dtors*))
+- 0x00006ce4 __DTOR_END__ = ABSOLUTE (.)
+- 0x00006ce4 _etext = .
+- 0x00006ce4 PROVIDE (__etext, .)
++ 0x00006e20 __DTOR_END__ = ABSOLUTE (.)
++ 0x00006e20 _etext = .
++ 0x00006e20 PROVIDE (__etext, .)
+
+-.vfp11_veneer 0x00006ce4 0x0
++.vfp11_veneer 0x00006e20 0x0
+ .vfp11_veneer 0x00000000 0x0 linker stubs
+
+-.v4_bx 0x00006ce4 0x0
++.v4_bx 0x00006e20 0x0
+ .v4_bx 0x00000000 0x0 linker stubs
+
+-.iplt 0x00006ce4 0x0
++.iplt 0x00006e20 0x0
+ .iplt 0x00000000 0x0 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/vectors.o
+
+-.fini 0x00006ce8 0x0
+- 0x00006ce8 . = .
++.fini 0x00006e20 0x0
++ 0x00006e20 . = .
+ *(.fini)
+
+-.rodata 0x00006ce8 0xa5c
+- 0x00006ce8 . = .
++.rodata 0x00006e20 0xa5c
++ 0x00006e20 . = .
+ *(.rodata*)
+ .rodata.gHal_DevRegisterTbl
+- 0x00006ce8 0x28 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_init.o)
+- .rodata.__FUNCTION__.5124
+- 0x00006d10 0x10 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_spinlock.o)
++ 0x00006e20 0x28 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_init.o)
++ .rodata.__FUNCTION__.5185
++ 0x00006e48 0x1c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_spinlock.o)
+ .rodata.hwlock_regs
+- 0x00006d20 0x10 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_spinlock.o)
+- .rodata.__FUNCTION__.5153
+- 0x00006d30 0x20 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_spinlock.o)
++ 0x00006e64 0x10 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_spinlock.o)
++ .rodata.__FUNCTION__.5136
++ 0x00006e74 0x10 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_spinlock.o)
+ .rodata.str1.4
+- 0x00006d50 0x3c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_spinlock.o)
+- .rodata.__FUNCTION__.5164
+- 0x00006d8c 0x1c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_spinlock.o)
++ 0x00006e84 0x3c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_spinlock.o)
++ .rodata.__FUNCTION__.5174
++ 0x00006ec0 0x20 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_spinlock.o)
+ .rodata.__FUNCTION__.5196
+- 0x00006da8 0x14 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(icp_rpMsg.o)
++ 0x00006ee0 0x14 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(icp_rpMsg.o)
+ .rodata.__FUNCTION__.5220
+- 0x00006dbc 0x18 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(icp_rpMsg.o)
++ 0x00006ef4 0x18 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(icp_rpMsg.o)
+ .rodata.__FUNCTION__.5155
+- 0x00006dd4 0x14 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(icp_rpMsg.o)
++ 0x00006f0c 0x14 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(icp_rpMsg.o)
+ .rodata.str1.4
+- 0x00006de8 0x35 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(icp_rpMsg.o)
++ 0x00006f20 0x35 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(icp_rpMsg.o)
+ 0x3c (size before relaxing)
+- *fill* 0x00006e1d 0x3
++ *fill* 0x00006f55 0x3
+ .rodata.__FUNCTION__.5203
+- 0x00006e20 0x10 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(icp_rpMsg.o)
++ 0x00006f58 0x10 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(icp_rpMsg.o)
+ .rodata.__FUNCTION__.5172
+- 0x00006e30 0x14 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(icp_rpMsg.o)
++ 0x00006f68 0x14 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(icp_rpMsg.o)
+ .rodata.__FUNCTION__.5226
+- 0x00006e44 0x18 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(icp_rpMsg.o)
++ 0x00006f7c 0x18 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(icp_rpMsg.o)
+ .rodata.__FUNCTION__.5095
+- 0x00006e5c 0x14 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_int.o)
++ 0x00006f94 0x14 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_int.o)
+ .rodata.str1.4
+- 0x00006e70 0x33 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_int.o)
++ 0x00006fa8 0x33 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_int.o)
+ 0x38 (size before relaxing)
+- *fill* 0x00006ea3 0x1
+- .rodata.__FUNCTION__.5167
+- 0x00006ea4 0x18 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_dma.o)
+- .rodata.__FUNCTION__.5142
+- 0x00006ebc 0x14 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_dma.o)
+- .rodata.__FUNCTION__.5129
+- 0x00006ed0 0x14 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_dma.o)
++ *fill* 0x00006fdb 0x1
++ .rodata.__FUNCTION__.5134
++ 0x00006fdc 0x14 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_dma.o)
++ .rodata.__FUNCTION__.5172
++ 0x00006ff0 0x18 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_dma.o)
++ .rodata.__FUNCTION__.5147
++ 0x00007008 0x14 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_dma.o)
++ .rodata.__FUNCTION__.5179
++ 0x0000701c 0x18 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_dma.o)
+ .rodata.str1.4
+- 0x00006ee4 0x33 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_dma.o)
++ 0x00007034 0x33 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_dma.o)
+ 0x38 (size before relaxing)
+- *fill* 0x00006f17 0x1
+- .rodata.__FUNCTION__.5174
+- 0x00006f18 0x18 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_dma.o)
++ *fill* 0x00007067 0x1
+ .rodata.__FUNCTION__.6260
+- 0x00006f30 0x14 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow.o)
++ 0x00007068 0x14 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow.o)
+ .rodata.str1.4
+- 0x00006f44 0x5a K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow.o)
++ 0x0000707c 0x5a K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow.o)
+ 0x60 (size before relaxing)
+- *fill* 0x00006f9e 0x2
++ *fill* 0x000070d6 0x2
+ .rodata.__FUNCTION__.6335
+- 0x00006fa0 0x18 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow.o)
+- .rodata 0x00006fb8 0x2c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pd_context.o)
+- .rodata.__FUNCTION__.5394
+- 0x00006fe4 0xc K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_i2c.o)
++ 0x000070d8 0x18 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow.o)
++ .rodata 0x000070f0 0x2c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pd_context.o)
+ .rodata.str1.4
+- 0x00006ff0 0x33 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_i2c.o)
++ 0x0000711c 0x33 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_i2c.o)
+ 0x38 (size before relaxing)
+- *fill* 0x00007023 0x1
+- .rodata.__FUNCTION__.5385
+- 0x00007024 0xc K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_i2c.o)
+- .rodata.__FUNCTION__.5338
+- 0x00007030 0x18 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_i2c.o)
+- .rodata.__FUNCTION__.5351
+- 0x00007048 0x14 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
+- .rodata.__FUNCTION__.5298
+- 0x0000705c 0x14 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
+- .rodata.__FUNCTION__.5342
+- 0x00007070 0x8 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
++ *fill* 0x0000714f 0x1
++ .rodata.__FUNCTION__.5390
++ 0x00007150 0xc K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_i2c.o)
++ .rodata.__FUNCTION__.5343
++ 0x0000715c 0x18 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_i2c.o)
++ .rodata.__FUNCTION__.5399
++ 0x00007174 0xc K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_i2c.o)
+ .rodata.__FUNCTION__.5355
+- 0x00007078 0x14 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
+- .rodata.__FUNCTION__.5302
+- 0x0000708c 0x14 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
+- .rodata.__FUNCTION__.5312
+- 0x000070a0 0x10 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
+- .rodata.__FUNCTION__.5290
+- 0x000070b0 0x14 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
+- .rodata.__FUNCTION__.5331
+- 0x000070c4 0x10 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
++ 0x00007180 0x10 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
++ .rodata.__FUNCTION__.5385
++ 0x00007190 0x8 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
++ .rodata.__FUNCTION__.5408
++ 0x00007198 0x14 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
++ .rodata.__FUNCTION__.5345
++ 0x000071ac 0x14 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
++ .rodata.__FUNCTION__.5374
++ 0x000071c0 0x10 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
++ .rodata.__FUNCTION__.5328
++ 0x000071d0 0x14 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
+ .rodata.str1.4
+- 0x000070d4 0x33 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
++ 0x000071e4 0x33 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
+ 0x38 (size before relaxing)
+- *fill* 0x00007107 0x1
+- .rodata.__FUNCTION__.5276
+- 0x00007108 0x10 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
+- .rodata.__FUNCTION__.5285
+- 0x00007118 0x14 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
+- .rodata.__FUNCTION__.5365
+- 0x0000712c 0x14 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
+- .rodata.__FUNCTION__.5294
+- 0x00007140 0x10 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
+- .rodata.__FUNCTION__.5188
+- 0x00007150 0x14 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sysclk.o)
+- .rodata.__FUNCTION__.5194
+- 0x00007164 0x14 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sysclk.o)
+- .rodata.__FUNCTION__.5200
+- 0x00007178 0x14 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sysclk.o)
+- .rodata.gClkOpsMatrixAxi
+- 0x0000718c 0x10 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sysclk.o)
+- 0x0000718c gClkOpsMatrixAxi
+- .rodata.str1.4
+- 0x0000719c 0x36 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sysclk.o)
+- 0x3c (size before relaxing)
+- *fill* 0x000071d2 0x2
+- .rodata.gClkOpsSpecial0
+- 0x000071d4 0x10 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sysclk.o)
+- 0x000071d4 gClkOpsSpecial0
+- .rodata.__FUNCTION__.5174
+- 0x000071e4 0x14 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sysclk.o)
++ *fill* 0x00007217 0x1
++ .rodata.__FUNCTION__.5319
++ 0x00007218 0x10 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
++ .rodata.__FUNCTION__.5333
++ 0x00007228 0x14 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
++ .rodata.__FUNCTION__.5394
++ 0x0000723c 0x14 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
++ .rodata.__FUNCTION__.5398
++ 0x00007250 0x14 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
++ .rodata.__FUNCTION__.5341
++ 0x00007264 0x14 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
++ .rodata.__FUNCTION__.5337
++ 0x00007278 0x10 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
+ .rodata.gCommonClkOps
+- 0x000071f8 0x10 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sysclk.o)
+- 0x000071f8 gCommonClkOps
+- .rodata.pow_AxiClk_Change
+- 0x00007208 0x20 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_clk.o)
+- .rodata.__FUNCTION__.5696
+- 0x00007228 0x10 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_clk.o)
++ 0x00007288 0x10 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sysclk.o)
++ 0x00007288 gCommonClkOps
++ .rodata.__FUNCTION__.5193
++ 0x00007298 0x14 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sysclk.o)
++ .rodata.gClkOpsMatrixAxi
++ 0x000072ac 0x10 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sysclk.o)
++ 0x000072ac gClkOpsMatrixAxi
++ .rodata.__FUNCTION__.5205
++ 0x000072bc 0x14 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sysclk.o)
+ .rodata.str1.4
+- 0x00007238 0x37 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_clk.o)
++ 0x000072d0 0x36 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sysclk.o)
+ 0x3c (size before relaxing)
+- *fill* 0x0000726f 0x1
++ *fill* 0x00007306 0x2
++ .rodata.__FUNCTION__.5199
++ 0x00007308 0x14 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sysclk.o)
++ .rodata.gClkOpsSpecial0
++ 0x0000731c 0x10 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sysclk.o)
++ 0x0000731c gClkOpsSpecial0
++ .rodata.__FUNCTION__.5179
++ 0x0000732c 0x14 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sysclk.o)
++ .rodata.pow_AxiClk_Change
++ 0x00007340 0x20 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_clk.o)
++ .rodata.__FUNCTION__.5696
++ 0x00007360 0x10 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_clk.o)
++ .rodata.str1.4
++ 0x00007370 0x37 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_clk.o)
++ 0x3c (size before relaxing)
++ *fill* 0x000073a7 0x1
+ .rodata.s_pmicI2cDev0
+- 0x00007270 0x14 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/peripheral.a(hal_pmic_i2c.o)
++ 0x000073a8 0x14 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/peripheral.a(hal_pmic_i2c.o)
+ .rodata.str1.4
+- 0x00007284 0x33 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_osa_tos.a(tos_irq.o)
++ 0x000073bc 0x33 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_osa_tos.a(tos_irq.o)
+ 0x34 (size before relaxing)
+- *fill* 0x000072b7 0x1
++ *fill* 0x000073ef 0x1
+ .rodata.str1.4
+- 0x000072b8 0x5d K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_arch_hal_misc.o)
++ 0x000073f0 0x5d K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_arch_hal_misc.o)
+ 0x60 (size before relaxing)
+- *fill* 0x00007315 0x3
++ *fill* 0x0000744d 0x3
+ .rodata.str1.4
+- 0x00007318 0x66 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_tos_tos_m0_tos_m0_misc.o)
++ 0x00007450 0x66 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_tos_tos_m0_tos_m0_misc.o)
+ 0x68 (size before relaxing)
+- *fill* 0x0000737e 0x2
++ *fill* 0x000074b6 0x2
+ .rodata.str1.4
+- 0x00007380 0x57 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_common_hal_misc.o)
++ 0x000074b8 0x57 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_common_hal_misc.o)
+ 0x58 (size before relaxing)
+- *fill* 0x000073d7 0x1
++ *fill* 0x0000750f 0x1
+ .rodata.str1.4
+- 0x000073d8 0x9c K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_kapi.o)
++ 0x00007510 0x9c K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_kapi.o)
+ .rodata.str1.4
+- 0x00007474 0xb4 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_thread.o)
++ 0x000075ac 0xb4 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_thread.o)
+ 0xf8 (size before relaxing)
+ .rodata.str1.4
+- 0x00007528 0x56 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_intr.o)
++ 0x00007660 0x56 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_intr.o)
+ 0x9c (size before relaxing)
+- *fill* 0x0000757e 0x2
++ *fill* 0x000076b6 0x2
+ .rodata.str1.4
+- 0x00007580 0x59 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_bitmap.o)
++ 0x000076b8 0x59 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_bitmap.o)
+ 0x5c (size before relaxing)
+- *fill* 0x000075d9 0x3
++ *fill* 0x00007711 0x3
+ .rodata.str1.4
+- 0x000075dc 0x58 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_sched.o)
++ 0x00007714 0x58 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_sched.o)
+ 0xe4 (size before relaxing)
+ .rodata.str1.4
+- 0x00007634 0x59 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_cnt_sem.o)
++ 0x0000776c 0x59 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_cnt_sem.o)
+ 0xa0 (size before relaxing)
+- *fill* 0x0000768d 0x3
++ *fill* 0x000077c5 0x3
+ .rodata.str1.4
+- 0x00007690 0x57 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_mutex.o)
++ 0x000077c8 0x57 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_mutex.o)
+ 0x9c (size before relaxing)
+- *fill* 0x000076e7 0x1
++ *fill* 0x0000781f 0x1
+ .rodata.str1.4
+- 0x000076e8 0x5c K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_clock.o)
++ 0x00007820 0x5c K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_clock.o)
+ 0xa0 (size before relaxing)
+ *(.gnu.linkonce.r.*)
+
+-.rodata1 0x00007748 0x0
+- 0x00007748 . = .
++.rodata1 0x00007880 0x0
++ 0x00007880 . = .
+ *(.rodata1)
+
+-.fixup 0x00007748 0x0
+- 0x00007748 . = .
++.fixup 0x00007880 0x0
++ 0x00007880 . = .
+ *(.fixup)
+
+ .gcc_except_table
+- 0x00007748 0x0
+- 0x00007748 . = .
++ 0x00007880 0x0
++ 0x00007880 . = .
+ *(.gcc_except_table)
+ *(.gcc_except_table.*)
+
+-.eh_frame 0x00007748 0x8
+- 0x00007748 . = .
+- 0x00007748 __EH_FRAME_BEGIN__ = .
++.eh_frame 0x00007880 0x8
++ 0x00007880 . = .
++ 0x00007880 __EH_FRAME_BEGIN__ = .
+ *(.eh_frame)
+- 0x00007748 __FRAME_END__ = .
+- 0x00007750 . = (. + 0x8)
+- *fill* 0x00007748 0x8 00000000
++ 0x00007880 __FRAME_END__ = .
++ 0x00007888 . = (. + 0x8)
++ *fill* 0x00007880 0x8 00000000
+
+-.got 0x00007750 0x0
+- 0x00007750 . = .
++.got 0x00007888 0x0
++ 0x00007888 . = .
+ *(.got.plt)
+ *(.got)
+- 0x00007750 _GOT1_START_ = ABSOLUTE (.)
++ 0x00007888 _GOT1_START_ = ABSOLUTE (.)
+ *(.got1)
+- 0x00007750 _GOT1_END_ = ABSOLUTE (.)
+- 0x00007750 _GOT2_START_ = ABSOLUTE (.)
++ 0x00007888 _GOT1_END_ = ABSOLUTE (.)
++ 0x00007888 _GOT2_START_ = ABSOLUTE (.)
+ *(.got2)
+- 0x00007750 _GOT2_END_ = ABSOLUTE (.)
++ 0x00007888 _GOT2_END_ = ABSOLUTE (.)
+
+-.data 0x00007750 0xc54
+- 0x00007750 __ram_data_start = ABSOLUTE (.)
++.data 0x00007888 0xc54
++ 0x00007888 __ram_data_start = ABSOLUTE (.)
+ *(.data*)
+ .data.s_IcpRpmsgResource2M0
+- 0x00007750 0xc0 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(icp_rpMsg.o)
++ 0x00007888 0xc0 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(icp_rpMsg.o)
+ .data.s_IcpRpmsgResource
+- 0x00007810 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(icp_rpMsg.o)
+- 0x00007810 s_IcpRpmsgResource
++ 0x00007948 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(icp_rpMsg.o)
++ 0x00007948 s_IcpRpmsgResource
+ .data.int_PCUTbl
+- 0x00007814 0x54 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_int.o)
+- 0x00007814 int_PCUTbl
++ 0x0000794c 0x54 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_int.o)
++ 0x0000794c int_PCUTbl
+ .data.gHalTimer_ptDev
+- 0x00007868 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_timer.o)
++ 0x000079a0 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_timer.o)
+ .data.g_check_psmchannel_id
+- 0x0000786c 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_dma.o)
+- 0x0000786c g_check_psmchannel_id
++ 0x000079a4 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_dma.o)
++ 0x000079a4 g_check_psmchannel_id
+ .data.s_dma0ChConfig
+- 0x00007870 0x98 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_dma.o)
++ 0x000079a8 0x98 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_dma.o)
+ .data.gHalPow_ptDev
+- 0x00007908 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow.o)
+- 0x00007908 gHalPow_ptDev
++ 0x00007a40 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow.o)
++ 0x00007a40 gHalPow_ptDev
+ .data.g_dcdc1pwrmode
+- 0x0000790c 0x1 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow.o)
+- *fill* 0x0000790d 0x3
++ 0x00007a44 0x1 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow.o)
++ *fill* 0x00007a45 0x3
+ .data.g_wdt_dev
+- 0x00007910 0x34 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
++ 0x00007a48 0x34 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
+ .data.gClkNumMax
+- 0x00007944 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_clkinfo.o)
+- 0x00007944 gClkNumMax
++ 0x00007a7c 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_clkinfo.o)
++ 0x00007a7c gClkNumMax
+ .data.gClockInfoTable
+- 0x00007948 0x8e8 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_clkinfo.o)
+- 0x00007948 gClockInfoTable
++ 0x00007a80 0x8e8 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_clkinfo.o)
++ 0x00007a80 gClockInfoTable
+ .data.g_IntTable
+- 0x00008230 0x144 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(int_cfg.o)
+- 0x00008230 g_IntTable
++ 0x00008368 0x144 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(int_cfg.o)
++ 0x00008368 g_IntTable
+ .data.g_zTos_Dgb_Level
+- 0x00008374 0x4 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(infra_buffer.o)
+- 0x00008374 g_zTos_Dgb_Level
++ 0x000084ac 0x4 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(infra_buffer.o)
++ 0x000084ac g_zTos_Dgb_Level
+ .data.etext_addr
+- 0x00008378 0x4 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(infra_buffer.o)
+- 0x00008378 etext_addr
++ 0x000084b0 0x4 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(infra_buffer.o)
++ 0x000084b0 etext_addr
+ .data.stext_addr
+- 0x0000837c 0x4 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(infra_buffer.o)
+- 0x0000837c stext_addr
++ 0x000084b4 0x4 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(infra_buffer.o)
++ 0x000084b4 stext_addr
+ .data._ZL14next_unique_id
+- 0x00008380 0x2 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_thread.o)
+- *fill* 0x00008382 0x2
++ 0x000084b8 0x2 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_thread.o)
++ *fill* 0x000084ba 0x2
+ .data.cyg_scheduler_sched_lock
+- 0x00008384 0x4 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_sched.o)
+- 0x00008384 cyg_scheduler_sched_lock
++ 0x000084bc 0x4 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_sched.o)
++ 0x000084bc cyg_scheduler_sched_lock
+ .data.rtc_resolution
+- 0x00008388 0x8 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_clock.o)
+- 0x00008388 rtc_resolution
++ 0x000084c0 0x8 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_clock.o)
++ 0x000084c0 rtc_resolution
+ *(.data1)
+ *(.gnu.linkonce.d.*)
+- 0x00008390 . = ALIGN (0x4)
++ 0x000084c8 . = ALIGN (0x4)
+ *(SORT(.ecos.table.*))
+- 0x00008390 . = ALIGN (0x4)
+- 0x00008390 __init_array_start__ = ABSOLUTE (.)
++ 0x000084c8 . = ALIGN (0x4)
++ 0x000084c8 __init_array_start__ = ABSOLUTE (.)
+ *(SORT(.init_array.*))
+ .init_array.11000
+- 0x00008390 0x4 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_sched.o)
++ 0x000084c8 0x4 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_sched.o)
+ .init_array.12000
+- 0x00008394 0x4 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_intr.o)
++ 0x000084cc 0x4 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_intr.o)
+ .init_array.14000
+- 0x00008398 0x4 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_clock.o)
++ 0x000084d0 0x4 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_clock.o)
+ .init_array.15000
+- 0x0000839c 0x4 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_thread.o)
++ 0x000084d4 0x4 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_thread.o)
+ *(SORT(.init_array))
+- .init_array 0x000083a0 0x4 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_kapi.o)
+- 0x000083a4 __init_array_end__ = ABSOLUTE (.)
++ .init_array 0x000084d8 0x4 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_kapi.o)
++ 0x000084dc __init_array_end__ = ABSOLUTE (.)
+ *(.dynamic)
+ *(.sdata*)
+ *(.gnu.linkonce.s.*)
+- 0x000083a4 . = ALIGN (0x4)
++ 0x000084dc . = ALIGN (0x4)
+ *(.2ram.*)
+- 0x00007750 __rom_data_start = LOADADDR (.data)
+- 0x000083a4 __ram_data_end = .
+- 0x000083a4 PROVIDE (__ram_data_end, .)
+- 0x000083a4 _edata = .
+- 0x000083a4 PROVIDE (edata, .)
+- 0x000083a4 PROVIDE (__rom_data_end, (LOADADDR (.data) + SIZEOF (.data)))
++ 0x00007888 __rom_data_start = LOADADDR (.data)
++ 0x000084dc __ram_data_end = .
++ 0x000084dc PROVIDE (__ram_data_end, .)
++ 0x000084dc _edata = .
++ 0x000084dc PROVIDE (edata, .)
++ 0x000084dc PROVIDE (__rom_data_end, (LOADADDR (.data) + SIZEOF (.data)))
+
+-.igot.plt 0x000083a4 0x0
++.igot.plt 0x000084dc 0x0
+ .igot.plt 0x00000000 0x0 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/vectors.o
+
+-.bss 0x000083a8 0x27b4
+- 0x000083a8 __bss_start = ABSOLUTE (.)
++.bss 0x000084e0 0x27b4
++ 0x000084e0 __bss_start = ABSOLUTE (.)
+ *(.scommon)
+ *(.dynsbss)
+ *(.sbss*)
+@@ -3027,227 +3033,227 @@
+ *(.dynbss)
+ *(.bss*)
+ .bss.softlock_desc
+- 0x000083a8 0x80 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_spinlock.o)
++ 0x000084e0 0x80 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_spinlock.o)
+ .bss.s_hwSpinlockMsr
+- 0x00008428 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_spinlock.o)
++ 0x00008560 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_spinlock.o)
+ .bss.dwSendPos
+- 0x0000842c 0x78 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(icp_rpMsg.o)
++ 0x00008564 0x78 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(icp_rpMsg.o)
+ .bss.rpmsg_cache_buffer
+- 0x000084a4 0x200 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(icp_rpMsg.o)
+- .bss.IcpSem 0x000086a4 0xf0 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(icp_rpMsg.o)
+- 0x000086a4 IcpSem
++ 0x000085dc 0x200 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(icp_rpMsg.o)
++ .bss.IcpSem 0x000087dc 0xf0 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(icp_rpMsg.o)
++ 0x000087dc IcpSem
+ .bss.s_RpMsgCallbackList
+- 0x00008794 0x78 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(icp_rpMsg.o)
+- 0x00008794 s_RpMsgCallbackList
++ 0x000088cc 0x78 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(icp_rpMsg.o)
++ 0x000088cc s_RpMsgCallbackList
+ .bss.RpMsg_ChMutex
+- 0x0000880c 0x24 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(icp_rpMsg.o)
+- 0x0000880c RpMsg_ChMutex
+- .bss.g_IntDev 0x00008830 0x108 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_int.o)
+- 0x00008830 g_IntDev
++ 0x00008944 0x24 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(icp_rpMsg.o)
++ 0x00008944 RpMsg_ChMutex
++ .bss.g_IntDev 0x00008968 0x108 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_int.o)
++ 0x00008968 g_IntDev
+ .bss.interrupt
+- 0x00008938 0x280 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_int.o)
++ 0x00008a70 0x280 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_int.o)
+ .bss.m0_intmask_save
+- 0x00008bb8 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_int.o)
++ 0x00008cf0 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_int.o)
+ .bss.gHalTimerDev
+- 0x00008bbc 0x6c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_timer.o)
++ 0x00008cf4 0x6c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_timer.o)
+ .bss.g_save_restore_flow
+- 0x00008c28 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_dma.o)
+- 0x00008c28 g_save_restore_flow
+- .bss.gDmaDev 0x00008c2c 0x64 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_dma.o)
+- 0x00008c2c gDmaDev
++ 0x00008d60 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_dma.o)
++ 0x00008d60 g_save_restore_flow
++ .bss.gDmaDev 0x00008d64 0x64 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_dma.o)
++ 0x00008d64 gDmaDev
+ .bss.g_PsmIdleThreadStack
+- 0x00008c90 0x800 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow.o)
++ 0x00008dc8 0x800 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow.o)
+ .bss.g_ChipSleepTime
+- 0x00009490 0x8 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow.o)
++ 0x000095c8 0x8 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow.o)
+ .bss.g_ChipSleepMode
+- 0x00009498 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow.o)
++ 0x000095d0 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow.o)
+ .bss.g_M0SleepFlag
+- 0x0000949c 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow.o)
++ 0x000095d4 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow.o)
+ .bss.g_DdrSaveRestoreIram0
+- 0x000094a0 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow.o)
+- 0x000094a0 g_DdrSaveRestoreIram0
++ 0x000095d8 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow.o)
++ 0x000095d8 g_DdrSaveRestoreIram0
+ .bss.g_ChipstandbyCnt
+- 0x000094a4 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow.o)
+- 0x000094a4 g_ChipstandbyCnt
++ 0x000095dc 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow.o)
++ 0x000095dc g_ChipstandbyCnt
+ .bss.g_FlashMode
+- 0x000094a8 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow.o)
+- 0x000094a8 g_FlashMode
+- *fill* 0x000094ac 0x4
++ 0x000095e0 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow.o)
++ 0x000095e0 g_FlashMode
++ *fill* 0x000095e4 0x4
+ .bss.g_PsmIdleThread
+- 0x000094b0 0x68 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow.o)
++ 0x000095e8 0x68 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow.o)
+ .bss.g_PdcoreEn
+- 0x00009518 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow.o)
+- 0x00009518 g_PdcoreEn
++ 0x00009650 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow.o)
++ 0x00009650 g_PdcoreEn
+ .bss.g_Iram0BaseAddr
+- 0x0000951c 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow.o)
+- 0x0000951c g_Iram0BaseAddr
++ 0x00009654 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow.o)
++ 0x00009654 g_Iram0BaseAddr
+ .bss.gHalPowDev
+- 0x00009520 0x1c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow.o)
++ 0x00009658 0x1c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow.o)
+ .bss.g_ChipsleepCnt
+- 0x0000953c 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow.o)
+- 0x0000953c g_ChipsleepCnt
++ 0x00009674 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow.o)
++ 0x00009674 g_ChipsleepCnt
+ .bss.g_PsmIdleThreadHandle
+- 0x00009540 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow.o)
++ 0x00009678 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow.o)
+ .bss.ddrRegInRam
+- 0x00009544 0xdc K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_ddr_syno_inno.o)
++ 0x0000967c 0xdc K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_ddr_syno_inno.o)
+ .bss.g_DdrSize
+- 0x00009620 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_ddr_syno_inno.o)
++ 0x00009758 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_ddr_syno_inno.o)
+ .bss.g_DdrAutoDis
+- 0x00009624 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_debug.o)
+- 0x00009624 g_DdrAutoDis
++ 0x0000975c 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_debug.o)
++ 0x0000975c g_DdrAutoDis
+ .bss.g_PdddrSdDis
+- 0x00009628 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_debug.o)
+- 0x00009628 g_PdddrSdDis
++ 0x00009760 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_debug.o)
++ 0x00009760 g_PdddrSdDis
+ .bss.g_26mClkOffDis
+- 0x0000962c 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_debug.o)
+- 0x0000962c g_26mClkOffDis
++ 0x00009764 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_debug.o)
++ 0x00009764 g_26mClkOffDis
+ .bss.lspCrmRegInRam
+- 0x00009630 0x64 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pd_context.o)
++ 0x00009768 0x64 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pd_context.o)
+ .bss.g_Clken_Pdcore
+- 0x00009694 0x54 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pd_context.o)
++ 0x000097cc 0x54 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pd_context.o)
+ .bss.stdCrmRegInRam
+- 0x000096e8 0x108 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pd_context.o)
++ 0x00009820 0x108 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pd_context.o)
+ .bss.pinMuxRegInRam
+- 0x000097f0 0x38 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pd_context.o)
++ 0x00009928 0x38 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pd_context.o)
+ .bss.sdRegInRam
+- 0x00009828 0x64 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pd_context.o)
++ 0x00009960 0x64 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pd_context.o)
+ .bss.timerRegInRam
+- 0x0000988c 0x3c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pd_context.o)
++ 0x000099c4 0x3c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pd_context.o)
+ .bss.spifcRegInRam
+- 0x000098c8 0x24 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pd_context.o)
++ 0x00009a00 0x24 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pd_context.o)
+ .bss.wdtRegInRam
+- 0x000098ec 0x38 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pd_context.o)
++ 0x00009a24 0x38 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pd_context.o)
+ .bss.icpRegInRam
+- 0x00009924 0xa0 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pd_context.o)
++ 0x00009a5c 0xa0 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pd_context.o)
+ .bss.i2CRegInRam
+- 0x000099c4 0x28 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pd_context.o)
++ 0x00009afc 0x28 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pd_context.o)
+ .bss.uartRegInRam
+- 0x000099ec 0x3c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pd_context.o)
++ 0x00009b24 0x3c K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pd_context.o)
+ .bss.spiRegInRam
+- 0x00009a28 0x28 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pd_context.o)
++ 0x00009b60 0x28 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pd_context.o)
+ .bss.nandRegInRam
+- 0x00009a50 0x68 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pd_context.o)
++ 0x00009b88 0x68 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pd_context.o)
+ .bss.vouRegInRam
+- 0x00009ab8 0x10 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pd_context.o)
++ 0x00009bf0 0x10 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pd_context.o)
+ .bss.dmaRegInRam
+- 0x00009ac8 0x2f8 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pd_context.o)
+- .bss.s_i2cBus 0x00009dc0 0x20 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_i2c.o)
+- .bss.s_mutex_tmp.5386
+- 0x00009de0 0xc K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_i2c.o)
+- .bss.s_pmutex_tmp.5387
+- 0x00009dec 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_i2c.o)
+- .bss.s_pmutex_tmp.5396
+- 0x00009df0 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_i2c.o)
+- .bss.s_mutex_tmp.5395
+- 0x00009df4 0xc K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_i2c.o)
+- .bss.g_flag1 0x00009e00 0x10 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
+- 0x00009e00 g_flag1
+- .bss.g_flag2 0x00009e10 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
+- 0x00009e10 g_flag2
+- .bss.g_flag0 0x00009e14 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
+- 0x00009e14 g_flag0
++ 0x00009c00 0x2f8 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pd_context.o)
++ .bss.s_i2cBus 0x00009ef8 0x20 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_i2c.o)
++ .bss.s_mutex_tmp.5391
++ 0x00009f18 0xc K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_i2c.o)
++ .bss.s_pmutex_tmp.5392
++ 0x00009f24 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_i2c.o)
++ .bss.s_mutex_tmp.5400
++ 0x00009f28 0xc K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_i2c.o)
++ .bss.s_pmutex_tmp.5401
++ 0x00009f34 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_i2c.o)
++ .bss.g_flag0 0x00009f38 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
++ 0x00009f38 g_flag0
++ .bss.g_flag2 0x00009f3c 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
++ 0x00009f3c g_flag2
++ .bss.g_flag1 0x00009f40 0x10 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
++ 0x00009f40 g_flag1
+ .bss.global_wdt_count
+- 0x00009e18 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
+- 0x00009e18 global_wdt_count
++ 0x00009f50 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
++ 0x00009f50 global_wdt_count
+ .bss.g_apVolExp
+- 0x00009e1c 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_clk.o)
+- 0x00009e1c g_apVolExp
++ 0x00009f54 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_clk.o)
++ 0x00009f54 g_apVolExp
+ .bss.g_psVolExp
+- 0x00009e20 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_clk.o)
+- 0x00009e20 g_psVolExp
++ 0x00009f58 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_clk.o)
++ 0x00009f58 g_psVolExp
+ .bss.g_phyVolExp
+- 0x00009e24 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_clk.o)
+- 0x00009e24 g_phyVolExp
++ 0x00009f5c 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_clk.o)
++ 0x00009f5c g_phyVolExp
+ .bss.g_apAxiExp
+- 0x00009e28 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_clk.o)
+- 0x00009e28 g_apAxiExp
++ 0x00009f60 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_clk.o)
++ 0x00009f60 g_apAxiExp
+ .bss.g_psAxiExp
+- 0x00009e2c 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_clk.o)
+- 0x00009e2c g_psAxiExp
++ 0x00009f64 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_clk.o)
++ 0x00009f64 g_psAxiExp
+ .bss.g_phyAxiExp
+- 0x00009e30 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_clk.o)
+- 0x00009e30 g_phyAxiExp
++ 0x00009f68 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_clk.o)
++ 0x00009f68 g_phyAxiExp
+ .bss.g_zDrvAssertInfo
+- 0x00009e34 0x14 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/public.a(hal_assert.o)
++ 0x00009f6c 0x14 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/public.a(hal_assert.o)
+ .bss.tos_except
+- 0x00009e48 0x18 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_osa_tos.a(tos_except_cortexm.o)
++ 0x00009f80 0x18 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_osa_tos.a(tos_except_cortexm.o)
+ .bss.s_zLogCtrl_InitFlag
+- 0x00009e60 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_sup.a(sup_agent_logctrl.o)
++ 0x00009f98 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_sup.a(sup_agent_logctrl.o)
+ .bss.ramdump_ret
+- 0x00009e64 0x8 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_sup.a(sup_ramdump_client_lib.o)
++ 0x00009f9c 0x8 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_sup.a(sup_ramdump_client_lib.o)
+ .bss.ramdump_init_flag
+- 0x00009e6c 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_sup.a(sup_ramdump_client_lib.o)
++ 0x00009fa4 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_sup.a(sup_ramdump_client_lib.o)
+ .bss.ramdump_count
+- 0x00009e70 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_sup.a(sup_ramdump_client_lib.o)
++ 0x00009fa8 0x4 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_sup.a(sup_ramdump_client_lib.o)
+ .bss.tos_isr_level
+- 0x00009e74 0x4 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_arch_hal_misc.o)
+- 0x00009e74 tos_isr_level
+- .bss._period 0x00009e78 0x4 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_tos_var_tos_misc.o)
++ 0x00009fac 0x4 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_arch_hal_misc.o)
++ 0x00009fac tos_isr_level
++ .bss._period 0x00009fb0 0x4 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_tos_var_tos_misc.o)
+ .bss._ZL30cyg_kapi_check_structure_sizes
+- 0x00009e7c 0x4 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_kapi.o)
++ 0x00009fb4 0x4 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_kapi.o)
+ .bss._ZL17idle_thread_stack
+- 0x00009e80 0x800 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_thread.o)
++ 0x00009fb8 0x800 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_thread.o)
+ .bss.idle_thread
+- 0x0000a680 0x68 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_thread.o)
+- 0x0000a680 idle_thread
++ 0x0000a7b8 0x68 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_thread.o)
++ 0x0000a7b8 idle_thread
+ .bss._ZN10Cyg_Thread11thread_listE
+- 0x0000a6e8 0x4 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_thread.o)
+- 0x0000a6e8 Cyg_Thread::thread_list
++ 0x0000a820 0x4 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_thread.o)
++ 0x0000a820 Cyg_Thread::thread_list
+ .bss.idle_thread_loops
+- 0x0000a6ec 0x4 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_thread.o)
+- 0x0000a6ec idle_thread_loops
++ 0x0000a824 0x4 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_thread.o)
++ 0x0000a824 idle_thread_loops
+ .bss._ZN13Cyg_Interrupt9dsr_tableE
+- 0x0000a6f0 0x200 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_intr.o)
+- 0x0000a6f0 Cyg_Interrupt::dsr_table
++ 0x0000a828 0x200 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_intr.o)
++ 0x0000a828 Cyg_Interrupt::dsr_table
+ .bss._ZN13Cyg_Interrupt26interrupt_disable_spinlockE
+- 0x0000a8f0 0x4 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_intr.o)
+- 0x0000a8f0 Cyg_Interrupt::interrupt_disable_spinlock
++ 0x0000aa28 0x4 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_intr.o)
++ 0x0000aa28 Cyg_Interrupt::interrupt_disable_spinlock
+ .bss._ZN13Cyg_Interrupt14dsr_table_tailE
+- 0x0000a8f4 0x4 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_intr.o)
+- 0x0000a8f4 Cyg_Interrupt::dsr_table_tail
++ 0x0000aa2c 0x4 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_intr.o)
++ 0x0000aa2c Cyg_Interrupt::dsr_table_tail
+ .bss._ZN13Cyg_Interrupt14dsr_table_headE
+- 0x0000a8f8 0x4 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_intr.o)
+- 0x0000a8f8 Cyg_Interrupt::dsr_table_head
++ 0x0000aa30 0x4 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_intr.o)
++ 0x0000aa30 Cyg_Interrupt::dsr_table_head
+ .bss._ZN18Cyg_Scheduler_Base15need_rescheduleE
+- 0x0000a8fc 0x4 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_sched.o)
+- 0x0000a8fc Cyg_Scheduler_Base::need_reschedule
++ 0x0000aa34 0x4 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_sched.o)
++ 0x0000aa34 Cyg_Scheduler_Base::need_reschedule
+ .bss._ZN13Cyg_Scheduler9schedulerE
+- 0x0000a900 0x84 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_sched.o)
+- 0x0000a900 Cyg_Scheduler::scheduler
++ 0x0000aa38 0x84 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_sched.o)
++ 0x0000aa38 Cyg_Scheduler::scheduler
+ .bss._ZN18Cyg_Scheduler_Base15thread_switchesE
+- 0x0000a984 0x4 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_sched.o)
+- 0x0000a984 Cyg_Scheduler_Base::thread_switches
++ 0x0000aabc 0x4 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_sched.o)
++ 0x0000aabc Cyg_Scheduler_Base::thread_switches
+ .bss._ZN18Cyg_Scheduler_Base14current_threadE
+- 0x0000a988 0x4 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_sched.o)
+- 0x0000a988 Cyg_Scheduler_Base::current_thread
++ 0x0000aac0 0x4 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_sched.o)
++ 0x0000aac0 Cyg_Scheduler_Base::current_thread
+ .bss._ZN9Cyg_Clock15real_time_clockE
+- 0x0000a98c 0x4 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_clock.o)
+- 0x0000a98c Cyg_Clock::real_time_clock
++ 0x0000aac4 0x4 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_clock.o)
++ 0x0000aac4 Cyg_Clock::real_time_clock
+ .bss._ZN17Cyg_RealTimeClock3rtcE
+- 0x0000a990 0x30 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_clock.o)
+- 0x0000a990 Cyg_RealTimeClock::rtc
++ 0x0000aac8 0x30 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_clock.o)
++ 0x0000aac8 Cyg_RealTimeClock::rtc
+ *(.gnu.linkonce.b.*)
+ *(COMMON)
+- COMMON 0x0000a9c0 0x198 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_arch_hal_misc.o)
+- 0x0000a9c0 hal_interrupt_handlers
+- 0x0000aa48 hal_interrupt_data
+- 0x0000aad0 hal_interrupt_objects
+- COMMON 0x0000ab58 0x4 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_tos_var_tos_misc.o)
+- 0x0000ab58 hal_cortexm_systick_clock
+- 0x0000ab5c __bss_end = ABSOLUTE (.)
++ COMMON 0x0000aaf8 0x198 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_arch_hal_misc.o)
++ 0x0000aaf8 hal_interrupt_handlers
++ 0x0000ab80 hal_interrupt_data
++ 0x0000ac08 hal_interrupt_objects
++ COMMON 0x0000ac90 0x4 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_tos_var_tos_misc.o)
++ 0x0000ac90 hal_cortexm_systick_clock
++ 0x0000ac94 __bss_end = ABSOLUTE (.)
+
+-.sram 0x0000ab60 0x0
+- 0x0000ab60 __sram_data_start = ABSOLUTE (.)
++.sram 0x0000ac98 0x0
++ 0x0000ac98 __sram_data_start = ABSOLUTE (.)
+ *(.sram*)
+- 0x0000ab60 . = ALIGN (0x4)
+- 0x0000ab60 __srom_data_start = LOADADDR (.sram)
+- 0x0000ab60 __sram_data_end = .
+- 0x0000ab60 PROVIDE (__sram_data_end, .)
+- 0x0000ab60 PROVIDE (__srom_data_end, (LOADADDR (.sram) + SIZEOF (.sram)))
+- 0x0000ab60 __heap1 = ALIGN (0x8)
+- 0x0000ab60 . = ALIGN (0x4)
+- 0x0000ab60 _end = .
+- 0x0000ab60 PROVIDE (end, .)
++ 0x0000ac98 . = ALIGN (0x4)
++ 0x0000ac98 __srom_data_start = LOADADDR (.sram)
++ 0x0000ac98 __sram_data_end = .
++ 0x0000ac98 PROVIDE (__sram_data_end, .)
++ 0x0000ac98 PROVIDE (__srom_data_end, (LOADADDR (.sram) + SIZEOF (.sram)))
++ 0x0000ac98 __heap1 = ALIGN (0x8)
++ 0x0000ac98 . = ALIGN (0x4)
++ 0x0000ac98 _end = .
++ 0x0000ac98 PROVIDE (end, .)
+ OUTPUT(K:/rpm/project/zx297520v3/bin/tos/modem_7520v3/evb_cpurpm.elf elf32-littlearm)
+
+ .ARM.attributes
+@@ -3392,47 +3398,47 @@
+ .comment 0x00000000 0x18 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_mutex.o)
+ .comment 0x00000000 0x18 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_clock.o)
+
+-.debug_ranges 0x00000000 0x4210
++.debug_ranges 0x00000000 0x4280
+ .debug_ranges 0x00000000 0x10 K:/rpm/project/zx297520v3/obj/tos/all/debug/appstart/SysEntry.o
+ .debug_ranges 0x00000010 0x18 K:/rpm/project/zx297520v3/obj/tos/all/debug/appstart/appstart.o
+ .debug_ranges 0x00000028 0x80 K:/rpm/project/zx297520v3/obj/tos/all/debug/os/tos/tos_irq.o
+ .debug_ranges 0x000000a8 0x10 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_init.o)
+- .debug_ranges 0x000000b8 0xb8 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_spinlock.o)
+- .debug_ranges 0x00000170 0x18 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sys.o)
+- .debug_ranges 0x00000188 0x1d0 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(icp_rpMsg.o)
+- .debug_ranges 0x00000358 0x10 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_gpio.o)
+- .debug_ranges 0x00000368 0x108 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_int.o)
+- .debug_ranges 0x00000470 0x68 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_timer.o)
+- .debug_ranges 0x000004d8 0xb8 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_dma.o)
+- .debug_ranges 0x00000590 0x138 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow.o)
+- .debug_ranges 0x000006c8 0x170 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_ddr_syno_inno.o)
+- .debug_ranges 0x00000838 0x30 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_debug.o)
+- .debug_ranges 0x00000868 0xf8 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pd_context.o)
+- .debug_ranges 0x00000960 0x290 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_i2c.o)
+- .debug_ranges 0x00000bf0 0x98 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
+- .debug_ranges 0x00000c88 0x88 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sysclk.o)
+- .debug_ranges 0x00000d10 0xc8 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_clk.o)
+- .debug_ranges 0x00000dd8 0x98 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/peripheral.a(hal_pm.o)
+- .debug_ranges 0x00000e70 0x50 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/peripheral.a(hal_pmic_i2c.o)
+- .debug_ranges 0x00000ec0 0x18 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/public.a(hal_assert.o)
+- .debug_ranges 0x00000ed8 0x30 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_osa_tos.a(tos_except_cortexm.o)
+- .debug_ranges 0x00000f08 0xa8 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_osa_tos.a(tos_irq.o)
+- .debug_ranges 0x00000fb0 0x18 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_sup.a(sup_agent_logctrl.o)
+- .debug_ranges 0x00000fc8 0x1a8 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_sup.a(sup_ramdump_client_lib.o)
+- .debug_ranges 0x00001170 0xd8 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_arch_hal_misc.o)
+- .debug_ranges 0x00001248 0x38 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_tos_var_tos_misc.o)
+- .debug_ranges 0x00001280 0x18 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_tos_tos_m0_tos_m0_misc.o)
+- .debug_ranges 0x00001298 0x20 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_common_hal_misc.o)
+- .debug_ranges 0x000012b8 0x10 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(infra_startup.o)
+- .debug_ranges 0x000012c8 0x28 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(infra_buffer.o)
+- .debug_ranges 0x000012f0 0xd78 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_kapi.o)
+- .debug_ranges 0x00002068 0xae0 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_thread.o)
+- .debug_ranges 0x00002b48 0x298 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_intr.o)
+- .debug_ranges 0x00002de0 0x108 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_bitmap.o)
+- .debug_ranges 0x00002ee8 0x2f0 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_sched.o)
+- .debug_ranges 0x000031d8 0x320 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_cnt_sem.o)
+- .debug_ranges 0x000034f8 0x7b0 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_mutex.o)
+- .debug_ranges 0x00003ca8 0x568 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_clock.o)
++ .debug_ranges 0x000000b8 0x120 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_spinlock.o)
++ .debug_ranges 0x000001d8 0x18 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sys.o)
++ .debug_ranges 0x000001f0 0x1d0 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(icp_rpMsg.o)
++ .debug_ranges 0x000003c0 0x18 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_gpio.o)
++ .debug_ranges 0x000003d8 0x108 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_int.o)
++ .debug_ranges 0x000004e0 0x68 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_timer.o)
++ .debug_ranges 0x00000548 0xb8 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_dma.o)
++ .debug_ranges 0x00000600 0x138 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow.o)
++ .debug_ranges 0x00000738 0x170 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_ddr_syno_inno.o)
++ .debug_ranges 0x000008a8 0x30 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_debug.o)
++ .debug_ranges 0x000008d8 0xf8 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pd_context.o)
++ .debug_ranges 0x000009d0 0x290 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_i2c.o)
++ .debug_ranges 0x00000c60 0x98 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_wdt.o)
++ .debug_ranges 0x00000cf8 0x88 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_sysclk.o)
++ .debug_ranges 0x00000d80 0xc8 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a(hal_pow_clk.o)
++ .debug_ranges 0x00000e48 0x98 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/peripheral.a(hal_pm.o)
++ .debug_ranges 0x00000ee0 0x50 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/peripheral.a(hal_pmic_i2c.o)
++ .debug_ranges 0x00000f30 0x18 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/public.a(hal_assert.o)
++ .debug_ranges 0x00000f48 0x30 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_osa_tos.a(tos_except_cortexm.o)
++ .debug_ranges 0x00000f78 0xa8 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_osa_tos.a(tos_irq.o)
++ .debug_ranges 0x00001020 0x18 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_sup.a(sup_agent_logctrl.o)
++ .debug_ranges 0x00001038 0x1a8 K:/rpm/project/zx297520v3/lib/tos/all/debug/plat/plat_sup.a(sup_ramdump_client_lib.o)
++ .debug_ranges 0x000011e0 0xd8 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_arch_hal_misc.o)
++ .debug_ranges 0x000012b8 0x38 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_tos_var_tos_misc.o)
++ .debug_ranges 0x000012f0 0x18 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_cortexm_tos_tos_m0_tos_m0_misc.o)
++ .debug_ranges 0x00001308 0x20 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(hal_common_hal_misc.o)
++ .debug_ranges 0x00001328 0x10 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(infra_startup.o)
++ .debug_ranges 0x00001338 0x28 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(infra_buffer.o)
++ .debug_ranges 0x00001360 0xd78 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_kapi.o)
++ .debug_ranges 0x000020d8 0xae0 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_thread.o)
++ .debug_ranges 0x00002bb8 0x298 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_intr.o)
++ .debug_ranges 0x00002e50 0x108 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_bitmap.o)
++ .debug_ranges 0x00002f58 0x2f0 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_sched.o)
++ .debug_ranges 0x00003248 0x320 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_cnt_sem.o)
++ .debug_ranges 0x00003568 0x7b0 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_mutex.o)
++ .debug_ranges 0x00003d18 0x568 K:/rpm/os/tos/lib/debug/armv6-m-gcc/thumb/libtarget.a(kernel_clock.o)
+
+ link component sizes
+
+@@ -3444,10 +3450,10 @@
+ 0 0 0 K:/rpm/project/zx297520v3/obj/tos/all/debug/os/tos/tos_pool.o
+ 48 0 0 K:/rpm/project/zx297520v3/obj/tos/all/debug/os/tos/tos_irq.o
+ 72 0 0 hal_init.o
+- 780 0 132 hal_spinlock.o
++ 956 0 132 hal_spinlock.o
+ 12 0 0 hal_sys.o
+ 1953 196 1028 icp_rpMsg.o
+- 76 0 0 hal_gpio.o
++ 188 0 0 hal_gpio.o
+ 1011 84 908 hal_int.o
+ 152 4 108 hal_timer.o
+ 1231 156 104 hal_dma.o
+@@ -3456,7 +3462,7 @@
+ 392 0 12 hal_pow_debug.o
+ 4484 0 1936 hal_pd_context.o
+ 823 0 64 hal_i2c.o
+- 1967 52 28 hal_wdt.o
++ 1995 52 28 hal_wdt.o
+ 1362 0 0 hal_sysclk.o
+ 0 2284 0 hal_clkinfo.o
+ 0 324 0 int_cfg.o
+@@ -3499,7 +3505,7 @@
+ 0 0 0 _clzsi2.o
+
+ ---------------------------------------------------------
+- 20224 3105 6792 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a
++ 20540 3105 6792 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/chip.a
+ 104 0 0 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/peripheral.a
+ 64 0 20 K:/rpm/project/zx297520v3/lib/tos/all/debug/drv/public.a
+ 0 0 0 K:/rpm/project/zx297520v3/lib/tos/all/debug/appstart/appstart.a
+@@ -3509,6 +3515,6 @@
+ 228 0 0 /cygdrive/k/build/compiler/gcc_arm/arm-eabi/bin/../lib/gcc/arm-eabi/4.7.1/thumb/libgcc.a
+
+ ===============================================================
+-Total text size : 30032
++Total text size : 30348
+ Total data size : 3156
+ Total bss size : 10172
+diff --git a/Uboot/tools/SignTool/SignImage b/Uboot/tools/SignTool/SignImage
+index 552a4de..0b03078 100755
+--- a/Uboot/tools/SignTool/SignImage
++++ b/Uboot/tools/SignTool/SignImage
+Binary files differ
+diff --git a/Uboot/tools/SignTool/SignImage.exe b/Uboot/tools/SignTool/SignImage.exe
+index 6905638..7a58d11 100755
+--- a/Uboot/tools/SignTool/SignImage.exe
++++ b/Uboot/tools/SignTool/SignImage.exe
+Binary files differ
+diff --git a/Uboot/tools/SignTool/private.k b/Uboot/tools/SignTool/private.k
+new file mode 100755
+index 0000000..9b72371
+--- /dev/null
++++ b/Uboot/tools/SignTool/private.k
+Binary files differ