ISIS Logo
ECLAB
An EPICS support module to export potentiostat values as process variables
ECLabInterface.h
Go to the documentation of this file.
1 /*************************************************************************\
2 * Copyright (c) 2013 Science and Technology Facilities Council (STFC), GB.
3 * All rights reverved.
4 * This file is distributed subject to a Software License Agreement found
5 * in the file LICENSE.txt that is included with this distribution.
6 \*************************************************************************/
7 
8 #ifndef ECLabInterface_H
9 #define ECLabInterface_H
10 
14 
15 #include <string>
16 #include <sstream>
17 #include <BLFunctions.h>
18 
19 #include "BLFunctionsStub.h"
20 
21 #define BLCONCAT(A,B) A##B
22 
24 class ECLabException : public std::runtime_error
25 {
26  public:
27  explicit ECLabException(const std::string& what) : std::runtime_error(what) { }
28  explicit ECLabException(const std::string& func, int code) : std::runtime_error(std::string(func + " failed: " + translateCode(code))) { }
29  static std::string translateCode(int code)
30  {
31  char mesg[256];
32  std::ostringstream oss;
33  unsigned int mesg_size = sizeof(mesg);
34  if ( BL_GetErrorMsg(code, mesg, &mesg_size) == 0)
35  {
36  return mesg;
37  }
38  else
39  {
40  oss << "unknown error code: " << code;
41  return oss.str();
42  }
43  }
44 };
45 
47 #define BL_CALL(__func, ... ) \
48  int status; \
49  if (BLSIM) \
50  { \
51  status = BLCONCAT(__func,Stub) ( __VA_ARGS__ ); \
52  } \
53  else \
54  { \
55  status = __func ( __VA_ARGS__ ); \
56  } \
57  if ( status != 0 ) \
58  { \
59  throw ECLabException(#__func, status); \
60  }
61 
65 {
66  static bool BLSIM;
67 
68  static void GetLibVersion(char* pVersion, unsigned int* psize)
69  {
70  BL_CALL(BL_GetLibVersion, pVersion, psize);
71  }
72 
73  static void Connect(const char* address, uint8 TimeOut, int* pID, TDeviceInfos_t* pInfos)
74  {
75  BL_CALL(BL_Connect, address, TimeOut, pID, pInfos );
76  }
77 
78  static void testConnect(int ID)
79  {
80  BL_CALL(BL_TestConnection, ID);
81  }
82 
83  static void Disconnect(int ID)
84  {
85  BL_CALL(BL_Disconnect, ID);
86  }
87 
88  static void LoadFirmware(int ID, uint8* pChannels, int* pResults, uint8 Length,
89  bool ShowGauge, bool ForceReload, const char* BinFile, const char* XlxFile)
90  {
91  BL_CALL(BL_LoadFirmware, ID, pChannels, pResults, Length, ShowGauge, ForceReload, BinFile, XlxFile);
92  }
93 
94  static void LoadTechnique(int ID, uint8 channel, char* pFName, TEccParams_t Params, bool FirstTechnique, bool LastTechnique, bool DisplayParams)
95  {
96  BL_CALL(BL_LoadTechnique, ID, channel, pFName, Params, FirstTechnique, LastTechnique, DisplayParams);
97  }
98 
99  static void GetChannelInfos (int ID, uint8 ch, TChannelInfos_t *pInfos)
100  {
101  BL_CALL(BL_GetChannelInfos, ID, ch, pInfos);
102  }
103 
104  static void StopChannel (int ID, uint8 channel)
105  {
106  BL_CALL(BL_StopChannel, ID, channel);
107  }
108 
109  static void StartChannel (int ID, uint8 channel)
110  {
111  BL_CALL(BL_StartChannel, ID, channel);
112  }
113 
114  static bool IsChannelPlugged( int ID, uint8 ch )
115  {
116  if (BLSIM)
117  {
118  return BL_IsChannelPluggedStub(ID, ch);
119  }
120  else
121  {
122  return BL_IsChannelPlugged(ID, ch);
123  }
124  }
125 
126  static void GetCurrentValues (int ID, uint8 channel, TCurrentValues_t *pValues)
127  {
128  BL_CALL(BL_GetCurrentValues, ID, channel, pValues);
129  }
130 
131  static void UpdateParameters( int ID, uint8 channel, int TechIndx, TEccParams_t Params, const char* EccFileName )
132  {
133  BL_CALL(BL_UpdateParameters, ID, channel, TechIndx, Params, EccFileName);
134  }
135 
136  static void GetData( int ID, uint8 channel, TDataBuffer_t* pBuf, TDataInfos_t* pInfos, TCurrentValues_t* pValues )
137  {
138  BL_CALL(BL_GetData, ID, channel, pBuf, pInfos, pValues);
139  }
140 
141  static void SetExperimentInfos( int ID, uint8 channel, TExperimentInfos_t TExpInfos )
142  {
143  BL_CALL(BL_SetExperimentInfos, ID, channel, TExpInfos);
144  }
145 
146  static void GetExperimentInfos( int ID, uint8 channel, TExperimentInfos_t* TExpInfos )
147  {
148  BL_CALL(BL_GetExperimentInfos, ID, channel, TExpInfos);
149  }
150 
151 };
152 
153 #undef BLCONCAT
154 
155 #endif /* ECLabInterface_H */
uint8 const char TEccParams_t bool FirstTechnique
uint8 int uint8 bool bool ForceReload
uint8 int TechIndx
uint8 int TDeviceInfos_t * pInfos
ECLabException(const std::string &what)
Wraps all of the ECLab BL_* function in an interface class that converts the error code into an excep...
static void Disconnect(int ID)
pVersion[*psize-1]
static std::string translateCode(int code)
uint8 int uint8 bool bool const char const char * XlxFile
static void LoadFirmware(int ID, uint8 *pChannels, int *pResults, uint8 Length, bool ShowGauge, bool ForceReload, const char *BinFile, const char *XlxFile)
uint8 const char TEccParams_t bool bool LastTechnique
uint8 channel
static void GetChannelInfos(int ID, uint8 ch, TChannelInfos_t *pInfos)
uint8 TExperimentInfos_t TExpInfos
uint8 int uint8 Length
static bool IsChannelPlugged(int ID, uint8 ch)
static void GetCurrentValues(int ID, uint8 channel, TCurrentValues_t *pValues)
uint8 * pChannels
uint8 const char TEccParams_t bool bool bool DisplayParams
static void StartChannel(int ID, uint8 channel)
uint8 int uint8 bool ShowGauge
ECLabException(const std::string &func, int code)
uint8 TDataBuffer_t * pBuf
static void SetExperimentInfos(int ID, uint8 channel, TExperimentInfos_t TExpInfos)
static void GetLibVersion(char *pVersion, unsigned int *psize)
static void StopChannel(int ID, uint8 channel)
static void Connect(const char *address, uint8 TimeOut, int *pID, TDeviceInfos_t *pInfos)
static bool BLSIM
uint8 TCurrentValues_t * pValues
static void testConnect(int ID)
uint8 const char TEccParams_t Params
uint8 int TEccParams_t const char * EccFileName
uint8 int uint8 bool bool const char * BinFile
uint8 int * pResults
unsigned int * psize
static void UpdateParameters(int ID, uint8 channel, int TechIndx, TEccParams_t Params, const char *EccFileName)
uint8 int * pID
static void GetExperimentInfos(int ID, uint8 channel, TExperimentInfos_t *TExpInfos)
encapsulates an EC lab error code as an exception object
static void GetData(int ID, uint8 channel, TDataBuffer_t *pBuf, TDataInfos_t *pInfos, TCurrentValues_t *pValues)
static void LoadTechnique(int ID, uint8 channel, char *pFName, TEccParams_t Params, bool FirstTechnique, bool LastTechnique, bool DisplayParams)
uint8 const char * pFName
#define BL_CALL(__func,...)
call an ECLab function, converting error into an exception
uint8 ch
Copyright © 2013 Science and Technology Facilities Council | Generated by   doxygen 1.8.5