This is Unofficial EPICS BASE Doxygen Site
cadef.h File Reference
#include <stdarg.h>
#include "epicsThread.h"
#include "libCaAPI.h"
#include "caerr.h"
#include "db_access.h"
#include "caeventmask.h"
+ Include dependency graph for cadef.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  connection_handler_args
 
struct  ca_access_rights
 
struct  access_rights_handler_args
 
struct  event_handler_args
 
struct  exception_handler_args
 

Macros

#define VALID_TYPE(TYPE)   (((unsigned short)TYPE)<=LAST_BUFFER_TYPE)
 
#define CA_OP_GET   0
 
#define CA_OP_PUT   1
 
#define CA_OP_CREATE_CHANNEL   2
 
#define CA_OP_ADD_EVENT   3
 
#define CA_OP_CLEAR_EVENT   4
 
#define CA_OP_OTHER   5
 
#define CA_OP_CONN_UP   6
 
#define CA_OP_CONN_DOWN   7
 
#define CA_OP_SEARCH   2
 
#define SEVCHK(CA_ERROR_CODE, MESSAGE_STRING)
 
#define TYPENOTCONN   (-1) /* the channel's native type when disconnected */
 
#define CA_PRIORITY_MAX   99
 
#define CA_PRIORITY_MIN   0
 
#define CA_PRIORITY_DEFAULT   CA_PRIORITY_MIN
 
#define CA_PRIORITY_DB_LINKS   80
 
#define CA_PRIORITY_ARCHIVE   20
 
#define CA_PRIORITY_OPI   0
 
#define ca_bput(chan, pValue)   ca_array_put(DBR_STRING, 1u, chan, (const dbr_string_t *) (pValue))
 
#define ca_rput(chan, pValue)   ca_array_put(DBR_FLOAT, 1u, chan, (const dbr_float_t *) pValue)
 
#define ca_put(type, chan, pValue)   ca_array_put (type, 1u, chan, pValue)
 
#define ca_put_callback(type, chan, pValue, pFunc, pArg)   ca_array_put_callback(type, 1u, chan, pValue, pFunc, pArg)
 
#define ca_bget(chan, pValue)   ca_array_get(DBR_STRING, 1u, chan, (dbr_string_t *)(pValue))
 
#define ca_rget(chan, pValue)   ca_array_get(DBR_FLOAT, 1u, chan, (dbr_float_t *)(pValue))
 
#define ca_get(type, chan, pValue)   ca_array_get(type, 1u, chan, pValue)
 
#define ca_bget_callback(chan, pFunc, pArg)   ca_array_get_callback (DBR_STRING, 1u, chan, pFunc, pArg)
 
#define ca_rget_callback(chan, pFunc, pArg)   ca_array_get_callback (DBR_FLOAT, 1u, chan, pFunc, pArg)
 
#define ca_get_callback(type, chan, pFunc, pArg)   ca_array_get_callback (type, 1u, chan, pFunc, pArg)
 
#define ca_poll()   ca_pend_event(1e-12)
 
#define ca_sg_get(gid, type, chan, pValue)   ca_sg_array_get (gid, type, 1u, chan, pValue)
 
#define ca_sg_put(gid, type, chan, pValue)   ca_sg_array_put (gid, type, 1u, chan, pValue)
 
#define ca_build_channel(NAME, XXXXX, CHIDPTR, YYYYY)   ca_build_and_connect(NAME, XXXXX, 1, CHIDPTR, YYYYY, 0, 0)
 
#define ca_array_build(NAME, XXXXX, ZZZZZZ, CHIDPTR, YYYYY)   ca_build_and_connect(NAME, XXXXX, ZZZZZZ, CHIDPTR, YYYYY, 0, 0)
 
#define ca_search(pChanName, pChanID)   ca_search_and_connect (pChanName, pChanID, 0, 0)
 
#define ca_add_event(type, chan, pFunc, pArg, pEventID)   ca_add_array_event(type,1u,chan,pFunc,pArg,0.0,0.0,0.0,pEventID)
 
#define ca_add_delta_event(TYPE, CHID, ENTRY, ARG, DELTA, EVID)   ca_add_array_event(TYPE,1,CHID,ENTRY,ARG,DELTA,DELTA,0.0,EVID)
 
#define ca_add_general_event(TYPE, CHID, ENTRY, ARG, P_DELTA, N_DELTA, TO, EVID)   ca_add_array_event(TYPE,1,CHID,ENTRY,ARG,P_DELTA,N_DELTA,TO,EVID)
 
#define ca_add_array_event(TYPE, COUNT, CHID, ENTRY, ARG, P_DELTA, N_DELTA, TO, EVID)   ca_add_masked_array_event(TYPE,COUNT,CHID,ENTRY,ARG,P_DELTA,N_DELTA,TO,EVID, DBE_VALUE | DBE_ALARM)
 

Typedefs

typedef struct oldChannelNotifychid
 
typedef chid chanId
 
typedef long chtype
 
typedef struct oldSubscriptionevid
 
typedef double ca_real
 
typedef void caCh(struct connection_handler_args args)
 
typedef struct ca_access_rights caar
 
typedef void caArh(struct access_rights_handler_args args)
 
typedef struct event_handler_args evargs
 
typedef void caEventCallBackFunc(struct event_handler_args)
 
typedef unsigned CA_SYNC_GID
 
typedef unsigned capri
 
typedef void caExceptionHandler(struct exception_handler_args)
 
typedef void CAFDHANDLER(void *parg, int fd, int opened)
 
typedef int caPrintfFunc(const char *pformat, va_list args)
 

Enumerations

enum  channel_state { cs_never_conn, cs_prev_conn, cs_conn, cs_closed }
 
enum  ca_preemptive_callback_select { ca_disable_preemptive_callback, ca_enable_preemptive_callback }
 

Functions

LIBCA_API void epicsStdCall ca_test_event (struct event_handler_args)
 
LIBCA_API short epicsStdCall ca_field_type (chid chan)
 
LIBCA_API unsigned long epicsStdCall ca_element_count (chid chan)
 
LIBCA_API const char *epicsStdCall ca_name (chid chan)
 
LIBCA_API void epicsStdCall ca_set_puser (chid chan, void *puser)
 
LIBCA_API void *epicsStdCall ca_puser (chid chan)
 
LIBCA_API unsigned epicsStdCall ca_read_access (chid chan)
 
LIBCA_API unsigned epicsStdCall ca_write_access (chid chan)
 
LIBCA_API enum channel_state epicsStdCall ca_state (chid chan)
 
LIBCA_API int epicsStdCall ca_task_initialize (void)
 
LIBCA_API int epicsStdCall ca_context_create (enum ca_preemptive_callback_select select)
 
LIBCA_API void epicsStdCall ca_detach_context ()
 
LIBCA_API int epicsStdCall ca_task_exit (void)
 
LIBCA_API void epicsStdCall ca_context_destroy (void)
 
LIBCA_API int epicsStdCall ca_create_channel (const char *pChanName, caCh *pConnStateCallback, void *pUserPrivate, capri priority, chid *pChanID)
 
LIBCA_API int epicsStdCall ca_change_connection_event (chid chan, caCh *pfunc)
 
LIBCA_API int epicsStdCall ca_replace_access_rights_event (chid chan, caArh *pfunc)
 
LIBCA_API int epicsStdCall ca_add_exception_event (caExceptionHandler *pfunc, void *pArg)
 
LIBCA_API int epicsStdCall ca_clear_channel (chid chanId)
 
LIBCA_API int epicsStdCall ca_array_put (chtype type, unsigned long count, chid chanId, const void *pValue)
 
LIBCA_API int epicsStdCall ca_array_put_callback (chtype type, unsigned long count, chid chanId, const void *pValue, caEventCallBackFunc *pFunc, void *pArg)
 
LIBCA_API int epicsStdCall ca_array_get (chtype type, unsigned long count, chid chanId, void *pValue)
 
LIBCA_API int epicsStdCall ca_array_get_callback (chtype type, unsigned long count, chid chanId, caEventCallBackFunc *pFunc, void *pArg)
 
LIBCA_API int epicsStdCall ca_create_subscription (chtype type, unsigned long count, chid chanId, long mask, caEventCallBackFunc *pFunc, void *pArg, evid *pEventID)
 
LIBCA_API int epicsStdCall ca_clear_subscription (evid eventID)
 
LIBCA_API chid epicsStdCall ca_evid_to_chid (evid id)
 
LIBCA_API int epicsStdCall ca_pend_event (ca_real timeOut)
 
LIBCA_API int epicsStdCall ca_pend_io (ca_real timeOut)
 
LIBCA_API int epicsStdCall ca_pend (ca_real timeout, int early)
 
LIBCA_API int epicsStdCall ca_test_io (void)
 
LIBCA_API int epicsStdCall ca_flush_io (void)
 
LIBCA_API void epicsStdCall ca_signal (long errorCode, const char *pCtxStr)
 
LIBCA_API void epicsStdCall ca_signal_with_file_and_lineno (long errorCode, const char *pCtxStr, const char *pFileStr, int lineNo)
 
LIBCA_API void epicsStdCall ca_signal_formated (long ca_status, const char *pfilenm, int lineno, const char *pFormat,...)
 
LIBCA_API const char *epicsStdCall ca_host_name (chid channel)
 
LIBCA_API unsigned epicsStdCall ca_get_host_name (chid pChan, char *pBuf, unsigned bufLength)
 
LIBCA_API int epicsStdCall ca_add_fd_registration (CAFDHANDLER *pHandler, void *pArg)
 
LIBCA_API int epicsStdCall ca_sg_create (CA_SYNC_GID *pgid)
 
LIBCA_API int epicsStdCall ca_sg_delete (const CA_SYNC_GID gid)
 
LIBCA_API int epicsStdCall ca_sg_block (const CA_SYNC_GID gid, ca_real timeout)
 
LIBCA_API int epicsStdCall ca_sg_test (const CA_SYNC_GID gid)
 
LIBCA_API int epicsStdCall ca_sg_reset (const CA_SYNC_GID gid)
 
LIBCA_API int epicsStdCall ca_sg_array_get (const CA_SYNC_GID gid, chtype type, unsigned long count, chid chan, void *pValue)
 
LIBCA_API int epicsStdCall ca_sg_array_put (const CA_SYNC_GID gid, chtype type, unsigned long count, chid chan, const void *pValue)
 
LIBCA_API int epicsStdCall ca_sg_stat (CA_SYNC_GID gid)
 
LIBCA_API void epicsStdCall ca_dump_dbr (chtype type, unsigned count, const void *pbuffer)
 
LIBCA_API int epicsStdCall ca_v42_ok (chid chan)
 
LIBCA_API const char *epicsStdCall ca_version (void)
 
LIBCA_API int epicsStdCall ca_replace_printf_handler (caPrintfFunc *ca_printf_func)
 
LIBCA_API unsigned epicsStdCall ca_get_ioc_connection_count (void)
 
LIBCA_API int epicsStdCall ca_preemtive_callback_is_enabled (void)
 
LIBCA_API void epicsStdCall ca_self_test (void)
 
LIBCA_API unsigned epicsStdCall ca_beacon_anomaly_count (void)
 
LIBCA_API unsigned epicsStdCall ca_search_attempts (chid chan)
 
LIBCA_API double epicsStdCall ca_beacon_period (chid chan)
 
LIBCA_API double epicsStdCall ca_receive_watchdog_delay (chid chan)
 
LIBCA_API struct ca_client_context *epicsStdCall ca_current_context ()
 
LIBCA_API int epicsStdCall ca_attach_context (struct ca_client_context *context)
 
LIBCA_API int epicsStdCall ca_client_status (unsigned level)
 
LIBCA_API int epicsStdCall ca_context_status (struct ca_client_context *, unsigned level)
 
LIBCA_API int epicsStdCall ca_build_and_connect (const char *pChanName, chtype, unsigned long, chid *pChanID, void *, caCh *pFunc, void *pArg)
 
LIBCA_API int epicsStdCall ca_search_and_connect (const char *pChanName, chid *pChanID, caCh *pFunc, void *pArg)
 
LIBCA_API int epicsStdCall ca_channel_status (epicsThreadId tid)
 
LIBCA_API int epicsStdCall ca_clear_event (evid eventID)
 
LIBCA_API int epicsStdCall ca_add_masked_array_event (chtype type, unsigned long count, chid chanId, caEventCallBackFunc *pFunc, void *pArg, ca_real p_delta, ca_real n_delta, ca_real timeout, evid *pEventID, long mask)
 
LIBCA_API int epicsStdCall ca_modify_user_name (const char *pUserName)
 
LIBCA_API int epicsStdCall ca_modify_host_name (const char *pHostName)
 

Macro Definition Documentation

#define ca_add_array_event (   TYPE,
  COUNT,
  CHID,
  ENTRY,
  ARG,
  P_DELTA,
  N_DELTA,
  TO,
  EVID 
)    ca_add_masked_array_event(TYPE,COUNT,CHID,ENTRY,ARG,P_DELTA,N_DELTA,TO,EVID, DBE_VALUE | DBE_ALARM)

Definition at line 872 of file cadef.h.

#define ca_add_delta_event (   TYPE,
  CHID,
  ENTRY,
  ARG,
  DELTA,
  EVID 
)    ca_add_array_event(TYPE,1,CHID,ENTRY,ARG,DELTA,DELTA,0.0,EVID)

Definition at line 868 of file cadef.h.

#define ca_add_event (   type,
  chan,
  pFunc,
  pArg,
  pEventID 
)    ca_add_array_event(type,1u,chan,pFunc,pArg,0.0,0.0,0.0,pEventID)

Definition at line 866 of file cadef.h.

#define ca_add_general_event (   TYPE,
  CHID,
  ENTRY,
  ARG,
  P_DELTA,
  N_DELTA,
  TO,
  EVID 
)    ca_add_array_event(TYPE,1,CHID,ENTRY,ARG,P_DELTA,N_DELTA,TO,EVID)

Definition at line 870 of file cadef.h.

#define ca_array_build (   NAME,
  XXXXX,
  ZZZZZZ,
  CHIDPTR,
  YYYYY 
)    ca_build_and_connect(NAME, XXXXX, ZZZZZZ, CHIDPTR, YYYYY, 0, 0)

Definition at line 854 of file cadef.h.

#define ca_bget (   chan,
  pValue 
)    ca_array_get(DBR_STRING, 1u, chan, (dbr_string_t *)(pValue))

