ISIS Logo
ECLAB
An EPICS support module to export potentiostat values as process variables
ECLabDriver.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 
10 
11 #ifndef ECLABDRIVER_H
12 #define ECLABDRIVER_H
13 
14 #include "asynPortDriver.h"
15 //#include "ECLabTechnique.h"
17 class ECLabDriver : public asynPortDriver
18 {
19 public:
20  ECLabDriver(const char *portName, const char *ip);
21 
22  // These are the methods that we override from asynPortDriver
23  virtual asynStatus writeInt32(asynUser *pasynUser, epicsInt32 value);
24 // virtual asynStatus readInt32(asynUser *pasynUser, epicsInt32 *value);
25  virtual asynStatus writeFloat64(asynUser *pasynUser, epicsFloat64 value);
26 // virtual asynStatus readFloat64(asynUser *pasynUser, epicsFloat64 *value);
27 // virtual asynStatus readOctet(asynUser *pasynUser, char *value, size_t maxChars, size_t *nActual, int *eomReason);
28  virtual asynStatus writeOctet(asynUser *pasynUser, const char *value, size_t maxChars, size_t *nActual);
29 // virtual asynStatus readFloat64Array(asynUser *pasynUser, epicsFloat64 *value, size_t nElements, size_t *nIn);
30 // virtual asynStatus readInt32Array(asynUser *pasynUser, epicsInt32 *value, size_t nElements, size_t *nIn);
31  virtual void report(FILE* fp, int details);
32 // void testPrintMap(techniqueMap_t);
33  double getTime(unsigned thigh, unsigned tlow, double start_time, double time_base);
34  void processOCVData(std::fstream& fs, int nrows, int ncols, int technique_index, int process_index,
35  int loop, double start_time, double time_base, TDataBuffer_t* dbuffer);
36  void processPEISData(std::fstream& fs0, std::fstream& fs1, int nrows, int ncols, int technique_index, int process_index,
37  int loop, double start_time, double time_base, TDataBuffer_t* dbuffer);
38  void updateCvals(int chan, TCurrentValues_t& cvals);
39 
40 private:
41  int P_version; // string
42  int P_host; // string
43  int P_devCode; // int
44  int P_numChannels; //int
45  int P_numSlots; //int
46  int P_numTech; // int
47  int P_memFilled; // int
48  int P_currEWE; // float
49  int P_currECE; // float
50  int P_currI; // float
51  int P_currTIME; // float
52  int P_currRCOMP; // float
53  int P_currFREQ; // float
54  int P_currSTATE; // int
55  int P_currTimeBase; // float
56  int P_loadTech; // string
57  int P_defineTech; // string
58  int P_updateParams; // int
59  int P_dataDone; // int
60  int P_filePrefix; // string
61  int P_saveData; //int
62  int P_startChannel; // int
63  int P_stopChannel; //int
64 
65  TDeviceInfos_t m_infos;
66  struct techinfo
67  {
68  std::string name;
69  int index;
70  techinfo(const std::string& name_, int index_) : name(name_), index(index_) { }
71  };
72  std::vector<techinfo> m_techniques;
73 
74  int m_ID; // connection ID
75 
76  #define FIRST_ECLAB_PARAM P_version
77  #define LAST_ECLAB_PARAM P_stopChannel
78 
79  static void ECLabValuesTaskC(void* arg);
80  void ECLabValuesTask();
81  static void ECLabDataTaskC(void* arg);
82  void ECLabDataTask();
83 };
84 
85 #define NUM_ECLAB_PARAMS (&LAST_ECLAB_PARAM - &FIRST_ECLAB_PARAM + 1)
86 
87 #define P_versionString "VERSION"
88 #define P_hostString "HOST"
89 #define P_devCodeString "DEVCODE"
90 #define P_numChannelsString "NUMCHANNELS"
91 #define P_numSlotsString "NUMSLOTS"
92 #define P_numTechString "NUMTECH"
93 #define P_memFilledString "MEMFILLED"
94 #define P_currEWEString "CURR_EWE"
95 #define P_currECEString "CURR_ECE"
96 #define P_currIString "CURR_I"
97 #define P_currTIMEString "CURR_TIME"
98 #define P_currRCOMPString "CURR_RCOMP"
99 #define P_currFREQString "CURR_FREQ"
100 #define P_currSTATEString "CURR_STATE"
101 #define P_loadTechString "LOADTECH"
102 #define P_defineTechString "DEFINETECH"
103 #define P_updateParamsString "UPDATE"
104 #define P_dataDoneString "DATADONE"
105 #define P_startChannelString "STARTCHANNEL"
106 #define P_stopChannelString "STOPCHANNEL"
107 #define P_currTimeBaseString "CURR_TB"
108 #define P_filePrefixString "FILEPREFIX"
109 #define P_saveDataString "SAVEDATA"
110 
111 #endif /* ECLABDRIVER_H */
EPICS Asyn port driver class.
Definition: ECLabDriver.h:17
int P_currTimeBase
Definition: ECLabDriver.h:55
void processPEISData(std::fstream &fs0, std::fstream &fs1, int nrows, int ncols, int technique_index, int process_index, int loop, double start_time, double time_base, TDataBuffer_t *dbuffer)
void processOCVData(std::fstream &fs, int nrows, int ncols, int technique_index, int process_index, int loop, double start_time, double time_base, TDataBuffer_t *dbuffer)
void ECLabDataTask()
virtual asynStatus writeInt32(asynUser *pasynUser, epicsInt32 value)
int P_stopChannel
Definition: ECLabDriver.h:63
static void ECLabDataTaskC(void *arg)
int P_saveData
Definition: ECLabDriver.h:61
virtual void report(FILE *fp, int details)
EPICS driver report function for iocsh dbior command.
void updateCvals(int chan, TCurrentValues_t &cvals)
int P_currSTATE
Definition: ECLabDriver.h:54
int P_dataDone
Definition: ECLabDriver.h:59
std::vector< techinfo > m_techniques
Definition: ECLabDriver.h:72
int P_numSlots
Definition: ECLabDriver.h:45
int P_updateParams
Definition: ECLabDriver.h:58
int P_numChannels
Definition: ECLabDriver.h:44
techinfo(const std::string &name_, int index_)
Definition: ECLabDriver.h:70
ECLabDriver(const char *portName, const char *ip)
Constructor for the ECLabDriver class.
int P_loadTech
Definition: ECLabDriver.h:56
virtual asynStatus writeFloat64(asynUser *pasynUser, epicsFloat64 value)
double getTime(unsigned thigh, unsigned tlow, double start_time, double time_base)
int P_currRCOMP
Definition: ECLabDriver.h:52
int P_filePrefix
Definition: ECLabDriver.h:60
static void ECLabValuesTaskC(void *arg)
int P_memFilled
Definition: ECLabDriver.h:47
void ECLabValuesTask()
int P_startChannel
Definition: ECLabDriver.h:62
int P_currFREQ
Definition: ECLabDriver.h:53
int P_defineTech
Definition: ECLabDriver.h:57
TDeviceInfos_t m_infos
Definition: ECLabDriver.h:65
int P_currTIME
Definition: ECLabDriver.h:51
virtual asynStatus writeOctet(asynUser *pasynUser, const char *value, size_t maxChars, size_t *nActual)
Definition: ECLabDriver.cpp:87
Copyright © 2013 Science and Technology Facilities Council | Generated by   doxygen 1.8.5