From e0f29d5815a7dd4d45733ce1d661f1df263913d4 Mon Sep 17 00:00:00 2001
From: chenlh <2008get@163.com>
Date: 星期四, 09 十月 2025 15:23:10 +0800
Subject: [PATCH] 第一轮测试OK版提交

---
 .cproject                   |   86 +++++++++++++
 src/tob.cpp                 |   14 +
 src/tg/tg_scene.cpp         |    6 
 inc/ModuleProAPI.h          |    2 
 src/main.cpp                |    3 
 src/tg/tg_adapter.cpp       |    4 
 src/messageproc.h           |    2 
 src/tg/tg_param_convert.cpp |   84 ++++++-------
 drv/FIR_acc.c               |   15 +
 src/ModuleExport.cpp        |    4 
 src/scene.cpp               |   21 ---
 lib/ModuleProcLibs.dlb      |    0 
 src/tg/tg_user_ctrl.h       |    1 
 src/tg/tg_user_ctrl.cpp     |   68 ++++++++--
 14 files changed, 206 insertions(+), 104 deletions(-)

diff --git a/.cproject b/.cproject
index 50e78eb..be525cf 100644
--- a/.cproject
+++ b/.cproject
@@ -30,8 +30,8 @@
 								<inputType id="assembler.input.1304626576" name="Assembler Source" superClass="assembler.input"/>
 							</tool>
 							<tool id="sharc.toolchain.compiler.913943905" name="CrossCore SHARC C/C++ Compiler" superClass="sharc.toolchain.compiler">
-								<option id="compiler.option.optimization.556394403" name="Enable optimization (-O)" superClass="compiler.option.optimization" useByScannerDiscovery="false" value="false" valueType="boolean"/>
-								<option id="compiler.option.debugcode.900335004" name="Generate debug information (-g)" superClass="compiler.option.debugcode" useByScannerDiscovery="false" value="true" valueType="boolean"/>
+								<option id="compiler.option.optimization.556394403" name="Enable optimization (-O)" superClass="compiler.option.optimization" useByScannerDiscovery="false" value="true" valueType="boolean"/>
+								<option id="compiler.option.debugcode.900335004" name="Generate debug information (-g)" superClass="compiler.option.debugcode" useByScannerDiscovery="false" value="false" valueType="boolean"/>
 								<option id="compiler.option.proc.775463007" name="-proc" superClass="compiler.option.proc" useByScannerDiscovery="false" value=" ADSP-21569" valueType="string"/>
 								<option id="compiler.option.sirevision.375383135" name="-si-revision" superClass="compiler.option.sirevision" useByScannerDiscovery="false" value=" 0.0" valueType="string"/>
 								<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="compiler.option.preprocessdefs.200157960" name="Preprocessor definitions (-D):" superClass="compiler.option.preprocessdefs" useByScannerDiscovery="false" valueType="definedSymbols">
@@ -45,7 +45,7 @@
 								</option>
 								<option id="compiler.option.compilerswitch.182237227" name="Compiler Switch" superClass="compiler.option.compilerswitch" useByScannerDiscovery="false" value="false" valueType="boolean"/>
 								<option id="compiler.option.cpp11.976576354" name="Compile C++ source files with C++11 feature extensions (-c++11)" superClass="compiler.option.cpp11" useByScannerDiscovery="false" value="true" valueType="boolean"/>
-								<option id="compiler.option.interprocdoptim.1504058608" name="Interprocedural optimization (-ipa)" superClass="compiler.option.interprocdoptim" useByScannerDiscovery="false" value="false" valueType="boolean"/>
+								<option id="compiler.option.interprocdoptim.1504058608" name="Interprocedural optimization (-ipa)" superClass="compiler.option.interprocdoptim" useByScannerDiscovery="false" value="true" valueType="boolean"/>
 								<inputType id="compiler.inputType.1651873364" name="C/C++ Source" superClass="compiler.inputType"/>
 							</tool>
 							<tool id="sharc.toolchain.linker.1433934460" name="CrossCore SHARC Linker" superClass="sharc.toolchain.linker">
@@ -102,12 +102,80 @@
 							<tool id="sharc.toolchain.deviceprogrammer.630556623" name="CrossCore SHARC Device Programmer" superClass="sharc.toolchain.deviceprogrammer.185366862"/>
 						</toolChain>
 					</folderInfo>