Definition at line 363 of file cadef.h.

#define ca_bget_callback (   chan,
  pFunc,
  pArg 
)    ca_array_get_callback (DBR_STRING, 1u, chan, pFunc, pArg)

Definition at line 418 of file cadef.h.

#define ca_bput (   chan,
  pValue 
)    ca_array_put(DBR_STRING, 1u, chan, (const dbr_string_t *) (pValue))

Definition at line 281 of file cadef.h.

#define ca_build_channel (   NAME,
  XXXXX,
  CHIDPTR,
  YYYYY 
)    ca_build_and_connect(NAME, XXXXX, 1, CHIDPTR, YYYYY, 0, 0)

Definition at line 852 of file cadef.h.

#define ca_get (   type,
  chan,
  pValue 
)    ca_array_get(type, 1u, chan, pValue)

Definition at line 384 of file cadef.h.

#define ca_get_callback (   type,
  chan,
  pFunc,
  pArg 
)    ca_array_get_callback (type, 1u, chan, pFunc, pArg)

Definition at line 441 of file cadef.h.

#define CA_OP_ADD_EVENT   3

Definition at line 121 of file cadef.h.

#define CA_OP_CLEAR_EVENT   4

Definition at line 122 of file cadef.h.

#define CA_OP_CONN_DOWN   7

Definition at line 129 of file cadef.h.

#define CA_OP_CONN_UP   6

Definition at line 128 of file cadef.h.

#define CA_OP_CREATE_CHANNEL   2

Definition at line 120 of file cadef.h.

#define CA_OP_GET   0

Definition at line 118 of file cadef.h.

#define CA_OP_OTHER   5

Definition at line 123 of file cadef.h.

#define CA_OP_PUT   1

Definition at line 119 of file cadef.h.

#define CA_OP_SEARCH   2

Definition at line 132 of file cadef.h.

#define ca_poll ( )    ca_pend_event(1e-12)

Definition at line 564 of file cadef.h.

#define CA_PRIORITY_ARCHIVE   20

Definition at line 195 of file cadef.h.

#define CA_PRIORITY_DB_LINKS   80

Definition at line 194 of file cadef.h.

#define CA_PRIORITY_DEFAULT   CA_PRIORITY_MIN

Definition at line 192 of file cadef.h.

#define CA_PRIORITY_MAX   99

Definition at line 190 of file cadef.h.

#define CA_PRIORITY_MIN   0

Definition at line 191 of file cadef.h.

#define CA_PRIORITY_OPI   0

Definition at line 196 of file cadef.h.

#define ca_put (   type,
  chan,
  pValue 
)    ca_array_put (type, 1u, chan, pValue)

Definition at line 302 of file cadef.h.

#define ca_put_callback (   type,
  chan,
  pValue,
  pFunc,
  pArg 
)    ca_array_put_callback(type, 1u, chan, pValue, pFunc, pArg)

Definition at line 347 of file cadef.h.

#define ca_rget (   chan,
  pValue 
)    ca_array_get(DBR_FLOAT, 1u, chan, (dbr_float_t *)(pValue))

Definition at line 374 of file cadef.h.

#define ca_rget_callback (   chan,
  pFunc,
  pArg 
)    ca_array_get_callback (DBR_FLOAT, 1u, chan, pFunc, pArg)

Definition at line 430 of file cadef.h.

#define ca_rput (   chan,
  pValue 
)    ca_array_put(DBR_FLOAT, 1u, chan, (const dbr_float_t *) pValue)

Definition at line 292 of file cadef.h.

#define ca_search (   pChanName,
  pChanID 
)    ca_search_and_connect (pChanName, pChanID, 0, 0)

Definition at line 859 of file cadef.h.

#define ca_sg_get (   gid,
  type,
  chan,
  pValue 
)    ca_sg_array_get (gid, type, 1u, chan, pValue)

Definition at line 751 of file cadef.h.

#define ca_sg_put (   gid,
  type,
  chan,
  pValue 
)    ca_sg_array_put (gid, type, 1u, chan, pValue)

Definition at line 775 of file cadef.h.

#define SEVCHK (   CA_ERROR_CODE,
  MESSAGE_STRING 
)
Value:
{ \
int ca_unique_status_name = (CA_ERROR_CODE); \
if(!(ca_unique_status_name & CA_M_SUCCESS)) \
ca_unique_status_name, \
(MESSAGE_STRING), \
__FILE__, \
__LINE__); \
}
#define CA_M_SUCCESS
Definition: caerr.h:41
LIBCA_API void epicsStdCall ca_signal_with_file_and_lineno(long errorCode, const char *pCtxStr, const char *pFileStr, int lineNo)
Definition: access.cpp:577
if(yy_init)
Definition: scan.c:972

Definition at line 137 of file cadef.h.

#define TYPENOTCONN   (-1) /* the channel's native type when disconnected */

Definition at line 149 of file cadef.h.

#define VALID_TYPE (   TYPE)    (((unsigned short)TYPE)<=LAST_BUFFER_TYPE)

Definition at line 73 of file cadef.h.

Typedef Documentation

typedef double ca_real

Definition at line 49 of file cadef.h.

typedef unsigned CA_SYNC_GID

Definition at line 113 of file cadef.h.

typedef struct ca_access_rights caar
typedef void caArh(struct access_rights_handler_args args)

Definition at line 70 of file cadef.h.

typedef void caCh(struct connection_handler_args args)

Definition at line 57 of file cadef.h.

typedef void caEventCallBackFunc(struct event_handler_args)

Definition at line 92 of file cadef.h.

typedef void caExceptionHandler(struct exception_handler_args)

Definition at line 251 of file cadef.h.

typedef void CAFDHANDLER(void *parg, int fd, int opened)

Definition at line 657 of file cadef.h.

typedef unsigned capri

Definition at line 189 of file cadef.h.

typedef int caPrintfFunc(const char *pformat, va_list args)

Definition at line 821 of file cadef.h.

typedef chid chanId

Definition at line 46 of file cadef.h.

typedef struct oldChannelNotify* chid

Definition at line 45 of file cadef.h.

typedef long chtype

Definition at line 47 of file cadef.h.

typedef struct event_handler_args evargs
typedef struct oldSubscription* evid

Definition at line 48 of file cadef.h.

Enumeration Type Documentation

Enumerator
ca_disable_preemptive_callback 
ca_enable_preemptive_callback 

Definition at line 175 of file cadef.h.

Enumerator
cs_never_conn 
cs_prev_conn 
cs_conn 
cs_closed 

Definition at line 166 of file cadef.h.

Function Documentation

LIBCA_API int epicsStdCall ca_add_exception_event ( caExceptionHandler pfunc,
void *  pArg 
)

Definition at line 402 of file access.cpp.

403 {
404  ca_client_context *pcac;
405  int caStatus = fetchClientContext ( &pcac );
406  if ( caStatus != ECA_NORMAL ) {
407  return caStatus;
408  }
409 
410  pcac->changeExceptionEvent ( pfunc, arg );
411 
412  return ECA_NORMAL;
413 }
#define ECA_NORMAL
Definition: caerr.h:77
int fetchClientContext(ca_client_context **ppcac)
Definition: access.cpp:137
void changeExceptionEvent(caExceptionHandler *pfunc, void *arg)
LIBCA_API int epicsStdCall ca_add_fd_registration ( CAFDHANDLER pHandler,
void *  pArg 
)

Definition at line 623 of file access.cpp.

624 {
625  ca_client_context *pcac;
626  int caStatus = fetchClientContext ( &pcac );
627  if ( caStatus != ECA_NORMAL ) {
628  return caStatus;
629  }
630 
631  pcac->registerForFileDescriptorCallBack ( func, arg );
632 
633  return ECA_NORMAL;
634 }
#define ECA_NORMAL
Definition: caerr.h:77
int fetchClientContext(ca_client_context **ppcac)
Definition: access.cpp:137
void registerForFileDescriptorCallBack(CAFDHANDLER *pFunc, void *pArg)
LIBCA_API int epicsStdCall ca_add_masked_array_event ( chtype  type,
unsigned long  count,
chid  chanId,
caEventCallBackFunc pFunc,
void *  pArg,
ca_real  p_delta,
ca_real  n_delta,
ca_real  timeout,
evid pEventID,
long  mask 
)

Definition at line 418 of file access.cpp.

423 {
424  return ca_create_subscription ( type, count, pChan, mask,
425  pCallBack, pCallBackArg, monixptr );
426 }
pvd::StructureConstPtr type
LIBCA_API int epicsStdCall ca_create_subscription(chtype type, unsigned long count, chid chanId, long mask, caEventCallBackFunc *pFunc, void *pArg, evid *pEventID)
LIBCA_API int epicsStdCall ca_array_get ( chtype  type,
unsigned long  count,
chid  chanId,
void *  pValue 
)

Definition at line 267 of file oldChannelNotify.cpp.

269 {
270  int caStatus;
271  try {
272  if ( type < 0 ) {
273  return ECA_BADTYPE;
274  }
275  if ( count == 0 )
276  return ECA_BADCOUNT;
277 
278  unsigned tmpType = static_cast < unsigned > ( type );
279  epicsGuard < epicsMutex > guard ( pChan->cacCtx.mutexRef () );
280  pChan->eliminateExcessiveSendBacklog ( guard );
282  ( pChan->getClientCtx().getCopyFreeList,
283  new ( pChan->getClientCtx().getCopyFreeList )
284  getCopy ( guard, pChan->getClientCtx(), *pChan,
285  tmpType, count, pValue ) );
286  pChan->io.read ( guard, type, count, *pNotify, 0 );
287  pNotify.release ();
288  caStatus = ECA_NORMAL;
289  }
290  catch ( cacChannel::badString & )
291  {
292  caStatus = ECA_BADSTR;
293  }
294  catch ( cacChannel::badType & )
295  {
296  caStatus = ECA_BADTYPE;
297  }
298  catch ( cacChannel::outOfBounds & )
299  {
300  caStatus = ECA_BADCOUNT;
301  }
302  catch ( cacChannel::noReadAccess & )
303  {
304  caStatus = ECA_NORDACCESS;
305  }
306  catch ( cacChannel::notConnected & )
307  {
308  caStatus = ECA_DISCONN;
309  }
311  {
312  caStatus = ECA_UNAVAILINSERV;
313  }
314  catch ( cacChannel::requestTimedOut & )
315  {
316  caStatus = ECA_TIMEOUT;
317  }
318  catch ( std::bad_alloc & )
319  {
320  caStatus = ECA_ALLOCMEM;
321  }
323  caStatus = ECA_TOLARGE;
324  }
325  catch ( ... )
326  {
327  caStatus = ECA_GETFAIL;
328  }
329  return caStatus;
330 }
#define ECA_GETFAIL
Definition: caerr.h:96
pvd::StructureConstPtr type
#define ECA_BADCOUNT
Definition: caerr.h:99
#define ECA_DISCONN
Definition: caerr.h:101
#define ECA_NORMAL
Definition: caerr.h:77
#define ECA_TOLARGE
Definition: caerr.h:86
#define ECA_NORDACCESS
Definition: caerr.h:123
#define ECA_BADSTR
Definition: caerr.h:100
#define ECA_TIMEOUT
Definition: caerr.h:87
#define ECA_BADTYPE
Definition: caerr.h:91
#define ECA_UNAVAILINSERV
Definition: caerr.h:131
#define ECA_ALLOCMEM
Definition: caerr.h:83
LIBCA_API int epicsStdCall ca_array_get_callback ( chtype  type,
unsigned long  count,
chid  chanId,
caEventCallBackFunc pFunc,
void *  pArg 
)

Definition at line 335 of file oldChannelNotify.cpp.

338 {
339  int caStatus;
340  try {
341  if ( type < 0 ) {
342  return ECA_BADTYPE;
343  }
344  if ( pfunc == NULL ) {
345  return ECA_BADFUNCPTR;
346  }
347  unsigned tmpType = static_cast < unsigned > ( type );
348 
349  epicsGuard < epicsMutex > guard ( pChan->cacCtx.mutexRef () );
350  pChan->eliminateExcessiveSendBacklog ( guard );
352  ( pChan->getClientCtx().getCallbackFreeList,
353  new ( pChan->getClientCtx().getCallbackFreeList )
354  getCallback ( *pChan, pfunc, arg ) );
355  pChan->io.read ( guard, tmpType, count, *pNotify, 0 );
356  pNotify.release ();
357  caStatus = ECA_NORMAL;
358  }
359  catch ( cacChannel::badString & )
360  {
361  caStatus = ECA_BADSTR;
362  }
363  catch ( cacChannel::badType & )
364  {
365  caStatus = ECA_BADTYPE;
366  }
367  catch ( cacChannel::outOfBounds & )
368  {
369  caStatus = ECA_BADCOUNT;
370  }
371  catch ( cacChannel::noReadAccess & )
372  {
373  caStatus = ECA_NORDACCESS;
374  }
375  catch ( cacChannel::notConnected & )
376  {
377  caStatus = ECA_DISCONN;
378  }
380  {
381  caStatus = ECA_UNAVAILINSERV;
382  }
383  catch ( cacChannel::requestTimedOut & )
384  {
385  caStatus = ECA_TIMEOUT;
386  }
387  catch ( std::bad_alloc & )
388  {
389  caStatus = ECA_ALLOCMEM;
390  }
392  caStatus = ECA_TOLARGE;
393  }
394  catch ( ... )
395  {
396  caStatus = ECA_GETFAIL;
397  }
398  return caStatus;
399 }
#define ECA_BADFUNCPTR
Definition: caerr.h:129
#define ECA_GETFAIL
Definition: caerr.h:96
pvd::StructureConstPtr type
#define ECA_BADCOUNT
Definition: caerr.h:99
#define NULL
Definition: catime.c:38
#define ECA_DISCONN
Definition: caerr.h:101
#define ECA_NORMAL
Definition: caerr.h:77
#define ECA_TOLARGE
Definition: caerr.h:86
#define ECA_NORDACCESS
Definition: caerr.h:123
#define ECA_BADSTR
Definition: caerr.h:100
#define ECA_TIMEOUT
Definition: caerr.h:87
#define ECA_BADTYPE
Definition: caerr.h:91
#define ECA_UNAVAILINSERV
Definition: caerr.h:131
#define ECA_ALLOCMEM
Definition: caerr.h:83
LIBCA_API int epicsStdCall ca_array_put ( chtype  type,
unsigned long  count,
chid  chanId,
const void *  pValue 
)

