This is Unofficial EPICS BASE Doxygen Site
caDiagnostics.h File Reference
#include "cadef.h"
+ Include dependency graph for caDiagnostics.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define CATIME_OK   0
 
#define CATIME_ERROR   -1
 

Enumerations

enum  appendNumberFlag { appendNumber, dontAppendNumber }
 

Functions

int catime (const char *channelName, unsigned channelCount, enum appendNumberFlag appNF)
 
int acctst (const char *pname, unsigned logggingInterestLevel, unsigned channelCount, unsigned repetitionCount, enum ca_preemptive_callback_select select)
 
void caConnTest (const char *pNameIn, unsigned channelCountIn, double delayIn)
 

Macro Definition Documentation

#define CATIME_ERROR   -1

Definition at line 27 of file caDiagnostics.h.

#define CATIME_OK   0

Definition at line 26 of file caDiagnostics.h.

Enumeration Type Documentation

Enumerator
appendNumber 
dontAppendNumber 

Definition at line 19 of file caDiagnostics.h.

Function Documentation

int acctst ( const char *  pname,
unsigned  logggingInterestLevel,
unsigned  channelCount,
unsigned  repetitionCount,
enum ca_preemptive_callback_select  select 
)

Definition at line 3398 of file acctst.c.

3400 {
3401  chid chan;
3402  int status;
3403  unsigned i;
3404  appChan *pChans;
3405  unsigned connections;
3406  unsigned maxArrayBytes = 10000000;
3407 
3408  printf ( "CA Client V%s, channel name \"%s\", timeout %g\n",
3409  ca_version (), pName, timeoutToPendIO );
3411  printf ( "Preemptive call back is enabled.\n" );
3412  }
3413 
3414  {
3415  char tmpString[32];
3416  sprintf ( tmpString, "%u", maxArrayBytes );
3417  epicsEnvSet ( "EPICS_CA_MAX_ARRAY_BYTES", tmpString );
3418  }
3419 
3420  /*
3421  * this test creates, and then destroys, a private CA context
3422  */
3423  multiSubscrDestroyNoLateCallbackTest ( pName, interestLevel );
3424 
3425  status = ca_context_create ( select );
3426  SEVCHK ( status, NULL );
3427 
3428  verifyDisconnect ( pName, interestLevel );
3429  verifyImmediateTearDown ( pName, select, interestLevel );
3430  verifyTearDownWhenChannelConnected ( pName, select, interestLevel );
3431 
3433 
3434  connections = ca_get_ioc_connection_count ();
3435  verify ( connections == 0u );
3436  unequalServerBufferSizeTest ( pName, interestLevel );
3437  clearChannelInGetCallbackTest ( pName, interestLevel );
3438  clearChannelInPutCallbackTest ( pName, interestLevel );
3439  clearChannelInSubscrCallbackTest ( pName, interestLevel );
3440  monitorAddConnectionCallbackTest ( pName, interestLevel );
3441 
3442  showProgressBegin ( "connecting to test channel", interestLevel );
3443  status = ca_search ( pName, & chan );
3444  SEVCHK ( status, NULL );
3445  status = ca_pend_io ( timeoutToPendIO );
3446  SEVCHK ( status, NULL );
3447  showProgressEnd ( interestLevel );
3448 
3449  printf ( "native type was %s, native count was %lu\n",
3450  dbf_type_to_text ( ca_field_type ( chan ) ),
3451  ca_element_count ( chan ) );
3452 
3453  connections = ca_get_ioc_connection_count ();
3454  verify ( connections == 1u || connections == 0u );
3455  if ( connections == 0u ) {
3456  printf ( "testing with a local channel\n" );
3457  }
3458 
3459  verifyName ( pName, interestLevel );
3460  verifyConnectWithDisconnectedChannels ( pName, interestLevel );
3461  grEnumTest ( chan, interestLevel );
3462  test_sync_groups ( chan, interestLevel );
3463  verifyChannelPriorities ( pName, interestLevel );
3464  verifyTimeStamps ( chan, interestLevel );
3465  verifyOldPend ( interestLevel );
3466  exceptionTest ( chan, interestLevel );
3467  arrayTest ( chan, maxArrayBytes, interestLevel );
3468  verifyMonitorSubscriptionFlushIO ( chan, interestLevel );
3469  monitorSubscriptionFirstUpdateTest ( pName, chan, interestLevel );
3470  ctrlDoubleTest ( chan, interestLevel );
3471  verifyBlockInPendIO ( chan, interestLevel );
3472  verifyAnalogIO ( chan, DBR_FLOAT, FLT_MIN, FLT_MAX,
3473  FLT_MIN_EXP, FLT_MAX_EXP, FLT_EPSILON, interestLevel );
3474  verifyAnalogIO ( chan, DBR_DOUBLE, DBL_MIN, DBL_MAX,
3475  DBL_MIN_EXP, DBL_MAX_EXP, DBL_EPSILON, interestLevel );
3476  verifyLongIO ( chan, interestLevel );
3477  verifyShortIO ( chan, interestLevel );
3478  multiSubscriptionDeleteTest ( chan, interestLevel );
3479  singleSubscriptionDeleteTest ( chan, interestLevel );
3480  channelClearWithEventTrafficTest ( pName, interestLevel );
3481  eventClearAndMultipleMonitorTest ( chan, interestLevel );
3482  verifyHighThroughputRead ( chan, interestLevel );
3483  verifyHighThroughputWrite ( chan, interestLevel );
3484  verifyHighThroughputReadCallback ( chan, interestLevel );
3485  verifyHighThroughputWriteCallback ( chan, interestLevel );
3486  verifyBadString ( chan, interestLevel );
3487  verifyMultithreadSubscr ( pName, interestLevel );
3489  fdManagerVerify ( pName, interestLevel );
3490  }
3491 
3492  /*
3493  * CA pend event delay accuracy test
3494  * (CA asssumes that search requests can be sent
3495  * at least every 25 mS on all supported os)
3496  */
3497  printf ( "\n" );
3498  pend_event_delay_test ( 1.0 );
3499  pend_event_delay_test ( 0.1 );
3500  pend_event_delay_test ( 0.25 );
3501 
3502  /* ca_channel_status ( 0 ); */
3503  ca_client_status ( 0 );
3504  /* ca_client_status ( 6u ); info about each channel */
3505 
3506  pChans = calloc ( channelCount, sizeof ( *pChans ) );
3507  verify ( pChans );
3508 
3509  for ( i = 0; i < channelCount; i++ ) {
3510  strncpy ( pChans[ i ].name, pName, sizeof ( pChans[ i ].name ) );
3511  pChans[ i ].name[ sizeof ( pChans[i].name ) - 1 ] = '\0';
3512  }
3513 
3514  verifyConnectionHandlerConnect ( pChans, channelCount, repetitionCount, interestLevel );
3515  verifyBlockingConnect ( pChans, channelCount, repetitionCount, interestLevel );
3516  verifyClear ( pChans, interestLevel );
3517 
3518  verifyReasonableBeaconPeriod ( chan, interestLevel );
3519 
3520  /*
3521  * Verify that we can do IO with the new types for ALH
3522  */
3523 #if 0
3524  if ( ca_read_access (chan) && ca_write_access (chan) ) {
3525  {
3526  dbr_put_ackt_t acktIn = 1u;
3527  dbr_put_acks_t acksIn = 1u;
3528  struct dbr_stsack_string stsackOut;
3529 
3530  SEVCHK ( ca_put ( DBR_PUT_ACKT, chan, &acktIn ), NULL );
3531  SEVCHK ( ca_put ( DBR_PUT_ACKS, chan, &acksIn ), NULL );
3532  SEVCHK ( ca_get ( DBR_STSACK_STRING, chan, &stsackOut ), NULL );
3533  SEVCHK ( ca_pend_io ( timeoutToPendIO ), NULL );
3534  }
3535 #endif
3536 
3537  /* test that ca_task_exit () works when there is still one channel remaining */
3538  /* status = ca_clear_channel ( chan ); */
3539  /* SEVCHK ( status, NULL ); */
3540 
3541  caTaskExitTest ( interestLevel );
3542 
3543  verifyContextRundownFlush ( pName, interestLevel );
3544  verifyContextRundownChanStillExist ( pName, interestLevel );
3545 
3546  free ( pChans );
3547 
3548  printf ( "\nTest Complete\n" );
3549 
3550  epicsExit ( EXIT_SUCCESS );
3551 
3552  return 0;
3553 }
void verifyDataTypeMacros(void)
Definition: acctst.c:2187
void ctrlDoubleTest(chid chan, unsigned interestLevel)
Definition: acctst.c:751
void verifyClear(appChan *pChans, unsigned interestLevel)
Definition: acctst.c:684
LIBCA_API unsigned epicsStdCall ca_write_access(chid chan)
void verifyName(const char *pName, unsigned interestLevel)
Definition: acctst.c:3278
#define dbf_type_to_text(type)
Definition: db_access.h:677
void monitorAddConnectionCallbackTest(const char *pName, unsigned interestLevel)
Definition: acctst.c:2359
pvd::Status status
#define verify(exp)
Definition: acctst.c:65
void singleSubscriptionDeleteTest(chid chan, unsigned interestLevel)
Definition: acctst.c:1570
int i
Definition: scan.c:967
void monitorSubscriptionFirstUpdateTest(const char *pName, chid chan, unsigned interestLevel)
Definition: acctst.c:118
void verifyContextRundownFlush(const char *pName, unsigned interestLevel)
Definition: acctst.c:3292
void verifyBlockingConnect(appChan *pChans, unsigned chanCount, unsigned repetitionCount, unsigned interestLevel)
Definition: acctst.c:515
void clearChannelInPutCallbackTest(const char *pName, unsigned level)
Definition: acctst.c:2274
void caTaskExitTest(unsigned interestLevel)
Definition: acctst.c:2175
void clearChannelInGetCallbackTest(const char *pName, unsigned level)
Definition: acctst.c:2244
void verifyContextRundownChanStillExist(const char *pName, unsigned interestLevel)
Definition: acctst.c:3366
void verifyShortIO(chid chan, unsigned interestLevel)
Definition: acctst.c:1068
LIBCA_API unsigned long epicsStdCall ca_element_count(chid chan)
void arrayTest(chid chan, unsigned maxArrayBytes, unsigned interestLevel)
Definition: acctst.c:1932
void showProgressBegin(const char *pTestName, unsigned interestLevel)
Definition: acctst.c:68
void verifyHighThroughputWriteCallback(chid chan, unsigned interestLevel)
Definition: acctst.c:1187
void showProgressEnd(unsigned interestLevel)
Definition: acctst.c:81
#define DBR_FLOAT
Definition: db_access.h:72
int epicsStdCall ca_pend_io(ca_real timeout)
Definition: access.cpp:484
unsigned epicsStdCall ca_get_ioc_connection_count()
Definition: access.cpp:670
#define printf
Definition: epicsStdio.h:41
#define NULL
Definition: catime.c:38
void grEnumTest(chid chan, unsigned interestLevel)
Definition: acctst.c:719
void verifyTimeStamps(chid chan, unsigned interestLevel)
Definition: acctst.c:2645
#define DBR_PUT_ACKS
Definition: db_access.h:110
void channelClearWithEventTrafficTest(const char *pName, unsigned interestLevel)
Definition: acctst.c:1623
void test_sync_groups(chid chan, unsigned interestLevel)
Definition: acctst.c:1280
void multiSubscriptionDeleteTest(chid chan, unsigned interestLevel)
Definition: acctst.c:1494
LIBCA_API short epicsStdCall ca_field_type(chid chan)
#define ca_put(type, chan, pValue)
Definition: cadef.h:302
int epicsStdCall ca_client_status(unsigned level)
Definition: access.cpp:701
void verifyTearDownWhenChannelConnected(const char *pName, enum ca_preemptive_callback_select select, unsigned interestLevel)
Definition: acctst.c:2754
LIBCOM_API void epicsStdCall epicsEnvSet(const char *name, const char *value)
Set an environment variable&#39;s value.
Definition: osdEnv.c:35
void fdManagerVerify(const char *pName, unsigned interestLevel)
Definition: acctst.c:3062
#define DBR_STSACK_STRING
Definition: db_access.h:111
void verifyBadString(chid chan, unsigned interestLevel)
Definition: acctst.c:1219
int epicsStdCall ca_context_create(ca_preemptive_callback_select premptiveCallbackSelect)
Definition: access.cpp:172
void unequalServerBufferSizeTest(const char *pName, unsigned interestLevel)
Definition: acctst.c:2085
void verifyAnalogIO(chid chan, int dataType, double min, double max, int minExp, int maxExp, double epsilon, unsigned interestLevel)
Definition: acctst.c:932
void pend_event_delay_test(dbr_double_t request)
Definition: acctst.c:2154
void verifyImmediateTearDown(const char *pName, enum ca_preemptive_callback_select select, unsigned interestLevel)
Definition: acctst.c:2801
void eventClearAndMultipleMonitorTest(chid chan, unsigned interestLevel)
Definition: acctst.c:2854
#define SEVCHK(CA_ERROR_CODE, MESSAGE_STRING)
Definition: cadef.h:137
#define DBR_DOUBLE
Definition: db_access.h:76
#define ca_get(type, chan, pValue)
Definition: cadef.h:384
void verifyConnectionHandlerConnect(appChan *pChans, unsigned chanCount, unsigned repetitionCount, unsigned interestLevel)
Definition: acctst.c:399
LIBCOM_API void epicsExit(int status)
Calls epicsExitCallAtExits(), then the OS exit() routine.
Definition: epicsExit.c:182
void verifyConnectWithDisconnectedChannels(const char *pName, unsigned interestLevel)
Definition: acctst.c:3145
LIBCA_API unsigned epicsStdCall ca_read_access(chid chan)
Definition: acctst.c:44
int select(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout)
char name[64]
Definition: acctst.c:45
void verifyReasonableBeaconPeriod(chid chan, unsigned interestLevel)
Definition: acctst.c:2583
#define ca_search(pChanName, pChanID)
Definition: cadef.h:859
void verifyDisconnect(const char *pName, unsigned interestLevel)
Definition: acctst.c:3208
void verifyBlockInPendIO(chid chan, unsigned interestLevel)
Definition: acctst.c:823
void verifyHighThroughputWrite(chid chan, unsigned interestLevel)
Definition: acctst.c:1134
void clearChannelInSubscrCallbackTest(const char *pName, unsigned level)
Definition: acctst.c:2306
const char *epicsStdCall ca_version()
Definition: access.cpp:641
void verifyLongIO(chid chan, unsigned interestLevel)
Definition: acctst.c:1025
void verifyHighThroughputReadCallback(chid chan, unsigned interestLevel)
Definition: acctst.c:1158
void exceptionTest(chid chan, unsigned interestLevel)
Definition: acctst.c:1750
#define DBR_PUT_ACKT
Definition: db_access.h:109
void verifyHighThroughputRead(chid chan, unsigned interestLevel)
Definition: acctst.c:1109
epicsUInt16 dbr_put_acks_t
Definition: db_access.h:49
void verifyOldPend(unsigned interestLevel)
Definition: acctst.c:2628
void verifyMonitorSubscriptionFlushIO(chid chan, unsigned interestLevel)
Definition: acctst.c:271
void verifyMultithreadSubscr(const char *pName, unsigned interestLevel)
Definition: acctst.c:3022
epicsUInt16 dbr_put_ackt_t
Definition: db_access.h:48
void verifyChannelPriorities(const char *pName, unsigned interestLevel)
Definition: acctst.c:2691
void caConnTest ( const char *  pNameIn,
unsigned  channelCountIn,
double  delayIn 
)

