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

Go to the source code of this file.

Typedefs

typedef void(* initHookFunction) (initHookState state)
 

Enumerations

enum  initHookState {
  initHookAtIocBuild = 0, initHookAtBeginning, initHookAfterCallbackInit, initHookAfterCaLinkInit,
  initHookAfterInitDrvSup, initHookAfterInitRecSup, initHookAfterInitDevSup, initHookAfterInitDatabase,
  initHookAfterFinishDevSup, initHookAfterScanInit, initHookAfterInitialProcess, initHookAfterCaServerInit,
  initHookAfterIocBuilt, initHookAtIocRun, initHookAfterDatabaseRunning, initHookAfterCaServerRunning,
  initHookAfterIocRunning, initHookAtIocPause, initHookAfterCaServerPaused, initHookAfterDatabasePaused,
  initHookAfterIocPaused, initHookAtShutdown, initHookAfterCloseLinks, initHookAfterStopScan,
  initHookAfterStopCallback, initHookAfterStopLinks, initHookBeforeFree, initHookAfterShutdown,
  initHookAfterInterruptAccept, initHookAtEnd
}
 

Functions

LIBCOM_API int initHookRegister (initHookFunction func)
 
LIBCOM_API void initHookAnnounce (initHookState state)
 
LIBCOM_API const char * initHookName (int state)
 
LIBCOM_API void initHookFree (void)
 

Typedef Documentation

typedef void(* initHookFunction) (initHookState state)

Definition at line 66 of file initHooks.h.

Enumeration Type Documentation

Enumerator
initHookAtIocBuild 
initHookAtBeginning 
initHookAfterCallbackInit 
initHookAfterCaLinkInit 
initHookAfterInitDrvSup 
initHookAfterInitRecSup 
initHookAfterInitDevSup 
initHookAfterInitDatabase 
initHookAfterFinishDevSup 
initHookAfterScanInit 
initHookAfterInitialProcess 
initHookAfterCaServerInit 
initHookAfterIocBuilt 
initHookAtIocRun 
initHookAfterDatabaseRunning 
initHookAfterCaServerRunning 
initHookAfterIocRunning 
initHookAtIocPause 
initHookAfterCaServerPaused 
initHookAfterDatabasePaused 
initHookAfterIocPaused 
initHookAtShutdown 
initHookAfterCloseLinks 
initHookAfterStopScan 
initHookAfterStopCallback 
initHookAfterStopLinks 
initHookBeforeFree 
initHookAfterShutdown 
initHookAfterInterruptAccept 
initHookAtEnd 

Definition at line 25 of file initHooks.h.