Definition at line 476 of file oldChannelNotify.cpp.

478 {
479  if ( type < 0 ) {
480  return ECA_BADTYPE;
481  }
482  unsigned tmpType = static_cast < unsigned > ( type );
483 
484  int caStatus;
485  try {
486  epicsGuard < epicsMutex > guard ( pChan->cacCtx.mutexRef () );
487  pChan->eliminateExcessiveSendBacklog ( guard );
488  pChan->io.write ( guard, tmpType, count, pValue );
489  caStatus = ECA_NORMAL;
490  }
491  catch ( cacChannel::badString & )
492  {
493  caStatus = ECA_BADSTR;
494  }
495  catch ( cacChannel::badType & )
496  {
497  caStatus = ECA_BADTYPE;
498  }
499  catch ( cacChannel::outOfBounds & )
500  {
501  caStatus = ECA_BADCOUNT;
502  }
503  catch ( cacChannel::noWriteAccess & )
504  {
505  caStatus = ECA_NOWTACCESS;
506  }
507  catch ( cacChannel::notConnected & )
508  {
509  caStatus = ECA_DISCONN;
510  }
512  {
513  caStatus = ECA_UNAVAILINSERV;
514  }
515  catch ( cacChannel::requestTimedOut & )
516  {
517  caStatus = ECA_TIMEOUT;
518  }
519  catch ( std::bad_alloc & )
520  {
521  caStatus = ECA_ALLOCMEM;
522  }
523  catch ( ... )
524  {
525  caStatus = ECA_PUTFAIL;
526  }
527  return caStatus;
528 }
#define ECA_PUTFAIL
Definition: caerr.h:97
pvd::StructureConstPtr type
#define ECA_BADCOUNT
Definition: caerr.h:99
#define ECA_DISCONN
Definition: caerr.h:101
#define ECA_NORMAL
Definition: caerr.h:77
#define ECA_NOWTACCESS
Definition: caerr.h:124
#define ECA_BADSTR
Definition: caerr.h:100
#define ECA_TIMEOUT
Definition: caerr.h:87
#define ECA_BADTYPE
Definition: caerr.h:91
#define ECA_UNAVAILINSERV
Definition: caerr.h:131
#define ECA_ALLOCMEM
Definition: caerr.h:83
LIBCA_API int epicsStdCall ca_array_put_callback ( chtype  type,
unsigned long  count,
chid  chanId,
const void *  pValue,
caEventCallBackFunc pFunc,
void *  pArg 
)

Definition at line 412 of file oldChannelNotify.cpp.

414 {
415  int caStatus;
416  try {
417  if ( type < 0 ) {
418  return ECA_BADTYPE;
419  }
420  if ( pfunc == NULL ) {
421  return ECA_BADFUNCPTR;
422  }
423  epicsGuard < epicsMutex > guard ( pChan->cacCtx.mutexRef () );
424  pChan->eliminateExcessiveSendBacklog ( guard );
425  unsigned tmpType = static_cast < unsigned > ( type );
427  ( pChan->getClientCtx().putCallbackFreeList,
428  new ( pChan->getClientCtx().putCallbackFreeList )
429  putCallback ( *pChan, pfunc, usrarg ) );
430  pChan->io.write ( guard, tmpType, count, pValue, *pNotify, 0 );
431  pNotify.release ();
432  caStatus = ECA_NORMAL;
433  }
434  catch ( cacChannel::badString & )
435  {
436  caStatus = ECA_BADSTR;
437  }
438  catch ( cacChannel::badType & )
439  {
440  caStatus = ECA_BADTYPE;
441  }
442  catch ( cacChannel::outOfBounds & )
443  {
444  caStatus = ECA_BADCOUNT;
445  }
446  catch ( cacChannel::noWriteAccess & )
447  {
448  caStatus = ECA_NOWTACCESS;
449  }
450  catch ( cacChannel::notConnected & )
451  {
452  caStatus = ECA_DISCONN;
453  }
455  {
456  caStatus = ECA_UNAVAILINSERV;
457  }
458  catch ( cacChannel::requestTimedOut & )
459  {
460  caStatus = ECA_TIMEOUT;
461  }
462  catch ( std::bad_alloc & )
463  {
464  caStatus = ECA_ALLOCMEM;
465  }
466  catch ( ... )
467  {
468  caStatus = ECA_PUTFAIL;
469  }
470  return caStatus;
471 }
#define ECA_BADFUNCPTR
Definition: caerr.h:129
#define ECA_PUTFAIL
Definition: caerr.h:97
pvd::StructureConstPtr type
#define ECA_BADCOUNT
Definition: caerr.h:99
#define NULL
Definition: catime.c:38
#define ECA_DISCONN
Definition: caerr.h:101
#define ECA_NORMAL
Definition: caerr.h:77
#define ECA_NOWTACCESS
Definition: caerr.h:124
#define ECA_BADSTR
Definition: caerr.h:100
#define ECA_TIMEOUT
Definition: caerr.h:87
#define ECA_BADTYPE
Definition: caerr.h:91
#define ECA_UNAVAILINSERV
Definition: caerr.h:131
#define ECA_ALLOCMEM
Definition: caerr.h:83
LIBCA_API int epicsStdCall ca_attach_context ( struct ca_client_context context)

Definition at line 746 of file access.cpp.

747 {
749  if ( pcac && pCtx != 0 ) {
750  return ECA_ISATTACHED;
751  }
752  if ( ! pCtx->preemptiveCallbakIsEnabled() ) {
753  return ECA_NOTTHREADED;
754  }
756  return ECA_NORMAL;
757 }
LIBCOM_API void *epicsStdCall epicsThreadPrivateGet(epicsThreadPrivateId)
Definition: osdThread.c:973
#define ECA_NORMAL
Definition: caerr.h:77
LIBCOM_API void epicsStdCall epicsThreadPrivateSet(epicsThreadPrivateId, void *)
Definition: osdThread.c:961
#define ECA_NOTTHREADED
Definition: caerr.h:134
epicsThreadPrivateId caClientContextId
Definition: access.cpp:46
#define ECA_ISATTACHED
Definition: caerr.h:130
LIBCA_API unsigned epicsStdCall ca_beacon_anomaly_count ( void  )

Definition at line 681 of file access.cpp.

682 {
683  ca_client_context * pcac;
684  int caStatus = fetchClientContext ( & pcac );
685  if ( caStatus != ECA_NORMAL ) {
686  return 0u;
687  }
688 
689  return pcac->beaconAnomaliesSinceProgramStart ();
690 }
#define ECA_NORMAL
Definition: caerr.h:77
unsigned beaconAnomaliesSinceProgramStart() const
int fetchClientContext(ca_client_context **ppcac)
Definition: access.cpp:137
LIBCA_API double epicsStdCall ca_beacon_period ( chid  chan)

Definition at line 686 of file oldChannelNotify.cpp.

687 {
688  epicsGuard < epicsMutex > guard ( pChan->cacCtx.mutexRef () );
689  return pChan->io.beaconPeriod ( guard );
690 }
LIBCA_API int epicsStdCall ca_build_and_connect ( const char *  pChanName,
chtype  ,
unsigned  long,
chid pChanID,
void *  ,
caCh pFunc,
void *  pArg 
)
LIBCA_API int epicsStdCall ca_change_connection_event ( chid  chan,
caCh pfunc 
)

Definition at line 218 of file oldChannelNotify.cpp.

219 {
220  epicsGuard < epicsMutex > guard ( pChan->cacCtx.mutexRef () );
221  if ( ! pChan->currentlyConnected ) {
222  if ( pfunc ) {
223  if ( ! pChan->pConnCallBack ) {
224  pChan->cacCtx.decrementOutstandingIO ( guard, pChan->ioSeqNo );
225  }
226  }
227  else {
228  if ( pChan->pConnCallBack ) {
229  pChan->cacCtx.incrementOutstandingIO ( guard, pChan->ioSeqNo );
230  }
231  }
232  }
233  pChan->pConnCallBack = pfunc;
234  return ECA_NORMAL;
235 }
#define ECA_NORMAL
Definition: caerr.h:77
LIBCA_API int epicsStdCall ca_channel_status ( epicsThreadId  tid)

Definition at line 693 of file access.cpp.

694 {
695  ::printf ("The R3.14 EPICS OS abstraction API does not allow peeking at thread private storage of another thread.\n");
696  ::printf ("Please call \"ca_client_status ( unsigned level )\" from the subsystem specific diagnostic code.\n");
697  return ECA_ANACHRONISM;
698 }
#define ECA_ANACHRONISM
Definition: caerr.h:125
#define printf
Definition: epicsStdio.h:41
LIBCA_API int epicsStdCall ca_clear_channel ( chid  chanId)

Definition at line 363 of file access.cpp.

364 {
365  ca_client_context & cac = pChan->getClientCtx ();
366  {
367  epicsGuard < epicsMutex > guard ( cac.mutex );
368  try {
369  pChan->eliminateExcessiveSendBacklog ( guard );
370  }
371  catch ( cacChannel::notConnected & ) {
372  // intentionally ignored
373  }
374  }
375  if ( cac.pCallbackGuard.get() &&
376  cac.createdByThread == epicsThreadGetIdSelf () ) {
377  epicsGuard < epicsMutex > guard ( cac.mutex );
378  pChan->destructor ( *cac.pCallbackGuard.get(), guard );
379  cac.oldChannelNotifyFreeList.release ( pChan );
380  }
381  else {
382  //
383  // we will definately stall out here if all of the
384  // following are true
385  //
386  // o user creates non-preemtive mode client library context
387  // o user doesnt periodically call a ca function
388  // o user calls this function from an auxiillary thread
389  //
390  CallbackGuard cbGuard ( cac.cbMutex );
391  epicsGuard < epicsMutex > guard ( cac.mutex );
392  pChan->destructor ( *cac.pCallbackGuard.get(), guard );
393  cac.oldChannelNotifyFreeList.release ( pChan );
394  }
395  return ECA_NORMAL;
396 }
Definition: cac.h:97
#define ECA_NORMAL
Definition: caerr.h:77
void release(void *p)
Definition: tsFreeList.h:176
LIBCOM_API epicsThreadId epicsStdCall epicsThreadGetIdSelf(void)
Definition: osdThread.c:810
LIBCA_API int epicsStdCall ca_clear_event ( evid  eventID)

Definition at line 431 of file access.cpp.

432 {
433  return ca_clear_subscription ( pMon );
434 }
LIBCA_API int epicsStdCall ca_clear_subscription(evid pMon)
LIBCA_API int epicsStdCall ca_clear_subscription ( evid  eventID)

Definition at line 743 of file ca_client_context.cpp.

744 {
745  oldChannelNotify & chan = pMon->channel ();
746  ca_client_context & cac = chan.getClientCtx ();
747  // !!!! the order in which we take the mutex here prevents deadlocks
748  {
749  epicsGuard < epicsMutex > guard ( cac.mutex );
750  try {
751  // if this stalls out on a live circuit then an exception
752  // can be forthcoming which we must ignore as the clear
753  // request must always be successful
754  chan.eliminateExcessiveSendBacklog ( guard );
755  }
756  catch ( cacChannel::notConnected & ) {
757  // intentionally ignored
758  }
759  }
760  if ( cac.pCallbackGuard.get() &&
761  cac.createdByThread == epicsThreadGetIdSelf () ) {
762  epicsGuard < epicsMutex > guard ( cac.mutex );
763  pMon->cancel ( *cac.pCallbackGuard.get(), guard );
764  }
765  else {
766  //
767  // we will definately stall out here if all of the
768  // following are true
769  //
770  // o user creates non-preemtive mode client library context
771  // o user doesnt periodically call a ca function
772  // o user calls this function from an auxiillary thread
773  //
774  CallbackGuard cbGuard ( cac.cbMutex );
775  epicsGuard < epicsMutex > guard ( cac.mutex );
776  pMon->cancel ( cbGuard, guard );
777  }
778  return ECA_NORMAL;
779 }
Definition: cac.h:97
ca_client_context & getClientCtx()
Definition: oldAccess.h:428
#define ECA_NORMAL
Definition: caerr.h:77
void eliminateExcessiveSendBacklog(epicsGuard< epicsMutex > &)
Definition: oldAccess.h:468
LIBCOM_API epicsThreadId epicsStdCall epicsThreadGetIdSelf(void)
Definition: osdThread.c:810
LIBCA_API int epicsStdCall ca_client_status ( unsigned  level)

Definition at line 701 of file access.cpp.

702 {
703  ca_client_context *pcac;
704  int caStatus = fetchClientContext ( &pcac );
705  if ( caStatus != ECA_NORMAL ) {
706  return caStatus;
707  }
708 
709  pcac->show ( level );
710  return ECA_NORMAL;
711 }
#define ECA_NORMAL
Definition: caerr.h:77
int fetchClientContext(ca_client_context **ppcac)
Definition: access.cpp:137
void show(unsigned level) const
LIBCA_API int epicsStdCall ca_context_create ( enum ca_preemptive_callback_select  select)

Definition at line 172 of file access.cpp.

174 {
175  ca_client_context *pcac;
176 
177  try {
178  epicsThreadOnce ( & caClientContextIdOnce, ca_init_client_context, 0);
179  if ( caClientContextId == 0 ) {
180  return ECA_ALLOCMEM;
181  }
182 
184  if ( pcac ) {
185  if ( premptiveCallbackSelect == ca_enable_preemptive_callback &&
186  ! pcac->preemptiveCallbakIsEnabled() ) {
187  return ECA_NOTTHREADED;
188  }
189  return ECA_NORMAL;
190  }
191 
192  pcac = new ca_client_context (
193  premptiveCallbackSelect == ca_enable_preemptive_callback );
194  if ( ! pcac ) {
195  return ECA_ALLOCMEM;
196  }
197 
198  epicsThreadPrivateSet ( caClientContextId, (void *) pcac );
199  }
200  catch ( ... ) {
201  return ECA_ALLOCMEM;
202  }
203  return ECA_NORMAL;
204 }
void ca_init_client_context(void *)
Definition: access.cpp:129
bool preemptiveCallbakIsEnabled() const
Definition: oldAccess.h:556
LIBCOM_API void *epicsStdCall epicsThreadPrivateGet(epicsThreadPrivateId)
Definition: osdThread.c:973
#define ECA_NORMAL
Definition: caerr.h:77
LIBCOM_API void epicsStdCall epicsThreadOnce(epicsThreadOnceId *id, EPICSTHREADFUNC, void *arg)
LIBCOM_API void epicsStdCall epicsThreadPrivateSet(epicsThreadPrivateId, void *)
Definition: osdThread.c:961
#define ECA_NOTTHREADED
Definition: caerr.h:134
epicsThreadPrivateId caClientContextId
Definition: access.cpp:46
#define ECA_ALLOCMEM
Definition: caerr.h:83
LIBCA_API void epicsStdCall ca_context_destroy ( void  )

