This is Unofficial EPICS BASE Doxygen Site
asCa.c File Reference
#include <stdlib.h>
#include <stddef.h>
#include <stdio.h>
#include <string.h>
#include "alarm.h"
#include "asLib.h"
#include "cantProceed.h"
#include "db_access.h"
#include "dbDefs.h"
#include "ellLib.h"
#include "epicsEvent.h"
#include "epicsMutex.h"
#include "epicsStdio.h"
#include "epicsThread.h"
#include "errlog.h"
#include "taskwd.h"
#include "cadef.h"
#include "caerr.h"
#include "caeventmask.h"
#include "asCa.h"
#include "asDbLib.h"
#include "callback.h"
#include "epicsExport.h"
+ Include dependency graph for asCa.c:

Go to the source code of this file.

Classes

struct  CAPVT
 

Macros

#define epicsExportSharedSymbols
 

Functions

 epicsExportAddress (int, asCaDebug)
 
void asCaStart (void)
 
void asCaStop (void)
 
int ascar (int level)
 
int ascarFP (FILE *fp, int level)
 
void ascaStats (int *pchans, int *pdiscon)
 

Variables

int asCaDebug = 0
 

Macro Definition Documentation

#define epicsExportSharedSymbols

Definition at line 35 of file asCa.c.

Function Documentation

int ascar ( int  level)

Definition at line 265 of file asCa.c.

265 { return ascarFP(stdout,level);}
#define stdout
Definition: epicsStdio.h:30
int ascarFP(FILE *fp, int level)
Definition: asCa.c:267
int ascarFP ( FILE *  fp,
int  level 
)

Definition at line 267 of file asCa.c.

268 {
269  ASG *pasg;
270  int n=0,nbad=0;
271  enum channel_state state;
272 
273  if(!pasbase) {
274  fprintf(fp,"access security not started\n");
275  return(0);
276  }
277  pasg = (ASG *)ellFirst(&pasbase->asgList);
278  while(pasg) {
279  ASGINP *pasginp;
280  pasginp = (ASGINP *)ellFirst(&pasg->inpList);
281  while(pasginp) {
282  CAPVT *pcapvt = (CAPVT *)pasginp->capvt;
283  chid chid = pcapvt->chid;
284  pcapvt = pasginp->capvt;
285  ++n;
286  state = ca_state(chid);
287  if(state!=cs_conn) ++nbad;
288  if(level>1 || (level==1 && state!=cs_conn)) {
289  fprintf(fp,"connected:");
290  if(state==cs_never_conn) fprintf(fp,"never ");
291  else if(state==cs_prev_conn) fprintf(fp,"prev ");
292  else if(state==cs_conn) fprintf(fp,"yes ");
293  else if(state==cs_closed) fprintf(fp,"closed");
294  else fprintf(fp,"unknown");
295  fprintf(fp," read:%s write:%s",
296  (ca_read_access(chid) ? "yes" : "no "),
297  (ca_write_access(chid) ? "yes" : "no "));
298  fprintf(fp," %s %s\n", ca_name(chid),ca_host_name(chid));
299  }
300  pasginp = (ASGINP *)ellNext((ELLNODE *)pasginp);
301  }
302  pasg = (ASG *)ellNext((ELLNODE *)pasg);
303  }
304  fprintf(fp,"%d channels %d not connected\n",n,nbad);
305  return(0);
306 }
LIBCA_API unsigned epicsStdCall ca_write_access(chid chan)
void * capvt
Definition: asLib.h:206
LIBCOM_API volatile ASBASE * pasbase
Definition: asLibRoutines.c:38
LIBCA_API enum channel_state epicsStdCall ca_state(chid chan)
LIBCA_API const char *epicsStdCall ca_host_name(chid channel)
Definition: cadef.h:166
ELLLIST asgList
Definition: asLib.h:155
channel_state
Definition: cadef.h:166
#define ellNext(PNODE)
Find the next node in list.
Definition: ellLib.h:99
LIBCA_API const char *epicsStdCall ca_name(chid chan)
LIBCA_API unsigned epicsStdCall ca_read_access(chid chan)
List node type.
Definition: ellLib.h:45
Definition: asCa.c:51
Definition: asLib.h:211
chid chid
Definition: asCa.c:53
ELLLIST inpList
Definition: asLib.h:214
Definition: asLib.h:203
#define ellFirst(PLIST)
Find the first node in list.
Definition: ellLib.h:89
void asCaStart ( void  )

Definition at line 230 of file asCa.c.

