From 0d5b7df96a2ee186b7b085dca9cf9a33f791c430 Mon Sep 17 00:00:00 2001
From: graydon <weidong.gao@cretone.cn>
Date: 星期六, 30 八月 2025 20:27:15 +0800
Subject: [PATCH] 增加双USB

---
 src/tg/tg_scene.cpp   |   94 ++++++++++++++++++++++---------
 src/tg/tg_config.h    |    8 +-
 src/hw_adapter.h      |    2 
 src/tg/tg_adapter.cpp |   33 +++++-----
 src/scene.cpp         |    4 
 5 files changed, 91 insertions(+), 50 deletions(-)

diff --git a/src/hw_adapter.h b/src/hw_adapter.h
index a3c36f8..3534984 100644
--- a/src/hw_adapter.h
+++ b/src/hw_adapter.h
@@ -66,7 +66,7 @@
 	//dai,sport配置顺序就已经决定了物理buffer.
 	virtual uvoid config_board(struct DSPConfig * conf) =0;
 
-	//根据逻辑通道号获取物理通道号
+	//根据逻辑通道号获取物理通道号,从0开始.
 	//逻辑通道号就是输入输出模块通道(端口)索引; 物理通道号是sport配置的buffer.
 	virtual s32 get_physical_channel(s32 input , s32 logic_channel) = 0;
 };
diff --git a/src/scene.cpp b/src/scene.cpp
index 13a930b..afcac4d 100644
--- a/src/scene.cpp
+++ b/src/scene.cpp
@@ -137,7 +137,7 @@
 			PhyPort* phy_id = (PhyPort*)(bin + size);
 			for(j = 0 ; j< ninports ;j ++, phy_id++) {
 				phy_id->mIntType = 0;
-				phy_id->mPhyID = hw_adapter->get_physical_channel(1, j);
+				phy_id->mPhyID = hw_adapter->get_physical_channel(1, rxBufID[j]-1);
 			}
 			size += ninports*sizeof(PhyPort);
 		}
@@ -145,7 +145,7 @@
 			PhyPort* phy_id = (PhyPort*)(bin + size);
 			for(j = 0 ; j< noutports ;j ++, phy_id++) {
 				phy_id->mIntType = 0;
-				phy_id->mPhyID = hw_adapter->get_physical_channel(0, j);
+				phy_id->mPhyID = hw_adapter->get_physical_channel(0, txBufID[j]-1);
 			}
 			size += noutports*sizeof(PhyPort);
 		}
diff --git a/src/tg/tg_adapter.cpp b/src/tg/tg_adapter.cpp
index 6d90cec..12c68f0 100644
--- a/src/tg/tg_adapter.cpp
+++ b/src/tg/tg_adapter.cpp
@@ -2,39 +2,40 @@
 #include "tg_config.h"
 #include "tg_adapter.h"
 
