Merge commit '235f8ed2fb85270a1b9edddbff6a1c5b10f484b9' into 7.0.5-troubleshoot
Some checks failed
Base / Ub-20 clang-10 C++11 (push) Has been cancelled
Base / MacOS clang-12 (push) Has been cancelled
Base / Ub-16 clang-9 (push) Has been cancelled
Base / Ub-20 clang-10 (push) Has been cancelled
Base / Ub-20 gcc-9 + MinGW (push) Has been cancelled
Base / Ub-20 gcc-9 + RT-4.10 (push) Has been cancelled
Base / Ub-20 gcc-9 + RT-4.9 (push) Has been cancelled
Base / Win2019 mingw (push) Has been cancelled
Base / Ub-20 gcc-9 C++11, static (push) Has been cancelled
Base / Ub-20 gcc-8 (push) Has been cancelled
Base / Ub-20 gcc-9 (push) Has been cancelled
Base / Win2019 MSC-19 (push) Has been cancelled
Base / Win2019 MSC-19, static (push) Has been cancelled
Base / Ub-20 gcc-9 + MinGW, static (push) Has been cancelled
Base / Ub-16 gcc-4.8 (push) Has been cancelled
Base / Ub-16 gcc-4.9 (push) Has been cancelled

This commit is contained in:
2021-05-12 14:28:29 +02:00
140 changed files with 943 additions and 1069 deletions

View File

@@ -31,6 +31,8 @@ skip_commits:
- 'documentation/*'
- 'startup/*'
- '.github/*'
- '.tools/*'
- '.gitattributes'
- '**/*.html'
- '**/*.md'
@@ -64,6 +66,7 @@ environment:
- CMP: vs2012
- CMP: vs2010
- CMP: gcc
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
# Platform: processor architecture
platform:
@@ -104,7 +107,7 @@ build_script:
test_script:
- cmd: python -m ci_core_dumper install
- cmd: python .ci/cue.py test
- cmd: python .ci/cue.py -T 20M test
on_finish:
- ps: Get-ChildItem *.tap -Recurse -Force | % { Push-AppveyorArtifact $_.FullName -FileName $_.Name }

View File

@@ -38,6 +38,8 @@ skip_commits:
- 'documentation/*'
- 'startup/*'
- '.github/*'
- '.tools/*'
- '.gitattributes'
- '**/*.html'
- '**/*.md'

2
.ci

Submodule .ci updated: 3db08b5977...2464284271

View File

@@ -1,19 +0,0 @@
#!/bin/sh
set -e -u -x
env|grep TRAVIS
[ "$TRAVIS_OS_NAME" = "linux" ] || exit 0
# Ensure there is an interface with a (correct) broadcast address
# eg. 'trusty' VMs have interface broadcast address mis-configured
# (why oh why do people insist on setting this explicitly?)
sudo ip tuntap add dev tap42 mode tap
sudo ip addr add 192.168.240.1/24 broadcast + dev tap42
sudo ip link set dev tap42 up
# note that this device will be UP but not RUNNING
# so java will see it as not UP since java confuses UP and RUNNING

3
.gitattributes vendored
View File

@@ -1,5 +1,6 @@
.ci/ export-ignore
.tools/ export-ignore
.github/ export-ignore
.appveyor/ export-ignore
.appveyor.yml export-ignore
.travis.yml export-ignore
README export-subst

View File

@@ -14,9 +14,19 @@ on:
- 'documentation/*'
- 'startup/*'
- '.appveyor/*'
- '.tools/*'
- '.gitattributes'
- '**/*.html'
- '**/*.md'
pull_request:
paths-ignore:
- 'documentation/*'
- 'startup/*'
- '.appveyor/*'
- '.tools/*'
- '.gitattributes'
- '**/*.html'
- '**/*.md'
env:
SETUP_PATH: .ci-local:.ci
@@ -153,7 +163,7 @@ jobs:
- name: Build main module
run: python .ci/cue.py build
- name: Run main module tests
run: python .ci/cue.py test
run: python .ci/cue.py -T 20M test
- name: Upload tapfiles Artifact
if: ${{ always() }}
uses: actions/upload-artifact@v2

View File

@@ -17,6 +17,11 @@ should also be read to understand what has changed since earlier releases.
<!-- Insert new items immediately below here ... -->
### IOCsh sets `${PWD}`
IOC shell will now ensure `${PWD}` is set on startup,
and updated by the `cd` iocsh function.
-----