+					<fileInfo id="sharc.toolchain.configuration.debug.986561216.985913406" name="frames.cpp" rcbsApplicability="disable" resourcePath="src/frames.cpp" toolsToInvoke="sharc.toolchain.compiler.913943905.950550964">
+						<tool id="sharc.toolchain.compiler.913943905.950550964" name="CrossCore SHARC C/C++ Compiler" superClass="sharc.toolchain.compiler.913943905">
+							<option id="compiler.option.optimization.1980437294" name="Enable optimization (-O)" superClass="compiler.option.optimization" useByScannerDiscovery="false" value="true" valueType="boolean"/>
+							<option id="compiler.option.interprocdoptim.611728753" name="Interprocedural optimization (-ipa)" superClass="compiler.option.interprocdoptim" useByScannerDiscovery="false" value="true" valueType="boolean"/>
+							<option id="compiler.option.debugcode.1138950828" name="Generate debug information (-g)" superClass="compiler.option.debugcode" useByScannerDiscovery="false" value="false" valueType="boolean"/>
+							<inputType id="compiler.inputType.687677118" name="C/C++ Source" superClass="compiler.inputType"/>
+						</tool>
+					</fileInfo>
+					<fileInfo id="sharc.toolchain.configuration.debug.986561216.1691965581" name="scene.cpp" rcbsApplicability="disable" resourcePath="src/scene.cpp" toolsToInvoke="sharc.toolchain.compiler.913943905.1234586496">
+						<tool id="sharc.toolchain.compiler.913943905.1234586496" name="CrossCore SHARC C/C++ Compiler" superClass="sharc.toolchain.compiler.913943905">
+							<option id="compiler.option.optimization.410348796" name="Enable optimization (-O)" superClass="compiler.option.optimization" useByScannerDiscovery="false" value="true" valueType="boolean"/>
+							<option id="compiler.option.interprocdoptim.1690047913" name="Interprocedural optimization (-ipa)" superClass="compiler.option.interprocdoptim" useByScannerDiscovery="false" value="true" valueType="boolean"/>
+							<option id="compiler.option.debugcode.490184311" name="Generate debug information (-g)" superClass="compiler.option.debugcode" useByScannerDiscovery="false" value="false" valueType="boolean"/>
+							<inputType id="compiler.inputType.85154209" name="C/C++ Source" superClass="compiler.inputType"/>
+						</tool>
+					</fileInfo>
+					<fileInfo id="sharc.toolchain.configuration.debug.986561216.534564055" name="main.cpp" rcbsApplicability="disable" resourcePath="src/main.cpp" toolsToInvoke="sharc.toolchain.compiler.913943905.763200458">
+						<tool id="sharc.toolchain.compiler.913943905.763200458" name="CrossCore SHARC C/C++ Compiler" superClass="sharc.toolchain.compiler.913943905">
+							<option id="compiler.option.debugcode.949526148" name="Generate debug information (-g)" superClass="compiler.option.debugcode" useByScannerDiscovery="false" value="false" valueType="boolean"/>
+							<option id="compiler.option.optimization.1191857628" name="Enable optimization (-O)" superClass="compiler.option.optimization" useByScannerDiscovery="false" value="true" valueType="boolean"/>
+							<inputType id="compiler.inputType.867448223" name="C/C++ Source" superClass="compiler.inputType"/>
+						</tool>
+					</fileInfo>
+					<fileInfo id="sharc.toolchain.configuration.debug.986561216.1691181675" name="tg_user_ctrl.cpp" rcbsApplicability="disable" resourcePath="src/tg/tg_user_ctrl.cpp" toolsToInvoke="sharc.toolchain.compiler.913943905.1114977386">
+						<tool id="sharc.toolchain.compiler.913943905.1114977386" name="CrossCore SHARC C/C++ Compiler" superClass="sharc.toolchain.compiler.913943905">
+							<option id="compiler.option.debugcode.991518921" name="Generate debug information (-g)" superClass="compiler.option.debugcode" useByScannerDiscovery="false" value="false" valueType="boolean"/>
+							<option id="compiler.option.optimization.1075741573" name="Enable optimization (-O)" superClass="compiler.option.optimization" useByScannerDiscovery="false" value="true" valueType="boolean"/>
+							<inputType id="compiler.inputType.1527595622" name="C/C++ Source" superClass="compiler.inputType"/>
+						</tool>
+					</fileInfo>
+					<fileInfo id="sharc.toolchain.configuration.debug.986561216.1405857650" name="tg_scene.cpp" rcbsApplicability="disable" resourcePath="src/tg/tg_scene.cpp" toolsToInvoke="sharc.toolchain.compiler.913943905.113949997">
+						<tool id="sharc.toolchain.compiler.913943905.113949997" name="CrossCore SHARC C/C++ Compiler" superClass="sharc.toolchain.compiler.913943905">
+							<option id="compiler.option.debugcode.661630120" name="Generate debug information (-g)" superClass="compiler.option.debugcode" useByScannerDiscovery="false" value="false" valueType="boolean"/>
+							<option id="compiler.option.optimization.736282020" name="Enable optimization (-O)" superClass="compiler.option.optimization" useByScannerDiscovery="false" value="true" valueType="boolean"/>
+							<inputType id="compiler.inputType.1287708546" name="C/C++ Source" superClass="compiler.inputType"/>
+						</tool>
+					</fileInfo>
+					<fileInfo id="sharc.toolchain.configuration.debug.986561216.114413652" name="tg_param_convert.cpp" rcbsApplicability="disable" resourcePath="src/tg/tg_param_convert.cpp" toolsToInvoke="sharc.toolchain.compiler.913943905.1973590061">
+						<tool id="sharc.toolchain.compiler.913943905.1973590061" name="CrossCore SHARC C/C++ Compiler" superClass="sharc.toolchain.compiler.913943905">
+							<option id="compiler.option.debugcode.1559779574" name="Generate debug information (-g)" superClass="compiler.option.debugcode" useByScannerDiscovery="false" value="false" valueType="boolean"/>
+							<option id="compiler.option.optimization.49705725" name="Enable optimization (-O)" superClass="compiler.option.optimization" useByScannerDiscovery="false" value="true" valueType="boolean"/>
+							<inputType id="compiler.inputType.168258965" name="C/C++ Source" superClass="compiler.inputType"/>
+						</tool>
+					</fileInfo>
 					<fileInfo id="sharc.toolchain.configuration.debug.986561216.776821550" name="tob.cpp" rcbsApplicability="disable" resourcePath="src/tob.cpp" toolsToInvoke="sharc.toolchain.compiler.913943905.1208184272">
 						<tool id="sharc.toolchain.compiler.913943905.1208184272" name="CrossCore SHARC C/C++ Compiler" superClass="sharc.toolchain.compiler.913943905">