Definition at line 232 of file access.cpp.

233 {
234  ca_client_context *pcac;
235 
236  if ( caClientContextId != NULL ) {
238  if ( pcac ) {
239  delete pcac;
241  }
242  }
243 }
LIBCOM_API void *epicsStdCall epicsThreadPrivateGet(epicsThreadPrivateId)
Definition: osdThread.c:973
#define NULL
Definition: catime.c:38
LIBCOM_API void epicsStdCall epicsThreadPrivateSet(epicsThreadPrivateId, void *)
Definition: osdThread.c:961
epicsThreadPrivateId caClientContextId
Definition: access.cpp:46
LIBCA_API int epicsStdCall ca_context_status ( struct ca_client_context ,
unsigned  level 
)

Definition at line 713 of file access.cpp.

714 {
715  pcac->show ( level );
716  return ECA_NORMAL;
717 }
#define ECA_NORMAL
Definition: caerr.h:77
LIBCA_API int epicsStdCall ca_create_channel ( const char *  pChanName,
caCh pConnStateCallback,
void *  pUserPrivate,
capri  priority,
chid pChanID 
)

Definition at line 288 of file access.cpp.

291 {
292  ca_client_context * pcac;
293  int caStatus = fetchClientContext ( & pcac );
294  if ( caStatus != ECA_NORMAL ) {
295  return caStatus;
296  }
297 
298  {
299  CAFDHANDLER * pFunc = 0;
300  void * pArg = 0;
301  {
303  guard ( pcac->mutex );
304  if ( pcac->fdRegFuncNeedsToBeCalled ) {
305  pFunc = pcac->fdRegFunc;
306  pArg = pcac->fdRegArg;
307  pcac->fdRegFuncNeedsToBeCalled = false;
308  }
309  }
310  if ( pFunc ) {
311  ( *pFunc ) ( pArg, pcac->sock, true );
312  }
313  }
314 
315  try {
316  epicsGuard < epicsMutex > guard ( pcac->mutex );
317  oldChannelNotify * pChanNotify =
318  new ( pcac->oldChannelNotifyFreeList )
319  oldChannelNotify ( guard, *pcac, name_str,
320  conn_func, puser, priority );
321  // make sure that their chan pointer is set prior to
322  // calling connection call backs
323  *chanptr = pChanNotify;
324  pChanNotify->initiateConnect ( guard );
325  // no need to worry about a connect preempting here because
326  // the connect sequence will not start untill initiateConnect()
327  // is called
328  }
329  catch ( cacChannel::badString & ) {
330  return ECA_BADSTR;
331  }
332  catch ( std::bad_alloc & ) {
333  return ECA_ALLOCMEM;
334  }
335  catch ( cacChannel::badPriority & ) {
336  return ECA_BADPRIORITY;
337  }
339  return ECA_UNAVAILINSERV;
340  }
341  catch ( std :: exception & except ) {
342  pcac->printFormated (
343  "ca_create_channel: "
344  "unexpected exception was \"%s\"",
345  except.what () );
346  return ECA_INTERNAL;
347  }
348  catch ( ... ) {
349  return ECA_INTERNAL;
350  }
351 
352  return ECA_NORMAL;
353 }
#define true
Definition: flexdef.h:84
#define ECA_INTERNAL
Definition: caerr.h:94
int printFormated(const char *pformat,...) const
void CAFDHANDLER(void *parg, int fd, int opened)
Definition: cadef.h:657
#define ECA_NORMAL
Definition: caerr.h:77
#define ECA_BADPRIORITY
Definition: caerr.h:133
void initiateConnect(epicsGuard< epicsMutex > &)
Definition: oldAccess.h:447
int fetchClientContext(ca_client_context **ppcac)
Definition: access.cpp:137
#define ECA_BADSTR
Definition: caerr.h:100
#define ECA_UNAVAILINSERV
Definition: caerr.h:131
#define ECA_ALLOCMEM
Definition: caerr.h:83
LIBCA_API int epicsStdCall ca_create_subscription ( chtype  type,
unsigned long  count,
chid  chanId,
long  mask,
caEventCallBackFunc pFunc,
void *  pArg,
evid pEventID 
)

Definition at line 530 of file oldChannelNotify.cpp.

534 {
535  if ( type < 0 ) {
536  return ECA_BADTYPE;
537  }
538  unsigned tmpType = static_cast < unsigned > ( type );
539 
540  if ( INVALID_DB_REQ (type) ) {
541  return ECA_BADTYPE;
542  }
543 
544  if ( pCallBack == NULL ) {
545  return ECA_BADFUNCPTR;
546  }
547 
548  static const long maskMask = 0xffff;
549  if ( ( mask & maskMask ) == 0) {
550  return ECA_BADMASK;
551  }
552 
553  if ( mask & ~maskMask ) {
554  return ECA_BADMASK;
555  }
556 
557  try {
558  epicsGuard < epicsMutex > guard ( pChan->cacCtx.mutexRef () );
559  try {
560  // if this stalls out on a live circuit then an exception
561  // can be forthcoming which we must ignore (this is a
562  // special case preserving legacy ca_create_subscription
563  // behavior)
564  pChan->eliminateExcessiveSendBacklog ( guard );
565  }
566  catch ( cacChannel::notConnected & ) {
567  // intentionally ignored (its ok to subscribe when not connected)
568  }
569  new ( pChan->getClientCtx().subscriptionFreeList )
571  guard, *pChan, pChan->io, tmpType, count, mask,
572  pCallBack, pCallBackArg, monixptr );
573  // dont touch object created after above new because
574  // the first callback might have canceled, and therefore
575  // destroyed, it
576  return ECA_NORMAL;
577  }
578  catch ( cacChannel::badType & )
579  {
580  return ECA_BADTYPE;
581  }
582  catch ( cacChannel::outOfBounds & )
583  {
584  return ECA_BADCOUNT;
585  }
587  {
588  return ECA_BADMASK;
589  }
590  catch ( cacChannel::noReadAccess & )
591  {
592  return ECA_NORDACCESS;
593  }
595  {
596  return ECA_UNAVAILINSERV;
597  }
598  catch ( std::bad_alloc & )
599  {
600  return ECA_ALLOCMEM;
601  }
603  return ECA_TOLARGE;
604  }
605  catch ( ... )
606  {
607  return ECA_INTERNAL;
608  }
609 }
#define ECA_BADFUNCPTR
Definition: caerr.h:129
#define ECA_INTERNAL
Definition: caerr.h:94
pvd::StructureConstPtr type
#define ECA_BADCOUNT
Definition: caerr.h:99
#define INVALID_DB_REQ(x)
Definition: db_access.h:115
#define NULL
Definition: catime.c:38
#define ECA_NORMAL
Definition: caerr.h:77
#define ECA_TOLARGE
Definition: caerr.h:86
#define ECA_NORDACCESS
Definition: caerr.h:123
#define ECA_BADMASK
Definition: caerr.h:118
#define ECA_BADTYPE
Definition: caerr.h:91
#define ECA_UNAVAILINSERV
Definition: caerr.h:131
#define ECA_ALLOCMEM
Definition: caerr.h:83
LIBCA_API struct ca_client_context* epicsStdCall ca_current_context ( )

Definition at line 726 of file access.cpp.

727 {
728  struct ca_client_context *pCtx;
729  if ( caClientContextId ) {
730  pCtx = ( struct ca_client_context * )
732  }
733  else {
734  pCtx = 0;
735  }
736  return pCtx;
737 }
LIBCOM_API void *epicsStdCall epicsThreadPrivateGet(epicsThreadPrivateId)
Definition: osdThread.c:973
epicsThreadPrivateId caClientContextId
Definition: access.cpp:46
LIBCA_API void epicsStdCall ca_detach_context ( )

Definition at line 759 of file access.cpp.

760 {
761  if ( caClientContextId ) {
763  }
764 }
LIBCOM_API void epicsStdCall epicsThreadPrivateSet(epicsThreadPrivateId, void *)
Definition: osdThread.c:961
epicsThreadPrivateId caClientContextId
Definition: access.cpp:46
LIBCA_API void epicsStdCall ca_dump_dbr ( chtype  type,
unsigned  count,
const void *  pbuffer 
)

Definition at line 50 of file test_event.cpp.