View File

@@ -33,7 +33,6 @@
#include "caerr.h"
#include "caeventmask.h"
#define epicsExportSharedSymbols
#include "asCa.h"
#include "asDbLib.h"
#include "callback.h"

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
}

View File

@@ -25,7 +25,6 @@
#include "caeventmask.h"
#define epicsExportSharedSymbols
#include "asCa.h"
#include "asDbLib.h"
#include "callback.h"

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

View File

@@ -11,7 +11,6 @@
#include "asLib.h"
#include "iocsh.h"
#define epicsExportSharedSymbols
#include "asCa.h"
#include "asDbLib.h"
#include "asIocRegister.h"

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
}

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

View File

@@ -34,7 +34,6 @@
#include "errMdef.h"
#include "taskwd.h"
#define epicsExportSharedSymbols
#include "callback.h"
#include "dbAccessDefs.h"
#include "dbAddr.h"

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
}

View File

@@ -27,7 +27,6 @@
#include "epicsTypes.h"
#include "errlog.h"
#define epicsExportSharedSymbols
#include "chfPlugin.h"
#include "dbStaticLib.h"

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
}

View File

@@ -17,7 +17,6 @@
#include "epicsPrint.h"
#define epicsExportSharedSymbols
#include "cvtTable.h"
#include "dbAccess.h"
#include "dbBase.h"

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;

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"

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,9 +26,9 @@ 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 */
@@ -207,67 +199,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

View File

@@ -53,7 +53,6 @@
#include "errlog.h"
#include "errMdef.h"
#define epicsExportSharedSymbols
#include "dbAccessDefs.h"
#include "dbAddr.h"
#include "dbBase.h"

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;

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"

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;

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 */

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"

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
}

View File

@@ -29,7 +29,6 @@
#include "gpHash.h"
#include "yajl_parse.h"
#define epicsExportSharedSymbols
#include "dbAccessDefs.h"
#include "dbBase.h"
#include "dbChannel.h"

View File

@@ -25,7 +25,6 @@
#include "db_access.h"
#include "errlog.h"
#define epicsExportSharedSymbols
#include "db_access_routines.h"
#include "dbCAC.h"
#include "dbChannelIO.h"

View File

@@ -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 (

View File

@@ -19,7 +19,6 @@
#include "dbDefs.h"
#include "epicsStdlib.h"
#define epicsExportSharedSymbols
#include "dbAccessDefs.h"
#include "dbAddr.h"
#include "dbCommon.h"

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
}

View File

@@ -25,7 +25,6 @@
#include "epicsThread.h"
#include "errlog.h"
#define epicsExportSharedSymbols
#include "db_access_routines.h"
#include "dbCAC.h"
#include "dbChannel.h"

View File

@@ -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"

View File

@@ -26,7 +26,6 @@
#include "errlog.h"
#include "errMdef.h"
#define epicsExportSharedSymbols
#include "dbAccessDefs.h"
#include "dbAddr.h"
#include "dbBase.h"

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
}

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
}

View File

@@ -15,7 +15,6 @@
#include "yajl_alloc.h"
#include "yajl_parse.h"
#define epicsExportSharedSymbols
#include "dbAccessDefs.h"
#include "dbConvertFast.h"
#include "dbConvertJSON.h"

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
}

View File

@@ -52,7 +52,6 @@
#include "caeventmask.h"
#define epicsExportSharedSymbols
#include "dbAccessDefs.h"
#include "dbAddr.h"
#include "dbBase.h"

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

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;
@@ -715,6 +714,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;

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)

View File

@@ -23,7 +23,6 @@
#include "epicsTypes.h"
#define epicsExportSharedSymbols
#include "dbAddr.h"
#include "dbExtractArray.h"

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);

View File

@@ -27,7 +27,6 @@
#include "errlog.h"
#include "errMdef.h"
#define epicsExportSharedSymbols
#include "dbAccessDefs.h"
#include "dbAddr.h"
#include "dbBase.h"

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};

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
}

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"

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;

View File

@@ -28,7 +28,6 @@
#include "caeventmask.h"
#define epicsExportSharedSymbols
#include "dbAccessDefs.h"
#include "dbAddr.h"
#include "dbBase.h"

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"
@@ -366,59 +366,59 @@ typedef struct 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,
DBCORE_API long dbGetTimeStamp(const struct link *plink,
epicsTimeStamp *pstamp);
epicsShareFunc long dbPutLink(struct link *plink, short dbrType,
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

View File

@@ -25,7 +25,6 @@
#include "epicsThread.h"
#include "errMdef.h"
#define epicsExportSharedSymbols
#include "dbAccessDefs.h"
#include "dbAddr.h"
#include "dbBase.h"

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
}

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.

