Merge branch 'epics-base:7.0' into add-simm-to-ao-records

This commit is contained in:
Evan Daykin
2021-06-09 10:19:01 -04:00
334 changed files with 5850 additions and 2557 deletions
-1
View File
@@ -33,7 +33,6 @@
#include "caerr.h"
#include "caeventmask.h"
#define epicsExportSharedSymbols
#include "asCa.h"
#include "asDbLib.h"
#include "callback.h"
+6 -6
View File
@@ -14,17 +14,17 @@
#include <stdio.h>
#include "shareLib.h"
#include "dbCoreAPI.h"
#ifdef __cplusplus
extern "C" {
#endif
epicsShareFunc void asCaStart(void);
epicsShareFunc void asCaStop(void);
epicsShareFunc int ascar(int level);
epicsShareFunc int ascarFP(FILE *fp, int level);
epicsShareFunc void ascaStats(int *pchans, int *pdiscon);
DBCORE_API void asCaStart(void);
DBCORE_API void asCaStop(void);
DBCORE_API int ascar(int level);
DBCORE_API int ascarFP(FILE *fp, int level);
DBCORE_API void ascaStats(int *pchans, int *pdiscon);
#ifdef __cplusplus
}
-1
View File
@@ -25,7 +25,6 @@
#include "caeventmask.h"
#define epicsExportSharedSymbols
#include "asCa.h"
#include "asDbLib.h"
#include "callback.h"
+19 -19
View File
@@ -15,7 +15,7 @@
#include <stdio.h>
#include "callback.h"
#include "shareLib.h"
#include "dbCoreAPI.h"
typedef struct {
epicsCallback callback;
@@ -28,25 +28,25 @@ struct dbChannel;
extern "C" {
#endif
epicsShareFunc int asSetFilename(const char *acf);
epicsShareFunc int asSetSubstitutions(const char *substitutions);
epicsShareFunc int asInit(void);
epicsShareFunc int asInitAsyn(ASDBCALLBACK *pcallback);
epicsShareFunc int asShutdown(void);
epicsShareFunc int asDbGetAsl(struct dbChannel *chan);
epicsShareFunc void * asDbGetMemberPvt(struct dbChannel *chan);
epicsShareFunc int asdbdump(void);
epicsShareFunc int asdbdumpFP(FILE *fp);
epicsShareFunc int aspuag(const char *uagname);
epicsShareFunc int aspuagFP(FILE *fp,const char *uagname);
epicsShareFunc int asphag(const char *hagname);
epicsShareFunc int asphagFP(FILE *fp,const char *hagname);
epicsShareFunc int asprules(const char *asgname);
epicsShareFunc int asprulesFP(FILE *fp,const char *asgname);
epicsShareFunc int aspmem(const char *asgname,int clients);
epicsShareFunc int aspmemFP(
DBCORE_API int asSetFilename(const char *acf);
DBCORE_API int asSetSubstitutions(const char *substitutions);
DBCORE_API int asInit(void);
DBCORE_API int asInitAsyn(ASDBCALLBACK *pcallback);
DBCORE_API int asShutdown(void);
DBCORE_API int asDbGetAsl(struct dbChannel *chan);
DBCORE_API void * asDbGetMemberPvt(struct dbChannel *chan);
DBCORE_API int asdbdump(void);
DBCORE_API int asdbdumpFP(FILE *fp);
DBCORE_API int aspuag(const char *uagname);
DBCORE_API int aspuagFP(FILE *fp,const char *uagname);
DBCORE_API int asphag(const char *hagname);
DBCORE_API int asphagFP(FILE *fp,const char *hagname);
DBCORE_API int asprules(const char *asgname);
DBCORE_API int asprulesFP(FILE *fp,const char *asgname);
DBCORE_API int aspmem(const char *asgname,int clients);
DBCORE_API int aspmemFP(
FILE *fp,const char *asgname,int clients);
epicsShareFunc int astac(
DBCORE_API int astac(
const char *recordname,const char *user,const char *location);
#ifdef __cplusplus
+3 -2
View File
@@ -11,7 +11,6 @@
#include "asLib.h"
#include "iocsh.h"
#define epicsExportSharedSymbols
#include "asCa.h"
#include "asDbLib.h"
#include "asIocRegister.h"
@@ -120,7 +119,9 @@ static void ascarCallFunc(const iocshArgBuf *args)
}
/* asDumpHash */
static const iocshFuncDef asDumpHashFuncDef = {"asDumpHash",0,0};
static const iocshFuncDef asDumpHashFuncDef = {"asDumpHash",0,0,
"Show the contents of the hash table used "
"to locate UAGs and HAGs.\n"};
static void asDumpHashCallFunc(const iocshArgBuf *args)
{
asDumpHash();
+2 -2
View File
@@ -11,13 +11,13 @@
#ifndef INC_asIocRegister_H
#define INC_asIocRegister_H
#include "shareLib.h"
#include "dbCoreAPI.h"
#ifdef __cplusplus
extern "C" {
#endif
epicsShareFunc void asIocRegister(void);
DBCORE_API void asIocRegister(void);
#ifdef __cplusplus
}
+3
View File
@@ -19,7 +19,10 @@ BPT_DBD += bptTypeJdegC.dbd
BPT_DBD += bptTypeJdegF.dbd
BPT_DBD += bptTypeKdegC.dbd
BPT_DBD += bptTypeKdegF.dbd
ifneq (inc,$(strip $(MAKECMDGOALS)))
DBD += $(BPT_DBD)
endif
PROD_HOST += makeBpt
+3 -3
View File
@@ -17,17 +17,17 @@
#ifndef INCcvtTableh
#define INCcvtTableh 1
#include "shareLib.h"
#include "dbCoreAPI.h"
#ifdef __cplusplus
extern "C" {
#endif
/* Global Routines*/
epicsShareFunc long cvtEngToRawBpt(
DBCORE_API long cvtEngToRawBpt(
double *pval,short linr,short init,void **ppbrk,short *plbrk);
epicsShareFunc long cvtRawToEngBpt(
DBCORE_API long cvtRawToEngBpt(
double *pval,short linr,short init,void **ppbrk, short *plbrk);
#ifdef __cplusplus
-1
View File
@@ -34,7 +34,6 @@
#include "errMdef.h"
#include "taskwd.h"
#define epicsExportSharedSymbols
#include "callback.h"
#include "dbAccessDefs.h"
#include "dbAddr.h"
+14 -14
View File
@@ -18,7 +18,7 @@
#ifndef INCcallbackh
#define INCcallbackh 1
#include "shareLib.h"
#include "dbCoreAPI.h"
#ifdef __cplusplus
extern "C" {
@@ -69,23 +69,23 @@ typedef struct callbackQueueStats {
#define callbackGetUser(USER, PCALLBACK) \
( (USER) = (PCALLBACK)->user )
epicsShareFunc void callbackInit(void);
epicsShareFunc void callbackStop(void);
epicsShareFunc void callbackCleanup(void);
epicsShareFunc int callbackRequest(epicsCallback *pCallback);
epicsShareFunc void callbackSetProcess(
DBCORE_API void callbackInit(void);
DBCORE_API void callbackStop(void);
DBCORE_API void callbackCleanup(void);
DBCORE_API int callbackRequest(epicsCallback *pCallback);
DBCORE_API void callbackSetProcess(
epicsCallback *pcallback, int Priority, void *pRec);
epicsShareFunc int callbackRequestProcessCallback(
DBCORE_API int callbackRequestProcessCallback(
epicsCallback *pCallback,int Priority, void *pRec);
epicsShareFunc void callbackRequestDelayed(
DBCORE_API void callbackRequestDelayed(
epicsCallback *pCallback,double seconds);
epicsShareFunc void callbackCancelDelayed(epicsCallback *pcallback);
epicsShareFunc void callbackRequestProcessCallbackDelayed(
DBCORE_API void callbackCancelDelayed(epicsCallback *pcallback);
DBCORE_API void callbackRequestProcessCallbackDelayed(
epicsCallback *pCallback, int Priority, void *pRec, double seconds);
epicsShareFunc int callbackSetQueueSize(int size);
epicsShareFunc int callbackQueueStatus(const int reset, callbackQueueStats *result);
epicsShareFunc void callbackQueueShow(const int reset);
epicsShareFunc int callbackParallelThreads(int count, const char *prio);
DBCORE_API int callbackSetQueueSize(int size);
DBCORE_API int callbackQueueStatus(const int reset, callbackQueueStats *result);
DBCORE_API void callbackQueueShow(const int reset);
DBCORE_API int callbackParallelThreads(int count, const char *prio);
#ifdef __cplusplus
}
-1
View File
@@ -27,7 +27,6 @@
#include "epicsTypes.h"
#include "errlog.h"
#define epicsExportSharedSymbols
#include "chfPlugin.h"
#include "dbStaticLib.h"
+3 -3
View File
@@ -17,7 +17,7 @@
#ifndef CHFPLUGIN_H
#define CHFPLUGIN_H
#include <shareLib.h>
#include <dbCoreAPI.h>
#include <dbDefs.h>
#include <epicsTypes.h>
#include <dbChannel.h>
@@ -302,7 +302,7 @@ typedef struct chfPluginArgDef {
* @param def String to be returned when 'i' isn't a valid Enum index.
* @return The string associated with 'i'.
*/
epicsShareFunc const char* chfPluginEnumString(const chfPluginEnumType *Enums, int i, const char* def);
DBCORE_API const char* chfPluginEnumString(const chfPluginEnumType *Enums, int i, const char* def);
/** @brief Register a plugin.
*
@@ -310,7 +310,7 @@ epicsShareFunc const char* chfPluginEnumString(const chfPluginEnumType *Enums, i
* @param pif Pointer to the plugin's interface.
* @param opts Pointer to the configuration argument description table.
*/
epicsShareFunc int chfPluginRegister(const char* key, const chfPluginIf *pif, const chfPluginArgDef* opts);
DBCORE_API int chfPluginRegister(const char* key, const chfPluginIf *pif, const chfPluginArgDef* opts);
#ifdef __cplusplus
}
-1
View File
@@ -17,7 +17,6 @@
#include "epicsPrint.h"
#define epicsExportSharedSymbols
#include "cvtTable.h"
#include "dbAccess.h"
#include "dbBase.h"
+23 -3
View File
@@ -35,7 +35,6 @@
#include "errlog.h"
#include "errMdef.h"
#include "epicsExport.h" /* #define epicsExportSharedSymbols */
#include "caeventmask.h"
#include "callback.h"
#include "dbAccessDefs.h"
@@ -62,6 +61,7 @@
#include "recGbl.h"
#include "recSup.h"
#include "special.h"
#include "epicsExport.h"
struct dbBase *pdbbase = 0;
volatile int interruptAccept=FALSE;
@@ -360,6 +360,16 @@ static void getOptions(DBADDR *paddr, char **poriginal, long *options,
*pushort++ = pcommon->ackt;
pbuffer = (char *)pushort;
}
if( (*options) & DBR_AMSG ) {
if (!pfl) {
STATIC_ASSERT(sizeof(pcommon->amsg)==sizeof(pfl->amsg));
strncpy(pbuffer, pcommon->amsg, sizeof(pcommon->amsg)-1);
} else {
strncpy(pbuffer, pfl->amsg,sizeof(pfl->amsg)-1);
}
pbuffer[sizeof(pcommon->amsg)-1] = '\0';
pbuffer += sizeof(pcommon->amsg);
}
if( (*options) & DBR_UNITS ) {
memset(pbuffer,'\0',dbr_units_size);
if( prset && prset->get_units ){
@@ -392,6 +402,15 @@ static void getOptions(DBADDR *paddr, char **poriginal, long *options,
}
pbuffer = (char *)ptime;
}
if( (*options) & DBR_UTAG ) {
epicsUInt64 *ptag = (epicsUInt64*)pbuffer;
if (!pfl) {
*ptag++ = pcommon->utag;
} else {
*ptag++ = pfl->utag;
}
pbuffer = (char *)ptag;
}
if( (*options) & DBR_ENUM_STRS )
get_enum_strs(paddr, &pbuffer, prset, options);
if( (*options) & (DBR_GR_LONG|DBR_GR_DOUBLE ))
@@ -523,7 +542,7 @@ long dbProcess(dbCommon *precord)
(precord->lcnt++ < MAX_LOCK) ||
(precord->sevr >= INVALID_ALARM)) goto all_done;
recGblSetSevr(precord, SCAN_ALARM, INVALID_ALARM);
recGblSetSevrMsg(precord, SCAN_ALARM, INVALID_ALARM, "Async in progress");
monitor_mask = recGblResetAlarms(precord);
monitor_mask |= DBE_VALUE|DBE_LOG;
pdbFldDes = pdbRecordType->papFldDes[pdbRecordType->indvalFlddes];
@@ -1357,7 +1376,8 @@ long dbPut(DBADDR *paddr, short dbrType,
/* Always do special processing if needed */
if (special) {
long status2 = dbPutSpecial(paddr, 1);
if (status2) goto done;
if (status2)
status = status2;
}
if (status) goto done;
+1 -1
View File
@@ -18,7 +18,7 @@
#include "dbFldTypes.h"
#include "link.h"
#include "dbBase.h"
#include "shareLib.h"
#include "dbCoreAPI.h"
#include "dbAddr.h"
#include "dbLock.h"
#include "dbAccessDefs.h"
+45 -46
View File
@@ -12,18 +12,10 @@
#ifndef INCdbAccessDefsh
#define INCdbAccessDefsh
#ifdef epicsExportSharedSymbols
# define INCLdb_accessh_epicsExportSharedSymbols
# undef epicsExportSharedSymbols
#endif
#include "epicsTypes.h"
#include "epicsTime.h"
#ifdef INCLdb_accessh_epicsExportSharedSymbols
# define epicsExportSharedSymbols
# include "shareLib.h"
#endif
#include "dbCoreAPI.h"
#include "dbBase.h"
#include "dbAddr.h"
@@ -34,23 +26,25 @@ extern "C" {
#endif
epicsShareExtern struct dbBase *pdbbase;
epicsShareExtern volatile int interruptAccept;
epicsShareExtern int dbAccessDebugPUTF;
DBCORE_API extern struct dbBase *pdbbase;
DBCORE_API extern volatile int interruptAccept;
DBCORE_API extern int dbAccessDebugPUTF;
/* The database field and request types are defined in dbFldTypes.h*/
/* Data Base Request Options */
#define DBR_STATUS 0x00000001
#define DBR_UNITS 0x00000002
#define DBR_PRECISION 0x00000004
#define DBR_TIME 0x00000008
#define DBR_ENUM_STRS 0x00000010
#define DBR_GR_LONG 0x00000020
#define DBR_GR_DOUBLE 0x00000040
#define DBR_CTRL_LONG 0x00000080
#define DBR_CTRL_DOUBLE 0x00000100
#define DBR_AL_LONG 0x00000200
#define DBR_AL_DOUBLE 0x00000400
#define DBR_AMSG 0x00000002
#define DBR_UNITS 0x00000004
#define DBR_PRECISION 0x00000008
#define DBR_TIME 0x00000010
#define DBR_UTAG 0x00000020
#define DBR_ENUM_STRS 0x00000040
#define DBR_GR_LONG 0x00000080
#define DBR_GR_DOUBLE 0x00000100
#define DBR_CTRL_LONG 0x00000200
#define DBR_CTRL_DOUBLE 0x00000400
#define DBR_AL_LONG 0x00000800
#define DBR_AL_DOUBLE 0x00001000
/**********************************************************************
* The next page contains macros for defining requests.
@@ -108,6 +102,9 @@ epicsShareExtern int dbAccessDebugPUTF;
epicsUInt16 severity; /* alarm severity*/\
epicsUInt16 acks; /* alarm ack severity*/\
epicsUInt16 ackt; /* Acknowledge transient alarms?*/
#define DB_AMSG_SIZE 40
#define DBRamsg \
char amsg[DB_AMSG_SIZE];
#define DB_UNITS_SIZE 16
#define DBRunits \
char units[DB_UNITS_SIZE]; /* units */
@@ -120,7 +117,9 @@ epicsShareExtern int dbAccessDebugPUTF;
* too late to change now. DBRprecision must be padded to
* maintain 8-byte alignment. */
#define DBRtime \
epicsTimeStamp time; /* time stamp*/
epicsTimeStamp time; /* time stamp*/
#define DBRutag \
epicsUTag utag;
#define DBRenumStrs \
epicsUInt32 no_str; /* number of strings*/\
epicsInt32 padenumStrs; /*padding to force 8 byte align*/\
@@ -207,67 +206,67 @@ struct dbr_alDouble {DBRalDouble};
struct dbEntry;
epicsShareFunc long dbPutSpecial(struct dbAddr *paddr,int pass);
epicsShareFunc rset * dbGetRset(const struct dbAddr *paddr);
epicsShareFunc long dbPutAttribute(
DBCORE_API long dbPutSpecial(struct dbAddr *paddr,int pass);
DBCORE_API rset * dbGetRset(const struct dbAddr *paddr);
DBCORE_API long dbPutAttribute(
const char *recordTypename,const char *name,const char*value);
epicsShareFunc int dbIsValueField(const struct dbFldDes *pdbFldDes);
epicsShareFunc int dbGetFieldIndex(const struct dbAddr *paddr);
epicsShareFunc long dbScanPassive(
DBCORE_API int dbIsValueField(const struct dbFldDes *pdbFldDes);
DBCORE_API int dbGetFieldIndex(const struct dbAddr *paddr);
DBCORE_API long dbScanPassive(
struct dbCommon *pfrom,struct dbCommon *pto);
epicsShareFunc long dbProcess(struct dbCommon *precord);
epicsShareFunc long dbNameToAddr(const char *pname, struct dbAddr *paddr);
DBCORE_API long dbProcess(struct dbCommon *precord);
DBCORE_API long dbNameToAddr(const char *pname, struct dbAddr *paddr);
/** Initialize DBADDR from a dbEntry
* Also handles SPC_DBADDR processing. This is really an internal
* routine for use by dbNameToAddr() and dbChannelCreate().
*/
epicsShareFunc long dbEntryToAddr(const struct dbEntry *pdbentry,
DBCORE_API long dbEntryToAddr(const struct dbEntry *pdbentry,
struct dbAddr *paddr);
/** Initialize DBENTRY from a valid dbAddr*
* Constant time equivalent of dbInitEntry() then dbFindRecord(),
* and finally dbFollowAlias().
*/
epicsShareFunc void dbInitEntryFromAddr(struct dbAddr *paddr,
DBCORE_API void dbInitEntryFromAddr(struct dbAddr *paddr,
struct dbEntry *pdbentry);
/** Initialize DBENTRY from a valid record (dbCommon*)
* Constant time equivalent of dbInitEntry() then dbFindRecord(),
* and finally dbFollowAlias() when no field is specified.
*/
epicsShareFunc void dbInitEntryFromRecord(struct dbCommon *prec,
DBCORE_API void dbInitEntryFromRecord(struct dbCommon *prec,
struct dbEntry *pdbentry);
epicsShareFunc devSup* dbDTYPtoDevSup(dbRecordType *prdes, int dtyp);
epicsShareFunc devSup* dbDSETtoDevSup(dbRecordType *prdes, dset *pdset);
epicsShareFunc long dbGetField(
DBCORE_API devSup* dbDTYPtoDevSup(dbRecordType *prdes, int dtyp);
DBCORE_API devSup* dbDSETtoDevSup(dbRecordType *prdes, dset *pdset);
DBCORE_API long dbGetField(
struct dbAddr *,short dbrType,void *pbuffer,long *options,
long *nRequest,void *pfl);
epicsShareFunc long dbGet(
DBCORE_API long dbGet(
struct dbAddr *,short dbrType,void *pbuffer,long *options,
long *nRequest,void *pfl);
epicsShareFunc long dbPutField(
DBCORE_API long dbPutField(
struct dbAddr *,short dbrType,const void *pbuffer,long nRequest);
epicsShareFunc long dbPut(
DBCORE_API long dbPut(
struct dbAddr *,short dbrType,const void *pbuffer,long nRequest);
typedef void(*SPC_ASCALLBACK)(struct dbCommon *);
/*dbSpcAsRegisterCallback called by access security */
epicsShareFunc void dbSpcAsRegisterCallback(SPC_ASCALLBACK func);
epicsShareFunc long dbBufferSize(
DBCORE_API void dbSpcAsRegisterCallback(SPC_ASCALLBACK func);
DBCORE_API long dbBufferSize(
short dbrType,long options,long nRequest);
epicsShareFunc long dbValueSize(short dbrType);
DBCORE_API long dbValueSize(short dbrType);
/* Hook Routine */
typedef void (*DB_LOAD_RECORDS_HOOK_ROUTINE)(const char* filename,
const char* substitutions);
epicsShareExtern DB_LOAD_RECORDS_HOOK_ROUTINE dbLoadRecordsHook;
DBCORE_API extern DB_LOAD_RECORDS_HOOK_ROUTINE dbLoadRecordsHook;
epicsShareFunc int dbLoadDatabase(
DBCORE_API int dbLoadDatabase(
const char *filename, const char *path, const char *substitutions);
epicsShareFunc int dbLoadRecords(
DBCORE_API int dbLoadRecords(
const char* filename, const char* substitutions);
#ifdef __cplusplus
-1
View File
@@ -53,7 +53,6 @@
#include "errlog.h"
#include "errMdef.h"
#define epicsExportSharedSymbols
#include "dbAccessDefs.h"
#include "dbAddr.h"
#include "dbBase.h"
+12 -12
View File
@@ -20,7 +20,7 @@
#include "epicsEvent.h"
#include "epicsThread.h"
#include "epicsTime.h"
#include "shareLib.h"
#include "dbCoreAPI.h"
#ifdef __cplusplus
extern "C" {
#endif
@@ -81,18 +81,18 @@ struct LS_LIST {
#define MAX_EP_COUNT 99999
epicsShareFunc void dbBkptInit(void);
epicsShareFunc long dbb(const char *recordname);
epicsShareFunc long dbd(const char *recordname);
epicsShareFunc long dbc(const char *recordname);
epicsShareFunc long dbs(const char *recordname);
epicsShareFunc long dbstat(void);
epicsShareFunc long dbp(
DBCORE_API void dbBkptInit(void);
DBCORE_API long dbb(const char *recordname);
DBCORE_API long dbd(const char *recordname);
DBCORE_API long dbc(const char *recordname);
DBCORE_API long dbs(const char *recordname);
DBCORE_API long dbstat(void);
DBCORE_API long dbp(
const char *record_name, int interest_level);
epicsShareFunc long dbap(const char *record_name);
epicsShareFunc int dbBkpt(struct dbCommon *precord);
epicsShareFunc void dbPrint(struct dbCommon *precord);
epicsShareFunc long dbprc(char *record_name);
DBCORE_API long dbap(const char *record_name);
DBCORE_API int dbBkpt(struct dbCommon *precord);
DBCORE_API void dbPrint(struct dbCommon *precord);
DBCORE_API long dbprc(char *record_name);
extern long lset_stack_count;
+1 -9
View File
@@ -19,11 +19,6 @@
#ifndef dbCACh
#define dbCACh
#ifdef epicsExportSharedSymbols
# define dbCACh_restore_epicsExportSharedSymbols
# undef epicsExportSharedSymbols
#endif
#include "stdlib.h"
#include <memory> // std::auto_ptr
@@ -34,10 +29,7 @@
#include "cacIO.h"
#include "compilerDependencies.h"
#ifdef dbCACh_restore_epicsExportSharedSymbols
# define epicsExportSharedSymbols
# include "shareLib.h"
#endif
#include "dbCoreAPI.h"
#include "db_access.h"
#include "dbNotify.h"
+1 -2
View File
@@ -40,7 +40,6 @@
/* We can't include dbStaticLib.h here */
#define dbCalloc(nobj,size) callocMustSucceed(nobj,size,"dbCalloc")
#define epicsExportSharedSymbols
#include "db_access_routines.h"
#include "dbCa.h"
#include "dbCaPvt.h"
@@ -233,7 +232,7 @@ void dbCaSync(void)
epicsEventDestroy(wake);
}
epicsShareFunc unsigned long dbCaGetUpdateCount(struct link *plink)
DBCORE_API unsigned long dbCaGetUpdateCount(struct link *plink)
{
caLink *pca = (caLink *)plink->value.pv_link.pvt;
unsigned long ret;
+15 -15
View File
@@ -19,37 +19,37 @@ extern "C" {
#endif
typedef void (*dbCaCallback)(void *userPvt);
epicsShareFunc void dbCaCallbackProcess(void *usrPvt);
DBCORE_API void dbCaCallbackProcess(void *usrPvt);
epicsShareFunc void dbCaLinkInit(void); /* internal initialization for iocBuild() */
epicsShareFunc void dbCaLinkInitIsolated(void); /* internal initialization for iocBuildIsolated() */
epicsShareFunc void dbCaRun(void);
epicsShareFunc void dbCaPause(void);
epicsShareFunc void dbCaShutdown(void);
DBCORE_API void dbCaLinkInit(void); /* internal initialization for iocBuild() */
DBCORE_API void dbCaLinkInitIsolated(void); /* internal initialization for iocBuildIsolated() */
DBCORE_API void dbCaRun(void);
DBCORE_API void dbCaPause(void);
DBCORE_API void dbCaShutdown(void);
struct dbLocker;
epicsShareFunc void dbCaAddLinkCallback(struct link *plink,
DBCORE_API void dbCaAddLinkCallback(struct link *plink,
dbCaCallback connect, dbCaCallback monitor, void *userPvt);
epicsShareFunc long dbCaAddLink(struct dbLocker *locker, struct link *plink, short dbfType);
epicsShareFunc void dbCaRemoveLink(struct dbLocker *locker, struct link *plink);
DBCORE_API long dbCaAddLink(struct dbLocker *locker, struct link *plink, short dbfType);
DBCORE_API void dbCaRemoveLink(struct dbLocker *locker, struct link *plink);
epicsShareFunc long dbCaGetLink(struct link *plink,
DBCORE_API long dbCaGetLink(struct link *plink,
short dbrType, void *pbuffer, long *nRequest);
epicsShareFunc long dbCaGetAttributes(const struct link *plink,
DBCORE_API long dbCaGetAttributes(const struct link *plink,
dbCaCallback callback, void *userPvt);
epicsShareFunc long dbCaPutLinkCallback(struct link *plink,
DBCORE_API long dbCaPutLinkCallback(struct link *plink,
short dbrType, const void *pbuffer,long nRequest,
dbCaCallback callback, void *userPvt);
epicsShareFunc long dbCaPutLink(struct link *plink,short dbrType,
DBCORE_API long dbCaPutLink(struct link *plink,short dbrType,
const void *pbuffer,long nRequest);
extern struct ca_client_context * dbCaClientContext;
#ifdef EPICS_DBCA_PRIVATE_API
epicsShareFunc void dbCaSync(void);
epicsShareFunc unsigned long dbCaGetUpdateCount(struct link *plink);
DBCORE_API void dbCaSync(void);
DBCORE_API unsigned long dbCaGetUpdateCount(struct link *plink);
#endif
/* These macros are for backwards compatibility */
-3
View File
@@ -26,9 +26,7 @@
#include "epicsPrint.h"
#include "epicsStdio.h"
#define epicsExportSharedSymbols
#include "dbStaticLib.h"
#undef epicsExportSharedSymbols
/*definitions needed because of old vs new database access*/
#undef DBR_SHORT
#undef DBR_PUT_ACKT
@@ -42,7 +40,6 @@
/*define DB_CONVERT_GBLSOURCE because db_access.c does not include db_access.h*/
#define DB_CONVERT_GBLSOURCE
#define epicsExportSharedSymbols
#include "db_access.h"
#include "db_access_routines.h"
#include "dbCa.h"
+3 -3
View File
@@ -11,14 +11,14 @@
#ifndef INC_dbCaTest_H
#define INC_dbCaTest_H
#include "shareLib.h"
#include "dbCoreAPI.h"
#ifdef __cplusplus
extern "C" {
#endif
epicsShareFunc long dbcar(char *recordname,int level);
epicsShareFunc void dbcaStats(int *pchans, int *pdiscon);
DBCORE_API long dbcar(char *recordname,int level);
DBCORE_API void dbcaStats(int *pchans, int *pdiscon);
#ifdef __cplusplus
}
-1
View File
@@ -29,7 +29,6 @@
#include "gpHash.h"
#include "yajl_parse.h"
#define epicsExportSharedSymbols
#include "dbAccessDefs.h"
#include "dbBase.h"
#include "dbChannel.h"
@@ -25,7 +25,6 @@
#include "db_access.h"
#include "errlog.h"
#define epicsExportSharedSymbols
#include "db_access_routines.h"
#include "dbCAC.h"
#include "dbChannelIO.h"
@@ -20,17 +20,8 @@
#ifndef dbChannelIOh
#define dbChannelIOh
#ifdef epicsExportSharedSymbols
# define dbChannelIOh_restore_epicsExportSharedSymbols
# undef epicsExportSharedSymbols
#endif
#include "compilerDependencies.h"
#ifdef dbChannelIOh_restore_epicsExportSharedSymbols
# define epicsExportSharedSymbols
#endif
class dbChannelIO : public cacChannel, public dbContextPrivateListOfIO {
public:
dbChannelIO (
@@ -279,6 +279,11 @@ support routines which write to the VAL field are responsible for setting UDF.
special(SPC_NOMOD)
menu(menuAlarmSevr)
}
field(AMSG,DBF_STRING) {
prompt("Alarm Message")
special(SPC_NOMOD)
size(40)
}
field(NSTA,DBF_MENU) {
prompt("New Alarm Status")
special(SPC_NOMOD)
@@ -291,6 +296,11 @@ support routines which write to the VAL field are responsible for setting UDF.
interest(2)
menu(menuAlarmSevr)
}
field(NAMSG,DBF_STRING) {
prompt("New Alarm Message")
special(SPC_NOMOD)
size(40)
}
field(ACKS,DBF_MENU) {
prompt("Alarm Ack Severity")
special(SPC_NOMOD)
@@ -514,6 +524,11 @@ field which is then used to acquire a timestamp.
interest(2)
extra("epicsTimeStamp time")
}
field(UTAG,DBF_UINT64) {
prompt("Time Tag")
special(SPC_NOMOD)
interest(3)
}
field(FLNK,DBF_FWDLINK) {
prompt("Forward Process Link")
promptgroup("20 - Scan")
@@ -19,7 +19,6 @@
#include "dbDefs.h"
#include "epicsStdlib.h"
#define epicsExportSharedSymbols
#include "dbAccessDefs.h"
#include "dbAddr.h"
#include "dbCommon.h"
+3 -3
View File
@@ -16,7 +16,7 @@
#ifndef INC_dbConstLink_H
#define INC_dbConstLink_H
#include "shareLib.h"
#include "dbCoreAPI.h"
#ifdef __cplusplus
extern "C" {
@@ -24,8 +24,8 @@ extern "C" {
struct link;
epicsShareFunc void dbConstInitLink(struct link *plink);
epicsShareFunc void dbConstAddLink(struct link *plink);
DBCORE_API void dbConstInitLink(struct link *plink);
DBCORE_API void dbConstAddLink(struct link *plink);
#ifdef __cplusplus
}
@@ -25,7 +25,6 @@
#include "epicsThread.h"
#include "errlog.h"
#define epicsExportSharedSymbols
#include "db_access_routines.h"
#include "dbCAC.h"
#include "dbChannel.h"
@@ -20,7 +20,6 @@
#include "cadef.h" // this can be eliminated when the callbacks use the new interface
#include "db_access.h" // should be eliminated here in the future
#define epicsExportSharedSymbols
#include "db_access_routines.h"
#include "dbCAC.h"
-1
View File
@@ -26,7 +26,6 @@
#include "errlog.h"
#include "errMdef.h"
#define epicsExportSharedSymbols
#include "dbAccessDefs.h"
#include "dbAddr.h"
#include "dbBase.h"
+3 -3
View File
@@ -14,7 +14,7 @@
#include "dbFldTypes.h"
#include "dbAddr.h"
#include "shareLib.h"
#include "dbCoreAPI.h"
#ifdef __cplusplus
extern "C" {
@@ -25,8 +25,8 @@ typedef long (*GETCONVERTFUNC)(const DBADDR *paddr, void *pbuffer,
typedef long (*PUTCONVERTFUNC)(DBADDR *paddr, const void *pbuffer,
long nRequest, long no_elements, long offset);
epicsShareExtern GETCONVERTFUNC dbGetConvertRoutine[DBF_DEVICE+1][DBR_ENUM+1];
epicsShareExtern PUTCONVERTFUNC dbPutConvertRoutine[DBR_ENUM+1][DBF_DEVICE+1];
DBCORE_API extern GETCONVERTFUNC dbGetConvertRoutine[DBF_DEVICE+1][DBR_ENUM+1];
DBCORE_API extern PUTCONVERTFUNC dbPutConvertRoutine[DBR_ENUM+1][DBF_DEVICE+1];
#ifdef __cplusplus
}
+3 -3
View File
@@ -13,14 +13,14 @@
#define INCdbConvertFasth
#include "dbFldTypes.h"
#include "shareLib.h"
#include "dbCoreAPI.h"
#ifdef __cplusplus
extern "C" {
#endif
epicsShareExtern long (*dbFastGetConvertRoutine[DBF_DEVICE+1][DBR_ENUM+1])();
epicsShareExtern long (*dbFastPutConvertRoutine[DBR_ENUM+1][DBF_DEVICE+1])();
DBCORE_API extern long (*dbFastGetConvertRoutine[DBF_DEVICE+1][DBR_ENUM+1])();
DBCORE_API extern long (*dbFastPutConvertRoutine[DBR_ENUM+1][DBF_DEVICE+1])();
#ifdef __cplusplus
}
@@ -15,7 +15,6 @@
#include "yajl_alloc.h"
#include "yajl_parse.h"
#define epicsExportSharedSymbols
#include "dbAccessDefs.h"
#include "dbConvertFast.h"
#include "dbConvertJSON.h"
+3 -3
View File
@@ -10,16 +10,16 @@
#ifndef INC_dbConvertJSON_H
#define INC_dbConvertJSON_H
#include <shareLib.h>
#include <dbCoreAPI.h>
#ifdef __cplusplus
extern "C" {
#endif
/* This name should probably be changed to inclue "array" */
epicsShareFunc long dbPutConvertJSON(const char *json, short dbrType,
DBCORE_API long dbPutConvertJSON(const char *json, short dbrType,
void *pdest, long *psize);
epicsShareFunc long dbLSConvertJSON(const char *json, char *pdest,
DBCORE_API long dbLSConvertJSON(const char *json, char *pdest,
epicsUInt32 size, epicsUInt32 *plen);
#ifdef __cplusplus
}
+13 -6
View File
@@ -52,7 +52,6 @@
#include "caeventmask.h"
#define epicsExportSharedSymbols
#include "dbAccessDefs.h"
#include "dbAddr.h"
#include "dbBase.h"
@@ -338,8 +337,8 @@ static long dbDbGetUnits(const struct link *plink, char *units, int unitsSize)
return 0;
}
static long dbDbGetAlarm(const struct link *plink, epicsEnum16 *status,
epicsEnum16 *severity)
static long dbDbGetAlarmMsg(const struct link *plink, epicsEnum16 *status,
epicsEnum16 *severity, char *msgbuf, size_t msgbuflen)
{
dbChannel *chan = linkChannel(plink);
dbCommon *precord = dbChannelRecord(chan);
@@ -347,14 +346,20 @@ static long dbDbGetAlarm(const struct link *plink, epicsEnum16 *status,
*status = precord->stat;
if (severity)
*severity = precord->sevr;
if (msgbuf && msgbuflen) {
strncpy(msgbuf, precord->amsg, msgbuflen-1);
msgbuf[msgbuflen-1] = '\0';
}
return 0;
}
static long dbDbGetTimeStamp(const struct link *plink, epicsTimeStamp *pstamp)
static long dbDbGetTimeStampTag(const struct link *plink, epicsTimeStamp *pstamp, epicsUTag *ptag)
{
dbChannel *chan = linkChannel(plink);
dbCommon *precord = dbChannelRecord(chan);
*pstamp = precord->time;
if(ptag)
*ptag = precord->utag;
return 0;
}
@@ -402,9 +407,11 @@ static lset dbDb_lset = {
dbDbGetValue,
dbDbGetControlLimits, dbDbGetGraphicLimits, dbDbGetAlarmLimits,
dbDbGetPrecision, dbDbGetUnits,
dbDbGetAlarm, dbDbGetTimeStamp,
NULL, NULL,
dbDbPutValue, NULL,
dbDbScanFwdLink, doLocked
dbDbScanFwdLink, doLocked,
dbDbGetAlarmMsg,
dbDbGetTimeStampTag,
};
+3 -3
View File
@@ -16,7 +16,7 @@
#ifndef INC_dbDbLink_H
#define INC_dbDbLink_H
#include "shareLib.h"
#include "dbCoreAPI.h"
#ifdef __cplusplus
extern "C" {
@@ -25,8 +25,8 @@ extern "C" {
struct link;
struct dbLocker;
epicsShareFunc long dbDbInitLink(struct link *plink, short dbfType);
epicsShareFunc void dbDbAddLink(struct dbLocker *locker, struct link *plink,
DBCORE_API long dbDbInitLink(struct link *plink, short dbfType);
DBCORE_API void dbDbAddLink(struct dbLocker *locker, struct link *plink,
short dbfType, dbChannel *ptarget);
#ifdef __cplusplus
+5 -2
View File
@@ -37,7 +37,6 @@
#include "caeventmask.h"
#define epicsExportSharedSymbols
#include "dbAccessDefs.h"
#include "dbAddr.h"
#include "dbBase.h"
@@ -333,7 +332,7 @@ fail:
}
epicsShareFunc void db_cleanup_events(void)
DBCORE_API void db_cleanup_events(void)
{
if(dbevEventUserFreeList) freeListCleanup(dbevEventUserFreeList);
dbevEventUserFreeList = NULL;
@@ -676,7 +675,10 @@ static db_field_log* db_create_field_log (struct dbChannel *chan, int use_val)
struct dbCommon *prec = dbChannelRecord(chan);
pLog->stat = prec->stat;
pLog->sevr = prec->sevr;
strncpy(pLog->amsg, prec->amsg, sizeof(pLog->amsg)-1);
pLog->amsg[sizeof(pLog->amsg)-1] = '\0';
pLog->time = prec->time;
pLog->utag = prec->utag;
pLog->field_type = dbChannelFieldType(chan);
pLog->field_size = dbChannelFieldSize(chan);
pLog->no_elements = dbChannelElements(chan);
@@ -715,6 +717,7 @@ db_field_log* db_create_event_log (struct evSubscrip *pevent)
{
db_field_log *pLog = db_create_field_log(pevent->chan, pevent->useValque);
if (pLog) {
pLog->mask = pevent->select;
pLog->ctx = dbfl_context_event;
}
return pLog;
+24 -33
View File
@@ -20,18 +20,9 @@
#ifndef INCLdbEventh
#define INCLdbEventh
#ifdef epicsExportSharedSymbols
# undef epicsExportSharedSymbols
# define INCLdbEventhExporting
#endif
#include "epicsThread.h"
#ifdef INCLdbEventhExporting
# define epicsExportSharedSymbols
#endif
#include "shareLib.h"
#include "dbCoreAPI.h"
#ifdef __cplusplus
extern "C" {
@@ -41,50 +32,50 @@ struct dbChannel;
struct db_field_log;
struct evSubscrip;
epicsShareFunc int db_event_list (
DBCORE_API int db_event_list (
const char *name, unsigned level);
epicsShareFunc int dbel (
DBCORE_API int dbel (
const char *name, unsigned level);
epicsShareFunc int db_post_events (
DBCORE_API int db_post_events (
void *pRecord, void *pField, unsigned caEventMask );
typedef void * dbEventCtx;
typedef void EXTRALABORFUNC (void *extralabor_arg);
epicsShareFunc dbEventCtx db_init_events (void);
epicsShareFunc int db_start_events (
DBCORE_API dbEventCtx db_init_events (void);
DBCORE_API int db_start_events (
dbEventCtx ctx, const char *taskname, void (*init_func)(void *),
void *init_func_arg, unsigned osiPriority );
epicsShareFunc void db_close_events (dbEventCtx ctx);
epicsShareFunc void db_event_flow_ctrl_mode_on (dbEventCtx ctx);
epicsShareFunc void db_event_flow_ctrl_mode_off (dbEventCtx ctx);
epicsShareFunc int db_add_extra_labor_event (
DBCORE_API void db_close_events (dbEventCtx ctx);
DBCORE_API void db_event_flow_ctrl_mode_on (dbEventCtx ctx);
DBCORE_API void db_event_flow_ctrl_mode_off (dbEventCtx ctx);
DBCORE_API int db_add_extra_labor_event (
dbEventCtx ctx, EXTRALABORFUNC *func, void *arg);
epicsShareFunc void db_flush_extra_labor_event (dbEventCtx);
epicsShareFunc int db_post_extra_labor (dbEventCtx ctx);
epicsShareFunc void db_event_change_priority ( dbEventCtx ctx, unsigned epicsPriority );
DBCORE_API void db_flush_extra_labor_event (dbEventCtx);
DBCORE_API int db_post_extra_labor (dbEventCtx ctx);
DBCORE_API void db_event_change_priority ( dbEventCtx ctx, unsigned epicsPriority );
#ifdef EPICS_PRIVATE_API
epicsShareFunc void db_cleanup_events(void);
epicsShareFunc void db_init_event_freelists (void);
DBCORE_API void db_cleanup_events(void);
DBCORE_API void db_init_event_freelists (void);
#endif
typedef void EVENTFUNC (void *user_arg, struct dbChannel *chan,
int eventsRemaining, struct db_field_log *pfl);
typedef void * dbEventSubscription;
epicsShareFunc dbEventSubscription db_add_event (
DBCORE_API dbEventSubscription db_add_event (
dbEventCtx ctx, struct dbChannel *chan,
EVENTFUNC *user_sub, void *user_arg, unsigned select);
epicsShareFunc void db_cancel_event (dbEventSubscription es);
epicsShareFunc void db_post_single_event (dbEventSubscription es);
epicsShareFunc void db_event_enable (dbEventSubscription es);
epicsShareFunc void db_event_disable (dbEventSubscription es);
DBCORE_API void db_cancel_event (dbEventSubscription es);
DBCORE_API void db_post_single_event (dbEventSubscription es);
DBCORE_API void db_event_enable (dbEventSubscription es);
DBCORE_API void db_event_disable (dbEventSubscription es);
epicsShareFunc struct db_field_log* db_create_event_log (struct evSubscrip *pevent);
epicsShareFunc struct db_field_log* db_create_read_log (struct dbChannel *chan);
epicsShareFunc void db_delete_field_log (struct db_field_log *pfl);
epicsShareFunc int db_available_logs(void);
DBCORE_API struct db_field_log* db_create_event_log (struct evSubscrip *pevent);
DBCORE_API struct db_field_log* db_create_read_log (struct dbChannel *chan);
DBCORE_API void db_delete_field_log (struct db_field_log *pfl);
DBCORE_API int db_available_logs(void);
#define DB_EVENT_OK 0
#define DB_EVENT_ERROR (-1)
@@ -23,7 +23,6 @@
#include "epicsTypes.h"
#define epicsExportSharedSymbols
#include "dbAddr.h"
#include "dbExtractArray.h"
+2 -2
View File
@@ -16,7 +16,7 @@
#include "dbFldTypes.h"
#include "dbAddr.h"
#include "shareLib.h"
#include "dbCoreAPI.h"
#ifdef __cplusplus
extern "C" {
@@ -49,7 +49,7 @@ extern "C" {
* @param offset Wrap-around point in source array.
* @param increment Copy only every increment'th element.
*/
epicsShareFunc void dbExtractArray(const void *pfrom, void *pto,
DBCORE_API void dbExtractArray(const void *pfrom, void *pto,
short field_size, long nRequest, long no_elements, long offset,
long increment);
@@ -27,7 +27,6 @@
#include "errlog.h"
#include "errMdef.h"
#define epicsExportSharedSymbols
#include "dbAccessDefs.h"
#include "dbAddr.h"
#include "dbBase.h"
+1 -2
View File
@@ -10,7 +10,6 @@
#include "iocsh.h"
#define epicsExportSharedSymbols
#include "callback.h"
#include "dbAccess.h"
#include "dbBkpt.h"
@@ -26,7 +25,7 @@
#include "db_test.h"
#include "dbTest.h"
epicsShareExtern int callbackParallelThreadsDefault;
DBCORE_API extern int callbackParallelThreadsDefault;
/* dbLoadDatabase */
static const iocshArg dbLoadDatabaseArg0 = { "file name",iocshArgString};
+2 -2
View File
@@ -11,13 +11,13 @@
#ifndef INC_dbIocRegister_H
#define INC_dbIocRegister_H
#include "shareLib.h"
#include "dbCoreAPI.h"
#ifdef __cplusplus
extern "C" {
#endif
epicsShareFunc void dbIocRegister(void);
DBCORE_API void dbIocRegister(void);
#ifdef __cplusplus
}
-1
View File
@@ -16,7 +16,6 @@
#include "yajl_alloc.h"
#include "yajl_parse.h"
#define epicsExportSharedSymbols
#include "dbAccessDefs.h"
#include "dbCommon.h"
#include "dbStaticLib.h"
+2 -2
View File
@@ -22,7 +22,7 @@ typedef enum {
jlif_continue = 1
} jlif_result;
epicsShareExtern const char *jlif_result_name[2];
DBCORE_API extern const char *jlif_result_name[2];
typedef enum {
jlif_key_stop = jlif_stop,
@@ -30,7 +30,7 @@ typedef enum {
jlif_key_child_inlink, jlif_key_child_outlink, jlif_key_child_fwdlink
} jlif_key_result;
epicsShareExtern const char *jlif_key_result_name[5];
DBCORE_API extern const char *jlif_key_result_name[5];
struct link;
struct lset;
+35 -16
View File
@@ -28,7 +28,6 @@
#include "caeventmask.h"
#define epicsExportSharedSymbols
#include "dbAccessDefs.h"
#include "dbAddr.h"
#include "dbBase.h"
@@ -314,10 +313,16 @@ long dbTryGetLink(struct link *plink, short dbrType, void *pbuffer,
return plset->getValue(plink, dbrType, pbuffer, pnRequest);
}
static
void setLinkAlarm(struct link* plink)
{
recGblSetSevrMsg(plink->precord, LINK_ALARM, INVALID_ALARM,
"field %s", dbLinkFieldName(plink));
}
long dbGetLink(struct link *plink, short dbrType, void *pbuffer,
long *poptions, long *pnRequest)
{
struct dbCommon *precord = plink->precord;
long status;
if (poptions && *poptions) {
@@ -329,7 +334,7 @@ long dbGetLink(struct link *plink, short dbrType, void *pbuffer,
if (status == S_db_noLSET)
return -1;
if (status)
recGblSetSevr(precord, LINK_ALARM, INVALID_ALARM);
setLinkAlarm(plink);
return status;
}
@@ -386,24 +391,42 @@ long dbGetUnits(const struct link *plink, char *units, int unitsSize)
}
long dbGetAlarm(const struct link *plink, epicsEnum16 *status,
epicsEnum16 *severity)
epicsEnum16 *severity)
{
return dbGetAlarmMsg(plink, status, severity, NULL, 0);
}
long dbGetAlarmMsg(const struct link *plink, epicsEnum16 *status,
epicsEnum16 *severity, char *msgbuf, size_t msgbuflen)
{
lset *plset = plink->lset;
if (!plset || !plset->getAlarm)
if (plset && plset->getAlarmMsg) {
return plset->getAlarmMsg(plink, status, severity, msgbuf, msgbuflen);
} else if(plset && plset->getAlarm) {
return plset->getAlarm(plink, status, severity);
} else {
return S_db_noLSET;
return plset->getAlarm(plink, status, severity);
}
}
long dbGetTimeStamp(const struct link *plink, epicsTimeStamp *pstamp)
{
return dbGetTimeStampTag(plink, pstamp, NULL);
}
long dbGetTimeStampTag(const struct link *plink,
epicsTimeStamp *pstamp, epicsUTag *ptag)
{
lset *plset = plink->lset;
if (!plset || !plset->getTimeStamp)
if (plset && plset->getTimeStampTag) {
return plset->getTimeStampTag(plink, pstamp, ptag);
} else if(plset && plset->getTimeStamp) {
return plset->getTimeStamp(plink, pstamp);
} else {
return S_db_noLSET;
return plset->getTimeStamp(plink, pstamp);
}
}
long dbPutLink(struct link *plink, short dbrType, const void *pbuffer,
@@ -417,9 +440,7 @@ long dbPutLink(struct link *plink, short dbrType, const void *pbuffer,
status = plset->putValue(plink, dbrType, pbuffer, nRequest);
if (status) {
struct dbCommon *precord = plink->precord;
recGblSetSevr(precord, LINK_ALARM, INVALID_ALARM);
setLinkAlarm(plink);
}
return status;
}
@@ -444,9 +465,7 @@ long dbPutLinkAsync(struct link *plink, short dbrType, const void *pbuffer,
status = plset->putAsync(plink, dbrType, pbuffer, nRequest);
if (status) {
struct dbCommon *precord = plink->precord;
recGblSetSevr(precord, LINK_ALARM, INVALID_ALARM);
setLinkAlarm(plink);
}
return status;
}
+66 -31
View File
@@ -17,7 +17,7 @@
#define INC_dbLink_H
#include "link.h"
#include "shareLib.h"
#include "dbCoreAPI.h"
#include "epicsTypes.h"
#include "epicsTime.h"
#include "dbAddr.h"
@@ -361,64 +361,99 @@ typedef struct lset {
* @returns status value
*/
long (*doLocked)(struct link *plink, dbLinkUserCallback rtn, void *priv);
/** @brief Extended version of getAlarm
*
* Equivalent of getAlarm() and also copy out alarm message string.
* The msgbuf argument may be NULL and/or msgbuflen==0, in which case
* the effect must be the same as a call to getAlarm().
*
* Implementations must write a trailing nil to msgbuf whenever
* @code msgbuf!=NULL && msgbuflen>0 @endcode .
*
* @since UNRELEASED
*/
long (*getAlarmMsg)(const struct link *plink, epicsEnum16 *status,
epicsEnum16 *severity, char *msgbuf, size_t msgbuflen);
/** @brief Extended version of getTimeStamp
*
* Equivalent of getTimeStamp() and also copy out time tag.
* ptag may be NULL.
*
* @since Added after UNRELEASED
*/
long (*getTimeStampTag)(const struct link *plink, epicsTimeStamp *pstamp, epicsUTag *ptag);
} lset;
#define dbGetSevr(link, sevr) \
dbGetAlarm(link, NULL, sevr)
epicsShareFunc const char * dbLinkFieldName(const struct link *plink);
DBCORE_API const char * dbLinkFieldName(const struct link *plink);
epicsShareFunc void dbInitLink(struct link *plink, short dbfType);
epicsShareFunc void dbAddLink(struct dbLocker *locker, struct link *plink,
DBCORE_API void dbInitLink(struct link *plink, short dbfType);
DBCORE_API void dbAddLink(struct dbLocker *locker, struct link *plink,
short dbfType, dbChannel *ptarget);
epicsShareFunc void dbLinkOpen(struct link *plink);
epicsShareFunc void dbRemoveLink(struct dbLocker *locker, struct link *plink);
DBCORE_API void dbLinkOpen(struct link *plink);
DBCORE_API void dbRemoveLink(struct dbLocker *locker, struct link *plink);
epicsShareFunc int dbLinkIsDefined(const struct link *plink); /* 0 or 1 */
epicsShareFunc int dbLinkIsConstant(const struct link *plink); /* 0 or 1 */
epicsShareFunc int dbLinkIsVolatile(const struct link *plink); /* 0 or 1 */
DBCORE_API int dbLinkIsDefined(const struct link *plink); /* 0 or 1 */
DBCORE_API int dbLinkIsConstant(const struct link *plink); /* 0 or 1 */
DBCORE_API int dbLinkIsVolatile(const struct link *plink); /* 0 or 1 */
epicsShareFunc long dbLoadLink(struct link *plink, short dbrType,
DBCORE_API long dbLoadLink(struct link *plink, short dbrType,
void *pbuffer);
epicsShareFunc long dbLoadLinkArray(struct link *, short dbrType, void *pbuffer,
DBCORE_API long dbLoadLinkArray(struct link *, short dbrType, void *pbuffer,
long *pnRequest);
epicsShareFunc long dbGetNelements(const struct link *plink, long *pnElements);
epicsShareFunc int dbIsLinkConnected(const struct link *plink); /* 0 or 1 */
epicsShareFunc int dbGetLinkDBFtype(const struct link *plink);
epicsShareFunc long dbTryGetLink(struct link *, short dbrType, void *pbuffer,
DBCORE_API long dbGetNelements(const struct link *plink, long *pnElements);
DBCORE_API int dbIsLinkConnected(const struct link *plink); /* 0 or 1 */
DBCORE_API int dbGetLinkDBFtype(const struct link *plink);
DBCORE_API long dbTryGetLink(struct link *, short dbrType, void *pbuffer,
long *nRequest);
epicsShareFunc long dbGetLink(struct link *, short dbrType, void *pbuffer,
DBCORE_API long dbGetLink(struct link *, short dbrType, void *pbuffer,
long *options, long *nRequest);
epicsShareFunc long dbGetControlLimits(const struct link *plink, double *low,
DBCORE_API long dbGetControlLimits(const struct link *plink, double *low,
double *high);
epicsShareFunc long dbGetGraphicLimits(const struct link *plink, double *low,
DBCORE_API long dbGetGraphicLimits(const struct link *plink, double *low,
double *high);
epicsShareFunc long dbGetAlarmLimits(const struct link *plink, double *lolo,
DBCORE_API long dbGetAlarmLimits(const struct link *plink, double *lolo,
double *low, double *high, double *hihi);
epicsShareFunc long dbGetPrecision(const struct link *plink, short *precision);
epicsShareFunc long dbGetUnits(const struct link *plink, char *units,
DBCORE_API long dbGetPrecision(const struct link *plink, short *precision);
DBCORE_API long dbGetUnits(const struct link *plink, char *units,
int unitsSize);
epicsShareFunc long dbGetAlarm(const struct link *plink, epicsEnum16 *status,
DBCORE_API long dbGetAlarm(const struct link *plink, epicsEnum16 *status,
epicsEnum16 *severity);
epicsShareFunc long dbGetTimeStamp(const struct link *plink,
/** Get link alarm and message string.
* To ensure the complete message string is copied, ensure @code msgbuflen >= sizeof (dbCommon::amsg) @endcode .
* A trailing nil will be added whenever @code msgbuflen > 0 @endcode .
* @since UNRELEASED
*/
DBCORE_API long dbGetAlarmMsg(const struct link *plink, epicsEnum16 *status,
epicsEnum16 *severity, char *msgbuf, size_t msgbuflen);
#define dbGetAlarmMsg(LINK, STAT, SEVR, BUF, BUFLEN) dbGetAlarmMsg(LINK, STAT, SEVR, BUF, BUFLEN)
DBCORE_API long dbGetTimeStamp(const struct link *plink,
epicsTimeStamp *pstamp);
epicsShareFunc long dbPutLink(struct link *plink, short dbrType,
/** @since UNRELEASED */
DBCORE_API long dbGetTimeStampTag(const struct link *plink,
epicsTimeStamp *pstamp, epicsUTag *ptag);
#define dbGetTimeStampTag(LINK, STAMP, TAG) dbGetTimeStampTag(LINK, STAMP, TAG)
DBCORE_API long dbPutLink(struct link *plink, short dbrType,
const void *pbuffer, long nRequest);
epicsShareFunc void dbLinkAsyncComplete(struct link *plink);
epicsShareFunc long dbPutLinkAsync(struct link *plink, short dbrType,
DBCORE_API void dbLinkAsyncComplete(struct link *plink);
DBCORE_API long dbPutLinkAsync(struct link *plink, short dbrType,
const void *pbuffer, long nRequest);
epicsShareFunc void dbScanFwdLink(struct link *plink);
DBCORE_API void dbScanFwdLink(struct link *plink);
epicsShareFunc long dbLinkDoLocked(struct link *plink, dbLinkUserCallback rtn,
DBCORE_API long dbLinkDoLocked(struct link *plink, dbLinkUserCallback rtn,
void *priv);
epicsShareFunc long dbLoadLinkLS(struct link *plink, char *pbuffer,
DBCORE_API long dbLoadLinkLS(struct link *plink, char *pbuffer,
epicsUInt32 size, epicsUInt32 *plen);
epicsShareFunc long dbGetLinkLS(struct link *plink, char *pbuffer,
DBCORE_API long dbGetLinkLS(struct link *plink, char *pbuffer,
epicsUInt32 buffer_size, epicsUInt32 *plen);
epicsShareFunc long dbPutLinkLS(struct link *plink, char *pbuffer,
DBCORE_API long dbPutLinkLS(struct link *plink, char *pbuffer,
epicsUInt32 len);
#ifdef __cplusplus
-1
View File
@@ -25,7 +25,6 @@
#include "epicsThread.h"
#include "errMdef.h"
#define epicsExportSharedSymbols
#include "dbAccessDefs.h"
#include "dbAddr.h"
#include "dbBase.h"
+15 -15
View File
@@ -16,7 +16,7 @@
#include <stddef.h>
#include "ellLib.h"
#include "shareLib.h"
#include "dbCoreAPI.h"
#ifdef __cplusplus
extern "C" {
@@ -26,38 +26,38 @@ struct dbCommon;
struct dbBase;
typedef struct dbLocker dbLocker;
epicsShareFunc void dbScanLock(struct dbCommon *precord);
epicsShareFunc void dbScanUnlock(struct dbCommon *precord);
DBCORE_API void dbScanLock(struct dbCommon *precord);
DBCORE_API void dbScanUnlock(struct dbCommon *precord);
epicsShareFunc dbLocker *dbLockerAlloc(struct dbCommon * const *precs,
DBCORE_API dbLocker *dbLockerAlloc(struct dbCommon * const *precs,
size_t nrecs,
unsigned int flags);
epicsShareFunc void dbLockerFree(dbLocker *);
DBCORE_API void dbLockerFree(dbLocker *);
epicsShareFunc void dbScanLockMany(dbLocker*);
epicsShareFunc void dbScanUnlockMany(dbLocker*);
DBCORE_API void dbScanLockMany(dbLocker*);
DBCORE_API void dbScanUnlockMany(dbLocker*);
epicsShareFunc unsigned long dbLockGetLockId(
DBCORE_API unsigned long dbLockGetLockId(
struct dbCommon *precord);
epicsShareFunc void dbLockInitRecords(struct dbBase *pdbbase);
epicsShareFunc void dbLockCleanupRecords(struct dbBase *pdbbase);
DBCORE_API void dbLockInitRecords(struct dbBase *pdbbase);
DBCORE_API void dbLockCleanupRecords(struct dbBase *pdbbase);
/* Lock Set Report */
epicsShareFunc long dblsr(char *recordname,int level);
DBCORE_API long dblsr(char *recordname,int level);
/* If recordname NULL then all records*/
/* level = (0,1,2) (lock set state, + recordname, +DB links) */
epicsShareFunc long dbLockShowLocked(int level);
DBCORE_API long dbLockShowLocked(int level);
/*KLUDGE to support field TPRO*/
epicsShareFunc int * dbLockSetAddrTrace(struct dbCommon *precord);
DBCORE_API int * dbLockSetAddrTrace(struct dbCommon *precord);
/* debugging */
epicsShareFunc unsigned long dbLockGetRefs(struct dbCommon*);
epicsShareFunc unsigned long dbLockCountSets(void);
DBCORE_API unsigned long dbLockGetRefs(struct dbCommon*);
DBCORE_API unsigned long dbLockCountSets(void);
#ifdef __cplusplus
}
+3 -3
View File
@@ -92,9 +92,9 @@ extern "C" {
#endif
/* These are exported for testing only */
epicsShareFunc lockSet* dbLockGetRef(lockRecord *lr); /* lookup lockset and increment ref count */
epicsShareFunc void dbLockIncRef(lockSet* ls);
epicsShareFunc void dbLockDecRef(lockSet *ls);
DBCORE_API lockSet* dbLockGetRef(lockRecord *lr); /* lookup lockset and increment ref count */
DBCORE_API void dbLockIncRef(lockSet* ls);
DBCORE_API void dbLockDecRef(lockSet *ls);
/* Calling dbLockerPrepare directly is an internal
* optimization used when dbLocker on the stack.
-1
View File
@@ -33,7 +33,6 @@
#include "errlog.h"
#include "errMdef.h"
#define epicsExportSharedSymbols
#include "callback.h"
#include "dbAccessDefs.h"
#include "dbBase.h"
+10 -10
View File
@@ -12,7 +12,7 @@
#ifndef INCdbNotifyh
#define INCdbNotifyh
#include "shareLib.h"
#include "dbCoreAPI.h"
#include "ellLib.h"
#ifdef __cplusplus
@@ -70,32 +70,32 @@ typedef struct processNotify {
/* dbProcessNotify and dbNotifyCancel are called by user*/
epicsShareFunc void dbProcessNotify(processNotify *pprocessNotify);
epicsShareFunc void dbNotifyCancel(processNotify *pprocessNotify);
DBCORE_API void dbProcessNotify(processNotify *pprocessNotify);
DBCORE_API void dbNotifyCancel(processNotify *pprocessNotify);
/* dbProcessNotifyInit called by iocInit */
epicsShareFunc void dbProcessNotifyInit(void);
epicsShareFunc void dbProcessNotifyExit(void);
DBCORE_API void dbProcessNotifyInit(void);
DBCORE_API void dbProcessNotifyExit(void);
/*dbNotifyAdd called by dbScanPassive and dbScanLink*/
epicsShareFunc void dbNotifyAdd(
DBCORE_API void dbNotifyAdd(
struct dbCommon *pfrom,struct dbCommon *pto);
/*dbNotifyCompletion called by recGblFwdLink or dbAccess*/
epicsShareFunc void dbNotifyCompletion(struct dbCommon *precord);
DBCORE_API void dbNotifyCompletion(struct dbCommon *precord);
/* db_put_process defined here since it requires dbNotify.
* src_type is the old DBR type
* This is called by a dbNotify putCallback that uses oldDbr types
*/
epicsShareFunc int db_put_process(
DBCORE_API int db_put_process(
processNotify *processNotify,notifyPutType type,
int src_type,const void *psrc, int no_elements);
/* dbtpn is test routine for dbNotify putProcessRequest */
epicsShareFunc long dbtpn(char *recordname,char *value);
DBCORE_API long dbtpn(char *recordname,char *value);
/* dbNotifyDump is an INVASIVE debug utility. Don't use this needlessly*/
epicsShareFunc int dbNotifyDump(void);
DBCORE_API int dbNotifyDump(void);
/* This module provides code to handle process notify.
* client code semantics are:
@@ -31,7 +31,6 @@
#include "caerr.h" // this needs to be eliminated
#include "db_access.h" // this needs to be eliminated
#define epicsExportSharedSymbols
#include "dbCAC.h"
#include "dbChannelIO.h"
#include "dbPutNotifyBlocker.h"
@@ -17,18 +17,9 @@
#ifndef dbPutNotifyBlockerh
#define dbPutNotifyBlockerh
#ifdef epicsExportSharedSymbols
#define dbPutNotifyBlockerh_restore_epicsExportSharedSymbols
#undef epicsExportSharedSymbols
#endif
#include "tsFreeList.h"
#include "compilerDependencies.h"
#ifdef dbPutNotifyBlockerh_restore_epicsExportSharedSymbols
#define epicsExportSharedSymbols
#endif
class dbPutNotifyBlocker : public dbBaseIO {
public:
dbPutNotifyBlocker ( epicsMutex & );
-1
View File
@@ -37,7 +37,6 @@
#include "epicsTime.h"
#include "taskwd.h"
#define epicsExportSharedSymbols
#include "callback.h"
#include "dbAccessDefs.h"
#include "dbAddr.h"
+24 -24
View File
@@ -18,7 +18,7 @@
#include <limits.h>
#include "menuScan.h"
#include "shareLib.h"
#include "dbCoreAPI.h"
#include "compilerDependencies.h"
#include "devSup.h"
@@ -50,37 +50,37 @@ typedef struct scanOnceQueueStats {
int numOverflow;
} scanOnceQueueStats;
epicsShareFunc long scanInit(void);
epicsShareFunc void scanRun(void);
epicsShareFunc void scanPause(void);
epicsShareFunc void scanStop(void);
epicsShareFunc void scanCleanup(void);
DBCORE_API long scanInit(void);
DBCORE_API void scanRun(void);
DBCORE_API void scanPause(void);
DBCORE_API void scanStop(void);
DBCORE_API void scanCleanup(void);
epicsShareFunc EVENTPVT eventNameToHandle(const char* event);
epicsShareFunc void postEvent(EVENTPVT epvt);
epicsShareFunc void post_event(int event);
epicsShareFunc void scanAdd(struct dbCommon *);
epicsShareFunc void scanDelete(struct dbCommon *);
epicsShareFunc double scanPeriod(int scan);
epicsShareFunc int scanOnce(struct dbCommon *);
epicsShareFunc int scanOnceCallback(struct dbCommon *, once_complete cb, void *usr);
epicsShareFunc int scanOnceSetQueueSize(int size);
epicsShareFunc int scanOnceQueueStatus(const int reset, scanOnceQueueStats *result);
epicsShareFunc void scanOnceQueueShow(const int reset);
DBCORE_API EVENTPVT eventNameToHandle(const char* event);
DBCORE_API void postEvent(EVENTPVT epvt);
DBCORE_API void post_event(int event);
DBCORE_API void scanAdd(struct dbCommon *);
DBCORE_API void scanDelete(struct dbCommon *);
DBCORE_API double scanPeriod(int scan);
DBCORE_API int scanOnce(struct dbCommon *);
DBCORE_API int scanOnceCallback(struct dbCommon *, once_complete cb, void *usr);
DBCORE_API int scanOnceSetQueueSize(int size);
DBCORE_API int scanOnceQueueStatus(const int reset, scanOnceQueueStats *result);
DBCORE_API void scanOnceQueueShow(const int reset);
/*print periodic lists*/
epicsShareFunc int scanppl(double rate);
DBCORE_API int scanppl(double rate);
/*print event lists*/
epicsShareFunc int scanpel(const char *event_name);
DBCORE_API int scanpel(const char *event_name);
/*print io_event list*/
epicsShareFunc int scanpiol(void);
DBCORE_API int scanpiol(void);
epicsShareFunc void scanIoInit(IOSCANPVT *ppios);
epicsShareFunc unsigned int scanIoRequest(IOSCANPVT pios);
epicsShareFunc unsigned int scanIoImmediate(IOSCANPVT pios, int prio);
epicsShareFunc void scanIoSetComplete(IOSCANPVT, io_scan_complete, void *usr);
DBCORE_API void scanIoInit(IOSCANPVT *ppios);
DBCORE_API unsigned int scanIoRequest(IOSCANPVT pios);
DBCORE_API unsigned int scanIoImmediate(IOSCANPVT pios, int prio);
DBCORE_API void scanIoSetComplete(IOSCANPVT, io_scan_complete, void *usr);
#ifdef __cplusplus
}
-1
View File
@@ -18,7 +18,6 @@
#include "envDefs.h"
#include "epicsStdio.h"
#define epicsExportSharedSymbols
#include "dbServer.h"
static ELLLIST serverList = ELLLIST_INIT;
+9 -9
View File
@@ -28,7 +28,7 @@
#include <stddef.h>
#include "ellLib.h"
#include "shareLib.h"
#include "dbCoreAPI.h"
#ifdef __cplusplus
extern "C" {
@@ -118,14 +118,14 @@ typedef struct dbServer {
* This should only be called once for each server layer.
* @param psrv Server information structure for the server
*/
epicsShareFunc int dbRegisterServer(dbServer *psrv);
DBCORE_API int dbRegisterServer(dbServer *psrv);
/** @brief Unregister a server layer
*
* This should only be called when the servers are inactive.
* @param psrv Server information structure for the server
*/
epicsShareFunc int dbUnregisterServer(dbServer *psrv);
DBCORE_API int dbUnregisterServer(dbServer *psrv);
/** @brief Print dbServer Reports.
*
@@ -133,7 +133,7 @@ epicsShareFunc int dbUnregisterServer(dbServer *psrv);
* This routine is provided as an IOC Shell command.
* @param level Interest level, specifies how much detail to print.
*/
epicsShareFunc void dbsr(unsigned level);
DBCORE_API void dbsr(unsigned level);
/** @brief Query servers for client's identity.
*
@@ -143,31 +143,31 @@ epicsShareFunc void dbsr(unsigned level);
* of the calling thread is printed along with the record name whenever
* the record is subsequently processed.
*/
epicsShareFunc int dbServerClient(char *pBuf, size_t bufSize);
DBCORE_API int dbServerClient(char *pBuf, size_t bufSize);
/** @brief Initialize all registered servers.
*
* Calls all dbServer::init() methods.
*/
epicsShareFunc void dbInitServers(void);
DBCORE_API void dbInitServers(void);
/** @brief Run all registered servers.
*
* Calls all dbServer::run() methods.
*/
epicsShareFunc void dbRunServers(void);
DBCORE_API void dbRunServers(void);
/** @brief Pause all registered servers.
*
* Calls all dbServer::pause() methods.
*/
epicsShareFunc void dbPauseServers(void);
DBCORE_API void dbPauseServers(void);
/** @brief Stop all registered servers.
*
* Calls all dbServer::stop() methods.
*/
epicsShareFunc void dbStopServers(void);
DBCORE_API void dbStopServers(void);
#ifdef __cplusplus
}
-1
View File
@@ -19,7 +19,6 @@
#include "epicsString.h"
#include "iocsh.h"
#define epicsExportSharedSymbols
#include "dbDefs.h"
#include "dbState.h"
#include "dbStaticLib.h"
+8 -8
View File
@@ -14,7 +14,7 @@
#ifndef INCdbStateH
#define INCdbStateH
#include "shareLib.h"
#include "dbCoreAPI.h"
#ifdef __cplusplus
extern "C" {
@@ -45,14 +45,14 @@ typedef struct dbState *dbStateId;
* @param name Db state name.
* @return Id of db state, NULL for failure.
*/
epicsShareFunc dbStateId dbStateCreate(const char *name);
DBCORE_API dbStateId dbStateCreate(const char *name);
/** @brief Find db state.
*
* @param name Db state name.
* @return Id of db state, NULL if not found.
*/
epicsShareFunc dbStateId dbStateFind(const char *name);
DBCORE_API dbStateId dbStateFind(const char *name);
/** @brief Set db state to TRUE.
*
@@ -60,7 +60,7 @@ epicsShareFunc dbStateId dbStateFind(const char *name);
*
* @param id Db state id.
*/
epicsShareFunc void dbStateSet(dbStateId id);
DBCORE_API void dbStateSet(dbStateId id);
/** @brief Set db state to FALSE.
*
@@ -68,14 +68,14 @@ epicsShareFunc void dbStateSet(dbStateId id);
*
* @param id Db state id.
*/
epicsShareFunc void dbStateClear(dbStateId id);
DBCORE_API void dbStateClear(dbStateId id);
/** @brief Get db state.
*
* @param id Db state id.
* @return Current db state (0|1).
*/
epicsShareFunc int dbStateGet(dbStateId id);
DBCORE_API int dbStateGet(dbStateId id);
/** @brief Print info about db state.
*
@@ -84,7 +84,7 @@ epicsShareFunc int dbStateGet(dbStateId id);
* @param id Db state id.
* @param level Interest level.
*/
epicsShareFunc void dbStateShow(dbStateId id, unsigned int level);
DBCORE_API void dbStateShow(dbStateId id, unsigned int level);
/** @brief Print info about all db states.
*
@@ -92,7 +92,7 @@ epicsShareFunc void dbStateShow(dbStateId id, unsigned int level);
*
* @param level Interest level.
*/
epicsShareFunc void dbStateShowAll(unsigned int level);
DBCORE_API void dbStateShowAll(unsigned int level);
#ifdef __cplusplus
@@ -27,7 +27,6 @@
#include "cadef.h" // this can be eliminated when the callbacks use the new interface
#include "errlog.h"
#define epicsExportSharedSymbols
#include "dbCAC.h"
#include "dbChannelIO.h"
#include "db_access_routines.h"
-1
View File
@@ -23,7 +23,6 @@
#include "epicsString.h"
#include "errlog.h"
#define epicsExportSharedSymbols
#include "callback.h"
#include "dbAccessDefs.h"
#include "dbAddr.h"
+15 -15
View File
@@ -11,42 +11,42 @@
#ifndef INC_dbTest_H
#define INC_dbTest_H
#include "shareLib.h"
#include "dbCoreAPI.h"
#ifdef __cplusplus
extern "C" {
#endif
/*dbAddr info */
epicsShareFunc long dba(const char *pname);
DBCORE_API long dba(const char *pname);
/*list records*/
epicsShareFunc long dbl(
DBCORE_API long dbl(
const char *precordTypename,const char *fields);
/*list number of records of each type*/
epicsShareFunc long dbnr(int verbose);
DBCORE_API long dbnr(int verbose);
/* list aliases */
epicsShareFunc long dbla(const char *pmask);
DBCORE_API long dbla(const char *pmask);
/* list infos */
epicsShareFunc long dbli(const char *patern);
DBCORE_API long dbli(const char *patern);
/*list records with mask*/
epicsShareFunc long dbgrep(const char *pmask);
DBCORE_API long dbgrep(const char *pmask);
/*get field value*/
epicsShareFunc long dbgf(const char *pname);
DBCORE_API long dbgf(const char *pname);
/*put field value*/
epicsShareFunc long dbpf(const char *pname,const char *pvalue);
DBCORE_API long dbpf(const char *pname,const char *pvalue);
/*print record*/
epicsShareFunc long dbpr(const char *pname,int interest_level);
DBCORE_API long dbpr(const char *pname,int interest_level);
/*test record*/
epicsShareFunc long dbtr(const char *pname);
DBCORE_API long dbtr(const char *pname);
/*test get field*/
epicsShareFunc long dbtgf(const char *pname);
DBCORE_API long dbtgf(const char *pname);
/*test put field*/
epicsShareFunc long dbtpf(const char *pname,const char *pvalue);
DBCORE_API long dbtpf(const char *pname,const char *pvalue);
/*I/O report */
epicsShareFunc long dbior(
DBCORE_API long dbior(
const char *pdrvName,int interest_level);
/*Hardware Configuration Report*/
epicsShareFunc int dbhcr(void);
DBCORE_API int dbhcr(void);
#ifdef __cplusplus
}
+73 -29
View File
@@ -23,7 +23,6 @@
#include "epicsEvent.h"
#include "epicsThread.h"
#define epicsExportSharedSymbols
#include "dbAccess.h"
#include "dbBase.h"
#include "dbChannel.h"
@@ -112,12 +111,13 @@ union anybuf {
long testdbVPutField(const char* pv, short dbrType, va_list ap)
{
DBADDR addr;
dbChannel *chan = dbChannelCreate(pv);
union anybuf pod;
long ret = S_dbLib_recNotFound;
if (dbNameToAddr(pv, &addr)) {
testFail("Missing PV \"%s\"", pv);
return S_dbLib_recNotFound;
if(!chan || (ret=dbChannelOpen(chan))) {
testFail("Channel error (%p, %ld) : %s", chan, ret, pv);
goto done;
}
switch(dbrType) {
@@ -125,14 +125,18 @@ long testdbVPutField(const char* pv, short dbrType, va_list ap)
const char *uarg = va_arg(ap,char*);
strncpy(pod.valStr, uarg, sizeof(pod.valStr));
pod.valStr[sizeof(pod.valStr)-1] = '\0';
return dbPutField(&addr, dbrType, pod.valStr, 1);
ret = dbChannelPutField(chan, dbrType, pod.valStr, 1);
break;
}
/* The Type parameter takes into consideration
* the C language rules for promotion of argument types
* in variadic functions.
*/
#define OP(DBR,Type,mem) case DBR: {pod.val.mem = va_arg(ap,Type); break;}
#define OP(DBR,Type,mem) case DBR: \
pod.val.mem = va_arg(ap,Type); \
ret = dbChannelPutField(chan, dbrType, pod.bytes, 1); \
break;
OP(DBR_CHAR, int, int8);
OP(DBR_UCHAR, int, uInt8);
OP(DBR_SHORT, int, int16);
@@ -147,11 +151,15 @@ long testdbVPutField(const char* pv, short dbrType, va_list ap)
#undef OP
default:
testFail("invalid DBR: dbPutField(\"%s\", %d, ...)",
addr.precord->name, dbrType);
return S_db_badDbrtype;
dbChannelName(chan), dbrType);
ret = S_db_badDbrtype;
break;
}
return dbPutField(&addr, dbrType, pod.bytes, 1);
done:
if(chan)
dbChannelDelete(chan);
return ret;
}
void testdbPutFieldOk(const char* pv, int dbrType, ...)
@@ -190,23 +198,35 @@ void testdbGetFieldEqual(const char* pv, int dbrType, ...)
void testdbVGetFieldEqual(const char* pv, short dbrType, va_list ap)
{
DBADDR addr;
dbChannel *chan = dbChannelCreate(pv);
db_field_log *pfl = NULL;
long nReq = 1;
union anybuf pod;
long status;
long status = S_dbLib_recNotFound;
if(dbNameToAddr(pv, &addr)) {
testFail("Missing PV \"%s\"", pv);
return;
if(!chan || (status=dbChannelOpen(chan))) {
testFail("Channel error (%p, %ld) : %s", chan, status, pv);
goto done;
}
status = dbGetField(&addr, dbrType, pod.bytes, NULL, &nReq, NULL);
if(ellCount(&chan->filters)) {
pfl = db_create_read_log(chan);
if (!pfl) {
testFail("can't db_create_read_log w/ %s", pv);
goto done;
}
pfl = dbChannelRunPreChain(chan, pfl);
pfl = dbChannelRunPostChain(chan, pfl);
}
status = dbChannelGetField(chan, dbrType, pod.bytes, NULL, &nReq, pfl);
if (status) {
testFail("dbGetField(\"%s\", %d, ...) -> %#lx (%s)", pv, dbrType, status, errSymMsg(status));
return;
goto done;
} else if(nReq==0) {
testFail("dbGetField(\"%s\", %d, ...) -> zero length", pv, dbrType);
return;
goto done;
}
switch(dbrType) {
@@ -236,35 +256,56 @@ void testdbVGetFieldEqual(const char* pv, short dbrType, va_list ap)
default:
testFail("dbGetField(\"%s\", %d) -> unsupported dbf", pv, dbrType);
}
done:
db_delete_field_log(pfl);
if(chan)
dbChannelDelete(chan);
}
void testdbPutArrFieldOk(const char* pv, short dbrType, unsigned long count, const void *pbuf)
{
DBADDR addr;
dbChannel *chan = dbChannelCreate(pv);
long status;
if (dbNameToAddr(pv, &addr)) {
testFail("Missing PV \"%s\"", pv);
return;
if(!chan || (status=dbChannelOpen(chan))) {
testFail("Channel error (%p, %ld) : %s", chan, status, pv);
goto done;
}
status = dbPutField(&addr, dbrType, pbuf, count);
status = dbChannelPutField(chan, dbrType, pbuf, count);
testOk(status==0, "dbPutField(\"%s\", dbr=%d, count=%lu, ...) -> %ld", pv, dbrType, count, status);
done:
if(chan)
dbChannelDelete(chan);
}
void testdbGetArrFieldEqual(const char* pv, short dbfType, long nRequest, unsigned long cnt, const void *pbufraw)
{
DBADDR addr;
dbChannel *chan = dbChannelCreate(pv);
db_field_log *pfl = NULL;
const long vSize = dbValueSize(dbfType);
const long nStore = vSize * nRequest;
long status;
long status = S_dbLib_recNotFound;
char *gbuf, *gstore;
const char *pbuf = pbufraw;
if(dbNameToAddr(pv, &addr)) {
testFail("Missing PV \"%s\"", pv);
return;
if(!chan || (status=dbChannelOpen(chan))) {
testFail("Channel error (%p, %ld) : %s", chan, status, pv);
goto done;
}
if(ellCount(&chan->filters)) {
pfl = db_create_read_log(chan);
if (!pfl) {
testFail("can't db_create_read_log w/ %s", pv);
goto done;
}
pfl = dbChannelRunPreChain(chan, pfl);
pfl = dbChannelRunPostChain(chan, pfl);
}
gbuf = gstore = malloc(nStore);
@@ -273,7 +314,7 @@ void testdbGetArrFieldEqual(const char* pv, short dbfType, long nRequest, unsign
return;
}
status = dbGetField(&addr, dbfType, gbuf, NULL, &nRequest, NULL);
status = dbChannelGetField(chan, dbfType, gbuf, NULL, &nRequest, pfl);
if (status) {
testFail("dbGetField(\"%s\", %d, ...) -> %#lx", pv, dbfType, status);
@@ -318,7 +359,10 @@ void testdbGetArrFieldEqual(const char* pv, short dbfType, long nRequest, unsign
testOk(match, "dbGetField(\"%s\", dbrType=%d, nRequest=%ld ...) match", pv, dbfType, nRequest);
}
done:
free(gstore);
if(chan)
dbChannelDelete(chan);
}
dbCommon* testdbRecordPtr(const char* pv)
+266 -90
View File
@@ -6,9 +6,11 @@
* in file LICENSE that is included with this distribution.
\*************************************************************************/
/*
* Author: Michael Davidsaver <mdavidsaver@bnl.gov>
* Ralph Lange <Ralph.Lange@gmx.de>
/** @file dbUnitTest.h
* @brief Helpers for unitests of process database
* @author Michael Davidsaver, Ralph Lange
*
* @see @ref dbunittest
*/
#ifndef EPICSUNITTESTDB_H
@@ -20,45 +22,95 @@
#include "dbAddr.h"
#include "dbCommon.h"
#include "shareLib.h"
#include "dbCoreAPI.h"
#ifdef __cplusplus
extern "C" {
#endif
epicsShareFunc void testdbPrepare(void);
epicsShareFunc void testdbReadDatabase(const char* file,
/** First step in test database setup
*
* @see @ref dbtestskel
*/
DBCORE_API void testdbPrepare(void);
/** Read .dbd or .db file
*
* @see @ref dbtestskel
*/
DBCORE_API void testdbReadDatabase(const char* file,
const char* path,
const char* substitutions);
epicsShareFunc void testIocInitOk(void);
epicsShareFunc void testIocShutdownOk(void);
epicsShareFunc void testdbCleanup(void);
/* Correct argument types must be used with this var-arg function!
* Doing otherwise will result in corruption of argument values!
/** Assert success of iocInit()
*
* int for DBR_UCHAR, DBR_CHAR, DBR_USHORT, DBR_SHORT, DBR_LONG
* unsigned int for DBR_ULONG
* long long for DBF_INT64
* unsigned long long for DBF_UINT64
* double for DBR_FLOAT and DBR_DOUBLE
* const char* for DBR_STRING
*
* eg.
* testdbPutFieldOk("pvname", DBF_ULONG, (unsigned int)5);
* testdbPutFieldOk("pvname", DBF_FLOAT, (double)4.1);
* testdbPutFieldOk("pvname", DBF_STRING, "hello world");
* @see @ref dbtestskel
*/
epicsShareFunc void testdbPutFieldOk(const char* pv, int dbrType, ...);
/* Tests for put failure */
epicsShareFunc void testdbPutFieldFail(long status, const char* pv, int dbrType, ...);
DBCORE_API void testIocInitOk(void);
/** Shutdown test database processing.
*
* eg. Stops scan threads
*
* @see @ref dbtestskel
*/
DBCORE_API void testIocShutdownOk(void);
/** Final step in test database cleanup
*
* @see @ref dbtestskel
*/
DBCORE_API void testdbCleanup(void);
epicsShareFunc long testdbVPutField(const char* pv, short dbrType, va_list ap);
/** Assert that a dbPutField() scalar operation will complete successfully.
*
* @code
* testdbPutFieldOk("some.TPRO", DBF_LONG, 1);
* @endcode
*
* @see @ref dbtestactions
*/
DBCORE_API void testdbPutFieldOk(const char* pv, int dbrType, ...);
epicsShareFunc void testdbGetFieldEqual(const char* pv, int dbrType, ...);
epicsShareFunc void testdbVGetFieldEqual(const char* pv, short dbrType, va_list ap);
/** Assert that a dbPutField() operation will fail with a certain S_\* code
*
* @see @ref dbtestactions
*/
DBCORE_API void testdbPutFieldFail(long status, const char* pv, int dbrType, ...);
epicsShareFunc void testdbPutArrFieldOk(const char* pv, short dbrType, unsigned long count, const void *pbuf);
/** Assert that a dbPutField() scalar operation will complete successfully.
*
* @see @ref dbtestactions
*/
DBCORE_API long testdbVPutField(const char* pv, short dbrType, va_list ap);
/** Assert that a dbGetField() scalar operation will complete successfully, with the provided value.
*
* @code
* testdbGetFieldEqual("some.TPRO", DBF_LONG, 0);
* @endcode
*
* @see @ref dbtestactions
*/
DBCORE_API void testdbGetFieldEqual(const char* pv, int dbrType, ...);
/** Assert that a dbGetField() scalar operation will complete successfully, with the provided value.
*
* @see @ref dbtestactions
*/
DBCORE_API void testdbVGetFieldEqual(const char* pv, short dbrType, va_list ap);
/** Assert that a dbPutField() array operation will complete successfully.
*
* @param pv a PV name, possibly including filter expression
* @param a DBF_\* type code (cf. dbfType in dbFldTypes.h)
* @param count Number of elements in pbuf array
* @param pbuf Array of values to write
*
* @code
* static const epicsUInt32 putval[] = {1,2,3};
* testdbVGetFieldEqual("some:wf", DBF_ULONG, NELEMENTS(putval), putval);
* @endcode
*
* @see @ref dbtestactions
*/
DBCORE_API void testdbPutArrFieldOk(const char* pv, short dbrType, unsigned long count, const void *pbuf);
/**
* @param pv PV name string
@@ -75,91 +127,215 @@ epicsShareFunc void testdbPutArrFieldOk(const char* pv, short dbrType, unsigned
* nRequest < pbufcnt always fails.
* nRequest ==pbufcnt checks prefix (actual may be longer than expected)
*/
epicsShareFunc void testdbGetArrFieldEqual(const char* pv, short dbfType, long nRequest, unsigned long pbufcnt, const void *pbuf);
DBCORE_API void testdbGetArrFieldEqual(const char* pv, short dbfType, long nRequest, unsigned long pbufcnt, const void *pbuf);
epicsShareFunc dbCommon* testdbRecordPtr(const char* pv);
/** Obtain pointer to record.
*
* Calls testAbort() on failure. Will never return NULL.
*
* @note Remember to dbScanLock() when accessing mutable fields.
*/
DBCORE_API dbCommon* testdbRecordPtr(const char* pv);
typedef struct testMonitor testMonitor;
/* Begin monitoring the named PV for changes */
epicsShareFunc testMonitor* testMonitorCreate(const char* pvname, unsigned dbe_mask, unsigned opt);
/* End monitoring */
epicsShareFunc void testMonitorDestroy(testMonitor*);
/* Return immediately if it has been updated since create, last wait,
/** Setup monitoring the named PV for changes */
DBCORE_API testMonitor* testMonitorCreate(const char* pvname, unsigned dbe_mask, unsigned opt);
/** Stop monitoring */
DBCORE_API void testMonitorDestroy(testMonitor*);
/** Return immediately if it has been updated since create, last wait,
* or reset (count w/ reset=1).
* Otherwise, block until the value of the target PV is updated.
*/
epicsShareFunc void testMonitorWait(testMonitor*);
/* Return the number of monitor events which have occured since create,
DBCORE_API void testMonitorWait(testMonitor*);
/** Return the number of monitor events which have occured since create,
* or a pervious reset (called reset=1).
* Calling w/ reset=0 only returns the count.
* Calling w/ reset=1 resets the count to zero and ensures that the next
* wait will block unless subsequent events occur. Returns the previous
* count.
*/
epicsShareFunc unsigned testMonitorCount(testMonitor*, unsigned reset);
DBCORE_API unsigned testMonitorCount(testMonitor*, unsigned reset);
/** Synchronize the shared callback queues.
*
* Block until all callback queue jobs which were queued, or running,
* have completed.
*/
epicsShareFunc void testSyncCallback(void);
DBCORE_API void testSyncCallback(void);
/** Global mutex for use by test code.
/** Lock Global convenience mutex for use by test code.
*
* This utility mutex is intended to be used to avoid races in situations
* where some other syncronization primitive is being destroyed (epicsEvent,
* epicsMutex, ...).
*
* For example. The following has a subtle race where the event may be
* destroyed (free()'d) before the call to epicsEventMustSignal() has
* returned. On some targets this leads to a use after free() error.
*
@code
epicsEventId evt;
void thread1() {
evt = epicsEventMustCreate(...);
// spawn thread2()
epicsEventMustWait(evt);
epicsEventDestroy(evt);
}
// ...
void thread2() {
epicsEventMustSignal(evt);
}
@endcode
*
* One way to avoid this race is to use a global mutex to ensure
* that epicsEventMustSignal() has returned before destroying
* the event.
*
@code
epicsEventId evt;
void thread1() {
evt = epicsEventMustCreate(...);
// spawn thread2()
epicsEventMustWait(evt);
testGlobalLock(); // <-- added
epicsEventDestroy(evt);
testGlobalUnlock(); // <-- added
}
// ...
void thread2() {
testGlobalLock(); // <-- added
epicsEventMustSignal(evt);
testGlobalUnlock(); // <-- added
}
@endcode
*
* This must be a global mutex to avoid simply shifting the race
* from the event to a locally allocated mutex.
* @see @ref dbtestmutex
*/
epicsShareFunc void testGlobalLock(void);
epicsShareFunc void testGlobalUnlock(void);
DBCORE_API void testGlobalLock(void);
/** Unlock Global convenience mutex for use by test code.
*
* @see @ref dbtestmutex
*/
DBCORE_API void testGlobalUnlock(void);
#ifdef __cplusplus
}
#endif
/** @page dbunittest Unit testing of record processing
*
* @see @ref epicsUnitTest.h
*
* @section dbtestskel Test skeleton
*
* For the impatient, the skeleton of a test:
*
* @code
* #include <dbUnitTest.h>
*
* int mytest_registerRecordDeviceDriver(DBBASE *pbase);
* void testCase(void) {
* testdbPrepare();
* testdbReadDatabase("mytest.dbd", 0, 0);
* mytest_registerRecordDeviceDriver(pdbbase);
* testdbReadDatabase("some.db", 0, "VAR=value");
* testIocInitOk();
* // database running ...
* testIocShutdownOk();
* testdbCleanup();
* }
*
* MAIN(mytestmain) {
* testPlan(0);
* testCase();
* testCase(); // may be repeated if desirable.
* return testDone();
* }
* @endcode
*
* @code
* TARGETS += $(COMMON_DIR)/mytest.dbd
* DBDDEPENDS_FILES += mytest.dbd$(DEP)
* TESTFILES += $(COMMON_DIR)/mytest.dbd
* mytest_DBD += base.dbd
* mytest_DBD += someother.dbd
*
* TESTPROD_HOST += mytest
* mytest_SRCS += mytestmain.c # see above
* mytest_SRCS += mytest_registerRecordDeviceDriver.cpp
* TESTFILES += some.db
* @endcode
*
* @section dbtestactions Actions
*
* Several helper functions are provided to interact with a running database.
*
* @li testdbPutFieldOk()
* @li testdbPutFieldFail()
* @li testdbPutArrFieldOk()
* @li testdbVPutField()
* @li testdbGetFieldEqual()
* @li testdbVGetFieldEqual()
*
* Correct argument types must be used with var-arg functions.
*
* @li int for DBR_UCHAR, DBR_CHAR, DBR_USHORT, DBR_SHORT, DBR_LONG
* @li unsigned int for DBR_ULONG
* @li long long for DBF_INT64
* @li unsigned long long for DBF_UINT64
* @li double for DBR_FLOAT and DBR_DOUBLE
* @li const char* for DBR_STRING
*
* @see enum dbfType in dbFldTypes.h
*
* @code
* testdbPutFieldOk("pvname", DBF_ULONG, (unsigned int)5);
* testdbPutFieldOk("pvname", DBF_FLOAT, (double)4.1);
* testdbPutFieldOk("pvname", DBF_STRING, "hello world");
* @endcode
*
* @section dbtestmonitor Monitoring for changes
*
* When Put and Get aren't sufficient, testMonitor may help to setup and monitor for changes.
*
* @li testMonitorCreate()
* @li testMonitorDestroy()
* @li testMonitorWait()
* @li testMonitorCount()
*
* @section dbtestsync Synchronizing
*
* Helpers to synchronize with some database worker threads
*
* @li testSyncCallback()
*
* @section dbtestmutex Global mutex for use by test code.
*
* This utility mutex is intended to be used to avoid races in situations
* where some other synchronization primitive is being destroyed (epicsEvent,
* epicsMutex, ...) and use of epicsThreadMustJoin() is impractical.
*
* For example. The following has a subtle race where the event may be
* destroyed (free()'d) before the call to epicsEventMustSignal() has
* returned. On some targets this leads to a use after free() error.
*
* @code
* epicsEventId evt;
* void thread1() {
* evt = epicsEventMustCreate(...);
* // spawn thread2()
* epicsEventMustWait(evt);
* epicsEventDestroy(evt); // <- Racer
* }
* // ...
* void thread2() {
* epicsEventMustSignal(evt); // <- Racer
* }
* @endcode
*
* When possible, the best way to avoid this race would be to join the worker
* before destroying the event.
*
* @code
* epicsEventId evt;
* void thread1() {
* epicsThreadOpts opts = EPICS_THREAD_OPTS_INIT;
* epicsThreadId t2;
* opts.joinable = 1;
* evt = epicsEventMustCreate(...);
* t2 = epicsThreadCreateOpt("thread2", &thread2, NULL, &opts);
* assert(t2);
* epicsEventMustWait(evt);
* epicsThreadMustJoin(t2);
* epicsEventDestroy(evt);
* }
* void thread2() {
* epicsEventMustSignal(evt);
* }
* @endcode
*
* Another way to avoid this race is to use a global mutex to ensure
* that epicsEventMustSignal() has returned before destroying the event.
* testGlobalLock() and testGlobalUnlock() provide access to such a mutex.
*
* @code
* epicsEventId evt;
* void thread1() {
* evt = epicsEventMustCreate(...);
* // spawn thread2()
* epicsEventMustWait(evt);
* testGlobalLock(); // <-- added
* epicsEventDestroy(evt);
* testGlobalUnlock(); // <-- added
* }
* // ...
* void thread2() {
* testGlobalLock(); // <-- added
* epicsEventMustSignal(evt);
* testGlobalUnlock(); // <-- added
* }
* @endcode
*
* This must be a global mutex to avoid simply shifting the race
* from the event to a locally allocated mutex.
*/
#endif // EPICSUNITTESTDB_H
-1
View File
@@ -33,7 +33,6 @@
#include "db_access.h"
#undef db_accessHFORdb_accessC
#define epicsExportSharedSymbols
#include "dbAccessDefs.h"
#include "db_access_routines.h"
#include "dbBase.h"
@@ -20,21 +20,21 @@
extern "C" {
#endif
#include "shareLib.h"
#include "dbCoreAPI.h"
epicsShareExtern struct dbBase *pdbbase;
epicsShareExtern volatile int interruptAccept;
DBCORE_API extern struct dbBase *pdbbase;
DBCORE_API extern volatile int interruptAccept;
/*
* Adaptors for db_access users
*/
epicsShareFunc struct dbChannel * dbChannel_create(const char *pname);
epicsShareFunc int dbChannel_get(struct dbChannel *chan,
DBCORE_API struct dbChannel * dbChannel_create(const char *pname);
DBCORE_API int dbChannel_get(struct dbChannel *chan,
int buffer_type, void *pbuffer, long no_elements, void *pfl);
epicsShareFunc int dbChannel_put(struct dbChannel *chan, int src_type,
DBCORE_API int dbChannel_put(struct dbChannel *chan, int src_type,
const void *psrc, long no_elements);
epicsShareFunc int dbChannel_get_count(struct dbChannel *chan,
DBCORE_API int dbChannel_get_count(struct dbChannel *chan,
int buffer_type, void *pbuffer, long *nRequest, void *pfl);
+9 -9
View File
@@ -16,29 +16,29 @@
extern "C" {
#endif
#include "shareLib.h"
#include "dbCoreAPI.h"
#include "dbAddr.h"
epicsShareExtern struct dbBase *pdbbase;
epicsShareExtern volatile int interruptAccept;
DBCORE_API extern struct dbBase *pdbbase;
DBCORE_API extern volatile int interruptAccept;
/*Definitions that allow old database access to use new conversion routines*/
#define newDBF_DEVICE 13
#define newDBR_ENUM 11
epicsShareExtern long (*dbGetConvertRoutine[newDBF_DEVICE+1][newDBR_ENUM+1])
DBCORE_API extern long (*dbGetConvertRoutine[newDBF_DEVICE+1][newDBR_ENUM+1])
(struct dbAddr *paddr, void *pbuffer,long nRequest,
long no_elements, long offset);
epicsShareExtern long (*dbPutConvertRoutine[newDBR_ENUM+1][newDBF_DEVICE+1])
DBCORE_API extern long (*dbPutConvertRoutine[newDBR_ENUM+1][newDBF_DEVICE+1])
(struct dbAddr *paddr, const void *pbuffer,long nRequest,
long no_elements, long offset);
epicsShareExtern long (*dbFastGetConvertRoutine[newDBF_DEVICE+1][newDBR_ENUM+1])
DBCORE_API extern long (*dbFastGetConvertRoutine[newDBF_DEVICE+1][newDBR_ENUM+1])
(const void *from, void *to, dbAddr *paddr);
epicsShareExtern long (*dbFastPutConvertRoutine[newDBR_ENUM+1][newDBF_DEVICE+1])
DBCORE_API extern long (*dbFastPutConvertRoutine[newDBR_ENUM+1][newDBF_DEVICE+1])
(const void *from, void *to, dbAddr *paddr);
/*Conversion between old and new DBR types*/
epicsShareExtern unsigned short dbDBRoldToDBFnew[DBR_DOUBLE+1];
epicsShareExtern unsigned short dbDBRnewToDBRold[newDBR_ENUM+1];
DBCORE_API extern unsigned short dbDBRoldToDBFnew[DBR_DOUBLE+1];
DBCORE_API extern unsigned short dbDBRnewToDBRold[newDBR_ENUM+1];
#ifdef DB_CONVERT_GBLSOURCE
unsigned short dbDBRoldToDBFnew[DBR_DOUBLE+1] = {
0, /*DBR_STRING to DBF_STRING*/
@@ -109,10 +109,14 @@ typedef struct db_field_log {
unsigned int type:1; /* type (union) selector */
/* ctx is used for all types */
unsigned int ctx:1; /* context (operation type) */
/* only for dbfl_context_event */
unsigned char mask; /* DBE_* mask */
/* the following are used for value and reference types */
epicsTimeStamp time; /* Time stamp */
epicsUTag utag;
unsigned short stat; /* Alarm Status */
unsigned short sevr; /* Alarm Severity */
char amsg[40];
short field_type; /* DBF type of data */
short field_size; /* Size of a single element */
long no_elements; /* No of valid array elements */
-1
View File
@@ -24,7 +24,6 @@
#include "errlog.h"
#include "epicsEvent.h"
#define epicsExportSharedSymbols
#include "db_access_routines.h"
#include "dbChannel.h"
#include "dbCommon.h"
+4 -4
View File
@@ -11,15 +11,15 @@
#ifndef INCLdb_testh
#define INCLdb_testh
#include "shareLib.h"
#include "dbCoreAPI.h"
#ifdef __cplusplus
extern "C" {
#endif
epicsShareFunc int gft(const char *pname);
epicsShareFunc int pft(const char *pname, const char *pvalue);
epicsShareFunc int tpn(const char *pname, const char *pvalue);
DBCORE_API int gft(const char *pname);
DBCORE_API int pft(const char *pname, const char *pvalue);
DBCORE_API int tpn(const char *pname, const char *pvalue);
#ifdef __cplusplus
}
#endif
+35 -3
View File
@@ -24,12 +24,12 @@
#include "epicsMath.h"
#include "epicsPrint.h"
#include "epicsStdlib.h"
#include "epicsStdio.h"
#include "epicsTime.h"
#include "errlog.h"
#include "caeventmask.h"
#define epicsExportSharedSymbols
#include "dbAccessDefs.h"
#include "dbStaticLib.h"
#include "dbAddr.h"
@@ -185,6 +185,11 @@ unsigned short recGblResetAlarms(void *precord)
if (new_sevr > INVALID_ALARM)
new_sevr = INVALID_ALARM;
if(strcmp(pdbc->namsg, pdbc->amsg)!=0) {
strcpy(pdbc->amsg, pdbc->namsg);
stat_mask = DBE_ALARM;
}
pdbc->stat = new_stat;
pdbc->sevr = new_sevr;
pdbc->nsta = 0;
@@ -199,6 +204,7 @@ unsigned short recGblResetAlarms(void *precord)
}
if (stat_mask) {
db_post_events(pdbc, &pdbc->stat, stat_mask);
db_post_events(pdbc, &pdbc->amsg, stat_mask);
val_mask = DBE_ALARM;
if (!pdbc->ackt || new_sevr >= pdbc->acks) {
@@ -212,18 +218,44 @@ unsigned short recGblResetAlarms(void *precord)
}
return val_mask;
}
int recGblSetSevrMsg(void *precord, epicsEnum16 new_stat,
epicsEnum16 new_sevr,
const char *msg, ...)
{
int ret;
va_list args;
va_start(args, msg);
ret = recGblSetSevrVMsg(precord, new_stat, new_sevr, msg, args);
va_end(args);
return ret;
}
int recGblSetSevr(void *precord, epicsEnum16 new_stat, epicsEnum16 new_sevr)
int recGblSetSevrVMsg(void *precord, epicsEnum16 new_stat,
epicsEnum16 new_sevr,
const char *msg, va_list args)
{
struct dbCommon *prec = precord;
if (prec->nsev < new_sevr) {
prec->nsta = new_stat;
prec->nsev = new_sevr;
if(msg) {
epicsVsnprintf(prec->namsg, sizeof(prec->namsg)-1, msg, args);
prec->namsg[sizeof(prec->namsg)-1] = '\0';
} else {
prec->namsg[0] = '\0';
}
prec->namsg[sizeof(prec->namsg)-1] = '\0';
return TRUE;
}
return FALSE;
}
int recGblSetSevr(void *precord, epicsEnum16 new_stat, epicsEnum16 new_sevr)
{
return recGblSetSevrMsg(precord, new_stat, new_sevr, NULL);
}
void recGblInheritSevr(int msMode, void *precord, epicsEnum16 stat,
epicsEnum16 sevr)
{
@@ -272,7 +304,7 @@ void recGblGetTimeStampSimm(void *pvoid, const epicsEnum16 simm, struct link *si
if (!dbLinkIsConstant(plink)) {
if (plink->flags & DBLINK_FLAG_TSELisTIME) {
if (dbGetTimeStamp(plink, &prec->time))
if (dbGetTimeStampTag(plink, &prec->time, &prec->utag))
errlogPrintf("recGblGetTimeStamp: dbGetTimeStamp failed for %s.TSEL\n",
prec->name);
return;
+38 -21
View File
@@ -15,13 +15,24 @@
#ifndef INCrecGblh
#define INCrecGblh 1
#include <stdarg.h>
#include "compilerDependencies.h"
#include "epicsTypes.h"
#include "shareLib.h"
#include "dbCoreAPI.h"
#ifdef __cplusplus
extern "C" {
#endif
/** Feature test macro for alarm message (AMSG) field and support
*
* Covers addition of dbCommon::amsg, recGblSetSevrMsg(), lset::getAlarmMsg()
*
* @since UNRELEASED
*/
#define HAS_ALARM_MESSAGE 1
/*************************************************************************/
/* Structures needed for args */
@@ -37,43 +48,49 @@ struct dbCommon;
typedef void (*RECGBL_ALARM_HOOK_ROUTINE)(struct dbCommon *prec,
epicsEnum16 prev_sevr, epicsEnum16 prev_stat);
epicsShareExtern RECGBL_ALARM_HOOK_ROUTINE recGblAlarmHook;
DBCORE_API extern RECGBL_ALARM_HOOK_ROUTINE recGblAlarmHook;
/* Global Record Support Routines */
epicsShareFunc void recGblDbaddrError(long status, const struct dbAddr *paddr,
DBCORE_API void recGblDbaddrError(long status, const struct dbAddr *paddr,
const char *pcaller_name);
epicsShareFunc void recGblRecordError(long status, void *precord,
DBCORE_API void recGblRecordError(long status, void *precord,
const char *pcaller_name);
epicsShareFunc void recGblRecSupError(long status, const struct dbAddr *paddr,
DBCORE_API void recGblRecSupError(long status, const struct dbAddr *paddr,
const char *pcaller_name, const char *psupport_name);
epicsShareFunc void recGblGetGraphicDouble(const struct dbAddr *paddr,
DBCORE_API void recGblGetGraphicDouble(const struct dbAddr *paddr,
struct dbr_grDouble *pgd);
epicsShareFunc void recGblGetControlDouble(
DBCORE_API void recGblGetControlDouble(
const struct dbAddr *paddr, struct dbr_ctrlDouble *pcd);
epicsShareFunc void recGblGetAlarmDouble(const struct dbAddr *paddr,
DBCORE_API void recGblGetAlarmDouble(const struct dbAddr *paddr,
struct dbr_alDouble *pad);
epicsShareFunc void recGblGetPrec(const struct dbAddr *paddr,
DBCORE_API void recGblGetPrec(const struct dbAddr *paddr,
long *pprecision);
epicsShareFunc int recGblInitConstantLink(struct link *plink,
DBCORE_API int recGblInitConstantLink(struct link *plink,
short dbftype, void *pdest);
epicsShareFunc unsigned short recGblResetAlarms(void *precord);
epicsShareFunc int recGblSetSevr(void *precord, epicsEnum16 new_stat,
DBCORE_API unsigned short recGblResetAlarms(void *precord);
DBCORE_API int recGblSetSevr(void *precord, epicsEnum16 new_stat,
epicsEnum16 new_sevr);
epicsShareFunc void recGblInheritSevr(int msMode, void *precord, epicsEnum16 stat,
DBCORE_API void recGblInheritSevr(int msMode, void *precord, epicsEnum16 stat,
epicsEnum16 sevr);
epicsShareFunc void recGblFwdLink(void *precord);
epicsShareFunc void recGblGetTimeStamp(void *precord);
epicsShareFunc void recGblGetTimeStampSimm(void *prec, const epicsEnum16 simm, struct link *siol);
epicsShareFunc void recGblCheckDeadband(epicsFloat64 *poldval, const epicsFloat64 newval,
DBCORE_API int recGblSetSevrMsg(void *precord, epicsEnum16 new_stat,
epicsEnum16 new_sevr,
const char *msg, ...) EPICS_PRINTF_STYLE(4,5);
DBCORE_API int recGblSetSevrVMsg(void *precord, epicsEnum16 new_stat,
epicsEnum16 new_sevr,
const char *msg, va_list args);
DBCORE_API void recGblFwdLink(void *precord);
DBCORE_API void recGblGetTimeStamp(void *precord);
DBCORE_API void recGblGetTimeStampSimm(void *prec, const epicsEnum16 simm, struct link *siol);
DBCORE_API void recGblCheckDeadband(epicsFloat64 *poldval, const epicsFloat64 newval,
const epicsFloat64 deadband, unsigned *monitor_mask, const unsigned add_mask);
epicsShareFunc void recGblSaveSimm(const epicsEnum16 sscn,
DBCORE_API void recGblSaveSimm(const epicsEnum16 sscn,
epicsEnum16 *poldsimm, const epicsEnum16 simm);
epicsShareFunc void recGblCheckSimm(struct dbCommon *prec, epicsEnum16 *psscn,
DBCORE_API void recGblCheckSimm(struct dbCommon *prec, epicsEnum16 *psscn,
const epicsEnum16 oldsimm, const epicsEnum16 simm);
epicsShareFunc void recGblInitSimm(struct dbCommon *prec, epicsEnum16 *psscn,
DBCORE_API void recGblInitSimm(struct dbCommon *prec, epicsEnum16 *psscn,
epicsEnum16 *poldsimm, epicsEnum16 *psimm, struct link *psiml);
epicsShareFunc long recGblGetSimm(struct dbCommon *prec, epicsEnum16 *psscn,
DBCORE_API long recGblGetSimm(struct dbCommon *prec, epicsEnum16 *psscn,
epicsEnum16 *poldsimm, epicsEnum16 *psimm, struct link *psiml);
#ifdef __cplusplus
@@ -14,7 +14,7 @@
#ifndef INCdbFldTypesh
#define INCdbFldTypesh 1
#include "shareLib.h"
#include "dbCoreAPI.h"
#ifdef __cplusplus
extern "C" {
@@ -48,7 +48,7 @@ typedef struct mapdbfType{
dbfType value;
}mapdbfType;
epicsShareExtern mapdbfType pamapdbfType[];
DBCORE_API extern mapdbfType pamapdbfType[];
#ifdef DBFLDTYPES_GBLSOURCE
mapdbfType pamapdbfType[DBF_NTYPES] = {
{"DBF_STRING",DBF_STRING},
@@ -28,7 +28,6 @@
#include "gpHash.h"
#include "macLib.h"
#define epicsExportSharedSymbols
#include "dbBase.h"
#include "dbFldTypes.h"
#include "dbStaticLib.h"
@@ -21,7 +21,6 @@
#include "epicsStdio.h"
#include "epicsString.h"
#define epicsExportSharedSymbols
#include "dbBase.h"
#include "dbStaticLib.h"
#include "dbStaticPvt.h"
@@ -10,7 +10,6 @@
#include "iocsh.h"
#define epicsExportSharedSymbols
#include "dbStaticIocRegister.h"
#include "dbStaticLib.h"
#include "dbStaticPvt.h"
@@ -34,8 +33,10 @@ static void dbDumpPathCallFunc(const iocshArgBuf *args)
static const iocshArg dbDumpRecordArg2 = { "interest level",iocshArgInt};
static const iocshArg * const dbDumpRecordArgs[] =
{&argPdbbase, &argRecType, &dbDumpRecordArg2};
static const iocshFuncDef dbDumpRecordFuncDef =
{"dbDumpRecord",3,dbDumpRecordArgs};
static const iocshFuncDef dbDumpRecordFuncDef = {"dbDumpRecord",3,dbDumpRecordArgs,
"Dump information about the recordTypeName with 'interest level' details.\n"
"Example: dbDumpRecord ai 2\n"
"If last argument(s) are missing, dump all recordType information in the database.\n"};
static void dbDumpRecordCallFunc(const iocshArgBuf *args)
{
dbDumpRecord(*iocshPpdbbase,args[1].sval,args[2].ival);
@@ -45,7 +46,10 @@ static void dbDumpRecordCallFunc(const iocshArgBuf *args)
static const iocshArg dbDumpMenuArg1 = { "menuName",iocshArgString};
static const iocshArg * const dbDumpMenuArgs[] = {
&argPdbbase, &dbDumpMenuArg1};
static const iocshFuncDef dbDumpMenuFuncDef = {"dbDumpMenu",2,dbDumpMenuArgs};
static const iocshFuncDef dbDumpMenuFuncDef = {"dbDumpMenu",2,dbDumpMenuArgs,
"Dump information about the available menuNames and choices defined withing each menuName.\n"
"Example: dbDumpMenu pdbbase menuAlarmStat \n"
"If last argument(s) are missing, dump all menuNames information in the database.\n"};
static void dbDumpMenuCallFunc(const iocshArgBuf *args)
{
dbDumpMenu(*iocshPpdbbase,args[1].sval);
@@ -54,8 +58,10 @@ static void dbDumpMenuCallFunc(const iocshArgBuf *args)
/* dbDumpRecordType */
static const iocshArg * const dbDumpRecordTypeArgs[] =
{&argPdbbase, &argRecType};
static const iocshFuncDef dbDumpRecordTypeFuncDef =
{"dbDumpRecordType",2,dbDumpRecordTypeArgs};
static const iocshFuncDef dbDumpRecordTypeFuncDef = {"dbDumpRecordType",2,dbDumpRecordTypeArgs,
"Dump information about available fields in the recortTypeName sorted by index and name.\n"
"Example: dbDumpRecordType pdbbase calcout\n"
"If last argument(s) are missing, dump fields information for all records in the database.\n"};
static void dbDumpRecordTypeCallFunc(const iocshArgBuf *args)
{
dbDumpRecordType(*iocshPpdbbase,args[1].sval);
@@ -65,7 +71,11 @@ static void dbDumpRecordTypeCallFunc(const iocshArgBuf *args)
static const iocshArg dbDumpFieldArg2 = { "fieldName",iocshArgString};
static const iocshArg * const dbDumpFieldArgs[] =
{&argPdbbase, &argRecType,&dbDumpFieldArg2};
static const iocshFuncDef dbDumpFieldFuncDef = {"dbDumpField",3,dbDumpFieldArgs};
static const iocshFuncDef dbDumpFieldFuncDef = {"dbDumpField",3,dbDumpFieldArgs,
"Dump information about the fieldName in the recordTypeName.\n"
"Example: dbDumpField pdbbase calcout A\n"
"If last argument(s) are missing, dump information\n"
"about all fieldName in all recordTypeName in the database.\n"};
static void dbDumpFieldCallFunc(const iocshArgBuf *args)
{
dbDumpField(*iocshPpdbbase,args[1].sval,args[2].sval);
@@ -74,7 +84,11 @@ static void dbDumpFieldCallFunc(const iocshArgBuf *args)
/* dbDumpDevice */
static const iocshArg * const dbDumpDeviceArgs[] = {
&argPdbbase, &argRecType};
static const iocshFuncDef dbDumpDeviceFuncDef = {"dbDumpDevice",2,dbDumpDeviceArgs};
static const iocshFuncDef dbDumpDeviceFuncDef = {"dbDumpDevice",2,dbDumpDeviceArgs,
"Dump device support information for the recordTypeName.\n"
"Example: dbDumpDevice pdbbase ai\n"
"If last argument(s) are missing, dump device support\n"
"information for all records in the database.\n"};
static void dbDumpDeviceCallFunc(const iocshArgBuf *args)
{
dbDumpDevice(*iocshPpdbbase,args[1].sval);
@@ -82,7 +96,9 @@ static void dbDumpDeviceCallFunc(const iocshArgBuf *args)
/* dbDumpDriver */
static const iocshArg * const dbDumpDriverArgs[] = { &argPdbbase};
static const iocshFuncDef dbDumpDriverFuncDef = {"dbDumpDriver",1,dbDumpDriverArgs};
static const iocshFuncDef dbDumpDriverFuncDef = {"dbDumpDriver",1,dbDumpDriverArgs,
"Dump device support information.\n"
"Example: dbDumpDriver pdbbase\n"};
static void dbDumpDriverCallFunc(const iocshArgBuf *args)
{
dbDumpDriver(*iocshPpdbbase);
@@ -98,7 +114,10 @@ static void dbDumpLinkCallFunc(const iocshArgBuf *args)
/* dbDumpRegistrar */
static const iocshArg * const dbDumpRegistrarArgs[] = { &argPdbbase};
static const iocshFuncDef dbDumpRegistrarFuncDef = {"dbDumpRegistrar",1,dbDumpRegistrarArgs};
static const iocshFuncDef dbDumpRegistrarFuncDef = {"dbDumpRegistrar",1,dbDumpRegistrarArgs,
"Dump list of registered functions including ones for subroutine records,\n"
"and ones that can be invoked from iocsh.\n"
"Example: dbDumpRegistrar pdbbase\n"};
static void dbDumpRegistrarCallFunc(const iocshArgBuf *args)
{
dbDumpRegistrar(*iocshPpdbbase);
@@ -106,7 +125,9 @@ static void dbDumpRegistrarCallFunc(const iocshArgBuf *args)
/* dbDumpFunction */
static const iocshArg * const dbDumpFunctionArgs[] = { &argPdbbase};
static const iocshFuncDef dbDumpFunctionFuncDef = {"dbDumpFunction",1,dbDumpFunctionArgs};
static const iocshFuncDef dbDumpFunctionFuncDef = {"dbDumpFunction",1,dbDumpFunctionArgs,
"Dump list of registered subroutine functions.\n"
"Example: dbDumpFunction pddbase\n"};
static void dbDumpFunctionCallFunc(const iocshArgBuf *args)
{
dbDumpFunction(*iocshPpdbbase);
@@ -114,7 +135,9 @@ static void dbDumpFunctionCallFunc(const iocshArgBuf *args)
/* dbDumpVariable */
static const iocshArg * const dbDumpVariableArgs[] = { &argPdbbase};
static const iocshFuncDef dbDumpVariableFuncDef = {"dbDumpVariable",1,dbDumpVariableArgs};
static const iocshFuncDef dbDumpVariableFuncDef = {"dbDumpVariable",1,dbDumpVariableArgs,
"Dump list of variables used in the database.\n"
"Example: dbDumpVariable pddbase\n"};
static void dbDumpVariableCallFunc(const iocshArgBuf *args)
{
dbDumpVariable(*iocshPpdbbase);
@@ -124,8 +147,7 @@ static void dbDumpVariableCallFunc(const iocshArgBuf *args)
static const iocshArg dbDumpBreaktableArg1 = { "tableName",iocshArgString};
static const iocshArg * const dbDumpBreaktableArgs[] =
{&argPdbbase,&dbDumpBreaktableArg1};
static const iocshFuncDef dbDumpBreaktableFuncDef =
{"dbDumpBreaktable",2,dbDumpBreaktableArgs};
static const iocshFuncDef dbDumpBreaktableFuncDef = {"dbDumpBreaktable",2,dbDumpBreaktableArgs};
static void dbDumpBreaktableCallFunc(const iocshArgBuf *args)
{
dbDumpBreaktable(*iocshPpdbbase,args[1].sval);
@@ -145,8 +167,7 @@ static void dbPvdDumpCallFunc(const iocshArgBuf *args)
static const iocshArg dbPvdTableSizeArg0 = { "size",iocshArgInt};
static const iocshArg * const dbPvdTableSizeArgs[1] =
{&dbPvdTableSizeArg0};
static const iocshFuncDef dbPvdTableSizeFuncDef =
{"dbPvdTableSize",1,dbPvdTableSizeArgs};
static const iocshFuncDef dbPvdTableSizeFuncDef = {"dbPvdTableSize",1,dbPvdTableSizeArgs};
static void dbPvdTableSizeCallFunc(const iocshArgBuf *args)
{
dbPvdTableSize(args[0].ival);
@@ -154,8 +175,7 @@ static void dbPvdTableSizeCallFunc(const iocshArgBuf *args)
/* dbReportDeviceConfig */
static const iocshArg * const dbReportDeviceConfigArgs[] = {&argPdbbase};
static const iocshFuncDef dbReportDeviceConfigFuncDef = {
"dbReportDeviceConfig",1,dbReportDeviceConfigArgs};
static const iocshFuncDef dbReportDeviceConfigFuncDef = {"dbReportDeviceConfig",1,dbReportDeviceConfigArgs};
static void dbReportDeviceConfigCallFunc(const iocshArgBuf *args)
{
dbReportDeviceConfig(*iocshPpdbbase,stdout);
@@ -11,13 +11,13 @@
#ifndef INC_dbStaticIocRegister_H
#define INC_dbStaticIocRegister_H
#include "shareLib.h"
#include "dbCoreAPI.h"
#ifdef __cplusplus
extern "C" {
#endif
epicsShareFunc void dbStaticIocRegister(void);
DBCORE_API void dbStaticIocRegister(void);
#ifdef __cplusplus
}
@@ -34,7 +34,6 @@
#define DBFLDTYPES_GBLSOURCE
#define SPECIAL_GBLSOURCE
#define epicsExportSharedSymbols
#include "dbChannel.h"
#include "dbFldTypes.h"
#include "dbStaticLib.h"
+115 -115
View File
@@ -18,7 +18,7 @@
#include <stddef.h>
#include <stdio.h>
#include "shareLib.h"
#include "dbCoreAPI.h"
#include "dbFldTypes.h"
#include "dbBase.h"
#include "link.h"
@@ -43,192 +43,192 @@ typedef struct dbEntry {
} DBENTRY;
/* Static database access routines*/
epicsShareFunc DBBASE * dbAllocBase(void);
epicsShareFunc void dbFreeBase(DBBASE *pdbbase);
epicsShareFunc DBENTRY * dbAllocEntry(DBBASE *pdbbase);
epicsShareFunc void dbFreeEntry(DBENTRY *pdbentry);
epicsShareFunc void dbInitEntry(DBBASE *pdbbase,
DBCORE_API DBBASE * dbAllocBase(void);
DBCORE_API void dbFreeBase(DBBASE *pdbbase);
DBCORE_API DBENTRY * dbAllocEntry(DBBASE *pdbbase);
DBCORE_API void dbFreeEntry(DBENTRY *pdbentry);
DBCORE_API void dbInitEntry(DBBASE *pdbbase,
DBENTRY *pdbentry);
epicsShareFunc void dbFinishEntry(DBENTRY *pdbentry);
epicsShareFunc DBENTRY * dbCopyEntry(DBENTRY *pdbentry);
epicsShareFunc void dbCopyEntryContents(DBENTRY *pfrom,
DBCORE_API void dbFinishEntry(DBENTRY *pdbentry);
DBCORE_API DBENTRY * dbCopyEntry(DBENTRY *pdbentry);
DBCORE_API void dbCopyEntryContents(DBENTRY *pfrom,
DBENTRY *pto);
epicsShareExtern int dbBptNotMonotonic;
DBCORE_API extern int dbBptNotMonotonic;
epicsShareFunc long dbReadDatabase(DBBASE **ppdbbase,
DBCORE_API long dbReadDatabase(DBBASE **ppdbbase,
const char *filename, const char *path, const char *substitutions);
epicsShareFunc long dbReadDatabaseFP(DBBASE **ppdbbase,
DBCORE_API long dbReadDatabaseFP(DBBASE **ppdbbase,
FILE *fp, const char *path, const char *substitutions);
epicsShareFunc long dbPath(DBBASE *pdbbase, const char *path);
epicsShareFunc long dbAddPath(DBBASE *pdbbase, const char *path);
epicsShareFunc char * dbGetPromptGroupNameFromKey(DBBASE *pdbbase,
DBCORE_API long dbPath(DBBASE *pdbbase, const char *path);
DBCORE_API long dbAddPath(DBBASE *pdbbase, const char *path);
DBCORE_API char * dbGetPromptGroupNameFromKey(DBBASE *pdbbase,
const short key);
epicsShareFunc short dbGetPromptGroupKeyFromName(DBBASE *pdbbase,
DBCORE_API short dbGetPromptGroupKeyFromName(DBBASE *pdbbase,
const char *name);
epicsShareFunc long dbWriteRecord(DBBASE *ppdbbase,
DBCORE_API long dbWriteRecord(DBBASE *ppdbbase,
const char *filename, const char *precordTypename, int level);
epicsShareFunc long dbWriteRecordFP(DBBASE *ppdbbase,
DBCORE_API long dbWriteRecordFP(DBBASE *ppdbbase,
FILE *fp, const char *precordTypename, int level);
epicsShareFunc long dbWriteMenu(DBBASE *pdbbase,
DBCORE_API long dbWriteMenu(DBBASE *pdbbase,
const char *filename, const char *menuName);
epicsShareFunc long dbWriteMenuFP(DBBASE *pdbbase,
DBCORE_API long dbWriteMenuFP(DBBASE *pdbbase,
FILE *fp, const char *menuName);
epicsShareFunc long dbWriteRecordType(DBBASE *pdbbase,
DBCORE_API long dbWriteRecordType(DBBASE *pdbbase,
const char *filename, const char *recordTypeName);
epicsShareFunc long dbWriteRecordTypeFP(DBBASE *pdbbase,
DBCORE_API long dbWriteRecordTypeFP(DBBASE *pdbbase,
FILE *fp, const char *recordTypeName);
epicsShareFunc long dbWriteDevice(DBBASE *pdbbase,
DBCORE_API long dbWriteDevice(DBBASE *pdbbase,
const char *filename);
epicsShareFunc long dbWriteDeviceFP(DBBASE *pdbbase, FILE *fp);
epicsShareFunc long dbWriteDriver(DBBASE *pdbbase,
DBCORE_API long dbWriteDeviceFP(DBBASE *pdbbase, FILE *fp);
DBCORE_API long dbWriteDriver(DBBASE *pdbbase,
const char *filename);
epicsShareFunc long dbWriteDriverFP(DBBASE *pdbbase, FILE *fp);
epicsShareFunc long dbWriteLinkFP(DBBASE *pdbbase, FILE *fp);
epicsShareFunc long dbWriteRegistrarFP(DBBASE *pdbbase, FILE *fp);
epicsShareFunc long dbWriteFunctionFP(DBBASE *pdbbase, FILE *fp);
epicsShareFunc long dbWriteVariableFP(DBBASE *pdbbase, FILE *fp);
epicsShareFunc long dbWriteBreaktable(DBBASE *pdbbase,
DBCORE_API long dbWriteDriverFP(DBBASE *pdbbase, FILE *fp);
DBCORE_API long dbWriteLinkFP(DBBASE *pdbbase, FILE *fp);
DBCORE_API long dbWriteRegistrarFP(DBBASE *pdbbase, FILE *fp);
DBCORE_API long dbWriteFunctionFP(DBBASE *pdbbase, FILE *fp);
DBCORE_API long dbWriteVariableFP(DBBASE *pdbbase, FILE *fp);
DBCORE_API long dbWriteBreaktable(DBBASE *pdbbase,
const char *filename);
epicsShareFunc long dbWriteBreaktableFP(DBBASE *pdbbase,
DBCORE_API long dbWriteBreaktableFP(DBBASE *pdbbase,
FILE *fp);
epicsShareFunc long dbFindRecordType(DBENTRY *pdbentry,
DBCORE_API long dbFindRecordType(DBENTRY *pdbentry,
const char *recordTypename);
epicsShareFunc long dbFirstRecordType(DBENTRY *pdbentry);
epicsShareFunc long dbNextRecordType(DBENTRY *pdbentry);
epicsShareFunc char * dbGetRecordTypeName(DBENTRY *pdbentry);
epicsShareFunc int dbGetNRecordTypes(DBENTRY *pdbentry);
epicsShareFunc long dbPutRecordAttribute(DBENTRY *pdbentry,
DBCORE_API long dbFirstRecordType(DBENTRY *pdbentry);
DBCORE_API long dbNextRecordType(DBENTRY *pdbentry);
DBCORE_API char * dbGetRecordTypeName(DBENTRY *pdbentry);
DBCORE_API int dbGetNRecordTypes(DBENTRY *pdbentry);
DBCORE_API long dbPutRecordAttribute(DBENTRY *pdbentry,
const char *name, const char*value);
epicsShareFunc long dbGetRecordAttribute(DBENTRY *pdbentry,
DBCORE_API long dbGetRecordAttribute(DBENTRY *pdbentry,
const char *name);
epicsShareFunc long dbGetAttributePart(DBENTRY *pdbentry,
DBCORE_API long dbGetAttributePart(DBENTRY *pdbentry,
const char **ppname);
epicsShareFunc long dbFirstField(DBENTRY *pdbentry, int dctonly);
epicsShareFunc long dbNextField(DBENTRY *pdbentry, int dctonly);
epicsShareFunc int dbGetNFields(DBENTRY *pdbentry, int dctonly);
epicsShareFunc char * dbGetFieldName(DBENTRY *pdbentry);
epicsShareFunc int dbGetFieldDbfType(DBENTRY *pdbentry);
epicsShareFunc char * dbGetDefault(DBENTRY *pdbentry);
epicsShareFunc char * dbGetPrompt(DBENTRY *pdbentry);
epicsShareFunc int dbGetPromptGroup(DBENTRY *pdbentry);
DBCORE_API long dbFirstField(DBENTRY *pdbentry, int dctonly);
DBCORE_API long dbNextField(DBENTRY *pdbentry, int dctonly);
DBCORE_API int dbGetNFields(DBENTRY *pdbentry, int dctonly);
DBCORE_API char * dbGetFieldName(DBENTRY *pdbentry);
DBCORE_API int dbGetFieldDbfType(DBENTRY *pdbentry);
DBCORE_API char * dbGetDefault(DBENTRY *pdbentry);
DBCORE_API char * dbGetPrompt(DBENTRY *pdbentry);
DBCORE_API int dbGetPromptGroup(DBENTRY *pdbentry);
epicsShareFunc long dbCreateRecord(DBENTRY *pdbentry,
DBCORE_API long dbCreateRecord(DBENTRY *pdbentry,
const char *pname);
epicsShareFunc long dbDeleteRecord(DBENTRY *pdbentry);
epicsShareFunc long dbFreeRecords(DBBASE *pdbbase);
epicsShareFunc long dbFindRecordPart(DBENTRY *pdbentry,
DBCORE_API long dbDeleteRecord(DBENTRY *pdbentry);
DBCORE_API long dbFreeRecords(DBBASE *pdbbase);
DBCORE_API long dbFindRecordPart(DBENTRY *pdbentry,
const char **ppname);
epicsShareFunc long dbFindRecord(DBENTRY *pdbentry,
DBCORE_API long dbFindRecord(DBENTRY *pdbentry,
const char *pname);
epicsShareFunc long dbFirstRecord(DBENTRY *pdbentry);
epicsShareFunc long dbNextRecord(DBENTRY *pdbentry);
epicsShareFunc int dbGetNRecords(DBENTRY *pdbentry);
epicsShareFunc int dbGetNAliases(DBENTRY *pdbentry);
epicsShareFunc char * dbGetRecordName(DBENTRY *pdbentry);
epicsShareFunc long dbCopyRecord(DBENTRY *pdbentry,
DBCORE_API long dbFirstRecord(DBENTRY *pdbentry);
DBCORE_API long dbNextRecord(DBENTRY *pdbentry);
DBCORE_API int dbGetNRecords(DBENTRY *pdbentry);
DBCORE_API int dbGetNAliases(DBENTRY *pdbentry);
DBCORE_API char * dbGetRecordName(DBENTRY *pdbentry);
DBCORE_API long dbCopyRecord(DBENTRY *pdbentry,
const char *newRecordName, int overWriteOK);
epicsShareFunc long dbVisibleRecord(DBENTRY *pdbentry);
epicsShareFunc long dbInvisibleRecord(DBENTRY *pdbentry);
epicsShareFunc int dbIsVisibleRecord(DBENTRY *pdbentry);
DBCORE_API long dbVisibleRecord(DBENTRY *pdbentry);
DBCORE_API long dbInvisibleRecord(DBENTRY *pdbentry);
DBCORE_API int dbIsVisibleRecord(DBENTRY *pdbentry);
epicsShareFunc long dbCreateAlias(DBENTRY *pdbentry,
DBCORE_API long dbCreateAlias(DBENTRY *pdbentry,
const char *paliasName);
epicsShareFunc int dbIsAlias(DBENTRY *pdbentry);
DBCORE_API int dbIsAlias(DBENTRY *pdbentry);
/* Follow alias to actual record */
epicsShareFunc int dbFollowAlias(DBENTRY *pdbentry);
epicsShareFunc long dbDeleteAliases(DBENTRY *pdbentry);
DBCORE_API int dbFollowAlias(DBENTRY *pdbentry);
DBCORE_API long dbDeleteAliases(DBENTRY *pdbentry);
epicsShareFunc long dbFindFieldPart(DBENTRY *pdbentry,
DBCORE_API long dbFindFieldPart(DBENTRY *pdbentry,
const char **ppname);
epicsShareFunc long dbFindField(DBENTRY *pdbentry,
DBCORE_API long dbFindField(DBENTRY *pdbentry,
const char *pfieldName);
epicsShareFunc int dbFoundField(DBENTRY *pdbentry);
epicsShareFunc char * dbGetString(DBENTRY *pdbentry);
epicsShareFunc long dbPutString(DBENTRY *pdbentry,
DBCORE_API int dbFoundField(DBENTRY *pdbentry);
DBCORE_API char * dbGetString(DBENTRY *pdbentry);
DBCORE_API long dbPutString(DBENTRY *pdbentry,
const char *pstring);
epicsShareFunc char * dbVerify(DBENTRY *pdbentry,
DBCORE_API char * dbVerify(DBENTRY *pdbentry,
const char *pstring);
epicsShareFunc int dbIsDefaultValue(DBENTRY *pdbentry);
DBCORE_API int dbIsDefaultValue(DBENTRY *pdbentry);
epicsShareFunc long dbFirstInfo(DBENTRY *pdbentry);
epicsShareFunc long dbNextInfo(DBENTRY *pdbentry);
epicsShareFunc long dbFindInfo(DBENTRY *pdbentry,
DBCORE_API long dbFirstInfo(DBENTRY *pdbentry);
DBCORE_API long dbNextInfo(DBENTRY *pdbentry);
DBCORE_API long dbFindInfo(DBENTRY *pdbentry,
const char *name);
epicsShareFunc long dbNextMatchingInfo(DBENTRY *pdbentry,
DBCORE_API long dbNextMatchingInfo(DBENTRY *pdbentry,
const char *pattern);
epicsShareFunc long dbDeleteInfo(DBENTRY *pdbentry);
epicsShareFunc const char * dbGetInfoName(DBENTRY *pdbentry);
epicsShareFunc const char * dbGetInfoString(DBENTRY *pdbentry);
epicsShareFunc long dbPutInfoString(DBENTRY *pdbentry,
DBCORE_API long dbDeleteInfo(DBENTRY *pdbentry);
DBCORE_API const char * dbGetInfoName(DBENTRY *pdbentry);
DBCORE_API const char * dbGetInfoString(DBENTRY *pdbentry);
DBCORE_API long dbPutInfoString(DBENTRY *pdbentry,
const char *string);
epicsShareFunc long dbPutInfoPointer(DBENTRY *pdbentry,
DBCORE_API long dbPutInfoPointer(DBENTRY *pdbentry,
void *pointer);
epicsShareFunc void * dbGetInfoPointer(DBENTRY *pdbentry);
epicsShareFunc const char * dbGetInfo(DBENTRY *pdbentry,
DBCORE_API void * dbGetInfoPointer(DBENTRY *pdbentry);
DBCORE_API const char * dbGetInfo(DBENTRY *pdbentry,
const char *name);
epicsShareFunc long dbPutInfo(DBENTRY *pdbentry,
DBCORE_API long dbPutInfo(DBENTRY *pdbentry,
const char *name, const char *string);
epicsShareFunc brkTable * dbFindBrkTable(DBBASE *pdbbase,
DBCORE_API brkTable * dbFindBrkTable(DBBASE *pdbbase,
const char *name);
epicsShareFunc const char * dbGetFieldTypeString(int dbfType);
epicsShareFunc int dbFindFieldType(const char *type);
DBCORE_API const char * dbGetFieldTypeString(int dbfType);
DBCORE_API int dbFindFieldType(const char *type);
epicsShareFunc dbMenu * dbFindMenu(DBBASE *pdbbase,
DBCORE_API dbMenu * dbFindMenu(DBBASE *pdbbase,
const char *name);
epicsShareFunc char ** dbGetMenuChoices(DBENTRY *pdbentry);
epicsShareFunc int dbGetMenuIndex(DBENTRY *pdbentry);
epicsShareFunc long dbPutMenuIndex(DBENTRY *pdbentry, int index);
epicsShareFunc int dbGetNMenuChoices(DBENTRY *pdbentry);
epicsShareFunc char * dbGetMenuStringFromIndex(DBENTRY *pdbentry,
DBCORE_API char ** dbGetMenuChoices(DBENTRY *pdbentry);
DBCORE_API int dbGetMenuIndex(DBENTRY *pdbentry);
DBCORE_API long dbPutMenuIndex(DBENTRY *pdbentry, int index);
DBCORE_API int dbGetNMenuChoices(DBENTRY *pdbentry);
DBCORE_API char * dbGetMenuStringFromIndex(DBENTRY *pdbentry,
int index);
epicsShareFunc int dbGetMenuIndexFromString(DBENTRY *pdbentry,
DBCORE_API int dbGetMenuIndexFromString(DBENTRY *pdbentry,
const char *choice);
epicsShareFunc drvSup * dbFindDriver(dbBase *pdbbase,
DBCORE_API drvSup * dbFindDriver(dbBase *pdbbase,
const char *name);
epicsShareFunc char * dbGetRelatedField(DBENTRY *pdbentry);
DBCORE_API char * dbGetRelatedField(DBENTRY *pdbentry);
epicsShareFunc linkSup * dbFindLinkSup(dbBase *pdbbase,
DBCORE_API linkSup * dbFindLinkSup(dbBase *pdbbase,
const char *name);
epicsShareFunc int dbGetNLinks(DBENTRY *pdbentry);
epicsShareFunc long dbGetLinkField(DBENTRY *pdbentry, int index);
DBCORE_API int dbGetNLinks(DBENTRY *pdbentry);
DBCORE_API long dbGetLinkField(DBENTRY *pdbentry, int index);
/* Dump routines */
epicsShareFunc void dbDumpPath(DBBASE *pdbbase);
epicsShareFunc void dbDumpRecord(DBBASE *pdbbase,
DBCORE_API void dbDumpPath(DBBASE *pdbbase);
DBCORE_API void dbDumpRecord(DBBASE *pdbbase,
const char *precordTypename, int level);
epicsShareFunc void dbDumpMenu(DBBASE *pdbbase,
DBCORE_API void dbDumpMenu(DBBASE *pdbbase,
const char *menuName);
epicsShareFunc void dbDumpRecordType(DBBASE *pdbbase,
DBCORE_API void dbDumpRecordType(DBBASE *pdbbase,
const char *recordTypeName);
epicsShareFunc void dbDumpField(DBBASE *pdbbase,
DBCORE_API void dbDumpField(DBBASE *pdbbase,
const char *recordTypeName, const char *fname);
epicsShareFunc void dbDumpDevice(DBBASE *pdbbase,
DBCORE_API void dbDumpDevice(DBBASE *pdbbase,
const char *recordTypeName);
epicsShareFunc void dbDumpDriver(DBBASE *pdbbase);
epicsShareFunc void dbDumpLink(DBBASE *pdbbase);
epicsShareFunc void dbDumpRegistrar(DBBASE *pdbbase);
epicsShareFunc void dbDumpFunction(DBBASE *pdbbase);
epicsShareFunc void dbDumpVariable(DBBASE *pdbbase);
epicsShareFunc void dbDumpBreaktable(DBBASE *pdbbase,
DBCORE_API void dbDumpDriver(DBBASE *pdbbase);
DBCORE_API void dbDumpLink(DBBASE *pdbbase);
DBCORE_API void dbDumpRegistrar(DBBASE *pdbbase);
DBCORE_API void dbDumpFunction(DBBASE *pdbbase);
DBCORE_API void dbDumpVariable(DBBASE *pdbbase);
DBCORE_API void dbDumpBreaktable(DBBASE *pdbbase,
const char *name);
epicsShareFunc void dbPvdDump(DBBASE *pdbbase, int verbose);
epicsShareFunc void dbReportDeviceConfig(DBBASE *pdbbase,
DBCORE_API void dbPvdDump(DBBASE *pdbbase, int verbose);
DBCORE_API void dbReportDeviceConfig(DBBASE *pdbbase,
FILE *report);
/* Misc useful routines*/
#define dbCalloc(nobj,size) callocMustSucceed(nobj,size,"dbCalloc")
#define dbMalloc(size) mallocMustSucceed(size,"dbMalloc")
epicsShareFunc void dbCatString(char **string, int *stringLength,
DBCORE_API void dbCatString(char **string, int *stringLength,
char *pnew, char *separator);
extern int dbStaticDebug;
@@ -66,7 +66,7 @@ long dbInitRecordLinks(dbRecordType *rtyp, struct dbCommon *prec);
/* Parse link string. no record locks needed.
* on success caller must free pinfo->target
*/
epicsShareFunc long dbParseLink(const char *str, short ftype, dbLinkInfo *pinfo);
DBCORE_API long dbParseLink(const char *str, short ftype, dbLinkInfo *pinfo);
/* Check if link type allow the parsed link value pinfo
* to be assigned to the given link.
* Record containing plink must be locked.
@@ -79,7 +79,7 @@ long dbCanSetLink(DBLINK *plink, dbLinkInfo *pinfo, devSup *devsup);
*/
long dbSetLink(DBLINK *plink, dbLinkInfo *pinfo, devSup *dset);
/* Free dbLinkInfo storage */
epicsShareFunc void dbFreeLinkInfo(dbLinkInfo *pinfo);
DBCORE_API void dbFreeLinkInfo(dbLinkInfo *pinfo);
/* The following is for path */
typedef struct dbPathNode {
@@ -101,7 +101,7 @@ typedef struct{
dbRecordType *precordType;
dbRecordNode *precnode;
}PVDENTRY;
epicsShareFunc int dbPvdTableSize(int size);
DBCORE_API int dbPvdTableSize(int size);
extern int dbStaticDebug;
void dbPvdInitPvt(DBBASE *pdbbase);
PVDENTRY *dbPvdFind(DBBASE *pdbbase,const char *name,size_t lenname);
@@ -23,7 +23,6 @@
#include "epicsTypes.h"
#include "errMdef.h"
#include "epicsExport.h" /* #define epicsExportSharedSymbols */
#include "dbBase.h"
#include "dbCommonPvt.h"
#include "dbStaticLib.h"
@@ -31,6 +30,7 @@
#include "dbAccess.h"
#include "devSup.h"
#include "special.h"
#include "epicsExport.h"
int dbConvertStrict = 0;
epicsExportAddress(int, dbConvertStrict);
@@ -217,7 +217,7 @@ char *dbRecordName(DBENTRY *pdbentry)
int dbIsMacroOk(DBENTRY *pdbentry) { return(FALSE); }
epicsShareFunc int dbIsDefaultValue(DBENTRY *pdbentry)
DBCORE_API int dbIsDefaultValue(DBENTRY *pdbentry)
{
dbFldDes *pflddes = pdbentry->pflddes;
void *pfield = pdbentry->pfield;
@@ -508,7 +508,7 @@ long dbPutStringNum(DBENTRY *pdbentry, const char *pstring)
}
}
epicsShareFunc int dbGetMenuIndex(DBENTRY *pdbentry)
DBCORE_API int dbGetMenuIndex(DBENTRY *pdbentry)
{
dbFldDes *pflddes = pdbentry->pflddes;
void *pfield = pdbentry->pfield;
@@ -527,7 +527,7 @@ epicsShareFunc int dbGetMenuIndex(DBENTRY *pdbentry)
return -1;
}
epicsShareFunc long dbPutMenuIndex(DBENTRY *pdbentry, int index)
DBCORE_API long dbPutMenuIndex(DBENTRY *pdbentry, int index)
{
dbFldDes *pflddes = pdbentry->pflddes;
epicsEnum16 *pfield = pdbentry->pfield;
+5 -5
View File
@@ -21,7 +21,7 @@
#define INCdevSuph 1
#include "errMdef.h"
#include "shareLib.h"
#include "dbCoreAPI.h"
/* structures defined elsewhere */
struct dbCommon;
@@ -158,12 +158,12 @@ typedef dset unambiguous_dset;
*
* Recommended for use in device support init_record()
*/
epicsShareFunc struct link* dbGetDevLink(struct dbCommon* prec);
DBCORE_API struct link* dbGetDevLink(struct dbCommon* prec);
epicsShareExtern dsxt devSoft_DSXT; /* Allow anything table */
DBCORE_API extern dsxt devSoft_DSXT; /* Allow anything table */
epicsShareFunc void devExtend(dsxt *pdsxt);
epicsShareFunc void dbInitDevSup(struct devSup *pdevSup, dset *pdset);
DBCORE_API void devExtend(dsxt *pdsxt);
DBCORE_API void dbInitDevSup(struct devSup *pdevSup, dset *pdset);
#define S_dev_noDevSup (M_devSup| 1) /*SDR_DEVSUP: Device support missing*/
+2 -2
View File
@@ -18,7 +18,7 @@
#include "dbDefs.h"
#include "ellLib.h"
#include "shareLib.h"
#include "dbCoreAPI.h"
#ifdef __cplusplus
extern "C" {
@@ -47,7 +47,7 @@ typedef struct maplinkType {
int value;
} maplinkType;
epicsShareExtern maplinkType pamaplinkType[];
DBCORE_API extern maplinkType pamaplinkType[];
#define VXIDYNAMIC 0
#define VXISTATIC 1
@@ -12,13 +12,13 @@
#ifndef INCdbLoadTemplateh
#define INCdbLoadTemplateh
#include "shareLib.h"
#include "dbCoreAPI.h"
#ifdef __cplusplus
extern "C" {
#endif
epicsShareFunc int dbLoadTemplate(
DBCORE_API int dbLoadTemplate(
const char *sub_file, const char *cmd_collect);
#ifdef __cplusplus
@@ -8,7 +8,6 @@
#include "iocsh.h"
#define epicsExportSharedSymbols
#include "dbtoolsIocRegister.h"
#include "dbLoadTemplate.h"
@@ -9,13 +9,13 @@
#ifndef INC_dbtoolsIocRegister_H
#define INC_dbtoolsIocRegister_H
#include "shareLib.h"
#include "dbCoreAPI.h"
#ifdef __cplusplus
extern "C" {
#endif
epicsShareFunc void dbtoolsIocRegister(void);
DBCORE_API void dbtoolsIocRegister(void);
#ifdef __cplusplus
}
+2 -2
View File
@@ -301,11 +301,11 @@ static void makeSubstitutions(inputData * const inputPvt,
char *pstart;
char *pend;
int cmdind=-1;
int i;
size_t i;
for (i = 0; i < NELEMENTS(cmdNames); i++) {
if (strstr(command, cmdNames[i])) {
cmdind = i;
cmdind = (int)i;
}
}
if (cmdind < 0) goto endcmd;
+1 -2
View File
@@ -15,11 +15,10 @@
#include "epicsStdio.h"
#include "epicsVersion.h"
#define epicsExportSharedSymbols
#include "epicsRelease.h"
#include "epicsVCS.h"
epicsShareFunc int coreRelease(void)
DBCORE_API int coreRelease(void)
{
printf ( "############################################################################\n" );
printf ( "## %s\n", epicsReleaseVersion );
+2 -2
View File
@@ -16,8 +16,8 @@
extern "C" {
#endif
#include "shareLib.h"
epicsShareFunc int coreRelease(void);
#include "dbCoreAPI.h"
DBCORE_API int coreRelease(void);
#ifdef __cplusplus
}
+8 -8
View File
@@ -12,7 +12,7 @@
#ifndef INCiocInith
#define INCiocInith
#include "shareLib.h"
#include "dbCoreAPI.h"
enum iocStateEnum {
iocVoid, iocBuilding, iocBuilt, iocRunning, iocPaused
@@ -22,13 +22,13 @@ enum iocStateEnum {
extern "C" {
#endif
epicsShareFunc enum iocStateEnum getIocState(void);
epicsShareFunc int iocInit(void);
epicsShareFunc int iocBuild(void);
epicsShareFunc int iocBuildIsolated(void);
epicsShareFunc int iocRun(void);
epicsShareFunc int iocPause(void);
epicsShareFunc int iocShutdown(void);
DBCORE_API enum iocStateEnum getIocState(void);
DBCORE_API int iocInit(void);
DBCORE_API int iocBuild(void);
DBCORE_API int iocBuildIsolated(void);
DBCORE_API int iocRun(void);
DBCORE_API int iocPause(void);
DBCORE_API int iocShutdown(void);
#ifdef __cplusplus
}
@@ -13,7 +13,6 @@
#include "iocsh.h"
#include "libComRegister.h"
#define epicsExportSharedSymbols
#include "asIocRegister.h"
#include "dbAccess.h"
#include "dbIocRegister.h"
@@ -13,7 +13,7 @@
#ifndef INCiocshRegisterCommonH
#define INCiocshRegisterCommonH
#include "shareLib.h"
#include "dbCoreAPI.h"
#ifdef __cplusplus
extern "C" {
@@ -22,19 +22,19 @@ extern "C" {
struct dbBase;
/* register many useful commands */
epicsShareFunc void iocshRegisterCommon(void);
DBCORE_API void iocshRegisterCommon(void);
#define HAS_registerAllRecordDeviceDrivers
epicsShareFunc
DBCORE_API
long
registerAllRecordDeviceDrivers(struct dbBase *pdbbase);
epicsShareFunc
DBCORE_API
void runRegistrarOnce(void (*reg_func)(void));
#ifdef EPICS_PRIVATE_API
epicsShareFunc
DBCORE_API
void clearRegistrarOnce(void);
#endif
@@ -13,42 +13,49 @@
#include "iocsh.h"
#include "errlog.h"
#define epicsExportSharedSymbols
#include "iocInit.h"
#include "epicsExport.h"
#include "epicsRelease.h"
#include "miscIocRegister.h"
/* iocInit */
static const iocshFuncDef iocInitFuncDef = {"iocInit",0,NULL};
static const iocshFuncDef iocInitFuncDef = {"iocInit",0,NULL,
"Initializes the various epics components and starts the IOC running.\n"};
static void iocInitCallFunc(const iocshArgBuf *args)
{
iocshSetError(iocInit());
}
/* iocBuild */
static const iocshFuncDef iocBuildFuncDef = {"iocBuild",0,NULL};
static const iocshFuncDef iocBuildFuncDef = {"iocBuild",0,NULL,
"First step of the IOC initialization, puts the IOC into a ready-to-run (quiescent) state.\n"
"Needs iocRun() to make the IOC live.\n"};
static void iocBuildCallFunc(const iocshArgBuf *args)
{
iocshSetError(iocBuild());
}
/* iocRun */
static const iocshFuncDef iocRunFuncDef = {"iocRun",0,NULL};
static const iocshFuncDef iocRunFuncDef = {"iocRun",0,NULL,
"Bring the IOC out of its initial quiescent state to the running state.\n"
"See more: iocBuild, iocPause"};
static void iocRunCallFunc(const iocshArgBuf *args)
{
iocshSetError(iocRun());
}
/* iocPause */
static const iocshFuncDef iocPauseFuncDef = {"iocPause",0,NULL};
static const iocshFuncDef iocPauseFuncDef = {"iocPause",0,NULL,
"Brings a running IOC to a quiescent state with all record processing frozen.\n"
"See more: iocBuild, iocRub, iocInit"};
static void iocPauseCallFunc(const iocshArgBuf *args)
{
iocshSetError(iocPause());
}
/* coreRelease */
static const iocshFuncDef coreReleaseFuncDef = {"coreRelease",0,NULL};
static const iocshFuncDef coreReleaseFuncDef = {"coreRelease",0,NULL,
"Print release information for iocCore.\n"};
static void coreReleaseCallFunc(const iocshArgBuf *args)
{
coreRelease ();
@@ -75,7 +82,11 @@ void miscIocRegister(void)
#ifndef SYSTEM_UNAVAILABLE
static const iocshArg systemArg0 = { "command string",iocshArgString};
static const iocshArg * const systemArgs[] = {&systemArg0};
static const iocshFuncDef systemFuncDef = {"system",1,systemArgs};
static const iocshFuncDef systemFuncDef = {"system",1,systemArgs,
"Send command string to the system command interpreter for execution.\n"
"Not available on all OSs.\n"
"To enable this command, add registrar(iocshSystemCommand) to an application dbd file,\n"
"or include system.dbd\n"};
static void systemCallFunc(const iocshArgBuf *args)
{
iocshSetError(system(args[0].sval));
@@ -11,13 +11,13 @@
#ifndef INC_miscIocRegister_H
#define INC_miscIocRegister_H
#include "shareLib.h"
#include "dbCoreAPI.h"
#ifdef __cplusplus
extern "C" {
#endif
epicsShareFunc void miscIocRegister(void);
DBCORE_API void miscIocRegister(void);
#ifdef __cplusplus
}
@@ -17,7 +17,6 @@
#include <epicsStdio.h>
#include <epicsFindSymbol.h>
#define epicsExportSharedSymbols
#include <registryRecordType.h>
#include <registryDeviceSupport.h>
#include <registryDriverSupport.h>
@@ -16,7 +16,6 @@
#include "errlog.h"
#define epicsExportSharedSymbols
#include "registryCommon.h"
#include "registryDeviceSupport.h"
#include "registryDriverSupport.h"
@@ -15,22 +15,22 @@
#include "devSup.h"
#include "dbJLink.h"
#include "registryRecordType.h"
#include "shareLib.h"
#include "dbCoreAPI.h"
#ifdef __cplusplus
extern "C" {
#endif
epicsShareFunc void registerRecordTypes(
DBCORE_API void registerRecordTypes(
DBBASE *pbase, int nRecordTypes,
const char * const *recordTypeNames, const recordTypeLocation *rtl);
epicsShareFunc void registerDevices(
DBCORE_API void registerDevices(
DBBASE *pbase, int nDevices,
const char * const *deviceSupportNames, const dset * const *devsl);
epicsShareFunc void registerDrivers(
DBCORE_API void registerDrivers(
DBBASE *pbase, int nDrivers,
const char * const *driverSupportNames, struct drvet * const *drvsl);
epicsShareFunc void registerJLinks(
DBCORE_API void registerJLinks(
DBBASE *pbase, int nDrivers, jlif * const *jlifsl);
#ifdef __cplusplus

Some files were not shown because too many files have changed in this diff Show More