This is Unofficial EPICS BASE Doxygen Site
tool_lib.h File Reference
#include <epicsTime.h>
+ Include dependency graph for tool_lib.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  pv
 

Macros

#define stat_to_str(stat)
 
#define sevr_to_str(stat)
 
#define stat_to_str_unsigned(stat)
 
#define sevr_to_str_unsigned(stat)
 
#define DEFAULT_CA_PRIORITY   0 /* Default CA priority */
 
#define DEFAULT_TIMEOUT   1.0 /* Default CA timeout */
 
#define LINE_BUFFER(stream)   setvbuf(stream, NULL, _IOLBF, BUFSIZ)
 

Enumerations

enum  TimeT { absolute, relative, incremental, incrementalByChan }
 
enum  IntFormatT { dec, bin, oct, hex }
 

Functions

char * val2str (const void *v, unsigned type, int index)
 
char * dbr2str (const void *value, unsigned type)
 
void print_time_val_sts (pv *pv, unsigned long reqElems)
 
int create_pvs (pv *pvs, int nPvs, caCh *pCB)
 
int connect_pvs (pv *pvs, int nPvs)
 

Variables

TimeT tsType
 
int tsSrcServer
 
int tsSrcClient
 
IntFormatT outTypeI
 
IntFormatT outTypeF
 
int enumAsNr
 
int charArrAsStr
 
double caTimeout
 
char dblFormatStr []
 
char fieldSeparator
 
capri caPriority
 

Macro Definition Documentation

#define DEFAULT_CA_PRIORITY   0 /* Default CA priority */

Definition at line 49 of file tool_lib.h.

#define DEFAULT_TIMEOUT   1.0 /* Default CA timeout */

Definition at line 50 of file tool_lib.h.

#define LINE_BUFFER (   stream)    setvbuf(stream, NULL, _IOLBF, BUFSIZ)

Definition at line 53 of file tool_lib.h.

#define sevr_to_str (   stat)
Value:
((stat) >= 0 && (stat) <= (signed)lastEpicsAlarmSev) ? \
#define lastEpicsAlarmSev
Definition: alarm.h:54
LIBCOM_API const char * epicsAlarmSeverityStrings[ALARM_NSEV]
How to convert an alarm severity into a string.
Definition: alarmString.c:16

Definition at line 31 of file tool_lib.h.

#define sevr_to_str_unsigned (   stat)
Value:
((stat) <= lastEpicsAlarmSev) ? \
#define lastEpicsAlarmSev
Definition: alarm.h:54
LIBCOM_API const char * epicsAlarmSeverityStrings[ALARM_NSEV]
How to convert an alarm severity into a string.
Definition: alarmString.c:16

Definition at line 39 of file tool_lib.h.

#define stat_to_str (   stat)
Value:
((stat) >= 0 && (stat) <= (signed)lastEpicsAlarmCond) ? \
#define lastEpicsAlarmCond
Definition: alarm.h:113
LIBCOM_API const char * epicsAlarmConditionStrings[ALARM_NSTATUS]
How to convert an alarm condition/status into a string.
Definition: alarmString.c:26

Definition at line 27 of file tool_lib.h.

#define stat_to_str_unsigned (   stat)
Value:
((stat) <= lastEpicsAlarmCond) ? \
#define lastEpicsAlarmCond
Definition: alarm.h:113
LIBCOM_API const char * epicsAlarmConditionStrings[ALARM_NSTATUS]
How to convert an alarm condition/status into a string.
Definition: alarmString.c:26

Definition at line 35 of file tool_lib.h.

Enumeration Type Documentation

enum IntFormatT
Enumerator
dec 
bin 
oct 
hex 

Definition at line 64 of file tool_lib.h.

64 { dec, bin, oct, hex } IntFormatT;
IntFormatT
Definition: tool_lib.h:64
Definition: tool_lib.h:64
Definition: tool_lib.h:64
Definition: tool_lib.h:64
Definition: tool_lib.h:64
enum TimeT
Enumerator
absolute 
relative 
incremental 
incrementalByChan 

Definition at line 61 of file tool_lib.h.

Function Documentation

int connect_pvs ( pv pvs,
int  nPvs 
)

Definition at line 621 of file tool_lib.c.

