source: Sophya/trunk/AddOn/TAcq/racqueth.h@ 3765

Last change on this file since 3765 was 3764, checked in by ansari, 15 years ago

Suppression du parametre taille des blocs pour transfert ethernet ds le code pour les classes PCIEToEthernet et EthernetReader, Reza 03/05/2010

File size: 4.7 KB
Line 
1#ifndef RACQUETH_H_SEEN
2#define RACQUETH_H_SEEN
3
4//----------------------------------------------------------------
5// ---- classes de threads pour lecture/ecriture des paquets (transfert DMA)
6// et ecriture disque pour acquisition BAORadio -----
7// LAL - R. Ansari - Juin/Juillet 2008
8//----------------------------------------------------------------
9
10#include "racqumem.h"
11#include <string>
12#include <vector>
13#include <iostream>
14#include "sopnamsp.h"
15#include "zthread.h"
16#include "pciewrap.h"
17#include "swrapsock.h"
18#include "brtypes.h"
19#include "brpaqu.h"
20#include "brparam.h"
21#include "minifits.h"
22
23using namespace std;
24
25// Quelques definitions globales
26// Nombre maximum de fibres geres par les classes PCIEToEthernet ...
27// ATTENTION cette definition (MAXANAFIB) se trouve dans plusieurs fichiers
28#ifndef MAXNBFIB
29#define MAXNBFIB 16
30#endif
31// ATTENTION cette definition (MAXANAFIB) se trouve dans plusieurs fichiers
32#ifndef MAXANAFIB
33#define MAXANAFIB 32
34#endif
35
36#ifndef BRSPORTID
37#define BRSPORTID 6912
38#endif
39#ifndef BRTCPMSGLEN
40#define BRTCPMSGLEN 128
41#endif
42#ifndef BRTCPMSGLEN2
43#define BRTCPMSGLEN2 64
44#endif
45
46
47//----------------------------------------------------------------------------------
48// Classe thread de lecture PCI-Express et recopie sur interface reseau (Ethernet)
49//----------------------------------------------------------------------------------
50
51class PCIEToEthernet : public ZThread {
52public:
53 PCIEToEthernet(vector<PCIEWrapperInterface*> vec_pciw , vector<string>& destname, BRParList const& par, int portid=BRSPORTID);
54 virtual ~PCIEToEthernet();
55 virtual void run();
56 void Stop();
57 inline void STOP() { stop_ = true; }
58
59 inline int SetPrintLevel(int lev=0) { prtlev_=lev; return 0;}
60
61protected:
62 virtual size_t SendToTargets(int fib, Byte* data, size_t len);
63
64 BRParList par_; // Parametres divers d'acquisition
65
66 uint_8 nmaxpaq_; // Nombre maxi de paquets traites
67 BRDataFmtConv swapall_; // select data swap/format conversion for BRPaquet
68 bool stop_;
69 unsigned int sizeFr_ ;
70 vector<PCIEWrapperInterface *> vec_pciw_;
71 vector<string> destname_;
72 int tcpportid_;
73 vector< vector<ClientSocket> > vvec_skt_;
74 vector< uint_4 > vec_cntpaq_;
75 uint_4 packSize_;
76 uint_4 packSizeInMgr_;
77 uint_4 nbDma_;
78 uint_8 totrdsnd_;
79 bool fgdirectsend_; // true -> direct transfer of DMA data to ethernet
80
81 int prtlev_;
82};
83
84//------------------------------------------------------------------
85// Classe thread de lecture sur interface reseau (Ethernet)
86//------------------------------------------------------------------
87class EthernetReader : public ZThread {
88public:
89 EthernetReader(RAcqMemZoneMgr& mem, BRParList const& par, int portid=BRSPORTID, bool rdsamefc=false);
90 virtual void run();
91 inline void Stop() { stop_ = true; }
92 inline void STOP() { stop_ = true; }
93
94 inline int SetPrintLevel(int lev=0) { prtlev_=lev; return 0;}
95
96protected:
97 bool ReadNextAllFibers(); // Renvoie true si probleme
98 bool ReadNext(int fib); // Renvoie true si probleme
99 size_t ReceiveFromSocket(int fib, char* data, size_t len);
100
101 // Permet d'avancer d'un paquet dans la zone - renvoie true si probleme
102 inline bool MoveToNextTarget() {
103 if ((mmbuf_ == NULL )||(targ_npaq_ >= max_targ_npaq))
104 if (MZoneManage()) return true;
105 targ_npaq_++;
106 return false;
107 }
108 inline Byte* GetPaquetTarget(int numfib) {
109 if ((mmbufib_[numfib] == NULL )||(targ_npaq_ > max_targ_npaq)||(targ_npaq_ == 0)) return NULL;
110 Byte* rb=mmbufib_[numfib]+(targ_npaq_-1)*packsize_;
111 return rb;
112 }
113 bool MZoneManage(bool clean=false); // Renvoie true si probleme
114
115 RAcqMemZoneMgr& memgr_;
116 BRParList par_; // Parametres divers d'acquisition
117 int tcpportid_;
118 vector< Socket > vsok_; // Les sockets de lecture pour chaque fibre/lien
119 vector< uint_4 > vec_cntpaq_;
120 bool stop_;
121 bool rdsamefc_; // if true, read paquets with same value of FrameCounter on different fibers/link
122 uint_8 totnbytesrd_;
123 uint_8 totnpaqrd_;
124 uint_8 totsamefc_; // nombre total de paquets avec meme framecounter
125
126 vector<BRPaquet> vpaq_;
127 vector<BRPaqChecker> vpchk_;
128 vector<uint_8> curfc_; // Numeros des FrameCounter des paquets courants
129 vector<uint_8> totnpqrd_; // nombre total de paquets lus / lien
130 vector<uint_8> totnpqok_; // nombre total de paquets OK / lien
131
132 uint_4 packsize_;
133 int mid_; // Identificateur zone memoire
134 uint_4 targ_npaq_; // Numero de paquet dans une seule zone memoire
135 uint_4 max_targ_npaq; // = mmgr.NbPaquets() = Max de targ_npaq_
136 Byte* mmbuf_; // Pointeur zone memoire rendu par RAcqMemZoneMgr
137 Byte* mmbufib_[MAXANAFIB]; // Pointeurs zone memoire de chaque fibre rendu par RAcqMemZoneMgr
138
139 int prtlev_;
140};
141
142
143
144#endif
Note: See TracBrowser for help on using the repository browser.