Changeset 3671 in Sophya


Ignore:
Timestamp:
Nov 13, 2009, 11:54:04 AM (16 years ago)
Author:
ansari
Message:
  • Nettoyage complet des programmes d'acquisition
  • Ajout methode BRPaquet::CopyFrom() pour reduction de paquet
  • Introduction des classes BRParList , BRConfList , BRAcqConfig
  • Introduction du nouveau programme acquisition mfacq.cc (MultiFibresAcq)

Reza, 13/11/2009

Location:
trunk/AddOn/TAcq
Files:
5 added
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/AddOn/TAcq/brpaqu.cc

    r3659 r3671  
    33#include "brpaqu.h"
    44
     5/* ----------------------------------------
     6     Projet BAORadio --- LAL - 2008-2010
     7     R. Ansari , M.Taurigna
     8-------------------------------------------  */
     9
     10/* --Methode-- */
     11BAORadioException::BAORadioException(const char * m)   throw()
     12{
     13  if (m!=NULL) {
     14    strncpy(msg_, m, BREX_MAXMSGLEN-1);
     15    msg_[BREX_MAXMSGLEN-1] = '\0';
     16  }
     17  else msg_[0] = '\0';
     18}
     19/* --Methode-- */
     20BAORadioException::BAORadioException(const string& m)   throw()
     21{
     22  strncpy(msg_, m.c_str(), BREX_MAXMSGLEN-1);
     23  msg_[BREX_MAXMSGLEN-1] = '\0';
     24}
     25
     26/* --Methode-- */
     27BAORadioException::~BAORadioException()  throw()
     28{
     29}
     30
     31/* --Methode-- */
     32const char* BAORadioException::what() const throw()
     33{
     34  return msg_;
     35}
     36
     37/* --Methode-- */
     38string const BAORadioException::Msg() const
     39{
     40  return (string(msg_));
     41}
     42
     43////////////////////////////////////////////////////////////////
     44////////////////////////////////////////////////////////////////
    545
    646static inline void bswap4(void* p)
     
    1454
    1555/* --Methode__ */
    16 BRPaquet::BRPaquet(Byte* src, Byte* dst, int paqsz, BRDataFmtConv fgswap,int binMin,int nbBin )
     56BRPaquet::BRPaquet(Byte* src, Byte* dst, int paqsz, BRDataFmtConv fgconv)
    1757  // swapall = true -> on swap tout le paquet, sinon swap entete seulement
    1858{
    1959  dst_ = dst;
    2060  sz_ = paqsz;
    21   if ((src == NULL) || (dst == NULL)) return;
    22   // Il faut mettre une protection (throw) si dst==NULL ou sz==0
     61  /*
     62  if ((dst == NULL) || (paqsz<=(BRHDRSIZE+BRTRLSIZE)) )
     63    throw BAORadioException("BRPaquet::BRPaquet(src,dst...) NULL src or dst pointer OR paqsz<HDR+TRLSize");
     64  */
     65  if ((dst==NULL)||(src==NULL))  return;
    2366
    2467  UInt32* src32 = (UInt32*)src;
    2568  UInt32* dst32 = (UInt32*)dst;
    26   Byte* tmp = new Byte[sz_];
    2769 
    28   switch ( fgswap ) {
     70 
     71  switch ( fgconv ) {
    2972  case BR_DoNothing :  // rien a faire
    3073    break;
     
    3275    memcpy(dst_, src, sz_);
    3376    break;
    34   case BR_Copy_Reduc : // copie directe
    35    memcpy(dst_, src, HeaderSize());
    36    
    37     memcpy(dst_+ HeaderSize(), src+(binMin+ HeaderSize()), nbBin);
    38    memcpy(dst_+ (HeaderSize()+ nbBin ), src+(binMin+ HeaderSize()+sz_/2), nbBin);
    39    memcpy(dst_+( HeaderSize()+( 2* nbBin)),src+(HeaderSize()+DataSize()),TrailerSize());
    40  
    41     SetPaqLen( nbBin/2);
    42    break;
    43    
    4477  case BR_Swap32 : // On swappe toutes les donnees du paquet
    4578  //  les bytes sont dans l'ordre par paquet de 4 octets (Int32) , les deux Int32 de
    46   // On copie la zone donnees en faisant un byte-swap correspondant a 8 octets (4->8 Reza/firmware SGDMA) 
     79  // On copie la zone donnees en faisant un byte-swap correspondant a 8 octets (4->8 Reza/firmware SGDMA)
    4780    for(int ka=0; ka<sz_/4; ka+=2) {
    4881      dst32[ka] = src32[ka+1];
     
    5184    break;
    5285  case BR_SwapAll:
    53   for(int ka=0; ka<sz_; ka+=8) {
     86    // Byte swap complet sur 8 bytes
     87    for(int ka=0; ka<sz_; ka+=8) {
    5488      for(int kb=0; kb<4; kb++) {
    5589        dst_[ka+kb] = src[ka+3-kb+4];   
     
    5791      }
    5892    }
    59   for(int ka=HeaderSize()+DataSize(); ka<sz_; ka+=8) {
     93    break;
     94  case BR_CopyHDR:
     95    for(int ka=0; ka<BRHDRSIZE/4; ka++)  dst32[ka] = src32[ka];
     96    for(int ka=(HeaderSize()+DataSize())/4;ka < sz_/4; ka++)  dst32[ka] = src32[ka];
     97    break;
     98  case BR_SwapHDR :
     99    // ByteSwap 8 (4->8 Reza/firmware SGDMA) de l'enete
     100    for(int ka=0; ka<BRHDRSIZE; ka+=8) {
    60101      for(int kb=0; kb<4; kb++) {
    61102        dst_[ka+kb] = src[ka+3-kb+4];   
     
    63104      }
    64105    }
    65     break;
    66   case BR_SwapHDR :
     106    // Byte swap (sur 8 octets) du trailer
     107    for(int ka=HeaderSize()+DataSize(); ka<sz_; ka+=8) {
     108      for(int kb=0; kb<4; kb++) {
     109        dst_[ka+kb] = src[ka+3-kb+4];   
     110        dst_[ka+kb+4] = src[ka+3-kb];   
     111      }
     112    }
     113    break;
     114
     115    //  --------------------
     116    //  --- Copie/remise en ordre des donnees FFT
    67117  case BR_FFTOneChan :
    68118  case BR_FFTTwoChan :
     119    // copie du header uniquement
     120    for(int ka=0; ka<BRHDRSIZE/4; ka++)  dst32[ka] = src32[ka];
     121    // on reoordonne les coeff FFT (pas de swap)
     122    if (fgconv == BR_FFTOneChan)
     123      ReorderFFTData((SByte*)(src+HeaderSize()), (SByte*)(dst_+HeaderSize()), DataSize());
     124    else  {
     125      ReorderFFTData((SByte*)(src+HeaderSize()), (SByte*)(dst_+HeaderSize()), DataSize()/2);
     126      ReorderFFTData((SByte*)(src+HeaderSize()+DataSize()/2), (SByte*)(dst_+HeaderSize()+DataSize()/2), DataSize()/2);
     127    }
     128    // copie du trailler uniquement :
     129    for(int ka=(HeaderSize()+DataSize())/4;ka < sz_/4; ka++)  dst32[ka] = src32[ka];
     130    break;
     131
     132  case BR_FFTOneChanSwapAll :
     133  case BR_FFTTwoChanSwapAll :
    69134    // Byte swap (sur 8 octets) de l'entete
    70135    // ByteSwap 8 (4->8 Reza/firmware SGDMA) de l'enete
     
    75140      }
    76141    }
    77 
    78142    // on reoordonne les coeff FFT et on swappe en mem temps  (Byte-swap sur 8 octets)
    79     if (fgswap == BR_FFTOneChan) ReorderFFTData((SByte*)(src+HeaderSize()), (SByte*)(dst_+HeaderSize()), DataSize());
    80     else if (fgswap == BR_FFTTwoChan) {
    81       ReorderFFTData((SByte*)(src+HeaderSize()), (SByte*)(dst_+HeaderSize()), DataSize()/2);
    82       ReorderFFTData((SByte*)(src+HeaderSize()+DataSize()/2), (SByte*)(dst_+HeaderSize()+DataSize()/2), DataSize()/2);
     143    if (fgconv == BR_FFTOneChanSwapAll)
     144      ReorderFFTDataSwapAll((SByte*)(src+HeaderSize()), (SByte*)(dst_+HeaderSize()), DataSize());
     145    else  {
     146      ReorderFFTDataSwapAll((SByte*)(src+HeaderSize()), (SByte*)(dst_+HeaderSize()), DataSize()/2);
     147      ReorderFFTDataSwapAll((SByte*)(src+HeaderSize()+DataSize()/2), (SByte*)(dst_+HeaderSize()+DataSize()/2), DataSize()/2);
    83148    }
    84149    // Byte swap (sur 8 octets) du trailer
     
    91156    break;
    92157 
    93   case BR_FFTOneChan32 :
    94   case BR_FFTTwoChan32 :
     158  case BR_FFTOneChanSwap32 :
     159  case BR_FFTTwoChanSwap32 :
    95160    // swap du header uniquement : Echange de deux mots de 4 octets
    96161    for(int ka=0; ka<BRHDRSIZE/4; ka+=2) {
     
    98163      dst32[ka+1] = src32[ka];
    99164    }
    100  
    101165    // on reoordonne et on swappe en mem temps (Echange de deux mots de 4 octets)
    102     if (fgswap == BR_FFTOneChan32) ReorderFFTData32((SByte*)(src+HeaderSize()), (SByte*)(dst_+HeaderSize()), DataSize());
    103     else if (fgswap == BR_FFTTwoChan32) {
    104       ReorderFFTData32((SByte*)(src+HeaderSize()), (SByte*)(dst_+HeaderSize()), DataSize()/2);
    105       ReorderFFTData32((SByte*)(src+HeaderSize()+DataSize()/2), (SByte*)(dst_+HeaderSize()+DataSize()/2), DataSize()/2);
     166    if (fgconv == BR_FFTOneChanSwap32)
     167      ReorderFFTDataSwap32((SByte*)(src+HeaderSize()), (SByte*)(dst_+HeaderSize()), DataSize());
     168    else  {
     169      ReorderFFTDataSwap32((SByte*)(src+HeaderSize()), (SByte*)(dst_+HeaderSize()), DataSize()/2);
     170      ReorderFFTDataSwap32((SByte*)(src+HeaderSize()+DataSize()/2), (SByte*)(dst_+HeaderSize()+DataSize()/2), DataSize()/2);
    106171    }
    107172    // swap du trailler uniquement : Echange de deux mots de 4 octets
     
    111176    }
    112177    break;
    113   case BR_FFTOneChanNoSwap :
    114   case BR_FFTTwoChanNoSwap :
    115     // copie du header uniquement
    116     for(int ka=0; ka<BRHDRSIZE/4; ka++)  dst32[ka] = src32[ka];
    117 
    118     //DEL  on a plus de swapdonc il faut copier dans dst
    119     //DEL    memcpy(dst_, src, sz_);
    120 
    121     // on reoordonne les coeff FFT (pas de swap)
    122     if (fgswap == BR_FFTOneChanNoSwap) ReorderFFTDataNoSwap((SByte*)(src+HeaderSize()), (SByte*)(dst_+HeaderSize()), DataSize());
    123     else if (fgswap == BR_FFTTwoChanNoSwap) {
    124       ReorderFFTDataNoSwap((SByte*)(src+HeaderSize()), (SByte*)(dst_+HeaderSize()), DataSize()/2);
    125       ReorderFFTDataNoSwap((SByte*)(src+HeaderSize()+DataSize()/2), (SByte*)(dst_+HeaderSize()+DataSize()/2), DataSize()/2);
    126     }
    127     // copie du trailler uniquement :
    128      for(int ka=(HeaderSize()+DataSize())/4;ka < sz_/4; ka++)  dst32[ka] = src32[ka];
    129      break;
    130   case BR_CpHdrTrl :
    131     for(int ka=0; ka<BRHDRSIZE/4; ka++)  dst32[ka] = src32[ka];
    132     for(int ka=(HeaderSize()+DataSize())/4;ka < sz_/4; ka++)  dst32[ka] = src32[ka];
    133     break;
    134 
    135  case BR_FFTOneChanNoSwapReduct :
    136   case BR_FFTTwoChanNoSwapReduct :
    137     // copie du header uniquement
    138    
    139     for(int ka=0; ka<BRHDRSIZE/4; ka++)  dst32[ka] = src32[ka];
    140 
    141     //DEL  on a plus de swapdonc il faut copier dans dst
    142     //DEL    memcpy(dst_, src, sz_);
    143 
    144     // on reoordonne les coeff FFT (pas de swap)
    145     if (fgswap == BR_FFTOneChanNoSwap) ReorderFFTDataNoSwap((SByte*)(src+HeaderSize()), (SByte*)(tmp+HeaderSize()), DataSize());
    146     else if (fgswap == BR_FFTTwoChanNoSwap) {
    147       ReorderFFTDataNoSwap((SByte*)(src+HeaderSize()), (SByte*)(tmp+HeaderSize()), DataSize()/2);
    148       ReorderFFTDataNoSwap((SByte*)(src+HeaderSize()+DataSize()/2), (SByte*)(tmp+HeaderSize()+DataSize()/2), DataSize()/2);
    149     }
    150     memcpy(tmp+ HeaderSize(), src+(binMin+ HeaderSize()), nbBin);
    151    memcpy(tmp+ (HeaderSize()+ nbBin ), src+(binMin+ HeaderSize()+sz_/2), nbBin);
    152    memcpy(tmp+( HeaderSize()+( 2* nbBin)),src+(HeaderSize()+DataSize()),TrailerSize());
    153    memcpy(dst_+ HeaderSize(),tmp+ HeaderSize(),( 2* nbBin)+TrailerSize());
    154     SetPaqLen( nbBin/2);
    155 
    156     // copie du trailler uniquement :
    157     //  for(int ka=(HeaderSize()+DataSize())/4;ka < sz_/4; ka++)  dst32[ka] = src32[ka];
    158      break;
     178
     179  default:
     180    // on ne fait rien
     181    break;
    159182  }  // Fin switch
    160 
     183 
    161184}
    162185
     
    164187BRPaquet::BRPaquet(Byte* srcdst, int paqsz)
    165188{
     189  /*
     190  if ((srcdst==NULL)||(paqsz<=(BRHDRSIZE+BRTRLSIZE)))
     191    throw BAORadioException("BRPaquet::BRPaquet(srcdst) NULL pointer OR paqsz<HDR+TRLSize"); 
     192  */
    166193  dst_ = srcdst;
    167194  sz_ = paqsz;
    168   // Il faut mettre une protection (throw) si srcdst==NULL ou sz==0
     195}
     196
     197/* --Methode__ */
     198BRPaquet::BRPaquet(int paqsz)
     199{
     200  /*
     201  if (paqsz<=(BRHDRSIZE+BRTRLSIZE))
     202    throw BAORadioException("BRPaquet::BRPaquet(paqsz) paqsz<HDR+TRLSize"); 
     203  */
     204  dst_ = NULL;
     205  sz_ = paqsz;
     206}
     207
     208/* --Methode__ */
     209void BRPaquet::CopyFrom(BRPaquet& pq, BRPaqReducAction ract, int offset)
     210{
     211  if (ract==BR_CopyRA) {
     212    if (PaquetSize()!=pq.PaquetSize())
     213      throw BAORadioException("BRPaquet::CopyFrom(BR_CopyRA) - NOT equal paquet size");
     214      memcpy(Begin(), pq.Begin(), PaquetSize());
     215      return;
     216  }
     217  // Recopie de l'entete HDR et trailer TRL
     218  memcpy(Header(), pq.Header(), HeaderSize());
     219  memcpy(Trailer(), pq.Trailer(), TrailerSize());
     220  // Recopie partielle des donnees
     221  size_t szc, szcmx;
     222  switch (ract) {
     223  case BR_OneChanReduc:
     224  case BR_OneChanReducK0:
     225    szc = DataSize();
     226    szcmx = pq.DataSize()-offset;
     227    if (szcmx<szc) szc=szcmx;
     228    memcpy(Data1(), pq.Data1(), szc);
     229    if (ract==BR_OneChanReducK0)   *(Data1C()) = *(pq.Data1C());  // On garde le continu et le nyquist   
     230    SetPaqLen(szc/4); 
     231    break;
     232  case BR_TwoChanReduc:
     233  case BR_TwoChanReducK0:
     234    szc = DataSize()/2;
     235    szcmx = pq.DataSize()/2-offset;
     236    if (szcmx<szc) szc=szcmx;
     237    memcpy(Data1(), pq.Data1(), szc);
     238    memcpy(Data2(), pq.Data2(), szc);
     239    if (ract==BR_TwoChanReducK0)  {   // On garde le continu et le nyquist 
     240      *(Data1C()) = *(pq.Data1C());
     241      *(Data2C()) = *(pq.Data2C());
     242    }
     243    SetPaqLen(szc/2); 
     244    break;
     245  default:
     246    break;
     247  }
    169248}
    170249
     
    294373
    295374/* --Methode__ */
    296 void BRPaquet::ReorderFFTData(SByte* src, SByte* dst, int N)
    297 {
     375void BRPaquet::ReorderFFTDataSwapAll(SByte* src, SByte* dst, int N)
     376{
     377  // Remise en ordre des donnees avec swap complet sur 8 bytes
    298378  // Code recopie depuis /Dev/DisplayData/HistoWindow.cc
    299379  // fonction TraceWind::DisplayBaoDatasFFT() et adapte aux structures BRPaquet et Cie
     
    342422}
    343423
    344 void BRPaquet::ReorderFFTData32(SByte* src, SByte* dst, int N)
    345 {
     424/* --Methode__ */
     425void BRPaquet::ReorderFFTDataSwap32(SByte* src, SByte* dst, int N)
     426{
     427  // Remise en ordre avec echange (swap) des mots de 32 bits
    346428  // Code recopie depuis /Dev/DisplayData/HistoWindow.cc
    347429  // fonction TraceWind::DisplayBaoDatasFFT() et adapte aux structures BRPaquet et Cie
     
    384466  return ;
    385467}
    386 void BRPaquet::ReorderFFTDataNoSwap(SByte* src, SByte* dst, int N)
    387 {
     468
     469/* --Methode__ */
     470void BRPaquet::ReorderFFTData(SByte* src, SByte* dst, int N)
     471{
     472  // Remise en ordre des donnees FFT (sans swap)
    388473  // Code recopie depuis /Dev/DisplayData/HistoWindow.cc
    389474  // fonction TraceWind::DisplayBaoDatasFFT() et adapte aux structures BRPaquet et Cie
     
    428513
    429514/* --Methode__ */
    430 const char* BRPaquet::FmtConvToString(BRDataFmtConv fgswap)
     515const char* BRPaquet::FmtConvToString(BRDataFmtConv fgconv)
    431516{
    432517  const char * rs="";
    433   switch ( fgswap ) {
     518  switch ( fgconv ) {
    434519  case BR_DoNothing : 
    435520    rs = "BR_DoNothing";
     
    441526    rs = "BR_SwapAll";
    442527    break;
     528  case BR_Swap32 :
     529    rs = "BR_Swap32";
     530    break;
     531  case BR_CopyHDR :
     532    rs = "BR_CopyHDR";
     533    break;
    443534  case BR_SwapHDR :
    444535    rs = "BR_SwapHDR";
     
    450541    rs = "BR_FFTTwoChan";
    451542    break;
    452   case BR_Swap32 :
    453     rs = "BR_Swap32";
    454     break;
    455   case BR_FFTOneChan32 :
    456     rs = "BR_FFTOneChan32";
    457     break;
    458   case BR_FFTTwoChan32 :
    459     rs = "BR_FFTTwoChan32";
    460     break;
    461   case BR_FFTOneChanNoSwap :
    462     rs = "BR_FFTOneChanNoSwap";
    463     break;
    464   case BR_FFTTwoChanNoSwap :
    465     rs = "BR_FFTTwoChanNoSwap";
     543  case BR_FFTOneChanSwapAll :
     544    rs = "BR_FFTOneChanSwapAll";
     545    break;
     546  case BR_FFTTwoChanSwapAll :
     547    rs = "BR_FFTTwoChanSwapAll";
     548    break;
     549  case BR_FFTOneChanSwap32 :
     550    rs = "BR_FFTOneChanSwap32";
     551    break;
     552  case BR_FFTTwoChanSwap32 :
     553    rs = "BR_FFTTwoChanSwap32";
    466554    break;
    467555  default:
     
    476564// --------------------------------------------------------------------------
    477565
     566/* --Methode__ */
    478567BRPaqChecker::BRPaqChecker(bool cktrl, int maxprt)
    479568{
     
    490579}
    491580
     581/* --Methode__ */
    492582BRPaqChecker::~BRPaqChecker()
    493583{
     
    500590}
    501591
     592/* --Methode__ */
    502593UInt64 BRPaqChecker::DefineTRLTag(UInt32 trl1, UInt32 trl2)
    503594{
     
    506597}
    507598
    508 
     599/* --Methode__ */
    509600bool BRPaqChecker::Check(BRPaquet& paq, UInt64& numframe)
    510601{
     
    543634}
    544635
     636/* --Methode__ */
    545637ostream& BRPaqChecker::Print(ostream& os) const
    546638{
     
    556648  return os;
    557649}
     650
     651/* --Methode__ */
     652string BRPaqChecker::Summary(bool detail) const
     653{
     654  double meangap = (cnt_saut>0)?((double)lostframes/(double)cnt_saut):0.;
     655  double lossrate= (double)lostframes*100./(double)totnframes;
     656  char buff[256];
     657  if (detail)
     658    sprintf(buff, " TotNPaq= %ld  HDR/TRL OK= %ld LostFrames= %ld LossRate= %lg NbGaps= %ld MeanGap= %lg",
     659            (long)totnframes, (long)nframeok, (long)lostframes, lossrate, (long)cnt_saut, meangap);
     660  else
     661    sprintf(buff, "TotNPaq=%ld  N_Ok=%ld LossRate=%lg", (long)totnframes, (long)nframeok, lossrate);
     662  return buff;
     663}
     664
  • trunk/AddOn/TAcq/brpaqu.h

    r3659 r3671  
    99#include <stdio.h>
    1010#include <iostream>
     11#include <exception>
    1112#include <string>
    1213#include "brtypes.h"
     
    1415
    1516using namespace std;
     17
     18// ---------------------------------------------------------
     19// ----- Classe d'exception pour Acquisition BAORadio ------
     20#define BREX_MAXMSGLEN 160
     21
     22class BAORadioException : public std::exception {
     23  public:
     24  explicit BAORadioException(const char * m) throw() ;
     25  explicit BAORadioException(const string& m) throw() ;
     26  virtual ~BAORadioException() throw() ;
     27  //! Implementation of std::exception what() method, returning the exception message
     28  virtual const char* what() const throw();
     29  virtual string const Msg() const ;
     30 private:
     31  char msg_[BREX_MAXMSGLEN];
     32};
     33
     34
    1635
    1736// ------------------------------------------------
     
    3857
    3958  inline double realD() { return  (double)(val_)[0]; }
    40       inline double imagD() { return  (double)(val_)[1]; }
     59  inline double imagD() { return  (double)(val_)[1]; }
    4160
    4261  SByte val_[2];
    4362};
    4463
    45 // ------------------------------------------------
     64// --------------------------------------------------------
     65// ----- Classe BRPaquet , constante et enum associe ------
     66//     Representation, manipulation des paquets/frames
     67//     envoyes par les cartes ADC 
     68// --------------------------------------------------------
    4669
    4770// OFFSET : au cas ou le firmware reception ajoute des mots avant le header
     
    6891//#define BRPCOFF 16
    6992
    70 enum ChannelID
    71   {
    72     None=0,
    73     Ch1,
    74     Ch2,
    75     Ch1_2,
    76     Ch3,
    77     Ch4,
    78     Ch3_4
    79   };
    80 enum ModeAcq
    81   {
    82     RawData=1,
    83     FFT
    84   };
     93enum ChannelID { None=0, Ch1, Ch2, Ch1_2, Ch3, Ch4, Ch3_4 };
     94enum ModeAcq { RawData=1, FFT };
    8595
    8696// Definition des actions sur la conversion de format (swap...) des donnees arrivant
    8797enum BRDataFmtConv {
    88   BR_DoNothing,
    89   BR_Copy,
    90   BR_SwapAll,
    91   BR_SwapHDR,
    92   BR_FFTOneChan,
    93   BR_FFTTwoChan,
    94   BR_Swap32,
    95   BR_FFTOneChan32,
    96   BR_FFTTwoChan32,
    97   BR_FFTOneChanNoSwap,
    98   BR_FFTTwoChanNoSwap,
    99   BR_CpHdrTrl,
    100   BR_Copy_Reduc,
    101   BR_FFTOneChanNoSwapReduct,
    102   BR_FFTTwoChanNoSwapReduct
    103 };
    104 
     98  BR_DoNothing, BR_Copy, BR_SwapAll, BR_Swap32, BR_CopyHDR, BR_SwapHDR,
     99  BR_FFTOneChan, BR_FFTTwoChan, 
     100  BR_FFTOneChanSwapAll, BR_FFTTwoChanSwapAll,
     101  BR_FFTOneChanSwap32, BR_FFTTwoChanSwap32,
     102};
     103
     104// Definition des action pour recopie de paquet avec reduction de taille de paquet
     105//    Copie complete (--> egalite de taille, 1,2 canaux, K0 -> Keep first two bytes (Continu/Nyquist)
     106enum BRPaqReducAction {
     107  BR_CopyRA, BR_OneChanReduc, BR_TwoChanReduc, BR_OneChanReducK0, BR_TwoChanReducK0
     108};
     109
     110//---- Classe BRPaquet
    105111// Structure correspondant a HEADER-DATA-TRAILER
    106112class BRPaquet {
    107113 public:
    108114// Cree d'un objet BRPaquet avec copie/swap depuis src -> dst (si src != NULL)
    109   BRPaquet(Byte* src, Byte* dst, int paqsz=16424, BRDataFmtConv fgswap=BR_Copy,int minBin=0,int nbBin=0);
     115  BRPaquet(Byte* src, Byte* dst, int paqsz, BRDataFmtConv fgconv=BR_Copy);
    110116  // Cree d'un objet BRPaquet de taille paqsz sur la zone dst   
    111   BRPaquet(Byte* srcdst, int paqsz=16424);
     117  BRPaquet(Byte* srcdst, int paqsz);
     118  BRPaquet(int paqsz);
     119
    112120  //  ~BRPaquet();
     121
     122  // Pour la copie/reduction de taille de paquet
     123  void CopyFrom(BRPaquet& pq, BRPaqReducAction ract=BR_CopyRA, int offset=0);
    113124
    114125  // Acces diverses tailles
     
    175186
    176187  // fonction appelee par le constructeur pour reordonner les donnees FFT
     188  // --- Remise en ordre avec swap complet sur 8 bytes
     189  static void ReorderFFTDataSwapAll(SByte* src, SByte* dst, int sz);
     190  // --- Remise en ordre avec echanges des mots de 4 bytes
     191  static void ReorderFFTDataSwap32(SByte* src, SByte* dst, int sz);
     192  // --- Remise en ordre seulement
    177193  static void ReorderFFTData(SByte* src, SByte* dst, int sz);
    178   static void ReorderFFTData32(SByte* src, SByte* dst, int sz);
    179   static void ReorderFFTDataNoSwap(SByte* src, SByte* dst, int sz);
    180   static const char* FmtConvToString(BRDataFmtConv fgswap);
     194  static const char* FmtConvToString(BRDataFmtConv fgconv);
    181195// protected:
    182196  // donnees membres
     
    209223  ostream & Print(ostream& os) const;
    210224  inline ostream & Print() const { return Print(cout); }
     225  // renvoie le resume de la statistique paquets sous forme de chaine
     226  string Summary(bool detail=false) const;
    211227
    212228  // Acces aux differents compteurs
  • trunk/AddOn/TAcq/makefile

    r3658 r3671  
    66# all : traidio  tmtfft tstminifits tbrpaq tpciew tmtacq tstrdfits mfits2spec tsok
    77# all : traidio  tmtfft tstminifits tmtacq tstrdfits mfits2spec tsok mcrd
    8 all : traidio tstminifits tmtacq mfits2spec mcrd svv2mtx tsok
     8all :  mfacq tmtacq mfits2spec mcrd svv2mtx tsok traidio tstminifits
    99
    1010clean :
     
    1818
    1919##   --------------
     20mfacq : $(EXE)mfacq
     21        echo '---mfacq made'
     22
     23$(EXE)mfacq : $(OBJ)mfacq.o $(OBJ)brparam.o $(OBJ)racqumem.o $(OBJ)racqurw.o $(OBJ)racquproc.o \
     24               $(OBJ)brpaqu.o $(OBJ)pciewrap.o $(OBJ)minifits.o
     25        $(CXXLINK) -o $(EXE)mfacq $(OBJ)mfacq.o $(OBJ)brparam.o $(OBJ)racqumem.o $(OBJ)racqurw.o \
     26              $(OBJ)racquproc.o $(OBJ)brpaqu.o $(OBJ)pciewrap.o $(OBJ)minifits.o $(SOPHYAALLSLBLIST)
     27
     28$(OBJ)mfacq.o : mfacq.cc brparam.h racquproc.h racqurw.h racqumem.h brpaqu.h
     29        $(CXXCOMPILE) -c -DNOPCIECARD -o $(OBJ)mfacq.o mfacq.cc
     30
     31
    2032tmtacq : $(EXE)tmtacq
    2133        echo '---tmtacq made'
    2234
    23 $(EXE)tmtacq : $(OBJ)tmtacq.o  $(OBJ)racqumem.o $(OBJ)racqurw.o $(OBJ)racquproc.o \
     35$(EXE)tmtacq : $(OBJ)tmtacq.o  $(OBJ)brparam.o $(OBJ)racqumem.o $(OBJ)racqurw.o $(OBJ)racquproc.o \
    2436               $(OBJ)brpaqu.o $(OBJ)pciewrap.o $(OBJ)minifits.o
    25         $(CXXLINK) -o $(EXE)tmtacq $(OBJ)tmtacq.o $(OBJ)racqumem.o $(OBJ)racqurw.o $(OBJ)racquproc.o \
    26                       $(OBJ)brpaqu.o $(OBJ)pciewrap.o $(OBJ)minifits.o $(SOPHYAALLSLBLIST)
     37        $(CXXLINK) -o $(EXE)tmtacq $(OBJ)tmtacq.o $(OBJ)brparam.o $(OBJ)racqumem.o $(OBJ)racqurw.o \
     38               $(OBJ)racquproc.o $(OBJ)brpaqu.o $(OBJ)pciewrap.o $(OBJ)minifits.o $(SOPHYAALLSLBLIST)
    2739
    2840$(OBJ)tmtacq.o : tmtacq.cc racquproc.h racqurw.h racqumem.h brpaqu.h
    2941        $(CXXCOMPILE) -c -DNOPCIECARD -o $(OBJ)tmtacq.o tmtacq.cc
     42
     43$(OBJ)brparam.o : brparam.cc brparam.h
     44        $(CXXCOMPILE) -c -o $(OBJ)brparam.o brparam.cc
    3045
    3146$(OBJ)racqumem.o : racqumem.cc racqumem.h
     
    4358        echo '---mcrd made'
    4459
    45 $(EXE)mcrd : $(OBJ)mcrd.o  $(OBJ)racqumem.o $(OBJ)brfitsrd.o $(OBJ)brproc.o $(OBJ)racquproc.o $(OBJ)brpaqu.o \
     60$(EXE)mcrd : $(OBJ)mcrd.o  $(OBJ)brparam.o $(OBJ)racqumem.o $(OBJ)brfitsrd.o $(OBJ)brproc.o $(OBJ)racquproc.o $(OBJ)brpaqu.o \
    4661             $(OBJ)racqurw.o $(OBJ)pciewrap.o $(OBJ)minifits.o
    47         $(CXXLINK) -o $(EXE)mcrd $(OBJ)mcrd.o $(OBJ)racqumem.o $(OBJ)brfitsrd.o $(OBJ)brproc.o $(OBJ)racquproc.o \
     62        $(CXXLINK) -o $(EXE)mcrd $(OBJ)mcrd.o $(OBJ)brparam.o  $(OBJ)racqumem.o $(OBJ)brfitsrd.o $(OBJ)brproc.o $(OBJ)racquproc.o \
    4863                      $(OBJ)brpaqu.o $(OBJ)racqurw.o $(OBJ)pciewrap.o $(OBJ)minifits.o $(SOPHYAALLSLBLIST)
    4964
  • trunk/AddOn/TAcq/minifits.cc

    r3658 r3671  
    9797  if (fip != NULL) throw MiniFITSException("MiniFITSFile::Open() - fip != NULL");
    9898  if (rwm == MF_Write) {
     99    for(int i=0; i<MFITSHLEN; i++)  header[i]=' ';
     100    nkeya_ = 0;
    99101    FillHeader();
    100102    fip = fopen(nom, "w");
     
    119121{
    120122  if (fip) {
    121         if (rwmode == MF_Write)  { 
    122           // on remplit avec des zeros pour avoir une longueur multiple de 2880
    123           size_t padsz = MFITSHLEN-(totwsz%MFITSHLEN);
    124           char zeros[160];
    125           for(size_t k=0; k<160; k++) zeros[k]=0;
    126           while(padsz>160) {
    127             fwrite(zeros, 1, 160, fip);
    128             padsz-=160;
    129           }
    130           if (padsz>0)  fwrite(zeros, 1, padsz, fip);
    131           // On reecrit l'entete
    132           FillHeader();
    133           fseek(fip, 0, SEEK_SET);
    134           fwrite(header, 1, MFITSHLEN, fip);
    135         }       
    136         fclose(fip);
     123    if (rwmode == MF_Write)  { 
     124      // on remplit avec des zeros pour avoir une longueur multiple de 2880     
     125      size_t padsz = MFITSHLEN-(totwsz%MFITSHLEN);
     126      char zeros[160];
     127      for(size_t k=0; k<160; k++) zeros[k]=0;
     128      while(padsz>160) {
     129        fwrite(zeros, 1, 160, fip);
     130        padsz-=160;
     131      }
     132      if (padsz>0)  fwrite(zeros, 1, padsz, fip);
     133      // On reecrit l'entete
     134      FillHeader();
     135      fseek(fip, 0, SEEK_SET);
     136      fwrite(header, 1, MFITSHLEN, fip);
     137    }   
     138    fclose(fip);
    137139  }
    138140  fip = NULL;
     
    187189  else if (dtype == MF_Float32) bpix = -32;
    188190  char * buff = header+80;
    189   sprintf(buff, "BITPIX  = %20d /   number of bits per data pixel", bpix);
     191  sprintf(buff, "BITPIX  = %20d / number of bits per data pixel", bpix);
    190192  buff[strlen(buff)] = ' ';
    191193  buff = header+160;
     
    193195  buff[strlen(buff)] = ' ';
    194196  buff = header+240;
    195   sprintf(buff, "NAXIS1  = %20ld /   number of bits per data pixel", (long)nax1);
     197  sprintf(buff, "NAXIS1  = %20ld / nb of pixels along X = PaquetSize", (long)nax1);
    196198  buff[strlen(buff)] = ' ';
    197199  buff = header+320;
    198   sprintf(buff, "NAXIS2  = %20ld /   number of bits per data pixel", (long)nax2);
     200  sprintf(buff, "NAXIS2  = %20ld / nb of rows = NumberOfPaquets", (long)nax2);
    199201  buff[strlen(buff)] = ' ';
    200202  buff = header+400+nkeya_*80;
     
    248250    sprintf(buff,"%s %20lg / %s", cle, val, tcom);
    249251  }
    250   else  sprintf(buff,"%s %20ld / ", cle, val);
     252  else  sprintf(buff,"%s %20lg / ", cle, val);
    251253  buff[strlen(buff)] = ' ';
    252254  nkeya_++;
  • trunk/AddOn/TAcq/pciewrap.cc

    r3645 r3671  
    5757  paq.SetHDRMarker64(pchk_.HDRTag());
    5858  paq.SetTRLMarker64(pchk_.TRLTag());
    59   paq.SetFrameCounter(frame_counter_);
     59  UInt16 cfc = (frame_counter_%65535);
     60  paq.SetFrameCounter(cfc);
    6061  paq.SetTimeTag(timetag_);
    6162  paq.SetPaqLen((UInt16)((size_ - BRHDRSIZE - BRTRLSIZE)/4));
  • trunk/AddOn/TAcq/racqumem.cc

    r3658 r3671  
    8989        for(uint_4 k=0; k<NbZones(); k++) {
    9090          if ((states[k].act == MemZA_None) &&
    91               (states[k].stat & MemZS_Filled) && !(states[k].stat & MemZS_Proc) ) {
     91              (states[k].stat & MemZS_Saved) && !(states[k].stat & MemZS_Proc) ) {
    9292            if (states[k].serial < bestserial) { rid=k; bestserial=states[k].serial; }
    9393          }
  • trunk/AddOn/TAcq/racquproc.cc

    r3635 r3671  
    123123    }
    124124  }
    125   catch (PException& exc) {
    126     cout << " DataProc::run()/catched PException " << exc.Msg() << endl;
     125  catch (std::exception& exc) {
     126    cout << " DataProc::run()/catched std::exception " << exc.what() << endl;
    127127    setRC(3);   
    128128    return;
     
    242242    }
    243243  }
    244   catch (PException& exc) {
    245     cout << " DataProc2C::run()/catched PException " << exc.Msg() << endl;
     244  catch (std::exception& exc) {
     245    cout << " DataProc::run()/catched std::exception " << exc.what() << endl;
    246246    setRC(3);   
    247247    return;
     
    360360    }
    361361  }
    362   catch (PException& exc) {
    363     cout << " DataProcFFT2C::run()/catched PException " << exc.Msg() << endl;
     362  catch (std::exception& exc) {
     363    cout << " DataProc::run()/catched std::exception " << exc.what() << endl;
    364364    setRC(3);   
    365365    return;
  • trunk/AddOn/TAcq/racqurw.cc

    r3658 r3671  
    464464
    465465/* --Methode-- */
    466 PCIEMultiReader::PCIEMultiReader(vector<PCIEWrapperInterface*> vec_pciw,uint_4 sizeFrame,uint_4 packSize ,RAcqMemZoneMgr& mem, uint_4 nmax, BRDataFmtConv swapall,int binMin, int nbBin)
     466PCIEMultiReader::PCIEMultiReader(vector<PCIEWrapperInterface*> vec_pciw,uint_4 sizeFrame,uint_4 packSize ,RAcqMemZoneMgr& mem, uint_4 nmax, BRDataFmtConv swapall)
    467467  :   memgr(mem) , vec_pciw_ (vec_pciw)
    468468{
     
    473473  packSizeInMgr_=memgr.PaqSize();
    474474  sizeFr_ =sizeFrame;
    475   binMin_= binMin;
    476   nbBin_= nbBin;
    477475  if (vec_pciw.size() != memgr.NbFibres()) {
    478476    cout << " PCIEMultiReader()PbArgs: vec_pciw.size()= " << vec_pciw.size() << " memgr.NbFibres()=" <<memgr.NbFibres()<< endl;
     
    572570            setRC(9);  fgarret=true; break;
    573571          }
    574           BRPaquet paq(tampon[fib], nextpaq, paqsz, swapall_,binMin_,nbBin_);
     572          BRPaquet paq(tampon[fib], nextpaq, paqsz, swapall_);
     573          // CHECK  S'il faut faire une reduction de taille de paquet
    575574          npaqfait[fib]++;
    576575          if (fib==nbDma_-1) npaqfaitg++;  // Ne pas oublier le compteur de paquets faits
     
    601600          setRC(9);  fgarret=true; break;
    602601        }
    603         BRPaquet paq(Datas[fib]+curoff, nextpaq, paqsz, swapall_,binMin_,nbBin_);
     602        BRPaquet paq(Datas[fib]+curoff, nextpaq, paqsz, swapall_);
     603        // CHECK  S'il faut faire une reduction de taille de paquet
    604604        npaqfait[fib]++;
    605605        if (fib==nbDma_-1) npaqfaitg++;  // Ne pas oublier le compteur de paquets faits
     
    688688//--------------------------------------------------------------------
    689689
    690 MultiDataSaver::MultiDataSaver(RAcqMemZoneMgr& mem, string& path, uint_4 nfiles, uint_4 nblocperfile, bool savesig)
    691   :  memgr(mem) 
     690MultiDataSaver::MultiDataSaver(RAcqMemZoneMgr& mem, string path, uint_4 nfiles, uint_4 nblocperfile, bool savesig)
     691  :  memgr(mem)
    692692{
    693693  nfiles_ = nfiles;
     
    708708  setRC(1);     
    709709  BRPaqChecker pcheck[MAXNBFIB];  // Verification/comptage des paquets
    710 
     710  BRAcqConfig bpar;
    711711  try {
    712712    TimeStamp ts;
     
    732732      fgnulldev = true;
    733733    }
     734    BRPaquet paq0(NULL, NULL, paqsz);
    734735    for (uint_4 nbFile=0;nbFile<nfiles_ ;nbFile++) {
    735736      if (stop_ )   break;
     
    742743          header[fib].open(fname);
    743744        }
    744       BRPaquet paq0(NULL, NULL, paqsz);
     745   
    745746      uint_4 npaqperfile = memgr.NbPaquets()*nblocperfile_;  // Nombre de paquets ecrits dans un fichier
    746747
    747748      if (savesig_) { //Reza - Ouverture conditionnel fichier
    748         for(uint_4 fib=0; fib<memgr.NbFibres(); fib++) {
     749        for(uint_4 fib=0; fib<memgr.NbFibres(); fib++)    {
    749750          if (fgnulldev) strcpy(fname,"/dev/null");
    750751          else sprintf(fname,"%s/Fibre%d/signal%d.fits",path_.c_str(),fib+1,(int)fnum);
    751752          mff[fib].Open(fname,MF_Write);  //Reza - Ouverture conditionnel fichier
    752753          // Entete correspondant a l'ecriture tout le paquet - trailer compris (modif Mai 2009)
    753           mff[fib].setDTypeNaxis(MF_Byte, paq0.PaquetSize(), npaqperfile);
    754         }
     754          mff[fib].setDTypeNaxis(MF_Byte, paq0.PaquetSize(), npaqperfile);     
     755        // Sans TRAILER de paquet mff.setDTypeNaxis(MF_Byte, paq0.DataSize()+paq0.HeaderSize(), npaqperfile);
     756        }
     757        // Ajout mots-cle additionnels a tous les fichiers FITS
     758        AddFitsKW(mff,bpar);
    755759        fnum++;
    756         // Sans TRAILER de paquet mff.setDTypeNaxis(MF_Byte, paq0.DataSize()+paq0.HeaderSize(), npaqperfile);
    757760      }
    758761      else sprintf(fname,"MemDataBloc[%d]-NoDataFile",(int)fnum++);
     
    765768        if (buffg == NULL) {
    766769          cout << " MultiDataSaver::run()/ERROR memgr.GetMemZone(" << mid << ") -> NULL" << endl;
    767           setRC(2);     
     770          setRC(21);   
    768771          return;       
    769772        }
     
    772775          if (buff == NULL) {  // Ceci ne devrait pas arriver - suite au test buffg ci-dessus
    773776            cout << " MultiDataSaver::run()/ERROR memgr.GetMemZone(" << mid << "," << fib << ") -> NULL" << endl;
    774             setRC(2);   
     777            setRC(22); 
    775778            return;     
    776779          }
     
    797800        }
    798801        else sprintf(fname,"MemDataBloc[%d]-NoDataFile",(int)fnum-1);
    799         filog << "    Fib " << fib << " -> " << fname << endl;
    800         cout << "    Fib " << fib << " -> " << fname << endl;
     802        string pcsum = pcheck[fib].Summary();
     803        filog << "    Fib " << fib << " -> " << fname << " Stat:" << pcsum << endl;
     804        cout  << "    Fib " << fib << " -> " << fname << " Stat:" << pcsum << endl;
    801805      }
    802806      if (savesig_)
     
    805809          mff[fib].Close();       
    806810        }
     811   
     812     
    807813    }  // Fin de boucle sur les fichiers
    808814    cout << " --------------------  MultiDataSaver::run() -------------------- " << endl;
     
    832838}   
    833839
     840
     841/* --Methode-- */
     842int MultiDataSaver::AddFitsKW(MiniFITSFile* mff, BRAcqConfig& acpar)
     843{
     844  TimeStamp ts;
     845  string cdtu=ts.ToString();
     846  for(uint_4 fib=0; fib<memgr.NbFibres(); fib++) {
     847    mff[fib].AddKeyS("DATE", cdtu.c_str(), " File Creation time(YYYY-MM-DDThh:mm:ss UT) ");       
     848    mff[fib].AddKeyS("DATEOBS", cdtu.c_str(), " Observation Time (YYYY-MM-DDThh:mm:ss UT) ");
     849    mff[fib].AddKeyD("ACQVER", acpar.AcqVersion(), " BAORadio Acq Software version ") ;
     850    mff[fib].AddKeyS("ACQCONF", acpar.GetParams().AcqMode, " BAORadio Acq run  mode" );
     851  }
     852  return 0;
     853}
     854
  • trunk/AddOn/TAcq/racqurw.h

    r3658 r3671  
    1515#include "zthread.h"
    1616#include "pciewrap.h"
    17 
    1817#include "brtypes.h"
    1918#include "brpaqu.h"
     19#include "brparam.h"
     20#include "minifits.h"
    2021
    2122using namespace std;
     
    6162  uint_4 max_targ_npaq; // =  mmgr.NbPaquets() = Max de targ_npaq_
    6263  Byte* mmbuf_;  // Pointeur zone memoire rendu par RAcqMemZoneMgr
     64
    6365};
    6466
     
    113115public:
    114116  PCIEMultiReader( vector<PCIEWrapperInterface*> vec_pciw , uint_4 sizeFrame,uint_4 paqSize, RAcqMemZoneMgr& mem,
    115                    uint_4 nmax=100, BRDataFmtConv swapall=BR_SwapAll,int binMin=0, int nbBin=0); 
     117                   uint_4 nmax=100, BRDataFmtConv swapall=BR_SwapAll); 
    116118  virtual void run();
    117119   void Stop();
     
    142144  uint_4 packSizeInMgr_;
    143145  uint_4 nbDma_;
    144   int nbBin_;
    145   int binMin_;
    146146  int mid_;  // Identificateur zone memoire
    147147  uint_4 targ_npaq_;  // Numero de paquet dans une seule zone memoire
     
    160160class MultiDataSaver : public ZThread {
    161161public:
    162   MultiDataSaver(RAcqMemZoneMgr& mem, string& path, uint_4 nfiles=100, uint_4 nblocperfile=1, bool savesig=true);
     162  MultiDataSaver(RAcqMemZoneMgr& mem, string path, uint_4 nfiles=100, uint_4 nblocperfile=1, bool savesig=true);
    163163
    164164  virtual void run();
     
    166166  inline void STOP() { stop_ = true; } 
    167167protected:
     168  int  AddFitsKW(MiniFITSFile* mff, BRAcqConfig& acpar);
     169
    168170  RAcqMemZoneMgr& memgr;
    169171  uint_4 nfiles_;  // Nombre maxi de fichiers cree
     
    174176  string path_; 
    175177  struct sigaction act;
    176  
    177178};
    178179
  • trunk/AddOn/TAcq/tmtacq.cc

    r3645 r3671  
    2929
    3030
    31 //--------------------------------------------------------
     31//-----------------------------------------------------------------------
    3232// Programme test acquisition BAORadio multi-thread
    3333//  LAL -   R. Ansari Juillet -  2008
    3434//          M.Taurigna    2009
    35 //--------------------------------------------------------
     35// == Programme reste a la version de Mai 2009 (1er tests Pittsburgh) ==
     36//-----------------------------------------------------------------------
    3637
    3738
     
    115116static  bool activate_pattern=false;  // true -> on active le pattern du firmware au lieu de la fibre
    116117static  uint_4 NMaxBloc = 10;
     118static  double nopciLossRate = 0.; // Taux de perte simule des paquets par TestPCIWrapperNODMA
    117119//---------------------------- FIN parametres de controle -----------------
    118120
     
    178180  if (fgshort) {
    179181    cout << " Usage: tmtacq CardNum PaquetSize NFrameDMA NFiles NBlocPerFile \n"
    180          << "                 NMaxProc DataDirPath [AcqMode] [MemZoneMgr][HardCtlC]" << endl;
     182        << "             NMaxProc DataDirPath [AcqMode] [MemZoneMgr] [HardCtlC] [NoPCILossRate]" << endl;
    181183    cout << "   type tmtacq -h for detailed usage " << endl;
    182184    return;
     
    184186
    185187   cout << "\n Usage: tmtacq CardNum PaquetSize NFrameDMA NFiles NBlocPerFile \n"
    186         << "                 NMaxProc DataDirPath [AcqMode] [MemZoneMgr][HardCtlC]" << endl;
     188        << "             NMaxProc DataDirPath [AcqMode] [MemZoneMgr] [HardCtlC] [NoPCILossRate]" << endl;
    187189   cout << " - CardNum : PCI-Express card number (=1 OR 2 OR 1,2)" << endl;
    188190   cout << " - PaquetSize or FrameSize (=DATA+HDR+TRL_Size)  " << endl;
     
    209211   cout << " - MemZoneMgr: nZones,NPaq =Number of Zones and number of paquet \n"
    210212        << "               in each zone (Default=4,128) "<< endl;
    211    cout << " -HardCtlC : Y y (direct interrpution by CtrlC ) default (no) " << endl;
     213   cout << " - HardCtlC : Y y (direct interrpution by CtrlC ) or no  (default=no) " << endl;
     214   cout << " - NoPCILossRate : Simulated NO-PCI loss rate (0<rate<1 default=0.) " << endl;
     215
    212216   cout << endl;
    213217   cout << " - AcqMode for previous firmware with 32bits-byteswap"<<endl;
     
    315319  }
    316320
    317   nZones = 8;  // Nombre de zones memoires
     321  nZones = 4;  // Nombre de zones memoires
    318322  nPaqZone = 128;  // 128 Paquets / zone memoire - valeur par defaut
    319323  if (narg > 9)  {
     
    333337    sigaction(SIGINT,&act,NULL);       
    334338  }
     339
     340  nopciLossRate = 0.; // Taux de perte simule des paquets par TestPCIWrapperNODMA
     341  if (narg > 11)  nopciLossRate=atof(arg[11]);
    335342
    336343  PaqSZ =sizeFrame;  // Taille de paquets
     
    360367  if (acqmode == "nosw")   swapall = BR_Copy ;
    361368  if (acqmode == "nof")  { swapall = BR_Copy ; savesigfits = false; }
    362   if (acqmode == "fft1c")  swapall = BR_FFTOneChanNoSwap;
    363   if (acqmode == "fft2c")  swapall = BR_FFTTwoChanNoSwap;
    364   if (acqmode == "fft1cnof")  { swapall = BR_FFTOneChanNoSwap;  savesigfits = false; }
    365   if (acqmode == "fft2cnof")  { swapall = BR_FFTTwoChanNoSwap;  savesigfits = false; }
     369  if (acqmode == "fft1c")  swapall = BR_FFTOneChan;
     370  if (acqmode == "fft2c")  swapall = BR_FFTTwoChan;
     371  if (acqmode == "fft1cnof")  { swapall = BR_FFTOneChan;  savesigfits = false; }
     372  if (acqmode == "fft2cnof")  { swapall = BR_FFTTwoChan;  savesigfits = false; }
    366373  if (acqmode == "mono")  { monothr = true;   swapall = BR_Copy; }
    367374  if (acqmode == "patmono")  { monothr = true;   swapall = BR_Copy; activate_pattern=true; }
     
    370377
    371378  if (acqmode == "swapall")  swapall = BR_SwapAll;
    372   if (acqmode == "fft1csw")  swapall = BR_FFTOneChan;
    373   if (acqmode == "fft2csw")  swapall = BR_FFTTwoChan;
    374   if (acqmode == "fft1cswnof")  { swapall = BR_FFTOneChan;  savesigfits = false; }
    375   if (acqmode == "fft2cswnof")  { swapall = BR_FFTTwoChan;  savesigfits = false; }
     379  if (acqmode == "fft1csw")  swapall = BR_FFTOneChanSwapAll;
     380  if (acqmode == "fft2csw")  swapall = BR_FFTTwoChanSwapAll;
     381  if (acqmode == "fft1cswnof")  { swapall = BR_FFTOneChanSwapAll;  savesigfits = false; }
     382  if (acqmode == "fft2cswnof")  { swapall = BR_FFTTwoChanSwapAll;  savesigfits = false; }
    376383  if ((acqmode == "swh") || (acqmode == "mxs") || (acqmode == "monoswh") )  swapall = BR_SwapHDR;
    377384  if ((acqmode == "swapallnof") || (acqmode == "mxs") )  savesigfits = false;
     
    381388  if (acqmode == "swap32")   swapall = BR_Swap32 ;
    382389  if (acqmode == "nof32")   { swapall = BR_Swap32 ; savesigfits = false; }
    383   if (acqmode == "fft1c32")  swapall = BR_FFTOneChan32;
    384   if (acqmode == "fft2c32")  swapall = BR_FFTTwoChan32;
    385   if (acqmode == "fft1cnof32")  { swapall = BR_FFTOneChan32;  savesigfits = false; }
    386   if (acqmode == "fft2cnof32")  { swapall = BR_FFTTwoChan32;  savesigfits = false; }
     390  if (acqmode == "fft1c32")  swapall = BR_FFTOneChanSwap32;
     391  if (acqmode == "fft2c32")  swapall = BR_FFTTwoChanSwap32;
     392  if (acqmode == "fft1cnof32")  { swapall = BR_FFTOneChanSwap32;  savesigfits = false; }
     393  if (acqmode == "fft2cnof32")  { swapall = BR_FFTTwoChanSwap32;  savesigfits = false; }
    387394
    388395}
     
    398405  PCIEWrapperInterface* pciwp=NULL;
    399406#ifdef NOPCIECARD
    400   TestPCIWrapperNODMA pciw(PaqSZ);
     407  TestPCIWrapperNODMA pciw(PaqSZ,nopciLossRate);
    401408  pciwp = &pciw;
    402409#else
     
    494501
    495502#ifdef NOPCIECARD
    496   TestPCIWrapperNODMA pciw1(PaqSZ);
    497   TestPCIWrapperNODMA pciw2(PaqSZ);
     503  TestPCIWrapperNODMA pciw1(PaqSZ,nopciLossRate);
     504  TestPCIWrapperNODMA pciw2(PaqSZ,nopciLossRate);
    498505  pciwp1 = &pciw1;
    499506  pciwp2 = &pciw2;
  • trunk/AddOn/TAcq/tmtacq.h

    r3624 r3671  
    22#define TMTACQ_H
    33#include <signal.h>
    4 #define BAOR_ACQ_VER 5.0
    5 #define BAOR_ACQ_VER_STR "BaoAcq_v5_Mai09 "
     4#include "bracqvers.h"
    65// ajout d'une gestion plus sure de l'arret par Controle C
    76#endif
Note: See TracChangeset for help on using the changeset viewer.