source: Sophya/trunk/AddOn/TAcq/racqumem.h@ 3631

Last change on this file since 3631 was 3629, checked in by ansari, 16 years ago

Petites corrections suite compil avec windriver, Reza 21/05/2009

File size: 3.5 KB
Line 
1#ifndef RACQUMEM_H_SEEN
2#define RACQUMEM_H_SEEN
3
4//----------------------------------------------------------------
5// ---- classes de gestion memoire pour acquisition BAORadio -----
6// LAL - R. Ansari - Juin/Juillet 2008
7// Modifs Mai 2009
8// - Introduction du numero d'ordre de remplissage
9// - Introduction de mask de recyclage et sequence de traitement procA/B/C
10//----------------------------------------------------------------
11
12
13#include "machdefs.h"
14#include <string>
15#include <vector>
16#include <iostream>
17#include "sopnamsp.h"
18#include "zthread.h"
19// #include "dmamgrintf.h"
20#include "brtypes.h"
21#include "pciewrap.h"
22using namespace std;
23
24// Structure de gestion utilisee par la classe RAcqMemMgr
25typedef struct {
26 uint_8 serial; // Numero de serie permettant d'ordonner en temps les zones memoire rempli
27 uint_4 act; // Indique l'action en cours sur une zone Fill,Save ...
28 uint_4 stat; // Champ de flag (bits) indiquant les operations effectuees sur la zone
29 uint_4 nbact[6]; // compteurs nb de fois ou (fill,save,proc,procA/B/C) a ete effectuee sur la zone
30// int tid; Pas utilise pour le moment, permet l'identification du thread operant sur la zone
31} St_MemZ;
32
33// Les flags (bits) correspondant aux operations effectuees sur une zone
34// Free->libre, Filled->rempli(par DMA), Saved(ecrit sur disque), Proc(Traitement)
35// ProcA/B/C : Trois traitement qui doivent s'enchainer
36enum MemZStatus { MemZS_Free=0, MemZS_Filled=1, MemZS_Saved=2, MemZS_Proc=4,
37 MemZS_ProcA=8, MemZS_ProcB=16, MemZS_ProcC=32 };
38// L'action en cours sur une zone
39enum MemZaction { MemZA_None=0, MemZA_Fill=1, MemZA_Save=2, MemZA_Proc=4,
40 MemZA_ProcA=8, MemZA_ProcB=16, MemZA_ProcC=32 };
41
42// -------------------------------------------------------------------
43// Classe de gestion de zones memoire partagee (des buffers) entre
44// threads - qui doivent operer successivement sur les vecteurs
45// -------------------------------------------------------------------
46class RAcqMemZoneMgr {
47public:
48// Constructeur, nz=Nb de zones, np=Nb de paquets/zone , psz=taille de paquet
49 RAcqMemZoneMgr(uint_4 nz, uint_4 np=256, uint_4 psz=4096);
50 ~RAcqMemZoneMgr();
51
52 // Retourne le nombre de zones memoire
53 inline uint_4 NbZones() { return nzones; }
54 // Retourne la taille de paquet
55 inline uint_4 PaqSize() { return paqsz; }
56 // Retourne le nb de paquets dans une zone
57 inline uint_4 NbPaquets() { return npaq; }
58 // Retourne la taille totale d'une zone
59 inline uint_4 ZoneSize() { return npaq*paqsz; }
60
61 // Definit l'etat des operations obligatoires avant qu'une zone
62 // remplie ne puisse etre recyclee (re-remplie)
63 inline void SetFinalizedMask(uint_4 mask=((uint_4)MemZS_Saved))
64 { mask_finalized_ = mask; }
65 inline uint_4 GetFinalizedMask() { return mask_finalized_; }
66
67 // Retourne un MemZone disponible pour une action specifique
68 int FindMemZoneId(MemZaction act);
69 // Libere une zone memoire en marquant son etat
70 int FreeMemZone(int id, MemZStatus st);
71 // Retourne le pointeur de la zone numero k
72 inline Byte* GetMemZone(int id) {
73 if ((id < 0) || (id >=(int) memzones.size())) return NULL;
74 return memzones[id];
75 }
76
77 ostream& Print(ostream& os);
78 void Stop();
79
80protected:
81 // ... variables membres
82 ZMutex mex;
83 uint_4 nzones, npaq, paqsz;
84// DMAMgrInterface &dma_;
85 vector< Byte* > memzones;
86 vector< St_MemZ > states;
87 bool stop_;
88 uint_4 mask_finalized_;
89 uint_8 serial_;
90};
91
92
93
94
95#endif
Note: See TracBrowser for help on using the repository browser.