From faba6b022b86f066d95b1cfdf752573724d5fbcd Mon Sep 17 00:00:00 2001
From: chenlh <2008get@163.com>
Date: 星期五, 29 八月 2025 19:08:13 +0800
Subject: [PATCH] 常规提交

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

diff --git a/src/tob.cpp b/src/tob.cpp
index 3260cad..0a3fce0 100644
--- a/src/tob.cpp
+++ b/src/tob.cpp
@@ -6,6 +6,7 @@
  */
 #include <stdlib.h>
 #include <stdio.h>
+#include <heapnew>
 #include "tob.h"
 #include "crc.h"
 #include "config.h"
@@ -13,6 +14,7 @@
 #include "IModule.h"
 #include "f2f.h"
 #include "../drv/memory.h"
+
 
 
 //#define DEBUG
@@ -40,7 +42,7 @@
 	processed = ufalse;
 	mModuleNum =0;
 	mModuleIndex.resize(0);
-	paramset = new tg_param_ctrl_t();
+	paramset = new(SRAM_DDR) tg_param_ctrl_t();
 }
 
 ToB::~ToB()
@@ -94,7 +96,6 @@
 
 	u32 size = sizeof(FlowChartHead);
 	u32 nPhyInput =0 ,nPhyOutput=0;
-
 	frames = new Frames(head->dsp_buffer_num[dsp_index]);
 
 	do {
@@ -141,7 +142,7 @@
 		mList.push_back(m);
 
 		if(pmod->mID >= mModuleIndex.size()) {
-			mModuleIndex.resize(pmod->mID + 1,0);
+			mModuleIndex.resize(pmod->mID + 1, 0);
 		}
 		mModuleIndex[pmod->mID] = ++mModuleNum  ;
 
@@ -186,11 +187,50 @@
 	if (size != nbytes) {
 		dbg_printf("check flowchart some error!\n");
 	}
-	dbg_printf("Phy InputNum %d, Output Num %d\n",nPhyInput,nPhyOutput);
+//	dbg_printf("Phy InputNum %d, Output Num %d\n",nPhyInput,nPhyOutput);
 	SetNumOfChannels(IntDataType::TDM , nPhyInput, nPhyOutput);
 
 	return 	ErrStatus::SUCCESS;
 }
+
+#if 1//DEBUG
+	const s8* type_string[ModuleType::PROC_COUNT] = {
+			"none"
+			,"input"
+			,"meter"
+			,"peq"
+			,"expander"
+			,"compresser"
+			,"limiter"
+			,"mixer"
+			,"delay"
+			,"crossover"
+			,"output"
+			,"gain"
+			,"nhs"
+			,"gain sharing am"
+			,"agc"
+			,"aec"
+			,"ans"
+			,"sysctrl"
+			,"shelf"
+			,"selector"
+			,"gating am"
+			,"spl"
+			,"gating"
+			,"ducker"
+			,"reverb"
+			,"echo"
+			,"geq"
+			,"fir"
+			,"afc"
+			,"signal gen"
+			,"pitch"
+			,"route"
+			,"dummuy input"
+			,"dummy output"
+	};
+#endif
 ErrStatus ToB::CreateModuleV1(const u8* bin, u32 nbytes)
 {
 	FlowChartHead* head = (FlowChartHead*)bin;
@@ -224,24 +264,33 @@
 		if (pmod->mDsp != dsp_index)  continue;
 
 #ifdef DEBUG
-		dbg_printf("Module ID %d type %d rxnum %d txnum %d. \n",pmod->mID ,pmod->mType, pmod->mRxNum,pmod->mTxNum);
+		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
-		IModule* m = CreateBaseModule(pmod->mType,pmod->mTag, mRxNum,mTxNum);
+
+		IModule* m = CreateBaseModule(pmod->mType, pmod->mTag, mRxNum, mTxNum);
 		if(!m) {
 			dbg_printf("Module ID Create fail.\n", pmod->mID);
 			continue;
 		}
-		m->SetModuleInfo(pmod->mID ,pmod->mType,pmod->mTag);
+
+//		int ddr = sram_free_space(SRAM_DDR,mem_any);
+//		int ccm = sram_free_space(SRAM_L2,mem_any);
+//		int l1 = sram_free_space(SRAM_L1,mem_heap);
+//		printf("ddr %d ccm %d l1 %d.\n",ddr, ccm ,l1);
+
+		m->SetModuleInfo(pmod->mID ,pmod->mType, pmod->mTag);
 		mList.push_back(m);
 
 		if(pmod->mID >= mModuleIndex.size()) {
-			mModuleIndex.resize(pmod->mID + 1,0);
+			mModuleIndex.resize(pmod->mID + 1, 0);
 		}
-		mModuleIndex[pmod->mID] = ++mModuleNum  ;
+		mModuleIndex[pmod->mID] = ++mModuleNum;
 
+//		printf("Module id:%d, Tx buffer id:", pmod->mID);
 		for (size_t i = 0; i < mTxNum && !bOutput; i++){
+			printf("bid %d, ", mTxbufID[i]);
 			if (mTxbufID[i] > 0) {
-				Frame* pcm = frames->GetFrame(mTxbufID[i]-1 );
+				Frame* pcm = frames->GetFrame(mTxbufID[i]-1);
 				m->SetOutputChannelDataPtr(i, pcm);
 
 				if (bInput && mPhyID[i].mIntType < IntDataType::COUNT) {
@@ -249,13 +298,16 @@
 						nPhyInput[mPhyID[i].mIntType] = mPhyID[i].mPhyID;
 					m->SetInputChannelDataPtr(i, pcm);
 					SetRxChannelPtr(static_cast<IntDataType>(mPhyID[i].mIntType), mPhyID[i].mPhyID-1, pcm->Data());
+					printf("phy_id %d\n", mPhyID[i].mPhyID);
 				}
 			}
 			else {
 				m->SetOutputChannelDataPtr(i, 0);
 			}
 		}
+//		printf(";Rx buffer id:");
 		for (size_t i = 0; i < mRxNum && !bInput; i++) {
+//			printf("bid %d", mRxbufID[i]);
 			if (mRxbufID[i] > 0) {
 				Frame* pcm = frames->GetFrame(mRxbufID[i]-1 );
 				m->SetInputChannelDataPtr(i, pcm);
@@ -267,15 +319,26 @@
 					pcm = frames->AllocFrame();
 					m->SetOutputChannelDataPtr(i, pcm);
 					SetTxChannelPtr(static_cast<IntDataType>(mPhyID[i].mIntType), mPhyID[i].mPhyID-1, pcm->Data());
+//					printf("phy_id %d", mPhyID[i].mPhyID);
 				}
 			}
 			else {
 				m->SetInputChannelDataPtr(i, 0);
 			}
 		}