52 {
53  unsigned i;
54  char tsString[50];
55 
56  if ( INVALID_DB_REQ ( type ) ) {
57  printf ( "bad DBR type %ld\n", type );
58  }
59 
60  printf ( "%s\t", dbr_text[type] );
61 
62  switch ( type ) {
63  case DBR_STRING:
64  {
65  dbr_string_t *pString = (dbr_string_t *) pbuffer;
66 
67  for(i=0; i<count && (*pString)[0]!='\0'; i++) {
68  if(count!=1 && (i%5 == 0)) printf("\n");
69  printf("%s ", *pString);
70  pString++;
71  }
72  break;
73  }
74  case DBR_SHORT:
75  {
76  dbr_short_t *pvalue = (dbr_short_t *)pbuffer;
77  for (i = 0; i < count; i++,pvalue++){
78  if(count!=1 && (i%10 == 0)) printf("\n");
79  printf("%d ",* (short *)pvalue);
80  }
81  break;
82  }
83  case DBR_ENUM:
84  {
85  dbr_enum_t *pvalue = (dbr_enum_t *)pbuffer;
86  for (i = 0; i < count; i++,pvalue++){
87  if(count!=1 && (i%10 == 0)) printf("\n");
88  printf("%d ",*pvalue);
89  }
90  break;
91  }
92  case DBR_FLOAT:
93  {
94  dbr_float_t *pvalue = (dbr_float_t *)pbuffer;
95  for (i = 0; i < count; i++,pvalue++){
96  if(count!=1 && (i%10 == 0)) printf("\n");
97  printf("%6.4f ",*(float *)pvalue);
98  }
99  break;
100  }
101  case DBR_CHAR:
102  {
103  dbr_char_t *pvalue = (dbr_char_t *) pbuffer;
104 
105  for (i = 0; i < count; i++,pvalue++){
106  if(count!=1 && (i%10 == 0)) printf("\n");
107  printf("%u ",*pvalue);
108  }
109  break;
110  }
111  case DBR_LONG:
112  {
113  dbr_long_t *pvalue = (dbr_long_t *)pbuffer;
114  for (i = 0; i < count; i++,pvalue++){
115  if(count!=1 && (i%10 == 0)) printf("\n");
116  printf("%d ",*pvalue);
117  }
118  break;
119  }
120  case DBR_DOUBLE:
121  {
122  dbr_double_t *pvalue = (dbr_double_t *)pbuffer;
123  for (i = 0; i < count; i++,pvalue++){
124  if(count!=1 && (i%10 == 0)) printf("\n");
125  printf("%6.4f ",(float)(*pvalue));
126  }
127  break;
128  }
129  case DBR_STS_STRING:
130  case DBR_GR_STRING:
131  case DBR_CTRL_STRING:
132  {
133  struct dbr_sts_string *pvalue
134  = (struct dbr_sts_string *) pbuffer;
135  printf("%2d %2d",pvalue->status,pvalue->severity);
136  printf("\tValue: %s",pvalue->value);
137  break;
138  }
139  case DBR_STS_ENUM:
140  {
141  struct dbr_sts_enum *pvalue
142  = (struct dbr_sts_enum *)pbuffer;
143  dbr_enum_t *pEnum = &pvalue->value;
144  printf("%2d %2d",pvalue->status,pvalue->severity);
145  if(count==1) printf("\tValue: ");
146  for (i = 0; i < count; i++,pEnum++){
147  if(count!=1 && (i%10 == 0)) printf("\n");
148  printf("%u ",*pEnum);
149  }
150  break;
151  }
152  case DBR_STS_SHORT:
153  {
154  struct dbr_sts_short *pvalue
155  = (struct dbr_sts_short *)pbuffer;
156  dbr_short_t *pshort = &pvalue->value;
157  printf("%2d %2d",pvalue->status,pvalue->severity);
158  if(count==1) printf("\tValue: ");
159  for (i = 0; i < count; i++,pshort++){
160  if(count!=1 && (i%10 == 0)) printf("\n");
161  printf("%u ",*pshort);
162  }
163  break;
164  }
165  case DBR_STS_FLOAT:
166  {
167  struct dbr_sts_float *pvalue
168  = (struct dbr_sts_float *)pbuffer;
169  dbr_float_t *pfloat = &pvalue->value;
170  printf("%2d %2d",pvalue->status,pvalue->severity);
171  if(count==1) printf("\tValue: ");
172  for (i = 0; i < count; i++,pfloat++){
173  if(count!=1 && (i%10 == 0)) printf("\n");
174  printf("%6.4f ",*pfloat);
175  }
176  break;
177  }
178  case DBR_STS_CHAR:
179  {
180  struct dbr_sts_char *pvalue
181  = (struct dbr_sts_char *)pbuffer;
182  dbr_char_t *pchar = &pvalue->value;
183 
184  printf("%2d %2d",pvalue->status,pvalue->severity);
185  if(count==1) printf("\tValue: ");
186  for (i = 0; i < count; i++,pchar++){
187  if(count!=1 && (i%10 == 0)) printf("\n");
188  printf("%u ", *pchar);
189  }
190  break;
191  }
192  case DBR_STS_LONG:
193  {
194  struct dbr_sts_long *pvalue
195  = (struct dbr_sts_long *)pbuffer;
196  dbr_long_t *plong = &pvalue->value;
197  printf("%2d %2d",pvalue->status,pvalue->severity);
198  if(count==1) printf("\tValue: ");
199  for (i = 0; i < count; i++,plong++){
200  if(count!=1 && (i%10 == 0)) printf("\n");
201  printf("%d ",*plong);
202  }
203  break;
204  }
205  case DBR_STS_DOUBLE:
206  {
207  struct dbr_sts_double *pvalue
208  = (struct dbr_sts_double *)pbuffer;
209  dbr_double_t *pdouble = &pvalue->value;
210  printf("%2d %2d",pvalue->status,pvalue->severity);
211  if(count==1) printf("\tValue: ");
212  for (i = 0; i < count; i++,pdouble++){
213  if(count!=1 && (i%10 == 0)) printf("\n");
214  printf("%6.4f ",(float)(*pdouble));
215  }
216  break;
217  }
218  case DBR_TIME_STRING:
219  {
220  struct dbr_time_string *pvalue
221  = (struct dbr_time_string *) pbuffer;
222 
223  epicsTimeToStrftime(tsString,sizeof(tsString),
224  "%Y/%m/%d %H:%M:%S.%06f",&pvalue->stamp);
225  printf("%2d %2d",pvalue->status,pvalue->severity);
226  printf("\tTimeStamp: %s",tsString);
227  printf("\tValue: ");
228  printf("%s",pvalue->value);
229  break;
230  }
231  case DBR_TIME_ENUM:
232  {
233  struct dbr_time_enum *pvalue
234  = (struct dbr_time_enum *)pbuffer;
235  dbr_enum_t *pshort = &pvalue->value;
236 
237  epicsTimeToStrftime(tsString,sizeof(tsString),
238  "%Y/%m/%d %H:%M:%S.%06f",&pvalue->stamp);
239  printf("%2d %2d",pvalue->status,pvalue->severity);
240  printf("\tTimeStamp: %s",tsString);
241  if(count==1) printf("\tValue: ");
242  for (i = 0; i < count; i++,pshort++){
243  if(count!=1 && (i%10 == 0)) printf("\n");
244  printf("%d ",*pshort);
245  }
246  break;
247  }
248  case DBR_TIME_SHORT:
249  {
250  struct dbr_time_short *pvalue
251  = (struct dbr_time_short *)pbuffer;
252  dbr_short_t *pshort = &pvalue->value;
253  epicsTimeToStrftime(tsString,sizeof(tsString),
254  "%Y/%m/%d %H:%M:%S.%06f",&pvalue->stamp);
255  printf("%2d %2d",
256  pvalue->status,
257  pvalue->severity);
258  printf("\tTimeStamp: %s",tsString);
259  if(count==1) printf("\tValue: ");
260  for (i = 0; i < count; i++,pshort++){
261  if(count!=1 && (i%10 == 0)) printf("\n");
262  printf("%d ",*pshort);
263  }
264  break;
265  }
266  case DBR_TIME_FLOAT:
267  {
268  struct dbr_time_float *pvalue
269  = (struct dbr_time_float *)pbuffer;
270  dbr_float_t *pfloat = &pvalue->value;
271 
272  epicsTimeToStrftime(tsString,sizeof(tsString),
273  "%Y/%m/%d %H:%M:%S.%06f",&pvalue->stamp);
274  printf("%2d %2d",pvalue->status,pvalue->severity);
275  printf("\tTimeStamp: %s",tsString);
276  if(count==1) printf("\tValue: ");
277  for (i = 0; i < count; i++,pfloat++){
278  if(count!=1 && (i%10 == 0)) printf("\n");
279  printf("%6.4f ",*pfloat);
280  }
281  break;
282  }
283  case DBR_TIME_CHAR:
284  {
285  struct dbr_time_char *pvalue
286  = (struct dbr_time_char *)pbuffer;
287  dbr_char_t *pchar = &pvalue->value;
288 
289  epicsTimeToStrftime(tsString,sizeof(tsString),
290  "%Y/%m/%d %H:%M:%S.%06f",&pvalue->stamp);
291  printf("%2d %2d",pvalue->status,pvalue->severity);
292  printf("\tTimeStamp: %s",tsString);
293  if(count==1) printf("\tValue: ");
294  for (i = 0; i < count; i++,pchar++){
295  if(count!=1 && (i%10 == 0)) printf("\n");
296  printf("%d ",(short)(*pchar));
297  }
298  break;
299  }
300  case DBR_TIME_LONG:
301  {
302  struct dbr_time_long *pvalue
303  = (struct dbr_time_long *)pbuffer;
304  dbr_long_t *plong = &pvalue->value;
305 
306  epicsTimeToStrftime(tsString,sizeof(tsString),
307  "%Y/%m/%d %H:%M:%S.%06f",&pvalue->stamp);
308  printf("%2d %2d",pvalue->status,pvalue->severity);
309  printf("\tTimeStamp: %s",tsString);
310  if(count==1) printf("\tValue: ");
311  for (i = 0; i < count; i++,plong++){
312  if(count!=1 && (i%10 == 0)) printf("\n");
313  printf("%d ",*plong);
314  }
315  break;
316  }
317  case DBR_TIME_DOUBLE:
318  {
319  struct dbr_time_double *pvalue
320  = (struct dbr_time_double *)pbuffer;
321  dbr_double_t *pdouble = &pvalue->value;
322 
323  epicsTimeToStrftime(tsString,sizeof(tsString),
324  "%Y/%m/%d %H:%M:%S.%06f",&pvalue->stamp);
325  printf("%2d %2d",pvalue->status,pvalue->severity);
326  printf("\tTimeStamp: %s",tsString);
327  if(count==1) printf("\tValue: ");
328  for (i = 0; i < count; i++,pdouble++){
329  if(count!=1 && (i%10 == 0)) printf("\n");
330  printf("%6.4f ",(float)(*pdouble));
331  }
332  break;
333  }
334  case DBR_GR_SHORT:
335  {
336  struct dbr_gr_short *pvalue
337  = (struct dbr_gr_short *)pbuffer;
338  dbr_short_t *pshort = &pvalue->value;
339  printf("%2d %2d %.8s",pvalue->status,pvalue->severity,
340  pvalue->units);
341  printf("\n\t%8d %8d %8d %8d %8d %8d",
342  pvalue->upper_disp_limit,pvalue->lower_disp_limit,
343  pvalue->upper_alarm_limit,pvalue->upper_warning_limit,
344  pvalue->lower_warning_limit,pvalue->lower_alarm_limit);
345  if(count==1) printf("\tValue: ");
346  for (i = 0; i < count; i++,pshort++){
347  if(count!=1 && (i%10 == 0)) printf("\n");
348  printf("%d ",*pshort);
349  }
350  break;
351  }
352  case DBR_GR_FLOAT:
353  {
354  struct dbr_gr_float *pvalue
355  = (struct dbr_gr_float *)pbuffer;
356  dbr_float_t *pfloat = &pvalue->value;
357  printf("%2d %2d %.8s",pvalue->status,pvalue->severity,
358  pvalue->units);
359  printf(" %3d\n\t%8.3f %8.3f %8.3f %8.3f %8.3f %8.3f",
360  pvalue->precision,
361  pvalue->upper_disp_limit,pvalue->lower_disp_limit,
362  pvalue->upper_alarm_limit,pvalue->upper_warning_limit,
363  pvalue->lower_warning_limit,pvalue->lower_alarm_limit);
364  if(count==1) printf("\tValue: ");
365  for (i = 0; i < count; i++,pfloat++){
366  if(count!=1 && (i%10 == 0)) printf("\n");
367  printf("%6.4f ",*pfloat);
368  }
369  break;
370  }
371  case DBR_GR_ENUM:
372  {
373  struct dbr_gr_enum *pvalue
374  = (struct dbr_gr_enum *)pbuffer;
375  printf("%2d %2d",pvalue->status,
376  pvalue->severity);
377  printf("\tValue: %d",pvalue->value);
378  if(pvalue->no_str>0) {
379  printf("\n\t%3d",pvalue->no_str);
380  for (i = 0; i < (unsigned) pvalue->no_str; i++)
381  printf("\n\t%.26s",pvalue->strs[i]);
382  }
383  break;
384  }
385  case DBR_CTRL_ENUM:
386  {
387  struct dbr_ctrl_enum *pvalue
388  = (struct dbr_ctrl_enum *)pbuffer;
389  printf("%2d %2d",pvalue->status,
390  pvalue->severity);
391  printf("\tValue: %d",pvalue->value);
392  if(pvalue->no_str>0) {
393  printf("\n\t%3d",pvalue->no_str);
394  for (i = 0; i < (unsigned) pvalue->no_str; i++)
395  printf("\n\t%.26s",pvalue->strs[i]);
396  }
397  break;
398  }
399  case DBR_GR_CHAR:
400  {
401  struct dbr_gr_char *pvalue
402  = (struct dbr_gr_char *)pbuffer;
403  dbr_char_t *pchar = &pvalue->value;
404  printf("%2d %2d %.8s",pvalue->status,pvalue->severity,
405  pvalue->units);
406  printf("\n\t%8d %8d %8d %8d %8d %8d",
407  pvalue->upper_disp_limit,pvalue->lower_disp_limit,
408  pvalue->upper_alarm_limit,pvalue->upper_warning_limit,
409  pvalue->lower_warning_limit,pvalue->lower_alarm_limit);
410  if(count==1) printf("\tValue: ");
411  for (i = 0; i < count; i++,pchar++){
412  if(count!=1 && (i%10 == 0)) printf("\n");
413  printf("%u ",*pchar);
414  }
415  break;
416  }
417  case DBR_GR_LONG:
418  {
419  struct dbr_gr_long *pvalue
420  = (struct dbr_gr_long *)pbuffer;
421  dbr_long_t *plong = &pvalue->value;
422  printf("%2d %2d %.8s",pvalue->status,pvalue->severity,
423  pvalue->units);
424  printf("\n\t%8d %8d %8d %8d %8d %8d",
425  pvalue->upper_disp_limit,pvalue->lower_disp_limit,
426  pvalue->upper_alarm_limit,pvalue->upper_warning_limit,
427  pvalue->lower_warning_limit,pvalue->lower_alarm_limit);
428  if(count==1) printf("\tValue: ");
429  for (i = 0; i < count; i++,plong++){
430  if(count!=1 && (i%10 == 0)) printf("\n");
431  printf("%d ",*plong);
432  }
433  break;
434  }
435  case DBR_GR_DOUBLE:
436  {
437  struct dbr_gr_double *pvalue
438  = (struct dbr_gr_double *)pbuffer;
439  dbr_double_t *pdouble = &pvalue->value;
440  printf("%2d %2d %.8s",pvalue->status,pvalue->severity,
441  pvalue->units);
442  printf(" %3d\n\t%8.3f %8.3f %8.3f %8.3f %8.3f %8.3f",
443  pvalue->precision,
444  (float)(pvalue->upper_disp_limit),
445  (float)(pvalue->lower_disp_limit),
446  (float)(pvalue->upper_alarm_limit),
447  (float)(pvalue->upper_warning_limit),
448  (float)(pvalue->lower_warning_limit),
449  (float)(pvalue->lower_alarm_limit));
450  if(count==1) printf("\tValue: ");
451  for (i = 0; i < count; i++,pdouble++){
452  if(count!=1 && (i%10 == 0)) printf("\n");
453  printf("%6.4f ",(float)(*pdouble));
454  }
455  break;
456  }
457  case DBR_CTRL_SHORT:
458  {
459  struct dbr_ctrl_short *pvalue
460  = (struct dbr_ctrl_short *)pbuffer;
461  dbr_short_t *pshort = &pvalue->value;
462  printf("%2d %2d %.8s",pvalue->status,pvalue->severity,
463  pvalue->units);
464  printf("\n\t%8d %8d %8d %8d %8d %8d",
465  pvalue->upper_disp_limit,pvalue->lower_disp_limit,
466  pvalue->upper_alarm_limit,pvalue->upper_warning_limit,
467  pvalue->lower_warning_limit,pvalue->lower_alarm_limit);
468  printf(" %8d %8d",
469  pvalue->upper_ctrl_limit,pvalue->lower_ctrl_limit);
470  if(count==1) printf("\tValue: ");
471  for (i = 0; i < count; i++,pshort++){
472  if(count!=1 && (i%10 == 0)) printf("\n");
473  printf("%d ",*pshort);
474  }
475  break;
476  }
477  case DBR_CTRL_FLOAT:
478  {
479  struct dbr_ctrl_float *pvalue
480  = (struct dbr_ctrl_float *)pbuffer;
481  dbr_float_t *pfloat = &pvalue->value;
482  printf("%2d %2d %.8s",pvalue->status,pvalue->severity,
483  pvalue->units);
484  printf(" %3d\n\t%8.3f %8.3f %8.3f %8.3f %8.3f %8.3f",
485  pvalue->precision,
486  pvalue->upper_disp_limit,pvalue->lower_disp_limit,
487  pvalue->upper_alarm_limit,pvalue->upper_warning_limit,
488  pvalue->lower_warning_limit,pvalue->lower_alarm_limit);
489  printf(" %8.3f %8.3f",
490  pvalue->upper_ctrl_limit,pvalue->lower_ctrl_limit);
491  if(count==1) printf("\tValue: ");
492  for (i = 0; i < count; i++,pfloat++){
493  if(count!=1 && (i%10 == 0)) printf("\n");
494  printf("%6.4f ",*pfloat);
495  }
496  break;
497  }
498  case DBR_CTRL_CHAR:
499  {
500  struct dbr_ctrl_char *pvalue
501  = (struct dbr_ctrl_char *)pbuffer;
502  dbr_char_t *pchar = &pvalue->value;
503  printf("%2d %2d %.8s",pvalue->status,pvalue->severity,
504  pvalue->units);
505  printf("\n\t%8d %8d %8d %8d %8d %8d",
506  pvalue->upper_disp_limit,pvalue->lower_disp_limit,
507  pvalue->upper_alarm_limit,pvalue->upper_warning_limit,
508  pvalue->lower_warning_limit,pvalue->lower_alarm_limit);
509  printf(" %8d %8d",
510  pvalue->upper_ctrl_limit,pvalue->lower_ctrl_limit);
511  if(count==1) printf("\tValue: ");
512  for (i = 0; i < count; i++,pchar++){
513  if(count!=1 && (i%10 == 0)) printf("\n");
514  printf("%4d ",(short)(*pchar));
515  }
516  break;
517  }
518  case DBR_CTRL_LONG:
519  {
520  struct dbr_ctrl_long *pvalue
521  = (struct dbr_ctrl_long *)pbuffer;
522  dbr_long_t *plong = &pvalue->value;
523  printf("%2d %2d %.8s",pvalue->status,pvalue->severity,
524  pvalue->units);
525  printf("\n\t%8d %8d %8d %8d %8d %8d",
526  pvalue->upper_disp_limit,pvalue->lower_disp_limit,
527  pvalue->upper_alarm_limit,pvalue->upper_warning_limit,
528  pvalue->lower_warning_limit,pvalue->lower_alarm_limit);
529  printf(" %8d %8d",
530  pvalue->upper_ctrl_limit,pvalue->lower_ctrl_limit);
531  if(count==1) printf("\tValue: ");
532  for (i = 0; i < count; i++,plong++){
533  if(count!=1 && (i%10 == 0)) printf("\n");
534  printf("%d ",*plong);
535  }
536  break;
537  }
538  case DBR_CTRL_DOUBLE:
539  {
540  struct dbr_ctrl_double *pvalue
541  = (struct dbr_ctrl_double *)pbuffer;
542  dbr_double_t *pdouble = &pvalue->value;
543  printf("%2d %2d %.8s",pvalue->status,pvalue->severity,
544  pvalue->units);
545  printf(" %3d\n\t%8.3f %8.3f %8.3f %8.3f %8.3f %8.3f",
546  pvalue->precision,
547  (float)(pvalue->upper_disp_limit),
548  (float)(pvalue->lower_disp_limit),
549  (float)(pvalue->upper_alarm_limit),
550  (float)(pvalue->upper_warning_limit),
551  (float)(pvalue->lower_warning_limit),
552  (float)(pvalue->lower_alarm_limit));
553  printf(" %8.3f %8.3f",
554  (float)(pvalue->upper_ctrl_limit),
555  (float)(pvalue->lower_ctrl_limit));
556  if(count==1) printf("\tValue: ");
557  for (i = 0; i < count; i++,pdouble++){
558  if(count!=1 && (i%10 == 0)) printf("\n");
559  printf("%6.6f ",(float)(*pdouble));
560  }
561  break;
562  }
563  case DBR_STSACK_STRING:
564  {
565  struct dbr_stsack_string *pvalue
566  = (struct dbr_stsack_string *)pbuffer;
567  printf("%2d %2d",pvalue->status,pvalue->severity);
568  printf(" %2d %2d",pvalue->ackt,pvalue->acks);
569  printf(" %s",pvalue->value);
570  break;
571  }
572  case DBR_CLASS_NAME:
573  {
574  dbr_class_name_t * pvalue =
576  printf ( "%s", *pvalue );
577  break;
578  }
579  default:
580  printf (
581  "unsupported by ca_dbrDump()" );
582  break;
583  }
584  printf("\n");
585 }
dbr_char_t upper_ctrl_limit
Definition: db_access.h:478
dbr_short_t severity
Definition: db_access.h:352
#define DBR_CHAR
Definition: db_access.h:74
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
#define DBR_STRING
Definition: db_access.h:69
#define DBR_GR_LONG
Definition: db_access.h:99
dbr_short_t lower_warning_limit
Definition: db_access.h:432
const char * dbr_text[LAST_BUFFER_TYPE+1]
Definition: access.cpp:1050
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_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
dbr_short_t status
Definition: db_access.h:226
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
char units[MAX_UNITS_SIZE]
Definition: db_access.h:323
dbr_short_t value
Definition: db_access.h:255
dbr_long_t value
Definition: db_access.h:497
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
dbr_short_t status
Definition: db_access.h:177
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
int i
Definition: scan.c:967
void exception epicsGuard< epicsMutex > int const char const char unsigned oldChannelNotify unsigned arrayElementCount count
Definition: oldAccess.h:314
char units[MAX_UNITS_SIZE]
Definition: db_access.h:506
dbr_short_t severity
Definition: db_access.h:391
dbr_short_t severity
Definition: db_access.h:198
#define DBR_GR_ENUM
Definition: db_access.h:97
dbr_float_t lower_ctrl_limit
Definition: db_access.h:453
dbr_short_t status
Definition: db_access.h:486
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
#define DBR_CTRL_ENUM
Definition: db_access.h:105
dbr_enum_t value
Definition: db_access.h:213
dbr_short_t status
Definition: db_access.h:459
epicsTimeStamp stamp
Definition: db_access.h:297
#define DBR_STS_FLOAT
Definition: db_access.h:80
#define DBR_FLOAT
Definition: db_access.h:72
#define printf
Definition: epicsStdio.h:41
dbr_short_t lower_alarm_limit
Definition: db_access.h:433
pvd::StructureConstPtr type
dbr_char_t upper_warning_limit
Definition: db_access.h:475
char units[MAX_UNITS_SIZE]
Definition: db_access.h:394
dbr_short_t value
Definition: db_access.h:436
dbr_short_t status
Definition: db_access.h:335
#define INVALID_DB_REQ(x)
Definition: db_access.h:115
dbr_long_t lower_disp_limit
Definition: db_access.h:490
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 status
Definition: db_access.h:321
#define DBR_STS_CHAR
Definition: db_access.h:82
#define DBR_STS_STRING
Definition: db_access.h:77
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_float_t upper_ctrl_limit
Definition: db_access.h:452
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 severity
Definition: db_access.h:234
dbr_char_t lower_alarm_limit
Definition: db_access.h:477
#define DBR_CTRL_FLOAT
Definition: db_access.h:104
dbr_long_t upper_disp_limit
Definition: db_access.h:489
dbr_short_t severity
Definition: db_access.h:426
dbr_float_t value
Definition: db_access.h:206
dbr_short_t lower_ctrl_limit
Definition: db_access.h:435
#define DBR_STS_SHORT
Definition: db_access.h:78
dbr_ushort_t acks
Definition: db_access.h:187
#define DBR_STSACK_STRING
Definition: db_access.h:111
dbr_short_t severity
Definition: db_access.h:503
char strs[MAX_ENUM_STATES][MAX_ENUM_STRING_SIZE]
Definition: db_access.h:462
char units[MAX_UNITS_SIZE]
Definition: db_access.h:378
dbr_short_t upper_warning_limit
Definition: db_access.h:327
dbr_short_t severity
Definition: db_access.h:362
#define DBR_CTRL_STRING
Definition: db_access.h:101
dbr_char_t upper_warning_limit
Definition: db_access.h:367
dbr_short_t severity
Definition: db_access.h:442
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_double_t upper_warning_limit
Definition: db_access.h:398
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
dbr_short_t upper_alarm_limit
Definition: db_access.h:326
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
dbr_short_t lower_alarm_limit
Definition: db_access.h:329
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
#define DBR_CTRL_SHORT
Definition: db_access.h:102
dbr_short_t severity
Definition: db_access.h:296
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
dbr_short_t lower_disp_limit
Definition: db_access.h:325
dbr_short_t severity
Definition: db_access.h:269
char units[MAX_UNITS_SIZE]
Definition: db_access.h:471
dbr_short_t status
Definition: db_access.h:243
dbr_short_t severity
Definition: db_access.h:278
#define DBR_TIME_STRING
Definition: db_access.h:85
#define DBR_TIME_ENUM
Definition: db_access.h:89
epicsOldString dbr_class_name_t
Definition: db_access.h:51
#define DBR_DOUBLE
Definition: db_access.h:76
#define DBR_GR_DOUBLE
Definition: db_access.h:100
dbr_short_t severity
Definition: db_access.h:470
dbr_short_t status
Definition: db_access.h:502
#define DBR_TIME_LONG
Definition: db_access.h:91
#define DBR_CTRL_CHAR
Definition: db_access.h:106
dbr_char_t value
Definition: db_access.h:282
#define DBR_SHORT
Definition: db_access.h:71
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 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
#define DBR_GR_SHORT
Definition: db_access.h:94
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
#define DBR_STS_DOUBLE
Definition: db_access.h:84
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
#define DBR_TIME_SHORT
Definition: db_access.h:87
char * pbuffer
Definition: errlog.c:85
dbr_short_t precision
Definition: db_access.h:443
#define DBR_ENUM
Definition: db_access.h:73
epicsUInt16 dbr_enum_t
Definition: db_access.h:43
dbr_double_t upper_warning_limit
Definition: db_access.h:510
char units[MAX_UNITS_SIZE]
Definition: db_access.h:445
dbr_short_t status
Definition: db_access.h:277
#define DBR_GR_CHAR
Definition: db_access.h:98
dbr_float_t upper_disp_limit
Definition: db_access.h:446
#define DBR_CTRL_LONG
Definition: db_access.h:107
dbr_double_t lower_warning_limit
Definition: db_access.h:399
dbr_char_t lower_disp_limit
Definition: db_access.h:473
#define DBR_GR_FLOAT
Definition: db_access.h:96
#define DBR_STS_ENUM
Definition: db_access.h:81
dbr_char_t value
Definition: db_access.h:221
#define DBR_CLASS_NAME
Definition: db_access.h:112
dbr_short_t severity
Definition: db_access.h:377
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
#define DBR_LONG
Definition: db_access.h:75
dbr_long_t value
Definition: db_access.h:228
epicsTimeStamp stamp
Definition: db_access.h:289
#define DBR_STS_LONG
Definition: db_access.h:83
dbr_long_t value
Definition: db_access.h:290
#define DBR_TIME_CHAR
Definition: db_access.h:90
dbr_double_t lower_disp_limit
Definition: db_access.h:508
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_short_t status
Definition: db_access.h:260
dbr_long_t upper_warning_limit
Definition: db_access.h:382
dbr_char_t upper_alarm_limit
Definition: db_access.h:474
#define DBR_TIME_DOUBLE
Definition: db_access.h:92
dbr_enum_t value
Definition: db_access.h:464
dbr_short_t status
Definition: db_access.h:211
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
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
dbr_float_t lower_disp_limit
Definition: db_access.h:341
#define DBR_CTRL_DOUBLE
Definition: db_access.h:108
dbr_short_t status
Definition: db_access.h:425
epicsTimeStamp stamp
Definition: db_access.h:279
char units[MAX_UNITS_SIZE]
Definition: db_access.h:363
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:487
dbr_long_t lower_disp_limit
Definition: db_access.h:380
char units[MAX_UNITS_SIZE]
Definition: db_access.h:488
dbr_short_t severity
Definition: db_access.h:336
dbr_float_t lower_alarm_limit
Definition: db_access.h:345
dbr_short_t status
Definition: db_access.h:295
dbr_long_t lower_alarm_limit
Definition: db_access.h:384
char units[MAX_UNITS_SIZE]
Definition: db_access.h:427
#define DBR_GR_STRING
Definition: db_access.h:93
dbr_short_t status
Definition: db_access.h:376
char units[MAX_UNITS_SIZE]
Definition: db_access.h:339
dbr_short_t upper_disp_limit
Definition: db_access.h:324
char strs[MAX_ENUM_STATES][MAX_ENUM_STRING_SIZE]
Definition: db_access.h:354
dbr_short_t severity
Definition: db_access.h:212
#define DBR_TIME_FLOAT
Definition: db_access.h:88
dbr_short_t status
Definition: db_access.h:390
dbr_short_t severity
Definition: db_access.h:244
LIBCA_API unsigned long epicsStdCall ca_element_count ( chid  chan)

