Compare commits

..

47 Commits

Author SHA1 Message Date
34ce5c1d21 abort thread when mutex unlock fails due to programming error
Some checks failed
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-16 gcc-4.8 (push) Has been cancelled
Base / Win2019 MSC-19, static (push) Has been cancelled
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 C++11, static (push) Has been cancelled
Base / Ub-20 gcc-9 + MinGW, static (push) Has been cancelled
Base / Ub-16 gcc-4.9 (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, debug (push) Has been cancelled
Base / Win2019 MSC-19 (push) Has been cancelled
2021-05-05 10:15:15 +02:00
605aff2461 tests for epicsStrnGlobMatch added 2021-05-03 14:39:24 +02:00
ba1c40df7c comment added 2021-05-03 14:39:24 +02:00
e25dafa9ca doxygen comments added 2021-05-03 14:39:23 +02:00
ce78836328 use SIZE_MAX 2021-05-03 14:39:23 +02:00
8225c313b9 Support glob pattern for epicsEnvShow
Conflicts:
	documentation/RELEASE_NOTES.md
2021-05-03 14:39:15 +02:00
be78b33570 code streamlined 2021-05-03 14:35:32 +02:00
9926fe3036 allow glob pattern in var command
Conflicts:
	documentation/RELEASE_NOTES.md
2021-05-03 14:35:24 +02:00
Andrew Johnson
718390cfba Add tests confirming that input value fields still writable
Having a constant INP link doesn't break that.
2021-05-03 14:31:26 +02:00
Andrew Johnson
6f864fc10e Release Notes entry with link to bug. 2021-05-03 14:31:26 +02:00
Andrew Johnson
4b6cb2bcdd Fixes for Async Soft Channel input device support
The add_record() routine wasn't properly checking for unsupported
link types, resulting in an assertion failure on IOC exit if the
record was left in a "bad" state.
2021-05-03 14:31:26 +02:00
Andrew Johnson
c866609f24 Add regression tests for Async Soft Channel input links
Caused by the previous fix, but this is repairable.
2021-05-03 14:31:25 +02:00
Andrew Johnson
ee193edd42 Fix for regression in link initialization
Fixes lp: #1824277

Shows a problem with Async Soft Channel input support though.
2021-05-03 14:31:25 +02:00
Andrew Johnson
40c55d65b3 Add regression test for lp: #1824277 2021-05-03 14:31:24 +02:00
Andrew Johnson
a83b3a5331 Added "Win2019 MSC-19, debug" build to GHA
... as suggested by Freddie.
2021-05-03 14:26:29 +02:00
Michael Davidsaver
65098a4120 update .ci
Conflicts:
	.ci
2021-05-03 14:15:47 +02:00
Andrew Johnson
0650fba936 Disable netget test on CI systems 2021-05-03 14:13:22 +02:00
Andrew Johnson
16244acd3c Increase default timeout, improve notes 2021-05-03 14:13:21 +02:00
Andrew Johnson
fe52b0aa1a Release notes describing test timeouts 2021-05-03 14:13:21 +02:00
Andrew Johnson
2af0fe894e Correct comments in makeTestfile, add "export" 2021-05-03 14:13:20 +02:00
Andrew Johnson
387481799b Turn off debug in netget.plt 2021-05-03 14:13:20 +02:00
Andrew Johnson
d606155f17 Make BAIL_OUT display what was thrown 2021-05-03 14:13:19 +02:00
Andrew Johnson
c4d639e72a Kill CA & PVA clients properly if they time out
Uses Win32::Process or fork() to run caget/pvget.

The system_timeout() and qx_timeout() utilities added here
should be extracted into a separate EPICS::Timeouts module.
2021-05-03 14:13:19 +02:00
Andrew Johnson
19d10b3161 netget: watchdog() now returns a result
Currently this can only be a scaler value.
On timeout, calls the fail function and returns its result instead.
2021-05-03 14:13:18 +02:00
Andrew Johnson
220e2f9b12 Generate comments on how to adjust the timeout 2021-05-03 14:13:18 +02:00
Andrew Johnson
3661874c92 Replace Win32::Job with Win32::Process
GitHub Actions builders won't let us use Win32::Job
2021-05-03 14:13:17 +02:00
Andrew Johnson
a9a3ce535c Timeouts for running unit test programs
The generated .t file now kills the test program if it hasn't
completed within a defined interval, 5 minutes by default.
Separate implementations for Windows and Unix hosts.
2021-05-03 14:13:17 +02:00
Andrew Johnson
6a81b2c6a0 CI: Allow up to 5 minutes for make test-results 2021-05-03 14:13:16 +02:00
Andrew Johnson
139fac2928 Update CI test configurations
- Limit test-results step to 1 min in case a test hangs without
  generating a tapfile, as `make test-results` may re-run it.
- Limit Appveyor tests to 20 mins.
- Always run `make test-results` on GHA.
2021-05-03 14:13:16 +02:00
dcc6a36bf7 Merge commit '235f8ed2fb85270a1b9edddbff6a1c5b10f484b9' into PSI-7.0
Conflicts:
	.ci
2021-05-03 14:02:42 +02:00
3b7fd004b8 fix SKIP_BUILDS when INSTALL_LOCATION is not used 2021-04-28 15:39:41 +02:00
2796764905 cross build for RHEL7 on RHEL8 does not work yet 2021-04-28 15:35:55 +02:00
4c27619ee9 run tests on cross archs where possible 2021-04-28 15:35:00 +02:00
Michael Davidsaver
235f8ed2fb add db_field_log::mask
Allow filters to distingush DBE_PROPERTY
2021-04-05 10:31:25 -07:00
Michael Davidsaver
91b2b65c68 doc 2021-04-04 22:51:46 -07:00
Marcio Paduan Donadio
614961da17 iocsh: set PWD
Set the env variable PWD during libCom IOC shell function registration.
Change environment variable PWD when a user calls cd from the IOC shell
2021-04-04 12:26:07 -07:00
Kathryn Baker
dd09afc4e8 Addying Doxugen annotations for cvtFast.h and freeList.h 2021-04-04 11:21:44 -07:00
Michael Davidsaver
417821ddc0 fixups for DBCORE_API 2021-04-01 11:09:53 -07:00
Michael Davidsaver
0f428ea334 use DBCORE_API
git ls-files modules/database/src/ioc|egrep '\.[hc]p*$' | xargs sed -i \
 -e 's|epicsShareFunc|DBCORE_API|g' \
 -e 's|epicsShareClass|DBCORE_API|g' \
 -e 's|epicsShareExtern|DBCORE_API extern|g' \
 -e 's|epicsShareDef\s*||g' \
 -e 's|shareLib\.h|dbCoreAPI.h|g' \
 -e 's|epicsShareAPI|epicsStdCall|g' \
 -e '/#define\s*epicsExportSharedSymbols/d'
2021-04-01 10:57:19 -07:00
Michael Davidsaver
c829ca39d8 ci: enable overall test timeout 2021-04-01 10:20:47 -07:00
Michael Davidsaver
51cdfe9e8e ci: appveyor more recent mingw 2021-04-01 10:19:28 -07:00
Michael Davidsaver
6ed6dc11bb doc dbUnitTest.h 2021-04-01 10:19:14 -07:00
Andrew Johnson
0d2228b536 Recognize linux-ppc64 in EpicsHostArch.pl 2021-04-01 10:26:17 -05:00
Michael Davidsaver
3eeebb74cd Com: avoid intentional memory leak in epicsEnvSet
Switch default impl. to setenv/unsetenv
Switch WIN32 to use _putenv_s
On vxWorks putenv() is documented to make a copy.

log error, but never halt, if env (un)set not possible.

RTEMS <4.10 compat where unsetenv() returns void.
2021-03-29 10:55:30 -07:00
Michael Davidsaver
1bd041745b epicsEnvTest: ensure epicsEnvSet copies argument 2021-03-29 10:55:30 -07:00
Michael Davidsaver
e5aab6561c ci: remove travis debris 2021-03-26 11:48:57 -07:00
Andrew Johnson
f9ea6a5bff CI config and git export tweaks
Add paths-ignore filters for GHA PRs
Stop .tools/ and .gitattributes commits from triggering CI
Exclude CI files from git exports
2021-03-25 14:46:28 -05:00
159 changed files with 1460 additions and 1234 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,11 +107,11 @@ 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 }
- cmd: python .ci/cue.py build test-results -s
- cmd: python .ci/cue.py -T 5M test-results
on_failure:
- cmd: python -m ci_core_dumper report

