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 +++++++++++++++++++++++++++++++++-------------
1 files changed, 67 insertions(+), 27 deletions(-)
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(¶meters);
+
+ //只有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 ,¶meters.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, ¶meters.in1[i], 0, ModuleInterfaceType::SOFT_MODULE);
+ if(i < input_num - usb_input_num)
+ __MADD(1+i,PROC_EXPANDER, inport_str, inport_str, 0, 0, ¶meters.in1[i], 0, ModuleInterfaceType::SOFT_MODULE);
+ else
+ __MADD(new_idx++,PROC_EXPANDER, inport_str, inport_str, 0, 0, ¶meters.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, ¶meters.in2[i], 0, ModuleInterfaceType::SOFT_MODULE);
+ if(i < input_num - usb_input_num)
+ __MADD(33+i,PROC_COMPRESS, inport_str, inport_str, 0, 0, ¶meters.in2[i], 0, ModuleInterfaceType::SOFT_MODULE);
+ else
+ __MADD(new_idx++,PROC_COMPRESS, inport_str, inport_str, 0, 0, ¶meters.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, ¶meters.in3[i], 0, ModuleInterfaceType::SOFT_MODULE);
+ if(i < input_num - usb_input_num)
+ __MADD(65+i,PROC_AGC, inport_str, inport_str, 0, 0, ¶meters.in3[i], 0, ModuleInterfaceType::SOFT_MODULE);
+ else
+ __MADD(new_idx++,PROC_AGC, inport_str, inport_str, 0, 0, ¶meters.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, ¶meters.in4[i], 8, ModuleInterfaceType::SOFT_MODULE);
+ if(i < input_num - usb_input_num)
+ __MADD(97+i,PROC_EQ, inport_str, inport_str, 0, 0, ¶meters.in4[i], 8, ModuleInterfaceType::SOFT_MODULE);
+ else
+ __MADD(new_idx++,PROC_EQ, inport_str, inport_str, 0, 0, ¶meters.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, ¶meters.in5[i], 8, ModuleInterfaceType::SOFT_MODULE);
+ if(i < input_num - usb_input_num)
+ __MADD(129+i,PROC_FEEDBACK, inport_str, inport_str, 0, 0, ¶meters.in5[i], 8, ModuleInterfaceType::SOFT_MODULE);
+ else
+ __MADD(new_idx++,PROC_FEEDBACK, inport_str, inport_str, 0, 0, ¶meters.in5[i], 8, ModuleInterfaceType::SOFT_MODULE);
}
//am
@@ -77,53 +102,68 @@
__MADD(161,PROC_AUTOMIXER,inport_str, outport_str, 0, 0, ¶meters.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, ¶meters.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, ¶meters.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 ,¶meters.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 ,¶meters.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 ,¶meters.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, ¶meters.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, ¶meters.out1[i],2, ModuleInterfaceType::SOFT_MODULE);
+ else
+ __MADD(new_idx++,PROC_CROSSOVER,inport_str,outport_str,1, 0, ¶meters.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, ¶meters.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, ¶meters.out2[i], 8, ModuleInterfaceType::SOFT_MODULE);
+ else
+ __MADD(new_idx++,PROC_EQ,inport_str, outport_str,1, 0, ¶meters.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, ¶meters.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, ¶meters.out3[i], 1200, ModuleInterfaceType::SOFT_MODULE);
+ else
+ __MADD(new_idx++,PROC_DELAY,inport_str, outport_str,1, 0, ¶meters.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, ¶meters.out4[i],0, ModuleInterfaceType::SOFT_MODULE);
+ if(i < output_num - usb_output_num)
+ __MADD(263+i,PROC_LIMIT,inport_str, outport_str,1, 0, ¶meters.out4[i],0, ModuleInterfaceType::SOFT_MODULE);
+ else
+ __MADD(new_idx,PROC_LIMIT,inport_str, outport_str,1, 0, ¶meters.out4[i],0, ModuleInterfaceType::SOFT_MODULE);
}
//output
--
Gitblit v1.9.3