| | |
| | | */ |
| | | #include <stdlib.h> |
| | | #include <stdio.h> |
| | | #include <heapnew> |
| | | #include "tob.h" |
| | | #include "crc.h" |
| | | #include "config.h" |
| | |
| | | processed = ufalse; |
| | | mModuleNum =0; |
| | | mModuleIndex.resize(0); |
| | | paramset = new tg_param_ctrl_t(); |
| | | paramset = new(SRAM_DDR) tg_param_ctrl_t(); |
| | | } |
| | | |
| | | ToB::~ToB() |
| | |
| | | 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); |
| | |
| | | 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); |
| | | |
| | |
| | | } |
| | | 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); |
| | |
| | | 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); |
| | |
| | | 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) { |
| | |
| | | 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) |
| | |
| | | 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) { |
| | |
| | | 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(); |
| | |
| | | |
| | | 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); |
| | | } |
| | | |
| | |
| | | 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; |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | 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; |