qmca  0.0.20
epicsstring.cpp
Go to the documentation of this file.
1 #include "epicsstring.h"
2 
3 #include <stdio.h>
4 
5 EpicsString::EpicsString(QString pvName, QObject *parent, int debug)
6  : EpicsObject(pvName, parent, debug),
7  m_Value("")
8 {
9 }
10 
12 {
13 // printf("EpicsString::~EpicsString(\"%s\")\n", qPrintable(pvName()));
14 }
15 
16 void EpicsString::event_handler(struct event_handler_args arg)
17 {
18  union db_access_val *pb = (union db_access_val *) arg.dbr;
19 
20  QString res="";
21 
22  switch (arg.type) {
23  case DBR_SHORT:
24  res = QString::number(pb->shrtval);
25  break;
26  case DBR_LONG:
27  res = QString::number(pb->longval);
28  break;
29  case DBR_FLOAT:
30  res = QString::number(pb->fltval);
31  break;
32  case DBR_ENUM:
33  res = QString::number(pb->enmval);
34  break;
35  case DBR_CHAR:
36  res = QString::number(pb->charval);
37  break;
38  case DBR_DOUBLE:
39  res = QString::number(pb->doubleval);
40  break;
41  case DBR_STRING:
42  res = QString(pb->strval);
43  default:
44  printf("data type %ld not supported\n", arg.type);
45  }
46 
47  EpicsString* s = ((EpicsString*) arg.usr);
48 
49  if (s && s->debug()) {
50  printf("%s Epics String Event Handler called %ld = %s\n", ca_name(arg.chid), arg.type, qPrintable(res));
51  }
52 
53  ((EpicsString*) arg.usr) -> changeValue(res);
54 }
55 
56 caEventCallBackFunc *EpicsString::get_event_handler()
57 {
59 }
60 
61 void EpicsString::changeValue(QString newval)
62 {
63  QMutexLocker lock(&m_Mutex);
64 
65  if (m_Value != newval) {
66  m_Value = newval;
67  emit valueChanged(m_Value);
68  }
69 }
70 
71 void EpicsString::caput(QString val)
72 {
73  ca_put(DBR_STRING, channelID(), qPrintable(val));
74  ca_pend_io(0.5);
75 }
76 
78 {
79  QMutexLocker lock(&m_Mutex);
80 
81  return m_Value;
82 }
EpicsString(QString pvName, QObject *parent=0, int debug=0)
Definition: epicsstring.cpp:5
virtual ~EpicsString()
Definition: epicsstring.cpp:11
virtual caEventCallBackFunc * get_event_handler()
Definition: epicsstring.cpp:56
QString value()
Definition: epicsstring.cpp:77
void valueChanged()
static QMutex m_Mutex
Definition: epicsobject.h:42
chid channelID()
Definition: epicsobject.cpp:63
void changeValue(QString val)
Definition: epicsstring.cpp:61
void caput(QString val)
Definition: epicsstring.cpp:71
static void event_handler(struct event_handler_args arg)
Definition: epicsstring.cpp:16
QString m_Value
Definition: epicsstring.h:33
void ca_pend_io(double t)