00001 00002 00003 00004 00005 00006
00007 #ifndef GPIBController_h
00008 #define GPIBController_h
00009
00010 #include <list>
00011 #include <string>
00012 #include <fstream>
00013 #include "GPIBEquipment.h"
00014 #include "LibGPIB.h"
00015
00016 extern "C++" {
00017 namespace LibGPIB {
00035 class GPIBController : public iostream {
00036 public:
00040 typedef GPIBEquipment * GPIBEquipmentPtr ;
00041 typedef list<GPIBEquipmentPtr> GPIBEquipmentList ;
00042 typedef GPIBEquipmentList::iterator GPIBEquipmentListIterator ;
00043 typedef GPIBEquipmentList::const_iterator GPIBEquipmentListConstIterator ;
00045
00046 00047 00048 00049
00053 static const char CR = 13 ;
00054
00058 static const char LF = 10 ;
00059
00066 enum EOSModeVal {
00068 EOS_TERM_READ = (1<<2),
00070 EOS_WRITE_EOI = (1<<3),
00072 EOS_EIGHT_BIT = (1<<4)
00073 } ;
00075
00079
00081
00125 GPIBController() ;
00126
00132 virtual ~GPIBController() = 0 ;
00133
00135
00148 void Open() = 0 ;
00149
00154 void Close() = 0 ;
00155
00163 virtual void BecomeActiveController(bool synchronously=true) = 0 ;
00164
00171 virtual void ClearDevice(GPIBEquipment &device) = 0 ;
00172
00179 virtual void SendCommand(GPIBEquipment &device, const string command) = 0 ;
00180
00188 virtual const string ReadData(GPIBEquipment &device, const int read_bytes) = 0 ;
00189
00196 virtual void SetLocal(GPIBEquipment &device) = 0 ;
00197
00198 00199 00200 00201
00202 00203
00204
00210 virtual void SetEOSModeAndChar(const EOSModeVal mode, const char eos) = 0 ;
00211
00220 const EOSModeVal SetEOSMode(const EOSModeVal mode) ;
00221
00226 const EOSModeVal EOSMode() const ;
00227
00236 const char SetEOSChar(const char eos) ;
00237
00243 const char EOSChar() const ;
00244
00251 void ConnectDevice(GPIBEquipment& device) ;
00252
00257 void DisconnectDevice(GPIBEquipment& device) ;
00258
00264 void DisconnectAllDevices() ;
00265
00266 00267 00268 00269 00270 00271 00272
00273
00274
00276
00280
00282
00283 00284 00285 00286
00292 friend GPIBEquipmentBuffer ;
00293 protected:
00294 00295 00296 00297
00298 00299 00300 00301
00306 virtual ostream& SendCharPrefix( const int primary_address,
00307 const int secondary_address=0 ) = 0 ;
00308
00313 virtual ostream& SendCharPostfix( const int primary_address,
00314 const int secondary_address=0 ) = 0 ;
00315
00320 virtual ostream& ReadCharPrefix( const int primary_address,
00321 const int secondary_address=0 ) = 0 ;
00322
00327 virtual ostream& ReadCharPostfix( const int primary_address,
00328 const int secondary_address=0) = 0 ;
00329
00330 private:
00331 00332 00333 00334
00339 GPIBEquipmentList mDeviceList ;
00340
00344 int mIOTimeout ;
00345
00349 int mEOIMode ;
00350
00362 EOSModeVal mEOSMode ;
00363
00367 char mEOSChar ;
00368 00369 00370 00371
00372 } ;
00373
00374 inline
00375 GPIBController::GPIBController() :
00376 iostream(0) {
00377 mEOSMode = EOS_TERM_READ ;
00378 mEOSChar = '\n' ;
00379 mEOIMode = 0 ;
00380 mIOTimeout = 0 ;
00381
00382 }
00383
00384 inline
00385 GPIBController::~GPIBController() {
00386 DisconnectAllDevices() ;
00387 }
00388
00389 inline
00390 const GPIBController::EOSModeVal
00391 GPIBController::SetEOSMode(const EOSModeVal mode) {
00392 SetEOSModeAndChar(mode, mEOSChar) ;
00393 return mEOSMode ;
00394 }
00395
00396 inline
00397 const GPIBController::EOSModeVal
00398 GPIBController::EOSMode() const {
00399 return mEOSMode ;
00400 }
00401
00402 inline
00403 const char GPIBController::SetEOSChar(const char eos) {
00404 SetEOSModeAndChar(mEOSMode, eos) ;
00405 return mEOSChar ;
00406 }
00407
00408 inline
00409 const char
00410 GPIBController::EOSChar() const {
00411 return mEOSChar ;
00412 }
00413
00414 }
00415 }
00416
00417 #endif