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/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