+//		printf("\n");
 
 		m->Init();
-		paramset->GetParamEntry(m->GetModuleType())(m, (uvoid*)pmod->mParamaddr, len);
+//		paramset->GetParamEntry(m->GetModuleType())(m, (uvoid*)pmod->mParamaddr, len);
+		// 获取模块类型
+		u32 moduleType = m->GetModuleType();
+		// 从 paramset 中获取对应的参数控制函数指针
+		ParamCtrl_fn paramEntry = paramset->GetParamEntry(moduleType);
+		// 获取模块参数地址
+		void* paramAddr = (uvoid*)pmod->mParamaddr;
+		// 调用参数控制函数
+		u32 result = paramEntry(m, paramAddr, len);
+
 	} while (size < nbytes);
 
 	if (size != nbytes) {
@@ -286,6 +349,12 @@
 		SetNumOfChannels(static_cast<IntDataType>(i) , nPhyInput[i], nPhyOutput[i]);
 	}
 
+	/*for (auto pt = mList.begin(); pt < mList.end(); pt++) {
+		IModule *p =  *pt._Myptr;
+		static int i = 0;
+		printf("%d, id %d, type %d\n",i++, p->GetModuleID(), p->GetModuleType());
+	}*/
+
 	return 	ErrStatus::SUCCESS;
 }
 ErrStatus ToB::toAnalysis(const u8* bin, u32 nbytes)
@@ -293,14 +362,14 @@
 	FlowChartHead* head = (FlowChartHead*)bin;
 	ErrStatus ret = ErrStatus::ERR_METHOD;
 	//check crc
-	u32 tmp_crc ,crc = head->crcLsb|(head->crcMsb<<16);
-	head->crcLsb = head->crcMsb = 0;
+	s32 tmp_crc;
+	s32 crc = head->crc;
+	head->crc = 0;
 	tmp_crc = CRC::crc32(bin, nbytes);
 	if (tmp_crc != crc) {
-		//dbg_printf("flowchar crc check fail.\n");
+		printf("flowchar crc check fail.\n");
 		return ErrStatus::ERR_PARAM;
 	}
-
 	processed = ufalse;
 
 	if(head->version == 0) {
@@ -309,16 +378,19 @@
 	else if(head->version == 1) {
 		ret = CreateModuleV1(bin, nbytes);
 	}
-
+	processed = utrue;
 	return ret;
 }
 ErrStatus ToB::toProc()
 {
 	if(processed) {
-		for (auto iter = mList.begin();
-			iter != mList.end() ;iter++) {
-			(*iter)->Proc();
+		for (auto iter = mList.begin(); iter < mList.end(); iter++) {
+//			if(((*iter)->GetModuleType() >= 9) && ((*iter)->GetModuleType() <= 9)) {
+//				printf("%d ", (*iter)->GetModuleID());
+				(*iter)->Proc();
+//			}
 		}
+//		printf("\n");
 	}
 	else {
 		MuteOutput();
@@ -346,7 +418,7 @@
 
 	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);
 	}
 
@@ -358,11 +430,11 @@
 	FlowChartHead* head = (FlowChartHead*)bin;
 
 	//check crc
-	u32 tmp_crc ,crc = head->crcLsb|(head->crcMsb<<16);
-	head->crcLsb = head->crcMsb = 0;
+	u32 tmp_crc ,crc = head->crc;
+	head->crc =0;
 	tmp_crc = CRC::crc32(bin, nbytes);
 	if (tmp_crc != crc) {
-		//dbg_printf("flowchar crc check fail.\n");
+		dbg_printf("flowchar crc check fail.\n");
 		return ErrStatus::ERR_PARAM;
 	}
 
@@ -378,12 +450,13 @@
 	}
 
 	if(size != nbytes) {
-		//dbg_printf("check preset has some error!\n");
+		dbg_printf("check preset has some error!\n");
 	}
 
 	processed = utrue;
 	return ErrStatus::SUCCESS;
 }
+
 
 u32 ToB::GetLevels(s16* buffer)
 {
@@ -395,8 +468,10 @@
 	for (std::vector<IModule*>::iterator iter = mList.begin();
 		iter != mList.end() ; iter++) {
 		size = (*iter)->GetLevel(buffer + n );
+//		printf("proc %s level num:%d\n",type_string[(*iter)->GetModuleType()],size);
 		n += size;
 	}
+
 	return n;
 }
 

--
Gitblit v1.9.3