622 {
623  int returncode = create_pvs ( pvs, nPvs, 0);
624  if ( returncode == 0 ) {
625  /* Wait for channels to connect */
626  int result = ca_pend_io (caTimeout);
627  if (result == ECA_TIMEOUT)
628  {
629  if (nPvs > 1)
630  {
631  fprintf(stderr, "Channel connect timed out: some PV(s) not found.\n");
632  } else {
633  fprintf(stderr, "Channel connect timed out: '%s' not found.\n",
634  pvs[0].name);
635  }
636  returncode = 1;
637  }
638  }
639  return returncode;
640 }
pvac::PutEvent result
Definition: clientSync.cpp:117
int epicsStdCall ca_pend_io(ca_real timeout)
Definition: access.cpp:484
int create_pvs(pv *pvs, int nPvs, caCh *pCB)
Definition: tool_lib.c:574
#define ECA_TIMEOUT
Definition: caerr.h:87
#define stderr
Definition: epicsStdio.h:32
double caTimeout
Definition: tool_lib.c:55
int create_pvs ( pv pvs,
int  nPvs,
caCh pCB 
)

Definition at line 574 of file tool_lib.c.

575 {
576  int n;
577  int result;
578  int returncode = 0;
579 
580  if (!tsInitC) /* Initialize start timestamp */
581  {
582  epicsTimeGetCurrent(&tsStart);
583  tsInitC = 1;
584  }
585  /* Issue channel connections */
586  for (n = 0; n < nPvs; n++) {
587  result = ca_create_channel (pvs[n].name,
588  pCB,
589  &pvs[n],
590  caPriority,
591  &pvs[n].chid);
592  if (result != ECA_NORMAL) {
593  fprintf(stderr, "CA error %s occurred while trying "
594  "to create channel '%s'.\n", ca_message(result), pvs[n].name);
595  pvs[n].status = result;
596  returncode = 1;
597  }
598  }
599 
600  return returncode;
601 }
pvac::PutEvent result
Definition: clientSync.cpp:117
capri caPriority
Definition: tool_lib.c:56
int epicsStdCall ca_create_channel(const char *name_str, caCh *conn_func, void *puser, capri priority, chid *chanptr)
Definition: access.cpp:288
int status
Definition: tool_lib.h:75
#define ECA_NORMAL
Definition: caerr.h:77
int epicsStdCall epicsTimeGetCurrent(epicsTimeStamp *pDest)
Get current time into *pDest.
const char *epicsStdCall ca_message(long ca_status)
Definition: access.cpp:561
#define stderr
Definition: epicsStdio.h:32
char* dbr2str ( const void *  value,
unsigned  type 
)

Definition at line 333 of file tool_lib.c.

