source: Sophya/trunk/AddOn/TAcq/pciewrap.cc@ 3921

Last change on this file since 3921 was 3911, checked in by ansari, 15 years ago

debug/amelioration print pour les modifs pour preparation Pittsburgh-Nov2010, Reza 21/11/2010

File size: 2.9 KB
RevLine 
[3537]1#include "pciewrap.h"
[3623]2#include "brpaqu.h"
[3537]3
[3623]4#include "racqumem.h"
5
[3537]6#include <stdlib.h>
7#include <stdio.h>
[3639]8#include <string.h>
[3537]9#include <math.h>
10#include <iostream>
11
[3683]12using namespace SOPHYA;
13
[3909]14//-----------------------------------------------------------------------
15// Classe PCIEWrapperInterface ( virtuelle pure )
16//-----------------------------------------------------------------------
17
[3628]18/* --Methode-- */
[3909]19PCIEWrapperInterface::PCIEWrapperInterface()
20{
21 SetMaxWaitEndDMA();
22}
23
24/* --Methode-- */
25PCIEWrapperInterface::~PCIEWrapperInterface()
26{
27}
28
29/* --Methode-- */
30unsigned long PCIEWrapperInterface::SetMaxWaitEndDMA(unsigned int maxkwedma, unsigned int nretry)
31{
32 if (maxkwedma>1) { maxwaitenddmaloop_=maxkwedma*1000; maxretryenddma_=nretry; }
33 return maxwaitenddmaloop_;
34}
35
36//------------------------------------------------------------------
37// Classe TestPCIWrapperNODMA : genere des paquets sans appel au DMA
38//------------------------------------------------------------------
39/* --Methode-- */
[3645]40TestPCIWrapperNODMA::TestPCIWrapperNODMA(UInt32 sz, double lossrate)
[3628]41 : PCIEWrapperInterface() , size_(sz)
[3537]42{
[3623]43 data_ = new Byte[size_];
[3631]44 srcdata_ = new Byte[10*size_];
45 for(UInt32 kk=0; kk<10*size_; kk++)
46 srcdata_[kk] = (Byte)(kk%200+20);
[3623]47 frame_counter_ = 0;
48 timetag_ = 0;
[3645]49 tottransfer_ = 0;
[3909]50 if (lossrate<0.) lossrate=-lossrate;
51 max_frcount_=(UInt32)lossrate;
52 lossrate_ = lossrate-(double)max_frcount_;
53 if (lossrate_<1.e-9) lossrate_=0.;
54 cout << " TestPCIWrapperNODMA(PaqSz=" << sz << ",LossRate=" << lossrate
55 << " MaxFrameCount=" << max_frcount_ << ")" << endl;
[3537]56}
57
[3628]58/* --Methode-- */
[3623]59TestPCIWrapperNODMA::~TestPCIWrapperNODMA()
[3537]60{
[3631]61 delete[] data_;
62 delete[] srcdata_;
[3537]63}
64
[3628]65/* --Methode-- */
[3623]66UInt32 TestPCIWrapperNODMA::TransferSize()
67{
68 return size_;
69}
[3537]70
[3628]71/* --Methode-- */
[3623]72UInt64 TestPCIWrapperNODMA::TotTransferBytes()
73{
74 return tottransfer_;
75}
[3537]76
[3628]77/* --Methode-- */
[3643]78Byte* TestPCIWrapperNODMA::GetData()
[3537]79{
[3911]80 if ((max_frcount_>0)&&(frame_counter_>max_frcount_)) return NULL;
[3909]81 if (lossrate_ > 1.e-9) {
[3645]82 UInt32 dfc = 1;
83 while (rg_.Flat01()<lossrate_) dfc++;
84 frame_counter_ += dfc;
85 }
86 else frame_counter_ ++;
[3623]87 timetag_ = frame_counter_ * size_ / 2;
88 BRPaquet paq(data_, size_);
89 paq.SetHDRMarker64(pchk_.HDRTag());
90 paq.SetTRLMarker64(pchk_.TRLTag());
[3671]91 UInt16 cfc = (frame_counter_%65535);
92 paq.SetFrameCounter(cfc);
[3623]93 paq.SetTimeTag(timetag_);
94 paq.SetPaqLen((UInt16)((size_ - BRHDRSIZE - BRTRLSIZE)/4));
95 Byte* bp = paq.Data1();
[3625]96/*
[3623]97 for(UInt32 kk=0; kk<paq.DataSize(); kk++)
98 bp[kk] = (Byte)(sin(0.0345*kk)*78.+127.5);
[3626]99 UInt32 kkmax = paq.DataSize();
100 for(UInt32 kk=0; kk<kkmax; kk++)
[3625]101 bp[kk] = (Byte)(kk%200+20);
[3631]102*/
103 UInt32 off = (frame_counter_*size_/3)%(9*size_);
104 memcpy(bp, srcdata_+off, paq.DataSize());
[3623]105 tottransfer_ += size_;
106 return data_;
[3537]107}
108
[3628]109/* --Methode-- */
[3623]110void TestPCIWrapperNODMA::PrintStatus(ostream& os)
[3537]111{
[3623]112 os << "TestPCIWrapperNODMA::Status, FrameCounter=" << frame_counter_
113 << " TimeTag=" << timetag_ << endl;
[3639]114}
Note: See TracBrowser for help on using the repository browser.