Definition at line 58 of file caConnTest.cpp.

59 {
60  unsigned iteration = 0u;
61  int status;
62  unsigned i;
63  chid *pChans;
64 
65  channelCount = channelCountIn;
66 
67  pChans = new chid [channelCount];
68 
69  while ( 1 ) {
70  connCount = 0u;
71  subsequentConnect = false;
72  begin = epicsTime::getCurrent ();
73 
74  printf ( "initializing CA client library\n" );
75 
76  status = ca_task_initialize();
77  SEVCHK ( status, "CA init failed" );
78 
79  printf ( "creating channels\n" );
80 
81  for ( i = 0u; i < channelCount; i++ ) {
82  status = ca_search_and_connect ( pNameIn,
83  &pChans[i], caConnTestConnHandler, 0 );
84  SEVCHK ( status, "CA search problems" );
85  }
86 
87  printf ( "all channels were created\n" );
88 
89  ca_pend_event ( delayIn );
90 
91  if ( iteration & 1 ) {
92  for ( i = 0u; i < channelCount; i++ ) {
93  status = ca_clear_channel ( pChans[i] );
94  SEVCHK ( status, "ca_clear_channel() problems" );
95  }
96  printf ( "all channels were destroyed\n" );
97  }
98 
99  printf ( "shutting down CA client library\n" );
100 
101  status = ca_task_exit ();
102  SEVCHK ( status, "task exit problems" );
103 
104  iteration++;
105  }
106 
107  //delete [] pChans;
108 }
int epicsStdCall ca_task_exit()
Definition: access.cpp:251
pvd::Status status
int i
Definition: scan.c:967
int epicsStdCall ca_search_and_connect(const char *name_str, chid *chanptr, caCh *conn_func, void *puser)
Definition: access.cpp:279
#define printf
Definition: epicsStdio.h:41
epicsTime begin
Definition: caConnTest.cpp:22
int epicsStdCall ca_pend_event(ca_real timeout)
Definition: access.cpp:457
#define SEVCHK(CA_ERROR_CODE, MESSAGE_STRING)
Definition: cadef.h:137
int epicsStdCall ca_task_initialize(void)
Definition: access.cpp:166
int epicsStdCall ca_clear_channel(chid pChan)
Definition: access.cpp:363
void caConnTestConnHandler(struct connection_handler_args args)
Definition: caConnTest.cpp:24
int catime ( const char *  channelName,
unsigned  channelCount,
enum appendNumberFlag  appNF 
)