334 {
335  static char str[DBR_PRINT_BUFFER_SIZE];
336  char timeText[TIMETEXTLEN];
337  int n, i;
338 
339  switch (type) {
340  case DBR_STRING: /* no additional information for basic data types */
341  case DBR_INT:
342  case DBR_FLOAT:
343  case DBR_ENUM:
344  case DBR_CHAR:
345  case DBR_LONG:
346  case DBR_DOUBLE: break;
347 
348  case DBR_CTRL_STRING: /* see db_access.h: not implemented */
349  case DBR_GR_STRING: /* see db_access.h: not implemented */
353  case DBR_STS_ENUM: PRN_DBR_STS(dbr_sts_enum); break;
354  case DBR_STS_CHAR: PRN_DBR_STS(dbr_sts_char); break;
355  case DBR_STS_LONG: PRN_DBR_STS(dbr_sts_long); break;
357 
365 
366  case DBR_GR_CHAR:
367  PRN_DBR_GR(dbr_gr_char, char, %8d); break;
368  case DBR_GR_INT:
369  PRN_DBR_GR(dbr_gr_int, int, %8d); break;
370  case DBR_GR_LONG:
371  PRN_DBR_GR(dbr_gr_long, long int, %8ld); break;
372  case DBR_GR_FLOAT:
373  PRN_DBR_GR_PREC(dbr_gr_float, float, %g); break;
374  case DBR_GR_DOUBLE:
375  PRN_DBR_GR_PREC(dbr_gr_double, double, %g); break;
376  case DBR_GR_ENUM:
377  PRN_DBR_X_ENUM(dbr_gr_enum); break;
378  case DBR_CTRL_CHAR:
379  PRN_DBR_CTRL(dbr_ctrl_char, char, %8d); break;
380  case DBR_CTRL_INT:
381  PRN_DBR_CTRL(dbr_ctrl_int, int, %8d); break;
382  case DBR_CTRL_LONG:
383  PRN_DBR_CTRL(dbr_ctrl_long, long int, %8ld); break;
384  case DBR_CTRL_FLOAT:
385  PRN_DBR_CTRL_PREC(dbr_ctrl_float, float, %g); break;
386  case DBR_CTRL_DOUBLE:
387  PRN_DBR_CTRL_PREC(dbr_ctrl_double, double, %g); break;
388  case DBR_CTRL_ENUM:
390  case DBR_STSACK_STRING:
392  default : strcpy (str, "can't print data type");
393  }
394  return str;
395 }
#define PRN_DBR_GR_PREC(T, F, FMT)
Definition: tool_lib.c:290
#define DBR_GR_INT
Definition: db_access.h:95
#define DBR_CHAR
Definition: db_access.h:74
#define DBR_STRING
Definition: db_access.h:69
#define DBR_GR_LONG
Definition: db_access.h:99
#define PRN_DBR_STS(T)
Definition: tool_lib.c:273
#define DBR_PRINT_BUFFER_SIZE
Definition: tool_lib.c:322
#define PRN_DBR_CTRL(T, F, FMT)
Definition: tool_lib.c:295
int i
Definition: scan.c:967
#define PRN_DBR_X_ENUM(T)
Definition: tool_lib.c:310
#define DBR_GR_ENUM
Definition: db_access.h:97
#define DBR_CTRL_ENUM
Definition: db_access.h:105
#define PRN_DBR_STSACK(T)
Definition: tool_lib.c:305
#define DBR_STS_FLOAT
Definition: db_access.h:80
#define DBR_FLOAT
Definition: db_access.h:72
pvd::StructureConstPtr type
#define DBR_INT
Definition: db_access.h:70
#define DBR_STS_CHAR
Definition: db_access.h:82
#define DBR_STS_STRING
Definition: db_access.h:77
#define str(v)
#define DBR_CTRL_FLOAT
Definition: db_access.h:104
#define DBR_STS_SHORT
Definition: db_access.h:78
#define DBR_STSACK_STRING
Definition: db_access.h:111
#define DBR_CTRL_STRING
Definition: db_access.h:101
#define DBR_TIME_STRING
Definition: db_access.h:85
#define DBR_TIME_ENUM
Definition: db_access.h:89
#define DBR_DOUBLE
Definition: db_access.h:76
#define DBR_GR_DOUBLE
Definition: db_access.h:100
#define DBR_TIME_LONG
Definition: db_access.h:91
#define DBR_CTRL_CHAR
Definition: db_access.h:106
#define TIMETEXTLEN
Definition: tool_lib.c:58
#define DBR_STS_DOUBLE
Definition: db_access.h:84
#define DBR_TIME_SHORT
Definition: db_access.h:87
#define DBR_ENUM
Definition: db_access.h:73
#define DBR_GR_CHAR
Definition: db_access.h:98
#define DBR_CTRL_LONG
Definition: db_access.h:107
#define DBR_GR_FLOAT
Definition: db_access.h:96
#define DBR_STS_ENUM
Definition: db_access.h:81
#define DBR_LONG
Definition: db_access.h:75
#define PRN_DBR_TIME(T)
Definition: tool_lib.c:278
#define DBR_STS_LONG
Definition: db_access.h:83
#define DBR_TIME_CHAR
Definition: db_access.h:90
#define DBR_TIME_DOUBLE
Definition: db_access.h:92
#define PRN_DBR_GR(T, F, FMT)
Definition: tool_lib.c:285
#define DBR_CTRL_INT
Definition: db_access.h:103
#define PRN_DBR_CTRL_PREC(T, F, FMT)
Definition: tool_lib.c:300
#define DBR_CTRL_DOUBLE
Definition: db_access.h:108
#define DBR_GR_STRING
Definition: db_access.h:93
#define DBR_TIME_FLOAT
Definition: db_access.h:88
void print_time_val_sts ( pv pv,
unsigned long  reqElems 
)

Definition at line 503 of file tool_lib.c.

