00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef __TCAMACMODULE_HH
00011 #define __TCAMACMODULE_HH
00012
00013 #include "Tglobals.h"
00014 #include "TModule.hh"
00015
00016
00017 typedef struct CamacDriverInterface
00018 {
00019 TUint _naf;
00020 Tshort _q;
00021 Tshort _x;
00022 union DataPartOfCamacData
00023 {
00024 TUshort _d16;
00025 TUint _d24;
00026 } _data;
00027 };
00028
00029 enum Tdata_t {
00030 t16bitModule = 16,
00031 t24bitModule = 24,
00032 tNumberOfDataType
00033 };
00034
00035 class TCamacCrateController;
00036
00037 class TCamacModule
00038 : public TModule
00039 {
00040
00041 protected:
00042 enum {
00043 tCamacRead = 0,
00044 tCamacWrite = 16,
00045 tCamacClear = 9,
00046 tCamacTestInterrupt = 8,
00047 tCamacClearInterrupt = 10,
00048 tCamacEnableInterrupt = 26,
00049 tCamacDisableInterrupt = 24
00050 };
00051
00052 protected:
00053 TCamacCrateController* theCrateController;
00054 Tdata_t theDataLength;
00055 Tint theSlotNumber;
00056 Tint theQ;
00057 Tint theX;
00058 TUint theCamacData;
00059
00060 public:
00061 TCamacModule( TCamacCrateController* cc7x00, Tint slot, Tint nch, Tdata_t datalen );
00062 TCamacModule( const TCamacModule& right );
00063
00064 protected:
00065 virtual ~TCamacModule();
00066
00067 public:
00068 virtual const TCamacModule& operator=( const TCamacModule& right );
00069 virtual Tbool operator==( const TCamacModule& right ) const;
00070 virtual Tbool operator!=( const TCamacModule& right ) const;
00071
00072 public:
00073 virtual Tint WaitInterrupt( Tint msec );
00074 virtual Tint ReadInterrupt();
00075 virtual Tint Clear();
00076 virtual Tint Update();
00077 virtual Tint Initialize();
00078
00079 public:
00080
00081 virtual Tint TestInterrupt();
00082 virtual Tint ClearInterrupt();
00083 virtual Tint EnableInterrupt();
00084 virtual Tint DisableInterrupt();
00085 virtual Tint Read();
00086 virtual Tint Read( Tint subaddress );
00087 virtual Tint Write( Tint data );
00088
00089 public:
00090 TCamacCrateController* GetCrateController() const;
00091 Tdata_t GetDataLength() const;
00092 Tint GetSlotNumber() const;
00093 Tint GetQ() const;
00094 Tint GetX() const;
00095 TUint GetCamacData() const;
00096 Tvoid SetDataLength( Tdata_t datalen );
00097 Tvoid SetSlotNumber( Tint slot );
00098 Tvoid SetQ( Tint q );
00099 Tvoid SetX( Tint x );
00100 Tvoid SetCamacData( TUint data );
00101
00102 protected:
00103 Tint execute( Tint subaddress, Tint function );
00104
00105 private:
00106 TUint generateNAF( Tint n, Tint a, Tint f );
00107 Tint execute16bit( TUint naf );
00108 Tint execute24bit( TUint naf );
00109
00110 };
00111
00112 inline TCamacCrateController* TCamacModule::GetCrateController() const
00113 {
00114 return( theCrateController );
00115 }
00116
00117 inline Tdata_t TCamacModule::GetDataLength() const
00118 {
00119 return( theDataLength );
00120 }
00121
00122 inline Tint TCamacModule::GetSlotNumber() const
00123 {
00124 return( theSlotNumber );
00125 }
00126
00127 inline Tint TCamacModule::GetQ() const
00128 {
00129 return( theQ );
00130 }
00131
00132 inline Tint TCamacModule::GetX() const
00133 {
00134 return( theX );
00135 }
00136
00137 inline TUint TCamacModule::GetCamacData() const
00138 {
00139 return( theCamacData );
00140 }
00141
00142 inline Tvoid TCamacModule::SetDataLength( Tdata_t datalen )
00143 {
00144 theDataLength = datalen;
00145 return;
00146 }
00147
00148 inline Tvoid TCamacModule::SetSlotNumber( Tint slot )
00149 {
00150 theSlotNumber = slot;
00151 return;
00152 }
00153
00154 inline Tvoid TCamacModule::SetQ( Tint q )
00155 {
00156 theQ = q;
00157 return;
00158 }
00159
00160 inline Tvoid TCamacModule::SetX( Tint x )
00161 {
00162 theX = x;
00163 return;
00164 }
00165
00166 inline Tvoid TCamacModule::SetCamacData( TUint data )
00167 {
00168 theCamacData = data;
00169 return;
00170 }
00171
00172 #endif