Definition at line 630 of file oldChannelNotify.cpp.

631 {
632  epicsGuard < epicsMutex > guard ( pChan->cacCtx.mutexRef () );
633  return pChan->io.nativeElementCount ( guard );
634 }
LIBCA_API chid epicsStdCall ca_evid_to_chid ( evid  id)

Definition at line 437 of file access.cpp.

438 {
439  return & pMon->channel ();
440 }
LIBCA_API short epicsStdCall ca_field_type ( chid  chan)

Definition at line 621 of file oldChannelNotify.cpp.

622 {
623  epicsGuard < epicsMutex > guard ( pChan->cacCtx.mutexRef () );
624  return pChan->io.nativeType ( guard );
625 }
LIBCA_API int epicsStdCall ca_flush_io ( void  )

Definition at line 509 of file access.cpp.

510 {
511  ca_client_context * pcac;
512  int caStatus = fetchClientContext (&pcac);
513  if ( caStatus != ECA_NORMAL ) {
514  return caStatus;
515  }
516 
517  epicsGuard < epicsMutex > guard ( pcac->mutex );
518  pcac->flush ( guard );
519 
520  return ECA_NORMAL;
521 }
#define ECA_NORMAL
Definition: caerr.h:77
int fetchClientContext(ca_client_context **ppcac)
Definition: access.cpp:137
void flush(epicsGuard< epicsMutex > &)
LIBCA_API unsigned epicsStdCall ca_get_host_name ( chid  pChan,
char *  pBuf,
unsigned  bufLength 
)

Definition at line 175 of file oldChannelNotify.cpp.

177 {
178  epicsGuard < epicsMutex > guard ( pChan->cacCtx.mutexRef() );
179  return pChan->io.getHostName ( guard, pBuf, bufLength );
180 }
epicsMutex & mutexRef() const
virtual unsigned getHostName(epicsGuard< epicsMutex > &, char *pBuf, unsigned bufLength) const
Definition: cacChannel.cpp:120
LIBCA_API unsigned epicsStdCall ca_get_ioc_connection_count ( void  )

Definition at line 670 of file access.cpp.

671 {
672  ca_client_context * pcac;
673  int caStatus = fetchClientContext ( & pcac );
674  if ( caStatus != ECA_NORMAL ) {
675  return 0u;
676  }
677 
678  return pcac->circuitCount ();
679 }
#define ECA_NORMAL
Definition: caerr.h:77
int fetchClientContext(ca_client_context **ppcac)
Definition: access.cpp:137
unsigned circuitCount() const
LIBCA_API const char* epicsStdCall ca_host_name ( chid  channel)

Definition at line 188 of file oldChannelNotify.cpp.

190 {
191  epicsGuard < epicsMutex > guard ( pChan->cacCtx.mutexRef () );
192  return pChan->io.pHostName ( guard );
193 }
LIBCA_API int epicsStdCall ca_modify_host_name ( const char *  pHostName)

Definition at line 212 of file access.cpp.

213 {
214  return ECA_NORMAL;
215 }
#define ECA_NORMAL
Definition: caerr.h:77
LIBCA_API int epicsStdCall ca_modify_user_name ( const char *  pUserName)

Definition at line 223 of file access.cpp.