504 {
505  char timeText[2*TIMETEXTLEN+2];
506  int i, printAbs;
507  void* value = pv->value;
508  epicsTimeStamp *ptsRefC, *ptsRefS; /* Reference timestamps (client, server) */
509  epicsTimeStamp *ptsNewC, *ptsNewS; /* Update timestamps (client, server) */
510  epicsTimeStamp tsNow;
511 
512  epicsTimeGetCurrent(&tsNow);
513  epicsTimeToStrftime(timeText, TIMETEXTLEN, timeFormatStr, &tsNow);
514 
515  if (pv->nElems <= 1 && fieldSeparator == ' ') printf("%-30s", pv->name);
516  else printf("%s", pv->name);
517  printf("%c", fieldSeparator);
518  if (!pv->onceConnected)
519  printf("*** Not connected (PV not found)\n");
520  else if (pv->status == ECA_DISCONN)
521  printf("%s *** disconnected\n", timeText);
522  else if (pv->status == ECA_NORDACCESS)
523  printf("%s *** no read access\n", timeText);
524  else if (pv->status != ECA_NORMAL)
525  printf("%s *** CA error %s\n", timeText, ca_message(pv->status));
526  else if (pv->value == 0)
527  printf("%s *** no data available (timeout)\n", timeText);
528  else
529  switch (pv->dbrType) {
530  case DBR_TIME_STRING:
532  break;
533  case DBR_TIME_SHORT:
535  break;
536  case DBR_TIME_FLOAT:
538  break;
539  case DBR_TIME_ENUM:
541  break;
542  case DBR_TIME_CHAR:
544  break;
545  case DBR_TIME_LONG:
547  break;
548  case DBR_TIME_DOUBLE:
550  break;
551  default: printf("can't print data type\n");
552  }
553 }
Definition: link.h:174
char fieldSeparator
Definition: tool_lib.c:51
int i
Definition: scan.c:967
char timeFormatStr[30]
Definition: tool_lib.c:50
#define printf
Definition: epicsStdio.h:41
void * value
Definition: tool_lib.h:76
int status
Definition: tool_lib.h:75
#define PRN_TIME_VAL_STS(TYPE, TYPE_ENUM)
Definition: tool_lib.c:411
#define ECA_DISCONN
Definition: caerr.h:101
LIBCOM_API size_t epicsStdCall epicsTimeToStrftime(char *pBuff, size_t bufLength, const char *pFormat, const epicsTimeStamp *pTS)
Convert epicsTimeStamp to string. See epicsTime::strftime()
Definition: epicsTime.cpp:1120
#define ECA_NORMAL
Definition: caerr.h:77
#define DBR_TIME_STRING
Definition: db_access.h:85
long dbrType
Definition: tool_lib.h:72
#define DBR_TIME_ENUM
Definition: db_access.h:89
int epicsStdCall epicsTimeGetCurrent(epicsTimeStamp *pDest)
Get current time into *pDest.
#define DBR_TIME_LONG
Definition: db_access.h:91
char onceConnected
Definition: tool_lib.h:80
#define TIMETEXTLEN
Definition: tool_lib.c:58
unsigned long nElems
Definition: tool_lib.h:73
#define DBR_TIME_SHORT
Definition: db_access.h:87
const char *epicsStdCall ca_message(long ca_status)
Definition: access.cpp:561
EPICS time stamp, for use from C code.
Definition: epicsTime.h:33
#define ECA_NORDACCESS
Definition: caerr.h:123
#define DBR_TIME_CHAR
Definition: db_access.h:90
#define DBR_TIME_DOUBLE
Definition: db_access.h:92
char * name
Definition: tool_lib.h:69
#define DBR_TIME_FLOAT
Definition: db_access.h:88
char* val2str ( const void *  v,
unsigned  type,
int  index 
)

Definition at line 109 of file tool_lib.c.

