Changeset 3909 in Sophya for trunk/AddOn/TAcq/racqueth.cc


Ignore:
Timestamp:
Nov 21, 2010, 2:26:12 PM (15 years ago)
Author:
ansari
Message:

1/ Mise en place d'informations auxiliaires au niveau de RAcqMemZoneMgr ,

FillTime (DATEOBS) pour chaque zone et identificateur des fibres

2/ remplissage de FillTime(DATEOBS) Et FiberId's de MemZoneMgr par

les classes PCIEMultiReader et EthernetReader

3/ Ajout de mots-cle (ds les datacards) pour numeros d'identification des

fibres et parametres de controles du DMA (@fiberids @waitenddma)
et corrections/ameliorations des modes acq (raw1c ordfft2c ...)

4/ Parametrage des WaitEndDMA ds PCIEWrapperInterface et implementation

au niveau de DMAMgrV6 (dmamgrv6.h .cc)

5/ Gestion d'echec DMA -> arret acquisition ds PCIEMultiReader,EthernetReader

modification TimeOut DMA entre le premier DMA et les suivants pour permettre
un arret propre rapide

6/ Adaptation de la classe BRVisibilityCalculator pour utilisation

FillTime (DATEOBS) et FiberIds de MemZoneMgr - amelioration de
l'identification des numeros de canaux pour les matrices de visibilites

7/ Petites ameliorations (ecriture mot-cles) pour MultiDataSaver et

amelioration classe BRMultiFitsReader pour lecture FillTime (DATEOBS)
et FiberIds depuis les fichiers FITS et remplissage de RAcqMemZoneMgr

Reza, 21/11/2010

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/AddOn/TAcq/racqueth.cc

    r3907 r3909  
    5555      for(int ii=0; ii<BRTCPMSGLEN; ii++) msg[ii]='\0';
    5656      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);
    5859      //           123456789012345678901234567890
    5960      sok.SendAll(msg,BRTCPMSGLEN);
     
    7273    vvec_errorcnt_.push_back(verrcnt);
    7374    vec_cntpaq_.push_back(0);
     75    vfgmsgfin_.push_back(false);
     76
    7477  }
    7578  totrdsnd_ = 0;
     
    119122  uint_4 off_acheval=0;
    120123 
    121   int nerrdma = 0;
    122   int maxerrdma = 10;
    123124  bool fgarret = false;
    124125 
     
    170171  uint_4 npaqfaitg = 0;
    171172
     173  for (int i=0;i< (int)nbDma_ ;i++)
     174    vec_pciw_[i]->SetMaxWaitEndDMA(par_.first_maxkwedma_,par_.first_nretrydma_);
     175
    172176  while (npaqfaitg < nmaxpaq_) {  // Boucle global G
    173177    if (fgarret) break;
    174178    if (stop_) break;
     179
     180    if ((prtlev_>0)&&(npaqfaitg>1)&&((npaqfaitg-1)%prtmodulo_==0))
     181      cout << " PCIEToEthernet::run()/Info NPaqFait= " << npaqfaitg << endl;
    175182   
    176183    // Lancement des DMA
    177184    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    }
    178189   
    179190    // On pointe vers le debut de la zone a remplir aver le prochain DMA
     
    185196      Datas[dma]=vec_pciw_[dma]->GetData();
    186197      if (Datas[dma] == NULL) { // No data Read in DMA
    187         nerrdma ++;   fgbaddma=true;
    188         cout << "PCIEToEthernetChecker/Erreur Waiting for datas ..." << endl;
     198        fgbaddma=true;
     199        cout << "PCIEToEthernetChecker/Error Waiting for datas ..." << endl;
    189200        vec_pciw_[dma]->PrintStatus(cout);
    190         if (nerrdma>=maxerrdma) { fgarret = true; break; }
     201        fgarret = true;  break;
    191202      }
    192203    }
    193204    if (fgbaddma) continue; 
    194     if ((prtlev_>0)&&(npaqfaitg%prtmodulo_==0))
    195       cout << " PCIEToEthernet::run()/Info NPaqFait= " << npaqfaitg << endl;
     205
    196206    if (fgdirectsend_) {  // Pas de copie / reduction de taille de paquet, on rebalance tel quel ...
    197207      for (int fib=0; fib<(int) nbDma_ ;fib++) {
     
    283293  }  //   FIN  Boucle global G
    284294 
     295  // ----- Nettoyage final et impression de resume -------
     296  CleanUpEndSendAllLinks();
    285297  setRC(0);
    286298  gettimeofday(&tv2, NULL);
     
    326338static long cnt_prt=0;
    327339/* --Methode-- */
    328 size_t PCIEToEthernet::SendToTargets(int fib, Byte* data, size_t len)
     340size_t PCIEToEthernet::SendToTargets(int fib, Byte* data, size_t len, bool fgfin)
    329341{
    330342  //DBG    cout << " SendToTargets/DBG" << cnt_prt << " len=" << len << " data=" << hex << (unsigned long)data << dec << endl; cnt_prt++;
     
    360372  }
    361373#endif
    362   if (vec_cntpaq_[fib]==nmaxpaq_) {  // fin de l'envoi pour cette fibre
     374  if ((vec_cntpaq_[fib]==nmaxpaq_)||(fgfin&&(vec_cntpaq_[fib]%par_.MMgrNbPaquet()==0))) {  // fin de l'envoi pour cette fibre
    363375    sprintf(msg,"PCIEToEthernet-Send-END %d",vec_cntpaq_[fib]);
    364376    for(size_t j=0; j<vskt.size(); j++) {
    365377      vskt[j].SendAll(msg, BRTCPMSGLEN2);
    366378    }
    367    
     379    vfgmsgfin_[fib]=true;
    368380  }
    369381  return rc;
    370382}
     383
     384/* --Methode-- */
     385void 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
    371397//------------------------------------------------------------------
    372398// Classe thread de lecture sur interface reseau (Ethernet)
     
    429455    sok.SendAll(msg,BRTCPMSGLEN);
    430456    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;
    432459    vec_cntpaq_.push_back(0);
    433460    vec_fgsokend_.push_back(false);
    434461  }
     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
    435486  gl_fgsokend = true;
    436487  stopreason_="??Unknown??";
Note: See TracChangeset for help on using the changeset viewer.