Definition at line 531 of file catime.c.

533 {
534  unsigned i;
535  int j;
536  unsigned strsize;
537  unsigned nBytesSent, nBytesRecv;
538  ti *pItemList;
539 
540  if ( channelCount == 0 ) {
541  printf ( "channel count was zero\n" );
542  return 0;
543  }
544 
545  pItemList = calloc ( channelCount, sizeof (ti) );
546  if ( ! pItemList ) {
547  return -1;
548  }
549 
551  "Unable to initialize" );
552 
553  if ( appNF == appendNumber ) {
554  printf ( "Testing with %u channels named %snnn\n",
555  channelCount, channelName );
556  }
557  else {
558  printf ( "Testing with %u channels named %s\n",
559  channelCount, channelName );
560  }
561 
562  strsize = sizeof ( pItemList[0].name ) - 1;
563  nBytesSent = 0;
564  nBytesRecv = 0;
565  for ( i=0; i < channelCount; i++ ) {
566  if ( appNF == appendNumber ) {
567  sprintf ( pItemList[i].name,"%.*s%.6u",
568  (int) (strsize - 15u), channelName, i );
569  }
570  else {
571  strncpy ( pItemList[i].name, channelName, strsize);
572  }
573  pItemList[i].name[strsize]= '\0';
574  pItemList[i].count = 0;
575  pItemList[i].pValue = 0;
576  nBytesSent += 2 * ( CA_MESSAGE_ALIGN ( strlen ( pItemList[i].name ) )
577  + sizeof (caHdr) );
578  nBytesRecv += 2 * sizeof (caHdr);
579  }
580 
581  printf ( "Channel Connect Test\n" );
582  printf ( "--------------------\n" );
583  timeIt ( test_search, pItemList, channelCount, nBytesSent, nBytesRecv );
584  printSearchStat ( pItemList, channelCount );
585 
586  for ( i = 0; i < channelCount; i++ ) {
587  size_t count = ca_element_count ( pItemList[i].chix );
588  size_t size = sizeof ( dbr_string_t ) * count;
589  pItemList[i].count = count;
590  pItemList[i].pValue = malloc ( size );
591  assert ( pItemList[i].pValue );
592  }
593 
594  printf (
595  "channel name=%s, native type=%d, native count=%u\n",
596  ca_name (pItemList[0].chix),
597  ca_field_type (pItemList[0].chix),
598  pItemList[0].count );
599 
600  printf ("Pend Event Test\n");
601  printf ( "----------------\n" );
602  timeIt ( test_pend, NULL, 100, 0, 0 );
603 
604  for ( i = 0; i < channelCount; i++ ) {
605  dbr_float_t * pFltVal = ( dbr_float_t * ) pItemList[i].pValue;
606  double val = i;
607  val /= channelCount;
608  for ( j = 0; j < pItemList[i].count; j++ ) {
609  pFltVal[j] = (dbr_float_t) val;
610  }
611  pItemList[i].type = DBR_FLOAT;
612  }
613  printf ( "DBR_FLOAT Test\n" );
614  printf ( "--------------\n" );
615  test ( pItemList, channelCount );
616 
617  for ( i = 0; i < channelCount; i++ ) {
618  dbr_double_t * pDblVal = ( dbr_double_t * ) pItemList[i].pValue;
619  double val = i;
620  val /= channelCount;
621  for ( j = 0; j < pItemList[i].count; j++ ) {
622  pDblVal[j] = (dbr_double_t) val;
623  }
624  pItemList[i].type = DBR_DOUBLE;
625  }
626  printf ( "DBR_DOUBLE Test\n" );
627  printf ( "---------------\n" );
628  test ( pItemList, channelCount );
629 
630 
631  for ( i = 0; i < channelCount; i++ ) {
632  dbr_string_t * pStrVal = ( dbr_string_t * ) pItemList[i].pValue;
633  double val = i;
634  val /= channelCount;
635  for ( j = 0; j < pItemList[i].count; j++ ) {
636  sprintf ( pStrVal[j], "%f", val );
637  }
638  pItemList[i].type = DBR_STRING;
639  }
640  printf ( "DBR_STRING Test\n" );
641  printf ( "---------------\n" );
642  test ( pItemList, channelCount );
643 
644  for ( i = 0; i < channelCount; i++ ) {
645  dbr_int_t * pIntVal = ( dbr_int_t * ) pItemList[i].pValue;
646  double val = i;
647  val /= channelCount;
648  for ( j = 0; j < pItemList[i].count; j++ ) {
649  pIntVal[j] = (dbr_int_t) val;
650  }
651  pItemList[i].type = DBR_INT;
652  }
653  printf ( "DBR_INT Test\n" );
654  printf ( "------------\n" );
655  test ( pItemList, channelCount );
656 
657  printf ( "Get Latency Test\n" );
658  printf ( "----------------\n" );
659  for ( i = 0; i < channelCount; i++ ) {
660  dbr_double_t * pDblVal = ( dbr_double_t * ) pItemList[i].pValue;
661  for ( j = 0; j < pItemList[i].count; j++ ) {
662  pDblVal[j] = 0;
663  }
664  pItemList[i].type = DBR_DOUBLE;
665  }
666  measure_get_latency ( pItemList, channelCount );
667 
668  printf ( "Free Channel Test\n" );
669  printf ( "-----------------\n" );
670  timeIt ( test_free, pItemList, channelCount, 0, 0 );
671 
672  SEVCHK ( ca_task_exit (), "Unable to free resources at exit" );
673 
674  for ( i = 0; i < channelCount; i++ ) {
675  free ( pItemList[i].pValue );
676  }
677 
678  free ( pItemList );
679 
680  return CATIME_OK;
681 }
#define CATIME_OK
Definition: caDiagnostics.h:26
int epicsStdCall ca_task_exit()
Definition: access.cpp:251
#define DBR_STRING
Definition: db_access.h:69
#define assert(exp)
Declare that a condition should be true.
Definition: epicsAssert.h:70
int i
Definition: scan.c:967
int count
Definition: catime.c:47
LIBCA_API unsigned long epicsStdCall ca_element_count(chid chan)
epicsFloat32 dbr_float_t
Definition: db_access.h:46
#define DBR_FLOAT
Definition: db_access.h:72
#define printf
Definition: epicsStdio.h:41
#define DBR_INT
Definition: db_access.h:70
#define NULL
Definition: catime.c:38
LIBCA_API short epicsStdCall ca_field_type(chid chan)
void * pValue
Definition: catime.c:48
void timeIt(tf *pfunc, ti *pItems, unsigned iterations, unsigned nBytesSent, unsigned nBytesRecv)
Definition: catime.c:447
int epicsStdCall ca_context_create(ca_preemptive_callback_select premptiveCallbackSelect)
Definition: access.cpp:172
char name[128]
Definition: catime.c:45
#define CA_MESSAGE_ALIGN(A)
Definition: caProto.h:154
#define SEVCHK(CA_ERROR_CODE, MESSAGE_STRING)
Definition: cadef.h:137
#define DBR_DOUBLE
Definition: db_access.h:76
epicsFloat64 dbr_double_t
Definition: db_access.h:47
LIBCA_API const char *epicsStdCall ca_name(chid chan)
epicsOldString dbr_string_t
Definition: db_access.h:38
epicsInt16 dbr_int_t
Definition: db_access.h:42
struct ca_hdr caHdr
int type
Definition: catime.c:46