major changes for new makwBaseApp

This commit is contained in:
Marty Kraimer
1998-05-28 19:51:50 +00:00
parent 13b7753cf4
commit d96af74f38
36 changed files with 1609 additions and 211 deletions
+31 -19
View File
@@ -15,27 +15,39 @@ TEMPLATES += top/config/RULES_ARCHS
TEMPLATES += top/config/RULES_DIRS
TEMPLATES += top/config/RULES_TOP
TEMPLATES += top/config/makeSoftLinks
TEMPLATES += top/config/makeNfsCommands.pl
TEMPLATES += top/config/makeIoccdcmds.pl
TEMPLATES += top/App/Makefile
TEMPLATES += top/App/Db/Makefile
TEMPLATES += top/App/Db/dbExample.db
TEMPLATES += top/App/src/Makefile
TEMPLATES += top/App/src/Makefile.Host
TEMPLATES += top/App/src/Makefile.Vx
TEMPLATES += top/App/src/MakefileExample.Host
TEMPLATES += top/App/src/MakefileExample.Vx
TEMPLATES += top/App/src/caExample.c
TEMPLATES += top/App/src/devXxxSoft.c
TEMPLATES += top/App/src/exampleInclude.dbd
TEMPLATES += top/App/src/sncExample.st
TEMPLATES += top/App/src/xxxRecord.c
TEMPLATES += top/App/src/xxxRecord.dbd
TEMPLATES += top/exampleApp/Makefile
TEMPLATES += top/exampleApp/Db/Makefile
TEMPLATES += top/exampleApp/Db/dbExample.db
TEMPLATES += top/exampleApp/src/Makefile
TEMPLATES += top/exampleApp/src/Makefile.Host
TEMPLATES += top/exampleApp/src/Makefile.Vx
TEMPLATES += top/exampleApp/src/caExample.c
TEMPLATES += top/exampleApp/src/devXxxSoft.c
TEMPLATES += top/exampleApp/src/exampleInclude.dbd
TEMPLATES += top/exampleApp/src/sncExample.st
TEMPLATES += top/exampleApp/src/xxxRecord.c
TEMPLATES += top/exampleApp/src/xxxRecord.dbd
TEMPLATES += top/exampleApp/src/base.dbd
TEMPLATES += top/exampleApp/src/baseLIBOBJS
TEMPLATES += top/iocBoot/Makefile
TEMPLATES += top/iocBoot/nfsCommands
TEMPLATES += top/iocBoot/ioc/Makefile
TEMPLATES += top/iocBoot/ioc/st.cmd
TEMPLATES += top/iocBoot/ioc/st.cmdExample
TEMPLATES += top/simpleApp/Makefile
TEMPLATES += top/simpleApp/Db/Makefile
TEMPLATES += top/simpleApp/src/Makefile
TEMPLATES += top/simpleApp/src/Makefile.Host
TEMPLATES += top/simpleApp/src/Makefile.Vx
TEMPLATES += top/simpleBoot/Makefile
TEMPLATES += top/simpleBoot/nfsCommands
TEMPLATES += top/simpleBoot/ioc/Makefile
TEMPLATES += top/simpleBoot/ioc/st.cmd
TEMPLATES += top/exampleBoot/Makefile
TEMPLATES += top/exampleBoot/nfsCommands
TEMPLATES += top/exampleBoot/ioc/Makefile
TEMPLATES += top/exampleBoot/ioc/st.cmd
SCRIPTS += makeBaseApp.pl
+277 -183
View File
@@ -1,228 +1,322 @@
#!/usr/bin/perl
#makeBaseApp
eval 'exec perl -S $0 ${1+"$@"}' # -*- Mode: perl -*-
if $running_under_some_shell; # makeBaseApp
# Authors: Ralph Lange and Marty Kraimer
use Cwd;
use Getopt::Std;
use File::Copy;
use File::Find;
use File::Path;
$user=GetUser();
$user = GetUser();
$cwd = cwd();
$eAPPTYPE = $ENV{EPICS_MBA_DEF_APP_TYPE};
$eTOP = $ENV{EPICS_MBA_TEMPLATE_TOP};
#get options and check for valid combinations
unless($len = @ARGV) { Cleanup(1);}
unless(getopts('eib:a:')) {Cleanup(1,"Illegal option");}
if($opt_e) {
if($len = @ARGV) { Cleanup(1,"no arguments allowed with -e");}
@ARGV = ("example");
}
if(!("opt_i" || "opt_e") && "opt_a") {
Cleanup(1,"-a not valid when generating xxxApp only");
}
&get_commandline_opts; # Read and check options
#locate epics_base
if($opt_b) { #first choice is -b base
$epics_base = $opt_b;
} elsif(-r "config/RELEASE") { #second choice is config/RELEASE
open(IN,"config/RELEASE") or die "Cannot open config/RELEASE";
while ($line = <IN>) {
chomp($line);
if($line =~ /EPICS_BASE/) {
$line =~ s/EPICS_BASE=//;
$epics_base = $line;
break;
}
#
# Declare two default callback routines for file copy
# These may be overriden within $top/$apptypename/Replace.pl
#
# ReplaceFilename
# called with the source (template) file or directory name, returns
# the "real" name (which gets the target after $top is removed)
# Empty string: Don't copy this file
sub ReplaceFilename { # (filename)
my($file) = $_[0];
$file =~ s|.*/CVS/?.*||; # template might be kept under CVS
if($opt_i) {
$file =~ s|/$apptypename|/iocBoot|;
}
close IN;
} else { #assume script was called with full path to base
$epics_base = $0;
$epics_base =~ s:(/.*)/bin/.*makeBaseApp.*:$1:;
}
unless("$epics_base") {Cleanup (1,"Cannot find EPICS base");}
$top = $epics_base . "/templates/makeBaseApp/top";
#copy <top>/Makefile and config files if not present
unless (-f 'Makefile')
{
copy("${top}/Makefile","Makefile") or die "$! Copying ${top}/Makefile";
}
unless (-d 'config')
{
mkdir('config', 0777) or die "Cannot create config directory";
foreach $fullname (glob("${top}/config/*")) {
$name = GetFilename($fullname);
if($name eq "RELEASE") {#must substitute for epics_base
open(IN,$fullname) or die "Cannot open $fullname";
open OUT, ">config/RELEASE" or die "Cannot create RELEASE";
while ($line =<IN>) {
$line =~ s/\${epics_base}/$epics_base/;
print OUT $line;
}
close OUT;
close IN;
} else {
copy("$fullname","config/$name") or die "$! Copying $fullname";
}
if ($ioc) { # iocBoot/ioc template has dynamic name
$file =~ s|/iocBoot/ioc|/iocBoot/$ioc|;
$file =~ s|_IOC_|$ioc|;
} else {
$file =~ s|.*/iocBoot/ioc/?.*||;
}
if ($app) { # apptypenameApp itself is dynamic, too
$file =~ s|/$apptypename|/$appdir|;
$file =~ s|/$appdir/config|/config/$apptype|;
}
$file =~ s|_APPNAME_|$appname|;
$file =~ s|_APPTYPE_|$apptype|;
# We don't want the Replace overrides
$file =~ s|.*/$app/Replace.pl$||;
return $file;
}
if($opt_i || $opt_e) { #Create ioc directories
unless(-d "iocBoot") {
mkdir("iocBoot", 0777) or die "Cannot create iocBoot directory";
$fromDir = "$top/iocBoot"; $toDir = "iocBoot";
foreach $file ("Makefile","nfsCommands") {
copy("$fromDir/$file","$toDir/$file")
or die "$! Copying $fromDir/$file";
}
# ReplaceLine
# called with one line of a file, returns the line after replacing
# this and that
sub ReplaceLine { # (line)
my($line) = $_[0];
$line =~ s/_USER_/$user/;
$line =~ s/_EPICS_BASE_/$epics_base/;
$line =~ s/_ARCH_/$arch/;
$line =~ s/_APPNAME_/$appname/;
$line =~ s/_APPTYPE_/$apptype/;
$line =~ s/_TEMPLATE_TOP_/$top/;
if ($ioc) {
$line =~ s/_IOC_/$ioc/;
}
@IOC = @ARGV;
foreach $ioc ( @IOC ) {
$ioc =~ s/^ioc//;
$ioc = "ioc" . $ioc;
return $line;
}
# Source replace overrides for file copy
if (-r "$top/$apptypename/Replace.pl") {
require "$top/$apptypename/Replace.pl";
}
#
# Copy <top>/Makefile and config files if not present
#
CopyFile("$top/Makefile") unless (-f 'Makefile');
find(\&FCopyTree, "$top/config") unless (-d 'config');
#
# Create ioc directories
#
if ($opt_i) {
find(\&FCopyTree, "$top/$apptypename") unless (-d "iocBoot");
foreach $ioc ( @ARGV ) {
($ioc =~ /^ioc/) or $ioc = "ioc" . $ioc;
if (-d "iocBoot/$ioc") {
print "ioc iocBoot/$ioc is already there!\n";
next;
}
mkdir("iocBoot/$ioc", 0777) or die "Cannot create dir iocBoot/$ioc";
$fromDir = "$top/iocBoot/ioc"; $toDir = "iocBoot/$ioc";
if($opt_a) {
find(\&FCopyTree, "$top/$apptypename/ioc");
}
exit 0; # finished here for -i (no xxxApps)
}
#
# Create app directories (if any names given)
#
foreach $app ( @ARGV ) {
($appname = $app) =~ s/App$//;
$appdir = $appname . "App";
if (-d "$appdir") {
print "Application $appname is already there!\n";
next;
}
print "Creating template structure "
. "for $appname (of type $apptypename)\n" if $Debug;
find(\&FCopyTree, "$top/$apptypename");
}
exit 0; # END OF SCRIPT
#
# Get commandline options and check for validity
#
sub get_commandline_opts { #no args
($len = @ARGV) and getopts('ldit:T:b:a:') or Cleanup(1);
# Debug option
$Debug = 1 if $opt_d;
# Locate epics_base
if ($opt_b) { # first choice is -b base
$epics_base = $opt_b;
} elsif (-r "config/RELEASE") { # second choice is config/RELEASE
open(IN, "config/RELEASE") or die "Cannot open config/RELEASE";
while (<IN>) {
chomp;
s/EPICS_BASE\s*=\s*// and $epics_base = $_, break;
}
close IN;
} elsif ($0 =~ /\/bin\//) { # assume script was called with full path to base
$epics_base = $0;
$epics_base =~ s:(/.*)/bin/.*makeBaseApp.*:$1:;
}
"$epics_base" or Cleanup(1, "Cannot find EPICS base");
# Locate template top directory
if ($opt_T) { # first choice is -T templ-top
$top = $opt_T;
} elsif (-r "config/RELEASE") { # second choice is config/RELEASE
open(IN, "config/RELEASE") or die "Cannot open config/RELEASE";
while (<IN>) {
chomp;
s/TEMPLATE_TOP\s*=\s*// and $top = $_, break;
}
close IN;
}
if("$top" eq "") {
if ($eTOP) { # third choice is $ENV{EPICS_MBA_TEMPL_TOP}
$top = $eTOP;
} else { # use templates from EPICS base
$top = $epics_base . "/templates/makeBaseApp/top";
}
}
"$top" or Cleanup(1, "Cannot find template top directory");
# Print application type list?
if ($opt_l) {
&ListAppTypes;
exit 0; # finished for -l command
}
# iocBoot and architecture stuff
if ($opt_i) {
if ($opt_a) {
$arch = $opt_a;
} else {
print "What architecture do you want to use for your IOC,";
print "e.g. pc486, mv167 ? ";
$arch=<STDIN>;
$arch = <STDIN>;
chomp($arch);
}
open(IN,"${fromDir}/Makefile") or die "Cannot open ${fromDir}/Makefile";
open OUT, ">${toDir}/Makefile" or die "Cannot create ${toDir}/Makefile";
while ($line = <IN>) {
$line =~ s/\${arch}/${arch}/;
print OUT $line;
}
close OUT;
close IN;
if($opt_e) {
open(IN,"${fromDir}/st.cmdExample")
or die "Cannot open ${fromDir}/st.cmdExample";
open OUT, ">${toDir}/st.cmd"
or die "Cannot create ${toDir}/st.cmd";
while ($line = <IN>) {
$line =~ s/\${user}/${user}/;
print OUT $line;
}
close OUT;
close IN;
} else {
copy("$fromDir/st.cmd","$toDir/st.cmd")
or die "$! Copying $fromDir/st.cmd";
}
}
if($opt_i) {exit 0;} #If -i was specified dont generate any xxxApps
# Application template type
if ($opt_t) { # first choice is -t type
$apptype = $opt_t;
} elsif ($eAPPTYPE) { # second choice is $ENV{EPICS_DEFAULT_APP_TYPE}
$apptype = $eAPPTYPE;
} elsif (-r "$top/defaultApp") {# third choice is (a link) in the $top dir
$apptype = "default";
}
$apptype =~ s/App$//;
$apptype =~ s/Boot$//;
"$apptype" or Cleanup(1, "Cannot find default application type");
if ($opt_i) { # fixed name when doing ioc dirs
$apptypename = $apptype . "Boot";
} else {
$apptypename = $apptype . "App";
}
# Valid $apptypename?
while (-l "$top/$apptypename") {
($apptypename = readlink "$top/$apptypename") =~ s/^$top//;
}
unless (-r "$top/$apptypename") {
print "Application type does not exist. ";
&ListAppTypes;
exit 1;
}
print "\nCommand line / environment options validated:\n"
. " Templ-Top: $top\n"
. "Templ-Type: $apptype\n"
. "Templ-Name: $apptypename\n"
. " opt_i: $opt_i\n"
. " arch: $arch\n"
. "EPICS-Base: $epics_base\n\n" if $Debug;
}
# Generate app dirs (if any names given)
foreach $app ( @ARGV) {
$appname = $app . "App";
if (-d "$appname") {
print "App $appname is already there!\n";
next;
}
mkdir("$appname", 0777) or die "Cannot create dir $appname";
copy("$top/App/Makefile","$appname/Makefile")
or die "$! Copying $top/App/Makefile";
mkdir("${appname}/src", 0777) or die "Cannot create dir ${appname}/src";
$fromDir = "$epics_base/dbd"; $toDir = "${appname}/src";
foreach $file ("base.dbd","baseLIBOBJS") {
copy("$fromDir/$file","$toDir/$file")
or die "$! Copying $fromDir/$file";
}
$fromDir = "$top/App/src"; $toDir = "${appname}/src";
copy("$fromDir/Makefile","$toDir/Makefile")
or die "$! Copying $fromDir/Makefile";
if($opt_e) {$example = "Example";} else {$example = "";}
foreach $ext ("Host","Vx") {
copy("$fromDir/Makefile${example}.$ext","${toDir}/Makefile.$ext")
or die "$! Copying $fromDir/Makefile${example}.$extension";
}
if($opt_e) {
@filelist = (glob("${fromDir}/*.c"));
@filelist = (@filelist,glob("${fromDir}/*.dbd"));
@filelist = (@filelist,glob("${fromDir}/*.st"));
foreach $fullname (@filelist) {
$name = GetFilename($fullname);
if($name eq "sncExample.st") {
open(IN,"${fromDir}/sncExample.st")
or die "Cannot open ${fromDir}/sncExample.st";
open(OUT, ">${toDir}/sncExample.st")
or die "Cannot open ${toDir}/sncExample.st";
while ($line =<IN>) {
$line =~ s/\${user}/${user}/;
print OUT $line;
}
close OUT;
close IN;
} else {
copy("${fromDir}/${name}","${toDir}/${name}")
or die "$! \nCopying ${fromDir}/${name}\n";
}
}
}
mkdir("${appname}/Db", 0777) or die "Cannot create dir ${appname}/Db";
$fromDir = "$top/App/Db"; $toDir = "${appname}/Db";
copy("${fromDir}/Makefile","${toDir}/Makefile")
or die "$! Copying ${fromDir}/Makefile";
if ($opt_e) {
copy("${fromDir}/dbExample.db","${toDir}/dbExample.db")
or die "$! Copying ${fromDir}/dbExample.db";
#
# List application types
#
sub ListAppTypes { # no args
print "Valid application types are:\n";
find(\&Fapp_types, "$top/");
for $type (keys %Types) {
printf "%-15s %-15s\n", $TypeNameA{$type}, $TypeNameE{$type};
}
}
sub Fapp_types {
! /$topn/ && ! /defaultApp$/ && /App$/ &&
($File::Find::prune = 1) && s/App$// &&
(($type = $_) =~ s/^example_//, 1) &&
($t = /^example_.*/?TypeNameE:TypeNameA,
s/^example_.*/(including example: use \'-e\' option)/, 1) &&
(eval "\$$t\{\$type\} = \$_", 1) &&
($Types{$type} = 1);
}
# Cleanup (return-code [ messsage-line1, line 2, ... ])
sub Cleanup
{
#
# Copy a file with replacements
#
sub CopyFile { # (source)
$source = $_[0];
$target = &ReplaceFilename($source);
if ($target) {
$target =~ s|$top/||;
open(INP, "<$source") and open(OUT, ">$target")
or die "$! Copying $source -> $target";
print "Copying file $source -> $target\n" if $Debug;
while (<INP>) {
print OUT &ReplaceLine($_);
}
close INP; close OUT;
}
}
#
# Find callback for file or structure copy
#
sub FCopyTree {
chdir $cwd; # Sigh
if (-d $File::Find::name
and ($dir = &ReplaceFilename($File::Find::name))) {
$dir =~ s|$top/||;
print "Creating directory $dir\n" if $Debug;
&mkpath($dir);
} else {
&CopyFile($File::Find::name);
}
chdir $File::Find::dir;
}
#
# Cleanup and exit
#
sub Cleanup { # (return-code [ messsage-line1, line 2, ... ])
my ($rtncode, @message) = @_;
foreach $line ( @message )
{
foreach $line ( @message ) {
print "$line\n";
}
print "\nUsage:\n\n",
"$0 -e\n",
" or create ioc directories\n",
"$0 -i [-b base] [-a arch] ioc ...\n",
" or create App directories\n",
"$0 [-b base] app ...\n",
"\n",
"where\n\n",
"-e Create an example app. No other arguments can be given\n",
"-i Create ioc directories only. Each argument is an iocname\n",
" If -i is not specified App directories are created\n",
"-b The location of epics base (full path name).\n",
" If not specified and config exists it is found in config/RELEASE\n",
" If config does not exist it is taken from command\n",
"-a The architecture, e.g. mv167.\n",
" If not given you will be prompted\n";
print <<EOF;
Usage:
$0 -i [options] ioc ...
create ioc boot directories
$0 [options] app ...
create application directories
where
app Application name (the created directory will have \"App\" appended to this)
ioc IOC name (note: if -i is not specified, App directories will be created)
-a arch Set the IOC architecture (e.g. mv167)
If not specified, you will be prompted
-b base Set the location of EPICS base (full path)
If not specified, base path is taken from config/RELEASE
If config does not exist, base path is taken from command
-d Verbose output (useful for debugging)
-e Create example application
-l List valid application types for this installation
-t type Set the application type (-l for a list of valid types)
If not specified, type is taken from environment
If not found in environment, \"default\" is used
-T top Set the template top directory (where the application templates are)
If not specified, top path is taken from config/RELEASE
If config does not exist, top path is taken from environment
If not found in environment, the templates from EPICS base are used
Environment:
EPICS_MBA_DEF_APP_TYPE The application type you want to use as default
EPICS_MBA_TEMPLATE_TOP The template top directory
EOF
exit $rtncode;
}
sub GetFilename # full name including path
{
my ($name) = @_;
$name =~ s:.*/(.*):$1: ;
return($name);
}
sub GetUser # no args
{
sub GetUser { # no args
my ($user);
# add to this list if new possibilities arise,
# currently it's UNIX and WIN32:
$user=$ENV{USER} || $ENV{USERNAME} || $ENV{LOGNAME} || Win32::LoginName();
$user = $ENV{USER} || $ENV{USERNAME} || Win32::LoginName();
unless ($user)
{
unless ($user) {
print "I cannot figure out your user name.\n";
print "What shall you be called ?\n";
print ">";
+1
View File
@@ -0,0 +1 @@
This is obsolete. Entiry directory will be removed soon
+2 -1
View File
@@ -1,5 +1,6 @@
#RELEASE Location of external products
EPICS_BASE=${epics_base}
EPICS_BASE=_EPICS_BASE_
TEMPLATE_TOP=_TEMPLATE_TOP_
#SHARE=
#HIDEOS=
#EPICSHIDEOS=
+92 -1
View File
@@ -1,2 +1,93 @@
#RULES.Db
include $(EPICS_BASE)/config/RULES.Db
SUBTOOL = $(EPICS_BASE_HOST_BIN)/subtool
PREFIX=$(shell echo $* | sed -e 's-[0-9]--g' | sed -e 's-\.db--g')
ARCHS += $(BUILD_ARCHS) host cross
ACTIONS += clean inc depends buildInstall build
actionArchTargets = $(foreach action, $(ACTIONS) install,\
$(foreach arch, $(ARCHS), \
$(action)$(DIVIDER)$(arch)))
all install :: inc buildInstall
buildInstall: .DEPENDS dbd $(DBFROMSCH) $(DBFROMTEMPLATE) $(INDDBFROMTEMPLATE) $(PROD)
inc build depends:
$(TOP)/dbd:
$(MKDIR) $(TOP)/dbd
dbd: $(TOP)/dbd
ifndef WIN32
ln -s $(TOP)/dbd dbd
endif
#### The following section is added to
#### allow optimized databases to be built
#### from capfast schematics
#optimization macro
ifeq '$(DB_OPT)' 'YES'
define DB_OPTIMIZE
@echo "Optimizing database $@"
$(RM) $@.tmp
$(DBST) $(INSTALL_DBD)/$(DBDNAME) $@ -d > $@.tmp
$(RM) $@
$(MV) $@.tmp $@
endef
else
define DB_OPTIMIZE
endef
endif
#Creates database in current directory from capfast schematics
$(DBFROMSCH):%.db: %.db.opt
@echo "Installing database $@"
@$(MV) $< $(<:%.opt=%)
%.db.opt: %.edf
$(E2DB) $(E2DB_SYSFLAGS) $(E2DB_FLAGS) -n $@ $<
$(DB_OPTIMIZE)
-@(echo '1,$$g/VAR(/s/VAR(/$$(/g';echo 'w';echo 'q') | ed $@
%.edf: ./%.sch $(DEPSCHS)
@if [ ! -f cad.rc -a -r ../cad.rc ] ; then ln -s ../cad.rc ; fi
$(SCH2EDIF) $(SCH2EDIF_SYSFLAGS) $(SCH2EDIF_FLAGS) $<
######end section added for captast schematics
$(DBFROMTEMPLATE):%.db: %.template %.substitutions
$(RM) $@
$(SUBTOOL) $*.template $*.substitutions > $@
$(INDDBFROMTEMPLATE):%.db: %.substitutions
$(RM) $@
ifndef WIN32
$(SUBTOOL) $(PREFIX).template $*.substitutions > $@
endif
.DEPENDS: Makefile
@$(RM) $@
ifndef WIN32
@for NAME in $(INDDBFROMTEMPLATE) garbage_marty ; do \
if [ $$NAME != garbage_marty ] ; then \
PREFIX="`echo $$NAME | sed -e 's-[0-9]--g' | sed -e 's-\.db--g'`";\
echo "$$NAME: $$PREFIX.template" >> $@;\
fi ; \
done
endif
clean::
@$(RM) dbd $(DBFROMTEMPLATE) $(DBFROMSCH) $(INDDBFROMTEMPLATE) .DEPENDS $(PROD)
$(actionArchTargets) :%:
$(MAKE) $(word 1, $(subst $(DIVIDER), ,$@))
$(ARCHS):%: install
.PHONY :: $(ARCHS) $(ACTIONS)
.PHONY :: $(actionArchTargets)
-include .DEPENDS
+8 -1
View File
@@ -1,2 +1,9 @@
#RULES.ioc
include $(EPICS_BASE)/config/RULES.ioc
include $(EPICS_BASE)/config/RULES_DIRS
buildInstall:: cdcmds
cdcmds: Makefile
$(PERL) $(TOP)/config/makeIoccdcmds.pl $(ARCH)
clean::
@$(RM) cdcmds
+1 -6
View File
@@ -2,15 +2,10 @@
DIRS += $(wildcard ioc*)
DIRS += $(wildcard as*)
include $(EPICS_BASE)/config/RULES_DIRS
ifeq ($(findstring nfsCommands,$(wildcard *)),nfsCommands)
buildInstall:: nfs.cmd
nfs.cmd: nfsCommands
@echo "Creating $@"
@$(RM) $@
@cat $< >> $@
@echo cd \"`\pwd`\" >> $@
$(PERL) $(TOP)/config/makeNfsCommands.pl
clean::
@$(RM) nfs.cmd
endif
@@ -0,0 +1,19 @@
eval 'exec perl -S $0 ${1+"$@"}' # -*- Mode: perl -*-
if $running_under_some_shell; # makeIoccdcmds.pl
use Cwd;
$cwd = cwd();
#hack for sun4
$cwd =~ s|/tmp_mnt||;
$arch = $ARGV[0];
print "arch $arch";
unlink("cdcmds");
open(OUT,">cdcmds") or die "$! opening cdcmds";
print OUT "startup = \"$cwd\"\n";
$appbin = $cwd;
$appbin =~ s/iocBoot.*//;
$appbin = $appbin . "/bin/${arch}";
print OUT "appbin = \"$appbin\"\n";
close OUT;
@@ -0,0 +1,4 @@
TOP = ../..
include $(TOP)/config/CONFIG_APP
include $(TOP)/config/RULES.Db
@@ -0,0 +1,52 @@
record(ai, "$(user):aiExample")
{
field(DESC, "Analog input")
field(INP, "$(user):calcExample.VAL NPP NMS")
field(EGUF, "10")
field(EGU, "Counts")
field(HOPR, "10")
field(LOPR, "0")
field(HIHI, "8")
field(HIGH, "6")
field(LOW, "4")
field(LOLO, "2")
field(HHSV, "MAJOR")
field(HSV, "MINOR")
field(LSV, "MINOR")
field(LLSV, "MAJOR")
}
record(calc, "$(user):calcExample")
{
field(DESC, "Counter")
field(SCAN,"1 second")
field(FLNK, "$(user):aiExample")
field(CALC, "(A<B)?(A+C):D")
field(INPA, "$(user):calcExample.VAL NPP NMS")
field(INPB, "9")
field(INPC, "1")
field(INPD, "0")
field(EGU, "Counts")
field(HOPR, "10")
field(HIHI, "8")
field(HIGH, "6")
field(LOW, "4")
field(LOLO, "2")
field(HHSV, "MAJOR")
field(HSV, "MINOR")
field(LSV, "MINOR")
field(LLSV, "MAJOR")
}
record(xxx, "$(user):xxxExample")
{
field(DESC, "xxx record")
field(EGU, "Counts")
field(HOPR, "10")
field(HIHI, "8")
field(HIGH, "6")
field(LOW, "4")
field(LOLO, "2")
field(HHSV, "MAJOR")
field(HSV, "MINOR")
field(LSV, "MINOR")
field(LLSV, "MAJOR")
}
@@ -0,0 +1,3 @@
TOP=../..
include $(TOP)/config/CONFIG_APP
include $(TOP)/config/RULES_ARCHS
@@ -0,0 +1,19 @@
# Makefile.Host
TOP = ../../..
include $(TOP)/config/CONFIG_APP
#----------------------------------------
# ADD MACRO DEFINITIONS AFTER THIS LINE
#USR_CFLAGS +=
PROD_LIBS += ca
PROD_LIBS += Db
PROD_LIBS += Com
ca_DIR = $(EPICS_BASE_LIB)
Db_DIR = $(EPICS_BASE_LIB)
Com_DIR = $(EPICS_BASE_LIB)
PROD += caExample
include $(TOP)/config/RULES.Host
#----------------------------------------
# ADD RULES AFTER THIS LINE
@@ -0,0 +1,28 @@
# Makefile.Vx
TOP = ../../..
include $(TOP)/config/CONFIG_APP
#----------------------------------------
# ADD MACRO DEFINITIONS AFTER THIS LINE
USER_DBDFLAGS += -I .. -I $(EPICS_BASE)/dbd
RECTYPES += xxxRecord.h
DBDEXPAND = exampleInclude.dbd
DBDNAME = exampleApp.dbd
SRCS.c += ../xxxRecord.c
SRCS.c += ../devXxxSoft.c
LIBOBJS += xxxRecord.o
LIBOBJS += devXxxSoft.o
LIBOBJS += sncExample.o
include ../baseLIBOBJS
LIBNAME = exampleLib
INSTALLS += vxWorks vxWorks.sym iocCore seq
#Note that the command line that builds the
#library $(LIBNAME) may be HUGE (>3kB)
#
include $(TOP)/config/RULES.Vx
#----------------------------------------
# ADD RULES AFTER THIS LINE
+241
View File
@@ -0,0 +1,241 @@
include "menuGlobal.dbd"
include "menuConvert.dbd"
include "aiRecord.dbd"
#include "aaiRecord.dbd"
include "aoRecord.dbd"
#include "aaoRecord.dbd"
include "biRecord.dbd"
include "boRecord.dbd"
include "calcRecord.dbd"
include "calcoutRecord.dbd"
include "compressRecord.dbd"
include "dfanoutRecord.dbd"
#include "egRecord.dbd"
#include "egeventRecord.dbd"
#include "erRecord.dbd"
#include "ereventRecord.dbd"
include "eventRecord.dbd"
include "fanoutRecord.dbd"
#include "histogramRecord.dbd"
include "longinRecord.dbd"
include "longoutRecord.dbd"
include "mbbiRecord.dbd"
include "mbbiDirectRecord.dbd"
include "mbboRecord.dbd"
include "mbboDirectRecord.dbd"
include "permissiveRecord.dbd"
include "pidRecord.dbd"
#include "pulseCounterRecord.dbd"
#include "pulseDelayRecord.dbd"
#include "pulseTrainRecord.dbd"
#include "scanRecord.dbd"
include "selRecord.dbd"
include "seqRecord.dbd"
include "stateRecord.dbd"
#include "steppermotorRecord.dbd"
include "stringinRecord.dbd"
include "stringoutRecord.dbd"
include "subRecord.dbd"
#include "gsubRecord.dbd"
#include "palRecord.dbd"
include "subArrayRecord.dbd"
#include "timerRecord.dbd"
#include "waitRecord.dbd"
include "waveformRecord.dbd"
device(ai,CONSTANT,devAiSoft,"Soft Channel")
device(ai,CONSTANT,devAiSoftRaw,"Raw Soft Channel")
#device(ai,VME_IO,devAiXy566Se,"XYCOM-566 SE Scanned")
#device(ai,VME_IO,devAiXy566Di,"XYCOM-566 Dif Scanned")
#device(ai,VME_IO,devAiXy566DiL,"XYCOM-566 Dif Latched")
#device(ai,VME_IO,devAiDvx2502,"DVX-2502")
#device(ai,CONSTANT,devAiTestAsyn,"Test Asyn")
#device(ai,AB_IO,devAiAb1771Il,"AB-1771IL-Analog In")
#device(ai,AB_IO,devAiAb1771Ife,"AB-1771IFE")
#device(ai,AB_IO,devAiAb1771Ixe,"AB-1771IXE-Millivolt In")
#device(ai,AB_IO,devAiAb1771IfeSe,"AB-1771IFE-SE")
#device(ai,AB_IO,devAiAb1771IfeMa,"AB-1771IFE-4to20MA")
#device(ai,AB_IO,devAiAb1771Ife0to5V,"AB-1771IFE-0to5Volt")
#device(ai,AB_IO,devAiAb1771IrPlatinum,"AB-1771RTD-Platinum")
#device(ai,AB_IO,devAiAb1771IrCopper,"AB-1771RTD-Copper")
#device(ai,CAMAC_IO,devAiCamac,"Camac")
#device(ai,VME_IO,devAiAt5Vxi,"VXI-AT5-AI")
#device(ai,GPIB_IO,devAiK486Gpib,"Keithley-486")
#device(ai,VME_IO,devAiKscV215,"KSC-V215")
#device(ai,INST_IO,devAiVXStats,"VX stats")
#device(aai,CAMAC_IO,devAaiCamac,"Camac")
device(ao,CONSTANT,devAoSoft,"Soft Channel")
device(ao,CONSTANT,devAoSoftRaw,"Raw Soft Channel")
#device(ao,VME_IO,devAoVmiVme4100,"VMIVME-4100")
#device(ao,CONSTANT,devAoTestAsyn,"Test Asyn")
#device(ao,AB_IO,devAoAb1771Ofe,"AB-1771OFE")
#device(ao,CAMAC_IO,devAoCamac,"Camac")
#device(ao,VME_IO,devAoAt5Vxi,"VXI-AT5-AO")
#device(ao,INST_IO,devAoVXStats,"VX stats")
device(bi,CONSTANT,devBiSoft,"Soft Channel")
device(bi,CONSTANT,devBiSoftRaw,"Raw Soft Channel")
#device(bi,VME_IO,devBiMpv910,"MPV-910")
#device(bi,VME_IO,devBiXVme210,"XVME-210")
#device(bi,CONSTANT,devBiTestAsyn,"Test Asyn")
#device(bi,AB_IO,devBiAb,"AB-Binary Input")
#device(bi,AB_IO,devBiAb16,"AB-16 bit BI")
#device(bi,AB_IO,devBiAb32,"AB-32 bit BI")
#device(bi,CAMAC_IO,devBiCamac,"Camac")
#device(bi,VME_IO,devBiAt5Vxi,"VXI-AT5-BI")
#device(bi,VME_IO,devBiXy240,"XYCOM-240")
#device(bi,VME_IO,devBiHpe1368a,"VXI-HPE1368-VS")
#device(bi,VME_IO,devBiAt8Fp,"AT8-FP10S")
#device(bi,VME_IO,devBiAvme9440,"AVME9440 I")
device(bo,CONSTANT,devBoSoft,"Soft Channel")
device(bo,CONSTANT,devBoSoftRaw,"Raw Soft Channel")
#device(bo,VME_IO,devBoMpv902,"MPV-902")
#device(bo,VME_IO,devBoXVme220,"XVME-220")
#device(bo,CONSTANT,devBoTestAsyn,"Test Asyn")
#device(bo,AB_IO,devBoAb,"AB-Binary Output")
#device(bo,AB_IO,devBoAb16,"AB-16 bit BO")
#device(bo,AB_IO,devBoAb32,"AB-32 bit BO")
#device(bo,CAMAC_IO,devBoCamac,"Camac")
#device(bo,VME_IO,devBoAt5Vxi,"VXI-AT5-BO")
#device(bo,GPIB_IO,devBoK486Gpib,"Keithley-486")
#device(bo,VME_IO,devBoXy240,"XYCOM-240")
#device(bo,VME_IO,devBoHpe1368a,"VXI-HPE1368-VS")
#device(bo,VME_IO,devBoAt8Fp,"AT8-FP10S")
#device(bo,VME_IO,devBoAvme9440,"AVME9440 O")
device(event,CONSTANT,devEventSoft,"Soft Channel")
#device(event,VME_IO,devEventMz8310,"Mizar-8310")
#device(event,CONSTANT,devEventTestIoEvent,"Test IoEvent")
#device(event,VME_IO,devErEpicsEvent,"APS event receiver")
#device(histogram,CONSTANT,devHistogramSoft,"Soft Channel")
#device(histogram,CONSTANT,devHistogramTestAsyn,"Test Asyn")
device(longin,CONSTANT,devLiSoft,"Soft Channel")
#device(longin,CAMAC_IO,devLiCamac,"Camac")
device(longout,CONSTANT,devLoSoft,"Soft Channel")
#device(longout,CAMAC_IO,devLoCamac,"Camac")
device(mbbi,CONSTANT,devMbbiSoft,"Soft Channel")
device(mbbi,CONSTANT,devMbbiSoftRaw,"Raw Soft Channel")
#device(mbbi,VME_IO,devMbbiMpv910,"MPV-910")
#device(mbbi,VME_IO,devMbbiXVme210,"XVME-210")
#device(mbbi,CONSTANT,devMbbiTestAsyn,"Test Asyn")
#device(mbbi,AB_IO,devMbbiAb,"AB-Binary Input")
#device(mbbi,AB_IO,devMbbiAb16,"AB-16 bit BI")
#device(mbbi,AB_IO,devMbbiAb32,"AB-32 bit BI")
#device(mbbi,AB_IO,devMbbiAbAdapterStat,"AB-Adapter Status")
#device(mbbi,AB_IO,devMbbiAbCardStat,"AB-Card Status")
#device(mbbi,CAMAC_IO,devMbbiCamac,"Camac")
#device(mbbi,VME_IO,devMbbiAt5Vxi,"VXI-AT5-BI")
#device(mbbi,VME_IO,devMbbiXy240,"XYCOM-240")
#device(mbbi,VME_IO,devMbbiHpe1368a,"VXI-HPE1368-VS")
#device(mbbi,VME_IO,devMbbiAt8Fp,"AT8-FP10S")
#device(mbbi,VME_IO,devMbbiAvme9440,"AVME9440 I")
device(mbbiDirect,CONSTANT,devMbbiDirectSoft,"Soft Channel")
device(mbbiDirect,CONSTANT,devMbbiDirectSoftRaw,"Raw Soft Channel")
#device(mbbiDirect,VME_IO,devMbbiDirectMpv910,"MPV-910")
#device(mbbiDirect,VME_IO,devMbbiDirectXVme210,"XVME-210")
#device(mbbiDirect,AB_IO,devMbbiDirectAb,"AB-Binary Input")
#device(mbbiDirect,AB_IO,devMbbiDirectAb16,"AB-16 bit BI")
#device(mbbiDirect,AB_IO,devMbbiDirectAb32,"AB-32 bit BI")
#device(mbbiDirect,CAMAC_IO,devMbbiDirectCamac,"Camac")
#device(mbbiDirect,VME_IO,devMbbiDirectAt5Vxi,"VXI-AT5-BI")
device(mbbo,CONSTANT,devMbboSoft,"Soft Channel")
device(mbbo,CONSTANT,devMbboSoftRaw,"Raw Soft Channel")
#device(mbbo,VME_IO,devMbboMpv902,"MPV-902")
#device(mbbo,VME_IO,devMbboXVme220,"XVME-220")
#device(mbbo,CONSTANT,devMbboTestAsyn,"Test Asyn")
#device(mbbo,AB_IO,devMbboAb,"AB-Binary Output")
#device(mbbo,AB_IO,devMbboAb16,"AB-16 bit BO")
#device(mbbo,AB_IO,devMbboAb32,"AB-32 bit BO")
#device(mbbo,VME_IO,devMbboAt5Vxi,"VXI-AT5-BO")
#device(mbbo,GPIB_IO,devMbboK486Gpib,"Keithley-486")
#device(mbbo,VME_IO,devMbboXy240,"XYCOM-240")
#device(mbbo,VME_IO,devMbboHpe1368a,"VXI-HPE1368-VS")
#device(mbbo,VME_IO,devMbboAt8Fp,"AT8-FP10S")
#device(mbbo,VME_IO,devMbboAvme9440,"AVME9440 O")
device(mbboDirect,CONSTANT,devMbboDirectSoft,"Soft Channel")
device(mbboDirect,CONSTANT,devMbboDirectSoftRaw,"Raw Soft Channel")
#device(mbboDirect,VME_IO,devMbboDirectMpv902,"MPV-902")
#device(mbboDirect,VME_IO,devMbboDirectXVme220,"XVME-220")
#device(mbboDirect,AB_IO,devMbboDirectAb,"AB-Binary Output")
#device(mbboDirect,AB_IO,devMbboDirectAb16,"AB-16 bit BO")
#device(mbboDirect,AB_IO,devMbboDirectAb32,"AB-32 bit BO")
#device(mbboDirect,CAMAC_IO,devMbboDirectCamac,"Camac")
#device(mbboDirect,VME_IO,devMbboDirectAt5Vxi,"VXI-AT5-BO")
#device(pulseCounter,VME_IO,devPcMz8310,"Mizar-8310")
#device(pulseDelay,VME_IO,devPdMz8310,"Mizar-8310")
#device(pulseTrain,CONSTANT,devPtSoft,"Soft Channel")
#device(pulseTrain,VME_IO,devPtMz8310,"Mizar-8310")
#device(steppermotor,VME_IO,devSmCompumotor1830,"Compumotor 1830")
#device(steppermotor,VME_IO,devSmOms6Axis,"OMS 6-Axis")
#device(steppermotor,AB_IO,devSmAB1746Hstp1,"Allen Bradley 1746-HTSP1")
device(stringin,CONSTANT,devSiSoft,"Soft Channel")
#device(stringin,CONSTANT,devSiTestAsyn,"Test Asyn")
device(stringout,CONSTANT,devSoSoft,"Soft Channel")
#device(stringout,CONSTANT,devSoTestAsyn,"Test Asyn")
device(subArray,CONSTANT,devSASoft,"Soft Channel")
#device(timer,VME_IO,devTmMizar8310,"Mizar-8310")
#device(timer,VME_IO,devTmDg535,"DG 535")
#device(timer,VME_IO,devTmAt5Vxi,"VXI-AT5-TIME")
device(waveform,CONSTANT,devWfSoft,"Soft Channel")
#device(waveform,VME_IO,devWfXy566Sc,"XYCOM-566 Single Channel")
#device(waveform,VME_IO,devWfComet,"Comet Digitizer")
#device(waveform,VME_IO,devWfJoergerVtr1,"Joerger Digitizer")
#device(waveform,CONSTANT,devWfTestAsyn,"Test Asyn")
#device(waveform,VME_IO,devWfDvx2502,"DVX-2502")
#device(waveform,VME_IO,devWfPentek4261,"Pentek 4261")
#device(waveform,CAMAC_IO,devWfCamac,"Camac")
#device(waveform,VME_IO,devWfJoergerVtr1,"Joerger-VTR1")
#device(waveform,VME_IO,devWfComet,"Omnibyte-COMET")
#device(eg,VME_IO,devEg,"APS event generator G")
#device(egevent,VME_IO,devEgEvent,"APS event generator E")
#device(er,VME_IO,devEr,"APS event receiver")
#device(erevent,VME_IO,devErevent,"APS event receiver")
#device(wait,CONSTANT,devWaitIoEvent,"Soft Channel")
#device(ai,INST_IO,devAiCan,"CANbus")
#device(ao,INST_IO,devAoCan,"CANbus")
#device(bi,INST_IO,devBiCan,"CANbus")
#device(bo,INST_IO,devBoCan,"CANbus")
#device(mbbi,INST_IO,devMbbiCan,"CANbus")
#device(mbbo,INST_IO,devMbboCan,"CANbus")
#device(mbbiDirect,INST_IO,devMbbiDirectCan,"CANbus")
#device(mbboDirect,INST_IO,devMbboDirectCan,"CANbus")
#device(bi,VME_IO,devBiVmic2534,"Vmic2534")
#device(bo,VME_IO,devBoVmic2534,"Vmic2534")
#device(mbbi,VME_IO,devMbbiVmic2534,"Vmic2534")
#device(mbbo,VME_IO,devMbboVmic2534,"Vmic2534")
include "symb.dbd"
#device(ai,AB_IO,devAiAbSlcDcm,"AB-SLC500DCM")
#device(ai,AB_IO,devAiAbSlcDcmSigned,"AB-SLC500DCM-Signed")
#device(ao,AB_IO,devAoAbSlcDcm,"AB-SLC500DCM")
#device(longin,AB_IO,devLiAbSlcDcm,"AB-SLC500DCM")
#device(longout,AB_IO,devLoAbSlcDcm,"AB-SLC500DCM")
#driver(drvXy010)
#driver(drvVxi)
#driver(drvGpib)
#driver(drvBitBus)
#driver(drvBb910)
#driver(drvXy210)
#driver(drvBb902)
#driver(drvXy220)
#driver(drvXy566)
#driver(drvDvx)
#driver(drvVmi4100)
#driver(drvAb)
#driver(drvAt5Vxi)
#driver(drvCompuSm)
#driver(drvOms)
#driver(drvMz8310)
#driver(drvHpe1368a)
#driver(drvXy240)
#driver(drvKscV215)
#driver(drvComet)
#driver(drvJgvtr1)
#driver(drvFp)
#driver(drvFpm)
#driver(drvIpac)
#driver(drvTip810)
#driver(drvVmi2534)
#include "bptTypeJdegC.dbd"
#include "bptTypeJdegF.dbd"
#include "bptTypeKdegC.dbd"
#include "bptTypeKdegF.dbd"
@@ -0,0 +1,216 @@
#LIBOBJS += $(EPICS_BASE_BIN)/aaiRecord.o
#LIBOBJS += $(EPICS_BASE_BIN)/aaoRecord.o
LIBOBJS += $(EPICS_BASE_BIN)/aiRecord.o
LIBOBJS += $(EPICS_BASE_BIN)/aoRecord.o
LIBOBJS += $(EPICS_BASE_BIN)/biRecord.o
LIBOBJS += $(EPICS_BASE_BIN)/boRecord.o
LIBOBJS += $(EPICS_BASE_BIN)/calcRecord.o
LIBOBJS += $(EPICS_BASE_BIN)/calcoutRecord.o
LIBOBJS += $(EPICS_BASE_BIN)/compressRecord.o
LIBOBJS += $(EPICS_BASE_BIN)/dfanoutRecord.o
#LIBOBJS += $(EPICS_BASE_BIN)/egRecord.o
#LIBOBJS += $(EPICS_BASE_BIN)/egeventRecord.o
#LIBOBJS += $(EPICS_BASE_BIN)/erRecord.o
#LIBOBJS += $(EPICS_BASE_BIN)/ereventRecord.o
LIBOBJS += $(EPICS_BASE_BIN)/eventRecord.o
LIBOBJS += $(EPICS_BASE_BIN)/fanoutRecord.o
#LIBOBJS += $(EPICS_BASE_BIN)/gsubRecord.o
#LIBOBJS += $(EPICS_BASE_BIN)/histogramRecord.o
LIBOBJS += $(EPICS_BASE_BIN)/longinRecord.o
LIBOBJS += $(EPICS_BASE_BIN)/longoutRecord.o
LIBOBJS += $(EPICS_BASE_BIN)/mbbiRecord.o
LIBOBJS += $(EPICS_BASE_BIN)/mbbiDirectRecord.o
LIBOBJS += $(EPICS_BASE_BIN)/mbboRecord.o
LIBOBJS += $(EPICS_BASE_BIN)/mbboDirectRecord.o
#LIBOBJS += $(EPICS_BASE_BIN)/palRecord.o
LIBOBJS += $(EPICS_BASE_BIN)/permissiveRecord.o
LIBOBJS += $(EPICS_BASE_BIN)/pidRecord.o
#LIBOBJS += $(EPICS_BASE_BIN)/pulseCounterRecord.o
#LIBOBJS += $(EPICS_BASE_BIN)/pulseDelayRecord.o
#LIBOBJS += $(EPICS_BASE_BIN)/pulseTrainRecord.o
#LIBOBJS += $(EPICS_BASE_BIN)/scanRecord.o
#LIBOBJS += $(EPICS_BASE_BIN)/recWaitCa.o
#LIBOBJS += $(EPICS_BASE_BIN)/recDynLink.o
#LIBOBJS += $(EPICS_BASE_BIN)/recDynLinkTest.o
LIBOBJS += $(EPICS_BASE_BIN)/selRecord.o
LIBOBJS += $(EPICS_BASE_BIN)/seqRecord.o
LIBOBJS += $(EPICS_BASE_BIN)/stateRecord.o
#LIBOBJS += $(EPICS_BASE_BIN)/steppermotorRecord.o
LIBOBJS += $(EPICS_BASE_BIN)/stringinRecord.o
LIBOBJS += $(EPICS_BASE_BIN)/stringoutRecord.o
LIBOBJS += $(EPICS_BASE_BIN)/subRecord.o
LIBOBJS += $(EPICS_BASE_BIN)/subArrayRecord.o
#LIBOBJS += $(EPICS_BASE_BIN)/timerRecord.o
#LIBOBJS += $(EPICS_BASE_BIN)/waitRecord.o
LIBOBJS += $(EPICS_BASE_BIN)/waveformRecord.o
#
# Device Support
#
#LIBOBJS += $(EPICS_BASE_BIN)/devAaiCamac.o
#LIBOBJS += $(EPICS_BASE_BIN)/devAiCamac.o
#LIBOBJS += $(EPICS_BASE_BIN)/devAiDvx2502.o
#LIBOBJS += $(EPICS_BASE_BIN)/devAiKscV215.o
LIBOBJS += $(EPICS_BASE_BIN)/devAiSoft.o
LIBOBJS += $(EPICS_BASE_BIN)/devAiSoftRaw.o
#LIBOBJS += $(EPICS_BASE_BIN)/devVXStats.o
LIBOBJS += $(EPICS_BASE_BIN)/devAiTestAsyn.o
#LIBOBJS += $(EPICS_BASE_BIN)/devAiXy566Di.o
#LIBOBJS += $(EPICS_BASE_BIN)/devAiXy566DiL.o
#LIBOBJS += $(EPICS_BASE_BIN)/devAiXy566Se.o
#LIBOBJS += $(EPICS_BASE_BIN)/devAaoCamac.o
#LIBOBJS += $(EPICS_BASE_BIN)/devAoCamac.o
LIBOBJS += $(EPICS_BASE_BIN)/devAoSoft.o
LIBOBJS += $(EPICS_BASE_BIN)/devAoSoftRaw.o
LIBOBJS += $(EPICS_BASE_BIN)/devAoTestAsyn.o
#LIBOBJS += $(EPICS_BASE_BIN)/devAoVmiVme4100.o
#LIBOBJS += $(EPICS_BASE_BIN)/devApsEg.o
#LIBOBJS += $(EPICS_BASE_BIN)/devApsEr.o
#LIBOBJS += $(EPICS_BASE_BIN)/devAt5Vxi.o
#LIBOBJS += $(EPICS_BASE_BIN)/devAt8Fp.o
#LIBOBJS += $(EPICS_BASE_BIN)/devAvme9440.o
#LIBOBJS += $(EPICS_BASE_BIN)/devBiCamac.o
#LIBOBJS += $(EPICS_BASE_BIN)/devBiMpv910.o
LIBOBJS += $(EPICS_BASE_BIN)/devBiSoft.o
LIBOBJS += $(EPICS_BASE_BIN)/devBiSoftRaw.o
LIBOBJS += $(EPICS_BASE_BIN)/devBiTestAsyn.o
#LIBOBJS += $(EPICS_BASE_BIN)/devBiXVme210.o
#LIBOBJS += $(EPICS_BASE_BIN)/devBoCamac.o
#LIBOBJS += $(EPICS_BASE_BIN)/devBoMpv902.o
LIBOBJS += $(EPICS_BASE_BIN)/devBoSoft.o
LIBOBJS += $(EPICS_BASE_BIN)/devBoSoftRaw.o
LIBOBJS += $(EPICS_BASE_BIN)/devBoTestAsyn.o
#LIBOBJS += $(EPICS_BASE_BIN)/devBoXVme220.o
#LIBOBJS += $(EPICS_BASE_BIN)/devCommonGpib.o
LIBOBJS += $(EPICS_BASE_BIN)/devEventSoft.o
LIBOBJS += $(EPICS_BASE_BIN)/devEventTestIoEvent.o
LIBOBJS += $(EPICS_BASE_BIN)/devHistogramSoft.o
LIBOBJS += $(EPICS_BASE_BIN)/devHistogramTestAsyn.o
#LIBOBJS += $(EPICS_BASE_BIN)/devHpe1368a.o
#LIBOBJS += $(EPICS_BASE_BIN)/devLiCamac.o
LIBOBJS += $(EPICS_BASE_BIN)/devLiSoft.o
#LIBOBJS += $(EPICS_BASE_BIN)/devLoCamac.o
LIBOBJS += $(EPICS_BASE_BIN)/devLoSoft.o
#LIBOBJS += $(EPICS_BASE_BIN)/devMbbiCamac.o
#LIBOBJS += $(EPICS_BASE_BIN)/devMbbiDirectCamac.o
#LIBOBJS += $(EPICS_BASE_BIN)/devMbbiDirectMpv910.o
LIBOBJS += $(EPICS_BASE_BIN)/devMbbiDirectSoft.o
LIBOBJS += $(EPICS_BASE_BIN)/devMbbiDirectSoftRaw.o
#LIBOBJS += $(EPICS_BASE_BIN)/devMbbiDirectXVme210.o
#LIBOBJS += $(EPICS_BASE_BIN)/devMbbiMpv910.o
LIBOBJS += $(EPICS_BASE_BIN)/devMbbiSoft.o
LIBOBJS += $(EPICS_BASE_BIN)/devMbbiSoftRaw.o
LIBOBJS += $(EPICS_BASE_BIN)/devMbbiTestAsyn.o
#LIBOBJS += $(EPICS_BASE_BIN)/devMbbiXVme210.o
#LIBOBJS += $(EPICS_BASE_BIN)/devMbboCamac.o
#LIBOBJS += $(EPICS_BASE_BIN)/devMbboDirectCamac.o
#LIBOBJS += $(EPICS_BASE_BIN)/devMbboDirectMpv902.o
LIBOBJS += $(EPICS_BASE_BIN)/devMbboDirectSoft.o
LIBOBJS += $(EPICS_BASE_BIN)/devMbboDirectSoftRaw.o
#LIBOBJS += $(EPICS_BASE_BIN)/devMbboDirectXVme220.o
#LIBOBJS += $(EPICS_BASE_BIN)/devMbboMpv902.o
LIBOBJS += $(EPICS_BASE_BIN)/devMbboSoft.o
LIBOBJS += $(EPICS_BASE_BIN)/devMbboSoftRaw.o
LIBOBJS += $(EPICS_BASE_BIN)/devMbboTestAsyn.o
#LIBOBJS += $(EPICS_BASE_BIN)/devMbboXVme220.o
#LIBOBJS += $(EPICS_BASE_BIN)/devMz8310.o
LIBOBJS += $(EPICS_BASE_BIN)/devPtSoft.o
LIBOBJS += $(EPICS_BASE_BIN)/devSASoft.o
LIBOBJS += $(EPICS_BASE_BIN)/devSiSoft.o
LIBOBJS += $(EPICS_BASE_BIN)/devSiTestAsyn.o
#LIBOBJS += $(EPICS_BASE_BIN)/devSmCompumotor1830.o
#LIBOBJS += $(EPICS_BASE_BIN)/devSmOms6Axis.o
LIBOBJS += $(EPICS_BASE_BIN)/devSoSoft.o
LIBOBJS += $(EPICS_BASE_BIN)/devSoTestAsyn.o
#LIBOBJS += $(EPICS_BASE_BIN)/devTimerMz8310.o
#LIBOBJS += $(EPICS_BASE_BIN)/devWfCamac.o
#LIBOBJS += $(EPICS_BASE_BIN)/devWfComet.o
#LIBOBJS += $(EPICS_BASE_BIN)/devWfDvx2502.o
#LIBOBJS += $(EPICS_BASE_BIN)/devWfJoergerVtr1.o
LIBOBJS += $(EPICS_BASE_BIN)/devWfSoft.o
LIBOBJS += $(EPICS_BASE_BIN)/devWfTestAsyn.o
#LIBOBJS += $(EPICS_BASE_BIN)/devWfXy566Sc.o
#LIBOBJS += $(EPICS_BASE_BIN)/devWfPentek4261.o
#LIBOBJS += $(EPICS_BASE_BIN)/devXy240.o
#LIBOBJS += $(EPICS_BASE_BIN)/devAB1771IFE.o
#LIBOBJS += $(EPICS_BASE_BIN)/devAB1771IL.o
#LIBOBJS += $(EPICS_BASE_BIN)/devAB1771IR.o
#LIBOBJS += $(EPICS_BASE_BIN)/devAB1771IXE.o
#LIBOBJS += $(EPICS_BASE_BIN)/devAB1771OFE.o
#LIBOBJS += $(EPICS_BASE_BIN)/devABSLCDCM.o
#LIBOBJS += $(EPICS_BASE_BIN)/devABBINARY.o
#LIBOBJS += $(EPICS_BASE_BIN)/devABStatus.o
#LIBOBJS += $(EPICS_BASE_BIN)/devAiCan.o
#LIBOBJS += $(EPICS_BASE_BIN)/devAoCan.o
#LIBOBJS += $(EPICS_BASE_BIN)/devBiCan.o
#LIBOBJS += $(EPICS_BASE_BIN)/devBoCan.o
#LIBOBJS += $(EPICS_BASE_BIN)/devMbbiCan.o
#LIBOBJS += $(EPICS_BASE_BIN)/devMbboCan.o
#LIBOBJS += $(EPICS_BASE_BIN)/devMbbiDirectCan.o
#LIBOBJS += $(EPICS_BASE_BIN)/devMbboDirectCan.o
#LIBOBJS += $(EPICS_BASE_BIN)/devVmic2534.o
LIBOBJS += $(EPICS_BASE_BIN)/symb
#
# Driver support ANSI
#
#LIBOBJS += $(EPICS_BASE_BIN)/drvAb.o
#LIBOBJS += $(EPICS_BASE_BIN)/drvAt5Vxi.o
LIBOBJS += $(EPICS_BASE_BIN)/drvEpvxi.o
LIBOBJS += $(EPICS_BASE_BIN)/drvEpvxiMsg.o
LIBOBJS += $(EPICS_BASE_BIN)/drvHp1404a.o
#LIBOBJS += $(EPICS_BASE_BIN)/drvHpe1368a.o
#LIBOBJS += $(EPICS_BASE_BIN)/drvHpe1445a.o
#LIBOBJS += $(EPICS_BASE_BIN)/drvKscV215.o
#LIBOBJS += $(EPICS_BASE_BIN)/drvMz8310.o
#LIBOBJS += $(EPICS_BASE_BIN)/drvStc.o
#LIBOBJS += $(EPICS_BASE_BIN)/drvTime.o
#LIBOBJS += $(EPICS_BASE_BIN)/drvCaenV265.o
#LIBOBJS += $(EPICS_BASE_BIN)/drvVipc310.o
#LIBOBJS += $(EPICS_BASE_BIN)/drvVipc610.o
#LIBOBJS += $(EPICS_BASE_BIN)/drvIpMv162.o
#LIBOBJS += $(EPICS_BASE_BIN)/drvIpac.o
#LIBOBJS += $(EPICS_BASE_BIN)/drvTip810.o
#
# Driver support NON ANSI
#
#LIBOBJS += $(EPICS_BASE_BIN)/module_types.o
#LIBOBJS += $(EPICS_BASE_BIN)/drvBB232.o
#LIBOBJS += $(EPICS_BASE_BIN)/drvBb902.o
#LIBOBJS += $(EPICS_BASE_BIN)/drvBb910.o
#LIBOBJS += $(EPICS_BASE_BIN)/drvBitBus.o
#LIBOBJS += $(EPICS_BASE_BIN)/drvComet.o
#LIBOBJS += $(EPICS_BASE_BIN)/drvCompuSm.o
#LIBOBJS += $(EPICS_BASE_BIN)/drvDvx.o
#LIBOBJS += $(EPICS_BASE_BIN)/drvFp.o
#LIBOBJS += $(EPICS_BASE_BIN)/drvFpm.o
#LIBOBJS += $(EPICS_BASE_BIN)/drvGpib.o
#LIBOBJS += $(EPICS_BASE_BIN)/drvJgvtr1.o
#LIBOBJS += $(EPICS_BASE_BIN)/drvMsg.o
#LIBOBJS += $(EPICS_BASE_BIN)/drvOms.o
#LIBOBJS += $(EPICS_BASE_BIN)/drvTranServ.o
#LIBOBJS += $(EPICS_BASE_BIN)/drvVmi4100.o
#LIBOBJS += $(EPICS_BASE_BIN)/drvXy010.o
#LIBOBJS += $(EPICS_BASE_BIN)/drvXy210.o
#LIBOBJS += $(EPICS_BASE_BIN)/drvXy220.o
#LIBOBJS += $(EPICS_BASE_BIN)/drvXy240.o
#LIBOBJS += $(EPICS_BASE_BIN)/drvXy566.o
#LIBOBJS += $(EPICS_BASE_BIN)/drvVmic2534.o
#
#from src/devOpt
#
#LIBOBJS += $(EPICS_BASE_BIN)/devAnalytekGpib.o
#LIBOBJS += $(EPICS_BASE_BIN)/devBBInteract.o
#LIBOBJS += $(EPICS_BASE_BIN)/devGpibInteract.o
#LIBOBJS += $(EPICS_BASE_BIN)/devK486Gpib.o
#LIBOBJS += $(EPICS_BASE_BIN)/devLibOpt.o
#LIBOBJS += $(EPICS_BASE_BIN)/devXxDc5009Gpib.o
#LIBOBJS += $(EPICS_BASE_BIN)/devXxDg535Gpib.o
#LIBOBJS += $(EPICS_BASE_BIN)/devXxK196Gpib.o
#LIBOBJS += $(EPICS_BASE_BIN)/devXxK263Gpib.o
#LIBOBJS += $(EPICS_BASE_BIN)/devXxSkeletonGpib.o
#LIBOBJS += $(EPICS_BASE_BIN)/devXxSr620Gpib.o
@@ -0,0 +1,26 @@
/*caExample.c*/
#include <stddef.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "cadef.h"
main(int argc,char **argv)
{
double data;
int status;
chid mychid;
if(argc != 2) {
fprintf(stderr,"usage: caExample pvname\n");
exit(1);
}
SEVCHK(ca_task_initialize(),"ca_task_initialize");
SEVCHK(ca_search(argv[1],&mychid),"ca_search failure");
SEVCHK(ca_pend_io(5.0),"ca_pend_io failure");
SEVCHK(ca_get(DBR_DOUBLE,mychid,(void *)&data),"ca_get failure");
SEVCHK(ca_pend_io(5.0),"ca_pend_io failure");
printf("%s %f\n",argv[1],data);
return(0);
}
@@ -0,0 +1,55 @@
/* devXxxSoft.c */
/* Example device support module */
#include <vxWorks.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <alarm.h>
#include <cvtTable.h>
#include <dbDefs.h>
#include <dbAccess.h>
#include <recSup.h>
#include <devSup.h>
#include <link.h>
#include <xxxRecord.h>
/*Create the dset for devXxxSoft */
static long init_record();
static long read_xxx();
struct {
long number;
DEVSUPFUN report;
DEVSUPFUN init;
DEVSUPFUN init_record;
DEVSUPFUN get_ioint_info;
DEVSUPFUN read_xxx;
}devXxxSoft={
5,
NULL,
NULL,
init_record,
NULL,
read_xxx,
};
static long init_record(pxxx)
struct xxxRecord *pxxx;
{
if(recGblInitConstantLink(&pxxx->inp,DBF_DOUBLE,&pxxx->val))
pxxx->udf = FALSE;
return(0);
}
static long read_xxx(pxxx)
struct xxxRecord *pxxx;
{
long status;
status = dbGetLink(&(pxxx->inp),DBF_DOUBLE, &(pxxx->val),0,0);
/*If return was succesful then set undefined false*/
if(!status) pxxx->udf = FALSE;
return(0);
}
@@ -0,0 +1,3 @@
include "base.dbd"
include "xxxRecord.dbd"
device(xxx,CONSTANT,devXxxSoft,"SoftChannel")
@@ -0,0 +1,28 @@
program snctest
float v;
assign v to "_USER_:xxxExample";
monitor v;
ss ss1
{
state low
{
when(v>5.0)
{
printf("changing to high\n");
} state high
when(delay(.1))
{
} state low
}
state high
{
when(v<=5.0)
{
printf("changing to low\n");
} state low
when(delay(.1))
{
} state high
}
}
@@ -0,0 +1,268 @@
/* xxxRecord.c */
/* Example record support module */
#include <vxWorks.h>
#include <stddef.h>
#include <stdio.h>
#include <lstLib.h>
#include <string.h>
#include <alarm.h>
#include <dbEvent.h>
#include <dbDefs.h>
#include <dbAccess.h>
#include <devSup.h>
#include <errMdef.h>
#include <recSup.h>
#include <special.h>
#define GEN_SIZE_OFFSET
#include <xxxRecord.h>
#undef GEN_SIZE_OFFSET
/* Create RSET - Record Support Entry Table */
#define report NULL
#define initialize NULL
static long init_record();
static long process();
#define special NULL
#define get_value NULL
#define cvt_dbaddr NULL
#define get_array_info NULL
#define put_array_info NULL
static long get_units();
static long get_precision();
#define get_enum_str NULL
#define get_enum_strs NULL
#define put_enum_str NULL
static long get_graphic_double();
static long get_control_double();
static long get_alarm_double();
struct rset xxxRSET={
RSETNUMBER,
report,
initialize,
init_record,
process,
special,
get_value,
cvt_dbaddr,
get_array_info,
put_array_info,
get_units,
get_precision,
get_enum_str,
get_enum_strs,
put_enum_str,
get_graphic_double,
get_control_double,
get_alarm_double};
typedef struct xxxset { /* xxx input dset */
long number;
DEVSUPFUN dev_report;
DEVSUPFUN init;
DEVSUPFUN init_record; /*returns: (-1,0)=>(failure,success)*/
DEVSUPFUN get_ioint_info;
DEVSUPFUN read_xxx;
}xxxdset;
static void alarm(xxxRecord *pxxx);
static void monitor(xxxRecord *pxxx);
static long init_record(void *precord,int pass)
{
xxxRecord *pxxx = (xxxRecord *)precord;
xxxdset *pdset;
long status;
if (pass==0) return(0);
if(!(pdset = (xxxdset *)(pxxx->dset))) {
recGblRecordError(S_dev_noDSET,(void *)pxxx,"xxx: init_record");
return(S_dev_noDSET);
}
/* must have read_xxx function defined */
if( (pdset->number < 5) || (pdset->read_xxx == NULL) ) {
recGblRecordError(S_dev_missingSup,(void *)pxxx,"xxx: init_record");
return(S_dev_missingSup);
}
if( pdset->init_record ) {
if((status=(*pdset->init_record)(pxxx))) return(status);
}
return(0);
}
static long process(void *precord)
{
xxxRecord *pxxx = (xxxRecord *)precord;
xxxdset *pdset = (xxxdset *)(pxxx->dset);
long status;
unsigned char pact=pxxx->pact;
if( (pdset==NULL) || (pdset->read_xxx==NULL) ) {
pxxx->pact=TRUE;
recGblRecordError(S_dev_missingSup,(void *)pxxx,"read_xxx");
return(S_dev_missingSup);
}
/* pact must not be set until after calling device support */
status=(*pdset->read_xxx)(pxxx);
/* check if device support set pact */
if ( !pact && pxxx->pact ) return(0);
pxxx->pact = TRUE;
recGblGetTimeStamp(pxxx);
/* check for alarms */
alarm(pxxx);
/* check event list */
monitor(pxxx);
/* process the forward scan link record */
recGblFwdLink(pxxx);
pxxx->pact=FALSE;
return(status);
}
static long get_units(DBADDR *paddr, char *units)
{
xxxRecord *pxxx=(xxxRecord *)paddr->precord;
strncpy(units,pxxx->egu,DB_UNITS_SIZE);
return(0);
}
static long get_precision(DBADDR *paddr, long *precision)
{
xxxRecord *pxxx=(xxxRecord *)paddr->precord;
*precision = pxxx->prec;
if(paddr->pfield == (void *)&pxxx->val) return(0);
recGblGetPrec(paddr,precision);
return(0);
}
static long get_graphic_double(DBADDR *paddr,struct dbr_grDouble *pgd)
{
xxxRecord *pxxx=(xxxRecord *)paddr->precord;
int fieldIndex = dbGetFieldIndex(paddr);
if(fieldIndex == xxxRecordVAL
|| fieldIndex == xxxRecordHIHI
|| fieldIndex == xxxRecordHIGH
|| fieldIndex == xxxRecordLOW
|| fieldIndex == xxxRecordLOLO
|| fieldIndex == xxxRecordHOPR
|| fieldIndex == xxxRecordLOPR) {
pgd->upper_disp_limit = pxxx->hopr;
pgd->lower_disp_limit = pxxx->lopr;
} else recGblGetGraphicDouble(paddr,pgd);
return(0);
}
static long get_control_double(DBADDR *paddr,struct dbr_ctrlDouble *pcd)
{
xxxRecord *pxxx=(xxxRecord *)paddr->precord;
int fieldIndex = dbGetFieldIndex(paddr);
if(fieldIndex == xxxRecordVAL
|| fieldIndex == xxxRecordHIHI
|| fieldIndex == xxxRecordHIGH
|| fieldIndex == xxxRecordLOW
|| fieldIndex == xxxRecordLOLO) {
pcd->upper_ctrl_limit = pxxx->hopr;
pcd->lower_ctrl_limit = pxxx->lopr;
} else recGblGetControlDouble(paddr,pcd);
return(0);
}
static long get_alarm_double(DBADDR *paddr,struct dbr_alDouble *pad)
{
xxxRecord *pxxx=(xxxRecord *)paddr->precord;
int fieldIndex = dbGetFieldIndex(paddr);
if(fieldIndex == xxxRecordVAL) {
pad->upper_alarm_limit = pxxx->hihi;
pad->upper_warning_limit = pxxx->high;
pad->lower_warning_limit = pxxx->low;
pad->lower_alarm_limit = pxxx->lolo;
} else recGblGetAlarmDouble(paddr,pad);
return(0);
}
static void alarm(xxxRecord *pxxx)
{
double val;
float hyst, lalm, hihi, high, low, lolo;
unsigned short hhsv, llsv, hsv, lsv;
if(pxxx->udf == TRUE ){
recGblSetSevr(pxxx,UDF_ALARM,INVALID_ALARM);
return;
}
hihi = pxxx->hihi; lolo = pxxx->lolo; high = pxxx->high; low = pxxx->low;
hhsv = pxxx->hhsv; llsv = pxxx->llsv; hsv = pxxx->hsv; lsv = pxxx->lsv;
val = pxxx->val; hyst = pxxx->hyst; lalm = pxxx->lalm;
/* alarm condition hihi */
if (hhsv && (val >= hihi || ((lalm==hihi) && (val >= hihi-hyst)))){
if (recGblSetSevr(pxxx,HIHI_ALARM,pxxx->hhsv)) pxxx->lalm = hihi;
return;
}
/* alarm condition lolo */
if (llsv && (val <= lolo || ((lalm==lolo) && (val <= lolo+hyst)))){
if (recGblSetSevr(pxxx,LOLO_ALARM,pxxx->llsv)) pxxx->lalm = lolo;
return;
}
/* alarm condition high */
if (hsv && (val >= high || ((lalm==high) && (val >= high-hyst)))){
if (recGblSetSevr(pxxx,HIGH_ALARM,pxxx->hsv)) pxxx->lalm = high;
return;
}
/* alarm condition low */
if (lsv && (val <= low || ((lalm==low) && (val <= low+hyst)))){
if (recGblSetSevr(pxxx,LOW_ALARM,pxxx->lsv)) pxxx->lalm = low;
return;
}
/* we get here only if val is out of alarm by at least hyst */
pxxx->lalm = val;
return;
}
static void monitor(xxxRecord *pxxx)
{
unsigned short monitor_mask;
double delta;
monitor_mask = recGblResetAlarms(pxxx);
/* check for value change */
delta = pxxx->mlst - pxxx->val;
if(delta<0.0) delta = -delta;
if (delta > pxxx->mdel) {
/* post events for value change */
monitor_mask |= DBE_VALUE;
/* update last value monitored */
pxxx->mlst = pxxx->val;
}
/* check for archive change */
delta = pxxx->alst - pxxx->val;
if(delta<0.0) delta = -delta;
if (delta > pxxx->adel) {
/* post events on value field for archive change */
monitor_mask |= DBE_LOG;
/* update last archive value monitored */
pxxx->alst = pxxx->val;
}
/* send out monitors connected to the value field */
if (monitor_mask){
db_post_events(pxxx,&pxxx->val,monitor_mask);
}
return;
}
@@ -0,0 +1,117 @@
recordtype(xxx) {
include "dbCommon.dbd"
field(VAL,DBF_DOUBLE) {
prompt("Current EGU Value")
asl(ASL0)
pp(TRUE)
}
field(INP,DBF_INLINK) {
prompt("Input Specification")
promptgroup(GUI_INPUTS)
special(SPC_NOMOD)
interest(1)
}
field(PREC,DBF_SHORT) {
prompt("Display Precision")
promptgroup(GUI_DISPLAY)
interest(1)
}
field(EGU,DBF_STRING) {
prompt("Engineering Units")
promptgroup(GUI_DISPLAY)
interest(1)
size(16)
}
field(HOPR,DBF_FLOAT) {
prompt("High Operating Range")
promptgroup(GUI_DISPLAY)
interest(1)
}
field(LOPR,DBF_FLOAT) {
prompt("Low Operating Range")
promptgroup(GUI_DISPLAY)
interest(1)
}
field(HIHI,DBF_FLOAT) {
prompt("Hihi Alarm Limit")
promptgroup(GUI_ALARMS)
pp(TRUE)
interest(1)
}
field(LOLO,DBF_FLOAT) {
prompt("Lolo Alarm Limit")
promptgroup(GUI_ALARMS)
pp(TRUE)
interest(1)
}
field(HIGH,DBF_FLOAT) {
prompt("High Alarm Limit")
promptgroup(GUI_ALARMS)
pp(TRUE)
interest(1)
}
field(LOW,DBF_FLOAT) {
prompt("Low Alarm Limit")
promptgroup(GUI_ALARMS)
pp(TRUE)
interest(1)
}
field(HHSV,DBF_MENU) {
prompt("Hihi Severity")
promptgroup(GUI_ALARMS)
pp(TRUE)
interest(1)
menu(menuAlarmSevr)
}
field(LLSV,DBF_MENU) {
prompt("Lolo Severity")
promptgroup(GUI_ALARMS)
pp(TRUE)
interest(1)
menu(menuAlarmSevr)
}
field(HSV,DBF_MENU) {
prompt("High Severity")
promptgroup(GUI_ALARMS)
pp(TRUE)
interest(1)
menu(menuAlarmSevr)
}
field(LSV,DBF_MENU) {
prompt("Low Severity")
promptgroup(GUI_ALARMS)
pp(TRUE)
interest(1)
menu(menuAlarmSevr)
}
field(HYST,DBF_DOUBLE) {
prompt("Alarm Deadband")
promptgroup(GUI_ALARMS)
interest(1)
}
field(ADEL,DBF_DOUBLE) {
prompt("Archive Deadband")
promptgroup(GUI_DISPLAY)
interest(1)
}
field(MDEL,DBF_DOUBLE) {
prompt("Monitor Deadband")
promptgroup(GUI_DISPLAY)
interest(1)
}
field(LALM,DBF_DOUBLE) {
prompt("Last Value Alarmed")
special(SPC_NOMOD)
interest(3)
}
field(ALST,DBF_DOUBLE) {
prompt("Last Value Archived")
special(SPC_NOMOD)
interest(3)
}
field(MLST,DBF_DOUBLE) {
prompt("Last Val Monitored")
special(SPC_NOMOD)
interest(3)
}
}
@@ -0,0 +1,4 @@
TOP = ../..
include $(TOP)/config/CONFIG_APP
ARCH = _ARCH_
include $(TOP)/config/RULES.ioc
@@ -0,0 +1,17 @@
# Example vxWorks startup file
# Following must be added for many board support packages
#cd <full path to target bin directory>
< cdcmds
cd appbin
ld < iocCore
ld < seq
ld < exampleLib
cd startup
dbLoadDatabase("../../dbd/exampleApp.dbd")
dbLoadRecords("../../exampleApp/Db/dbExample.db","user=_USER_")
iocInit
seq &snctest
+1
View File
@@ -0,0 +1 @@
This directory tree is obsolete
@@ -0,0 +1,4 @@
TOP = ../..
include $(TOP)/config/CONFIG_APP
include $(TOP)/config/RULES.Db
+6
View File
@@ -0,0 +1,6 @@
TOP = ..
include $(TOP)/config/CONFIG_APP
DIRS += $(wildcard *src*)
DIRS += $(wildcard *Src*)
DIRS += $(wildcard *Db*)
include $(TOP)/config/RULES_DIRS
@@ -0,0 +1,3 @@
TOP=../..
include $(TOP)/config/CONFIG_APP
include $(TOP)/config/RULES_ARCHS
@@ -0,0 +1,18 @@
# Makefile.Host
TOP = ../../..
include $(TOP)/config/CONFIG_APP
#----------------------------------------
# ADD MACRO DEFINITIONS AFTER THIS LINE
#USR_CFLAGS +=
PROD_LIBS += ca
PROD_LIBS += Db
PROD_LIBS += Com
ca_DIR = $(EPICS_BASE_LIB)
Db_DIR = $(EPICS_BASE_LIB)
Com_DIR = $(EPICS_BASE_LIB)
include $(TOP)/config/RULES.Host
#----------------------------------------
# ADD RULES AFTER THIS LINE
@@ -0,0 +1,13 @@
# Makefile.Vx
TOP = ../../..
include $(TOP)/config/CONFIG_APP
#----------------------------------------
# ADD MACRO DEFINITIONS AFTER THIS LINE
#Note that the command line that builds the
#library $(LIBNAME) may be HUGE (>3kB)
#
include $(TOP)/config/RULES.Vx
#----------------------------------------
# ADD RULES AFTER THIS LINE
+4
View File
@@ -0,0 +1,4 @@
TOP = ..
include $(TOP)/config/CONFIG_APP
DIRS += $(wildcard *ioc*)
include $(TOP)/config/RULES.iocBoot
@@ -0,0 +1,4 @@
TOP = ../..
include $(TOP)/config/CONFIG_APP
ARCH = _ARCH_
include $(TOP)/config/RULES.ioc
+16
View File
@@ -0,0 +1,16 @@
# Example vxWorks startup file
#Following must be added for many board support packages
#cd <full path to target bin directory>
< cdcmds
cd appbin
ld < iocCore
ld < seq
#ld < <some>Lib
cd startup
#dbLoadDatabase("../../dbd/<some>App.dbd")
#dbLoadRecords("../../<some>App/Db/dbExample.db")
iocInit
#seq &<some snc program>
@@ -0,0 +1,28 @@
#Instructions for creating and using a real nfsCommands file
#
# in order to use nfs do the following:
# 1) Create hostAdd and nfsMountAll commands for each nfs server
# 2) In each st.cmd file add the following two commands BEFORE any load commands
# ../nfs.cmd
# cd "<iocname>
#
# The hostAdd and nfsMountAll commands have the form:
# hostAdd("<host>","xxx.xxx.xxx.xxx")
# nfsMountAll("<host>")
#
# You can also mount subdirectories as follows:
# nfsMount("<host>", "/xxx/xxx/xxx", "/xxx")
#
# For example assume
#
# host is mercury with inet address 155.77.2.56
# You want to mount the directory (which is a file system of mercury)
# /home/mercury5/iocinfo
# as
# /iocinfo
#
# The commands would be
#
# hostAdd("mercury","155.77.2.56")
# nfsMountAll("mercury")
# nfsMount("mercury","/home/mercury5/iocinfo","/iocinfo")