Changeset 3913 in Sophya for trunk/AddOn/TAcq/brparam.cc


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

1/ Correction de gestion de changement de timeout DMA ( racqueth.cc , racqurw.cc)
2/ Amelioration de la gestion des arguments de ligne de commande et

datacard - introduction de variables d'environnement
BRACQ_TMPDIR TMPDIR BRACQ_BASEDIR BRACQ_FIBERIDS

3/ possibilite de specifier des cibles ethernet pour chaque fibre

Reza 26/11/2010

File:
1 edited

Legend:

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

    r3911 r3913  
    4242}
    4343
     44#define PMAXNBFIBRES 64
    4445/* --Methode-- */
    4546BRConfList::BRConfList()
    46   : basedir_("./")
    47 {
     47  : basedir_("./"), fiberIds_(PMAXNBFIBRES), tmpdir_("/tmp")
     48{
     49  InitFromEnv();
    4850}
    4951
    5052/* --Methode-- */
    5153BRConfList::BRConfList(string basedir)
    52   : basedir_(basedir)
    53 {
     54  : basedir_("./"), fiberIds_(PMAXNBFIBRES), tmpdir_("/tmp")
     55{
     56  InitFromEnv();
     57  SetBaseDirectory(basedir);
    5458}
    5559
    5660/* --Methode-- */
    5761BRConfList::BRConfList(string basedir, vector<ADCBoardDesc> boards)
    58   : basedir_(basedir), boards_(boards)
    59 {
    60   size_t len = basedir_.length();
    61   if ((len>1)&&(basedir_[len-1]!='/')) basedir_ += '/';
     62  : basedir_("./"), fiberIds_(PMAXNBFIBRES), tmpdir_("/tmp")
     63{
     64  InitFromEnv();
     65  SetBaseDirectory(basedir);
     66  boards_=boards;
    6267}
    6368
    6469/* --Methode-- */
    6570BRConfList::BRConfList(BRConfList const & cf)
    66   : basedir_(cf.basedir_), boards_(cf.boards_)
    67 {
    68 }
    69 
    70 /* --Methode-- */
    71 void BRConfList::SetBaseDirectory(string basedir)
    72 {
     71  : basedir_(cf.basedir_), boards_(cf.boards_), fiberIdsS_(cf.fiberIdsS_), fiberIds_(cf.fiberIds_), tmpdir_(cf.tmpdir_)
     72{
     73}
     74
     75/* --Methode-- */
     76void BRConfList::InitFromEnv()
     77{
     78  const char* venvp = NULL;
     79  venvp=getenv("BRACQ_TMPDIR");
     80  if (venvp!=NULL) tmpdir_=venvp;
     81  else {
     82    if (venvp!=NULL) tmpdir_=venvp;
     83    venvp = getenv("TMPDIR");
     84  }
     85  venvp=getenv("BRACQ_BASEDIR");
     86  if (venvp!=NULL) {
     87    string ebd=venvp;
     88    SetBaseDirectory(ebd);
     89  }
     90  string fibids="1,2,3,4,5,6,7,8";
     91  venvp=getenv("BRACQ_FIBERIDS");
     92  if (venvp!=NULL)  fibids=venvp;
     93  SetFiberIds(fibids);
     94}
     95
     96/* --Methode-- */
     97int BRConfList::SetFiberIds(string& sfids)
     98{
     99  fiberIdsS_=sfids;
     100  vector<string> fibids;
     101  FillVStringFrString(sfids, fibids, ',');
     102  int rc=0;
     103  for (size_t fib=0; fib<fibids.size(); fib++) {
     104    if (fib>fiberIds_.size())  break;
     105    fiberIds_[fib]=atoi(fibids[fib].c_str());
     106    rc++;
     107  }
     108  return rc;
     109}
     110
     111/* --Methode-- */
     112void BRConfList::SetBaseDirectory(string& basedir)
     113{
     114  if (basedir.length()<1)  return;
    73115  basedir_=basedir;
    74116  size_t len = basedir_.length();
     
    77119
    78120/* --Methode-- */
    79 void BRConfList::Set(BRConfList const & cf)
     121BRConfList& BRConfList::Set(BRConfList const & cf)
    80122{
    81123  basedir_=cf.basedir_;
    82124  boards_=cf.boards_;
     125  fiberIdsS_=cf.fiberIdsS_;
     126  fiberIds_=cf.fiberIds_;
     127  tmpdir_=cf.tmpdir_;
     128  return (*this);
    83129}
    84130
     
    86132ostream& BRConfList::Print(ostream& os)
    87133{
    88   os << " ----- BRConfList:: BaseDir:" << basedir_ << " NBoards= " << boards_.size() << endl;
     134  os << " ----- BRConfList:: BaseDir=" << basedir_ << " TmpDir=" << tmpdir_
     135     << " NBoards= " << boards_.size() << endl;
    89136  for(size_t k=0; k<boards_.size(); k++)  boards_[k].Print(os);
     137  os << " FiberIdString=" << fiberIdsS_ << endl;
    90138  return os;
    91139}
     
    98146
    99147// Classe qui memorise tous les parametres importants de l'acquisition
    100 #define PMAXNBFIBRES 64
    101148
    102149/* --Methode-- */
     
    110157
    111158  FiberListS=fibres;
    112   FiberIdsS="1,2,3,4,5,6,7,8";
    113   for (int ii=0; ii<PMAXNBFIBRES; ii++)  FiberIds.push_back(ii+1);
    114159
    115160  PaqSize=paqsz;
     
    188233
    189234  FiberListS=p.FiberListS;
    190   FiberNum=p.FiberNum;
    191   FiberIdsS=p.FiberIdsS;
    192   FiberIds=p.FiberIds;
     235  fiberNum_=p.fiberNum_;
    193236
    194237  PaqSize=p.PaqSize;
     
    222265  pci2eth_fgdirect=p.pci2eth_fgdirect;
    223266  eths_targets=p.eths_targets;
     267  eths_stargs=p.eths_stargs;
     268  eths_fibtargs=p.eths_fibtargs;
     269
    224270  ethr_nlink=p.ethr_nlink;
    225271  ethr_forcesamefc_=p.ethr_forcesamefc_;
     
    254300  else if(conf.HasKey("fibers"))
    255301    FiberListS= conf.SParam("fibers",0,"1");
    256   if(conf.HasKey("fiberids"))   
    257     FiberIdsS= conf.SParam("fiberids",0,"1");
    258302
    259303  OutPathName= conf.SParam("outpathname",0,"TstAcq");
     
    280324  tcpportid=conf.IParam("tcpportid",0,BRSPORTID);
    281325  if (conf.HasKey("pci2ethdirect"))  pci2eth_fgdirect = true;   // Transfer direct DMA -> Ethernet
    282   if (conf.HasKey("ethrtargets")) {    // Machines destinations des paquets
     326  if (conf.HasKey("ethrtargets")) {    // Machines destinations des paquets - memes destinations pour toutes les fibres
    283327    for(int it=0; it<conf.NbParam("ethrtargets"); it++)
    284       eths_targets.push_back(conf.SParam("ethrtargets",it));
    285   }
     328      eths_stargs.push_back(conf.SParam("ethrtargets",it));
     329  }
     330
     331  const char* ethtf[9]={"ethrtargetsf1","ethrtargetsf2","ethrtargetsf3","ethrtargetsf4",
     332                        "ethrtargetsf5","ethrtargetsf6","ethrtargetsf7","ethrtargetsf8"};
     333  for(int jj=0;jj<8;jj++) {
     334    if (conf.HasKey( ethtf[jj] )) {
     335      vector<string> ftargs;
     336      int fid=jj+1;
     337      for(int it=0; it<conf.NbParam( ethtf[jj] ); it++)
     338        ftargs.push_back(conf.SParam( ethtf[jj] ,it));
     339      eths_fibtargs[fid]=ftargs;     
     340    }
     341  }
     342
    286343  ethr_nlink=conf.IParam("ethrnlink",0,0);   // Nombre de sources de paquets en reception ethernet
    287344  if (conf.HasKey("ethrforcesamefc"))  {
     
    328385  vector<string> fiblist;
    329386  FillVStringFrString(FiberListS, fiblist, ',');
    330   FiberNum.resize(fiblist.size());
     387  fiberNum_.resize(fiblist.size());
    331388  for (int fib=0; fib<fiblist.size(); fib++) {
    332     FiberNum[fib]=atoi(fiblist[fib].c_str());
    333   }
    334   vector<string> fibids;
    335   FillVStringFrString(FiberIdsS, fibids, ',');
    336   for (int fib=0; fib<fibids.size(); fib++) {
    337     FiberIds[fib]=atoi(fibids[fib].c_str());
     389    fiberNum_[fib]=atoi(fiblist[fib].c_str());
     390  }
     391
     392  eths_targets.resize(fiberNum_.size());
     393  for (int fib=0; fib<fiberNum_.size(); fib++) {
     394    map< int, vector<string> >::const_iterator itm=eths_fibtargs.find(fiberNum_[fib]);
     395    if (itm != eths_fibtargs.end())   eths_targets[fib]=itm->second;
     396    else eths_targets[fib]=eths_stargs;
    338397  }
    339398
     
    414473  os << " ------ BRParList::Print() ----- " << endl;
    415474  os << " FiberListS=" << FiberListS ;
    416   os << " FiberIdsS=" << FiberIdsS ;
    417   os << " Fibers (Num->Id): ";
    418   for(size_t f=0; f<NbFibers(); f++)   cout << FiberNum[f] << " -> " << FiberIds[f] << " ; " ;
    419   os << endl;
    420475  os << " PaqSize=" <<PaqSize;
    421476  os << " DMA_Size_kb=" <<dmasizekb << " (EndDMA: Maxkw=" << maxkwedma_ << " NRetry=" << nretrydma_
     
    432487    os << " PaquetSize Reduction, ReducedSize=" << redpqsize << " Offset=" << reducoffset << endl;
    433488  }
    434   if (eths_targets.size()>0)   {
    435     cout << " DMA->Ethernet NbTargets=" << eths_targets.size()
    436          << ((pci2eth_fgdirect)?" (DirectTransferMode) " : " " ) << " :";
    437     for(size_t it=0; it<eths_targets.size(); it++) cout << eths_targets[it] << " , ";
    438     cout << endl;
    439   }
    440   cout << " TCP-PortId=" << tcpportid << " EthernetRead NbSources (=NbLinks)= " << ethr_nlink << endl;
     489  if ((eths_stargs.size()>0)||(eths_fibtargs.size()>0))   {
     490    os << " DMA->Ethernet Targets=" << eths_targets.size()
     491         << ((pci2eth_fgdirect)?" (DirectTransferMode) " : " " ) << endl;
     492   
     493    for(size_t fib=0; fib<eths_targets.size(); fib++) {
     494      os << " Fiber Num=" << fiberNum_[fib] << " --> eth_targets: ";
     495      for(size_t it=0; it<eths_targets[fib].size(); it++)
     496        os << eths_targets[fib][it] << " ; ";
     497    os << endl;
     498    }
     499  }
     500  os << " TCP-PortId=" << tcpportid << " EthernetRead NbSources (=NbLinks)= " << ethr_nlink << endl;
    441501  if (ethr_forcesamefc_)
    442     cout << "EthernetReader mode: ForceSameFrameCounter read mode with Max_PaquetCounterDiff= "
     502    os << "EthernetReader mode: ForceSameFrameCounter read mode with Max_PaquetCounterDiff= "
    443503         << ethr_sfc_maxdpc_ << " MaxNbResync=" << ethr_sfc_maxresync_
    444504         << ((ethr_waitendmsg_)?" Wait_For_END_Message_Before_Terminate ":" ") << endl;
    445505  else
    446     cout << "EthernetReader mode: AllOKPaquets read mode "
     506    os << "EthernetReader mode: AllOKPaquets read mode "
    447507         << ((ethr_waitendmsg_)?" Wait_For_END_Message_Before_Terminate ":" ") << endl;
    448508
     
    483543  config_->Print(os);
    484544  param_->Print(os);
     545  os << " Fibers f: Num->Id  ";
     546  for(size_t f=0; f<NbFibers(); f++)   
     547    os << f << ": " << FiberNum(f) << " -> " << FiberId(f) << " ; " ;
     548  os << endl;
    485549  os << " ----------------------------------------------------- " << endl;
    486550}
     
    501565    memset(cmd,0,1024);
    502566    for (int  i= 0; i< NFibers() ; i++)  {
    503       sprintf(cmd,"mkdir %s%s/Fiber%d",config_->BaseDirectory().c_str(), param_->OutPathName.c_str(),param_->FiberNum[i]);
     567      sprintf(cmd,"mkdir %s%s/Fiber%d",config_->BaseDirectory().c_str(), param_->OutPathName.c_str(),param_->fiberNum_[i]);
    504568      if (system(cmd) < 0) {
    505569        cout << "CreateOutputDirectories()/Error: Can not create subdirectory "
     
    529593{
    530594  char buff[24];
    531   sprintf(buff,"Fiber%d/",param_->FiberNum[ifib]);
     595  sprintf(buff,"Fiber%d/",param_->fiberNum_[ifib]);
    532596  return ( config_->BaseDirectory() + param_->OutPathName + buff );
    533597}
Note: See TracChangeset for help on using the changeset viewer.