110 {
111 #define STR 500
112  static char str[STR];
113  char ch;
114  void *val_ptr;
115  unsigned base_type;
116  dbr_long_t val_long;
117 
118  if (!dbr_type_is_valid(type)) {
119  strcpy (str, "*** invalid type");
120  return str;
121  }
122  strcpy (str, "!!!");
123 
124  base_type = type % (LAST_TYPE+1);
125 
127  base_type = DBR_STRING;
128 
129  val_ptr = dbr_value_ptr(v, type);
130 
131  switch (base_type) {
132  case DBR_STRING:
133  epicsStrnEscapedFromRaw(str, STR, ((dbr_string_t*) val_ptr)[index], strlen(((dbr_string_t*) val_ptr)[index]));
134  break;
135  case DBR_FLOAT:
136  if (outTypeF == dec) {
137  sprintf(str, dblFormatStr, ((dbr_float_t*) val_ptr)[index]);
138  } else {
139  if (((dbr_float_t*) val_ptr)[index] > 0.0)
140  val_long = ((dbr_float_t*) val_ptr)[index] + 0.5;
141  else
142  val_long = ((dbr_float_t*) val_ptr)[index] - 0.5;
143  sprint_long(str, val_long, outTypeF);
144  }
145  break;
146  case DBR_DOUBLE:
147  if (outTypeF == dec) {
148  sprintf(str, dblFormatStr, ((dbr_double_t*) val_ptr)[index]);
149  } else {
150  if (((dbr_double_t*) val_ptr)[index] > 0.0)
151  val_long = ((dbr_double_t*) val_ptr)[index] + 0.5;
152  else
153  val_long = ((dbr_double_t*) val_ptr)[index] - 0.5;
154  sprint_long(str, val_long, outTypeF);
155  }
156  break;
157  case DBR_CHAR:
158  ch = ((dbr_char_t*) val_ptr)[index];
159  sprintf(str, "%d", ch);
160  break;
161  case DBR_INT:
162  sprint_long(str, ((dbr_int_t*) val_ptr)[index], outTypeI);
163  break;
164  case DBR_LONG:
165  sprint_long(str, ((dbr_long_t*) val_ptr)[index], outTypeI);
166  break;
167  case DBR_ENUM:
168  {
169  dbr_enum_t *val = (dbr_enum_t *)val_ptr;
170  if (dbr_type_is_GR(type) && !enumAsNr) {
171  if (val[index] >= MAX_ENUM_STATES)
172  sprintf(str, "Illegal Value (%d)", val[index]);
173  else if (val[index] >= ((struct dbr_gr_enum *)v)->no_str)
174  sprintf(str, "Enum Index Overflow (%d)", val[index]);
175  else
176  sprintf(str, "%s", ((struct dbr_gr_enum *)v)->strs[val[index]]);
177  } else if (dbr_type_is_CTRL(type) && !enumAsNr) {
178  if (val[index] >= MAX_ENUM_STATES)
179  sprintf(str, "Illegal Value (%d)", val[index]);
180  else if (val[index] >= ((struct dbr_ctrl_enum *)v)->no_str)
181  sprintf(str, "Enum Index Overflow (%d)", val[index]);
182  else
183  sprintf(str, "%s", ((struct dbr_ctrl_enum *)v)->strs[val[index]]);
184  } else
185  sprintf(str, "%d", val[index]);
186  }
187  }
188  return str;
189 }
#define DBR_CHAR
Definition: db_access.h:74
#define DBR_STRING
Definition: db_access.h:69
IntFormatT outTypeI
Definition: tool_lib.c:46
char dblFormatStr[30]
Definition: tool_lib.c:49
epicsFloat32 dbr_float_t
Definition: db_access.h:46
#define DBR_FLOAT
Definition: db_access.h:72
pvd::StructureConstPtr type
#define DBR_INT
Definition: db_access.h:70
#define str(v)
#define dbr_type_is_valid(type)
Definition: db_access.h:644
#define DBR_STSACK_STRING
Definition: db_access.h:111
#define dbr_value_ptr(PDBR, DBR_TYPE)
Definition: db_access.h:540
#define dbr_type_is_CTRL(type)
Definition: db_access.h:653
#define LAST_TYPE
Definition: db_access.h:64
#define DBR_DOUBLE
Definition: db_access.h:76
epicsFloat64 dbr_double_t
Definition: db_access.h:47
epicsOldString dbr_string_t
Definition: db_access.h:38
epicsUInt8 dbr_char_t
Definition: db_access.h:39
epicsInt16 dbr_int_t
Definition: db_access.h:42
#define STR
#define DBR_ENUM
Definition: db_access.h:73
epicsUInt16 dbr_enum_t
Definition: db_access.h:43
#define DBR_CLASS_NAME
Definition: db_access.h:112
#define DBR_LONG
Definition: db_access.h:75
Definition: tool_lib.h:64
#define MAX_ENUM_STATES
Definition: db_access.h:31
epicsInt32 dbr_long_t
Definition: db_access.h:44
int enumAsNr
Definition: tool_lib.c:53
IntFormatT outTypeF
Definition: tool_lib.c:47
#define dbr_type_is_GR(type)
Definition: db_access.h:651
int epicsStrnEscapedFromRaw(char *dst, size_t dstlen, const char *src, size_t srclen)
Definition: epicsString.c:129

Variable Documentation

capri caPriority

Definition at line 56 of file tool_lib.c.

double caTimeout

Definition at line 55 of file tool_lib.c.

int charArrAsStr

Definition at line 54 of file tool_lib.c.

char dblFormatStr[]

Definition at line 49 of file tool_lib.c.

int enumAsNr

Definition at line 53 of file tool_lib.c.

char fieldSeparator

Definition at line 51 of file tool_lib.c.

IntFormatT outTypeF

Definition at line 47 of file tool_lib.c.

IntFormatT outTypeI

Definition at line 46 of file tool_lib.c.

int tsSrcClient

Definition at line 45 of file tool_lib.c.

int tsSrcServer

Definition at line 44 of file tool_lib.c.

TimeT tsType

Definition at line 43 of file tool_lib.c.