This is Unofficial EPICS BASE Doxygen Site
iocInit.c File Reference
#include <stddef.h>
#include <stdlib.h>
#include <stdarg.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <limits.h>
#include "dbDefs.h"
#include "ellLib.h"
#include "envDefs.h"
#include "epicsExit.h"
#include "epicsGeneralTime.h"
#include "epicsPrint.h"
#include "epicsSignal.h"
#include "epicsThread.h"
#include "errMdef.h"
#include "iocsh.h"
#include "taskwd.h"
#include "caeventmask.h"
#include "epicsExport.h"
#include "alarm.h"
#include "asDbLib.h"
#include "callback.h"
#include "dbAccess.h"
#include "db_access_routines.h"
#include "dbAddr.h"
#include "dbBase.h"
#include "dbBkpt.h"
#include "dbCa.h"
#include "dbChannel.h"
#include "dbCommon.h"
#include "dbFldTypes.h"
#include "dbLock.h"
#include "dbNotify.h"
#include "dbScan.h"
#include "dbServer.h"
#include "dbStaticLib.h"
#include "dbStaticPvt.h"
#include "devSup.h"
#include "drvSup.h"
#include "epicsRelease.h"
#include "initHooks.h"
#include "iocInit.h"
#include "link.h"
#include "menuConvert.h"
#include "menuPini.h"
#include "recGbl.h"
#include "recSup.h"
#include "registryDeviceSupport.h"
#include "registryDriverSupport.h"
#include "registryJLinks.h"
#include "registryRecordType.h"
+ Include dependency graph for iocInit.c:

Go to the source code of this file.

Classes

struct  phaseData_t
 

Typedefs

typedef void(* recIterFunc) (dbRecordType *rtyp, dbCommon *prec, void *user)
 

Enumerations

enum  { buildServers, buildIsolated }
 

Functions

 epicsExportAddress (int, dbThreadRealtimeLock)
 
enum iocStateEnum getIocState (void)
 
int iocInit (void)
 
int iocBuild (void)
 
int iocBuildIsolated (void)
 
int iocRun (void)
 
int iocPause (void)
 
int iocShutdown (void)
 

Variables

int dbThreadRealtimeLock = 1
 

Typedef Documentation

typedef void(* recIterFunc) (dbRecordType *rtyp, dbCommon *prec, void *user)

Definition at line 93 of file iocInit.c.

Enumeration Type Documentation

anonymous enum
Enumerator
buildServers 
buildIsolated 

Definition at line 74 of file iocInit.c.

74  {
76 } iocBuildMode;

Function Documentation

epicsExportAddress ( int  ,
dbThreadRealtimeLock   
)
enum iocStateEnum getIocState ( void  )

Definition at line 100 of file iocInit.c.

101 {
102  return iocState;
103 }
int iocBuild ( void  )

Definition at line 196 of file iocInit.c.

197 {
198  int status;
199 
200  status = iocBuild_1();
201  if (status) return status;
202 
203  dbCaLinkInit();
204 
205  status = iocBuild_2();
206  if (status) return status;
207 
208  dbInitServers();
209 
210  status = iocBuild_3();
211 
214 
215  if (!status) iocBuildMode = buildServers;
216  return status;
217 }
pvd::Status status
LIBCOM_API void epicsThreadRealtimeLock(void)
Definition: osdThread.c:425
int dbThreadRealtimeLock
Definition: iocInit.c:97
int iocBuildIsolated ( void  )

Definition at line 219 of file iocInit.c.

220 {
221  int status;
222 
223  status = iocBuild_1();
224  if (status) return status;
225 
226  dbCaLinkInitIsolated();
227 
228  status = iocBuild_2();
229  if (status) return status;
230 
231  status = iocBuild_3();
232  if (!status) iocBuildMode = buildIsolated;
233  return status;
234 }
pvd::Status status
int iocInit ( void  )

Definition at line 108 of file iocInit.c.

109 {
110  return iocBuild() || iocRun();
111 }
int iocBuild(void)
Definition: iocInit.c:196
int iocRun(void)
Definition: iocInit.c:236
int iocPause ( void  )

Definition at line 267 of file iocInit.c.

268 {
269  if (iocState != iocRunning) {
270  errlogPrintf("iocPause: IOC not running\n");
271  return -1;
272  }
274 
275  if (iocBuildMode == buildServers) {
276  dbPauseServers();
278  }
279 
280  dbCaPause();
281  scanPause();
283 
284  iocState = iocPaused;
285  errlogPrintf("iocPause: IOC suspended\n");
287  return 0;
288 }
void initHookAnnounce(initHookState state)
Definition: initHooks.c:76
int errlogPrintf(const char *pFormat,...)
Definition: errlog.c:105
int iocRun ( void  )

Definition at line 236 of file iocInit.c.

237 {
238  if (iocState != iocPaused && iocState != iocBuilt) {
239  errlogPrintf("iocRun: IOC not paused\n");
240  return -1;
241  }
243 
244  /* Enable scan tasks and some driver support functions. */
245  scanRun();
246  dbCaRun();
248  if (iocState == iocBuilt)
250 
251  if (iocBuildMode == buildServers) {
252  dbRunServers();
254  }
255 
256  if (iocState == iocBuilt)
258 
259  errlogPrintf("iocRun: %s\n", iocState == iocBuilt ?
260  "All initialization complete" :
261  "IOC restarted");
262  iocState = iocRunning;
264  return 0;
265 }
void initHookAnnounce(initHookState state)
Definition: initHooks.c:76
int errlogPrintf(const char *pFormat,...)
Definition: errlog.c:105
int iocShutdown ( void  )

Definition at line 709 of file iocInit.c.

710 {
711  if (iocState == iocVoid) return 0;
712 
714 
715  iterateRecords(doCloseLinks, NULL);
717 
718  if (iocBuildMode == buildIsolated) {
719  /* stop and "join" threads */
720  scanStop();
722  callbackStop();
724  } else {
725  dbStopServers();
726  }
727 
728  dbCaShutdown(); /* must be before dbFreeRecord and dbChannelExit */
730 
731  if (iocBuildMode == buildIsolated) {
732  /* free resources */
734  scanCleanup();
735  callbackCleanup();
736 
737  iterateRecords(doFreeRecord, NULL);
738  dbLockCleanupRecords(pdbbase);
739 
740  asShutdown();
741  dbChannelExit();
742  dbProcessNotifyExit();
743  iocshFree();
744  }
745 
746  iocState = iocVoid;
747  iocBuildMode = buildServers;
748 
750  return 0;
751 }
void initHookAnnounce(initHookState state)
Definition: initHooks.c:76
#define NULL
Definition: catime.c:38
void epicsStdCall iocshFree(void)
Definition: iocsh.cpp:231
int asShutdown(void)
Definition: asDbLib.c:157

Variable Documentation

int dbThreadRealtimeLock = 1

Definition at line 97 of file iocInit.c.