Changeset 3623 in Sophya for trunk/AddOn/TAcq/brpaqu.cc


Ignore:
Timestamp:
May 22, 2009, 9:59:38 AM (16 years ago)
Author:
ansari
Message:

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:
1 edited

Legend:

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

    r3592 r3623  
    5555  case BR_FFTOneChan :
    5656  case BR_FFTTwoChan :
     57    // Byte swap (sur 8 octets) de l'entete
    5758    // ByteSwap 8 (4->8 Reza/firmware SGDMA) de l'enete
    5859    for(int ka=0; ka<BRHDRSIZE; ka+=8) {
     
    6364    }
    6465
     66    // on reoordonne les coeff FFT et on swappe en mem temps  (Byte-swap sur 8 octets)
    6567    if (fgswap == BR_FFTOneChan) ReorderFFTData(src+HeaderSize(), dst_+HeaderSize(), DataSize());
    6668    else if (fgswap == BR_FFTTwoChan) {
     
    6870      ReorderFFTData(src+HeaderSize()+DataSize()/2, dst_+HeaderSize()+DataSize()/2, DataSize()/2);
    6971    }
     72    // Byte swap (sur 8 octets) du trailer
    7073    for(int ka=HeaderSize()+DataSize(); ka<sz_; ka+=8) {
    7174      for(int kb=0; kb<4; kb++) {
     
    7881  case BR_FFTOneChan32 :
    7982  case BR_FFTTwoChan32 :
    80     // on swappe tout  en attendant le swap general sinon il faut encore créer une fonctiondifferente de ReorderFFT
    81     // swapp du header uniquement
     83    // swap du header uniquement : Echange de deux mots de 4 octets
    8284    for(int ka=0; ka<BRHDRSIZE/4; ka+=2) {
    8385      dst32[ka] = src32[ka+1];
     
    8587    }
    8688 
    87     // on reoordonne et on swappe en mem temps
     89    // on reoordonne et on swappe en mem temps (Echange de deux mots de 4 octets)
    8890    if (fgswap == BR_FFTOneChan32) ReorderFFTData32(src+HeaderSize(), dst_+HeaderSize(), DataSize());
    8991    else if (fgswap == BR_FFTTwoChan32) {
     
    9193      ReorderFFTData32(src+HeaderSize()+DataSize()/2, dst_+HeaderSize()+DataSize()/2, DataSize()/2);
    9294    }
    93     // swap du trailler uniquement
     95    // swap du trailler uniquement : Echange de deux mots de 4 octets
    9496    for(int ka=(HeaderSize()+DataSize())/4;ka < sz_/4; ka+=2) {
    9597      dst32[ka] = src32[ka+1];
     
    99101  case BR_FFTOneChanNoSwap :
    100102  case BR_FFTTwoChanNoSwap :
    101     // on a plus de swapdonc il faut copier dans dst
    102     memcpy(dst_, src, sz_);
    103     // on reoordonne et on swappe en mem temps
     103    // copie du header uniquement
     104    for(int ka=0; ka<BRHDRSIZE/4; ka++)  dst32[ka] = src32[ka];
     105
     106    //DEL  on a plus de swapdonc il faut copier dans dst
     107    //DEL    memcpy(dst_, src, sz_);
     108
     109    // on reoordonne les coeff FFT (pas de swap)
    104110    if (fgswap == BR_FFTOneChanNoSwap) ReorderFFTDataNoSwap(src+HeaderSize(), dst_+HeaderSize(), DataSize());
    105111    else if (fgswap == BR_FFTTwoChanNoSwap) {
     
    107113      ReorderFFTDataNoSwap(src+HeaderSize()+DataSize()/2, dst_+HeaderSize()+DataSize()/2, DataSize()/2);
    108114    }
    109    
     115    // copie du trailler uniquement :
     116     for(int ka=(HeaderSize()+DataSize())/4;ka < sz_/4; ka++)  dst32[ka] = src32[ka];
     117   
    110118    break;
    111119  }  // Fin switch
     
    143151{
    144152  UInt16 ModAq;
    145   printf("Mod Acq %x \n",ModeAcq());
     153//DEL  printf("Mod Acq %x \n",ModeAcq());
    146154  ModAq = ((ModeAcq() & 0x30)>> 4);
    147155  return(ModAq);
    148  
    149 }
    150 
    151 /* --Methode__ */
    152 void BRPaquet::Print(ostream & os, int nelt, bool prht)
     156}
     157
     158/* --Methode__ */
     159void BRPaquet::SetHDRMarker64(UInt64 htag)
     160{
     161  *((UInt64*)(dst_+OFFSET)) = htag;
     162  return;       
     163}
     164
     165/* --Methode__ */
     166void BRPaquet::SetTRLMarker64(UInt64 ttag)
     167{
     168  *((UInt64*)(dst_+(sz_-BRTRLSIZE+OFFSET+1))) = 0;     
     169  *((UInt64*)(dst_+(sz_-BRTRLSIZE+OFFSET))) = ttag;
     170  return;                                       
     171}
     172
     173/* --Methode__ */
     174void BRPaquet::SetFrameCounter(UInt32 fc)
     175{
     176  UInt32* wp =  (UInt32*)(dst_+(BRFRCPTOFF+OFFSET));
     177  *wp = (*wp & 0x0000FFFF) | ((fc<<16) & 0xFFFF0000);
     178  return;                               
     179}
     180
     181/* --Methode__ */
     182void BRPaquet::SetTimeTag(UInt64 timtag)
     183{
     184  UInt32* wp =  (UInt32*)(dst_+(BRFRCPTOFF+OFFSET));
     185  UInt32 fc = *wp;
     186  *((UInt64*)(dst_+(BRTMTAGOFF+OFFSET))) = timtag;
     187  *wp = (*wp & 0x0000FFFF) | (fc & 0xFFFF0000);
     188  return;               
     189}
     190
     191/* --Methode__ */
     192ostream& BRPaquet::Print(ostream & os, int nelt, bool prht)
    153193{
    154194  os << endl << "BRPaquet::Print() PaqSz=" << PaquetSize() << " DataSize=" << DataSize()
    155      << " dst_pointer=(hex)" << hex << (unsigned long)dst_ << dec << endl;
     195     << " dst_pointer=(hex)" << hex << (unsigned long)dst_ << dec << endl; 
    156196  if (dst_ == NULL) {
    157197    os << " ...NULL paquet " << endl;
    158     return;
     198    return os;
    159199  }
    160 
    161   os << endl << " BR AcqMode: " << ModeAcquisition() << " Channel: " << ChannelID()  << endl;
    162 
     200  os << " BR AcqMode: " << ModeAcquisition() << " Channel: " << ChannelID() 
     201     << " FrameCounter=" << FrameCounter() << " FrameDataLen=" << PaqLen() << endl;
    163202  if (TrailerSize() > 0)
    164203    os << " ...HDRMarker(hex)=" << hex <<  HDRMarker() << " TRLMarker=" << TRLMarker() << dec << endl;
     
    168207  tt2 = TimeTag1();
    169208  tt1 = TimeTag2();
    170   os << " ...TimeTag (hex)=" << hex << "TimeTag()" << " TT1= " << tt1 << " TT2=" << tt2 << dec << endl;
     209  os << " ...TimeTag (hex)=" << hex << " TT1= " << tt1 << " TT2=" << tt2
     210     << dec << " ->TimeTag()=" << TimeTag() << endl;
    171211  // os << " ...Position Chariot (hex)= " << hex << PositionChariot() << endl;
    172212  if (nelt > DataSize()/2) nelt = DataSize()/2;
     
    192232    }
    193233  }
     234  return os;
    194235}
    195236
     
    401442  lostframes = 0;
    402443  frclst = 0;
     444  DefineHDRTag();
     445  DefineTRLTag();
    403446}
    404447
     
    407450}
    408451
     452UInt64 BRPaqChecker::DefineHDRTag(UInt32 hdr1, UInt32 hdr2)
     453{
     454  hdrtag_ = (UInt64)hdr1 + ((UInt64)hdr2 << 32);
     455  return hdrtag_;
     456}
     457
     458UInt64 BRPaqChecker::DefineTRLTag(UInt32 trl1, UInt32 trl2)
     459{
     460  trltag_ = (UInt64)trl1 + ((UInt64)trl2 << 32);
     461  return trltag_;
     462}
     463
     464
     465static int cnt_pb = 0;
    409466bool BRPaqChecker::Check(BRPaquet& paq)
    410467{
    411468  totnframes++;
    412   if (paq.HDRMarker() != 0x76543210) return false;
     469  if (paq.HDRMarker64() != HDRTag()) return false;
     470  if (paq.TRLMarker64() != TRLTag()) return false;
     471  /*
     472  if (paq.TRLMarker64() != TRLTag()) {
     473    cnt_pb++;
     474    if (cnt_pb < 5) paq.Print();
     475    return false;
     476  }
     477  */
    413478  unsigned int curfc = paq.FrameCounter();
    414479  unsigned int delfc = 0;
     
    419484  }
    420485  nframeok++; frclst = curfc;
     486  if (cnt_pb<5) { cnt_pb++; paq.Print(); }
    421487  return true;
    422488}
     
    424490ostream& BRPaqChecker::Print(ostream& os)
    425491{
    426   os << "BRPaqChecker:  Tot.Nb.Frames.Proc=" << totnframes << " NbFrameOK=" << nframeok
     492  //  os << "BRPaqChecker:  HDRTag=" << hex << HDRTag() << " TRLTag=" << TRLTag() << dec << "\n"
     493  //     << " ... Tot.Nb.Frames.Proc=" << totnframes << " NbFrame HDR/TRL OK=" << nframeok
     494  os << "BRPaqChecker: Tot.Nb.Frames.Proc=" << totnframes << " NbFrame HDR/TRL OK=" << nframeok
    427495     << " LostFrames=" << lostframes
    428496     << " Loss=" << (double)lostframes*100./(double)totnframes << " %" << endl;
Note: See TracChangeset for help on using the changeset viewer.