[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&trade; 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&trade; 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&trade; 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&trade; 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&trade; 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&trade; 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