224 {
225  return ECA_NORMAL;
226 }
#define ECA_NORMAL
Definition: caerr.h:77
LIBCA_API const char* epicsStdCall ca_name ( chid  chan)

Definition at line 674 of file oldChannelNotify.cpp.

675 {
676  epicsGuard < epicsMutex > guard ( pChan->cacCtx.mutexRef () );
677  return pChan->io.pName ( guard );
678 }
LIBCA_API int epicsStdCall ca_pend ( ca_real  timeout,
int  early 
)

Definition at line 443 of file access.cpp.

444 {
445  if ( early ) {
446  return ca_pend_io ( timeout );
447  }
448  else {
449  return ca_pend_event ( timeout );
450  }
451 }
double timeout
Definition: pvutils.cpp:25
int epicsStdCall ca_pend_io(ca_real timeout)
Definition: access.cpp:484
int epicsStdCall ca_pend_event(ca_real timeout)
Definition: access.cpp:457
LIBCA_API int epicsStdCall ca_pend_event ( ca_real  timeOut)

Definition at line 457 of file access.cpp.

458 {
459  ca_client_context *pcac;
460  int status = fetchClientContext ( &pcac );
461  if ( status != ECA_NORMAL ) {
462  return status;
463  }
464 
465  try {
466  // preserve past odd ball behavior of waiting forever when
467  // the delay is zero
468  if ( timeout == 0.0 ) {
469  while ( true ) {
470  pcac->pendEvent ( 60.0 );
471  }
472  }
473  return pcac->pendEvent ( timeout );
474  }
475  catch ( ... ) {
476  return ECA_INTERNAL;
477  }
478 }
double timeout
Definition: pvutils.cpp:25
pvd::Status status
#define ECA_INTERNAL
Definition: caerr.h:94
#define ECA_NORMAL
Definition: caerr.h:77
int fetchClientContext(ca_client_context **ppcac)
Definition: access.cpp:137
int pendEvent(const double &timeout)
LIBCA_API int epicsStdCall ca_pend_io ( ca_real  timeOut)

Definition at line 484 of file access.cpp.

485 {
486  ca_client_context *pcac;
487  int status = fetchClientContext ( &pcac );
488  if ( status != ECA_NORMAL ) {
489  return status;
490  }
491 
492  try {
493  // preserve past odd ball behavior of waiting forever when
494  // the delay is zero
495  if ( timeout == 0.0 ) {
496  return pcac->pendIO ( DBL_MAX );
497  }
498 
499  return pcac->pendIO ( timeout );
500  }
501  catch ( ... ) {
502  return ECA_INTERNAL;
503  }
504 }
double timeout
Definition: pvutils.cpp:25
pvd::Status status
#define ECA_INTERNAL
Definition: caerr.h:94
#define ECA_NORMAL
Definition: caerr.h:77
int fetchClientContext(ca_client_context **ppcac)
Definition: access.cpp:137
int pendIO(const double &timeout)
LIBCA_API int epicsStdCall ca_preemtive_callback_is_enabled ( void  )

Definition at line 766 of file access.cpp.

767 {
769  if ( ! pcac ) {
770  return 0;
771  }
772  return pcac->preemptiveCallbakIsEnabled ();
773 }
bool preemptiveCallbakIsEnabled() const
Definition: oldAccess.h:556
LIBCOM_API void *epicsStdCall epicsThreadPrivateGet(epicsThreadPrivateId)
Definition: osdThread.c:973
epicsThreadPrivateId caClientContextId
Definition: access.cpp:46
LIBCA_API void* epicsStdCall ca_puser ( chid  chan)

Definition at line 208 of file oldChannelNotify.cpp.

210 {
211  epicsGuard < epicsMutex > guard ( pChan->cacCtx.mutexRef () );
212  return pChan->pPrivate;
213 }
LIBCA_API unsigned epicsStdCall ca_read_access ( chid  chan)

Definition at line 656 of file oldChannelNotify.cpp.

657 {
658  epicsGuard < epicsMutex > guard ( pChan->cacCtx.mutexRef () );
659  return pChan->io.accessRights(guard).readPermit();
660 }
LIBCA_API double epicsStdCall ca_receive_watchdog_delay ( chid  chan)

Definition at line 692 of file oldChannelNotify.cpp.

693 {
694  epicsGuard < epicsMutex > guard ( pChan->cacCtx.mutexRef () );
695  return pChan->io.receiveWatchdogDelay ( guard );
696 }
LIBCA_API int epicsStdCall ca_replace_access_rights_event ( chid  chan,
caArh pfunc 
)

Definition at line 240 of file oldChannelNotify.cpp.

242 {
243  epicsGuard < epicsMutex > guard ( pChan->cacCtx.mutexRef () );
244 
245  // The order of the following is significant to guarantee that the
246  // access rights handler is always gets called even if the channel connects
247  // while this is running. There is some very small chance that the
248  // handler could be called twice here with the same access rights state, but
249  // that will not upset the application.
250  pChan->pAccessRightsFunc = pfunc ? pfunc : cacNoopAccesRightsHandler;
251  caAccessRights tmp = pChan->io.accessRights ( guard );
252 
253  if ( pChan->currentlyConnected ) {
254  struct access_rights_handler_args args;
255  args.chid = pChan;
256  args.ar.read_access = tmp.readPermit ();
257  args.ar.write_access = tmp.writePermit ();
258  epicsGuardRelease < epicsMutex > unguard ( guard );
259  ( *pChan->pAccessRightsFunc ) ( args );
260  }
261  return ECA_NORMAL;
262 }
void cacNoopAccesRightsHandler(struct access_rights_handler_args)
bool writePermit() const
Definition: cacIO.h:373
#define ECA_NORMAL
Definition: caerr.h:77
bool readPermit() const
Definition: cacIO.h:368
LIBCA_API int epicsStdCall ca_replace_printf_handler ( caPrintfFunc ca_printf_func)

Definition at line 650 of file access.cpp.

651 {
652  ca_client_context *pcac;
653  int caStatus = fetchClientContext (&pcac);
654  if ( caStatus != ECA_NORMAL ) {
655  return caStatus;
656  }
657 
658  pcac->replaceErrLogHandler ( ca_printf_func );
659 
660  return ECA_NORMAL;
661 }
#define ECA_NORMAL
Definition: caerr.h:77
int fetchClientContext(ca_client_context **ppcac)
Definition: access.cpp:137
void replaceErrLogHandler(caPrintfFunc *ca_printf_func)
LIBCA_API int epicsStdCall ca_search_and_connect ( const char *  pChanName,
chid pChanID,
caCh pFunc,
void *  pArg 
)

Definition at line 279 of file access.cpp.

282 {
283  return ca_create_channel ( name_str, conn_func,
284  puser, CA_PRIORITY_DEFAULT, chanptr );
285 }
#define CA_PRIORITY_DEFAULT
Definition: cadef.h:192
int epicsStdCall ca_create_channel(const char *name_str, caCh *conn_func, void *puser, capri priority, chid *chanptr)
Definition: access.cpp:288
LIBCA_API unsigned epicsStdCall ca_search_attempts ( chid  chan)

Definition at line 680 of file oldChannelNotify.cpp.

681 {
682  epicsGuard < epicsMutex > guard ( pChan->cacCtx.mutexRef () );
683  return pChan->io.searchAttempts ( guard );
684 }
LIBCA_API void epicsStdCall ca_self_test ( void  )

Definition at line 777 of file access.cpp.

778 {
780  if ( ! pcac ) {
781  return;
782  }
783  pcac->selfTest ();
784 }
LIBCOM_API void *epicsStdCall epicsThreadPrivateGet(epicsThreadPrivateId)
Definition: osdThread.c:973
epicsThreadPrivateId caClientContextId
Definition: access.cpp:46
LIBCA_API void epicsStdCall ca_set_puser ( chid  chan,
void *  puser 
)

Definition at line 198 of file oldChannelNotify.cpp.

200 {
201  epicsGuard < epicsMutex > guard ( pChan->cacCtx.mutexRef () );
202  pChan->pPrivate = puser;
203 }
LIBCA_API int epicsStdCall ca_sg_array_get ( const CA_SYNC_GID  gid,
chtype  type,
unsigned long  count,
chid  chan,
void *  pValue 
)

Definition at line 308 of file syncgrp.cpp.

310 {
311  ca_client_context *pcac;
312 
313  int caStatus = fetchClientContext ( &pcac );
314  if ( caStatus != ECA_NORMAL ) {
315  return caStatus;
316  }
317 
318  epicsGuard < epicsMutex > guard ( pcac->mutexRef() );
319  CASG * const pcasg = pcac->lookupCASG ( guard, gid );
320  if ( ! pcasg ) {
321  return ECA_BADSYNCGRP;
322  }
323 
324  try {
325  pcasg->get ( guard, pChan, type,
326  static_cast < unsigned > ( count ), pValue );
327  return ECA_NORMAL;
328  }
329  catch ( cacChannel::badString & )
330  {
331  return ECA_BADSTR;
332  }
333  catch ( cacChannel::badType & )
334  {
335  return ECA_BADTYPE;
336  }
337  catch ( cacChannel::outOfBounds & )
338  {
339  return ECA_BADCOUNT;
340  }
341  catch ( cacChannel::noReadAccess & )
342  {
343  return ECA_NORDACCESS;
344  }
345  catch ( cacChannel::notConnected & )
346  {
347  return ECA_DISCONN;
348  }
350  {
351  return ECA_UNAVAILINSERV;
352  }
353  catch ( std::bad_alloc & )
354  {
355  return ECA_ALLOCMEM;
356  }
357  catch ( ... )
358  {
359  return ECA_INTERNAL;
360  }
361 }
#define ECA_INTERNAL
Definition: caerr.h:94
pvd::StructureConstPtr type
#define ECA_BADCOUNT
Definition: caerr.h:99
epicsMutex & mutexRef() const
#define ECA_DISCONN
Definition: caerr.h:101
#define ECA_NORMAL
Definition: caerr.h:77
int fetchClientContext(ca_client_context **ppcac)
Definition: access.cpp:137
#define ECA_BADSYNCGRP
Definition: caerr.h:121
#define ECA_NORDACCESS
Definition: caerr.h:123
CASG * lookupCASG(epicsGuard< epicsMutex > &, unsigned id)
#define ECA_BADSTR
Definition: caerr.h:100
#define ECA_BADTYPE
Definition: caerr.h:91
#define ECA_UNAVAILINSERV
Definition: caerr.h:131
#define ECA_ALLOCMEM
Definition: caerr.h:83
LIBCA_API int epicsStdCall ca_sg_array_put ( const CA_SYNC_GID  gid,
chtype  type,
unsigned long  count,
chid  chan,
const void *  pValue 
)

Definition at line 246 of file syncgrp.cpp.

248 {
249  ca_client_context *pcac;
250 
251  int caStatus = fetchClientContext ( &pcac );
252  if ( caStatus != ECA_NORMAL ) {
253  return caStatus;
254  }
255 
256  epicsGuard < epicsMutex > guard ( pcac->mutexRef() );
257  CASG * const pcasg = pcac->lookupCASG ( guard, gid );
258  if ( ! pcasg ) {
259  return ECA_BADSYNCGRP;
260  }
261 
262  try {
263  pcasg->put ( guard, pChan, type,
264  static_cast < unsigned > ( count ), pValue );
265  return ECA_NORMAL;
266  }
267  catch ( cacChannel::badString & )
268  {
269  return ECA_BADSTR;
270  }
271  catch ( cacChannel::badType & )
272  {
273  return ECA_BADTYPE;
274  }
275  catch ( cacChannel::outOfBounds & )
276  {
277  return ECA_BADCOUNT;
278  }
279  catch ( cacChannel::noWriteAccess & )
280  {
281  return ECA_NOWTACCESS;
282  }
283  catch ( cacChannel::notConnected & )
284  {
285  return ECA_DISCONN;
286  }
288  {
289  return ECA_UNAVAILINSERV;
290  }
291  catch ( cacChannel::requestTimedOut & )
292  {
293  return ECA_TIMEOUT;
294  }
295  catch ( std::bad_alloc & )
296  {
297  return ECA_ALLOCMEM;
298  }
299  catch ( ... )
300  {
301  return ECA_INTERNAL;
302  }
303 }
#define ECA_INTERNAL
Definition: caerr.h:94
pvd::StructureConstPtr type
#define ECA_BADCOUNT
Definition: caerr.h:99
epicsMutex & mutexRef() const
#define ECA_DISCONN
Definition: caerr.h:101
#define ECA_NORMAL
Definition: caerr.h:77
int fetchClientContext(ca_client_context **ppcac)
Definition: access.cpp:137
#define ECA_BADSYNCGRP
Definition: caerr.h:121
#define ECA_NOWTACCESS
Definition: caerr.h:124
CASG * lookupCASG(epicsGuard< epicsMutex > &, unsigned id)
#define ECA_BADSTR
Definition: caerr.h:100
#define ECA_TIMEOUT
Definition: caerr.h:87
#define ECA_BADTYPE
Definition: caerr.h:91
#define ECA_UNAVAILINSERV
Definition: caerr.h:131
#define ECA_ALLOCMEM
Definition: caerr.h:83
LIBCA_API int epicsStdCall ca_sg_block ( const CA_SYNC_GID  gid,
ca_real  timeout 
)

Definition at line 127 of file syncgrp.cpp.

129 {
130  ca_client_context *pcac;
131  int status = fetchClientContext ( &pcac );
132  if ( status == ECA_NORMAL ) {
133  CASG * pcasg;
134  {
135  epicsGuard < epicsMutex > guard ( pcac->mutex );
136  pcasg = pcac->lookupCASG ( guard, gid );
137  if ( pcasg ) {
138  status = pcasg->block (
139  pcac->pCallbackGuard.get (), guard, timeout );
140  }
141  else {
142  status = ECA_BADSYNCGRP;
143  }
144  }
145  if ( pcasg ) {
146  sync_group_reset ( *pcac, *pcasg );
147  }
148  }
149  return status;
150 }
double timeout
Definition: pvutils.cpp:25
pvd::Status status
#define ECA_NORMAL
Definition: caerr.h:77
int block(epicsGuard< epicsMutex > *pcbGuard, epicsGuard< epicsMutex > &guard, double timeout)
Definition: CASG.cpp:62
int fetchClientContext(ca_client_context **ppcac)
Definition: access.cpp:137
#define ECA_BADSYNCGRP
Definition: caerr.h:121
CASG * lookupCASG(epicsGuard< epicsMutex > &, unsigned id)
void sync_group_reset(ca_client_context &client, CASG &sg)
Definition: syncgrp.cpp:96
LIBCA_API int epicsStdCall ca_sg_create ( CA_SYNC_GID pgid)

