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

TVmeDaughterBoardMemoryModule.hh

解説を見る。
00001 // =====================================================================
00002 //  $Id: TVmeDaughterBoardMemoryModule.hh,v 1.2 2003/07/30 16:19:12 goiwai Exp $
00003 //  $Name: CLDAQ-1-07-01 $
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

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