View File

@@ -33,7 +33,6 @@
#include "errlog.h"
#include "errMdef.h"
#define epicsExportSharedSymbols
#include "callback.h"
#include "dbAccessDefs.h"
#include "dbBase.h"

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:

View File

@@ -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"

View File

@@ -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 & );

View File

@@ -37,7 +37,6 @@
#include "epicsTime.h"
#include "taskwd.h"
#define epicsExportSharedSymbols
#include "callback.h"
#include "dbAccessDefs.h"
#include "dbAddr.h"

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
}

View File

@@ -18,7 +18,6 @@
#include "envDefs.h"
#include "epicsStdio.h"
#define epicsExportSharedSymbols
#include "dbServer.h"
static ELLLIST serverList = ELLLIST_INIT;

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
}

View File

@@ -19,7 +19,6 @@
#include "epicsString.h"
#include "iocsh.h"
#define epicsExportSharedSymbols
#include "dbDefs.h"
#include "dbState.h"
#include "dbStaticLib.h"

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

View File

@@ -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"

View File

@@ -23,7 +23,6 @@
#include "epicsString.h"
#include "errlog.h"
#define epicsExportSharedSymbols
#include "callback.h"
#include "dbAccessDefs.h"
#include "dbAddr.h"

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
}

View File

@@ -23,7 +23,6 @@
#include "epicsEvent.h"
#include "epicsThread.h"
#define epicsExportSharedSymbols
#include "dbAccess.h"
#include "dbBase.h"
#include "dbChannel.h"

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

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"

View File

@@ -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);

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*/

View File

@@ -109,6 +109,8 @@ 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 */
unsigned short stat; /* Alarm Status */

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"

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

View File

@@ -29,7 +29,6 @@
#include "caeventmask.h"
#define epicsExportSharedSymbols
#include "dbAccessDefs.h"
#include "dbStaticLib.h"
#include "dbAddr.h"

View File

@@ -16,7 +16,7 @@
#define INCrecGblh 1
#include "epicsTypes.h"
#include "shareLib.h"
#include "dbCoreAPI.h"
#ifdef __cplusplus
extern "C" {
@@ -37,43 +37,43 @@ 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 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

View File

@@ -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},

View File

@@ -28,7 +28,6 @@
#include "gpHash.h"
#include "macLib.h"
#define epicsExportSharedSymbols
#include "dbBase.h"
#include "dbFldTypes.h"
#include "dbStaticLib.h"

View File

@@ -21,7 +21,6 @@
#include "epicsStdio.h"
#include "epicsString.h"
#define epicsExportSharedSymbols
#include "dbBase.h"
#include "dbStaticLib.h"
#include "dbStaticPvt.h"

View File

@@ -10,7 +10,6 @@
#include "iocsh.h"
#define epicsExportSharedSymbols
#include "dbStaticIocRegister.h"
#include "dbStaticLib.h"
#include "dbStaticPvt.h"

View File

@@ -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
}

View File

@@ -34,7 +34,6 @@
#define DBFLDTYPES_GBLSOURCE
#define SPECIAL_GBLSOURCE
#define epicsExportSharedSymbols
#include "dbChannel.h"
#include "dbFldTypes.h"
#include "dbStaticLib.h"

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;

View File

@@ -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);

View File

@@ -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;

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*/

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

View File

@@ -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

View File

@@ -8,7 +8,6 @@
#include "iocsh.h"
#define epicsExportSharedSymbols
#include "dbtoolsIocRegister.h"
#include "dbLoadTemplate.h"

View File

@@ -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
}

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 );

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
}

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
}

View File

@@ -13,7 +13,6 @@
#include "iocsh.h"
#include "libComRegister.h"
#define epicsExportSharedSymbols
#include "asIocRegister.h"
#include "dbAccess.h"
#include "dbIocRegister.h"

View File

@@ -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

View File

@@ -13,7 +13,6 @@
#include "iocsh.h"
#include "errlog.h"
#define epicsExportSharedSymbols
#include "iocInit.h"
#include "epicsExport.h"
#include "epicsRelease.h"

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