- Refactored site specific stuff into a site module - PSI specific stuff is now in the PSI directory. - The old version has been tagged with pre-ansto SKIPPED: psi/A1931.c psi/A1931.h psi/amor2t.c psi/amor2t.h psi/amor2t.i psi/amor2t.tex psi/amor2t.w psi/amorscan.c psi/amorscan.h psi/amorscan.w psi/amorstat.c psi/amorstat.h psi/amorstat.i psi/amorstat.tex psi/amorstat.w psi/bruker.c psi/bruker.h psi/bruker.w psi/buffer.c psi/buffer.h psi/dilludriv.c psi/dilludriv.h psi/dmc.c psi/dmc.h psi/dmc.w psi/docho.c psi/ecb.c psi/ecb.h psi/ecb.i psi/ecb.w psi/ecbdriv.c psi/ecbdriv.h psi/el734dc.c psi/el734driv.c psi/el755driv.c psi/el755driv.h psi/faverage.c psi/faverage.h psi/faverage.tex psi/faverage.w psi/fowrite.c psi/fowrite.h psi/itc4.c psi/itc4.h psi/itc4.w psi/itc4driv.c psi/ltc11.c psi/ltc11.h psi/nextrics.c psi/nextrics.h psi/nxamor.c psi/nxamor.h psi/nxamor.tex psi/nxamor.w psi/pimotor.c psi/pimotor.h psi/pimotor.tex psi/pimotor.w psi/pipiezo.c psi/polterwrite.c psi/polterwrite.h psi/psi.c psi/ruli.c psi/ruli.h psi/sanscook.c psi/sanswave.c psi/sanswave.h psi/sanswave.tex psi/sanswave.w psi/serial.c psi/serial.h psi/serial.w psi/sinqhmdriv.c psi/sinqhmdriv.i psi/sinqhmdriv.w psi/slsmagnet.c psi/sps.c psi/sps.h psi/sps.i psi/sps.tex psi/sps.w psi/swmotor.c psi/swmotor.h psi/swmotor.i psi/tas.c psi/tas.h psi/tas.tex psi/tas.w psi/tasdrive.c psi/tasinit.c psi/tasscan.c psi/tasu.h psi/tasutil.c psi/tdchm.c psi/tdchm.h psi/tecsdriv.c psi/tecsdriv.h psi/velodorn.c psi/velodorn.h psi/velodorn.w psi/velodornier.c psi/hardsup/README psi/hardsup/StrMatch.c psi/hardsup/asynsrv_def.h psi/hardsup/asynsrv_errcodes.h psi/hardsup/asynsrv_mark.c psi/hardsup/asynsrv_utility.c psi/hardsup/c_interfaces.c psi/hardsup/dillutil.c psi/hardsup/dillutil.h psi/hardsup/el734_def.h psi/hardsup/el734_errcodes.h psi/hardsup/el734_utility.c psi/hardsup/el734fix.h psi/hardsup/el734tcl.c psi/hardsup/el737_def.h psi/hardsup/el737_errcodes.h psi/hardsup/el737_utility.c psi/hardsup/el737fix.h psi/hardsup/el737tcl.c psi/hardsup/el755_def.h psi/hardsup/el755_errcodes.h psi/hardsup/el755_errorlog.c psi/hardsup/el755_utility.c psi/hardsup/err.c psi/hardsup/failinet.c psi/hardsup/geterrno.c psi/hardsup/itc4util.c psi/hardsup/itc4util.h psi/hardsup/make_gen psi/hardsup/makefile_alpha psi/hardsup/makefile_linux psi/hardsup/makeprint.c psi/hardsup/rs232c_def.h psi/hardsup/serialsinq.c psi/hardsup/serialsinq.h psi/hardsup/sinq_defs.h psi/hardsup/sinq_prototypes.h psi/hardsup/sinqhm.c psi/hardsup/sinqhm.h psi/hardsup/sinqhm_def.h psi/hardsup/stredit.c psi/hardsup/strjoin.c psi/hardsup/table.c psi/hardsup/table.h psi/hardsup/velsel_def.h psi/hardsup/velsel_utility.c psi/motor/Makefile psi/motor/el734_test psi/motor/el734_test.c psi/motor/makeprint.c psi/sinqhm/FOCUS_gbl.h psi/sinqhm/FOCUS_srv_main.c psi/sinqhm/Makefile psi/sinqhm/SinqHM_bootParamsConfig.c psi/sinqhm/SinqHM_bootUtil.c psi/sinqhm/SinqHM_def.h psi/sinqhm/SinqHM_gbl.h psi/sinqhm/SinqHM_srv_filler.c psi/sinqhm/SinqHM_srv_main.c psi/sinqhm/SinqHM_srv_routines.c psi/sinqhm/SinqHM_srv_server.c psi/sinqhm/bld psi/sinqhm/bld2 psi/sinqhm/bldmen psi/sinqhm/hist_mem_notes.tex psi/sinqhm/hist_mem_spec.tex psi/sinqhm/hist_mem_spec_fig1.ps psi/sinqhm/hist_mem_spec_fig2.ps psi/sinqhm/hist_mem_spec_fig3.ps psi/sinqhm/hist_mem_spec_fig4.ps psi/sinqhm/lwl_client.c psi/sinqhm/lwl_server.c psi/sinqhm/make_sinqhm.com psi/sinqhm/monitor.c psi/sinqhm/psi_logo.ps psi/sinqhm/sinq_logo.ps psi/sinqhm/sinqhm_bootutil_client.c psi/sinqhm/sinqhm_client.c psi/sinqhm/sinqhm_ctrl.c psi/sinqhm/usrConfig.c psi/sinqhm/usrConfig.c_diffs psi/sinqhm/usrConfig2604.c psi/sinqhm/vmio10_def.h psi/sinqhm/vmio_utility.c psi/tecs/coc_client.c psi/tecs/coc_client.h psi/tecs/coc_logfile.c psi/tecs/coc_logfile.h psi/tecs/coc_server.c psi/tecs/coc_server.h psi/tecs/coc_util.c psi/tecs/coc_util.h psi/tecs/fortify1.c psi/tecs/instr_hosts.c psi/tecs/instr_hosts.h psi/tecs/keep_running.c psi/tecs/make_gen psi/tecs/make_opt psi/tecs/make_opt_alpha psi/tecs/make_opt_llc psi/tecs/makefile psi/tecs/makefile_alpha psi/tecs/makefile_linux psi/tecs/myc_buf.c psi/tecs/myc_buf.h psi/tecs/myc_err.c psi/tecs/myc_err.h psi/tecs/myc_fortran.h psi/tecs/myc_mem.h psi/tecs/myc_str.c psi/tecs/myc_str.h psi/tecs/myc_time.c psi/tecs/myc_time.h psi/tecs/myc_tmp.c psi/tecs/myc_tmp.h psi/tecs/rstart.c psi/tecs/six.c psi/tecs/str.f psi/tecs/sys_cmdpar.f psi/tecs/sys_date.f psi/tecs/sys_env.c psi/tecs/sys_get_key.f psi/tecs/sys_getenv.f psi/tecs/sys_lun.f psi/tecs/sys_open.f psi/tecs/sys_open_alpha.f psi/tecs/sys_rdline.c psi/tecs/sys_select.c psi/tecs/sys_select.h psi/tecs/sys_unix.c psi/tecs/sys_wait.f psi/tecs/tecs.bld psi/tecs/tecs.c psi/tecs/tecs.tcl psi/tecs/tecs_c.c psi/tecs/tecs_c.h psi/tecs/tecs_cli.c psi/tecs/tecs_cli.h psi/tecs/tecs_client.f psi/tecs/tecs_data.c psi/tecs/tecs_data.h psi/tecs/tecs_dlog.inc psi/tecs/tecs_for.f psi/tecs/tecs_lsc.c psi/tecs/tecs_lsc.h psi/tecs/tecs_plot.f psi/tecs/tecs_serial.c psi/tecs/tecs_serial.h psi/tecs/term.c psi/tecs/term.h psi/utils/Makefile psi/utils/SerPortServer.c psi/utils/asynsrv_test.c psi/utils/ecb-load.c psi/utils/el734.c psi/utils/el734_test.c psi/utils/el737.c psi/utils/make.ecb psi/utils/check/amorcheck psi/utils/check/dmccheck psi/utils/check/focuscheck psi/utils/check/focusstatus.tcl psi/utils/check/hrptcheck psi/utils/check/sanscheck psi/utils/check/sicssyntax.tex psi/utils/check/sicssyntaxlib.tcl psi/utils/check/test.tcl psi/utils/check/topsicheck psi/utils/check/tricscheck psi/utils/check/tst
125 lines
5.5 KiB
OpenEdge ABL
125 lines
5.5 KiB
OpenEdge ABL
\subsubsection{Site Abstraction Layer}
|
|
With ANSTO using SICS as well it became necessary to separate the
|
|
general parts of SICS from the installation specific components. Each
|
|
installation will have a separate set of drivers and, to some
|
|
extent, instrument specific commands. Such code has to be in a
|
|
separate library. Access to this library is through an interface which
|
|
consists of a structure containing pointers to functions which allow
|
|
for the creation of site specific drivers and commands. Moreover, the
|
|
site specific library has to implement a function, getSite, which
|
|
returns the appropriate data structure for the site for which SICS is
|
|
being compiled. This data structure looks like this:
|
|
|
|
@d sitedata @{
|
|
typedef struct {
|
|
void (*AddSiteCommands)(SicsInterp *pSics);
|
|
void (*RemoveSiteCommands)(SicsInterp *pSics);
|
|
pMotor (*CreateMotor)(SConnection *pCon,
|
|
int argc, char *argv[]);
|
|
pCounterDriver (*CreateCounterDriver)(
|
|
SConnection *pCon,
|
|
int argc,
|
|
char *argv[]);
|
|
HistDriver *(*CreateHistogramMemoryDriver)(
|
|
char *name, pStringDict pOption);
|
|
pVelSelDriv (*CreateVelocitySelector)(char *name,
|
|
char *array, Tcl_Interp *pTcl);
|
|
pCodri (*CreateControllerDriver)(SConnection *pCon,
|
|
int argc,
|
|
char *argv[]);
|
|
pEVControl (*InstallEnvironmentController)(
|
|
SicsInterp *pSics,
|
|
SConnection *pCon,
|
|
int argc,
|
|
char *argv[]);
|
|
int (*ConfigureScan)(pScanData self,
|
|
char *option);
|
|
void (*KillSite)(void *pData);
|
|
}Site, *pSite;
|
|
@}
|
|
\begin{description}
|
|
\item[AddSiteCommands] adds site specific object creation and
|
|
instrument specific commands to the SICS interpreter, pSics.
|
|
\item[RemoveSiteCommands] will be called to remove surplus object
|
|
creation commands after the SICS interpreter has processed the
|
|
initialization files. Please note, that SICS does not support the
|
|
removal of objects at runtime in general. This is due to the fact that
|
|
any possible object may be used by or linked to others and and it
|
|
would be a bookeeping nightmare to keep track of all those relations.
|
|
\item[CreateMotor] creates a motor using the arguments in argc and
|
|
argv. It returns a pointer to the new motor structure on success or
|
|
NULL in case of a failure. This function has to return a complete
|
|
motor in order to allow for special configurations of the motor to
|
|
take place in its initialization.
|
|
\item[CreateCounterDriver] returns a driver for a new counter box
|
|
driver if the parameters are valid or NULL if not. Driver arguments
|
|
are in the argc, argv pair.
|
|
\item[CreateHistogramMemoryDriver] creates a driver for a histogram
|
|
memory. The driver type is specified through name.
|
|
Driver options are in pOptions.
|
|
\item[CreateVelocitySelector] create a driver for a velocity selector.
|
|
The parameter name is the name of the driver, array is the name of a
|
|
Tcl array holding configuration parameters for the driver and pTcl is
|
|
the Tcl interpreter in which array lives.
|
|
\item[CreateControllerDriver] creates a driver for the general
|
|
controller module within SICS. argc and argv hold the parameters,
|
|
starting with the name of the driver to create.
|
|
\item[InstallEnvironmentController] installs a a sample
|
|
environment device such as a temperature controller or magnet
|
|
controller etc. into the interpreter pSics. pCon is a connection
|
|
object to which errors can be
|
|
reported, argc and argv are the controller parameters starting with
|
|
the driver name. This method does not get away with creating a driver
|
|
but must install the command into SICS because some environment
|
|
devices overload the standard Wrapper function with special ones. The
|
|
newly created object is still returned for further processing. In the
|
|
case of failure NULL is returned. Errors will have been printed to
|
|
pCon.
|
|
\item[ConfigureScan] allows for modules which configure the scan
|
|
object. option is the option to xxscan configure to process, the scan
|
|
object to configure is passed in in self. This returns 1 on success
|
|
and 0 on failures or options which are not recognized.
|
|
\item[KillSite] is a function to remove the site data structure when
|
|
SICS is done with it. pData must point to the site data structure.
|
|
KillSite's purpose is to free all memory associated with
|
|
the site data structure. This is mostly a cleanup thing, to keep the
|
|
fortify logs clear off inconsequential and confusing data.
|
|
\end{description}
|
|
|
|
|
|
@o site.h @{
|
|
/*-----------------------------------------------------------------------
|
|
S i t e A b s t r a c t i o n L a y e r
|
|
|
|
With ANSTO using SICS as well it became necessary to separate the
|
|
general parts of SICS from the installation specific components. Each
|
|
installation will have a separate set of drivers and, to some
|
|
extent, instrument specific commands. Such code has to be in a
|
|
separate library. Access to this library is through an interface which
|
|
consists of a structure containing pointers to functions which allow
|
|
for the creation of site specific drivers and commands. Moreover, the
|
|
site specific library has to implement a function, getSite, which
|
|
returns the appropriate data structure for the site for which SICS is
|
|
being compiled.
|
|
------------------------------------------------------------------------*/
|
|
#ifndef SICSSITE
|
|
#define SICSSITE
|
|
#include <sics.h>
|
|
#include <motor.h>
|
|
#include <countdriv.h>
|
|
#include <HistDriv.i>
|
|
#include <stringdict.h>
|
|
#include <velo.h>
|
|
#include <tcl.h>
|
|
#include <codri.h>
|
|
#include <evcontroller.h>
|
|
#include <scan.h>
|
|
@<sitedata@>
|
|
/*-------------------------------------------------------------------*/
|
|
pSite getSite(void);
|
|
#endif
|
|
@}
|
|
|
|
|
|
|