Definition at line 24 of file syncgrp.cpp.

25 {
26  ca_client_context * pcac;
27  int caStatus;
28  CASG * pcasg;
29 
30  caStatus = fetchClientContext ( &pcac );
31  if ( caStatus != ECA_NORMAL ) {
32  return caStatus;
33  }
34 
35  try {
36  epicsGuard < epicsMutex > guard ( pcac->mutexRef() );
37  pcasg = new ( pcac->casgFreeList ) CASG ( guard, *pcac );
38  *pgid = pcasg->getId ();
39  return ECA_NORMAL;
40  }
41  catch ( std::bad_alloc & ) {
42  return ECA_ALLOCMEM;
43  }
44  catch ( ... ) {
45  return ECA_INTERNAL;
46  }
47 }
#define ECA_INTERNAL
Definition: caerr.h:94
epicsMutex & mutexRef() const
#define ECA_NORMAL
Definition: caerr.h:77
int fetchClientContext(ca_client_context **ppcac)
Definition: access.cpp:137
#define ECA_ALLOCMEM
Definition: caerr.h:83
LIBCA_API int epicsStdCall ca_sg_delete ( const CA_SYNC_GID  gid)

Definition at line 68 of file syncgrp.cpp.

69 {
70  ca_client_context * pcac;
71  int caStatus = fetchClientContext ( & pcac );
72  if ( caStatus == ECA_NORMAL ) {
73  if ( pcac->pCallbackGuard.get() &&
74  pcac->createdByThread == epicsThreadGetIdSelf () ) {
75  epicsGuard < epicsMutex > guard ( pcac->mutex );
76  caStatus = ca_sync_group_destroy ( *pcac->pCallbackGuard.get(),
77  guard, *pcac, gid );
78  }
79  else {
80  //
81  // we will definately stall out here if all of the
82  // following are true
83  //
84  // o user creates non-preemtive mode client library context
85  // o user doesnt periodically call a ca function
86  // o user calls this function from an auxiillary thread
87  //
88  CallbackGuard cbGuard ( pcac->cbMutex );
89  epicsGuard < epicsMutex > guard ( pcac->mutex );
90  caStatus = ca_sync_group_destroy ( cbGuard, guard, *pcac, gid );
91  }
92  }
93  return caStatus;
94 }
#define ECA_NORMAL
Definition: caerr.h:77
int ca_sync_group_destroy(CallbackGuard &cbGuard, epicsGuard< epicsMutex > &guard, ca_client_context &cac, const CA_SYNC_GID gid)
Definition: syncgrp.cpp:49
int fetchClientContext(ca_client_context **ppcac)
Definition: access.cpp:137
LIBCOM_API epicsThreadId epicsStdCall epicsThreadGetIdSelf(void)
Definition: osdThread.c:810
LIBCA_API int epicsStdCall ca_sg_reset ( const CA_SYNC_GID  gid)

Definition at line 155 of file syncgrp.cpp.

156 {
157  ca_client_context *pcac;
158  int caStatus = fetchClientContext (&pcac);
159  if ( caStatus == ECA_NORMAL ) {
160  CASG * pcasg;
161  {
162  epicsGuard < epicsMutex > guard ( pcac->mutex );
163  pcasg = pcac->lookupCASG ( guard, gid );
164  }
165  if ( pcasg ) {
166  sync_group_reset ( *pcac, *pcasg );
167  caStatus = ECA_NORMAL;
168  }
169  else {
170  caStatus = ECA_BADSYNCGRP;
171  }
172  }
173  return caStatus;
174 }
#define ECA_NORMAL
Definition: caerr.h:77
int fetchClientContext(ca_client_context **ppcac)
Definition: access.cpp:137
#define ECA_BADSYNCGRP
Definition: caerr.h:121
CASG * lookupCASG(epicsGuard< epicsMutex > &, unsigned id)
void sync_group_reset(ca_client_context &client, CASG &sg)
Definition: syncgrp.cpp:96
LIBCA_API int epicsStdCall ca_sg_stat ( CA_SYNC_GID  gid)

Definition at line 179 of file syncgrp.cpp.

180 {
181  ca_client_context * pcac;
182  int caStatus = fetchClientContext ( &pcac );
183  if ( caStatus != ECA_NORMAL ) {
184  return caStatus;
185  }
186 
187  epicsGuard < epicsMutex > guard ( pcac->mutexRef() );
188 
189  CASG * pcasg = pcac->lookupCASG ( guard, gid );
190  if ( ! pcasg ) {
191  ::printf ( "Bad Sync Group Id\n");
192  return ECA_BADSYNCGRP;
193  }
194  pcasg->show ( guard, 1000u );
195 
196  return ECA_NORMAL;
197 }
#define printf
Definition: epicsStdio.h:41
epicsMutex & mutexRef() const
#define ECA_NORMAL
Definition: caerr.h:77
int fetchClientContext(ca_client_context **ppcac)
Definition: access.cpp:137
#define ECA_BADSYNCGRP
Definition: caerr.h:121
CASG * lookupCASG(epicsGuard< epicsMutex > &, unsigned id)
LIBCA_API int epicsStdCall ca_sg_test ( const CA_SYNC_GID  gid)

Definition at line 202 of file syncgrp.cpp.

203 {
204  ca_client_context * pcac;
205  int caStatus = fetchClientContext ( &pcac );
206  if ( caStatus == ECA_NORMAL ) {
207  epicsGuard < epicsMutex > guard ( pcac->mutexRef() );
208  CASG * pcasg = pcac->lookupCASG ( guard, gid );
209  if ( pcasg ) {
210  bool isComplete;
211  if ( pcac->pCallbackGuard.get() &&
212  pcac->createdByThread == epicsThreadGetIdSelf () ) {
213  epicsGuard < epicsMutex > guard ( pcac->mutex );
214  isComplete = pcasg->ioComplete ( *pcac->pCallbackGuard.get(), guard );
215  }
216  else {
217  //
218  // we will definately stall out here if all of the
219  // following are true
220  //
221  // o user creates non-preemtive mode client library context
222  // o user doesnt periodically call a ca function
223  // o user calls this function from an auxiillary thread
224  //
225  CallbackGuard cbGuard ( pcac->cbMutex );
226  epicsGuard < epicsMutex > guard ( pcac->mutex );
227  isComplete = pcasg->ioComplete ( cbGuard, guard );
228  }
229  if ( isComplete ) {
230  caStatus = ECA_IODONE;
231  }
232  else{
233  caStatus = ECA_IOINPROGRESS;
234  }
235  }
236  else {
237  caStatus = ECA_BADSYNCGRP;
238  }
239  }
240  return caStatus;
241 }
#define ECA_IOINPROGRESS
Definition: caerr.h:120
#define ECA_IODONE
Definition: caerr.h:119
epicsMutex & mutexRef() const
#define ECA_NORMAL
Definition: caerr.h:77
int fetchClientContext(ca_client_context **ppcac)
Definition: access.cpp:137
#define ECA_BADSYNCGRP
Definition: caerr.h:121
CASG * lookupCASG(epicsGuard< epicsMutex > &, unsigned id)
LIBCOM_API epicsThreadId epicsStdCall epicsThreadGetIdSelf(void)
Definition: osdThread.c:810
LIBCA_API void epicsStdCall ca_signal ( long  errorCode,
const char *  pCtxStr 
)

Definition at line 546 of file access.cpp.

547 {
548  ca_signal_with_file_and_lineno ( ca_status, message, NULL, 0 );
549 }
#define NULL
Definition: catime.c:38
void epicsStdCall ca_signal_with_file_and_lineno(long ca_status, const char *message, const char *pfilenm, int lineno)
Definition: access.cpp:577
LIBCA_API void epicsStdCall ca_signal_formated ( long  ca_status,
const char *  pfilenm,
int  lineno,
const char *  pFormat,
  ... 
)

Definition at line 587 of file access.cpp.

589 {
590  ca_client_context *pcac;
591 
592  if ( caClientContextId ) {
594  }
595  else {
596  pcac = 0;
597  }
598 
599  va_list theArgs;
600  va_start ( theArgs, pFormat );
601  if ( pcac ) {
602  pcac->vSignal ( ca_status, pfilenm, lineno, pFormat, theArgs );
603  }
604  else {
605  fprintf ( stderr, "CA exception in thread w/o CA ctx: status=%s file=%s line=%d: \n",
606  ca_message ( ca_status ), pfilenm, lineno );
607  if ( pFormat ) {
608  vfprintf ( stderr, pFormat, theArgs );
609  }
610  }
611  va_end ( theArgs );
612 }
int lineno
Definition: antelope.c:33
LIBCOM_API void *epicsStdCall epicsThreadPrivateGet(epicsThreadPrivateId)
Definition: osdThread.c:973
epicsThreadPrivateId caClientContextId
Definition: access.cpp:46
const char *epicsStdCall ca_message(long ca_status)
Definition: access.cpp:561
#define stderr
Definition: epicsStdio.h:32
void vSignal(int ca_status, const char *pfilenm, int lineno, const char *pFormat, va_list args)
LIBCA_API void epicsStdCall ca_signal_with_file_and_lineno ( long  errorCode,
const char *  pCtxStr,
const char *  pFileStr,
int  lineNo 
)

Definition at line 577 of file access.cpp.

579 {
580  ca_signal_formated ( ca_status, pfilenm, lineno, message );
581 }
int lineno
Definition: antelope.c:33
void epicsStdCall ca_signal_formated(long ca_status, const char *pfilenm, int lineno, const char *pFormat,...)
Definition: access.cpp:587
LIBCA_API enum channel_state epicsStdCall ca_state ( chid  chan)

Definition at line 639 of file oldChannelNotify.cpp.

640 {
641  epicsGuard < epicsMutex > guard ( pChan->cacCtx.mutexRef () );
642  if ( pChan->io.connected ( guard ) ) {
643  return cs_conn;
644  }
645  else if ( pChan->prevConnected ){
646  return cs_prev_conn;
647  }
648  else {
649  return cs_never_conn;
650  }
651 }
Definition: cadef.h:166
LIBCA_API int epicsStdCall ca_task_exit ( void  )

Definition at line 251 of file access.cpp.

252 {
254  return ECA_NORMAL;
255 }
#define ECA_NORMAL
Definition: caerr.h:77
void epicsStdCall ca_context_destroy()
Definition: access.cpp:232
LIBCA_API int epicsStdCall ca_task_initialize ( void  )

Definition at line 166 of file access.cpp.

167 {
169 }
int epicsStdCall ca_context_create(ca_preemptive_callback_select premptiveCallbackSelect)
Definition: access.cpp:172
LIBCA_API void epicsStdCall ca_test_event ( struct event_handler_args  )

Definition at line 20 of file test_event.cpp.

21 {
22  chtype nativeType = ca_field_type ( args.chid );
23  const char * pNativeTypeName = "<invalid>";
24  if ( VALID_DB_REQ ( nativeType ) ) {
25  pNativeTypeName = dbr_text[nativeType];
26  }
27  else {
28  if ( nativeType == TYPENOTCONN ) {
29  pNativeTypeName = "<disconnected>";
30  }
31  }
32 
33  printf ( "ca_test_event() for channel \"%s\" with native type %s\n",
34  ca_name(args.chid), pNativeTypeName );
35 
36  if ( ! ( CA_M_SUCCESS & args.status ) ) {
37  printf ( "Invalid CA status \"%s\"\n", ca_message ( args.status ) );
38  return;
39  }
40 
41  if ( args.dbr ) {
42  ca_dump_dbr ( args.type, args.count, args.dbr );
43  }
44 }
#define CA_M_SUCCESS
Definition: caerr.h:41
const char * dbr_text[LAST_BUFFER_TYPE+1]
Definition: access.cpp:1050
#define printf
Definition: epicsStdio.h:41
LIBCA_API short epicsStdCall ca_field_type(chid chan)
void epicsStdCall ca_dump_dbr(chtype type, unsigned count, const void *pbuffer)
Definition: test_event.cpp:50
#define VALID_DB_REQ(x)
Definition: db_access.h:114
LIBCA_API const char *epicsStdCall ca_name(chid chan)
const char *epicsStdCall ca_message(long ca_status)
Definition: access.cpp:561
long chtype
Definition: cadef.h:47
#define TYPENOTCONN
Definition: cadef.h:149
LIBCA_API int epicsStdCall ca_test_io ( void  )

Definition at line 526 of file access.cpp.

527 {
528  ca_client_context *pcac;
529  int caStatus = fetchClientContext ( &pcac );
530  if ( caStatus != ECA_NORMAL ) {
531  return caStatus;
532  }
533 
534  if ( pcac->ioComplete () ) {
535  return ECA_IODONE;
536  }
537  else{
538  return ECA_IOINPROGRESS;
539  }
540 }
#define ECA_IOINPROGRESS
Definition: caerr.h:120
#define ECA_IODONE
Definition: caerr.h:119
bool ioComplete() const
Definition: oldAccess.h:561
#define ECA_NORMAL
Definition: caerr.h:77
int fetchClientContext(ca_client_context **ppcac)
Definition: access.cpp:137
LIBCA_API int epicsStdCall ca_v42_ok ( chid  chan)

Definition at line 701 of file oldChannelNotify.cpp.

702 {
703  epicsGuard < epicsMutex > guard ( pChan->cacCtx.mutexRef () );
704  return pChan->io.ca_v42_ok ( guard );
705 }
LIBCA_API const char* epicsStdCall ca_version ( void  )

Definition at line 641 of file access.cpp.

642 {
644 }
#define CA_VERSION_STRING(MINOR_REVISION)
Definition: caProto.h:27
#define CA_MINOR_PROTOCOL_REVISION
Definition: nciu.h:35
LIBCA_API unsigned epicsStdCall ca_write_access ( chid  chan)

Definition at line 665 of file oldChannelNotify.cpp.

666 {
667  epicsGuard < epicsMutex > guard ( pChan->cacCtx.mutexRef () );
668  return pChan->io.accessRights(guard).writePermit();
669 }