231 {
232  if(asCaDebug) printf("asCaStart called\n");
233  if(firstTime) {
234  firstTime = FALSE;
235  asCaTaskLock=epicsMutexMustCreate();
237  asCaTaskAddChannels=epicsEventMustCreate(epicsEventEmpty);
238  asCaTaskClearChannels=epicsEventMustCreate(epicsEventEmpty);
239  threadid = epicsThreadCreate("asCaTask",
242  (EPICSTHREADFUNC)asCaTask,0);
243  if(threadid==0) {
244  errMessage(0,"asCaStart: taskSpawn Failure\n");
245  }
246  }
247  epicsMutexMustLock(asCaTaskLock);
248  epicsEventSignal(asCaTaskAddChannels);
249  epicsEventMustWait(asCaTaskWait);
250  if(asCaDebug) printf("asCaStart done\n");
251  epicsMutexUnlock(asCaTaskLock);
252 }
#define FALSE
Definition: dbDefs.h:32
#define printf
Definition: epicsStdio.h:41
int asCaDebug
Definition: asCa.c:41
#define epicsMutexMustCreate()
Create an epicsMutex semaphore for use from C code.
Definition: epicsMutex.h:179
#define errMessage(S, PM)
Definition: errlog.h:48
LIBCOM_API epicsEventId epicsEventMustCreate(epicsEventInitialState initialState)
Create an epicsEvent for use from C code.
Definition: epicsEvent.cpp:106
void epicsStdCall epicsMutexUnlock(epicsMutexId pmutexNode)
Release the semaphore.
Definition: epicsMutex.cpp:140
LIBCOM_API unsigned int epicsStdCall epicsThreadGetStackSize(epicsThreadStackSizeClass size)
Definition: osdThread.c:466
LIBCOM_API void epicsEventMustWait(epicsEventId id)
Wait for an event (see epicsEventWait()).
Definition: epicsEvent.cpp:123
epicsThreadId epicsStdCall epicsThreadCreate(const char *name, unsigned int priority, unsigned int stackSize, EPICSTHREADFUNC funptr, void *parm)
Definition: epicsThread.cpp:33
#define epicsEventSignal(ID)
A synonym for epicsEventTrigger().
Definition: epicsEvent.h:172
#define epicsThreadPriorityScanLow
Definition: epicsThread.h:82
#define epicsMutexMustLock(ID)
Claim a semaphore (see epicsMutexLock()).
Definition: epicsMutex.h:214
void(* EPICSTHREADFUNC)(void *parm)
Definition: epicsThread.h:66
void ascaStats ( int *  pchans,
int *  pdiscon 
)

Definition at line 308 of file asCa.c.

309 {
310  ASG *pasg;
311  int n = 0;
312  int nbad = 0;
313 
314  if(!pasbase) {
315  if (pchans) *pchans = n;
316  if (pdiscon) *pdiscon = nbad;
317  return;
318  }
319  pasg = (ASG *)ellFirst(&pasbase->asgList);
320  while (pasg) {
321  ASGINP *pasginp;
322  pasginp = (ASGINP *)ellFirst(&pasg->inpList);
323  while (pasginp) {
324  CAPVT *pcapvt = (CAPVT *)pasginp->capvt;
325  chid chid = pcapvt->chid;
326  ++n;
327  if (ca_state(chid) != cs_conn) ++nbad;
328  pasginp = (ASGINP *)ellNext((ELLNODE *)pasginp);
329  }
330  pasg = (ASG *)ellNext((ELLNODE *)pasg);
331  }
332  if (pchans) *pchans = n;
333  if (pdiscon) *pdiscon = nbad;
334 }
void * capvt
Definition: asLib.h:206
LIBCOM_API volatile ASBASE * pasbase
Definition: asLibRoutines.c:38
LIBCA_API enum channel_state epicsStdCall ca_state(chid chan)
Definition: cadef.h:166
ELLLIST asgList
Definition: asLib.h:155
#define ellNext(PNODE)
Find the next node in list.
Definition: ellLib.h:99
List node type.
Definition: ellLib.h:45
Definition: asCa.c:51
Definition: asLib.h:211
if(yy_init)
Definition: scan.c:972
chid chid
Definition: asCa.c:53
ELLLIST inpList
Definition: asLib.h:214
Definition: asLib.h:203
#define ellFirst(PLIST)
Find the first node in list.
Definition: ellLib.h:89
void asCaStop ( void  )

Definition at line 254 of file asCa.c.

255 {
256  if(threadid==0) return;
257  if(asCaDebug) printf("asCaStop called\n");
258  epicsMutexMustLock(asCaTaskLock);
259  epicsEventSignal(asCaTaskClearChannels);
260  epicsEventMustWait(asCaTaskWait);
261  if(asCaDebug) printf("asCaStop done\n");
262  epicsMutexUnlock(asCaTaskLock);
263 }
#define printf
Definition: epicsStdio.h:41
int asCaDebug
Definition: asCa.c:41
void epicsStdCall epicsMutexUnlock(epicsMutexId pmutexNode)
Release the semaphore.
Definition: epicsMutex.cpp:140
LIBCOM_API void epicsEventMustWait(epicsEventId id)
Wait for an event (see epicsEventWait()).
Definition: epicsEvent.cpp:123
#define epicsEventSignal(ID)
A synonym for epicsEventTrigger().
Definition: epicsEvent.h:172
#define epicsMutexMustLock(ID)
Claim a semaphore (see epicsMutexLock()).
Definition: epicsMutex.h:214
epicsExportAddress ( int  ,
asCaDebug   
)

Variable Documentation

int asCaDebug = 0

Definition at line 41 of file asCa.c.