Index: trunk/AddOn/TAcq/racqumem.h
===================================================================
--- trunk/AddOn/TAcq/racqumem.h	(revision 3658)
+++ trunk/AddOn/TAcq/racqumem.h	(revision 3683)
@@ -11,33 +11,35 @@
 
 
-#include "machdefs.h"
+#include "zthread.h"
 #include <string>
 #include <vector>
 #include <iostream>
-#include "sopnamsp.h"
-#include "zthread.h"
-// #include "dmamgrintf.h"
 #include "brtypes.h"
-#include "pciewrap.h"
+
 using namespace std;
 
-// Structure de gestion utilisee par la classe RAcqMemMgr
-typedef struct {
-  uint_8 serial;    // Numero de serie permettant d'ordonner en temps les zones memoire rempli
-  uint_4 act;       // Indique l'action en cours sur une zone Fill,Save ...
-  uint_4 stat;      // Champ de flag (bits) indiquant les operations effectuees sur la zone
-  uint_4 nbact[6];  // compteurs nb de fois ou (fill,save,proc,procA/B/C) a ete effectuee sur la zone 
-//  int tid;        Pas utilise pour le moment, permet l'identification du thread operant sur la zone
-} St_MemZ;
-
+//-----------------------------------------------------------------------
+// Projet BAORadio - (C) LAL/IRFU  2008-2010
+//  Structures de gestion memoire et synchronisation inter-threads
+//-----------------------------------------------------------------------
 
 // Les flags (bits) correspondant aux operations effectuees sur une zone
-// Free->libre, Filled->rempli(par DMA), Saved(ecrit sur disque), Proc(Traitement)
-// ProcA/B/C : Trois traitement qui doivent s'enchainer 
+// + Free : libre, 
+// + Filled : rempli (par DMA ou lecture fits)
+// + Saved : ecrit sur disque
+// + Proc : traite (utilise principalement pour le monitoring durant l'acquisition)
+// + ProcA/B/C/D/E/F : Un maximum de SIX traitements qui peuvent s'enchainer 
+// + ProcSaved : ecrit sur disque apres traitement
+
 enum MemZStatus { MemZS_Free=0, MemZS_Filled=1, MemZS_Saved=2, MemZS_Proc=4, 
-                  MemZS_ProcA=8, MemZS_ProcB=16, MemZS_ProcC=32 };
-// L'action en cours sur une zone 
+                  MemZS_ProcA=8, MemZS_ProcB=16, MemZS_ProcC=32,
+                  MemZS_ProcD=64, MemZS_ProcE=128, MemZS_ProcF=256,
+                  MemZS_SavedProc=16384 };
+
+// L'action en cours sur une zone (associe aux flags MemZStatus ci-dessus)
 enum MemZaction { MemZA_None=0, MemZA_Fill=1, MemZA_Save=2, MemZA_Proc=4, 
-                  MemZA_ProcA=8, MemZA_ProcB=16, MemZA_ProcC=32 };
+                  MemZA_ProcA=8, MemZA_ProcB=16, MemZA_ProcC=32,
+                  MemZA_ProcD=64, MemZA_ProcE=128, MemZA_ProcF=256,
+                  MemZA_SaveProc=16384 };
 
 // configuration du RAcqMemZoneMgr 
@@ -48,4 +50,15 @@
 enum MemZRunState { MemZR_Running=0, MemZR_Waiting=1, MemZR_Stopped=2};
 
+
+// --------------------------------------------------------------------
+// Structure de gestion utilisee par la classe RAcqMemMgr
+#define MXNACTMZM  10
+typedef struct {
+  uint_8 serial;    // Numero de serie permettant d'ordonner en temps les zones memoire rempli
+  uint_4 act;       // Indique l'action en cours sur une zone Fill,Save ...
+  uint_4 stat;      // Champ de flag (bits) indiquant les operations effectuees sur la zone
+  uint_4 nbact[MXNACTMZM];  // compteurs nb de fois ou (fill,save,proc,procA/B/C) a ete effectuee sur la zone 
+//  int tid;        Pas utilise pour le moment, permet l'identification du thread operant sur la zone
+} St_MemZ;
 
 
@@ -91,9 +104,14 @@
   inline uint_4 GetFinalizedMask() { return mask_finalized_; }
 
-  // Retourne un MemZone disponible pour une action specifique
+  // Definit l'etat des operations obligatoires avant qu'une zone 
+  // ne puissent etre sauvee apres traitement (subir l'action ProcSaved) 
+  inline void   SetProcSavedReadyMask(uint_4 mask=((uint_4)MemZS_ProcA))
+    { mask_saveproc_ready_ = mask; }
+  inline uint_4 GetProcSavedReadyMask() { return mask_saveproc_ready_; }
+
+  // Retourne l'identificateur d'une zone memoire disponible pour une action specifique
   int FindMemZoneId(MemZaction act);
   // Libere une zone memoire en marquant son etat
   int FreeMemZone(int id, MemZStatus st);
-  // Retourne le pointeur de la zone numero k pour les datas
 
   // Retourne le pointeur de la zone numero k pour les datas pour une fibre donnee
@@ -120,5 +138,7 @@
   
   ostream& Print(ostream& os);
+  inline ostream& Print() { return Print(cout); }
 
+  // Pour controler l'etat d'execution global 
   void Stop(); 
   inline MemZRunState GetRunState() 
@@ -131,5 +151,5 @@
 
   // ... variables membres
-  ZMutex mex;   
+  SOPHYA::ZMutex mex;   
   uint_4  nzones, nfibres, npaq, paqsz, procpaqsz;
 //  DMAMgrInterface &dma_;
@@ -140,4 +160,5 @@
   MemZRunState runstate_;
   uint_4 mask_finalized_;
+  uint_4 mask_saveproc_ready_;
   uint_8 serial_;  
 };
