quadEM  7-0
drvNSLS_EM.h
Go to the documentation of this file.
1 /*
2  * drvNSLS_EM.h
3  *
4  * Asyn driver that inherits from the drvQuadEM class to control the NSLS Precision Integrator
5  *
6  * Author: Mark Rivers
7  *
8  * Created December 4, 2015
9  */
10 
11 #include "drvQuadEM.h"
12 
13 #define MAX_COMMAND_LEN 256
14 #define MAX_MODULES 16
15 #define MAX_IPNAME_LEN 16
16 #define MAX_PORTNAME_LEN 32
17 #define MAX_RANGES 8
18 
19 typedef struct {
20  int moduleID;
21  char moduleIP[MAX_IPNAME_LEN];
22 } moduleInfo_t;
23 
25 class drvNSLS_EM : public drvQuadEM {
26 public:
27  drvNSLS_EM(const char *portName, const char *broadcastAddress, int moduleID, int ringBufferSize);
28 
29  /* These are the methods we implement from asynPortDriver */
30  void report(FILE *fp, int details);
31 
32  /* These are the methods that are new to this class */
33  void readThread(void);
34  virtual void exitHandler();
35 
36 protected:
37  /* These are the methods we implement from quadEM */
38  virtual asynStatus setAcquire(epicsInt32 value);
39  virtual asynStatus setPingPong(epicsInt32 value);
40  virtual asynStatus setIntegrationTime(epicsFloat64 value);
41  virtual asynStatus setRange(epicsInt32 value);
42  virtual asynStatus setValuesPerRead(epicsInt32 value);
43  virtual asynStatus readStatus();
44  virtual asynStatus reset();
45 
46 private:
47  /* Our data */
48  char *broadcastAddress_;
49  char udpPortName_[MAX_PORTNAME_LEN];
50  char tcpCommandPortName_[MAX_PORTNAME_LEN];
51  char tcpDataPortName_[MAX_PORTNAME_LEN];
52  asynUser *pasynUserUDP_;
53  asynUser *pasynUserTCPCommand_;
54  asynUser *pasynUserTCPCommandConnect_;
55  asynUser *pasynUserTCPData_;
56  epicsEventId acquireStartEvent_;
57  int moduleID_;
58  int numModules_;
59  double ranges_[MAX_RANGES];
60  double scaleFactor_;
61  moduleInfo_t moduleInfo_[MAX_MODULES];
62  int readingActive_;
63  char firmwareVersion_[MAX_COMMAND_LEN];
64  char ipAddress_[MAX_IPNAME_LEN];
65  char outString_[MAX_COMMAND_LEN];
66  char inString_[MAX_COMMAND_LEN];
67  asynStatus findModule();
68  asynStatus writeReadMeter();
69  asynStatus getFirmwareVersion();
70  asynStatus setMode();
71  asynStatus computeScaleFactor();
72 };
73 
virtual asynStatus setIntegrationTime(epicsFloat64 value)
Sets the integration time.
Definition: drvNSLS_EM.cpp:441
drvNSLS_EM(const char *portName, const char *broadcastAddress, int moduleID, int ringBufferSize)
Constructor for the drvNSLS_EM class.
Definition: drvNSLS_EM.cpp:62
virtual asynStatus setValuesPerRead(epicsInt32 value)
Sets the values per read.
Definition: drvNSLS_EM.cpp:473
virtual asynStatus setRange(epicsInt32 value)
Sets the range.
Definition: drvNSLS_EM.cpp:459
Base class to control the quad electrometer.
Definition: drvQuadEM.h:128
int moduleID
Definition: drvNSLS_EM.h:20
Class to control the NSLS Precision Integrator.
Definition: drvNSLS_EM.h:25
void readThread(void)
Read thread to read the data from the electrometer when it is in continuous acquire mode...
Definition: drvNSLS_EM.cpp:299
char * portName
The name of this asyn port.
Definition: asynPortDriver.h:201
#define MAX_IPNAME_LEN
Definition: drvNSLS_EM.h:15
#define MAX_MODULES
Definition: drvNSLS_EM.h:14
void report(FILE *fp, int details)
Report parameters.
Definition: drvNSLS_EM.cpp:577
virtual void exitHandler()
Exit handler.
Definition: drvNSLS_EM.cpp:566
virtual asynStatus setAcquire(epicsInt32 value)
Starts and stops the electrometer.
Definition: drvNSLS_EM.cpp:389
virtual asynStatus setPingPong(epicsInt32 value)
Sets the ping-pong setting.
Definition: drvNSLS_EM.cpp:486
#define MAX_RANGES
Definition: drvNSLS_EM.h:17
Definition: drvNSLS_EM.h:19
virtual asynStatus reset()
Downloads all of the current EPICS settings to the electrometer.
Definition: drvNSLS_EM.cpp:554
virtual asynStatus readStatus()
Reads all the settings back from the electrometer.
Definition: drvNSLS_EM.cpp:511
#define MAX_PORTNAME_LEN
Definition: drvNSLS_EM.h:16
#define MAX_COMMAND_LEN
Definition: drvNSLS_EM.h:13