major changes for new makwBaseApp
This commit is contained in:
@@ -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
@@ -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 ">";
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
This is obsolete. Entiry directory will be removed soon
|
||||
@@ -1,5 +1,6 @@
|
||||
#RELEASE Location of external products
|
||||
EPICS_BASE=${epics_base}
|
||||
EPICS_BASE=_EPICS_BASE_
|
||||
TEMPLATE_TOP=_TEMPLATE_TOP_
|
||||
#SHARE=
|
||||
#HIDEOS=
|
||||
#EPICSHIDEOS=
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -0,0 +1 @@
|
||||
This directory tree is obsolete
|
||||
@@ -0,0 +1,4 @@
|
||||
TOP = ../..
|
||||
include $(TOP)/config/CONFIG_APP
|
||||
|
||||
include $(TOP)/config/RULES.Db
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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")
|
||||
Reference in New Issue
Block a user