//---------------------------------------------------------------- // Projet BAORadio - (C) LAL/IRFU 2008-2010 // Classes de base pour les threads de traitememt donnees BAORadio //---------------------------------------------------------------- #include #include #include #include #include "brbaseproc.h" using namespace SOPHYA; //--------------------------------------------------------------------- // Classe de traitement - calcul de visibilite pour n fibres //--------------------------------------------------------------------- /* --Methode-- */ BRBaseProcessor::BRBaseProcessor(RAcqMemZoneMgr& memgr, MemZaction mmact) : memgr_(memgr), vpaq_(memgr.NbFibres()), vpchk_(memgr.NbFibres()), vfgok_(memgr.NbFibres()), curfc_(memgr.NbFibres()), fcfirst_(memgr.NbFibres()), ttfirst_(memgr.NbFibres()) { SetMemZAction(mmact); stop_ = false; for(size_t fib=0; fib<(size_t)memgr_.NbFibres(); fib++) { fbuff_.push_back(NULL); vpaq_[fib]=BRPaquet(NULL,memgr_.PaqSize()); vpchk_[fib]=BRPaqChecker(true,0); vfgok_[fib]=true; curfc_[fib]=0; fcfirst_[fib]=0; ttfirst_[fib]=0; } fgokallfibers_=true; totprocnpaq_=0; setNameId("baseproc",0); } /* --Methode-- */ MemZStatus BRBaseProcessor::SetMemZAction(MemZaction mmact) { mmact_=mmact; mmsta_=MemZS_ProcA; switch (mmact) { case MemZA_ProcA: mmsta_=MemZS_ProcA; break; case MemZA_ProcB: mmsta_=MemZS_ProcB; break; case MemZA_ProcC: mmsta_=MemZS_ProcC; break; case MemZA_ProcD: mmsta_=MemZS_ProcD; break; case MemZA_ProcE: mmsta_=MemZS_ProcE; break; case MemZA_ProcF: mmsta_=MemZS_ProcF; break; default: mmact_=MemZA_ProcA; mmsta_=MemZS_ProcA; break; } return mmsta_; } /* --Methode-- */ void BRBaseProcessor::run() { setRC(1); int rc=0; try { cout << " BRBaseProcessor[" << bpid_ << "]::run() - Starting " << " NFibers=" << memgr_.NbFibres() << " NChan=" << 2*memgr_.NbFibres() << endl; size_t paqsz=memgr_.PaqSize(); bool fgrun=true; while (fgrun) { if (stop_) break; if (memgr_.GetRunState() == MemZR_Stopped) break; int mid = memgr_.FindMemZoneId(mmact_); // (MemZA_ProcA); // Byte* buffg = memgr_.GetMemZone(mid); // if (buffg == NULL) { if (mid < 0) { cout << "BRBaseProcessor[" << bpid_ << "]::run()/ERROR FindMemZoneId(" << (int)mmact_ << ") ->" << mid << ") -> NULL" << endl; setRC(7); fgrun=false; break; } for(size_t fib=0; fib<(size_t)memgr_.NbFibres(); fib++) { fbuff_[fib] = memgr_.GetMemZone(mid,fib); if (fbuff_[fib] == NULL) { // cela ne devrait pas arriver cout << "BRBaseProcessor[" << bpid_ << "]::run()/ERROR memgr.GetMemZone(" << mid << "," << fib << ") -> NULL" << endl; setRC(9); fgrun=false; break; } } for(size_t jp=0; jp