qmca  0.0.20
Public Slots | Signals | Public Member Functions | Private Member Functions | Static Private Member Functions | Private Attributes | List of all members
EpicsEnumeration Class Reference

#include <epicsenumeration.h>

Inheritance diagram for EpicsEnumeration:
Inheritance graph

Public Slots

void changeValue (struct dbr_gr_enum val)
 
void caput (int val)
 

Signals

void valueChanged (int)
 
void valueListChanged ()
 
- Signals inherited from EpicsObject
void valueChanged ()
 

Public Member Functions

 EpicsEnumeration (QString pvName, QObject *parent=0)
 
virtual ~EpicsEnumeration ()
 
void changeConnection (QString pv)
 
void connected ()
 
int value ()
 
QString valueString ()
 
QStringList valueList ()
 
- Public Member Functions inherited from EpicsObject
 EpicsObject (QString pvName, QObject *parent=0, int debug=0)
 
virtual ~EpicsObject ()
 
void changeConnection (QString pv)
 
int count ()
 
QString pvName ()
 
QString toolTip ()
 
virtual void disconnected ()
 
chid channelID ()
 
int debug ()
 
void setDebug (int dbg)
 
void settle (double t)
 
void ca_pend_io (double t)
 

Private Member Functions

virtual caEventCallBackFunc * get_event_handler ()
 

Static Private Member Functions

static void event_handler (struct event_handler_args arg)
 

Private Attributes

struct dbr_gr_enum m_Value
 

Additional Inherited Members

- Static Public Attributes inherited from EpicsObject
static QMutex m_Mutex
 
- Protected Attributes inherited from EpicsObject
chid m_ChannelID
 
evid m_EventID
 
bool m_HasEventHandler
 
int m_Debug
 

Detailed Description

Definition at line 8 of file epicsenumeration.h.

Constructor & Destructor Documentation

EpicsEnumeration::EpicsEnumeration ( QString  pvName,
QObject *  parent = 0 
)

Definition at line 6 of file epicsenumeration.cpp.

7  : EpicsObject(pvName, parent)
8 {
9 }
QString pvName()
Definition: epicsobject.cpp:30
EpicsObject(QString pvName, QObject *parent=0, int debug=0)
Definition: epicsobject.cpp:7
EpicsEnumeration::~EpicsEnumeration ( )
virtual

Definition at line 11 of file epicsenumeration.cpp.

12 {
13 }

Member Function Documentation

void EpicsEnumeration::caput ( int  val)
slot

Definition at line 96 of file epicsenumeration.cpp.

References EpicsObject::ca_pend_io(), and EpicsObject::channelID().

Referenced by EpicsA2DConverter::setGain(), and EpicsA2DConverter::setRange().

97 {
98  ca_put(DBR_INT, channelID(), &val);
99  ca_pend_io(0.5);
100 }
chid channelID()
Definition: epicsobject.cpp:63
void ca_pend_io(double t)
void EpicsEnumeration::changeConnection ( QString  pv)
void EpicsEnumeration::changeValue ( struct dbr_gr_enum  val)
slot

Definition at line 55 of file epicsenumeration.cpp.

References EpicsObject::m_Debug, EpicsObject::m_Mutex, m_Value, EpicsObject::valueChanged(), and valueListChanged().

Referenced by event_handler().

56 {
57  if (m_Debug) {
58  printf("EpicsEnumeration::changeValue\n");
59  }
60 
61  QMutexLocker lock(&m_Mutex);
62 
63  int valchanged=0;
64  int vlschanged=0;
65 
66  if (m_Value.value != newval.value) {
67  valchanged=1;
68  }
69 
70  if (m_Value.no_str != newval.no_str) {
71  vlschanged=1;
72  } else {
73  for (int i=0; i<m_Value.no_str; i++) {
74  if (strncmp(m_Value.strs[i],newval.strs[i],MAX_ENUM_STRING_SIZE)!=0) {
75  vlschanged=1;
76  break;
77  }
78  }
79  }
80 
81  m_Value = newval;
82 
83  if (m_Debug) {
84  printf("valchanged:%d vlschanged:%d\n", valchanged, vlschanged);
85  }
86 
87  if (vlschanged) {
88  emit valueListChanged();
89  }
90 
91  if (valchanged) {
92  emit valueChanged(m_Value.value);
93  }
94 }
void valueListChanged()
void valueChanged()
static QMutex m_Mutex
Definition: epicsobject.h:42
struct dbr_gr_enum m_Value
void EpicsEnumeration::connected ( )
virtual

