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