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

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

Modifications et ameliorations diverses pour programme acquisition/traitement multifibres

Reza 22/05/2009

1- Extension/amelioration classe BRPaquet et BRPaqChecker
2- Correction BUG dans RAcqMemZoneMgr bloquant l'utilisation a une seule zone memoire
3- Classe PCIEWrapper devenue virtuelle pure et introduction de la classe TestPCIWrapperNODMA
pour les smulations.

File size: 2.2 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//----------------------------------------------------------------
8
9
10#include "machdefs.h"
11#include <string>
12#include <vector>
13#include <iostream>
14#include "sopnamsp.h"
15#include "zthread.h"
16// #include "dmamgrintf.h"
17#include "brtypes.h"
18#include "pciewrap.h"
19using namespace std;
20
21// Structure de gestion utilisee par la classe RAcqMemMgr
22typedef struct {
23 uint_4 act;
24 uint_4 stat;
25 uint_4 nbact[3];
26// int tid;
27} St_MemZ;
28
29enum MemZStatus { MemZS_Free=0, MemZS_Filled=1, MemZS_Saved=2, MemZS_Proc=4 };
30enum MemZaction { MemZA_None=0, MemZA_Fill=1, MemZA_Save=2, MemZA_Proc=4};
31
32// -------------------------------------------------------------------
33// Structure de gestion de zones memoire partagee (des vecteurs) entre
34// threads - qui doivent operer successivement sur les vecteurs
35// -------------------------------------------------------------------
36class RAcqMemZoneMgr {
37public:
38// Constructeur, classe dma, nz=Nb de zones, np=Nb de paquets/zone , psz=taille de paquet
39 RAcqMemZoneMgr(uint_4 nz, uint_4 np=1000, uint_4 psz=4096);
40 ~RAcqMemZoneMgr();
41
42 // Retourne le nombre de zones memoire
43 inline uint_4 NbZones() { return nzones; }
44 // Retourne la taille de paquet
45 inline uint_4 PaqSize() { return paqsz; }
46 // Retourne le nb de paquets dans une zone
47 inline uint_4 NbPaquets() { return npaq; }
48 // Retourne la taille totale d'une zone
49 inline uint_4 ZoneSize() { return npaq*paqsz; }
50
51
52 // Retourne un MemZone disponible pour une action specifique
53 int FindMemZoneId(MemZaction act);
54 // Libere une zone memoire en marquant son etat
55 int FreeMemZone(int id, MemZStatus st);
56 // Retourne le pointeur de la zone numero k
57 inline Byte* GetMemZone(int id) {
58 if ((id < 0) || (id >=(int) memzones.size())) return NULL;
59 return memzones[id];
60 }
61
62 ostream& Print(ostream& os);
63 void Stop();
64
65protected:
66 // ... variables membres
67 ZMutex mex;
68 uint_4 nzones, npaq, paqsz;
69// DMAMgrInterface &dma_;
70 vector< Byte* > memzones;
71 vector< St_MemZ > states;
72 bool stop_;
73};
74
75
76
77
78#endif
Note: See TracBrowser for help on using the repository browser.