-							<option id="compiler.option.debugcode.1852700867" name="Generate debug information (-g)" superClass="compiler.option.debugcode" useByScannerDiscovery="false" value="true" valueType="boolean"/>
-							<option id="compiler.option.optimization.1367621719" name="Enable optimization (-O)" superClass="compiler.option.optimization" useByScannerDiscovery="false" value="false" valueType="boolean"/>
+							<option id="compiler.option.debugcode.1852700867" name="Generate debug information (-g)" superClass="compiler.option.debugcode" useByScannerDiscovery="false" value="false" valueType="boolean"/>
+							<option id="compiler.option.optimization.1367621719" name="Enable optimization (-O)" superClass="compiler.option.optimization" useByScannerDiscovery="false" value="true" valueType="boolean"/>
 							<option id="compiler.option.interprocdoptim.1519443625" name="Interprocedural optimization (-ipa)" superClass="compiler.option.interprocdoptim" useByScannerDiscovery="false" value="true" valueType="boolean"/>
 							<inputType id="compiler.inputType.1256387287" name="C/C++ Source" superClass="compiler.inputType"/>
+						</tool>
+					</fileInfo>
+					<fileInfo id="sharc.toolchain.configuration.debug.986561216.16834260" name="messageproc.cpp" rcbsApplicability="disable" resourcePath="src/messageproc.cpp" toolsToInvoke="sharc.toolchain.compiler.913943905.1594903641">
+						<tool id="sharc.toolchain.compiler.913943905.1594903641" name="CrossCore SHARC C/C++ Compiler" superClass="sharc.toolchain.compiler.913943905">
+							<option id="compiler.option.optimization.1587905573" name="Enable optimization (-O)" superClass="compiler.option.optimization" useByScannerDiscovery="false" value="true" valueType="boolean"/>
+							<option id="compiler.option.interprocdoptim.1994466859" name="Interprocedural optimization (-ipa)" superClass="compiler.option.interprocdoptim" useByScannerDiscovery="false" value="true" valueType="boolean"/>
+							<option id="compiler.option.debugcode.1592451212" name="Generate debug information (-g)" superClass="compiler.option.debugcode" useByScannerDiscovery="false" value="false" valueType="boolean"/>
+							<inputType id="compiler.inputType.1011213956" name="C/C++ Source" superClass="compiler.inputType"/>
+						</tool>
+					</fileInfo>
+					<fileInfo id="sharc.toolchain.configuration.debug.986561216.1616289192" name="dsp_report.cpp" rcbsApplicability="disable" resourcePath="src/dsp_report.cpp" toolsToInvoke="sharc.toolchain.compiler.913943905.1246190550">
+						<tool id="sharc.toolchain.compiler.913943905.1246190550" name="CrossCore SHARC C/C++ Compiler" superClass="sharc.toolchain.compiler.913943905">
+							<option id="compiler.option.optimization.1678551806" name="Enable optimization (-O)" superClass="compiler.option.optimization" useByScannerDiscovery="false" value="true" valueType="boolean"/>
+							<option id="compiler.option.interprocdoptim.1566787524" name="Interprocedural optimization (-ipa)" superClass="compiler.option.interprocdoptim" useByScannerDiscovery="false" value="true" valueType="boolean"/>
+							<option id="compiler.option.debugcode.823940128" name="Generate debug information (-g)" superClass="compiler.option.debugcode" useByScannerDiscovery="false" value="false" valueType="boolean"/>
+							<inputType id="compiler.inputType.2000351035" name="C/C++ Source" superClass="compiler.inputType"/>
+						</tool>
+					</fileInfo>
+					<fileInfo id="sharc.toolchain.configuration.debug.986561216.1607308522" name="ModuleExport.cpp" rcbsApplicability="disable" resourcePath="src/ModuleExport.cpp" toolsToInvoke="sharc.toolchain.compiler.913943905.837808415">
+						<tool id="sharc.toolchain.compiler.913943905.837808415" name="CrossCore SHARC C/C++ Compiler" superClass="sharc.toolchain.compiler.913943905">
+							<option id="compiler.option.optimization.1154201452" name="Enable optimization (-O)" superClass="compiler.option.optimization" useByScannerDiscovery="false" value="true" valueType="boolean"/>
+							<option id="compiler.option.interprocdoptim.639477731" name="Interprocedural optimization (-ipa)" superClass="compiler.option.interprocdoptim" useByScannerDiscovery="false" value="true" valueType="boolean"/>
+							<option id="compiler.option.debugcode.614342811" name="Generate debug information (-g)" superClass="compiler.option.debugcode" useByScannerDiscovery="false" value="false" valueType="boolean"/>
+							<inputType id="compiler.inputType.1357284043" name="C/C++ Source" superClass="compiler.inputType"/>
 						</tool>
 					</fileInfo>
 					<fileInfo id="sharc.toolchain.configuration.debug.986561216.961651879" name="f2f.c" rcbsApplicability="disable" resourcePath="src/f2f.c" toolsToInvoke="sharc.toolchain.compiler.913943905.255253029">
@@ -118,6 +186,14 @@
 							<inputType id="compiler.inputType.142353510" name="C/C++ Source" superClass="compiler.inputType"/>
 						</tool>
 					</fileInfo>
+					<fileInfo id="sharc.toolchain.configuration.debug.986561216.2082366073" name="FIR_acc.c" rcbsApplicability="disable" resourcePath="drv/FIR_acc.c" toolsToInvoke="sharc.toolchain.compiler.913943905.1500758045">
+						<tool id="sharc.toolchain.compiler.913943905.1500758045" name="CrossCore SHARC C/C++ Compiler" superClass="sharc.toolchain.compiler.913943905">
+							<option id="compiler.option.optimization.507494327" name="Enable optimization (-O)" superClass="compiler.option.optimization" useByScannerDiscovery="false" value="true" valueType="boolean"/>
+							<option id="compiler.option.interprocdoptim.615814182" name="Interprocedural optimization (-ipa)" superClass="compiler.option.interprocdoptim" useByScannerDiscovery="false" value="true" valueType="boolean"/>
+							<option id="compiler.option.debugcode.389728662" name="Generate debug information (-g)" superClass="compiler.option.debugcode" useByScannerDiscovery="false" value="false" valueType="boolean"/>
+							<inputType id="compiler.inputType.1521254096" name="C/C++ Source" superClass="compiler.inputType"/>
+						</tool>
+					</fileInfo>
 					<sourceEntries>
 						<entry excluding="system|src" flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name=""/>
 						<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="src"/>
