ISIS Logo
NINetVar
An EPICS support module to export National Instruments Network Shared Variables as process variables
NINetVarDriver.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 NINETVARDRIVER_H
12 #define NINETVARDRIVER_H
13 
14 #include "asynPortDriver.h"
15 
16 class NINetVarInterface;
17 
21 class Win32StructuredException : public std::runtime_error
22 {
23 public:
24  explicit Win32StructuredException(const std::string& message) : std::runtime_error(message) { }
25  explicit Win32StructuredException(unsigned int code, EXCEPTION_POINTERS *pExp) : std::runtime_error(win32_message(code, pExp)) { }
26 private:
27  static std::string win32_message(unsigned int code, EXCEPTION_POINTERS * pExp);
28 };
29 
30 
32 class NINetVarDriver : public asynPortDriver
33 {
34 public:
35  NINetVarDriver(NINetVarInterface* netvarint, int poll_ms, const char *portName);
36 
37  // These are the methods that we override from asynPortDriver
38  virtual asynStatus writeInt32(asynUser *pasynUser, epicsInt32 value);
39  virtual asynStatus writeFloat64(asynUser *pasynUser, epicsFloat64 value);
40  virtual asynStatus writeOctet(asynUser *pasynUser, const char *value, size_t maxChars, size_t *nActual);
41  virtual asynStatus writeInt8Array(asynUser *pasynUser, epicsInt8 *value, size_t nElements);
42  virtual asynStatus writeInt16Array(asynUser *pasynUser, epicsInt16 *value, size_t nElements);
43  virtual asynStatus writeInt32Array(asynUser *pasynUser, epicsInt32 *value, size_t nElements);
44  virtual asynStatus writeFloat32Array(asynUser *pasynUser, epicsFloat32 *value, size_t nElements);
45  virtual asynStatus writeFloat64Array(asynUser *pasynUser, epicsFloat64 *value, size_t nElements);
46  virtual asynStatus readFloat32Array(asynUser *pasynUser, epicsFloat32 *value, size_t nElements, size_t *nIn);
47  virtual asynStatus readFloat64Array(asynUser *pasynUser, epicsFloat64 *value, size_t nElements, size_t *nIn);
48  virtual asynStatus readInt8Array(asynUser *pasynUser, epicsInt8 *value, size_t nElements, size_t *nIn);
49  virtual asynStatus readInt16Array(asynUser *pasynUser, epicsInt16 *value, size_t nElements, size_t *nIn);
50  virtual asynStatus readInt32Array(asynUser *pasynUser, epicsInt32 *value, size_t nElements, size_t *nIn);
51  virtual void report(FILE* fp, int details);
52  int pollTime() { return m_poll_ms; }
53  void updateValues()
54  {
56  }
57  static void epicsExitFunc(void* arg);
58  void shuttingDown(bool state) { m_shutting_down = state; }
59  bool shuttingDown() { return m_shutting_down; }
60 
61 private:
63  int m_poll_ms;
65 
66  template<typename T> asynStatus writeValue(asynUser *pasynUser, const char* functionName, T value);
67  template<typename T> asynStatus writeArrayValue(asynUser *pasynUser, const char* functionName, T* value, size_t nElements);
68  template<typename T> asynStatus readArrayValue(asynUser *pasynUser, const char* functionName, T *value, size_t nElements, size_t *nIn);
69 
70  static void NINetVarTask(void* arg);
71 };
72 
73 #endif /* NINETVARDRIVER_H */
virtual void report(FILE *fp, int details)
EPICS driver report function for iocsh dbior command.
virtual asynStatus readInt32Array(asynUser *pasynUser, epicsInt32 *value, size_t nElements, size_t *nIn)
virtual asynStatus writeOctet(asynUser *pasynUser, const char *value, size_t maxChars, size_t *nActual)
STL namespace.
An STL exception describing a Win32 Structured Exception.
void shuttingDown(bool state)
asynStatus writeValue(asynUser *pasynUser, const char *functionName, T value)
write a value to the driver
virtual asynStatus readFloat32Array(asynUser *pasynUser, epicsFloat32 *value, size_t nElements, size_t *nIn)
EPICS Asyn port driver class.
static void epicsExitFunc(void *arg)
static std::string win32_message(unsigned int code, EXCEPTION_POINTERS *pExp)
Helper function to map a win32 structured exception into a C++ standard exception.
virtual asynStatus readInt16Array(asynUser *pasynUser, epicsInt16 *value, size_t nElements, size_t *nIn)
virtual asynStatus writeInt8Array(asynUser *pasynUser, epicsInt8 *value, size_t nElements)
virtual asynStatus writeInt32(asynUser *pasynUser, epicsInt32 value)
virtual asynStatus readFloat64Array(asynUser *pasynUser, epicsFloat64 *value, size_t nElements, size_t *nIn)
Win32StructuredException(unsigned int code, EXCEPTION_POINTERS *pExp)
virtual asynStatus writeInt16Array(asynUser *pasynUser, epicsInt16 *value, size_t nElements)
NINetVarDriver(NINetVarInterface *netvarint, int poll_ms, const char *portName)
Constructor for the NINetVarDriver class.
virtual asynStatus writeFloat32Array(asynUser *pasynUser, epicsFloat32 *value, size_t nElements)
NINetVarInterface * m_netvarint
asynStatus readArrayValue(asynUser *pasynUser, const char *functionName, T *value, size_t nElements, size_t *nIn)
virtual asynStatus writeFloat64Array(asynUser *pasynUser, epicsFloat64 *value, size_t nElements)
Win32StructuredException(const std::string &message)
Manager class for the NetVar Interaction. Parses an netvarconfig.xml file and provides access to the ...
virtual asynStatus writeFloat64(asynUser *pasynUser, epicsFloat64 value)
write a float to the driver
virtual asynStatus readInt8Array(asynUser *pasynUser, epicsInt8 *value, size_t nElements, size_t *nIn)
virtual asynStatus writeInt32Array(asynUser *pasynUser, epicsInt32 *value, size_t nElements)
static void NINetVarTask(void *arg)
asynStatus writeArrayValue(asynUser *pasynUser, const char *functionName, T *value, size_t nElements)
write an array to the driver
Copyright © 2013 Science and Technology Facilities Council | Generated by   doxygen 1.8.8