View File

@@ -38,6 +38,8 @@ skip_commits:
- 'documentation/*'
- 'startup/*'
- '.github/*'
- '.tools/*'
- '.gitattributes'
- '**/*.html'
- '**/*.md'
@@ -111,11 +113,11 @@ 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 }
- cmd: python .ci/cue.py build test-results -s
- cmd: python .ci/cue.py -T 5M test-results
on_failure:
- cmd: python -m ci_core_dumper report

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
@@ -124,6 +134,11 @@ jobs:
configuration: static
name: "Win2019 MSC-19, static"
- os: windows-2019
cmp: vs2019
configuration: debug
name: "Win2019 MSC-19, debug"
- os: windows-2019
cmp: gcc
configuration: default
@@ -153,7 +168,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
@@ -161,4 +176,5 @@ jobs:
name: tapfiles ${{ matrix.name }}
path: '**/O.*/*.tap'
- name: Collect and show test results
run: python .ci/cue.py test-results
if: ${{ always() }}
run: python .ci/cue.py -T 5M test-results

View File

@@ -101,10 +101,10 @@ include $(CONFIG)/RULES_FILE_TYPE
include $(CONFIG)/RULES.Db
#---------------------------------------------------------------
# Do not build anything if current path matches SKIP_BUILD
# Do not build anything if current path matches SKIP_BUILDS
ifneq (,$(strip $(SKIP_BUILDS)))
CURRENT_MODULE=$(subst $(realpath $(TOP)/..)/,,$(subst $(realpath $(dir $(lastword $(MAKEFILE_LIST)))..)/,,$(realpath ..)))
CURRENT_MODULE=$(subst modules/,,$(subst $(realpath $(TOP)/..)/,,$(subst $(realpath $(dir $(lastword $(MAKEFILE_LIST)))..)/,,$(realpath ..))))
ifneq ($(filter $(SKIP_BUILDS) $(addsuffix /%,$(SKIP_BUILDS)),$(CURRENT_MODULE)),)
$(info Skipping $(CURRENT_MODULE) for $(T_A))
PROD=
@@ -245,7 +245,7 @@ $(TESTPRODNAME) $(PRODNAME): $(PRODUCT_OBJS) $(PROD_RESS) $(PROD_DEPLIBS)
$(TESTPRODNAME) $(PRODNAME): %$(EXE):
@$(RM) $@
$(DEBUGCMD) $(LINK.cpp)
$(LINK.cpp)
$(MT_EXE_COMMAND)
%_ctdt$(OBJ): %_ctdt.c
@@ -524,9 +524,11 @@ $(INSTALL_TCLLIB)/%: ../%
@$(INSTALL) -d -m $(BIN_PERMISSIONS) $< $(INSTALL_TCLLIB)
endif
ifneq ($(TCLINDEX),)
$(INSTALL_TCLLIB)/$(TCLINDEX): $(INSTALL_TCLLIBS)
$(ECHO) "Updating $@"
$(ECHO) eval auto_mkindex $(INSTALL_TCLLIB) "$(TCLLIBNAME)" | tclsh
endif
$(INSTALL_LOADABLE_SHRLIBS): $(INSTALL_SHRLIB)/%: %
$(ECHO) "Installing loadable shared library $@"