+//参数logic_channel逻辑通道从0开始.
 s32 tg_hw_adapter_t::get_physical_channel(s32 input , s32 logic_channel)
 {
 	//s32 phy_channel[] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,18,19};
 	if(input) {
-//		s32 input_num = ana_input_num + dante_input_num ;
-		s32 local_ch = ana_input_num + usb_input_num;	// C H G 18
+		s32 input_num = ana_input_num + dante_input_num ;
+//		s32 local_ch = ana_input_num + usb_input_num;	// C H G 18
 		if(logic_channel < ana_input_num) {
 			//analog
-			return logic_channel + 1;
+			return logic_channel+1;
 		}
-		else if(logic_channel < local_ch) {
-			//usb
-			return 17 + (logic_channel + 2 - local_ch);
+		else if(logic_channel < input_num) {
+			//dante
+			return 19 + (logic_channel - ana_input_num);
 		}
 		else {
-			//dante
-			return 19 + (logic_channel - local_ch);
+			//usb
+			return 17 + (logic_channel - input_num);
 		}
 	}
 	else {	//output
-//		s32 output_num = ana_output_num + dante_output_num ;
-		s32 local_ch = ana_output_num + usb_output_num;	// C H G 18
+		s32 output_num = ana_output_num + dante_output_num ;
+//		s32 local_ch = ana_output_num + usb_output_num;	// C H G 18
 		//analog
 		if(logic_channel < ana_output_num) {
-			return logic_channel +1;
+			return logic_channel;
 		}
-		else if(logic_channel < local_ch) {
-			//usb
-			return 17 + (logic_channel + 2 - local_ch);
+		else if(logic_channel < output_num) {
+			//dante
+			return 19 + (logic_channel - ana_output_num);
 		}
 		else {
-			//dante
-			return 19 + (logic_channel - local_ch);
+			//usb
+			return 17 + (logic_channel - output_num);
 		}
 	}
 }
diff --git a/src/tg/tg_config.h b/src/tg/tg_config.h
index c0d29a7..8529674 100644
--- a/src/tg/tg_config.h
+++ b/src/tg/tg_config.h
@@ -10,13 +10,13 @@
 #include "config.h"
 
 //项目定制化宏定义.
-#define MAX_INPUT_NUM 32
-#define MAX_OUTPUT_NUM 32
+#define MAX_INPUT_NUM 34
+#define MAX_OUTPUT_NUM 34
 
 #define FEEDBACK_FILTERS_NUM 16 		//NHS滤波器组数目
 
-#define MAX_MIXER_INPUT	 36
-#define MAX_MIXER_OUTPUT 33
+#define MAX_MIXER_INPUT	 37
+#define MAX_MIXER_OUTPUT 34
 
 #define MAX_EQ_SECTION 12
 #define AUTOMIXER_CHANNEL_NUM 32
diff --git a/src/tg/tg_scene.cpp b/src/tg/tg_scene.cpp
index 613fd87..4183335 100644
--- a/src/tg/tg_scene.cpp
+++ b/src/tg/tg_scene.cpp
@@ -13,22 +13,32 @@
 
 tgScene::tgScene(hw_adapter_t* adapter):Scene(adapter)
 {
-	s8 inport_str[10],outport_str[10];
+	s8 inport_str[16],outport_str[16];
 	s8 ana_input_num, ana_output_num,dante_input_num,dante_output_num ;
+	s8 usb_input_num = 2, usb_output_num = 2;
 	s16 input_num, output_num ;
-	s32 n;
+	s32 n, new_idx = 300; //usb 新增模块ID从300开始(与arm/pc协商一致),使用new_idx递增.
 
 	s16 dual_dsp = adapter->get_system_is_dual_dsp();
 	s16 dsp_index = adapter->get_dsp_index();
 
 	adapter->get_channel_num(&ana_input_num, &ana_output_num, &dante_input_num, &dante_output_num);
-	input_num = ana_input_num + dante_input_num;
-	output_num = ana_output_num + dante_output_num;
+
+	//新增加的2x2 usb是带处理的和输入,输出平级
+	input_num = ana_input_num + dante_input_num + usb_input_num; //2 USB
+	output_num = ana_output_num + dante_output_num + usb_output_num;
 
 	tgScene_param_default(&parameters);
 
+
+	//只有physic_type 为PHY_INPUT和PHY_OUTPUT的 才会调用XX_adapter.cpp下的get_physical_channel函数.
+	//所以这2两个模块类型 port_str 对应的是逻辑通道应该覆盖到所有物理通道包括模拟、dante、usb.
+	//逻辑通道也就是PC软件看到的通道顺序(ana+dante+usbL+usbR+am+aec+ans).
+	//物理通道是DMA配置的顺序,get_physical_channel就是做逻辑通道到物理通道的映射.
 	sprintf(inport_str, "1-%d", input_num);
 	__MADD(299,PROC_INPUT,inport_str,inport_str,0, 1 ,&parameters.input,  0, ModuleInterfaceType::PHY_INPUT);
+
+	sprintf(inport_str, "1-%d", input_num);
 	__MADD(298,PROC_METER,inport_str,"",0,1 ,NULL,0, ModuleInterfaceType::SOFT_MODULE); //tag:0-peak,1-rms
 
 	//The number of DSPs is 1, but the number of input and output channels is greater than 16.
@@ -44,31 +54,46 @@
 	//expander
 	for(s32 i =0 ;i < input_num ; i++) {
 		sprintf(inport_str, "%d|", i+1);
-		__MADD(1+i,PROC_EXPANDER, inport_str, inport_str, 0, 0, &parameters.in1[i], 0, ModuleInterfaceType::SOFT_MODULE);
+		if(i < input_num - usb_input_num)
+			__MADD(1+i,PROC_EXPANDER, inport_str, inport_str, 0, 0, &parameters.in1[i], 0, ModuleInterfaceType::SOFT_MODULE);
+		else
+			__MADD(new_idx++,PROC_EXPANDER, inport_str, inport_str, 0, 0, &parameters.in1[i], 0, ModuleInterfaceType::SOFT_MODULE);
 	}
 
 	//compresser
 	for(s32 i =0 ;i < input_num ; i++) {
 		sprintf(inport_str, "%d|", i+1);
-		__MADD(33+i,PROC_COMPRESS, inport_str, inport_str, 0, 0, &parameters.in2[i], 0, ModuleInterfaceType::SOFT_MODULE);
+		if(i < input_num - usb_input_num)
+			__MADD(33+i,PROC_COMPRESS, inport_str, inport_str, 0, 0, &parameters.in2[i], 0, ModuleInterfaceType::SOFT_MODULE);
+		else
+			__MADD(new_idx++,PROC_COMPRESS, inport_str, inport_str, 0, 0, &parameters.in2[i], 0, ModuleInterfaceType::SOFT_MODULE);
 	}
 
 	//agc
 	for(s32 i =0 ;i < input_num ; i++) {
 		sprintf(inport_str, "%d|", i+1);
-		__MADD(65+i,PROC_AGC, inport_str, inport_str, 0, 0, &parameters.in3[i], 0, ModuleInterfaceType::SOFT_MODULE);
+		if(i < input_num - usb_input_num)
+			__MADD(65+i,PROC_AGC, inport_str, inport_str, 0, 0, &parameters.in3[i], 0, ModuleInterfaceType::SOFT_MODULE);
+		else
+			__MADD(new_idx++,PROC_AGC, inport_str, inport_str, 0, 0, &parameters.in3[i], 0, ModuleInterfaceType::SOFT_MODULE);
 	}
 
 	//eq
 	for(s32 i =0 ;i < input_num ; i++) {
 		sprintf(inport_str, "%d|", i+1);
-		__MADD(97+i,PROC_EQ, inport_str, inport_str, 0, 0, &parameters.in4[i],  8, ModuleInterfaceType::SOFT_MODULE);
+		if(i < input_num - usb_input_num)
+			__MADD(97+i,PROC_EQ, inport_str, inport_str, 0, 0, &parameters.in4[i],  8, ModuleInterfaceType::SOFT_MODULE);
+		else
+			__MADD(new_idx++,PROC_EQ, inport_str, inport_str, 0, 0, &parameters.in4[i],  8, ModuleInterfaceType::SOFT_MODULE);
 	}
 
 	//nhs
 	for(s32 i =0 ;i < input_num ; i++) {
 		sprintf(inport_str, "%d|", i+1);
-		__MADD(129+i,PROC_FEEDBACK, inport_str, inport_str, 0, 0, &parameters.in5[i], 8, ModuleInterfaceType::SOFT_MODULE);
+		if(i < input_num - usb_input_num)
+			__MADD(129+i,PROC_FEEDBACK, inport_str, inport_str, 0, 0, &parameters.in5[i], 8, ModuleInterfaceType::SOFT_MODULE);
+		else
+			__MADD(new_idx++,PROC_FEEDBACK, inport_str, inport_str, 0, 0, &parameters.in5[i], 8, ModuleInterfaceType::SOFT_MODULE);
 	}
 
 	//am
@@ -77,53 +102,68 @@
 	__MADD(161,PROC_AUTOMIXER,inport_str, outport_str, 0, 0, &parameters.automixer, 0, ModuleInterfaceType::SOFT_MODULE);  //可替换
 
 	//aec selector
-	sprintf(inport_str, "1-%d", input_num+ 2);//+1 add usb
-	sprintf(outport_str, "%d|%d|", input_num+ 3, input_num+ 4);
+	sprintf(inport_str, "1-%d", input_num+ 1);
+	sprintf(outport_str, "%d|%d|", input_num+ 2, input_num+ 3);
 	__MADD(162,PROC_SELECTOR, inport_str,outport_str, 0, 1, &parameters.aec_selector, 0, ModuleInterfaceType::SOFT_MODULE);  //add usb
 
 	//aec
-	sprintf(inport_str, "%d|%d", input_num+ 3, input_num+ 4);
-	sprintf(outport_str, "%d|", input_num+ 3);
+	sprintf(inport_str, "%d|%d", input_num+ 2, input_num+ 3);
+	sprintf(outport_str, "%d|", input_num+ 2);
 	__MADD(163,PROC_AEC,inport_str, outport_str ,0, 1, &parameters.aec, 256, ModuleInterfaceType::SOFT_MODULE);
 
 	//ans selector
-	sprintf(inport_str, "1-%d", input_num+ 3);
-	sprintf(outport_str, "%d|", input_num+ 4);
+	sprintf(inport_str, "1-%d", input_num+ 2);
+	sprintf(outport_str, "%d|", input_num+ 3);
 	__MADD(164,PROC_SELECTOR,inport_str,outport_str, 1, 1 ,&parameters.ans_selector, 0, ModuleInterfaceType::SOFT_MODULE);
 
 	//ans
-	sprintf(inport_str, "%d|", input_num+ 4);
-	sprintf(outport_str, "%d|", input_num+ 4);
+	sprintf(inport_str, "%d|", input_num+ 3);
+	sprintf(outport_str, "%d|", input_num+ 3);
 	__MADD(165,PROC_ANS,inport_str,outport_str, 1, 0 ,&parameters.afc_ns,0, ModuleInterfaceType::SOFT_MODULE);
 
 	//mixer
-	sprintf(inport_str, "1-%d", input_num+ 4);
-	sprintf(outport_str, "%d-%d",input_num+5, input_num+output_num+6);
+	sprintf(inport_str, "1-%d", input_num+ 3);
+	sprintf(outport_str, "%d-%d",input_num+4, input_num+output_num+4);
 	__MADD(166,PROC_MIXER,inport_str,outport_str,1, 1 ,&parameters.mixer, 0, ModuleInterfaceType::SOFT_MODULE);	// .begin()+48
 
 	//crossover
 	for(s32 i =0 ;i < output_num ; i++) {
-		sprintf(inport_str, "%d|", i+input_num+5);
-		__MADD(167+i,PROC_CROSSOVER,inport_str,inport_str,1, 0, &parameters.out1[i],2, ModuleInterfaceType::SOFT_MODULE);
+		sprintf(inport_str, "%d|", i+input_num+4);
+		sprintf(outport_str, "%d|", i+1);
+		if(i < output_num - usb_output_num)
+			__MADD(167+i,PROC_CROSSOVER,inport_str,outport_str,1, 0, &parameters.out1[i],2, ModuleInterfaceType::SOFT_MODULE);
+		else
+			__MADD(new_idx++,PROC_CROSSOVER,inport_str,outport_str,1, 0, &parameters.out1[i],2, ModuleInterfaceType::SOFT_MODULE);
 	}
 
 	//eq
 	for(s32 i =0 ;i < output_num ; i++) {
-		sprintf(inport_str, "%d|", i+input_num+5);
-		__MADD(199+i,PROC_EQ,inport_str, inport_str,1, 0, &parameters.out2[i], 8, ModuleInterfaceType::SOFT_MODULE);
+		sprintf(inport_str, "%d|", i+input_num+4);
+		sprintf(outport_str, "%d|", i+1);
+		if(i < output_num - usb_output_num)
+			__MADD(199+i,PROC_EQ,inport_str, outport_str,1, 0, &parameters.out2[i], 8, ModuleInterfaceType::SOFT_MODULE);
+		else
+			__MADD(new_idx++,PROC_EQ,inport_str, outport_str,1, 0, &parameters.out2[i], 8, ModuleInterfaceType::SOFT_MODULE);
 	}
 
 	//delay
 	for(s32 i =0 ;i < output_num ; i++) {
-		sprintf(inport_str, "%d|", i+input_num+5);
-		__MADD(231+i,PROC_DELAY,inport_str, inport_str,1, 0, &parameters.out3[i], 1200, ModuleInterfaceType::SOFT_MODULE);
+		sprintf(inport_str, "%d|", i+input_num+4);
+		sprintf(outport_str, "%d|", i+1);
+		if(i < output_num - usb_output_num)
+			__MADD(231+i,PROC_DELAY,inport_str, outport_str,1, 0, &parameters.out3[i], 1200, ModuleInterfaceType::SOFT_MODULE);
+		else
+			__MADD(new_idx++,PROC_DELAY,inport_str, outport_str,1, 0, &parameters.out3[i], 1200, ModuleInterfaceType::SOFT_MODULE);
 	}
 
 	//limit
 	for(s32 i =0 ;i < output_num ; i++) {
-		sprintf(inport_str, "%d|", i+input_num+5);
+		sprintf(inport_str, "%d|", i+input_num+4);
 		sprintf(outport_str, "%d|", i+1);
-		__MADD(263+i,PROC_LIMIT,inport_str, outport_str,1, 0, &parameters.out4[i],0, ModuleInterfaceType::SOFT_MODULE);
+		if(i < output_num - usb_output_num)
+			__MADD(263+i,PROC_LIMIT,inport_str, outport_str,1, 0, &parameters.out4[i],0, ModuleInterfaceType::SOFT_MODULE);
+		else
+			__MADD(new_idx,PROC_LIMIT,inport_str, outport_str,1, 0, &parameters.out4[i],0, ModuleInterfaceType::SOFT_MODULE);
 	}
 
 	//output

--
Gitblit v1.9.3