From 703ab2a2d865ece47c13816fec7a28df1cd05746 Mon Sep 17 00:00:00 2001
From: graydon <weidong.gao@cretone.cn>
Date: 星期五, 25 七月 2025 10:19:48 +0800
Subject: [PATCH] initial》

---
 src/tob.cpp |  138 +++++-----------------------------------------
 1 files changed, 15 insertions(+), 123 deletions(-)

diff --git a/src/tob.cpp b/src/tob.cpp
index 22f4e44..3260cad 100644
--- a/src/tob.cpp
+++ b/src/tob.cpp
@@ -13,7 +13,7 @@
 #include "IModule.h"
 #include "f2f.h"
 #include "../drv/memory.h"
-#include "param_ctrl.h"
+
 
 //#define DEBUG
 #ifdef DEBUG
@@ -39,14 +39,15 @@
 	frames = NULL;
 	processed = ufalse;
 	mModuleNum =0;
-	mLevelPacketNum =0;
 	mModuleIndex.resize(0);
+	paramset = new tg_param_ctrl_t();
 }
 
 ToB::~ToB()
 {
 	toClear();
 	tob = NULL;
+	delete paramset;
 }
 
 uvoid ToB::SetMute(ubool mute)
@@ -195,7 +196,7 @@
 	FlowChartHead* head = (FlowChartHead*)bin;
 	u32 size = sizeof(FlowChartHead);
 	u16 nPhyInput[IntDataType::COUNT] = { 0,0,0 }, nPhyOutput[IntDataType::COUNT] = { 0,0,0 };
-
+	s32 len =0;
 	frames = new Frames(head->dsp_buffer_num[dsp_index]);
 
 	do {
@@ -274,6 +275,7 @@
 		}
 
 		m->Init();
+		paramset->GetParamEntry(m->GetModuleType())(m, (uvoid*)pmod->mParamaddr, len);
 	} while (size < nbytes);
 
 	if (size != nbytes) {
@@ -344,7 +346,8 @@
 
 	IModule* m = mList[mModuleIndex[mID]-1];
 	if( m != NULL) {
-		m->Ctrl(pID, val, num);
+		///m->Ctrl(pID, val, num);
+		paramset->GetCtrlEntry(m->GetModuleType())(m, pID, (s16*)val);
 	}
 
 	return ErrStatus::SUCCESS;
@@ -382,130 +385,19 @@
 	return ErrStatus::SUCCESS;
 }
 
-u32 ToB::GetLevels(Message* handle , MSG* pmsg)
+u32 ToB::GetLevels(s16* buffer)
 {
-	u32 n =0,len =0;
-	s8 buffer[MSG_DATA_LEN];
-	u32 packetNo =0;
+	u32 n =0,size =0;
 
 	if( !processed ) {
 		return 0;
 	}
-//
-//	for (std::vector<IModule*>::iterator iter = mList.begin();
-//		iter != mList.end() ; iter++) {
-//		IModule* m = *iter;
-//
-//		u32 ID = m->GetModuleID();
-//
-//		struct Level* p = (struct Level*)buffer;
-//
-//		n = sizeof(struct Level);
-//		p->mID = ID;
-//
-//		/*graydon-230905: 多通道模块会出现电平数量超出1024,比如32通道32点反馈抑制,
-//		 * ps: 讨论决定多通道模块在界面做数量限制且过多多通道不符合应用需求.
-//		 */
-//		p->num = m->GetLevel((s16*)(buffer + n));
-//		if(p->num == 0) continue;
-//
-//		n += p->num*sizeof(s16);
-//
-//		//过去的电平数量+当前的电平数量是否大于MSG_DATA_LEN
-//		if(len + n > MSG_DATA_LEN) {
-//			pmsg->pktNo = packetNo++;
-//			pmsg->totalPkts = mLevelPacketNum;
-//			pmsg->Enc(MsgType::MSG_LEVEL_GET_RES, 0, len);
-//			handle->Send(pmsg);//入队列
-//			len = 0;
-//		}
-//		memcpy(pmsg->data+len, p , n);
-//		len += n;
-//	}
-//
-//	if(len > 0) {
-//		pmsg->pktNo = packetNo++;
-//		pmsg->totalPkts = mLevelPacketNum;
-//		pmsg->Enc(MsgType::MSG_LEVEL_GET_RES, 0, len);
-//		handle->Send(pmsg);
-//	}
-//
-//	if(packetNo > 0){
-//		mLevelPacketNum = packetNo;
-//	}
-//	return n;
-	return 0;
-}
-
-
-//cpu = time*SAMPLE_RATE/SAMPLE_NUM
-//cpu *1000 -> s32
-//cpu * 100 -> percent.
-u32 ToB::GetModuleCPU(Message* handle , MSG* pmsg)
-{
-//	u32 n =0;
-//	const ufloat period_s = SAMPLE_NUM*1.f/SAMPLE_RATE;
-//	const u32 percent = 100000;
-//	ufloat module_cpu ;
-//	u32* data = (u32*)pmsg->data;
-//
-//	if( !processed ) {
-//		return 0;
-//	}
-//
-//	for (std::vector<IModule*>::iterator iter = mList.begin();
-//		iter != mList.end() ; iter++) {
-//		IModule* m = *iter;
-//		ufloat time = m->GetRuntime();
-//		ModuleType type = (ModuleType)m->GetModuleType();
-//		u32 tag = m->GetModuleTag();
-//		u16 rxNum = m->GetModuleInputNum();
-//		u16 txNum = m->GetModuleOutputNum();
-//		u32 ID = m->GetModuleID();
-//
-//
-//		switch(type) {
-//		case ModuleType::Mixer:
-//		case ModuleType::SupperMatrix:
-//			time = time / rxNum  ;
-//			module_cpu = time / period_s ;
-//			break;
-//		case ModuleType::GEQ:
-//		case ModuleType::EQ:
-//		case ModuleType::NHS:
-//			time = time / (tag * rxNum) ;
-//			module_cpu = time / period_s ;
-//			break;
-//		case ModuleType::SignalGenerator:
-//		case ModuleType::Ducker:
-//		case ModuleType::ContinuitySPL:
-//			time = time / txNum ;
-//			module_cpu = time / period_s ;
-//			break;
-//		case ModuleType::AEC:
-//			module_cpu = time / 0.01f ;//aec 10ms处理一次.
-//			break;
-//		default:
-//			time = time / rxNum ;
-//			module_cpu = time / period_s ;
-//			break;
-//		}
-//		data[n++] = ID;
-//		data[n++] = (u32)(module_cpu* percent);
-//
-//		if(n*sizeof(u32) >= MSG_DATA_LEN) {
-//			pmsg->Enc(MsgType::MSG_MODULE_CPU_RES, 0, MSG_DATA_LEN);
-//			handle->Send(pmsg);
-//			n = 0;
-//		}
-//	}
-//
-//	if(n > 0) {
-//		pmsg->Enc(MsgType::MSG_MODULE_CPU_RES, 0, n*sizeof(u32));
-//		handle->Send(pmsg);
-//	}
-
-	return 0;
+	for (std::vector<IModule*>::iterator iter = mList.begin();
+		iter != mList.end() ; iter++) {
+		size = (*iter)->GetLevel(buffer + n );
+		n += size;
+	}
+	return n;
 }
 
 

--
Gitblit v1.9.3