View File

@@ -2,12 +2,15 @@ include $(CONFIG)/os/CONFIG_SITE.linux-x86_64.Common
# Improved error checking with clang
CROSS_COMPILER_TARGET_ARCHS += RHEL7-x86_64-clang
CROSS_COMPILER_RUNTEST_ARCHS += RHEL7-x86_64-clang
# Build for old SL6 64 bit
CROSS_COMPILER_TARGET_ARCHS += SL6-x86_64
CROSS_COMPILER_RUNTEST_ARCHS += SL6-x86_64
# Build for old SL6 32 bit
CROSS_COMPILER_TARGET_ARCHS += SL6-x86
CROSS_COMPILER_RUNTEST_ARCHS += SL6-x86
# NI Linux Real-Time 7.x
# requires RPM gcc-c++-arm-linux-gnu

View File

@@ -3,6 +3,9 @@ include $(CONFIG)/os/CONFIG_SITE.linux-x86_64.Common
# Improved error checking with clang
CROSS_COMPILER_TARGET_ARCHS += RHEL8-x86_64-clang
# Build for old RHEL7 64 bit
#CROSS_COMPILER_TARGET_ARCHS += RHEL7-x86_64
# Build for old SL6 64 bit
#CROSS_COMPILER_TARGET_ARCHS += SL6-x86_64

View File

