| | |
| | | //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; |
| | | }; |
| | |
| | | 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); |
| | | } |
| | |
| | | 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); |
| | | } |
| | |
| | | #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); |
| | | } |
| | | } |
| | | } |
| | |
| | | #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 |
| | |
| | | |
| | | 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. |
| | |
| | | //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 |
| | |
| | | __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 |