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

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

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