diff --git a/drv/FIR_acc.c b/drv/FIR_acc.c
index bb94baa..eb25654 100644
--- a/drv/FIR_acc.c
+++ b/drv/FIR_acc.c
@@ -58,13 +58,20 @@
 		firHead.status = acc_completely;
 		firHead.count++;
 	}
+
+    if(firHead.status == acc_completely) {
+    	for(struct FIR_tcb* fir = firHead.first; fir != NULL ; fir = fir->next) {
+    		if(fir->callback) fir->callback(fir->content);
+    	}
+    	firHead.status = acc_idle;
+    }
 }
 
 uvoid fir_acc_init()
 {
 	firHead.count =0;
 	firHead.num =0 ;
-	firHead.status = acc_completely ;
+	firHead.status = acc_idle  ;
 	firHead.first = NULL;
 	firHead.last = NULL;
 
@@ -77,9 +84,9 @@
 {
 	s32 restarting = 0;
 
-	if(firHead.status == acc_completely && firHead.num > 0) {
+	if(firHead.status == acc_idle  && firHead.num > 0) {
 		for(struct FIR_tcb* fir = firHead.first; fir != NULL ; fir = fir->next) {
-			if(fir->callback) fir->callback(fir->content);
+
 			if(fir->cp_update) {
 				memcpy((uvoid*)fir->cf_buff, fir->cf_temp , fir->tap*sizeof(ufloat));
 				fir->cp_update = ufalse;
@@ -199,7 +206,7 @@
 		firHead.last->next = fir;
 		firHead.last = fir ;
 	}
-	//fir->tcb[0] =  ((s32)(firHead.first->tcb+12)>>2)|MP_OFFSET;
+
 	firHead.num ++;
 
 	return fir;
diff --git a/inc/ModuleProAPI.h b/inc/ModuleProAPI.h
index 8a0437c..125ede2 100644
--- a/inc/ModuleProAPI.h
+++ b/inc/ModuleProAPI.h
@@ -30,6 +30,7 @@
 __MODULE_EXPORT IModule* DEQCreate(u32 n, ubool linkEnable , u32 sampleRate, u32 sampleNum, u16 inputNum, u16 outputNum);
 __MODULE_EXPORT IModule* DeReverbCreate(u32 n, ubool linkEnable , u32 sampleRate, u32 sampleNum, u16 inputNum, u16 outputNum);
 __MODULE_EXPORT IModule* DuckerCreate(u32 n, ubool linkEnable , u32 sampleRate, u32 sampleNum, u16 inputNum, u16 outputNum);
+__MODULE_EXPORT IModule* DuckerWithMixCreate(u32 n, ubool linkEnable , u32 sampleRate, u32 sampleNum, u16 inputNum, u16 outputNum);
 __MODULE_EXPORT IModule* EchoCreate(u32 n, ubool linkEnable ,  u32 sampleRate, u32 sampleNum, u16 inputNum, u16 outputNum);
 __MODULE_EXPORT IModule* ReverbCreate(u32 n, ubool linkEnable , u32 sampleRate, u32 sampleNum, u16 inputNum, u16 outputNum);
 __MODULE_EXPORT IModule* EQsCreate(u32 n, ubool linkEnable , u32 sampleRate, u32 sampleNum, u16 inputNum, u16 outputNum);
@@ -41,6 +42,7 @@
 __MODULE_EXPORT IModule* NHSCreate(u32 n, ubool linkEnable , u32 sampleRate, u32 sampleNum, u16 inputNum, u16 outputNum);
 __MODULE_EXPORT IModule* SignalGeneraterCreate(u32 n, ubool linkEnable , u32 sampleRate, u32 sampleNum, u16 inputNum, u16 outputNum);
 __MODULE_EXPORT IModule* ContinuousSPLCreate(u32 n, ubool linkEnable , u32 sampleRate, u32 sampleNum, u16 inputNum, u16 outputNum);
+__MODULE_EXPORT IModule* ContSplWithMixCreate(u32 n, ubool linkEnable , u32 sampleRate, u32 sampleNum, u16 inputNum, u16 outputNum);
 __MODULE_EXPORT IModule* DummyCreate(u32 n, ubool linkEnable , u32 sampleRate, u32 sampleNum, u16 inputNum, u16 outputNum);
 __MODULE_EXPORT IModule* SignalSourceCreate(u32 n, ubool linkEnable , u32 sampleRate, u32 sampleNum, u16 inputNum, u16 outputNum);
 __MODULE_EXPORT IModule* InputCreate(u32 n,ubool linkEnable , u32 sampleRate, u32 sampleNum, u16 inputNum, u16 outputNum);
diff --git a/lib/ModuleProcLibs.dlb b/lib/ModuleProcLibs.dlb
index 0948ad9..29bcd0d 100644
--- a/lib/ModuleProcLibs.dlb
+++ b/lib/ModuleProcLibs.dlb
Binary files differ
diff --git a/src/ModuleExport.cpp b/src/ModuleExport.cpp
index 2114d46..9679d68 100644
--- a/src/ModuleExport.cpp
+++ b/src/ModuleExport.cpp
@@ -32,9 +32,9 @@
 		modules.push_back(ModuleEntry("Gain",ModuleType::PROC_GAIN, GainCreate, utrue));
 		modules.push_back(ModuleEntry("GainSharingmixer",ModuleType::PROC_AUTOMIXER, GSAMCreate, ufalse));
 		modules.push_back(ModuleEntry("GatingMixer",ModuleType::PROC_GATING_AUTOMIXER, GatingAMCreate, ufalse));
-		modules.push_back(ModuleEntry("SPL",ModuleType::PROC_CONTINUNOUS_SPL, ContinuousSPLCreate, utrue));
+		modules.push_back(ModuleEntry("SPL",ModuleType::PROC_CONTINUNOUS_SPL, ContSplWithMixCreate, ufalse));
 		//modules.push_back(ModuleEntry(ModuleType::GapSPL, InputCreate, 0.00));
-		modules.push_back(ModuleEntry("Ducker",ModuleType::PROC_DUCKER, DuckerCreate, utrue));
+		modules.push_back(ModuleEntry("Ducker",ModuleType::PROC_DUCKER, DuckerWithMixCreate, ufalse));
 		modules.push_back(ModuleEntry("AGC",ModuleType::PROC_AGC, AGCCreate, utrue));
 		modules.push_back(ModuleEntry("SELECTOR",ModuleType::PROC_SELECTOR, MixerCreate, ufalse));
 		modules.push_back(ModuleEntry("SignalGenerator",ModuleType::PROC_SIGNALGEN, SignalGeneraterCreate, utrue));
diff --git a/src/main.cpp b/src/main.cpp
index 876ea9d..0c943ef 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -67,6 +67,9 @@
 	}
 	if(tob == NULL) return ;
 
+	if (iid == 53)
+		int ii = 0;
+
 	if(var.TopoLoading){
 		MuteOutput();
 	}
diff --git a/src/messageproc.h b/src/messageproc.h
index 4eeb767..3d75768 100644
--- a/src/messageproc.h
+++ b/src/messageproc.h
@@ -37,7 +37,7 @@
 	Message(u32 num)
 	{
 		txQueue = new Queue<MSG>(num);
-		Levels = new s16[1000];
+		Levels = new s16[1688];
 	}
 	~Message()
 	{
diff --git a/src/scene.cpp b/src/scene.cpp
index e8618b9..3c33ade 100644
--- a/src/scene.cpp
+++ b/src/scene.cpp
@@ -81,25 +81,9 @@
 			continue;
 		}
 
-		//ducker & spl.
+		//ducker & spl with mix.
 		if(p->proc_type == PROC_DUCKER || p->proc_type == PROC_CONTINUNOUS_SPL) {
-			//insert a mixer.
-			struct Module *mixer  = (struct Module *)(bin + size);
-			u16 channelID[64];
-
-			mixer->mDsp = 0;
-			mixer->mID = p->proc_id + 320;
-			mixer->mType = ModuleType::PROC_MIXER;
-			mixer->mTag = 0;
-			mixer->mPhyModule = 0;
-			mixer->mParamaddr = (s32)get_module_param_ptr(mixer->mType, p->parameters, p->fixed);
-
-			size += sizeof(struct Module);
-
-			mixer->mRxNum = str_delim(proc_list[1].inportstr, channelID) ;
-			memcpy(bin + size , channelID, mixer->mRxNum*sizeof(u16)); size += mixer->mRxNum*sizeof(u16);
-			mixer->mTxNum = 1;
-			memcpy(bin + size , &rxBufID[1], mixer->mTxNum*sizeof(u16)); size += mixer->mTxNum*sizeof(u16);
+			ninports = str_delim(proc_list[1].inportstr, &rxBufID[1]) + 1;	// rxBufID[0] is the dataIn Frame, rxBufID[1]~rxBufID[inportstr] is the mix channel.
 		}
 		if(hw_adapter->get_system_is_dual_dsp()){
 			dsp_index = p->dsp_index ;
@@ -107,7 +91,6 @@
 		else {
 			dsp_index = 0;
 		}
-
 
 		m  = (struct Module *)(bin + size);
 		for(j = 0 ; j< ninports ;j ++) {
diff --git a/src/tg/tg_adapter.cpp b/src/tg/tg_adapter.cpp
index b3ad5b5..d227e73 100644
--- a/src/tg/tg_adapter.cpp
+++ b/src/tg/tg_adapter.cpp
@@ -38,7 +38,7 @@
     }
 }
 
-
+//物理buffer定义顺序是16通道模拟+2通道USB+32通道Dante.
 uvoid tg_hw_adapter_t::config_board(struct DSPConfig * conf)
 {
 	u32 i;
@@ -73,7 +73,7 @@
 	conf->sports[0].interrupt = utrue;
 	conf->sports[0].rx = utrue;
 
-	//pcg 
+	//pcg 产生时钟
 	conf->pcgs[0].enable = utrue;
 	conf->pcgs[0].opmode = 1;
 	conf->pcgs[0].width = 2;
diff --git a/src/tg/tg_param_convert.cpp b/src/tg/tg_param_convert.cpp
index 26f9e16..5968698 100644
--- a/src/tg/tg_param_convert.cpp
+++ b/src/tg/tg_param_convert.cpp
@@ -300,7 +300,7 @@
 
 		for (i =0 ;i < input_num_channels; i++) {
 			val[0] = i; val[1] = 0;
-			val[2] = (pducker->mask[i/15]>>(i&15))&0x1;  m->Ctrl(MIXER_SWITCH, val, 3);
+			val[2] = (pducker->mask[i/16]>>(i&15))&0x1;  m->Ctrl(MIXER_SWITCH, val, 3);
 
 		}
 	}
@@ -312,7 +312,7 @@
 
 		for(i=0 ;i < pmixer->output_num ;i ++) {
 			for(j =0 ;j < pmixer->input_num ;j++) {
-				val[0] = j;  val[1] = i; val[2] = (pmixer->input_mask[i][j/15]>>(j&15))&0x1;  m->Ctrl(MIXER_SWITCH, val, 3);
+				val[0] = j;  val[1] = i; val[2] = (pmixer->input_mask[i][j/16]>>(j&15))&0x1;  m->Ctrl(MIXER_SWITCH, val, 3);
 //				printf("oich %d %d= %x %x %x\n", i,j, val[0],val[1],val[2]);
 				val[0] = j;  val[1] = i; val[2] = RESSIGNBIT(pmixer->input_gain[i][j]);  m->Ctrl(MIXER_GAIN, val, 3);
 			}
@@ -382,7 +382,6 @@
 		FB_FLT_TYPE,
 
 		FB_STEP,
-
 		FB_CLEAR,
 		FB_PANIC,
 		FB_FLT_DEPTH,
@@ -621,40 +620,41 @@
 
 u32 tg_param_convert::DuckerParamCtrl(IModule* m, void* handle, int &plen)
 {
-	enum DuckerID {
-		DUCKER_BYPASS = 0x1,
-		DUCKER_THRESHOLD,
-		DUCKER_DEPTH,
-		DUCKER_ATTACK,
-		DUCKER_HOLD,
-		DUCKER_RELEASE,
-		DUCKER_SIDE_GAIN,
-		DUCKER_SIDE_MUTE,
-	};
-
-	enum MixerID {
-		MIXER_SWITCH = 0x1,
-		MIXER_GAIN,
-		MIXER_DELAY,
-		MIXER_INPUT_MUTE,
-		MIXER_OUTPUT_MUTE,
+	enum DuckerWithMixID {
+		DUCKER_BYPASS = 0x1, //val[0]:0-取消bypass,1-使能bypass
+		DUCKER_THRESHOLD,//val[0]:阈值,乘以100,范围:-6000~0
+		DUCKER_DEPTH,//val[0]:深度,乘以100,范围:-7200~0
+		DUCKER_ATTACK,//val[0]:建立时间,范围:1~2000ms
+		DUCKER_HOLD,//val[0]:保持时间,范围:1~10000ms
+		DUCKER_RELEASE,//val[0]:释放时间,范围:1~60000ms
+		DUCKER_SIDE_GAIN,//val[0]:侧链增益,乘以100,范围:-7200~1200
+		DUCKER_SIDE_MUTE,//val[0]:侧链静音,0-取消静音,1-静音
+		DUCKER_SIDE_MIX,//val[0]:侧链混音,0-取消混音,1-混音
 	};
 
 	if(handle == NULL) return 1;
 
-	int i;
+	u16 input_num_channels, output_num_channels;
+	VarState var = VarState::GetInstance();
+	hw_adapter_t* adpater = var.get_hw_adapter();
+	adpater->get_channel_num(&input_num_channels, &output_num_channels);
 	short val[4];
-	ptag_ducker pducker = (ptag_ducker)handle;
+	ptag_ducker pduck = (ptag_ducker)handle;
 	plen = sizeof(tag_ducker);
 
-	val[0] = RESSIGNBIT(pducker->bypass);  m->Ctrl(DUCKER_BYPASS, val, 1);
-	val[0] = RESSIGNBIT(pducker->threshold);  m->Ctrl(DUCKER_THRESHOLD, val, 1);
-	val[0] = RESSIGNBIT(pducker->depth);  m->Ctrl(DUCKER_DEPTH, val, 1);
-	val[0] = RESSIGNBIT(pducker->attacktime);  m->Ctrl(DUCKER_ATTACK, val, 1);
-	val[0] = RESSIGNBIT(pducker->holdtime);  m->Ctrl(DUCKER_HOLD, val, 1);
-	val[0] = RESSIGNBIT(pducker->releasetime);  m->Ctrl(DUCKER_RELEASE, val, 1);
-	val[0] = RESSIGNBIT(pducker->side_gain);  m->Ctrl(DUCKER_SIDE_GAIN, val, 1);
-	val[0] = RESSIGNBIT(pducker->mute);  m->Ctrl(DUCKER_SIDE_MUTE, val, 1);
+	val[0] = RESSIGNBIT(pduck->bypass);  m->Ctrl(DUCKER_BYPASS, val, 1);
+	val[0] = RESSIGNBIT(pduck->threshold);  m->Ctrl(DUCKER_THRESHOLD, val, 1);
+	val[0] = RESSIGNBIT(pduck->depth);  m->Ctrl(DUCKER_DEPTH, val, 1);
+	val[0] = RESSIGNBIT(pduck->attacktime);  m->Ctrl(DUCKER_ATTACK, val, 1);
+	val[0] = RESSIGNBIT(pduck->holdtime);  m->Ctrl(DUCKER_HOLD, val, 1);
+	val[0] = RESSIGNBIT(pduck->releasetime);  m->Ctrl(DUCKER_RELEASE, val, 1);
+	val[0] = RESSIGNBIT(pduck->side_gain);  m->Ctrl(DUCKER_SIDE_GAIN, val, 1);
+	val[0] = RESSIGNBIT(pduck->mute);  m->Ctrl(DUCKER_SIDE_MUTE, val, 1);
+
+	for (s16 i =0 ;i < input_num_channels; i++) {
+		val[0] = i;
+		val[1] = (pduck->mask[i/16]>>(i&15))&0x1;  m->Ctrl(DUCKER_SIDE_MIX, val, 2);
+	}
 
 	return 0;
 }
@@ -688,24 +688,16 @@
 
 u32 tg_param_convert::SplParamCtrl(IModule* m, void* handle, int &plen)
 {
-	enum ContinousSPLID {
-		SPL_BYPASS = 0x1,
+	enum ContSplWithMixID {
+		SPLMIX_BYPASS = 0x1, //val[0]:0-取消bypass,1-bypass
 		SPL_MAX_GAIN,
 		SPL_MIN_GAIN,
 		SPL_SENSE_RATIO,
-		SPL_UPSPEED,
-		SPL_DOWNSPEED,
+		SPL_SPEED,
 		SPL_TRIM,
 		SPL_THR,
 		SPL_DISTANCE,
-	};
-
-	enum MixerID {
-		MIXER_SWITCH = 0x1,
-		MIXER_GAIN,
-		MIXER_DELAY,
-		MIXER_INPUT_MUTE,
-		MIXER_OUTPUT_MUTE,
+		SPL_MIX,
 	};
 
 	if(handle == NULL) return 1;
@@ -713,7 +705,6 @@
 	u16 input_num_channels, output_num_channels ;
 	VarState var = VarState::GetInstance();
 	hw_adapter_t* adpater = var.get_hw_adapter();
-
 	adpater->get_channel_num(&input_num_channels, &output_num_channels);
 
 	int i ,j;
@@ -725,15 +716,14 @@
 	val[0] = RESSIGNBIT(pspl->maxgain);  m->Ctrl(SPL_MAX_GAIN, val, 1);
 	val[0] = RESSIGNBIT(pspl->mingain);  m->Ctrl(SPL_MIN_GAIN, val, 1);
 	val[0] = RESSIGNBIT(pspl->sense_ratio);  m->Ctrl(SPL_SENSE_RATIO, val, 1);
-	val[0] = RESSIGNBIT(pspl->speed);  m->Ctrl(SPL_UPSPEED, val, 1);
-	val[0] = RESSIGNBIT(pspl->speed);  m->Ctrl(SPL_DOWNSPEED, val, 1);
+	val[0] = RESSIGNBIT(pspl->speed);  m->Ctrl(SPL_SPEED, val, 1);
 	val[0] = RESSIGNBIT(pspl->trim);  m->Ctrl(SPL_TRIM, val, 1);
 	val[0] = RESSIGNBIT(pspl->noise_thr);  m->Ctrl(SPL_THR, val, 1);
 	val[0] = RESSIGNBIT(pspl->distance);  m->Ctrl(SPL_DISTANCE, val, 1);
 
 	for (i =0 ;i < input_num_channels; i++) {
-		val[0] = i; val[1] = 0;
-		val[2] = (pspl->mask[i/15]>>(i&15))&0x1 ;  m->Ctrl(MIXER_SWITCH, val, 3);
+		val[0] = i;
+		val[1] = (pspl->mask[i/16]>>(i&15))&0x1 ;  m->Ctrl(SPL_MIX, val, 2);
 	}
 
 	return 0;
diff --git a/src/tg/tg_scene.cpp b/src/tg/tg_scene.cpp
index a6021bb..56f000a 100644
--- a/src/tg/tg_scene.cpp
+++ b/src/tg/tg_scene.cpp
@@ -164,9 +164,9 @@
 	sprintf(outport_str, "1-%d", output_num);
 	__MADD(295,PROC_OUTPUT,outport_str,outport_str,1, 1, &parameters.output,0, ModuleInterfaceType::SOFT_MODULE);
 	//sysctrl
-	__MADD(296,PROC_SYSCTL,outport_str,outport_str,1, 1, &parameters.sysctl,0, ModuleInterfaceType::PHY_OUTPUT);
+	__MADD(296,PROC_SYSCTL,outport_str,outport_str,1, 1, &parameters.sysctl,0, ModuleInterfaceType::SOFT_MODULE);
 	//meter
-	__MADD(297,PROC_METER,outport_str,"",1, 1, NULL, 0, ModuleInterfaceType::SOFT_MODULE);
+	__MADD(297,PROC_METER,outport_str,outport_str,1, 1, NULL, 0, ModuleInterfaceType::PHY_OUTPUT);
 
 
 };
@@ -190,7 +190,7 @@
 				pInput->input[j].gain =0;
 				pInput->input[j].mute = 0;
 				pInput->input[j].type=0;
-				pInput->input[j].phase =0 ;
+				pInput->input[j].phase =0;
 				pInput->input[j].mingain = -8000;
 				pInput->input[j].maxgain = 1200;
 			}
diff --git a/src/tg/tg_user_ctrl.cpp b/src/tg/tg_user_ctrl.cpp
index 96497a4..f63dbb7 100644
--- a/src/tg/tg_user_ctrl.cpp
+++ b/src/tg/tg_user_ctrl.cpp
@@ -178,23 +178,6 @@
 
 u32 tg_param_ctrl::Feedback_Ctrl(IModule* m, u32 pID, s16* val_c, u32 num)
 {
-//	enum NHSID{
-//		FB_BYPASS = 0x1,
-//		FB_PANIC,
-//		FB_THRS,
-//		FB_FLT_DEPTH,
-//		FB_STEP,
-//		FB_FLT_Q,
-//		FB_RECYCLETIME,
-//
-//		FB_FLT_FREQ,
-//		FB_FLT_GAIN,
-//		FB_FLT_TYPE,
-//
-//		FB_CLEAR,
-//		FB_CLEAR_DYNAMIC,
-//	};
-
 	enum NHSID{
 		FB_BYPASS= 0x1,
 		FB_FLT_FREQ,
@@ -375,7 +358,58 @@
 	return 0;
 }
 
+u32 tg_param_ctrl::Spl_Ctrl(IModule* m, u32 pID, s16* val_c, u32 num)
+{
+	enum ContinousSPLID {
+		SPL_BYPASS = 0x1,
+		SPL_MAX_GAIN,
+		SPL_MIN_GAIN,
+		SPL_SENSE_RATIO = 4,
+		SPL_UPSPEED = 5,
+		SPL_DOWNSPEED,
+		SPL_TRIM,
+		SPL_THR,
+		SPL_DISTANCE,
+	};
+	enum ContSplWithMixID {
+		SPLMIX_BYPASS = 0x1, //val[0]:0-取消bypass,1-bypass
+		SPLMIX_MAX_GAIN,
+		SPLMIX_MIN_GAIN,
+		SPLMIX_SENSE_RATIO,
+		SPLMIX_SPEED = 5,
+		SPLMIX_TRIM,
+		SPLMIX_THR,
+		SPLMIX_DISTANCE,
+		SPLMIX_MIX,
+	};
 
+	s16 val[4];
+	val[0] = RESSIGNBIT(val_c[0]), val[0] = RESSIGNBIT(val_c[1]);
+
+	if (pID < 5) {
+		General_Ctrl(m, pID, val_c, num);
+	}
+	else {
+		switch (pID) {
+			case ContSplWithMixID::SPLMIX_SPEED:
+				m->Ctrl(ContinousSPLID::SPL_UPSPEED, val, 1);
+				m->Ctrl(ContinousSPLID::SPL_DOWNSPEED, val, 1);
+				break;
+			case ContSplWithMixID::SPLMIX_TRIM:
+				m->Ctrl(ContinousSPLID::SPL_TRIM, val, 1);
+				break;
+			case ContSplWithMixID::SPLMIX_THR:
+				m->Ctrl(ContinousSPLID::SPL_THR, val, 1);
+				break;
+			case ContSplWithMixID::SPLMIX_DISTANCE:
+				m->Ctrl(ContinousSPLID::SPL_DISTANCE, val, 1);
+				break;
+			default:
+				break;
+		}
+	}
+	return 0;
+}
 
 
 
diff --git a/src/tg/tg_user_ctrl.h b/src/tg/tg_user_ctrl.h
index 76ada01..1f225c2 100644
--- a/src/tg/tg_user_ctrl.h
+++ b/src/tg/tg_user_ctrl.h
@@ -26,6 +26,7 @@
 	static u32 Echo_Ctrl(IModule* m, u32 pID, s16* val_c, u32 num);
 	static u32 General_Ctrl(IModule* m, u32 pID, s16* val_c, u32 num);
 	static u32 Fir_Ctrl(IModule* m, u32 pID, s16* val_c, u32 num);
+	static u32 Spl_Ctrl(IModule* m, u32 pID, s16* val_c, u32 num);
 };
 
 
diff --git a/src/tob.cpp b/src/tob.cpp
index 8d34e61..ceee284 100644
--- a/src/tob.cpp
+++ b/src/tob.cpp
@@ -200,7 +200,7 @@
 	return 	ErrStatus::SUCCESS;
 }
 #define DEBUG 0
-#if 1//DEBUG
+#if DEBUG
 	const s8* type_string[ModuleType::PROC_COUNT] = {
 			"none"
 			,"input"
@@ -271,7 +271,8 @@
 		if (pmod->mDsp != dsp_index)  continue;
 
 #if DEBUG
-		//if (PROC_FIR == pmod->mType)
+//		if (1+320 == pmod->mID)
+//		if (PROC_FEEDBACK == pmod->mType)
 			printf("Module ID %d type %d %s rxnum %d txnum %d tag %d. \n",pmod->mID ,pmod->mType, type_string[pmod->mType], pmod->mRxNum,pmod->mTxNum,pmod->mTag);
 #endif
 
@@ -319,7 +320,7 @@
 					if(nPhyOutput[mPhyID[i].mIntType] < mPhyID[i].mPhyID)
 						nPhyOutput[mPhyID[i].mIntType] = mPhyID[i].mPhyID;
 
-					//pcm = frames->AllocFrame(); // It is not necessary to be compatible with the AXE1208 series here, because the TOP architecture is different.
+					pcm = frames->AllocFrame(); // It is not necessary to be compatible with the AXE1208 series here, because the TOP architecture is different.
 					m->SetOutputChannelDataPtr(i, pcm);
 					SetTxChannelPtr(static_cast<IntDataType>(mPhyID[i].mIntType), mPhyID[i].mPhyID-1, pcm->Data());
 //					printf("mID %d,bid %d\n", pmod->mID, mPhyID[i].mPhyID-1);
@@ -399,7 +400,7 @@
 {
 	if(processed) {
 		for (auto iter = mList.begin(); iter < mList.end(); iter++) {
-//			if(((*iter)->GetModuleType() >= 6) && ((*iter)->GetModuleType() <= 6)) {
+//			if(((*iter)->GetModuleType() >= PROC_FEEDBACK) && ((*iter)->GetModuleType() <= PROC_FEEDBACK)) {
 //				printf("%d ", (*iter)->GetModuleID());
 				(*iter)->Proc();
 //			}
@@ -453,6 +454,11 @@
 	}
 
 	IModule* m = mList[mModuleIndex[mID]-1];
+//	if (m->GetModuleType() == PROC_CONTINUNOUS_SPL && pID == 9) {
+//		mID += 320;
+//		m = mList[mModuleIndex[mID]-1];
+//	}
+
 	if( m != NULL) {
 //		m->Ctrl(pID, val, num);
 		paramset->GetCtrlEntry(m->GetModuleType())(m, pID, (s16*)val, num);

--
Gitblit v1.9.3