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

TVmeDaughterBoardMemoryModule.hh

解説を見る。
00001 // =====================================================================
00021 // =====================================================================
00022 #ifndef __TVMEDAUGHTERBOARDMEMORYMODULE_HH
00023 #define __TVMEDAUGHTERBOARDMEMORYMODULE_HH
00024 
00025 #include "Tglobals.h"
00026 #include "TVmeModule.hh"
00027 
00028 class TDataElement;
00029 class TVmeMpx201aModule;
00030 
00031 
00051 class TVmeDaughterBoardMemoryModule
00052   : public TVmeModule
00053 {
00054 
00055   public:
00056     enum { tDataUnderflow = SHRT_MIN, tDataOverflow = SHRT_MAX };
00057 
00058   private:
00059     Tint theNumberOfSampling;
00060 
00061   public:
00062     TVmeDaughterBoardMemoryModule( Toff_t offset, Tint mapsize, Tint nblock, Tint nch = 1 );
00063     TVmeDaughterBoardMemoryModule( const TVmeMpx201aModule* mpx201a, Tint nch = 1 );
00064     TVmeDaughterBoardMemoryModule( const TVmeDaughterBoardMemoryModule& right );
00065     ~TVmeDaughterBoardMemoryModule();
00066 
00067   public:
00068     const TVmeDaughterBoardMemoryModule& operator=( const TVmeDaughterBoardMemoryModule& right );
00069     Tbool operator==( const TVmeDaughterBoardMemoryModule& right ) const;
00070     Tbool operator!=( const TVmeDaughterBoardMemoryModule& right ) const;
00071 
00072   public:
00073     Tint GetNumberOfSampling() const;
00074     Tvoid SetNumberOfSampling( Tint nsamples );
00075 
00076   public:
00077     Tint Clear();
00078     Tint Update();
00079     Tint Initialize();
00080     Tvoid FillData( TDataElement& element, Tint channel );
00081 
00082   private:
00083     Tshort modifyData( Tlong databuf ) const;
00084 
00085 };
00086 
00087 inline Tint TVmeDaughterBoardMemoryModule::GetNumberOfSampling() const
00088 {
00089   return theNumberOfSampling;
00090 }
00091 
00092 inline Tvoid TVmeDaughterBoardMemoryModule::SetNumberOfSampling( Tint nsamples )
00093 {
00094   theNumberOfSampling = nsamples;
00095   return;
00096 }
00097 
00098 inline Tshort TVmeDaughterBoardMemoryModule::modifyData( Tlong databuf ) const
00099 {
00100   if ( ( databuf & 0x0000fff0 ) == 0x7ff0 ) {
00101     // overflow
00102     return tDataOverflow;
00103   } else if ( ( databuf & 0x0000fff0 ) == 0x8000 ) {
00104     // underflow
00105     return tDataUnderflow;
00106   }
00107  
00108   Tshort retval = (Tshort)( databuf & 0x0000fff0 );
00109   Tbit sign = ( retval & 0x8000 ) >> 15;
00110   if ( sign == 1 ) {
00111     // case of negative value
00112     retval &= 0x7ff0;
00113     retval = retval >> 4;
00114   } else if ( sign == 0 ) {
00115     // case of positive value
00116     retval = retval >> 4;
00117     retval += 0x0800;
00118   } else {
00119     Tcerr << "TVmeDaughterBoardMemoryModule::modifyData: failed." << Tendl;
00120   }
00121 
00122   return retval;
00123 }
00124 
00125 #endif

CLDAQ - a Class Library for Data AcQuisition (Version 1.10.0)
Go IWAI <goiwai@users.sourceforge.jp>