source: Sophya/trunk/AddOn/TAcq/brbaseproc.cc@ 3827

Last change on this file since 3827 was 3779, checked in by ansari, 15 years ago

Correction bugs ProcD/E/F ds memmgr , Reza 18/05/2010

File size: 4.8 KB
Line 
1//----------------------------------------------------------------
2// Projet BAORadio - (C) LAL/IRFU 2008-2010
3// Classes de base pour les threads de traitememt donnees BAORadio
4//----------------------------------------------------------------
5
6#include <stdlib.h>
7#include <string.h>
8#include <unistd.h>
9#include <fstream>
10#include "brbaseproc.h"
11
12
13using namespace SOPHYA;
14//---------------------------------------------------------------------
15// Classe de traitement - calcul de visibilite pour n fibres
16//---------------------------------------------------------------------
17
18/* --Methode-- */
19BRBaseProcessor::BRBaseProcessor(RAcqMemZoneMgr& memgr, MemZaction mmact)
20 : memgr_(memgr), vpaq_(memgr.NbFibres()), vpchk_(memgr.NbFibres()), vfgok_(memgr.NbFibres()),
21 curfc_(memgr.NbFibres()), fcfirst_(memgr.NbFibres()), ttfirst_(memgr.NbFibres())
22{
23 SetMemZAction(mmact);
24 stop_ = false;
25 for(size_t fib=0; fib<(size_t)memgr_.NbFibres(); fib++) {
26 fbuff_.push_back(NULL);
27 vpaq_[fib]=BRPaquet(NULL,memgr_.PaqSize());
28 vpchk_[fib]=BRPaqChecker(true,0);
29 vfgok_[fib]=true;
30 curfc_[fib]=0;
31 fcfirst_[fib]=0;
32 ttfirst_[fib]=0;
33 }
34 fgokallfibers_=true;
35 totprocnpaq_=0;
36 setNameId("baseproc",0);
37}
38
39/* --Methode-- */
40MemZStatus BRBaseProcessor::SetMemZAction(MemZaction mmact)
41{
42 mmact_=mmact;
43 mmsta_=MemZS_ProcA;
44 switch (mmact) {
45 case MemZA_ProcA:
46 mmsta_=MemZS_ProcA;
47 break;
48 case MemZA_ProcB:
49 mmsta_=MemZS_ProcB;
50 break;
51 case MemZA_ProcC:
52 mmsta_=MemZS_ProcC;
53 break;
54 case MemZA_ProcD:
55 mmsta_=MemZS_ProcD;
56 break;
57 case MemZA_ProcE:
58 mmsta_=MemZS_ProcE;
59 break;
60 case MemZA_ProcF:
61 mmsta_=MemZS_ProcF;
62 break;
63 default:
64 mmact_=MemZA_ProcA;
65 mmsta_=MemZS_ProcA;
66 break;
67 }
68 return mmsta_;
69}
70
71/* --Methode-- */
72void BRBaseProcessor::run()
73{
74 setRC(1);
75 int rc=0;
76 try {
77 cout << " BRBaseProcessor[" << bpid_ << "]::run() - Starting " << " NFibers=" << memgr_.NbFibres()
78 << " NChan=" << 2*memgr_.NbFibres() << endl;
79
80 size_t paqsz=memgr_.PaqSize();
81 bool fgrun=true;
82 while (fgrun) {
83 if (stop_) break;
84 if (memgr_.GetRunState() == MemZR_Stopped) break;
85 int mid = memgr_.FindMemZoneId(mmact_); // (MemZA_ProcA);
86 // Byte* buffg = memgr_.GetMemZone(mid);
87 // if (buffg == NULL) {
88 if (mid < 0) {
89 cout << "BRBaseProcessor[" << bpid_ << "]::run()/ERROR FindMemZoneId("
90 << (int)mmact_ << ") ->" << mid << ") -> NULL" << endl;
91 setRC(7); fgrun=false;
92 break;
93 }
94 for(size_t fib=0; fib<(size_t)memgr_.NbFibres(); fib++) {
95 fbuff_[fib] = memgr_.GetMemZone(mid,fib);
96 if (fbuff_[fib] == NULL) { // cela ne devrait pas arriver
97 cout << "BRBaseProcessor[" << bpid_ << "]::run()/ERROR memgr.GetMemZone(" << mid << "," << fib << ") -> NULL" << endl;
98 setRC(9); fgrun=false;
99 break;
100 }
101 }
102 for(size_t jp=0; jp<memgr_.NbPaquets(); jp++) { // boucle sur les paquets d'une zone
103 fgokallfibers_=true;
104 for(size_t fib=0; fib<(size_t)memgr_.NbFibres(); fib++) {
105 vpaq_[fib].Set(fbuff_[fib]+jp*paqsz);
106 vfgok_[fib] = vpchk_[fib].Check(vpaq_[fib],curfc_[fib]);
107 if (!vfgok_[fib]) fgokallfibers_=false;
108 }
109 //--- Traitement
110 int rcp=0;
111 if (fgokallfibers_) {
112 if (totprocnpaq_==0) {
113 for(size_t fib=0; fib<(size_t)memgr_.NbFibres(); fib++) {
114 fcfirst_[fib]=curfc_[fib];
115 ttfirst_[fib]=vpaq_[fib].TimeTag();
116 }
117 }
118 rcp=Process();
119 totprocnpaq_++;
120 }
121 // if (rcp != 0) { fgrun=false; break; }
122 } // Fin de boucle sur les paquets
123 memgr_.FreeMemZone(mid, mmsta_); // (MemZS_ProcA);
124 } // Fin de boucle sur les zones a traiter
125 //------------------------------------
126 cout << " ---- END BRBaseProcessor[" << bpid_ << "]::run() , TotNbProcPaq=" << totprocnpaq_ << endl;
127 /*
128 for(size_t fib=0; fib<(size_t)memgr_.NbFibres(); fib++) vpchk_[fib].Print();
129 cout << " ------------------------------------ " << endl;
130 */
131 }
132 catch (std::exception& exc) {
133 cout << " BRBaseProcessor[" << bpid_ << "]::run()/catched std::exception " << exc.what() << endl;
134 setRC(98);
135 return;
136 }
137 catch(...) {
138 cout << " BRBaseProcessor[" << bpid_ << "]::run()/catched unknown ... exception " << endl;
139 setRC(99);
140 return;
141 }
142
143}
144
145
146/* --Methode-- */
147int BRBaseProcessor::Process()
148{
149 // la methode par defaut ne fait rien
150 // if (fgokallfibers_) { faire le traitement }
151 // return 0;
152 /* Exemple de code test */
153 if ( totprocnpaq_ % 1000 == 0 ) {
154 cout << " BRVisibilityCalculator::Process() " << totprocnpaq_ << " FrameCnt=" ;
155 for(size_t fib=0; fib<(size_t)memgr_.NbFibres(); fib++)
156 cout << curfc_[fib] << "," ;
157 cout << endl;
158 cout << " TimeTag : " ;
159 for(size_t fib=0; fib<(size_t)memgr_.NbFibres(); fib++)
160 cout << vpaq_[fib].TimeTag()/125000000 << "," ;
161 cout << " seconds" << endl;
162 }
163 return 0;
164}
165
Note: See TracBrowser for help on using the repository browser.