Changeset 3658 in Sophya for trunk/AddOn/TAcq/racqumem.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/racqumem.h

    r3635 r3658  
    3131} St_MemZ;
    3232
     33
    3334// Les flags (bits) correspondant aux operations effectuees sur une zone
    3435// Free->libre, Filled->rempli(par DMA), Saved(ecrit sur disque), Proc(Traitement)
     
    3940enum MemZaction { MemZA_None=0, MemZA_Fill=1, MemZA_Save=2, MemZA_Proc=4,
    4041                  MemZA_ProcA=8, MemZA_ProcB=16, MemZA_ProcC=32 };
     42
     43// configuration du RAcqMemZoneMgr
     44enum MemZconfig { MemZConf_SingleFiberDataOnly=0, MemZConf_MultiFiberDataOnly=1,
     45                  MemZConf_SingleFiberProcDataOnly=2, MemZConf_MultiFiberProcDataOnly=3,
     46                  MemZConf_SingleFiberDataAndProcData=4, MemZConf_MultiFiberDataAndProcData=5 };
     47// L'etat d'execution en cours : running, waiting, stopped
     48enum MemZRunState { MemZR_Running=0, MemZR_Waiting=1, MemZR_Stopped=2};
     49
     50
    4151
    4252// -------------------------------------------------------------------
     
    4959//     Si procpsz>0 , on alloue aussi des zones memoire pour donnees traitees
    5060//      dans ce cas, procpsz à la taille memoire des donnees traites pour chaque paquet
    51   RAcqMemZoneMgr(uint_4 nz, uint_4 np=256, uint_4 psz=4096, uint_4 procpsz=0);
     61// Constructeur 1 : l'objet ne contient que les donnees d'une fibre
     62//                  garde pour maintenir la compatibilite avec version TAcq v <= 6.0
     63  RAcqMemZoneMgr(uint_4 nz, uint_4 np, uint_4 psz);
     64// Constructeur 2 : l'objet peut contenir plusieurs fibres, et des donnees processes en plus
     65  RAcqMemZoneMgr(uint_4 nzon, uint_4 nfib, uint_4 npaq, uint_4 paqsz, uint_4 procsz=0);
     66
    5267  ~RAcqMemZoneMgr();
    5368 
     69  // Retourne le nombre de fibres dans chaque zone
     70  inline uint_4 NbZones() { return nzones; }
    5471  // Retourne le nombre de zones memoire
    55   inline uint_4 NbZones() { return nzones; }
     72  inline uint_4 NbFibres() { return nfibres; }
    5673  // Retourne la taille de paquet
    5774  inline uint_4 PaqSize() { return paqsz; }
     
    5976  inline uint_4 NbPaquets() { return npaq; }
    6077  // Retourne la taille totale d'une zone
    61   inline uint_4 ZoneSize() { return npaq*paqsz; }
     78  inline uint_4 ZoneSize() { return nfibres*npaq*paqsz; }
     79  inline uint_4 OneFiberZoneSize() { return npaq*paqsz; }
    6280
    6381  // Retourne la taille de la zone memoire correspondant aux donnees traitees d'un paquet
    6482  inline uint_4 ProcPaqSize() { return procpaqsz; }
    6583  // Retourne la taille totale d'une zone de donnees traitees
    66   inline uint_4 ProcZoneSize() { return npaq*procpaqsz; }
    67  
     84  inline uint_4 ProcZoneSize() { return nfibres*npaq*procpaqsz; }
     85  inline uint_4 OneFiberProcZoneSize() { return npaq*procpaqsz; }
     86
    6887  // Definit l'etat des operations obligatoires avant qu'une zone
    6988  // remplie ne puisse etre recyclee (re-remplie)
     
    7695  // Libere une zone memoire en marquant son etat
    7796  int FreeMemZone(int id, MemZStatus st);
    78   // Retourne le pointeur de la zone numero k
     97  // Retourne le pointeur de la zone numero k pour les datas
     98
     99  // Retourne le pointeur de la zone numero k pour les datas pour une fibre donnee
     100  inline Byte* GetMemZone(int id, int fib)  {
     101    if ((id < 0) || (id >=(int) memzones.size()))  return NULL;
     102    if ((fib < 0) || (fib >=(int) nfibres))  return NULL;
     103    return memzones[id]+fib*OneFiberZoneSize(); 
     104    }
     105  // Retourne le pointeur de la zone numero k pour les resultats de traitement pour une fibre donnee
     106  inline Byte* GetProcMemZone(int id, int fib)  {
     107    if ((id < 0) || (id >=(int) procmemzones.size()))  return NULL;
     108    return procmemzones[id]+fib*OneFiberProcZoneSize(); 
     109    }
     110  // Retourne le pointeur de la zone numero k pour les datas
    79111  inline Byte* GetMemZone(int id)  {
    80112    if ((id < 0) || (id >=(int) memzones.size()))  return NULL;
    81113    return memzones[id]; 
    82114    }
     115  // Retourne le pointeur de la zone numero k pour les resultats de traitement
    83116  inline Byte* GetProcMemZone(int id)  {
    84117    if ((id < 0) || (id >=(int) procmemzones.size()))  return NULL;
     
    87120 
    88121  ostream& Print(ostream& os);
     122
    89123  void Stop();
    90        
     124  inline MemZRunState GetRunState()
     125    { return runstate_; }
     126  inline MemZRunState ChangeRunState( MemZRunState st)
     127    { runstate_ = st; return runstate_; }
     128
    91129protected:
     130  void Init();  // Fait l'allocation des differents buffers - est appele par les constructeurs
     131
    92132  // ... variables membres
    93133  ZMutex mex;   
    94   uint_4 nzones, npaq, paqsz, procpaqsz;
     134  uint_4  nzones, nfibres, npaq, paqsz, procpaqsz;
    95135//  DMAMgrInterface &dma_;
    96136  vector< Byte* > memzones;
     
    98138  vector< Byte* > procmemzones;
    99139  bool stop_;
     140  MemZRunState runstate_;
    100141  uint_4 mask_finalized_;
    101142  uint_8 serial_; 
Note: See TracChangeset for help on using the changeset viewer.