TVmeDaughterBoardMemoryModule.hh Source File

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

# TVmeDaughterBoardMemoryModule.hh

解説を見る。

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