Changeset 3909 in Sophya for trunk/AddOn/TAcq/racqueth.cc
- Timestamp:
- Nov 21, 2010, 2:26:12 PM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/AddOn/TAcq/racqueth.cc
r3907 r3909 55 55 for(int ii=0; ii<BRTCPMSGLEN; ii++) msg[ii]='\0'; 56 56 uint_4 dmasz = (fgdirectsend_) ? vec_pciw_[0]->TransferSize() : 0; 57 sprintf(msg,"BAORadio-PCIEToEthernet %d %d %d %d %d", par_.MMgrNbPaquet(), par_.MMgrPaquetSize(), dmasz, 0,i); 57 sprintf(msg,"BAORadio-PCIEToEthernet %d %d %d %d %d", par_.MMgrNbPaquet(), par_.MMgrPaquetSize(), 58 vec_pciw_[i]->FiberId(), dmasz, i); 58 59 // 123456789012345678901234567890 59 60 sok.SendAll(msg,BRTCPMSGLEN); … … 72 73 vvec_errorcnt_.push_back(verrcnt); 73 74 vec_cntpaq_.push_back(0); 75 vfgmsgfin_.push_back(false); 76 74 77 } 75 78 totrdsnd_ = 0; … … 119 122 uint_4 off_acheval=0; 120 123 121 int nerrdma = 0;122 int maxerrdma = 10;123 124 bool fgarret = false; 124 125 … … 170 171 uint_4 npaqfaitg = 0; 171 172 173 for (int i=0;i< (int)nbDma_ ;i++) 174 vec_pciw_[i]->SetMaxWaitEndDMA(par_.first_maxkwedma_,par_.first_nretrydma_); 175 172 176 while (npaqfaitg < nmaxpaq_) { // Boucle global G 173 177 if (fgarret) break; 174 178 if (stop_) break; 179 180 if ((prtlev_>0)&&(npaqfaitg>1)&&((npaqfaitg-1)%prtmodulo_==0)) 181 cout << " PCIEToEthernet::run()/Info NPaqFait= " << npaqfaitg << endl; 175 182 176 183 // Lancement des DMA 177 184 for (int dma=0; dma < (int)nbDma_ ;dma++) vec_pciw_[dma]->StartTransfers(); 185 if (npaqfaitg==1) { 186 for (int i=0;i< (int)nbDma_ ;i++) 187 vec_pciw_[i]->SetMaxWaitEndDMA(par_.maxkwedma_,par_.nretrydma_); 188 } 178 189 179 190 // On pointe vers le debut de la zone a remplir aver le prochain DMA … … 185 196 Datas[dma]=vec_pciw_[dma]->GetData(); 186 197 if (Datas[dma] == NULL) { // No data Read in DMA 187 nerrdma ++;fgbaddma=true;188 cout << "PCIEToEthernetChecker/Err eur Waiting for datas ..." << endl;198 fgbaddma=true; 199 cout << "PCIEToEthernetChecker/Error Waiting for datas ..." << endl; 189 200 vec_pciw_[dma]->PrintStatus(cout); 190 if (nerrdma>=maxerrdma) { fgarret = true; break; }201 fgarret = true; break; 191 202 } 192 203 } 193 204 if (fgbaddma) continue; 194 if ((prtlev_>0)&&(npaqfaitg%prtmodulo_==0)) 195 cout << " PCIEToEthernet::run()/Info NPaqFait= " << npaqfaitg << endl; 205 196 206 if (fgdirectsend_) { // Pas de copie / reduction de taille de paquet, on rebalance tel quel ... 197 207 for (int fib=0; fib<(int) nbDma_ ;fib++) { … … 283 293 } // FIN Boucle global G 284 294 295 // ----- Nettoyage final et impression de resume ------- 296 CleanUpEndSendAllLinks(); 285 297 setRC(0); 286 298 gettimeofday(&tv2, NULL); … … 326 338 static long cnt_prt=0; 327 339 /* --Methode-- */ 328 size_t PCIEToEthernet::SendToTargets(int fib, Byte* data, size_t len )340 size_t PCIEToEthernet::SendToTargets(int fib, Byte* data, size_t len, bool fgfin) 329 341 { 330 342 //DBG cout << " SendToTargets/DBG" << cnt_prt << " len=" << len << " data=" << hex << (unsigned long)data << dec << endl; cnt_prt++; … … 360 372 } 361 373 #endif 362 if ( vec_cntpaq_[fib]==nmaxpaq_) { // fin de l'envoi pour cette fibre374 if ((vec_cntpaq_[fib]==nmaxpaq_)||(fgfin&&(vec_cntpaq_[fib]%par_.MMgrNbPaquet()==0))) { // fin de l'envoi pour cette fibre 363 375 sprintf(msg,"PCIEToEthernet-Send-END %d",vec_cntpaq_[fib]); 364 376 for(size_t j=0; j<vskt.size(); j++) { 365 377 vskt[j].SendAll(msg, BRTCPMSGLEN2); 366 378 } 367 379 vfgmsgfin_[fib]=true; 368 380 } 369 381 return rc; 370 382 } 383 384 /* --Methode-- */ 385 void PCIEToEthernet::CleanUpEndSendAllLinks() 386 { 387 cout << " PCIEToEthernet::CleanUpEndSendAllLinks() - Ending transmission on links ..." << endl; 388 Byte* tampon = new Byte[par_.MMgrPaquetSize()]; 389 memset(tampon,0,(size_t)par_.MMgrPaquetSize()); 390 for(size_t fib=0; fib<vfgmsgfin_.size(); fib++) { 391 while (!vfgmsgfin_[fib]) SendToTargets(fib,tampon,par_.MMgrPaquetSize(),true); 392 cout << " ... Ended transmission on links for Fiber " << fib << endl; 393 } 394 delete[] tampon; 395 } 396 371 397 //------------------------------------------------------------------ 372 398 // Classe thread de lecture sur interface reseau (Ethernet) … … 429 455 sok.SendAll(msg,BRTCPMSGLEN); 430 456 vsok_.push_back(sok); 431 cout << " EthernetReader/Info connection/link" << fib << " established." << endl; 457 vfibid_.push_back(ic); 458 cout << " EthernetReader/Info connection/link" << fib << " established - FiberId= " << ic << endl; 432 459 vec_cntpaq_.push_back(0); 433 460 vec_fgsokend_.push_back(false); 434 461 } 462 if (vsok_.size()>1) { 463 cout << " EthernetReader/Info: sorting socket according to FiberIds ..." << endl; 464 bool encore=true; 465 Socket tmpskt; 466 int tmpid; 467 while(encore) { 468 encore=false; 469 for(size_t ii=0; ii<vsok_.size()-1; ii++) { 470 if (vfibid_[ii]<vfibid_[ii+1]) { 471 tmpskt=vsok_[ii]; tmpid=vfibid_[ii]; 472 vsok_[ii]=vsok_[ii+1]; vfibid_[ii]=vfibid_[ii+1]; 473 vsok_[ii+1]=tmpskt; vfibid_[ii+1]=tmpid; 474 encore=true; 475 } 476 } 477 } 478 } 479 cout << " EthernetReader/Info: Setting FiberIds in RAcqMemZoneMgr \n ... FiberIds= " ; 480 for(size_t ii=0; ii<vsok_.size(); ii++) { 481 memgr_.FiberId(ii)=vfibid_[ii]; 482 cout << vfibid_[ii] << " ; "; 483 } 484 cout << endl; 485 435 486 gl_fgsokend = true; 436 487 stopreason_="??Unknown??";
Note:
See TracChangeset
for help on using the changeset viewer.