11 #ifndef NETSHRVAR_INTERFACE_H
12 #define NETSHRVAR_INTERFACE_H
14 #ifdef epicsExportSharedSymbols
15 #define NetShrVarSymbols
16 #undef epicsExportSharedSymbols
21 #include <sys/timeb.h>
33 #if defined(_WIN32) && defined(_MSC_VER) && _MSC_VER < 1700
36 #define NSV_EMULATE_ATOMIC
45 #include <epicsMutex.h>
46 #include <epicsThread.h>
47 #include <epicsExit.h>
49 #include <asynDriver.h>
55 #include "pugixml.hpp"
57 #ifdef NetShrVarSymbols
58 #undef NetShrVarSymbols
59 #define epicsExportSharedSymbols
79 void createParams(asynPortDriver* driver);
80 void report(FILE* fp,
int details);
81 void readValue(
const char* param);
82 void dataTransferredCallback (
void * handle,
int error,
CallbackData* cb_data);
83 void dataCallback (
void * handle, CNVData data,
CallbackData* cb_data);
84 void statusCallback (
void * handle, CNVConnectionStatus status,
int error,
CallbackData* cb_data);
85 template<
typename T>
void setValue(
const char* param,
const T& value);
86 template<
typename T>
void setArrayValue(
const char* param,
const T* value,
size_t nElements);
87 template<
typename T>
void readArrayValue(
const char* paramName, T* value,
size_t nElements,
size_t* nIn);
88 static bool varExists(
const std::string& path);
89 static bool pathExists(
const std::string& path);
97 typedef std::map<std::string,NvItem*>
params_t;
106 struct timeb m_last_report;
110 #ifdef NSV_EMULATE_ATOMIC
111 InterlockedIncrement(&m_items_read);
112 InterlockedExchangeAdd64(&m_bytes_read, nbytes);
115 m_bytes_read += nbytes;
119 template<
typename T>
void getAsynParamValue(
int param, T& value);
120 char* envExpand(
const char *str);
122 void setValueCNV(
const std::string& name, CNVData value);
123 static void epicsExitFunc(
void* arg);
126 bool convertTimeStamp(
unsigned __int64 timestamp, epicsTimeStamp *epicsTS);
127 template<
typename T>
void updateParamValue(
int param_index, T val, epicsTimeStamp* epicsTS,
bool do_asyn_param_callbacks);
128 template<
typename T>
void updateParamArrayValue(
int param_index, T* val,
size_t nElements,
129 epicsTimeStamp* epicsTS,
bool do_asyn_param_callbacks);
130 void updateParamCNV (
int param_index, CNVData data, epicsTimeStamp* epicsTS,
bool do_asyn_param_callbacks);
131 template<CNVDataType cnvType>
void updateParamCNVImpl(
int param_index, CNVData data, CNVDataType type,
132 unsigned int nDims, epicsTimeStamp* epicsTS,
bool do_asyn_param_callbacks);
133 template<
typename T,
typename U>
void updateParamArrayValueImpl(
int param_index, T* val,
size_t nElements);
134 void readVarInit(
NvItem* item);
135 void setParamStatus(
int param_id, asynStatus status, epicsAlarmCondition alarmStat = epicsAlarmNone, epicsAlarmSeverity alarmSevr = epicsSevNone);
136 void getParamStatus(
int param_id, asynStatus& status,
int& alarmStat,
int& alarmSevr);
137 void initAsynParamIds();
138 void updateConnectedAlarmStatus(
const std::string& paramName,
int value,
const std::string& alarmStr, epicsAlarmCondition stat, epicsAlarmSeverity sevr);
int m_b_writer_wait_ms
how long to wait for a buffered write operation to complete in milliseconds
Stores information to be passed back via a shared variable callback on a subscriber connection...
int m_options
the various NetShrVarOptions currently in use
std::string m_configSection
section of configFile to load information from
std::atomic< uint64_t > my_atomic_uint64_t
void updateBytesReadCount(unsigned nbytes)
pugi::xml_document m_xmlconfig
Manager class for the NetVar Interaction. Parses an netvarconfig.xml file and provides access to the ...
bool checkOption(NetShrVarOptions option)
std::map< std::string, NvItem * > params_t
NetShrVarOptions
option argument in NetShrVarConfigure() of st.cmd not used at present
asynPortDriver * m_driver
int m_writer_wait_ms
how long to wait for a write operation to complete in milliseconds
details about a network shared variable we have connected to an asyn parameter
std::atomic< uint32_t > my_atomic_uint32_t
my_atomic_uint64_t m_bytes_read
my_atomic_uint32_t m_items_read