25  {
26  initHookAtIocBuild = 0, /* Start of iocBuild/iocInit commands */
38  initHookAfterIocBuilt, /* End of iocBuild command */
39 
40  initHookAtIocRun, /* Start of iocRun command */
43  initHookAfterIocRunning, /* End of iocRun/iocInit commands */
44 
45  initHookAtIocPause, /* Start of iocPause command */
48  initHookAfterIocPaused, /* End of iocPause command */
49 
50  initHookAtShutdown, /* Start of iocShutdown commands */
52  initHookAfterStopScan, /* triggered only by unittest code. testIocShutdownOk() */
53  initHookAfterStopCallback, /* triggered only by unittest code. testIocShutdownOk() */
55  initHookBeforeFree, /* triggered only by unittest code. testIocShutdownOk() */
56  initHookAfterShutdown, /* End of iocShutdown commands */
57 
58 /* Deprecated states, provided for backwards compatibility.
59  * These states are announced at the same point they were before,
60  * but will not be repeated if the IOC gets paused and restarted.
61  */
62  initHookAfterInterruptAccept, /* After initHookAfterDatabaseRunning */
63  initHookAtEnd, /* Before initHookAfterIocRunning */
initHookState
Definition: initHooks.h:25

Function Documentation

LIBCOM_API void initHookAnnounce ( initHookState  state)

Definition at line 76 of file initHooks.c.

77 {
78  initHookLink *hook;
79 
80  initHookInit();
81 
82  epicsMutexMustLock(listLock);
83  hook = (initHookLink *)ellFirst(&functionList);
84  epicsMutexUnlock(listLock);
85 
86  while (hook != NULL) {
87  hook->func(state);
88 
89  epicsMutexMustLock(listLock);
90  hook = (initHookLink *)ellNext(&hook->node);
91  epicsMutexUnlock(listLock);
92  }
93 }
#define NULL
Definition: catime.c:38
void epicsStdCall epicsMutexUnlock(epicsMutexId pmutexNode)
Release the semaphore.
Definition: epicsMutex.cpp:140
#define ellNext(PNODE)
Find the next node in list.
Definition: ellLib.h:99
#define epicsMutexMustLock(ID)
Claim a semaphore (see epicsMutexLock()).
Definition: epicsMutex.h:214
#define ellFirst(PLIST)
Find the first node in list.
Definition: ellLib.h:89
LIBCOM_API void initHookFree ( void  )

Definition at line 95 of file initHooks.c.

96 {
97  initHookInit();
98  epicsMutexMustLock(listLock);
99  ellFree(&functionList);
100  epicsMutexUnlock(listLock);
101 }
void epicsStdCall epicsMutexUnlock(epicsMutexId pmutexNode)
Release the semaphore.
Definition: epicsMutex.cpp:140
#define ellFree(PLIST)
Free up the list.
Definition: ellLib.h:108
#define epicsMutexMustLock(ID)
Claim a semaphore (see epicsMutexLock()).
Definition: epicsMutex.h:214
LIBCOM_API const char* initHookName ( int  state)

Definition at line 106 of file initHooks.c.

107 {
108  const char *stateName[] = {
109  "initHookAtIocBuild",
110  "initHookAtBeginning",
111  "initHookAfterCallbackInit",
112  "initHookAfterCaLinkInit",
113  "initHookAfterInitDrvSup",
114  "initHookAfterInitRecSup",
115  "initHookAfterInitDevSup",
116  "initHookAfterInitDatabase",
117  "initHookAfterFinishDevSup",
118  "initHookAfterScanInit",
119  "initHookAfterInitialProcess",
120  "initHookAfterCaServerInit",
121  "initHookAfterIocBuilt",
122  "initHookAtIocRun",
123  "initHookAfterDatabaseRunning",
124  "initHookAfterCaServerRunning",
125  "initHookAfterIocRunning",
126  "initHookAtIocPause",
127  "initHookAfterCaServerPaused",
128  "initHookAfterDatabasePaused",
129  "initHookAfterIocPaused",
130  "initHookAfterInterruptAccept",
131  "initHookAtEnd"
132  };
133  if (state < 0 || state >= NELEMENTS(stateName)) {
134  return "Not an initHookState";
135  }
136  return stateName[state];
137 }
#define NELEMENTS(A)
Definition: aToIPAddr.c:21
LIBCOM_API int initHookRegister ( initHookFunction  func)

Definition at line 51 of file initHooks.c.

52 {
53  initHookLink *newHook;
54 
55  if (!func) return 0;
56 
57  initHookInit();
58 
59  newHook = (initHookLink *)malloc(sizeof(initHookLink));
60  if (!newHook) {
61  printf("Cannot malloc a new initHookLink\n");
62  return -1;
63  }
64  newHook->func = func;
65 
66  epicsMutexMustLock(listLock);
67  ellAdd(&functionList, &newHook->node);
68  epicsMutexUnlock(listLock);
69  return 0;
70 }
#define printf
Definition: epicsStdio.h:41
void epicsStdCall epicsMutexUnlock(epicsMutexId pmutexNode)
Release the semaphore.
Definition: epicsMutex.cpp:140
void ellAdd(ELLLIST *pList, ELLNODE *pNode)
Adds a node to the end of a list.
Definition: ellLib.c:24
#define epicsMutexMustLock(ID)
Claim a semaphore (see epicsMutexLock()).
Definition: epicsMutex.h:214