chenlh
2025-11-13 123d3197c6d91a64931cb19dc669736b6ae5a35c
src/tob.cpp
@@ -17,12 +17,7 @@
//#define DEBUG
#ifdef DEBUG
#define dbg_printf printf
#else
#define dbg_printf
#endif
//static ToB* tob = NULL;
@@ -130,14 +125,14 @@
      if (pmod->mDsp != dsp_index)  continue;
#ifdef DEBUG
#if DEBUG
      dbg_printf("Module ID %d type %d rxnum %d txnum %d. \n",pmod->mID ,pmod->mType, pmod->mRxNum,pmod->mTxNum);
#endif
//      if(pmod->mID == 394) {
//         int ddr = sram_free_space(SRAM_DDR);
//         int ccm = sram_free_space(SRAM_CCM);
//         int l1 = sram_free_space(SRAM_L1);
//         printf("ddr %d ccm %d l1 %d.\n",ddr, ccm ,l1);
//         dbg_printf("ddr %d ccm %d l1 %d.\n",ddr, ccm ,l1);
//      }
      IModule* m = CreateBaseModule(pmod->mType,pmod->mTag, pmod->mRxNum,pmod->mTxNum);
      if(!m) {
@@ -199,8 +194,8 @@
   return    ErrStatus::SUCCESS;
}
#define DEBUG 0
#if DEBUG
#ifdef DEBUG
   const s8* type_string[ModuleType::PROC_COUNT] = {
         "none"
         ,"input"
@@ -270,10 +265,10 @@
      if (pmod->mDsp != dsp_index)  continue;
#if DEBUG
//      if (1+320 == pmod->mID)
//      if (PROC_FEEDBACK == pmod->mType)
         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);
#ifdef DEBUG
//      if (300 == pmod->mID)
      if (PROC_FEEDBACK == pmod->mType)
         dbg_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);
@@ -290,9 +285,9 @@
      }
      mModuleIndex[pmod->mID] = ++mModuleNum;
//      printf("Module id:%d, Tx buffer id:", pmod->mID);
//      dbg_printf("Module id:%d, Tx buffer id:", pmod->mID);
      for (size_t i = 0; i < mTxNum && !bOutput; i++){
//         printf("bid %d, ", mTxbufID[i]);
//         dbg_printf("bid %d, ", mTxbufID[i]);
         if (mTxbufID[i] > 0) {
            Frame* pcm = frames->GetFrame(mTxbufID[i]-1);
            m->SetOutputChannelDataPtr(i, pcm);
@@ -302,14 +297,14 @@
                  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);
//               dbg_printf("phy_id %d\n", mPhyID[i].mPhyID);
            }
         }
         else {
            m->SetOutputChannelDataPtr(i, 0);
         }
      }
//      printf(";Rx buffer id:");
//      dbg_printf(";Rx buffer id:");
      for (size_t i = 0; i < mRxNum && !bInput; i++) {
//         printf("mID %d,bid %d\n", pmod->mID, mRxbufID[i]);
         if (mRxbufID[i] > 0) {
@@ -323,22 +318,22 @@
               pcm = frames->AllocFrame(); // It is not necessary to be compatible with the AXE1208 series here, because the TOP architecture is different.
               m->SetOutputChannelDataPtr(i, pcm);
               SetTxChannelPtr(static_cast<IntDataType>(mPhyID[i].mIntType), mPhyID[i].mPhyID-1, pcm->Data());
//               printf("mID %d,bid %d\n", pmod->mID, mPhyID[i].mPhyID-1);
//               printf("phy_type %d, _id %d\n", mPhyID[i].mIntType, mPhyID[i].mPhyID);
//               dbg_printf("mID %d,bid %d\n", pmod->mID, mPhyID[i].mPhyID-1);
//               dbg_printf("phy_type %d, _id %d\n", mPhyID[i].mIntType, mPhyID[i].mPhyID);
            }
         }
         else {
            m->SetInputChannelDataPtr(i, 0);
         }
      }
//      printf("\n");
//      dbg_printf("\n");
      m->Init();
      // 从 paramset 中获取对应的参数控制函数指针
      ParamCtrl_fn paramEntry = paramset->GetParamEntry( m->GetModuleType());
      if(paramEntry == NULL) {
         printf("paramEntry is NULL!\n");
         dbg_printf("paramEntry is NULL!\n");
      }
      // 调用参数控制函数
      u32 result = paramEntry(m, (uvoid*)pmod->mParamaddr, len);
