TVmeDaughterBoardMemoryModule.hh Source File

メインページ モジュール クラス階層 アルファベット順一覧 構成 ファイル一覧 構成メンバ ファイルメンバ 関連ページ

# TVmeDaughterBoardMemoryModule.hh

解説を見る。

    00001 // =====================================================================
    00002 //  $Id: TVmeDaughterBoardMemoryModule.hh,v 1.1.1.1 2003/06/27 02:56:41 goiwai Exp $
    00003 //  $Name: CLDAQ-1-06-00 $
    00004 // =====================================================================
    00005 #ifndef __TVMEDAUGHTERBOARDMEMORYMODULE_HH
    00006 #define __TVMEDAUGHTERBOARDMEMORYMODULE_HH
    00007
    00008 #include "Tglobals.h"
    00009 #include "TVmeModule.hh"
    00010
    00011 class TDataElement;
    00012 class TVmeMpx201aModule;
    00013
    00014 class TVmeDaughterBoardMemoryModule
    00015   : public TVmeModule
    00016 {
    00017
    00018   public:
    00019     enum { tDataUnderflow = SHRT_MIN, tDataOverflow = SHRT_MAX };
    00020
    00021   private:
    00022     Tint theNumberOfSampling;
    00023
    00024   public:
    00025     TVmeDaughterBoardMemoryModule( Toff_t offset, Tint mapsize, Tint nblock, Tint nch = 1 );
    00026     TVmeDaughterBoardMemoryModule( const TVmeMpx201aModule* mpx201a, Tint nch = 1 );
    00027     TVmeDaughterBoardMemoryModule( const TVmeDaughterBoardMemoryModule& right );
    00028     ~TVmeDaughterBoardMemoryModule();
    00029
    00030   public:
    00031     const TVmeDaughterBoardMemoryModule& operator=( const TVmeDaughterBoardMemoryModule& right );
    00032     Tbool operator==( const TVmeDaughterBoardMemoryModule& right ) const;
    00033     Tbool operator!=( const TVmeDaughterBoardMemoryModule& right ) const;
    00034
    00035   public:
    00036     Tint GetNumberOfSampling() const;
    00037     Tvoid SetNumberOfSampling( Tint nsamples );
    00038
    00039   public:
    00040     Tint Clear();
    00041     Tint Update();
    00042     Tint Initialize();
    00043     Tvoid FillData( TDataElement& element, Tint channel );
    00044
    00045   private:
    00046     Tshort modifyData( Tlong databuf ) const;
    00047
    00048 };
    00049
    00050 inline Tint TVmeDaughterBoardMemoryModule::GetNumberOfSampling() const
    00051 {
    00052   return( theNumberOfSampling );
    00053 }
    00054
    00055 inline Tvoid TVmeDaughterBoardMemoryModule::SetNumberOfSampling( Tint nsamples )
    00056 {
    00057   theNumberOfSampling = nsamples;
    00058   return;
    00059 }
    00060
    00061 inline Tshort TVmeDaughterBoardMemoryModule::modifyData( Tlong databuf ) const
    00062 {
    00063   if ( ( databuf & 0x0000fff0 ) == 0x7ff0 ) {
    00064     // overflow
    00065     return( tDataOverflow );
    00066   } else if ( ( databuf & 0x0000fff0 ) == 0x8000 ) {
    00067     // underflow
    00068     return( tDataUnderflow );
    00069   }
    00070
    00071   Tshort retval = (Tshort)( databuf & 0x0000fff0 );
    00072   Tbit sign = ( retval & 0x8000 ) >> 15;
    00073   if ( sign == 1 ) {
    00074     // case of negative value
    00075     retval &= 0x7ff0;
    00076     retval = retval >> 4;
    00077   } else if ( sign == 0 ) {
    00078     // case of positive value
    00079     retval = retval >> 4;
    00080     retval += 0x0800;
    00081   } else {
    00082     Tcerr << "TVmeDaughterBoardMemoryModule::modifyData: failed." << Tendl;
    00083   }
    00084
    00085   return( retval );
    00086 }
    00087
    00088 #endif