@@ -17,6 +17,65 @@ should also be read to understand what has changed since earlier releases.
<!-- Insert new items immediately below here ... -->
### epicsEnvShow accepts glob pattern
The optional argument to epicsEnvShow can now be a glob pattern.
### New function `epicsStrnGlobMatch()`
The function `epicsStrnGlobMatch(char* str, size_t len, char* pattern)`
works exactly the same as `epicsStrGlobMatch()` but takes an additional
length arguments which limits the number of characters of `str` to match.
### Glob pattern allowed in `var` command
When used with one argument, the `var` command can be used with a glob pattern
for printing matching variables.
### Fix for input links marked "special"
The calcout record (and a number of synApps record types) marks its input
link fields with the attribute `special(SPC_MOD)` and provides code in
the record's `special()` routine to reinitialize the related value field
whenever the input link field is set to a numeric constant. Unfortunately the
changes to the link handling code broke this behaviour (reported as Launchpad
[bug #1824277](https://bugs.launchpad.net/epics-base/+bug/1824277))
back in the Base 3.16.1 release. This issue has been fixed in Base, although
external record types may require some fixing to ensure they are correctly
checking for and initializing the link in their `special()` routine.
### IOCsh sets `${PWD}`
IOC shell will now ensure `${PWD}` is set on startup,
and updated by the `cd` iocsh function.
### Timeouts for Unit Test Programs
The unit test programs that are run by the `make runtests` or `make tapfiles`
commands get executed by a `.t` wrapper script which is normally generated by
the EPICS `makeTestfile.pl` program. Those generated wrapper scripts now
impose a time-limit on the test program they execute, and will kill it if it
runs for longer than 500 seconds (8 minutes 20) without exiting. That
time-limit can be changed for any such test by modifying the Makefile which
creates and runs the `.t` wrapper script.
Setting the environment variable `EPICS_UNITTEST_TIMEOUT` to the desired
number of seconds while the Makefile is generating the test script changes the
timeout in that script. For example:
```
TESTSCRIPTS_HOST += hourLongTest.t
hourLongTest.t: export EPICS_UNITTEST_TIMEOUT=3600
```
When selecting such a timeout remember that different Continuous Integration
systems such as GitHub Actions and Appveyor run on processors with different
speeds, so allow enough head-room for slower systems to complete the test.
Test programs written directly in Perl as a `.plt` script should implement a
similar timeout for themselves. The "netget" test in Base does this in a way
that works on Windows as well as Unix-like hosts.
-----

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;
@@ -1158,7 +1158,44 @@ static long dbPutFieldLink(DBADDR *paddr,
if (!status) status = dbSetLink(plink, &link_info, new_devsup);
if (!status && special) status = dbPutSpecial(paddr, 1);
if (status) {
if (isDevLink) {
precord->dset = NULL;
precord->pact = TRUE;
}
goto postScanEvent;
}
/* We need to initialize any links with a link support layer, i.e.
* any CONSTANT, JSON_LINK, or PV_LINK types. However for a PV_LINK
* when isDevLink is set (i.e. this is the record's INP or OUT link)
* we must wait until after calling dsxt->add_record(). This allows
* the Async Soft Channel input supports to change it to a PN_LINK.
* For other cases we initialize the link before the second call to
* dbPutSpecial() because some record types such as calcout need to
* be able to call link support methods from prset->special().
*/
switch (plink->type) { /* New type */
case PV_LINK:
if (isDevLink)
break;
/* else fall through */
case CONSTANT:
case JSON_LINK:
dbAddLink(&locker, plink, pfldDes->field_type, chan);
chan = NULL; /* we used it, don't clean it up */
}
if (special) status = dbPutSpecial(paddr, 1);
if (!status && isDevLink) {
precord->dpvt = NULL;
precord->dset = new_dset;
precord->pact = FALSE;
status = new_dsxt->add_record(precord);
}
if (status) {
if (isDevLink) {
@@ -1168,29 +1205,21 @@ static long dbPutFieldLink(DBADDR *paddr,
goto postScanEvent;
}
if (isDevLink) {
precord->dpvt = NULL;
precord->dset = new_dset;
precord->pact = FALSE;
status = new_dsxt->add_record(precord);
if (status) {
precord->dset = NULL;
precord->pact = TRUE;
goto postScanEvent;
}
}
switch (plink->type) { /* New link type */
case PV_LINK:
case CONSTANT:
case CA_LINK:
case DB_LINK:
case PN_LINK:
case JSON_LINK:
dbAddLink(&locker, plink, pfldDes->field_type, chan);
chan = NULL; /* don't clean it up */
break;
case DB_LINK:
case CA_LINK:
case PV_LINK:
if (isDevLink) {
dbAddLink(&locker, plink, pfldDes->field_type, chan);
chan = NULL; /* we used it, don't clean it up */
}
break;
case MACRO_LINK:
break; /* should never get here */
@@ -1199,7 +1228,6 @@ static long dbPutFieldLink(DBADDR *paddr,
status = S_db_badHWaddr;
goto postScanEvent;
}
break;
}
db_post_events(precord, plink, DBE_VALUE | DBE_LOG);

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"

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