Reimplemented from EpicsObject.

Definition at line 15 of file epicsenumeration.cpp.

References get_event_handler(), EpicsObject::m_ChannelID, EpicsObject::m_EventID, and EpicsObject::m_HasEventHandler.

16 {
17  if (!m_HasEventHandler) {
18  SEVCHK(ca_create_subscription(DBR_GR_ENUM, 0, m_ChannelID, DBE_VALUE|DBE_ALARM,
19  get_event_handler(), this, &m_EventID), NULL);
20 
22 
23 // printf("Channel %s connected\n", qPrintable(pvName()));
24  }
25 }
bool m_HasEventHandler
Definition: epicsobject.h:50
virtual caEventCallBackFunc * get_event_handler()
evid m_EventID
Definition: epicsobject.h:49
chid m_ChannelID
Definition: epicsobject.h:48
void EpicsEnumeration::event_handler ( struct event_handler_args  arg)
staticprivate

Definition at line 27 of file epicsenumeration.cpp.

References changeValue(), and EpicsObject::debug().

Referenced by get_event_handler().

28 {
29  union db_access_val *pb = (union db_access_val *) args.dbr;
30 
31  struct dbr_gr_enum res;
32  memset(&res, 0xff, sizeof(res));
33  switch (args.type) {
34  case DBR_GR_ENUM:
35  res = pb->genmval;
36  break;
37  default:
38  printf("data type %ld not supported\n", args.type);
39  }
40 
41  EpicsEnumeration* e = ((EpicsEnumeration*) args.usr);
42 
43  if (e && e->debug()) {
44  printf("%s Epics Enumeration Event Handler called %ld = %d\n", ca_name(args.chid), args.type, res.value);
45  }
46 
47  ((EpicsEnumeration*) args.usr) -> changeValue(res);
48 }
void changeValue(struct dbr_gr_enum val)
caEventCallBackFunc * EpicsEnumeration::get_event_handler ( )
privatevirtual

Implements EpicsObject.

Definition at line 50 of file epicsenumeration.cpp.

References event_handler().

Referenced by connected().

51 {
53 }
static void event_handler(struct event_handler_args arg)
int EpicsEnumeration::value ( )

Definition at line 102 of file epicsenumeration.cpp.

References EpicsObject::m_Mutex, and m_Value.

Referenced by EpicsEnumerationComboBox::EpicsEnumerationComboBox().

103 {
104  QMutexLocker lock(&m_Mutex);
105 
106  return m_Value.value;
107 }
static QMutex m_Mutex
Definition: epicsobject.h:42
struct dbr_gr_enum m_Value
void EpicsEnumeration::valueChanged ( int  )
signal
QStringList EpicsEnumeration::valueList ( )

Definition at line 109 of file epicsenumeration.cpp.

References m_Value.

Referenced by EpicsEnumerationComboBox::changeValueList().

110 {
111  QStringList res;
112 
113  for (int i=0; i<m_Value.no_str; i++) {
114  res << m_Value.strs[i];
115  }
116 
117  return res;
118 }
struct dbr_gr_enum m_Value
void EpicsEnumeration::valueListChanged ( )
signal

Referenced by changeValue().

QString EpicsEnumeration::valueString ( )

Member Data Documentation

struct dbr_gr_enum EpicsEnumeration::m_Value
private

Definition at line 36 of file epicsenumeration.h.

Referenced by changeValue(), value(), and valueList().


The documentation for this class was generated from the following files: