chenlh
2025-08-21 7534dda3b69026df6dc40b3d907b825a0078617b
src/tob.cpp
@@ -6,6 +6,7 @@
 */
#include <stdlib.h>
#include <stdio.h>
#include <heapnew>
#include "tob.h"
#include "crc.h"
#include "config.h"
@@ -40,7 +41,7 @@
   processed = ufalse;
   mModuleNum =0;
   mModuleIndex.resize(0);
   paramset = new tg_param_ctrl_t();
   paramset = new(SRAM_DDR) tg_param_ctrl_t();
}
ToB::~ToB()
@@ -197,7 +198,7 @@
   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]);
   frames = new Frames(head->dsp_buffer_num[dsp_index]); // C H G
   do {
      const Module* pmod = (Module*)(bin+ size);  size += sizeof(Module);
@@ -224,13 +225,14 @@
      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 rxnum %d txnum %d tag %d. \n",pmod->mID ,pmod->mType, pmod->mRxNum,pmod->mTxNum,pmod->mTag);
#endif
      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);
      mList.push_back(m);
@@ -239,7 +241,9 @@
      }
      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 );
            m->SetOutputChannelDataPtr(i, pcm);
@@ -249,13 +253,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", 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 +274,17 @@
               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);
   } while (size < nbytes);
   if (size != nbytes) {
@@ -286,6 +295,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 +308,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 +324,22 @@
   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++) {
      for (auto iter = mList.begin(); iter < mList.end(); iter++) {
//         if ((*iter)->GetModuleID() == 166)
//            continue;
         if((*iter)->GetModuleType() <= 5) {
            printf("%d ", (*iter)->GetModuleID());
         (*iter)->Proc();
      }
      }
//      printf("\n");
   }
   else {
      MuteOutput();
@@ -346,7 +367,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 +379,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,13 +399,14 @@
   }
   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)
{
   u32 n =0,size =0;