This is Unofficial EPICS BASE Doxygen Site
db_access.h
Go to the documentation of this file.
1 /*************************************************************************\
2 * Copyright (c) 2002 The University of Chicago, as Operator of Argonne
3 * National Laboratory.
4 * Copyright (c) 2002 The Regents of the University of California, as
5 * Operator of Los Alamos National Laboratory.
6 * EPICS BASE is distributed subject to a Software License Agreement found
7 * in file LICENSE that is included with this distribution.
8 \*************************************************************************/
9 /* base/include/db_access.h */
10 /* Author: Bob Dalesio
11  * Date: 4-4-88
12 */
13 
14 #ifndef INC_db_access_H
15 #define INC_db_access_H
16 
17 #include <stddef.h>
18 
19 #include "epicsTypes.h"
20 #include "epicsTime.h"
21 
22 #include "libCaAPI.h"
23 
24 
25 #ifdef __cplusplus
26 extern "C" {
27 #endif
28 
29 #define MAX_UNITS_SIZE 8
30 #define MAX_ENUM_STRING_SIZE 26
31 #define MAX_ENUM_STATES 16
32 
33 /*
34  * architecture independent types
35  *
36  * (so far this is sufficient for all archs we have ported to)
37  */
52 
53 #ifndef db_accessHFORdb_accessC
54 /* database field types */
55 #define DBF_STRING 0
56 #define DBF_INT 1
57 #define DBF_SHORT 1
58 #define DBF_FLOAT 2
59 #define DBF_ENUM 3
60 #define DBF_CHAR 4
61 #define DBF_LONG 5
62 #define DBF_DOUBLE 6
63 #define DBF_NO_ACCESS 7
64 #define LAST_TYPE DBF_DOUBLE
65 #define VALID_DB_FIELD(x) ((x >= 0) && (x <= LAST_TYPE))
66 #define INVALID_DB_FIELD(x) ((x < 0) || (x > LAST_TYPE))
67 
68 /* data request buffer types */
69 #define DBR_STRING DBF_STRING
70 #define DBR_INT DBF_INT
71 #define DBR_SHORT DBF_INT
72 #define DBR_FLOAT DBF_FLOAT
73 #define DBR_ENUM DBF_ENUM
74 #define DBR_CHAR DBF_CHAR
75 #define DBR_LONG DBF_LONG
76 #define DBR_DOUBLE DBF_DOUBLE
77 #define DBR_STS_STRING 7
78 #define DBR_STS_SHORT 8
79 #define DBR_STS_INT DBR_STS_SHORT
80 #define DBR_STS_FLOAT 9
81 #define DBR_STS_ENUM 10
82 #define DBR_STS_CHAR 11
83 #define DBR_STS_LONG 12
84 #define DBR_STS_DOUBLE 13
85 #define DBR_TIME_STRING 14
86 #define DBR_TIME_INT 15
87 #define DBR_TIME_SHORT 15
88 #define DBR_TIME_FLOAT 16
89 #define DBR_TIME_ENUM 17
90 #define DBR_TIME_CHAR 18
91 #define DBR_TIME_LONG 19
92 #define DBR_TIME_DOUBLE 20
93 #define DBR_GR_STRING 21
94 #define DBR_GR_SHORT 22
95 #define DBR_GR_INT DBR_GR_SHORT
96 #define DBR_GR_FLOAT 23
97 #define DBR_GR_ENUM 24
98 #define DBR_GR_CHAR 25
99 #define DBR_GR_LONG 26
100 #define DBR_GR_DOUBLE 27
101 #define DBR_CTRL_STRING 28
102 #define DBR_CTRL_SHORT 29
103 #define DBR_CTRL_INT DBR_CTRL_SHORT
104 #define DBR_CTRL_FLOAT 30
105 #define DBR_CTRL_ENUM 31
106 #define DBR_CTRL_CHAR 32
107 #define DBR_CTRL_LONG 33
108 #define DBR_CTRL_DOUBLE 34
109 #define DBR_PUT_ACKT DBR_CTRL_DOUBLE + 1
110 #define DBR_PUT_ACKS DBR_PUT_ACKT + 1
111 #define DBR_STSACK_STRING DBR_PUT_ACKS + 1
112 #define DBR_CLASS_NAME DBR_STSACK_STRING + 1
113 #define LAST_BUFFER_TYPE DBR_CLASS_NAME
114 #define VALID_DB_REQ(x) ((x >= 0) && (x <= LAST_BUFFER_TYPE))
115 #define INVALID_DB_REQ(x) ((x < 0) || (x > LAST_BUFFER_TYPE))
116 
117 /*
118  * The enumeration "epicsType" is an index to this array
119  * of type DBR types. In some cases we select the a
120  * larger type to avoid loss of information
121  */
122 LIBCA_API extern const int epicsTypeToDBR_XXXX [lastEpicsType+1];
123 
124 /*
125  * The DBR_XXXX types are indicies into this array
126  */
127 LIBCA_API extern const epicsType DBR_XXXXToEpicsType [LAST_BUFFER_TYPE+1];
128 
129 /* values returned for each field type
130  * DBR_STRING returns a NULL terminated string
131  * DBR_SHORT returns an unsigned short
132  * DBR_INT returns an unsigned short
133  * DBR_FLOAT returns an IEEE floating point value
134  * DBR_ENUM returns an unsigned short which is the enum item
135  * DBR_CHAR returns an unsigned char
136  * DBR_LONG returns an unsigned long
137  * DBR_DOUBLE returns a double precision floating point number
138  * DBR_STS_STRING returns a string status structure (dbr_sts_string)
139  * DBR_STS_SHORT returns a short status structure (dbr_sts_short)
140  * DBR_STS_INT returns a short status structure (dbr_sts_int)
141  * DBR_STS_FLOAT returns a float status structure (dbr_sts_float)
142  * DBR_STS_ENUM returns an enum status structure (dbr_sts_enum)
143  * DBR_STS_CHAR returns a char status structure (dbr_sts_char)
144  * DBR_STS_LONG returns a long status structure (dbr_sts_long)
145  * DBR_STS_DOUBLE returns a double status structure (dbr_sts_double)
146  * DBR_TIME_STRING returns a string time structure (dbr_time_string)
147  * DBR_TIME_SHORT returns a short time structure (dbr_time_short)
148  * DBR_TIME_INT returns a short time structure (dbr_time_short)
149  * DBR_TIME_FLOAT returns a float time structure (dbr_time_float)
150  * DBR_TIME_ENUM returns an enum time structure (dbr_time_enum)
151  * DBR_TIME_CHAR returns a char time structure (dbr_time_char)
152  * DBR_TIME_LONG returns a long time structure (dbr_time_long)
153  * DBR_TIME_DOUBLE returns a double time structure (dbr_time_double)
154  * DBR_GR_STRING returns a graphic string structure (dbr_gr_string)
155  * DBR_GR_SHORT returns a graphic short structure (dbr_gr_short)
156  * DBR_GR_INT returns a graphic short structure (dbr_gr_int)
157  * DBR_GR_FLOAT returns a graphic float structure (dbr_gr_float)
158  * DBR_GR_ENUM returns a graphic enum structure (dbr_gr_enum)
159  * DBR_GR_CHAR returns a graphic char structure (dbr_gr_char)
160  * DBR_GR_LONG returns a graphic long structure (dbr_gr_long)
161  * DBR_GR_DOUBLE returns a graphic double structure (dbr_gr_double)
162  * DBR_CTRL_STRING returns a control string structure (dbr_ctrl_int)
163  * DBR_CTRL_SHORT returns a control short structure (dbr_ctrl_short)
164  * DBR_CTRL_INT returns a control short structure (dbr_ctrl_int)
165  * DBR_CTRL_FLOAT returns a control float structure (dbr_ctrl_float)
166  * DBR_CTRL_ENUM returns a control enum structure (dbr_ctrl_enum)
167  * DBR_CTRL_CHAR returns a control char structure (dbr_ctrl_char)
168  * DBR_CTRL_LONG returns a control long structure (dbr_ctrl_long)
169  * DBR_CTRL_DOUBLE returns a control double structure (dbr_ctrl_double)
170  */
171 #endif /*db_accessHFORdb_accessC*/
172 
173 /* VALUES WITH STATUS STRUCTURES */
174 
175 /* structure for a string status field */
177  dbr_short_t status; /* status of value */
178  dbr_short_t severity; /* severity of alarm */
179  dbr_string_t value; /* current value */
180 };
181 
182 /* structure for a string status and ack field */
184  dbr_ushort_t status; /* status of value */
185  dbr_ushort_t severity; /* severity of alarm */
186  dbr_ushort_t ackt; /* ack transient? */
187  dbr_ushort_t acks; /* ack severity */
188  dbr_string_t value; /* current value */
189 };
190 /* structure for an short status field */
191 struct dbr_sts_int{
192  dbr_short_t status; /* status of value */
193  dbr_short_t severity; /* severity of alarm */
194  dbr_short_t value; /* current value */
195 };
197  dbr_short_t status; /* status of value */
198  dbr_short_t severity; /* severity of alarm */
199  dbr_short_t value; /* current value */
200 };
201 
202 /* structure for a float status field */
204  dbr_short_t status; /* status of value */
205  dbr_short_t severity; /* severity of alarm */
206  dbr_float_t value; /* current value */
207 };
208 
209 /* structure for a enum status field */
211  dbr_short_t status; /* status of value */
212  dbr_short_t severity; /* severity of alarm */
213  dbr_enum_t value; /* current value */
214 };
215 
216 /* structure for a char status field */
218  dbr_short_t status; /* status of value */
219  dbr_short_t severity; /* severity of alarm */
220  dbr_char_t RISC_pad; /* RISC alignment */
221  dbr_char_t value; /* current value */
222 };
223 
224 /* structure for a long status field */
226  dbr_short_t status; /* status of value */
227  dbr_short_t severity; /* severity of alarm */
228  dbr_long_t value; /* current value */
229 };
230 
231 /* structure for a double status field */
233  dbr_short_t status; /* status of value */
234  dbr_short_t severity; /* severity of alarm */
235  dbr_long_t RISC_pad; /* RISC alignment */
236  dbr_double_t value; /* current value */
237 };
238 
239 /* VALUES WITH STATUS AND TIME STRUCTURES */
240 
241 /* structure for a string time field */
243  dbr_short_t status; /* status of value */
244  dbr_short_t severity; /* severity of alarm */
245  epicsTimeStamp stamp; /* time stamp */
246  dbr_string_t value; /* current value */
247 };
248 
249 /* structure for an short time field */
251  dbr_short_t status; /* status of value */
252  dbr_short_t severity; /* severity of alarm */
253  epicsTimeStamp stamp; /* time stamp */
254  dbr_short_t RISC_pad; /* RISC alignment */
255  dbr_short_t value; /* current value */
256 };
257 
258 /* structure for a float time field */
260  dbr_short_t status; /* status of value */
261  dbr_short_t severity; /* severity of alarm */
262  epicsTimeStamp stamp; /* time stamp */
263  dbr_float_t value; /* current value */
264 };
265 
266 /* structure for a enum time field */
268  dbr_short_t status; /* status of value */
269  dbr_short_t severity; /* severity of alarm */
270  epicsTimeStamp stamp; /* time stamp */
271  dbr_short_t RISC_pad; /* RISC alignment */
272  dbr_enum_t value; /* current value */
273 };
274 
275 /* structure for a char time field */
277  dbr_short_t status; /* status of value */
278  dbr_short_t severity; /* severity of alarm */
279  epicsTimeStamp stamp; /* time stamp */
280  dbr_short_t RISC_pad0; /* RISC alignment */
281  dbr_char_t RISC_pad1; /* RISC alignment */
282  dbr_char_t value; /* current value */
283 };
284 
285 /* structure for a long time field */
287  dbr_short_t status; /* status of value */
288  dbr_short_t severity; /* severity of alarm */
289  epicsTimeStamp stamp; /* time stamp */
290  dbr_long_t value; /* current value */
291 };
292 
293 /* structure for a double time field */
295  dbr_short_t status; /* status of value */
296  dbr_short_t severity; /* severity of alarm */
297  epicsTimeStamp stamp; /* time stamp */
298  dbr_long_t RISC_pad; /* RISC alignment */
299  dbr_double_t value; /* current value */
300 };
301 
302 /* VALUES WITH STATUS AND GRAPHIC STRUCTURES */
303 
304 /* structure for a graphic string */
305  /* not implemented; use struct_dbr_sts_string */
306 
307 /* structure for a graphic short field */
308 struct dbr_gr_int{
309  dbr_short_t status; /* status of value */
310  dbr_short_t severity; /* severity of alarm */
311  char units[MAX_UNITS_SIZE]; /* units of value */
312  dbr_short_t upper_disp_limit; /* upper limit of graph */
313  dbr_short_t lower_disp_limit; /* lower limit of graph */
314  dbr_short_t upper_alarm_limit;
315  dbr_short_t upper_warning_limit;
316  dbr_short_t lower_warning_limit;
317  dbr_short_t lower_alarm_limit;
318  dbr_short_t value; /* current value */
319 };
321  dbr_short_t status; /* status of value */
322  dbr_short_t severity; /* severity of alarm */
323  char units[MAX_UNITS_SIZE]; /* units of value */
324  dbr_short_t upper_disp_limit; /* upper limit of graph */
325  dbr_short_t lower_disp_limit; /* lower limit of graph */
326  dbr_short_t upper_alarm_limit;
327  dbr_short_t upper_warning_limit;
328  dbr_short_t lower_warning_limit;
329  dbr_short_t lower_alarm_limit;
330  dbr_short_t value; /* current value */
331 };
332 
333 /* structure for a graphic floating point field */
335  dbr_short_t status; /* status of value */
336  dbr_short_t severity; /* severity of alarm */
337  dbr_short_t precision; /* number of decimal places */
338  dbr_short_t RISC_pad0; /* RISC alignment */
339  char units[MAX_UNITS_SIZE]; /* units of value */
340  dbr_float_t upper_disp_limit; /* upper limit of graph */
341  dbr_float_t lower_disp_limit; /* lower limit of graph */
342  dbr_float_t upper_alarm_limit;
343  dbr_float_t upper_warning_limit;
344  dbr_float_t lower_warning_limit;
345  dbr_float_t lower_alarm_limit;
346  dbr_float_t value; /* current value */
347 };
348 
349 /* structure for a graphic enumeration field */
350 struct dbr_gr_enum{
351  dbr_short_t status; /* status of value */
352  dbr_short_t severity; /* severity of alarm */
353  dbr_short_t no_str; /* number of strings */
355  /* state strings */
356  dbr_enum_t value; /* current value */
357 };
358 
359 /* structure for a graphic char field */
360 struct dbr_gr_char{
361  dbr_short_t status; /* status of value */
362  dbr_short_t severity; /* severity of alarm */
363  char units[MAX_UNITS_SIZE]; /* units of value */
364  dbr_char_t upper_disp_limit; /* upper limit of graph */
365  dbr_char_t lower_disp_limit; /* lower limit of graph */
366  dbr_char_t upper_alarm_limit;
369  dbr_char_t lower_alarm_limit;
370  dbr_char_t RISC_pad; /* RISC alignment */
371  dbr_char_t value; /* current value */
372 };
373 
374 /* structure for a graphic long field */
375 struct dbr_gr_long{
376  dbr_short_t status; /* status of value */
377  dbr_short_t severity; /* severity of alarm */
378  char units[MAX_UNITS_SIZE]; /* units of value */
379  dbr_long_t upper_disp_limit; /* upper limit of graph */
380  dbr_long_t lower_disp_limit; /* lower limit of graph */
381  dbr_long_t upper_alarm_limit;
384  dbr_long_t lower_alarm_limit;
385  dbr_long_t value; /* current value */
386 };
387 
388 /* structure for a graphic double field */
390  dbr_short_t status; /* status of value */
391  dbr_short_t severity; /* severity of alarm */
392  dbr_short_t precision; /* number of decimal places */
393  dbr_short_t RISC_pad0; /* RISC alignment */
394  char units[MAX_UNITS_SIZE]; /* units of value */
395  dbr_double_t upper_disp_limit; /* upper limit of graph */
396  dbr_double_t lower_disp_limit; /* lower limit of graph */
397  dbr_double_t upper_alarm_limit;
398  dbr_double_t upper_warning_limit;
399  dbr_double_t lower_warning_limit;
400  dbr_double_t lower_alarm_limit;
401  dbr_double_t value; /* current value */
402 };
403 
404 /* VALUES WITH STATUS, GRAPHIC and CONTROL STRUCTURES */
405 
406 /* structure for a control string */
407  /* not implemented; use struct_dbr_sts_string */
408 
409 /* structure for a control integer */
411  dbr_short_t status; /* status of value */
412  dbr_short_t severity; /* severity of alarm */
413  char units[MAX_UNITS_SIZE]; /* units of value */
414  dbr_short_t upper_disp_limit; /* upper limit of graph */
415  dbr_short_t lower_disp_limit; /* lower limit of graph */
416  dbr_short_t upper_alarm_limit;
417  dbr_short_t upper_warning_limit;
418  dbr_short_t lower_warning_limit;
419  dbr_short_t lower_alarm_limit;
420  dbr_short_t upper_ctrl_limit; /* upper control limit */
421  dbr_short_t lower_ctrl_limit; /* lower control limit */
422  dbr_short_t value; /* current value */
423 };
425  dbr_short_t status; /* status of value */
426  dbr_short_t severity; /* severity of alarm */
427  char units[MAX_UNITS_SIZE]; /* units of value */
428  dbr_short_t upper_disp_limit; /* upper limit of graph */
429  dbr_short_t lower_disp_limit; /* lower limit of graph */
430  dbr_short_t upper_alarm_limit;
431  dbr_short_t upper_warning_limit;
432  dbr_short_t lower_warning_limit;
433  dbr_short_t lower_alarm_limit;
434  dbr_short_t upper_ctrl_limit; /* upper control limit */
435  dbr_short_t lower_ctrl_limit; /* lower control limit */
436  dbr_short_t value; /* current value */
437 };
438 
439 /* structure for a control floating point field */
441  dbr_short_t status; /* status of value */
442  dbr_short_t severity; /* severity of alarm */
443  dbr_short_t precision; /* number of decimal places */
444  dbr_short_t RISC_pad; /* RISC alignment */
445  char units[MAX_UNITS_SIZE]; /* units of value */
446  dbr_float_t upper_disp_limit; /* upper limit of graph */
447  dbr_float_t lower_disp_limit; /* lower limit of graph */
448  dbr_float_t upper_alarm_limit;
449  dbr_float_t upper_warning_limit;
450  dbr_float_t lower_warning_limit;
451  dbr_float_t lower_alarm_limit;
452  dbr_float_t upper_ctrl_limit; /* upper control limit */
453  dbr_float_t lower_ctrl_limit; /* lower control limit */
454  dbr_float_t value; /* current value */
455 };
456 
457 /* structure for a control enumeration field */
459  dbr_short_t status; /* status of value */
460  dbr_short_t severity; /* severity of alarm */
461  dbr_short_t no_str; /* number of strings */
463  /* state strings */
464  dbr_enum_t value; /* current value */
465 };
466 
467 /* structure for a control char field */
469  dbr_short_t status; /* status of value */
470  dbr_short_t severity; /* severity of alarm */
471  char units[MAX_UNITS_SIZE]; /* units of value */
472  dbr_char_t upper_disp_limit; /* upper limit of graph */
473  dbr_char_t lower_disp_limit; /* lower limit of graph */
474  dbr_char_t upper_alarm_limit;
477  dbr_char_t lower_alarm_limit;
478  dbr_char_t upper_ctrl_limit; /* upper control limit */
479  dbr_char_t lower_ctrl_limit; /* lower control limit */
480  dbr_char_t RISC_pad; /* RISC alignment */
481  dbr_char_t value; /* current value */
482 };
483 
484 /* structure for a control long field */
486  dbr_short_t status; /* status of value */
487  dbr_short_t severity; /* severity of alarm */
488  char units[MAX_UNITS_SIZE]; /* units of value */
489  dbr_long_t upper_disp_limit; /* upper limit of graph */
490  dbr_long_t lower_disp_limit; /* lower limit of graph */
491  dbr_long_t upper_alarm_limit;
494  dbr_long_t lower_alarm_limit;
495  dbr_long_t upper_ctrl_limit; /* upper control limit */
496  dbr_long_t lower_ctrl_limit; /* lower control limit */
497  dbr_long_t value; /* current value */
498 };
499 
500 /* structure for a control double field */
502  dbr_short_t status; /* status of value */
503  dbr_short_t severity; /* severity of alarm */
504  dbr_short_t precision; /* number of decimal places */
505  dbr_short_t RISC_pad0; /* RISC alignment */
506  char units[MAX_UNITS_SIZE]; /* units of value */
507  dbr_double_t upper_disp_limit; /* upper limit of graph */
508  dbr_double_t lower_disp_limit; /* lower limit of graph */
509  dbr_double_t upper_alarm_limit;
510  dbr_double_t upper_warning_limit;
511  dbr_double_t lower_warning_limit;
512  dbr_double_t lower_alarm_limit;
513  dbr_double_t upper_ctrl_limit; /* upper control limit */
514  dbr_double_t lower_ctrl_limit; /* lower control limit */
515  dbr_double_t value; /* current value */
516 };
517 
518 #define dbr_size_n(TYPE,COUNT)\
519 ((unsigned)((COUNT)<=0?dbr_size[TYPE]:dbr_size[TYPE]+((COUNT)-1)*dbr_value_size[TYPE]))
520 
521 /* size for each type - array indexed by the DBR_ type code */
522 LIBCA_API extern const unsigned short dbr_size[];
523 
524 /* size for each type's value - array indexed by the DBR_ type code */
525 LIBCA_API extern const unsigned short dbr_value_size[];
526 
527 #ifndef db_accessHFORdb_accessC
528 /* class for each type's value */
534 
535 LIBCA_API extern const enum dbr_value_class dbr_value_class[LAST_BUFFER_TYPE+1];
536 
537 /*
538  * ptr to value given a pointer to the structure and the DBR type
539  */
540 #define dbr_value_ptr(PDBR, DBR_TYPE) \
541 ((void *)(((char *)PDBR)+dbr_value_offset[DBR_TYPE]))
542 
543 /*
544  * ptr to value given a pointer to the structure and the structure declaration
545  */
546 #define dbr_value_ptr_from_structure(PDBR, STRUCTURE)\
547 ((void *)(((char *)PDBR)+BYTE_OS(STRUCTURE, value)))
548 
549 LIBCA_API extern const unsigned short dbr_value_offset[LAST_BUFFER_TYPE+1];
550 
551 
552 /* union for each fetch buffers */
554  dbr_string_t strval; /* string max size */
555  dbr_short_t shrtval; /* short */
556  dbr_short_t intval; /* short */
557  dbr_float_t fltval; /* IEEE Float */
558  dbr_enum_t enmval; /* item number */
559  dbr_char_t charval; /* character */
560  dbr_long_t longval; /* long */
561  dbr_double_t doubleval; /* double */
562  struct dbr_sts_string sstrval; /* string field with status */
563  struct dbr_sts_short sshrtval; /* short field with status */
564  struct dbr_sts_float sfltval; /* float field with status */
565  struct dbr_sts_enum senmval; /* item number with status */
566  struct dbr_sts_char schrval; /* char field with status */
567  struct dbr_sts_long slngval; /* long field with status */
568  struct dbr_sts_double sdblval; /* double field with time */
569  struct dbr_time_string tstrval; /* string field with time */
570  struct dbr_time_short tshrtval; /* short field with time */
571  struct dbr_time_float tfltval; /* float field with time */
572  struct dbr_time_enum tenmval; /* item number with time */
573  struct dbr_time_char tchrval; /* char field with time */
574  struct dbr_time_long tlngval; /* long field with time */
575  struct dbr_time_double tdblval; /* double field with time */
576  struct dbr_sts_string gstrval; /* graphic string info */
577  struct dbr_gr_short gshrtval; /* graphic short info */
578  struct dbr_gr_float gfltval; /* graphic float info */
579  struct dbr_gr_enum genmval; /* graphic item info */
580  struct dbr_gr_char gchrval; /* graphic char info */
581  struct dbr_gr_long glngval; /* graphic long info */
582  struct dbr_gr_double gdblval; /* graphic double info */
583  struct dbr_sts_string cstrval; /* control string info */
584  struct dbr_ctrl_short cshrtval; /* control short info */
585  struct dbr_ctrl_float cfltval; /* control float info */
586  struct dbr_ctrl_enum cenmval; /* control item info */
587  struct dbr_ctrl_char cchrval; /* control char info */
588  struct dbr_ctrl_long clngval; /* control long info */
589  struct dbr_ctrl_double cdblval; /* control double info */
590  dbr_put_ackt_t putackt; /* item number */
591  dbr_put_acks_t putacks; /* item number */
592  struct dbr_sts_string sastrval; /* string field with status */
593  dbr_string_t classname; /* string max size */
594 };
595 
596 /*----------------------------------------------------------------------------
597 * repository for some useful PV database constants and utilities
598 *
599 * item dimensions
600 * db_strval_dim dimension for string values
601 * db_units_dim dimension for record units text
602 * db_desc_dim dimension for record description text
603 * db_name_dim dimension for channel names (record.field\0)
604 * db_state_dim number of states possible in a state table
605 * db_state_text_dim dimension for a state text string
606 * usage: char state_table[db_state_dim][db_state_text_dim]
607 *
608 * type checking macros -- return non-zero if condition is true, zero otherwise
609 *
610 * int dbf_type_is_valid(type) type is a valid DBF_xxx
611 * int dbr_type_is_valid(type) type is a valid DBR_xxx
612 * int dbr_type_is_plain(type) type is a valid plain DBR_xxx
613 * int dbr_type_is_STS(type) type is a valid DBR_STS_xxx
614 * int dbr_type_is_TIME(type) type is a valid DBR_TIME_xxx
615 * int dbr_type_is_GR(type) type is a valid DBR_GR_xxx
616 * int dbr_type_is_CTRL(type) type is a valid DBR_CTRL_xxx
617 * int dbr_type_is_STRING(type) type is a valid DBR_STRING_xxx
618 * int dbr_type_is_SHORT(type) type is a valid DBR_SHORT_xxx
619 * int dbr_type_is_FLOAT(type) type is a valid DBR_FLOAT_xxx
620 * int dbr_type_is_ENUM(type) type is a valid DBR_ENUM_xxx
621 * int dbr_type_is_CHAR(type) type is a valid DBR_CHAR_xxx
622 * int dbr_type_is_LONG(type) type is a valid DBR_LONG_xxx
623 * int dbr_type_is_DOUBLE(type) type is a valid DBR_DOUBLE_xxx
624 *
625 * type conversion macros
626 *
627 * char *dbf_type_to_text(type) returns text matching DBF_xxx
628 * void dbf_text_to_type(text, type) finds DBF_xxx matching text
629 * int dbf_type_to_DBR(type) returns DBR_xxx matching DBF_xxx
630 * int dbf_type_to_DBR_TIME(type) returns DBR_TIME_xxx matching DBF_xxx
631 * int dbf_type_to_DBR_GR(type) returns DBR_GR_xxx matching DBF_xxx
632 * int dbf_type_to_DBR_CTRL(type) returns DBR_CTRL_xxx matching DBF_xxx
633 * char *dbr_type_to_text(type) returns text matching DBR_xxx
634 * void dbr_text_to_type(text, type) finds DBR_xxx matching text
635 *---------------------------------------------------------------------------*/
636 #define db_strval_dim MAX_STRING_SIZE
637 #define db_units_dim MAX_UNITS_SIZE
638 #define db_desc_dim 24
639 #define db_name_dim 36
640 #define db_state_dim MAX_ENUM_STATES
641 #define db_state_text_dim MAX_ENUM_STRING_SIZE
642 
643 #define dbf_type_is_valid(type) ((type) >= 0 && (type) <= LAST_TYPE)
644 #define dbr_type_is_valid(type) ((type) >= 0 && (type) <= LAST_BUFFER_TYPE)
645 #define dbr_type_is_plain(type) \
646  ((type) >= DBR_STRING && (type) <= DBR_DOUBLE)
647 #define dbr_type_is_STS(type) \
648  ((type) >= DBR_STS_STRING && (type) <= DBR_STS_DOUBLE)
649 #define dbr_type_is_TIME(type) \
650  ((type) >= DBR_TIME_STRING && (type) <= DBR_TIME_DOUBLE)
651 #define dbr_type_is_GR(type) \
652  ((type) >= DBR_GR_STRING && (type) <= DBR_GR_DOUBLE)
653 #define dbr_type_is_CTRL(type) \
654  ((type) >= DBR_CTRL_STRING && (type) <= DBR_CTRL_DOUBLE)
655 #define dbr_type_is_STRING(type) \
656  ((type) >= 0 && (type) <= LAST_BUFFER_TYPE && \
657  (type)%(LAST_TYPE+1) == DBR_STRING)
658 #define dbr_type_is_SHORT(type) \
659  ((type) >= 0 && (type) <= LAST_BUFFER_TYPE && \
660  (type)%(LAST_TYPE+1) == DBR_SHORT)
661 #define dbr_type_is_FLOAT(type) \
662  ((type) >= 0 && (type) <= LAST_BUFFER_TYPE && \
663  (type)%(LAST_TYPE+1) == DBR_FLOAT)
664 #define dbr_type_is_ENUM(type) \
665  ((type) >= 0 && (type) <= LAST_BUFFER_TYPE && \
666  (type)%(LAST_TYPE+1) == DBR_ENUM)
667 #define dbr_type_is_CHAR(type) \
668  ((type) >= 0 && (type) <= LAST_BUFFER_TYPE && \
669  (type)%(LAST_TYPE+1) == DBR_CHAR)
670 #define dbr_type_is_LONG(type) \
671  ((type) >= 0 && (type) <= LAST_BUFFER_TYPE && \
672  (type)%(LAST_TYPE+1) == DBR_LONG)
673 #define dbr_type_is_DOUBLE(type) \
674  ((type) >= 0 && (type) <= LAST_BUFFER_TYPE && \
675  (type)%(LAST_TYPE+1) == DBR_DOUBLE)
676 
677 #define dbf_type_to_text(type) \
678  ( ((type) >= -1 && (type) < dbf_text_dim-2) ? \
679  dbf_text[type+1] : dbf_text_invalid )
680 
681 #define dbf_text_to_type(text, type) \
682  for (type=dbf_text_dim-3; type>=0; type--) { \
683  if (strcmp(text, dbf_text[type+1]) == 0) \
684  break; \
685  }
686 
687 #define dbr_type_to_text(type) \
688  ( ((type) >= 0 && (type) < dbr_text_dim) ? \
689  dbr_text[(type)] : dbr_text_invalid )
690 
691 #define dbr_text_to_type(text, type) \
692  for (type=dbr_text_dim-2; type>=0; type--) { \
693  if (strcmp(text, dbr_text[type]) == 0) \
694  break; \
695  }
696 
697 #define dbf_type_to_DBR(type) \
698  (((type) >= 0 && (type) <= dbf_text_dim-3) ? \
699  (type) : -1 )
700 
701 #define dbf_type_to_DBR_STS(type) \
702  (((type) >= 0 && (type) <= dbf_text_dim-3) ? \
703  (type) + (dbf_text_dim-2) : -1 )
704 
705 #define dbf_type_to_DBR_TIME(type) \
706  (((type) >= 0 && (type) <= dbf_text_dim-3) ? \
707  (type) + 2*(dbf_text_dim-2) : -1 )
708 
709 #define dbf_type_to_DBR_GR(type) \
710  (((type) >= 0 && (type) <= dbf_text_dim-3) ? \
711  (type) + 3*(dbf_text_dim-2) : -1 )
712 
713 #define dbf_type_to_DBR_CTRL(type) \
714  (((type) >= 0 && (type) <= dbf_text_dim-3) ? \
715  (type) + 4*(dbf_text_dim-2) : -1 )
716 
717 
718 LIBCA_API extern const char *dbf_text[LAST_TYPE+3];
719 LIBCA_API extern const short dbf_text_dim;
720 LIBCA_API extern const char *dbf_text_invalid;
721 
722 LIBCA_API extern const char *dbr_text[LAST_BUFFER_TYPE+1];
723 LIBCA_API extern const short dbr_text_dim;
724 LIBCA_API extern const char *dbr_text_invalid;
725 #endif /*db_accessHFORdb_accessC*/
726 
727 #ifdef __cplusplus
728 }
729 #endif
730 
731 #endif /* ifndef INC_db_access_H */
dbr_char_t upper_ctrl_limit
Definition: db_access.h:478
#define MAX_UNITS_SIZE
Definition: db_access.h:29
dbr_short_t RISC_pad0
Definition: db_access.h:280
dbr_short_t severity
Definition: db_access.h:352
LIBCA_API const unsigned short dbr_size[]
Definition: access.cpp:847
dbr_double_t upper_disp_limit
Definition: db_access.h:507
dbr_short_t upper_warning_limit
Definition: db_access.h:431
dbr_short_t severity
Definition: db_access.h:205
dbr_short_t severity
Definition: db_access.h:288
epicsOldString dbr_stsack_string_t
Definition: db_access.h:50
dbr_short_t lower_warning_limit
Definition: db_access.h:432
dbr_short_t severity
Definition: db_access.h:178
dbr_double_t value
Definition: db_access.h:299
dbr_char_t upper_alarm_limit
Definition: db_access.h:366
dbr_short_t status
Definition: db_access.h:309
dbr_float_t upper_warning_limit
Definition: db_access.h:343
dbr_short_t severity
Definition: db_access.h:252
dbr_long_t upper_ctrl_limit
Definition: db_access.h:495
LIBCA_API const epicsType DBR_XXXXToEpicsType[LAST_BUFFER_TYPE+1]
Definition: access.cpp:800
dbr_short_t status
Definition: db_access.h:226
#define LAST_BUFFER_TYPE
Definition: db_access.h:113
dbr_short_t value
Definition: db_access.h:422
dbr_short_t status
Definition: db_access.h:361
dbr_long_t upper_disp_limit
Definition: db_access.h:379
dbr_short_t status
Definition: db_access.h:218
dbr_short_t value
Definition: db_access.h:255
dbr_long_t value
Definition: db_access.h:497
char epicsOldString[MAX_STRING_SIZE]
Definition: epicsTypes.h:66
dbr_double_t upper_alarm_limit
Definition: db_access.h:397
dbr_float_t upper_alarm_limit
Definition: db_access.h:342
dbr_short_t severity
Definition: db_access.h:219
double epicsFloat64
Definition: epicsTypes.h:49
dbr_short_t status
Definition: db_access.h:177
dbr_short_t RISC_pad0
Definition: db_access.h:393
dbr_short_t RISC_pad
Definition: db_access.h:444
dbr_long_t upper_alarm_limit
Definition: db_access.h:491
dbr_char_t lower_ctrl_limit
Definition: db_access.h:479
dbr_short_t status
Definition: db_access.h:268
dbr_short_t severity
Definition: db_access.h:322
dbr_short_t lower_disp_limit
Definition: db_access.h:429
dbr_short_t status
Definition: db_access.h:204
dbr_string_t strval
Definition: db_access.h:554
dbr_short_t lower_warning_limit
Definition: db_access.h:418
dbr_short_t lower_disp_limit
Definition: db_access.h:415
dbr_short_t severity
Definition: db_access.h:391
dbr_short_t severity
Definition: db_access.h:198
dbr_float_t fltval
Definition: db_access.h:557
dbr_float_t lower_ctrl_limit
Definition: db_access.h:453
dbr_short_t status
Definition: db_access.h:486
unsigned short epicsUInt16
Definition: epicsTypes.h:41
dbr_long_t lower_ctrl_limit
Definition: db_access.h:496
dbr_double_t value
Definition: db_access.h:236
epicsFloat32 dbr_float_t
Definition: db_access.h:46
dbr_enum_t value
Definition: db_access.h:213
dbr_short_t status
Definition: db_access.h:459
dbr_short_t status
Definition: db_access.h:192
epicsTimeStamp stamp
Definition: db_access.h:297
dbr_short_t lower_alarm_limit
Definition: db_access.h:433
dbr_char_t upper_warning_limit
Definition: db_access.h:475
dbr_short_t value
Definition: db_access.h:436
dbr_short_t status
Definition: db_access.h:335
dbr_long_t lower_disp_limit
Definition: db_access.h:490
unsigned char epicsUInt8
Definition: epicsTypes.h:39
dbr_char_t lower_warning_limit
Definition: db_access.h:476
dbr_short_t status
Definition: db_access.h:233
dbr_float_t upper_warning_limit
Definition: db_access.h:449
dbr_char_t lower_warning_limit
Definition: db_access.h:368
dbr_long_t lower_warning_limit
Definition: db_access.h:383
dbr_char_t lower_alarm_limit
Definition: db_access.h:369
dbr_short_t status
Definition: db_access.h:197
dbr_short_t lower_warning_limit
Definition: db_access.h:328
dbr_double_t upper_disp_limit
Definition: db_access.h:395
dbr_short_t upper_alarm_limit
Definition: db_access.h:416
dbr_short_t status
Definition: db_access.h:321
dbr_double_t doubleval
Definition: db_access.h:561
dbr_put_acks_t putacks
Definition: db_access.h:591
unsigned int epicsUInt32
Definition: epicsTypes.h:43
dbr_short_t value
Definition: db_access.h:199
dbr_double_t lower_disp_limit
Definition: db_access.h:396
dbr_long_t lower_warning_limit
Definition: db_access.h:493
dbr_short_t precision
Definition: db_access.h:392
dbr_short_t lower_warning_limit
Definition: db_access.h:316
LIBCA_API const char * dbr_text[LAST_BUFFER_TYPE+1]
Definition: access.cpp:1050
dbr_float_t upper_ctrl_limit
Definition: db_access.h:452
dbr_short_t severity
Definition: db_access.h:193
dbr_char_t upper_disp_limit
Definition: db_access.h:472
dbr_long_t upper_warning_limit
Definition: db_access.h:492
dbr_string_t value
Definition: db_access.h:246
dbr_float_t value
Definition: db_access.h:454
dbr_float_t upper_disp_limit
Definition: db_access.h:340
dbr_short_t status
Definition: db_access.h:287
dbr_short_t lower_alarm_limit
Definition: db_access.h:317
dbr_short_t severity
Definition: db_access.h:234
dbr_short_t lower_ctrl_limit
Definition: db_access.h:421
LIBCA_API const int epicsTypeToDBR_XXXX[lastEpicsType+1]
Definition: access.cpp:786
dbr_char_t lower_alarm_limit
Definition: db_access.h:477
dbr_short_t value
Definition: db_access.h:318
dbr_long_t upper_disp_limit
Definition: db_access.h:489
dbr_short_t severity
Definition: db_access.h:426
LIBCA_API const unsigned short dbr_value_size[]
Definition: access.cpp:896
dbr_float_t value
Definition: db_access.h:206
dbr_short_t lower_alarm_limit
Definition: db_access.h:419
dbr_short_t lower_ctrl_limit
Definition: db_access.h:435
dbr_ushort_t acks
Definition: db_access.h:187
dbr_short_t severity
Definition: db_access.h:503
dbr_short_t upper_warning_limit
Definition: db_access.h:327
dbr_short_t severity
Definition: db_access.h:362
dbr_short_t RISC_pad
Definition: db_access.h:271
dbr_char_t upper_warning_limit
Definition: db_access.h:367
dbr_short_t severity
Definition: db_access.h:442
dbr_short_t upper_disp_limit
Definition: db_access.h:312
dbr_ushort_t ackt
Definition: db_access.h:186
dbr_char_t value
Definition: db_access.h:371
dbr_short_t severity
Definition: db_access.h:227
dbr_float_t value
Definition: db_access.h:346
dbr_short_t severity
Definition: db_access.h:261
dbr_double_t upper_alarm_limit
Definition: db_access.h:509
dbr_double_t upper_ctrl_limit
Definition: db_access.h:513
dbr_long_t longval
Definition: db_access.h:560
dbr_double_t upper_warning_limit
Definition: db_access.h:398
dbr_short_t upper_alarm_limit
Definition: db_access.h:326
dbr_long_t RISC_pad
Definition: db_access.h:235
dbr_short_t upper_warning_limit
Definition: db_access.h:315
dbr_char_t upper_disp_limit
Definition: db_access.h:364
dbr_short_t status
Definition: db_access.h:351
dbr_enum_t value
Definition: db_access.h:356
LIBCA_API const unsigned short dbr_value_offset[LAST_BUFFER_TYPE+1]
Definition: access.cpp:992
dbr_short_t lower_alarm_limit
Definition: db_access.h:329
dbr_short_t value
Definition: db_access.h:194
dbr_short_t upper_ctrl_limit
Definition: db_access.h:434
dbr_char_t value
Definition: db_access.h:481
dbr_long_t lower_alarm_limit
Definition: db_access.h:494
dbr_short_t severity
Definition: db_access.h:296
float epicsFloat32
Definition: epicsTypes.h:48
#define LAST_TYPE
Definition: db_access.h:64
dbr_double_t value
Definition: db_access.h:401
dbr_short_t upper_disp_limit
Definition: db_access.h:428
dbr_enum_t value
Definition: db_access.h:272
LIBCA_API const char * dbf_text[LAST_TYPE+3]
Definition: access.cpp:1034
dbr_short_t lower_disp_limit
Definition: db_access.h:325
dbr_short_t severity
Definition: db_access.h:269
dbr_short_t status
Definition: db_access.h:243
dbr_short_t severity
Definition: db_access.h:278
dbr_short_t upper_disp_limit
Definition: db_access.h:414
epicsOldString dbr_class_name_t
Definition: db_access.h:51
dbr_short_t upper_alarm_limit
Definition: db_access.h:314
dbr_short_t severity
Definition: db_access.h:470
dbr_short_t RISC_pad0
Definition: db_access.h:505
dbr_short_t status
Definition: db_access.h:502
dbr_enum_t enmval
Definition: db_access.h:558
dbr_char_t value
Definition: db_access.h:282
dbr_short_t status
Definition: db_access.h:411
dbr_short_t severity
Definition: db_access.h:310
epicsFloat64 dbr_double_t
Definition: db_access.h:47
dbr_double_t lower_alarm_limit
Definition: db_access.h:400
dbr_double_t lower_ctrl_limit
Definition: db_access.h:514
dbr_short_t RISC_pad
Definition: db_access.h:254
dbr_short_t status
Definition: db_access.h:441
dbr_double_t lower_warning_limit
Definition: db_access.h:511
dbr_float_t value
Definition: db_access.h:263
epicsTimeStamp stamp
Definition: db_access.h:245
dbr_short_t shrtval
Definition: db_access.h:555
epicsTimeStamp stamp
Definition: db_access.h:262
epicsOldString dbr_string_t
Definition: db_access.h:38
dbr_double_t lower_alarm_limit
Definition: db_access.h:512
dbr_short_t no_str
Definition: db_access.h:353
dbr_short_t no_str
Definition: db_access.h:461
epicsUInt8 dbr_char_t
Definition: db_access.h:39
dbr_short_t value
Definition: db_access.h:330
epicsInt16 dbr_int_t
Definition: db_access.h:42
dbr_char_t lower_disp_limit
Definition: db_access.h:365
dbr_short_t status
Definition: db_access.h:469
dbr_short_t precision
Definition: db_access.h:504
dbr_short_t precision
Definition: db_access.h:443
dbr_short_t upper_ctrl_limit
Definition: db_access.h:420
epicsUInt16 dbr_enum_t
Definition: db_access.h:43
dbr_double_t upper_warning_limit
Definition: db_access.h:510
dbr_short_t status
Definition: db_access.h:277
#define MAX_ENUM_STRING_SIZE
Definition: db_access.h:30
dbr_float_t upper_disp_limit
Definition: db_access.h:446
dbr_double_t lower_warning_limit
Definition: db_access.h:399
dbr_char_t lower_disp_limit
Definition: db_access.h:473
dbr_char_t value
Definition: db_access.h:221
dbr_short_t severity
Definition: db_access.h:377
dbr_value_class
Definition: db_access.h:529
dbr_short_t lower_disp_limit
Definition: db_access.h:313
epicsType
Definition: epicsTypes.h:99
dbr_short_t status
Definition: db_access.h:251
dbr_float_t upper_alarm_limit
Definition: db_access.h:448
dbr_short_t upper_alarm_limit
Definition: db_access.h:430
EPICS time stamp, for use from C code.
Definition: epicsTime.h:33
dbr_char_t RISC_pad1
Definition: db_access.h:281
dbr_short_t upper_warning_limit
Definition: db_access.h:417
dbr_long_t value
Definition: db_access.h:228
LIBCA_API const short dbf_text_dim
Definition: access.cpp:1048
epicsTimeStamp stamp
Definition: db_access.h:289
dbr_short_t RISC_pad0
Definition: db_access.h:338
LIBCA_API const char * dbr_text_invalid
Definition: access.cpp:1092
dbr_long_t value
Definition: db_access.h:290
dbr_double_t lower_disp_limit
Definition: db_access.h:508
epicsUInt16 dbr_ushort_t
Definition: db_access.h:41
dbr_short_t precision
Definition: db_access.h:337
dbr_float_t lower_warning_limit
Definition: db_access.h:450
dbr_float_t lower_disp_limit
Definition: db_access.h:447
dbr_char_t RISC_pad
Definition: db_access.h:220
#define MAX_ENUM_STATES
Definition: db_access.h:31
dbr_short_t status
Definition: db_access.h:260
dbr_char_t RISC_pad
Definition: db_access.h:370
dbr_long_t upper_warning_limit
Definition: db_access.h:382
dbr_char_t upper_alarm_limit
Definition: db_access.h:474
dbr_string_t classname
Definition: db_access.h:593
dbr_enum_t value
Definition: db_access.h:464
dbr_long_t RISC_pad
Definition: db_access.h:298
short epicsInt16
Definition: epicsTypes.h:40
dbr_short_t status
Definition: db_access.h:211
epicsUInt16 dbr_put_acks_t
Definition: db_access.h:49
EPICS time-stamps (epicsTimeStamp), epicsTime C++ class and C functions for handling wall-clock times...
dbr_double_t value
Definition: db_access.h:515
dbr_ushort_t status
Definition: db_access.h:184
epicsTimeStamp stamp
Definition: db_access.h:253
dbr_long_t value
Definition: db_access.h:385
LIBCA_API const char * dbf_text_invalid
Definition: access.cpp:1046
epicsUInt32 dbr_ulong_t
Definition: db_access.h:45
epicsTimeStamp stamp
Definition: db_access.h:270
epicsInt16 dbr_short_t
Definition: db_access.h:40
dbr_float_t lower_warning_limit
Definition: db_access.h:344
epicsInt32 dbr_long_t
Definition: db_access.h:44
dbr_string_t value
Definition: db_access.h:188
dbr_ushort_t severity
Definition: db_access.h:185
dbr_long_t upper_alarm_limit
Definition: db_access.h:381
epicsUInt16 dbr_put_ackt_t
Definition: db_access.h:48
dbr_float_t lower_disp_limit
Definition: db_access.h:341
dbr_short_t intval
Definition: db_access.h:556
dbr_put_ackt_t putackt
Definition: db_access.h:590
dbr_short_t status
Definition: db_access.h:425
epicsTimeStamp stamp
Definition: db_access.h:279
dbr_float_t lower_alarm_limit
Definition: db_access.h:451
dbr_string_t value
Definition: db_access.h:179
dbr_short_t severity
Definition: db_access.h:460
dbr_short_t severity
Definition: db_access.h:412
dbr_short_t severity
Definition: db_access.h:487
dbr_long_t lower_disp_limit
Definition: db_access.h:380
LIBCA_API const short dbr_text_dim
Definition: access.cpp:1094
dbr_short_t severity
Definition: db_access.h:336
dbr_float_t lower_alarm_limit
Definition: db_access.h:345
#define lastEpicsType
Definition: epicsTypes.h:113
dbr_short_t status
Definition: db_access.h:295
dbr_long_t lower_alarm_limit
Definition: db_access.h:384
dbr_short_t status
Definition: db_access.h:376
int epicsInt32
Definition: epicsTypes.h:42
dbr_short_t upper_disp_limit
Definition: db_access.h:324
dbr_char_t charval
Definition: db_access.h:559
dbr_short_t severity
Definition: db_access.h:212
dbr_char_t RISC_pad
Definition: db_access.h:480
dbr_short_t status
Definition: db_access.h:390
dbr_short_t severity
Definition: db_access.h:244