Changeset 3658 in Sophya for trunk/AddOn/TAcq/racqurw.h


Ignore:
Timestamp:
Oct 18, 2009, 11:10:33 AM (16 years ago)
Author:
ansari
Message:

1/ Gestion multi-fibre ds RAcqMemZoneMgr et les DMAReader/DiskWriter (brproc.cc)
2/ Possibilite d'ajout de mot cle ds l'entete FITS par la classe MiniFITSFile

Reza , 18/10/2009

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/AddOn/TAcq/racqurw.h

    r3628 r3658  
    2222
    2323
     24// Quelques definitions globales
     25// Nombre maximum de fibres geres par les classes MultiReader / MultiDiskWriter
     26#define MAXNBFIB  4   
    2427
    2528//-------------------------------------------------------
     
    8992class PCIEReaderChecker : public ZThread {
    9093public:
    91   PCIEReaderChecker( PCIEWrapperInterface &pciw , uint_4 sizeFrame,uint_4 paqSize ,RAcqMemZoneMgr& mem,
     94  PCIEReaderChecker( PCIEWrapperInterface &pciw , uint_4 sizeFrame,uint_4 paqSize, RAcqMemZoneMgr& mem,
    9295                     uint_4 nmax=100, BRDataFmtConv swapall=BR_SwapAll); 
    9396  virtual void run();
     
    103106  uint_4 packSize_;
    104107};
     108//------------------------------------------------------------------
     109// Classe thread de lecture PCI-Express multi fibre (ou multi DMA)
     110//------------------------------------------------------------------
     111
     112class PCIEMultiReader : public ZThread {
     113public:
     114  PCIEMultiReader( vector<PCIEWrapperInterface*> vec_pciw , uint_4 sizeFrame,uint_4 paqSize, RAcqMemZoneMgr& mem,
     115                   uint_4 nmax=100, BRDataFmtConv swapall=BR_SwapAll,int binMin=0, int nbBin=0); 
     116  virtual void run();
     117   void Stop();
     118  inline void STOP() { stop_ = true; } 
     119
     120protected:
     121  // Permet d'avancer d'un paquet dans la zone - renvoie true si probleme
     122  inline bool MoveToNextTarget()  {
     123    if ((mmbuf_ == NULL )||(targ_npaq_ >= max_targ_npaq))
     124      if (MZoneManage()) return true;
     125    targ_npaq_++;
     126    return false;
     127  }
     128  inline Byte* GetPaquetTarget(int numfib)  {
     129    if ((mmbufib_[numfib] == NULL )||(targ_npaq_ > max_targ_npaq)||(targ_npaq_ == 0))  return NULL;
     130    Byte* rb=mmbufib_[numfib]+(targ_npaq_-1)*packSizeInMgr_;
     131    return rb;
     132  }
     133  bool MZoneManage(bool clean=false);  // Renvoie true si probleme
     134
     135  RAcqMemZoneMgr& memgr;
     136  uint_4 nmax_;  // Nombre maxi de blocs MemZone traites
     137  BRDataFmtConv swapall_;  // select data swap/format conversion for BRPaquet
     138  bool stop_; 
     139  unsigned int sizeFr_ ;
     140  vector<PCIEWrapperInterface *> vec_pciw_;
     141  uint_4 packSize_;
     142  uint_4 packSizeInMgr_;
     143  uint_4 nbDma_;
     144  int nbBin_;
     145  int binMin_;
     146  int mid_;  // Identificateur zone memoire
     147  uint_4 targ_npaq_;  // Numero de paquet dans une seule zone memoire
     148  uint_4 max_targ_npaq; // =  mmgr.NbPaquets() = Max de targ_npaq_
     149  Byte* mmbuf_;  // Pointeur zone memoire rendu par RAcqMemZoneMgr
     150  Byte* mmbufib_[MAXNBFIB];  // Pointeurs zone memoire de chaque fibre rendu par RAcqMemZoneMgr
     151
     152};
     153
     154
     155
     156//----------------------------------------------------------------------------------------
     157// Classe thread de sauvegarde sur fichiers - gerant plusieurs fibres dans RAcqMemZoneMgr
     158//----------------------------------------------------------------------------------------
     159
     160class MultiDataSaver : public ZThread {
     161public:
     162  MultiDataSaver(RAcqMemZoneMgr& mem, string& path, uint_4 nfiles=100, uint_4 nblocperfile=1, bool savesig=true);
     163
     164  virtual void run();
     165  void Stop();
     166  inline void STOP() { stop_ = true; } 
     167protected:
     168  RAcqMemZoneMgr& memgr;
     169  uint_4 nfiles_;  // Nombre maxi de fichiers cree
     170  uint_4 nblocperfile_;  // Nombre de bloc (zone memoire) mis dans un fichier
     171  uint_4 nmax_;  // Nombre maxi de blocs MemZone traites = nfiles * nblocperfile_
     172  bool savesig_; // Si false, pas d'ecriture des fichiers FITS du signal
     173  bool stop_; 
     174  string path_; 
     175  struct sigaction act;
     176 
     177};
    105178
    106179#endif
Note: See TracChangeset for help on using the changeset viewer.