@@ -348,12 +343,12 @@
//   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("mListAdd:0x%x, ddr %d ccm %d l1 %d.\n", &mList, ddr, ccm ,l1);
//   dbg_printf("mListAdd:0x%x, ddr %d ccm %d l1 %d.\n", &mList, ddr, ccm ,l1);
//for (auto pl : mList) {
//   delete pl;
//   int l2mem = sram_free_space(SRAM_L2, mem_any);
//   printf("L2mem %d\n", l2mem);
//   dbg_printf("L2mem %d\n", l2mem);
//}
   if (size != nbytes) {
@@ -367,7 +362,7 @@
   /*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());
      dbg_printf("%d, id %d, type %d\n",i++, p->GetModuleID(), p->GetModuleType());
   }*/
   return    ErrStatus::SUCCESS;
@@ -382,7 +377,7 @@
   head->crc = 0;
   tmp_crc = CRC::crc32(bin, nbytes);
   if (tmp_crc != crc) {
      printf("flowchar crc check fail.\n");
      dbg_printf("flowchar crc check fail.\n");
      return ErrStatus::ERR_PARAM;
   }
   processed = ufalse;
@@ -399,13 +394,14 @@
ErrStatus ToB::toProc()
{
   if(processed) {
      for (auto iter = mList.begin(); iter < mList.end(); iter++) {
//         if(((*iter)->GetModuleType() >= PROC_FEEDBACK) && ((*iter)->GetModuleType() <= PROC_FEEDBACK)) {
      for (auto iter : mList) {// = mList.begin(); iter < mList.end(); iter++) {
//         if(((*iter)->GetModuleType() >= PROC_COMPRESS) && ((*iter)->GetModuleType() <= PROC_COMPRESS)) {
//            printf("%d ", (*iter)->GetModuleID());
            (*iter)->Proc();
//            int ii = 2;
//         }
         iter->Proc();
      }
//      printf("\n");
//      dbg_printf("\n");
   }
   else {
      MuteOutput();
@@ -428,19 +424,19 @@
/*ErrStatus ToB::toCtrl(u32 mID, u32 pID, const s16* val, u32 num)
{
    if(mID >= mModuleIndex.size() || mModuleIndex[mID] == 0) {
       printf("ToB::toCtrl mID Error!\n");
       dbg_printf("ToB::toCtrl mID Error!\n");
        return ErrStatus::ERR_PARAM;
    }
    IModule* m = mList[mModuleIndex[mID]-1];
    if(!m) {
       printf("ToB::toCtrl m Error!\n");
       dbg_printf("ToB::toCtrl m Error!\n");
        return ErrStatus::ERR_PARAM;
    }
    auto entries  = paramset->GetEntries(m->GetModuleType());
    if(!entries.second) {
       printf("ToB::toCtrl entries Error!\n");
       dbg_printf("ToB::toCtrl entries Error!\n");
        return ErrStatus::ERR_METHOD;
    }
@@ -463,7 +459,7 @@
//      m->Ctrl(pID, val, num);
      paramset->GetCtrlEntry(m->GetModuleType())(m, pID, (s16*)val, num);
   }
//   printf("mID:%d pID:%d val[0]:%d val[1]:%d\n",mID, pID, val[0], val[1]);
//   dbg_printf("mID:%d pID:%d val[0]:%d val[1]:%d\n",mID, pID, val[0], val[1]);
   return ErrStatus::SUCCESS;
}
@@ -500,17 +496,17 @@
}
u32 ToB::GetLevels(s16* buffer)
u32 ToB::GetLevels(s16* buffer, u32 level_max_len)
{
   u32 n =0,size =0;
   u32 n=0, size =0;
   u32 remain_len;
   if( !processed ) {
      return 0;
   }
   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);
   for (std::vector<IModule*>::iterator iter = mList.begin(); iter != mList.end(); iter++) {
      remain_len = level_max_len - n;
      size = (*iter)->GetLevel(buffer + n, remain_len);
//      dbg_printf("proc:%s level num:%d remain:%d\n", type_string[(*iter)->GetModuleType()], size, remain_len);
      n += size;
   }