This is Unofficial EPICS BASE Doxygen Site
registryCommon.c
Go to the documentation of this file.
1 /*************************************************************************\
2 * Copyright (c) 2007 UChicago Argonne LLC, as Operator of Argonne
3 * National Laboratory.
4 * Copyright (c) 2002 The Regents of the University of California, as
5 * Operator of Los Alamos National Laboratory.
6 * EPICS BASE is distributed subject to a Software License Agreement found
7 * in file LICENSE that is included with this distribution.
8 \*************************************************************************/
9 
10 /* registryCommon.c */
11 
12 /* Author: Andrew Johnson
13  * Date: 2004-03-19
14  */
15 
16 #include "errlog.h"
17 
18 #define epicsExportSharedSymbols
19 #include "registryCommon.h"
20 #include "registryDeviceSupport.h"
21 #include "registryDriverSupport.h"
22 #include "registryJLinks.h"
23 
24 
25 void registerRecordTypes(DBBASE *pbase, int nRecordTypes,
26  const char * const *recordTypeNames, const recordTypeLocation *rtl)
27 {
28  int i;
29  for (i = 0; i < nRecordTypes; i++) {
30  recordTypeLocation *precordTypeLocation;
31  computeSizeOffset sizeOffset;
33 
34  if (registryRecordTypeFind(recordTypeNames[i])) continue;
35  if (!registryRecordTypeAdd(recordTypeNames[i], &rtl[i])) {
36  errlogPrintf("registryRecordTypeAdd failed %s\n",
37  recordTypeNames[i]);
38  continue;
39  }
40  dbInitEntry(pbase,&dbEntry);
41  precordTypeLocation = registryRecordTypeFind(recordTypeNames[i]);
42  sizeOffset = precordTypeLocation->sizeOffset;
43  if (dbFindRecordType(&dbEntry, recordTypeNames[i])) {
44  errlogPrintf("registerRecordDeviceDriver failed %s\n",
45  recordTypeNames[i]);
46  } else {
47  sizeOffset(dbEntry.precordType);
48  }
49  dbFinishEntry(&dbEntry);
50  }
51 }
52 
53 void registerDevices(DBBASE *pbase, int nDevices,
54  const char * const *deviceSupportNames, const dset * const *devsl)
55 {
56  int i;
57  for (i = 0; i < nDevices; i++) {
58  if (registryDeviceSupportFind(deviceSupportNames[i])) continue;
59  if (!registryDeviceSupportAdd(deviceSupportNames[i], devsl[i])) {
60  errlogPrintf("registryDeviceSupportAdd failed %s\n",
61  deviceSupportNames[i]);
62  continue;
63  }
64  }
65 }
66 
67 void registerDrivers(DBBASE *pbase, int nDrivers,
68  const char * const * driverSupportNames, struct drvet * const *drvsl)
69 {
70  int i;
71  for (i = 0; i < nDrivers; i++) {
72  if (registryDriverSupportFind(driverSupportNames[i])) continue;
73  if (!registryDriverSupportAdd(driverSupportNames[i], drvsl[i])) {
74  errlogPrintf("registryDriverSupportAdd failed %s\n",
75  driverSupportNames[i]);
76  continue;
77  }
78  }
79 }
80 
81 void registerJLinks(DBBASE *pbase, int nLinks, jlif * const *jlifsl)
82 {
83  int i;
84  for (i = 0; i < nLinks; i++) {
85  if (!registryJLinkAdd(pbase, jlifsl[i])) {
86  errlogPrintf("registryJLinkAdd failed %s\n",
87  jlifsl[i]->name);
88  continue;
89  }
90  }
91 }
92 
void dbInitEntry(dbBase *pdbbase, DBENTRY *pdbentry)
Definition: dbStaticLib.c:626
int(* computeSizeOffset)(struct dbRecordType *pdbRecordType)
dbRecordType * precordType
Definition: dbStaticLib.h:35
int i
Definition: scan.c:967
epicsShareFunc int registryRecordTypeAdd(const char *name, const recordTypeLocation *prtl)
long dbFindRecordType(DBENTRY *pdbentry, const char *recordType)
Definition: dbStaticLib.c:1186
void dbFinishEntry(DBENTRY *pdbentry)
Definition: dbStaticLib.c:632
void registerDevices(DBBASE *pbase, int nDevices, const char *const *deviceSupportNames, const dset *const *devsl)
Definition: drvSup.h:45
epicsShareFunc struct drvet * registryDriverSupportFind(const char *name)
Definition: devSup.h:140
void registerJLinks(DBBASE *pbase, int nLinks, jlif *const *jlifsl)
epicsShareFunc recordTypeLocation * registryRecordTypeFind(const char *name)
int errlogPrintf(const char *pFormat,...)
Definition: errlog.c:105
epicsShareFunc int registryDeviceSupportAdd(const char *name, const dset *pdset)
epicsShareFunc int registryDriverSupportAdd(const char *name, struct drvet *pdrvet)
Definition: dbBase.h:170
void registerRecordTypes(DBBASE *pbase, int nRecordTypes, const char *const *recordTypeNames, const recordTypeLocation *rtl)
computeSizeOffset sizeOffset
void registerDrivers(DBBASE *pbase, int nDrivers, const char *const *driverSupportNames, struct drvet *const *drvsl)
epicsShareFunc dset * registryDeviceSupportFind(const char *name)