//---------------------------------------------------------------- // 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) : memgr_(memgr) { for(size_t fib=0; fib<(size_t)memgr_.NbFibres(); fib++) { vpaq_.push_back(BRPaquet(NULL,memgr_.PaqSize())); vpchk_.push_back(BRPaqChecker(true,0)); curfc_.push_back(0); } totprocnpaq_=0; } /* --Methode-- */ void BRBaseProcessor::run() { setRC(1); int rc=0; try { cout << " BRBaseProcessor::run() - Starting " << " NFibers=" << memgr_.NbFibres() << " NChan=" << 2*memgr_.NbFibres() << endl; size_t paqsz=memgr_.PaqSize(); vector fbuff; for(size_t fib=0; fib<(size_t)memgr_.NbFibres(); fib++) fbuff.push_back(NULL); bool fgrun=true; while (fgrun) { if (stop_) break; if (memgr_.GetRunState() == MemZR_Stopped) break; int mid = memgr_.FindMemZoneId(MemZA_ProcA); Byte* buffg = memgr_.GetMemZone(mid); if (buffg == NULL) { cout << "BRBaseProcessor::run()/ERROR memgr.GetMemZone(" << mid << ") -> NULL" << endl; setRC(7); fgrun=false; break; } for(size_t jp=0; jp NULL" << endl; setRC(9); fgrun=false; break; } vpaq_[fib].Set(fbuff[fib]+jp*paqsz); vfgok_[fib] = vpchk_[fib].Check(vpaq_[fib],curfc_[fib]); if (!vfgok_[fib]) fgokallfibers_=false; } //--- Traitement int rcp = Process(); totprocnpaq_++; if (rcp != 0) { fgrun=false; break; } } // Fin de boucle sur les paquets memgr_.FreeMemZone(mid, MemZS_ProcA); } // Fin de boucle sur les zones a traiter //------------------------------------ cout << " --------- END BRBaseProcessor::run() , TotNbProcPaq=" << totprocnpaq_ << endl; } catch (std::exception& exc) { cout << " BRBaseProcessor::run()/catched std::exception " << exc.what() << endl; setRC(98); return; } catch(...) { cout << " BRBaseProcessor::run()/catched unknown ... exception " << endl; setRC(99); return; } } /* --Methode-- */ int BRBaseProcessor::Process() { // la methode par defaut ne fait rien // if (fgokallfibers_) { faire le traitement } return 0; }