Initial revision
This commit is contained in:
572
hardsup/sinqhm.tex
Normal file
572
hardsup/sinqhm.tex
Normal file
@@ -0,0 +1,572 @@
|
||||
\documentstyle{report}
|
||||
|
||||
\setlength{\oddsidemargin}{0in}
|
||||
\setlength{\evensidemargin}{0in}
|
||||
\setlength{\topmargin}{0in}
|
||||
\addtolength{\topmargin}{-\headheight}
|
||||
\addtolength{\topmargin}{-\headsep}
|
||||
\setlength{\textheight}{8.9in}
|
||||
\setlength{\textwidth}{6.5in}
|
||||
\setlength{\marginparwidth}{0.5in}
|
||||
|
||||
\title{SINQHM-Utility\\ Utility functions for the \\
|
||||
SINQ Histogram memory}
|
||||
\author{David Maden, Mark K\"onnecke, April 1997}
|
||||
|
||||
\begin{document}
|
||||
\maketitle
|
||||
\clearpage
|
||||
|
||||
\chapter{Introduction}
|
||||
This file describes some Utility functions for interfacing with the SinQ
|
||||
histogram memory server. This device is described in great detail elsewhere
|
||||
(D. Maden: The SINQ Histogram Memory, Feb. 1997).
|
||||
All the real time processing
|
||||
for this HM is done by an on-board computer in a VME crate. This on board
|
||||
computer also runs TCP/IP and a server program which allows for
|
||||
configuration and communication with the HM.
|
||||
For configuration an
|
||||
connection to the main server is installed which handles the configuration
|
||||
requests. For starting data collection and retrieval of information a second
|
||||
connection is needed. This is obtained by sending a request to the main
|
||||
server on the on board computer. This main server will than spawn a second
|
||||
process on the on board computer which is dedicated to serving our requests.
|
||||
The mainserver sends a packet containing the new port number our secondary
|
||||
server is listening to. Than the driver can connect to this secondary server
|
||||
in order to exchange data. According to this scheme the utility functions
|
||||
divide into two groups: Master Server commands and data aquisition commands.
|
||||
|
||||
\section{Code organisation}
|
||||
The code dealing with the SINQ histogram memory is organised in four
|
||||
files: sinqhm.w, the literate programming file which creates sinqhm.i and
|
||||
sinqhm.h as well as the LateX documentation for the interface, sinqhm.i is
|
||||
an internal header file and contains typedefs and function definitions for
|
||||
relevant for the implementation of the utility functions only. sinqhm.h
|
||||
defines the public interface functions. sinqhm.c finally is the source file
|
||||
which implements the utilities.
|
||||
|
||||
\section{The SINQHM data structure}
|
||||
In order to transport the necessary status information around, each function
|
||||
will take a pointer to the data structure defined below as first parameter.
|
||||
For TOF mode it is necessary to store some imformation per detector bank.
|
||||
This information is kept in a bank data structure:
|
||||
|
||||
\begin{flushleft} \small
|
||||
\begin{minipage}{\linewidth} \label{scrap1}
|
||||
$\langle$SBank {\footnotesize 2a}$\rangle\equiv$
|
||||
\vspace{-1ex}
|
||||
\begin{list}{}{} \item
|
||||
\mbox{}\verb@@\\
|
||||
\mbox{}\verb@ typedef struct __SBANK {@\\
|
||||
\mbox{}\verb@ int iStart;@\\
|
||||
\mbox{}\verb@ int iEnd;@\\
|
||||
\mbox{}\verb@ int iFlag;@\\
|
||||
\mbox{}\verb@ int iEdgeLength;@\\
|
||||
\mbox{}\verb@ int iDelay;@\\
|
||||
\mbox{}\verb@ unsigned int *iEdges;@\\
|
||||
\mbox{}\verb@ } SBank, *pSBank;@\\
|
||||
\mbox{}\verb@@$\diamond$
|
||||
\end{list}
|
||||
\vspace{-1ex}
|
||||
\footnotesize\addtolength{\baselineskip}{-1ex}
|
||||
\begin{list}{}{\setlength{\itemsep}{-\parsep}\setlength{\itemindent}{-\leftmargin}}
|
||||
\item Macro referenced in scrap ?.
|
||||
\end{list}
|
||||
\end{minipage}\\[4ex]
|
||||
\end{flushleft}
|
||||
The fields are:
|
||||
\begin{description}
|
||||
\item[iStart] The number of the detector with which this bank starts.
|
||||
\item[iEnd] The number of the last detector for this bank.
|
||||
\item[iFlag] A flag which indicates if the bank has a fixed bin widths. 0
|
||||
denotes fixed bin width, 1 variable time binning.
|
||||
\item[iEdgeLength] is the length of the edge array.
|
||||
\item[iEdges] is an array of integer values describing the lower edges of
|
||||
the bins. Its content depends on the value of iFlag. With a equally spaced
|
||||
time binning (iFlag = 0) is is sufficient to give values for the first two
|
||||
bins. If the time binning varies, nBins+1 values are necessary describing
|
||||
the lower edges of all time bins.
|
||||
\end{description}
|
||||
|
||||
\begin{flushleft} \small
|
||||
\begin{minipage}{\linewidth} \label{scrap2}
|
||||
$\langle$SType {\footnotesize 2b}$\rangle\equiv$
|
||||
\vspace{-1ex}
|
||||
\begin{list}{}{} \item
|
||||
\mbox{}\verb@@\\
|
||||
\mbox{}\verb@ typedef struct __SINQHM {@\\
|
||||
\mbox{}\verb@ char *pHMComputer;@\\
|
||||
\mbox{}\verb@ int iMasterPort;@\\
|
||||
\mbox{}\verb@ int iMasterSocket;@\\
|
||||
\mbox{}\verb@ int iClientPort;@\\
|
||||
\mbox{}\verb@ int iClientSocket;@\\
|
||||
\mbox{}\verb@ int iBinWidth;@\\
|
||||
\mbox{}\verb@ int iLength;@\\
|
||||
\mbox{}\verb@ int iRank;@\\
|
||||
\mbox{}\verb@ int iPacket;@\\
|
||||
\mbox{}\verb@ int iBanks;@\\
|
||||
\mbox{}\verb@ SBank pBank[MAXBANK];@\\
|
||||
\mbox{}\verb@ } SINQHM;@\\
|
||||
\mbox{}\verb@@$\diamond$
|
||||
\end{list}
|
||||
\vspace{-1ex}
|
||||
\footnotesize\addtolength{\baselineskip}{-1ex}
|
||||
\begin{list}{}{\setlength{\itemsep}{-\parsep}\setlength{\itemindent}{-\leftmargin}}
|
||||
\item Macro defined by scraps 2bc.
|
||||
\item Macro referenced in scrap ?.
|
||||
\end{list}
|
||||
\end{minipage}\\[4ex]
|
||||
\end{flushleft}
|
||||
The first item in this structure is the name of the histogram memory
|
||||
computer, the second the port number at which the master server is
|
||||
listening. iClientPort defines a port for data communication. If no such
|
||||
port is open, this value will be 0. iStatus is a status flag. iBanks is the
|
||||
number of detector banks defined. pSBank is an array of bank data structures
|
||||
describing the detector banks. In order to
|
||||
maintain this data structure two functions are defined:
|
||||
|
||||
\section{Byte swapping}
|
||||
These utility functions preform byte swapping as needed. In order for this
|
||||
to work please make sure that the following typedefs represent the correct
|
||||
types for your compiler and computer.
|
||||
|
||||
\begin{flushleft} \small
|
||||
\begin{minipage}{\linewidth} \label{scrap3}
|
||||
$\langle$SType {\footnotesize 2c}$\rangle\equiv$
|
||||
\vspace{-1ex}
|
||||
\begin{list}{}{} \item
|
||||
\mbox{}\verb@@\\
|
||||
\mbox{}\verb@/*---------------------------- Type definitions, machine dependent--------*/@\\
|
||||
\mbox{}\verb@ typedef short int SQint16; /* 16 bit integer */@\\
|
||||
\mbox{}\verb@ typedef int SQint32; /* 32 bit integer */@\\
|
||||
\mbox{}\verb@@$\diamond$
|
||||
\end{list}
|
||||
\vspace{-1ex}
|
||||
\footnotesize\addtolength{\baselineskip}{-1ex}
|
||||
\begin{list}{}{\setlength{\itemsep}{-\parsep}\setlength{\itemindent}{-\leftmargin}}
|
||||
\item Macro defined by scraps 2bc.
|
||||
\item Macro referenced in scrap ?.
|
||||
\end{list}
|
||||
\end{minipage}\\[4ex]
|
||||
\end{flushleft}
|
||||
\begin{flushleft} \small
|
||||
\begin{minipage}{\linewidth} \label{scrap4}
|
||||
$\langle$Protos {\footnotesize 3a}$\rangle\equiv$
|
||||
\vspace{-1ex}
|
||||
\begin{list}{}{} \item
|
||||
\mbox{}\verb@@\\
|
||||
\mbox{}\verb@ pSINQHM CreateSINQHM(char *pHMComputer, int iMasterPort);@\\
|
||||
\mbox{}\verb@ pSINQHM CopySINQHM(pSINQHM self);@\\
|
||||
\mbox{}\verb@ void DeleteSINQHM(pSINQHM self); @\\
|
||||
\mbox{}\verb@ void SINQHMSetPar(pSINQHM self, int iRank, int iLength, int iBinWidth);@\\
|
||||
\mbox{}\verb@@$\diamond$
|
||||
\end{list}
|
||||
\vspace{-1ex}
|
||||
\footnotesize\addtolength{\baselineskip}{-1ex}
|
||||
\begin{list}{}{\setlength{\itemsep}{-\parsep}\setlength{\itemindent}{-\leftmargin}}
|
||||
\item Macro defined by scraps 3abc, 6a.
|
||||
\item Macro referenced in scrap ?.
|
||||
\end{list}
|
||||
\end{minipage}\\[4ex]
|
||||
\end{flushleft}
|
||||
The first function creates a new SINQHM data structure and initialises the
|
||||
fields with the parameters given. Their meanings correspond to those
|
||||
mentioned above for the description of the data structure. DeleteSINQHM
|
||||
frees all memory associated with a SINQHM structure given by self. The
|
||||
pointer to self is invalid ever afterwards.
|
||||
CopySINQHM creates a copy of the SINQHM structure passed in with self.
|
||||
|
||||
\section{SINQHM error handling}
|
||||
If not denoted otherwise all public SINQHM functions return an integer 1 on
|
||||
success. In the more common case of failure, a negative error code is
|
||||
returned. This error code can be transformed into a human readable form by a
|
||||
call to:
|
||||
|
||||
\begin{flushleft} \small
|
||||
\begin{minipage}{\linewidth} \label{scrap5}
|
||||
$\langle$Protos {\footnotesize 3b}$\rangle\equiv$
|
||||
\vspace{-1ex}
|
||||
\begin{list}{}{} \item
|
||||
\mbox{}\verb@@\\
|
||||
\mbox{}\verb@ int SINQHMError2Text(int iErr, char *pBuffer, int iBufLen);@\\
|
||||
\mbox{}\verb@@$\diamond$
|
||||
\end{list}
|
||||
\vspace{-1ex}
|
||||
\footnotesize\addtolength{\baselineskip}{-1ex}
|
||||
\begin{list}{}{\setlength{\itemsep}{-\parsep}\setlength{\itemindent}{-\leftmargin}}
|
||||
\item Macro defined by scraps 3abc, 6a.
|
||||
\item Macro referenced in scrap ?.
|
||||
\end{list}
|
||||
\end{minipage}\\[4ex]
|
||||
\end{flushleft}
|
||||
This function takes as first parameter the error code, as second a pointer
|
||||
to a text buffer for the error message and as third parameter the length of
|
||||
the buffer. Maximum iBufLen characters will be copied to pBuffer.
|
||||
|
||||
\section{Master Server command functions}
|
||||
These functions mainly serve to configure the histogram memory and to obtain
|
||||
socket-id's for client data aquisition servers. The following functions are
|
||||
needed:
|
||||
|
||||
\begin{flushleft} \small
|
||||
\begin{minipage}{\linewidth} \label{scrap6}
|
||||
$\langle$Protos {\footnotesize 3c}$\rangle\equiv$
|
||||
\vspace{-1ex}
|
||||
\begin{list}{}{} \item
|
||||
\mbox{}\verb@@\\
|
||||
\mbox{}\verb@ int SINQHMConfigure(pSINQHM self, int iMode, int iRank, int iLength, @\\
|
||||
\mbox{}\verb@ int iBinWidth, int iLowBin, int iCompress);@\\
|
||||
\mbox{}\verb@@\\
|
||||
\mbox{}\verb@ int SINQHMDeconfigure(pSINQHM self, int iHarsh);@\\
|
||||
\mbox{}\verb@ int SINQHMGetStatus(pSINQHM self,int *iMode, int *iDaq,@\\
|
||||
\mbox{}\verb@ int *iRank, int *iBinWidth,@\\
|
||||
\mbox{}\verb@ int *iLength, int *iClients);@\\
|
||||
\mbox{}\verb@ int SINQHMDebug(pSINQHM self, int iLevel);@\\
|
||||
\mbox{}\verb@ int SINQHMKill(pSINQHM self);@\\
|
||||
\mbox{}\verb@ @\\
|
||||
\mbox{}\verb@@$\diamond$
|
||||
\end{list}
|
||||
\vspace{-1ex}
|
||||
\footnotesize\addtolength{\baselineskip}{-1ex}
|
||||
\begin{list}{}{\setlength{\itemsep}{-\parsep}\setlength{\itemindent}{-\leftmargin}}
|
||||
\item Macro defined by scraps 3abc, 6a.
|
||||
\item Macro referenced in scrap ?.
|
||||
\end{list}
|
||||
\end{minipage}\\[4ex]
|
||||
\end{flushleft}
|
||||
\begin{flushleft} \small
|
||||
\begin{minipage}{\linewidth} \label{scrap7}
|
||||
$\langle$IProtos {\footnotesize 4}$\rangle\equiv$
|
||||
\vspace{-1ex}
|
||||
\begin{list}{}{} \item
|
||||
\mbox{}\verb@@\\
|
||||
\mbox{}\verb@@$\diamond$
|
||||
\end{list}
|
||||
\vspace{-1ex}
|
||||
\footnotesize\addtolength{\baselineskip}{-1ex}
|
||||
\begin{list}{}{\setlength{\itemsep}{-\parsep}\setlength{\itemindent}{-\leftmargin}}
|
||||
\item Macro defined by scraps 4, 6b.
|
||||
\item Macro referenced in scrap ?.
|
||||
\end{list}
|
||||
\end{minipage}\\[4ex]
|
||||
\end{flushleft}
|
||||
SINQHMConfigure configures the master server for data aquisition. Besides
|
||||
the pointer to a SINQHM structure it takes the following parameters:
|
||||
iMode is the combination of mode and submode bits as defined in
|
||||
sinqhm_defs.h. iLength is the length of
|
||||
the histograms. iBinWidth is the size of the histogram memory bins in bytes.
|
||||
Currently the values 1,2 and 4 are allowed. iClients is the number of active
|
||||
clients at the histogram memory computer. iRank is the number of histograms.
|
||||
iLowBin is the start of the histogram memory. Usually this is 0, but someone
|
||||
may choose to strat at a different memory location. iCompress is for
|
||||
compression. All data will be right shifted by iCompress bits before
|
||||
storage. To my knowledge this feature is currently not implemented.
|
||||
|
||||
|
||||
SINQHMDeconfigure deconfigures the histogram memory. This is necessary prior
|
||||
to reconfiguration. The only parameter iHarsh defines how brutal the master
|
||||
server is with this. There may still be clients active at the histogram
|
||||
memory. If iHarsh is 0, SINQHMDeconfig returns an error in this case. If
|
||||
iHarsh is 1, the clients will be killed and the master server returns to a
|
||||
virgin state.
|
||||
|
||||
SINQHMGetStatus allows to query the state of the master server. Parameters
|
||||
have the same meaning as given with SINQHMConfigure. Except of course
|
||||
iClients which is the number of currently active clients at the histogram
|
||||
memory. iDaq show the status of data aquisition: 0 denotes stopped, 1
|
||||
denotes running and 2 denotes inhibited.
|
||||
|
||||
SINQHMDebug sets the debug level of the histogram memory server. That server
|
||||
may print messages to its Com 1 port. This command configures the amount of
|
||||
information available at this channel. This function is of no use for normal
|
||||
users.
|
||||
|
||||
SINQHMKill stops the histogram memory master server and all its children.
|
||||
WARNING: After this call a manual restart of the histogram memory master
|
||||
server or a reboot of the histogram memory computer has to be performed.
|
||||
Do not use this function unless you are a SINQ histogram memory guru.
|
||||
|
||||
\section{TOF bin description functions}
|
||||
Configuring the TOF binning of the histogram memory requires two steps. In
|
||||
the first step you define the binning of all required banks. Then in a
|
||||
second step, this data is packed up and forwarded to the histogram memory.
|
||||
Thus the following functions are required:
|
||||
|
||||
\begin{flushleft} \small
|
||||
\begin{minipage}{\linewidth} \label{scrap8}
|
||||
$\langle$TOFProto {\footnotesize 5a}$\rangle\equiv$
|
||||
\vspace{-1ex}
|
||||
\begin{list}{}{} \item
|
||||
\mbox{}\verb@@\\
|
||||
\mbox{}\verb@ int SINQHMDefineBank(pSINQHM self, int iBankNumber, int iStart, int iEnd,@\\
|
||||
\mbox{}\verb@ float *iEdges, int iEdgeLength);@\\
|
||||
\mbox{}\verb@@$\diamond$
|
||||
\end{list}
|
||||
\vspace{-1ex}
|
||||
\footnotesize\addtolength{\baselineskip}{-1ex}
|
||||
\begin{list}{}{\setlength{\itemsep}{-\parsep}\setlength{\itemindent}{-\leftmargin}}
|
||||
\item Macro referenced in scrap ?.
|
||||
\end{list}
|
||||
\end{minipage}\\[4ex]
|
||||
\end{flushleft}
|
||||
\begin{flushleft} \small
|
||||
\begin{minipage}{\linewidth} \label{scrap9}
|
||||
$\langle$TOFintern {\footnotesize 5b}$\rangle\equiv$
|
||||
\vspace{-1ex}
|
||||
\begin{list}{}{} \item
|
||||
\mbox{}\verb@@\\
|
||||
\mbox{}\verb@ static int SINQHMTimeBin(pSINQHM self, int iMode);@\\
|
||||
\mbox{}\verb@@$\diamond$
|
||||
\end{list}
|
||||
\vspace{-1ex}
|
||||
\footnotesize\addtolength{\baselineskip}{-1ex}
|
||||
\begin{list}{}{\setlength{\itemsep}{-\parsep}\setlength{\itemindent}{-\leftmargin}}
|
||||
\item Macro referenced in scrap ?.
|
||||
\end{list}
|
||||
\end{minipage}\\[4ex]
|
||||
\end{flushleft}
|
||||
SINQHDefineBank defines the time binning for a single detector bank.
|
||||
iBankNumber defines the number of the detector bank to define. iStart and
|
||||
iEnd select the range of detectors beloning to this detector bank. iEdges
|
||||
is the array of time binnings. iEdgeLength is the length of the edges array.
|
||||
|
||||
SINQHMTimeBin actually sends the new time binning to the histogram memory.
|
||||
SINQHMTimeBin is a static internal function.
|
||||
|
||||
|
||||
\section{Data aquisition functions}
|
||||
These functions allow to do data aquisition and retrieve or set histograms.
|
||||
Data aquisition is fairly involved. In order for data aquisition to happen
|
||||
the histogram memory internal filler process must be running. This is
|
||||
controlled by the StartDAQ/StopDAQ pair. However, any client can inhibit
|
||||
data processing. This feature is targeted towards clients monitoring
|
||||
environment devices. Such clients thus can pause data aquisition in order to
|
||||
allow environment variables to get in the defined range again. This is
|
||||
controlled by the InhibitDAQ/ContinueDAQ pair of functions. Please note,
|
||||
that after starting a new data aquisition session the inhibit flag is
|
||||
cleared by default.
|
||||
|
||||
\begin{flushleft} \small
|
||||
\begin{minipage}{\linewidth} \label{scrap10}
|
||||
$\langle$Protos {\footnotesize 6a}$\rangle\equiv$
|
||||
\vspace{-1ex}
|
||||
\begin{list}{}{} \item
|
||||
\mbox{}\verb@@\\
|
||||
\mbox{}\verb@ int SINQHMOpenDAQ(pSINQHM self);@\\
|
||||
\mbox{}\verb@ int SINQHMCloseDAQ(pSINQHM self);@\\
|
||||
\mbox{}\verb@@\\
|
||||
\mbox{}\verb@ int SINQHMStartDAQ(pSINQHM self);@\\
|
||||
\mbox{}\verb@ int SINQHMStopDAQ(pSINQHM self);@\\
|
||||
\mbox{}\verb@ int SINQHMInhibitDAQ(pSINQHM self);@\\
|
||||
\mbox{}\verb@ int SINQHMContinueDAQ(pSINQHM self);@\\
|
||||
\mbox{}\verb@ @\\
|
||||
\mbox{}\verb@ int SINQHMWrite(pSINQHM self, int iNum, int iStart, int iEnd, @\\
|
||||
\mbox{}\verb@ void *pData);@\\
|
||||
\mbox{}\verb@ long SINQHMSize(pSINQHM self, int iNum, int iStart, int iEnd);@\\
|
||||
\mbox{}\verb@ int SINQHMRead(pSINQHM self, int iNum, int iStart, int iEnd, @\\
|
||||
\mbox{}\verb@ void *pData, int iDataLen); @\\
|
||||
\mbox{}\verb@ int SINQHMZero(pSINQHM self, int iNum, int iStart, int iEnd);@\\
|
||||
\mbox{}\verb@@$\diamond$
|
||||
\end{list}
|
||||
\vspace{-1ex}
|
||||
\footnotesize\addtolength{\baselineskip}{-1ex}
|
||||
\begin{list}{}{\setlength{\itemsep}{-\parsep}\setlength{\itemindent}{-\leftmargin}}
|
||||
\item Macro defined by scraps 3abc, 6a.
|
||||
\item Macro referenced in scrap ?.
|
||||
\end{list}
|
||||
\end{minipage}\\[4ex]
|
||||
\end{flushleft}
|
||||
SINQHMOpenDAQ must be the first call and will create the slave server in the
|
||||
histogram memory server which is than responsible for answereing our further
|
||||
requests. Without this call any other call will return an error!
|
||||
|
||||
SINQHMCloseDAQ closes a data aquisition session.
|
||||
|
||||
SINQHMStartDAQ starts data aquisition.
|
||||
|
||||
SINQHMInhibitDAQ causes data aquisition to pause.
|
||||
|
||||
SINQHMContinueDAQ causes a paused data aquisition to continue.
|
||||
|
||||
SINQHMStopDAQ stops data aquisition.
|
||||
|
||||
SINQHMWrite is used to initialise the histograms in the histogram memory to
|
||||
a specific value. The histogram to write is selected by iNum. If iNum is -1
|
||||
the whole histogram memory area is written. iStart and iEnd define a subset
|
||||
of the histogram to write. pData is a pointer to a data area which is going
|
||||
to be copied to the histogram memory.
|
||||
|
||||
SINQHMSize returns the necessary size in bytes for a buffer large enough to
|
||||
hold all the data requested with the following read parameters.
|
||||
|
||||
SINQHMRead reads histograms. The parameters iNum, iStart and iEnd have the
|
||||
same meaning as with SINQHMWrite. Maximum iDataLen bytes of data are copied
|
||||
to the memory area pointed to by pData.
|
||||
|
||||
SINQHMZero clears the histogram iNum from iStart to iEnd to 0.
|
||||
A recommended call prior
|
||||
to any serious data aquisition.
|
||||
|
||||
\section{Further internal routines}
|
||||
\begin{flushleft} \small
|
||||
\begin{minipage}{\linewidth} \label{scrap11}
|
||||
$\langle$IProtos {\footnotesize 6b}$\rangle\equiv$
|
||||
\vspace{-1ex}
|
||||
\begin{list}{}{} \item
|
||||
\mbox{}\verb@@\\
|
||||
\mbox{}\verb@ static int OpenMasterConnection(pSINQHM self);@\\
|
||||
\mbox{}\verb@ static int GetMasterReply(pSINQHM self, struct rply_buff_struct *reply,@\\
|
||||
\mbox{}\verb@ int iBufLen);@\\
|
||||
\mbox{}\verb@ static int SendDAQCommand(pSINQHM self, int iCommand, int *iDaq);@\\
|
||||
\mbox{}\verb@@$\diamond$
|
||||
\end{list}
|
||||
\vspace{-1ex}
|
||||
\footnotesize\addtolength{\baselineskip}{-1ex}
|
||||
\begin{list}{}{\setlength{\itemsep}{-\parsep}\setlength{\itemindent}{-\leftmargin}}
|
||||
\item Macro defined by scraps 4, 6b.
|
||||
\item Macro referenced in scrap ?.
|
||||
\end{list}
|
||||
\end{minipage}\\[4ex]
|
||||
\end{flushleft}
|
||||
OpenMasterCoonection tries to open a connection to the SINQ histogram memory
|
||||
master server ready to send data.
|
||||
|
||||
GetMasterReply collects the reply from the master server.
|
||||
|
||||
SendDAQCommand sends iCommand to the client server. Returns the current
|
||||
status of the data aquisition flag in iDaq for further analysis.
|
||||
|
||||
\begin{flushleft} \small
|
||||
\begin{minipage}{\linewidth} \label{scrap12}
|
||||
$\langle$ErrCode {\footnotesize ?}$\rangle\equiv$
|
||||
\vspace{-1ex}
|
||||
\begin{list}{}{} \item
|
||||
\mbox{}\verb@@\\
|
||||
\mbox{}\verb@#define HMCOMPUTER_NOT_FOUND -2@\\
|
||||
\mbox{}\verb@#define SOCKET_ERROR -3@\\
|
||||
\mbox{}\verb@#define BIND_ERROR -4@\\
|
||||
\mbox{}\verb@#define CONNECT_ERROR -5@\\
|
||||
\mbox{}\verb@#define RECEIVE_ERROR -6@\\
|
||||
\mbox{}\verb@#define INSUFFICIENT_DATA -7@\\
|
||||
\mbox{}\verb@#define BYTE_ORDER_CHAOS -8@\\
|
||||
\mbox{}\verb@#define HIST_BAD_CREATE -9@\\
|
||||
\mbox{}\verb@#define HIST_BAD_STATE -10@\\
|
||||
\mbox{}\verb@#define HIST_BAD_VALUE -11@\\
|
||||
\mbox{}\verb@#define HIST_BAD_RECV -12@\\
|
||||
\mbox{}\verb@#define HIST_BAD_ALLOC -13@\\
|
||||
\mbox{}\verb@#define HIST_BAD_CODE -14@\\
|
||||
\mbox{}\verb@#define SEND_ERROR -15@\\
|
||||
\mbox{}\verb@#define CLOSE_ERROR -16@\\
|
||||
\mbox{}\verb@#define INVALID_HARSH -17@\\
|
||||
\mbox{}\verb@#define SOFTWARE_ERROR -18@\\
|
||||
\mbox{}\verb@#define DAQ_INHIBIT -19@\\
|
||||
\mbox{}\verb@#define DAQ_NOTSTOPPED -20@\\
|
||||
\mbox{}\verb@@$\diamond$
|
||||
\end{list}
|
||||
\vspace{-1ex}
|
||||
\footnotesize\addtolength{\baselineskip}{-1ex}
|
||||
\begin{list}{}{\setlength{\itemsep}{-\parsep}\setlength{\itemindent}{-\leftmargin}}
|
||||
\item Macro referenced in scrap ?.
|
||||
\end{list}
|
||||
\end{minipage}\\[4ex]
|
||||
\end{flushleft}
|
||||
\begin{flushleft} \small
|
||||
\begin{minipage}{\linewidth} \label{scrap13}
|
||||
\verb@"sinqhm.h"@ {\footnotesize ? }$\equiv$
|
||||
\vspace{-1ex}
|
||||
\begin{list}{}{} \item
|
||||
\mbox{}\verb@@\\
|
||||
\mbox{}\verb@/*---------------------------------------------------------------------------@\\
|
||||
\mbox{}\verb@ S I N Q H M@\\
|
||||
\mbox{}\verb@ Some utility functions for interfacing to the SINQ histogram memory@\\
|
||||
\mbox{}\verb@ server.@\\
|
||||
\mbox{}\verb@@\\
|
||||
\mbox{}\verb@ David Maden, Mark Koennecke, April 1997@\\
|
||||
\mbox{}\verb@@\\
|
||||
\mbox{}\verb@ copyright: see implementation file.@\\
|
||||
\mbox{}\verb@-----------------------------------------------------------------------------*/@\\
|
||||
\mbox{}\verb@#ifndef SINQHMUTILITY@\\
|
||||
\mbox{}\verb@#define SINQHMUTILITY@\\
|
||||
\mbox{}\verb@#include "sinqhm_def.h"@\\
|
||||
\mbox{}\verb@@\\
|
||||
\mbox{}\verb@ typedef struct __SINQHM *pSINQHM;@\\
|
||||
\mbox{}\verb@/*------------------------------ Error codes -----------------------------*/@\\
|
||||
\mbox{}\verb@@$\langle$ErrCode {\footnotesize ?}$\rangle$\verb@@\\
|
||||
\mbox{}\verb@@\\
|
||||
\mbox{}\verb@/*------------------------------ Prototypes ------------------------------*/@\\
|
||||
\mbox{}\verb@@$\langle$Protos {\footnotesize 3a, \ldots\ }$\rangle$\verb@@\\
|
||||
\mbox{}\verb@@$\langle$TOFProto {\footnotesize 5a}$\rangle$\verb@@\\
|
||||
\mbox{}\verb@#endif@\\
|
||||
\mbox{}\verb@@$\diamond$
|
||||
\end{list}
|
||||
\vspace{-2ex}
|
||||
\end{minipage}\\[4ex]
|
||||
\end{flushleft}
|
||||
\begin{flushleft} \small
|
||||
\begin{minipage}{\linewidth} \label{scrap14}
|
||||
\verb@"sinqhm.i"@ {\footnotesize ? }$\equiv$
|
||||
\vspace{-1ex}
|
||||
\begin{list}{}{} \item
|
||||
\mbox{}\verb@@\\
|
||||
\mbox{}\verb@/*---------------------------------------------------------------------------@\\
|
||||
\mbox{}\verb@@\\
|
||||
\mbox{}\verb@ Internal header file for the SINQ histogram memory utility functions.@\\
|
||||
\mbox{}\verb@@\\
|
||||
\mbox{}\verb@ David Maden, Mark Koennecke April 1997@\\
|
||||
\mbox{}\verb@----------------------------------------------------------------------------*/@\\
|
||||
\mbox{}\verb@#ifndef SINQHMINTERNAL@\\
|
||||
\mbox{}\verb@#define SINQHMINTERNAL@\\
|
||||
\mbox{}\verb@#define MAXBANK 1@\\
|
||||
\mbox{}\verb@@$\langle$SBank {\footnotesize 2a}$\rangle$\verb@@\\
|
||||
\mbox{}\verb@@$\langle$SType {\footnotesize 2b, \ldots\ }$\rangle$\verb@@\\
|
||||
\mbox{}\verb@@$\langle$IProtos {\footnotesize 4, \ldots\ }$\rangle$\verb@@\\
|
||||
\mbox{}\verb@@$\langle$TOFintern {\footnotesize 5b}$\rangle$\verb@@\\
|
||||
\mbox{}\verb@#endif@\\
|
||||
\mbox{}\verb@@\\
|
||||
\mbox{}\verb@@$\diamond$
|
||||
\end{list}
|
||||
\vspace{-2ex}
|
||||
\end{minipage}\\[4ex]
|
||||
\end{flushleft}
|
||||
\chapter{The SINQ histogram memory Tcl wrapper}
|
||||
In order to allow for status displays via Tcl/TK, for debugging and general
|
||||
availability a Tcl wrapper for the SINQ histogram memory functions has been
|
||||
devised. It works similar to the widget commands as used for TK. On startup
|
||||
the extra command SINQHM is available. The syntax is: \\
|
||||
\leftline{SINQHM name computer port }\\
|
||||
This command will create another command called name which symbolises a
|
||||
connection to the histogram memory at computer listening to port. The new
|
||||
object created is a control object. This control object understands the
|
||||
commands listed below. Each command has to be prepended with the name you
|
||||
specified in the call to SINQHM.
|
||||
\begin{itemize}
|
||||
\item {\bf config iMode iOver iRank iLength iBinWidth} configures a histogram
|
||||
memory.
|
||||
\item {\bf status} return a status message of the HM.
|
||||
\item {\bf deconfig iHarsh} deconfigures the HM.
|
||||
\item {\bf debug iLevel} sets internal debug level.
|
||||
\item {\bf exit} do not use this! Kills the HM.
|
||||
\item {\bf DAQ name } creates a data aquisition client named name.
|
||||
\item {\bf delDAQ name} kills the data aquisition client named name.
|
||||
\end{itemize}
|
||||
|
||||
After the last call there exists a new command name which represents a data
|
||||
aquisition client, capabale of reading and writing data. This DAQ client
|
||||
understands the commands listed below. Again, each command has to prepended
|
||||
with the name given in the DAQ command above.
|
||||
\begin{itemize}
|
||||
\item {\bf read iNum iStart iEnd arname} reads histogram iNum from
|
||||
iStart to iEnd. The data will be stored in the array arname.
|
||||
\item {\bf write iNum iStart iEnd data} writes data to the histogram iNum
|
||||
from iStart iEnd bins. data must be an Tcl-array with indexes from 0 to
|
||||
iEnd which contains the values to write.
|
||||
\item {\bf zero} zeroes the histogram memory.
|
||||
\item {\bf start} starts data aquisition.
|
||||
\item {\bf stop} stops data aquisition.
|
||||
\item {\bf inhibit} inhibits data aquisition.
|
||||
\item {\bf continue} continues an inhibited data aquisition session.
|
||||
\end{itemize}
|
||||
|
||||
|
||||
|
||||
\end{document}
|
||||
Reference in New Issue
Block a user