mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-06-12 21:07:13 +02:00
separate receiver, and updated docs
This commit is contained in:
BIN
manual/manual-api/slsDetectorUsersDocs/latex/FreeSans.ttf
Normal file
BIN
manual/manual-api/slsDetectorUsersDocs/latex/FreeSans.ttf
Normal file
Binary file not shown.
17
manual/manual-api/slsDetectorUsersDocs/latex/Makefile
Normal file
17
manual/manual-api/slsDetectorUsersDocs/latex/Makefile
Normal file
@ -0,0 +1,17 @@
|
||||
all: clean refman.pdf
|
||||
|
||||
refman.pdf: refman.tex
|
||||
pdflatex refman.tex
|
||||
makeindex refman.idx
|
||||
pdflatex refman.tex
|
||||
latex_count=5 ; \
|
||||
while egrep -s 'Rerun (LaTeX|to get cross-references right)' refman.log && [ $$latex_count -gt 0 ] ;\
|
||||
do \
|
||||
echo "Rerunning latex...." ;\
|
||||
pdflatex refman.tex ;\
|
||||
latex_count=`expr $$latex_count - 1` ;\
|
||||
done
|
||||
|
||||
|
||||
clean:
|
||||
rm -f *.ps *.dvi *.aux *.toc *.idx *.ind *.ilg *.log *.out refman.pdf
|
@ -0,0 +1,6 @@
|
||||
\subsection{Class List}
|
||||
Here are the classes, structs, unions and interfaces with brief descriptions:\begin{CompactList}
|
||||
\item\contentsline{section}{\hyperlink{classdetectorData}{detector\-Data} (Data structure to hold the detector data after postprocessing (e.g. to plot, store in a root tree etc.) )}{\pageref{classdetectorData}}{}
|
||||
\item\contentsline{section}{\hyperlink{classslsDetectorUsers}{sls\-Detector\-Users} (Class for detector functionalitiesto embed the detector controls in the users custom interface e.g. EPICS, Lima etc )}{\pageref{classslsDetectorUsers}}{}
|
||||
\item\contentsline{section}{\hyperlink{classslsReceiverUsers}{sls\-Receiver\-Users} (Class for implementing the SLS data receiver in the users application. Callbacks can be defined for processing and/or saving data )}{\pageref{classslsReceiverUsers}}{}
|
||||
\end{CompactList}
|
@ -0,0 +1,171 @@
|
||||
\hypertarget{classdetectorData}{
|
||||
\subsection{detector\-Data Class Reference}
|
||||
\label{classdetectorData}\index{detectorData@{detectorData}}
|
||||
}
|
||||
data structure to hold the detector data after postprocessing (e.g. to plot, store in a root tree etc.)
|
||||
|
||||
|
||||
{\tt \#include $<$detector\-Data.h$>$}
|
||||
|
||||
\subsubsection*{Public Member Functions}
|
||||
\begin{CompactItemize}
|
||||
\item
|
||||
\hyperlink{classdetectorData_3f8538f5f634295fc40682b8aed47b31}{detector\-Data} (double $\ast$val=NULL, double $\ast$err=NULL, double $\ast$ang=NULL, double p\_\-ind=-1, const char $\ast$fname=\char`\"{}\char`\"{}, int np=-1, int ny=1)
|
||||
\begin{CompactList}\small\item\em The constructor. \item\end{CompactList}\item
|
||||
\hyperlink{classdetectorData_d32a037cc2bd6e8caf4556cbd4b88ec7}{$\sim$detector\-Data} ()
|
||||
\begin{CompactList}\small\item\em The destructor deletes also the arrays pointing to data/errors/angles if not NULL. \item\end{CompactList}\end{CompactItemize}
|
||||
\subsubsection*{Public Attributes}
|
||||
\begin{CompactItemize}
|
||||
\item
|
||||
double $\ast$ \hyperlink{classdetectorData_0f4e31d65f9616e83a2e5521453d0364}{values}
|
||||
\begin{CompactList}\small\item\em pointer to the data \item\end{CompactList}\item
|
||||
double $\ast$ \hyperlink{classdetectorData_29cb1c6bb5635e918ae28505ccd0d8f9}{errors}
|
||||
\begin{CompactList}\small\item\em pointer to the errors \item\end{CompactList}\item
|
||||
double $\ast$ \hyperlink{classdetectorData_cc9f9708b9ff2d840208cae843fb4b7a}{angles}
|
||||
\begin{CompactList}\small\item\em pointer to the angles (NULL if no angular conversion) \item\end{CompactList}\item
|
||||
double \hyperlink{classdetectorData_976b3287d46aed032487bbeed74132da}{progress\-Index}
|
||||
\begin{CompactList}\small\item\em file index \item\end{CompactList}\item
|
||||
char \hyperlink{classdetectorData_91d1e3466878def295a531c01bdeef6b}{file\-Name} \mbox{[}1000\mbox{]}
|
||||
\begin{CompactList}\small\item\em file name \item\end{CompactList}\item
|
||||
int \hyperlink{classdetectorData_50aabf6f2c40587f8e915cf4913a2cfe}{npoints}
|
||||
\begin{CompactList}\small\item\em number of points \item\end{CompactList}\item
|
||||
int \hyperlink{classdetectorData_c289d259e7fd9445a9c04976a82cb324}{npy}
|
||||
\begin{CompactList}\small\item\em dimensions in y coordinate \item\end{CompactList}\end{CompactItemize}
|
||||
|
||||
|
||||
\subsubsection{Detailed Description}
|
||||
data structure to hold the detector data after postprocessing (e.g. to plot, store in a root tree etc.)
|
||||
|
||||
|
||||
|
||||
Definition at line 9 of file detector\-Data.h.
|
||||
|
||||
\subsubsection{Constructor \& Destructor Documentation}
|
||||
\hypertarget{classdetectorData_3f8538f5f634295fc40682b8aed47b31}{
|
||||
\index{detectorData@{detector\-Data}!detectorData@{detectorData}}
|
||||
\index{detectorData@{detectorData}!detectorData@{detector\-Data}}
|
||||
\paragraph[detectorData]{\setlength{\rightskip}{0pt plus 5cm}detector\-Data::detector\-Data (double $\ast$ {\em val} = {\tt NULL}, double $\ast$ {\em err} = {\tt NULL}, double $\ast$ {\em ang} = {\tt NULL}, double {\em p\_\-ind} = {\tt -1}, const char $\ast$ {\em fname} = {\tt \char`\"{}\char`\"{}}, int {\em np} = {\tt -1}, int {\em ny} = {\tt 1})\hspace{0.3cm}{\tt \mbox{[}inline\mbox{]}}}\hfill}
|
||||
\label{classdetectorData_3f8538f5f634295fc40682b8aed47b31}
|
||||
|
||||
|
||||
The constructor.
|
||||
|
||||
\begin{Desc}
|
||||
\item[Parameters:]
|
||||
\begin{description}
|
||||
\item[{\em val}]pointer to the data \item[{\em err}]pointer to errors \item[{\em ang}]pointer to the angles \item[{\em f\_\-ind}]file index \item[{\em fname}]file name to which the data are saved \item[{\em np}]number of points in x coordinate defaults to the number of detector channels (1D detector) \item[{\em ny}]dimension in y (1D detector) \end{description}
|
||||
\end{Desc}
|
||||
|
||||
|
||||
Definition at line 20 of file detector\-Data.h.
|
||||
|
||||
References file\-Name.\hypertarget{classdetectorData_d32a037cc2bd6e8caf4556cbd4b88ec7}{
|
||||
\index{detectorData@{detector\-Data}!~detectorData@{$\sim$detectorData}}
|
||||
\index{~detectorData@{$\sim$detectorData}!detectorData@{detector\-Data}}
|
||||
\paragraph[$\sim$detectorData]{\setlength{\rightskip}{0pt plus 5cm}detector\-Data::$\sim$detector\-Data ()\hspace{0.3cm}{\tt \mbox{[}inline\mbox{]}}}\hfill}
|
||||
\label{classdetectorData_d32a037cc2bd6e8caf4556cbd4b88ec7}
|
||||
|
||||
|
||||
The destructor deletes also the arrays pointing to data/errors/angles if not NULL.
|
||||
|
||||
|
||||
|
||||
Definition at line 25 of file detector\-Data.h.
|
||||
|
||||
References angles, errors, and values.
|
||||
|
||||
\subsubsection{Member Data Documentation}
|
||||
\hypertarget{classdetectorData_cc9f9708b9ff2d840208cae843fb4b7a}{
|
||||
\index{detectorData@{detector\-Data}!angles@{angles}}
|
||||
\index{angles@{angles}!detectorData@{detector\-Data}}
|
||||
\paragraph[angles]{\setlength{\rightskip}{0pt plus 5cm}double$\ast$ \hyperlink{classdetectorData_cc9f9708b9ff2d840208cae843fb4b7a}{detector\-Data::angles}}\hfill}
|
||||
\label{classdetectorData_cc9f9708b9ff2d840208cae843fb4b7a}
|
||||
|
||||
|
||||
pointer to the angles (NULL if no angular conversion)
|
||||
|
||||
|
||||
|
||||
Definition at line 29 of file detector\-Data.h.
|
||||
|
||||
Referenced by $\sim$detector\-Data().\hypertarget{classdetectorData_29cb1c6bb5635e918ae28505ccd0d8f9}{
|
||||
\index{detectorData@{detector\-Data}!errors@{errors}}
|
||||
\index{errors@{errors}!detectorData@{detector\-Data}}
|
||||
\paragraph[errors]{\setlength{\rightskip}{0pt plus 5cm}double$\ast$ \hyperlink{classdetectorData_29cb1c6bb5635e918ae28505ccd0d8f9}{detector\-Data::errors}}\hfill}
|
||||
\label{classdetectorData_29cb1c6bb5635e918ae28505ccd0d8f9}
|
||||
|
||||
|
||||
pointer to the errors
|
||||
|
||||
|
||||
|
||||
Definition at line 28 of file detector\-Data.h.
|
||||
|
||||
Referenced by $\sim$detector\-Data().\hypertarget{classdetectorData_91d1e3466878def295a531c01bdeef6b}{
|
||||
\index{detectorData@{detector\-Data}!fileName@{fileName}}
|
||||
\index{fileName@{fileName}!detectorData@{detector\-Data}}
|
||||
\paragraph[fileName]{\setlength{\rightskip}{0pt plus 5cm}char \hyperlink{classdetectorData_91d1e3466878def295a531c01bdeef6b}{detector\-Data::file\-Name}\mbox{[}1000\mbox{]}}\hfill}
|
||||
\label{classdetectorData_91d1e3466878def295a531c01bdeef6b}
|
||||
|
||||
|
||||
file name
|
||||
|
||||
|
||||
|
||||
Definition at line 31 of file detector\-Data.h.
|
||||
|
||||
Referenced by detector\-Data().\hypertarget{classdetectorData_50aabf6f2c40587f8e915cf4913a2cfe}{
|
||||
\index{detectorData@{detector\-Data}!npoints@{npoints}}
|
||||
\index{npoints@{npoints}!detectorData@{detector\-Data}}
|
||||
\paragraph[npoints]{\setlength{\rightskip}{0pt plus 5cm}int \hyperlink{classdetectorData_50aabf6f2c40587f8e915cf4913a2cfe}{detector\-Data::npoints}}\hfill}
|
||||
\label{classdetectorData_50aabf6f2c40587f8e915cf4913a2cfe}
|
||||
|
||||
|
||||
number of points
|
||||
|
||||
|
||||
|
||||
Definition at line 32 of file detector\-Data.h.
|
||||
|
||||
Referenced by data\-Callback().\hypertarget{classdetectorData_c289d259e7fd9445a9c04976a82cb324}{
|
||||
\index{detectorData@{detector\-Data}!npy@{npy}}
|
||||
\index{npy@{npy}!detectorData@{detector\-Data}}
|
||||
\paragraph[npy]{\setlength{\rightskip}{0pt plus 5cm}int \hyperlink{classdetectorData_c289d259e7fd9445a9c04976a82cb324}{detector\-Data::npy}}\hfill}
|
||||
\label{classdetectorData_c289d259e7fd9445a9c04976a82cb324}
|
||||
|
||||
|
||||
dimensions in y coordinate
|
||||
|
||||
|
||||
|
||||
Definition at line 33 of file detector\-Data.h.
|
||||
|
||||
Referenced by data\-Callback().\hypertarget{classdetectorData_976b3287d46aed032487bbeed74132da}{
|
||||
\index{detectorData@{detector\-Data}!progressIndex@{progressIndex}}
|
||||
\index{progressIndex@{progressIndex}!detectorData@{detector\-Data}}
|
||||
\paragraph[progressIndex]{\setlength{\rightskip}{0pt plus 5cm}double \hyperlink{classdetectorData_976b3287d46aed032487bbeed74132da}{detector\-Data::progress\-Index}}\hfill}
|
||||
\label{classdetectorData_976b3287d46aed032487bbeed74132da}
|
||||
|
||||
|
||||
file index
|
||||
|
||||
|
||||
|
||||
Definition at line 30 of file detector\-Data.h.\hypertarget{classdetectorData_0f4e31d65f9616e83a2e5521453d0364}{
|
||||
\index{detectorData@{detector\-Data}!values@{values}}
|
||||
\index{values@{values}!detectorData@{detector\-Data}}
|
||||
\paragraph[values]{\setlength{\rightskip}{0pt plus 5cm}double$\ast$ \hyperlink{classdetectorData_0f4e31d65f9616e83a2e5521453d0364}{detector\-Data::values}}\hfill}
|
||||
\label{classdetectorData_0f4e31d65f9616e83a2e5521453d0364}
|
||||
|
||||
|
||||
pointer to the data
|
||||
|
||||
|
||||
|
||||
Definition at line 25 of file detector\-Data.h.
|
||||
|
||||
Referenced by $\sim$detector\-Data().
|
||||
|
||||
The documentation for this class was generated from the following file:\begin{CompactItemize}
|
||||
\item
|
||||
\hyperlink{detectorData_8h}{detector\-Data.h}\end{CompactItemize}
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,164 @@
|
||||
\hypertarget{classslsReceiverUsers}{
|
||||
\subsection{sls\-Receiver\-Users Class Reference}
|
||||
\label{classslsReceiverUsers}\index{slsReceiverUsers@{slsReceiverUsers}}
|
||||
}
|
||||
Class for implementing the SLS data receiver in the users application. Callbacks can be defined for processing and/or saving data.
|
||||
|
||||
|
||||
{\tt \#include $<$sls\-Receiver\-Users.h$>$}
|
||||
|
||||
\subsubsection*{Public Member Functions}
|
||||
\begin{CompactItemize}
|
||||
\item
|
||||
\hyperlink{classslsReceiverUsers_79a82ba94fbb19761c7701aa3901b8b1}{sls\-Receiver\-Users} (int argc, char $\ast$argv\mbox{[}$\,$\mbox{]}, int \&success)
|
||||
\item
|
||||
\hyperlink{classslsReceiverUsers_9b45943d81ce7a09543aa446de857cb0}{$\sim$sls\-Receiver\-Users} ()
|
||||
\item
|
||||
void \hyperlink{classslsReceiverUsers_bad0b3265826da2d9ebf48e59e9d5787}{close\-File} (int p)
|
||||
\item
|
||||
int \hyperlink{classslsReceiverUsers_ef40b4987367b8a0116bcb66534dd7b7}{start} ()
|
||||
\item
|
||||
void \hyperlink{classslsReceiverUsers_394001d873a4b7912865a971d4d25f87}{stop} ()
|
||||
\item
|
||||
int64\_\-t \hyperlink{classslsReceiverUsers_f206092e2744e12ce6b717f4181d91a2}{get\-Receiver\-Version} ()
|
||||
\item
|
||||
void \hyperlink{classslsReceiverUsers_5d4bb9244008d0bc570778230d30c5e3}{register\-Call\-Back\-Start\-Acquisition} (int($\ast$func)(char $\ast$filepath, char $\ast$filename, int fileindex, int datasize, void $\ast$), void $\ast$arg)
|
||||
\item
|
||||
void \hyperlink{classslsReceiverUsers_7471d2945e8650eece86258e6ca56156}{register\-Call\-Back\-Acquisition\-Finished} (void($\ast$func)(int nf, void $\ast$), void $\ast$arg)
|
||||
\item
|
||||
void \hyperlink{classslsReceiverUsers_343b9fac505e8c08a7fbf9efdd0f5762}{register\-Call\-Back\-Raw\-Data\-Ready} (void($\ast$func)(int framenumber, char $\ast$datapointer, int datasize, FILE $\ast$filedescriptor, char $\ast$guidatapointer, void $\ast$), void $\ast$arg)
|
||||
\end{CompactItemize}
|
||||
\subsubsection*{Static Public Attributes}
|
||||
\begin{CompactItemize}
|
||||
\item
|
||||
static sls\-Receiver\-TCPIPInterface $\ast$ \hyperlink{classslsReceiverUsers_8f262724fb99ecd3976214710d82dd18}{receiver}
|
||||
\end{CompactItemize}
|
||||
|
||||
|
||||
\subsubsection{Detailed Description}
|
||||
Class for implementing the SLS data receiver in the users application. Callbacks can be defined for processing and/or saving data.
|
||||
|
||||
\hyperlink{classslsReceiverUsers}{sls\-Receiver\-Users} is a class that can be instantiated in the users software to receive the data from the detectors. Callbacks can be defined for processing and/or saving data
|
||||
|
||||
|
||||
|
||||
Definition at line 21 of file sls\-Receiver\-Users.h.
|
||||
|
||||
\subsubsection{Constructor \& Destructor Documentation}
|
||||
\hypertarget{classslsReceiverUsers_79a82ba94fbb19761c7701aa3901b8b1}{
|
||||
\index{slsReceiverUsers@{sls\-Receiver\-Users}!slsReceiverUsers@{slsReceiverUsers}}
|
||||
\index{slsReceiverUsers@{slsReceiverUsers}!slsReceiverUsers@{sls\-Receiver\-Users}}
|
||||
\paragraph[slsReceiverUsers]{\setlength{\rightskip}{0pt plus 5cm}sls\-Receiver\-Users::sls\-Receiver\-Users (int {\em argc}, char $\ast$ {\em argv}\mbox{[}$\,$\mbox{]}, int \& {\em success})}\hfill}
|
||||
\label{classslsReceiverUsers_79a82ba94fbb19761c7701aa3901b8b1}
|
||||
|
||||
|
||||
Constructor reads config file, creates socket, assigns function table \begin{Desc}
|
||||
\item[Parameters:]
|
||||
\begin{description}
|
||||
\item[{\em argc}]from command line \item[{\em argv}]from command line \item[{\em succecc}]socket creation was successfull \end{description}
|
||||
\end{Desc}
|
||||
\hypertarget{classslsReceiverUsers_9b45943d81ce7a09543aa446de857cb0}{
|
||||
\index{slsReceiverUsers@{sls\-Receiver\-Users}!~slsReceiverUsers@{$\sim$slsReceiverUsers}}
|
||||
\index{~slsReceiverUsers@{$\sim$slsReceiverUsers}!slsReceiverUsers@{sls\-Receiver\-Users}}
|
||||
\paragraph[$\sim$slsReceiverUsers]{\setlength{\rightskip}{0pt plus 5cm}sls\-Receiver\-Users::$\sim$sls\-Receiver\-Users ()}\hfill}
|
||||
\label{classslsReceiverUsers_9b45943d81ce7a09543aa446de857cb0}
|
||||
|
||||
|
||||
Destructor
|
||||
|
||||
\subsubsection{Member Function Documentation}
|
||||
\hypertarget{classslsReceiverUsers_bad0b3265826da2d9ebf48e59e9d5787}{
|
||||
\index{slsReceiverUsers@{sls\-Receiver\-Users}!closeFile@{closeFile}}
|
||||
\index{closeFile@{closeFile}!slsReceiverUsers@{sls\-Receiver\-Users}}
|
||||
\paragraph[closeFile]{\setlength{\rightskip}{0pt plus 5cm}void sls\-Receiver\-Users::close\-File (int {\em p})}\hfill}
|
||||
\label{classslsReceiverUsers_bad0b3265826da2d9ebf48e59e9d5787}
|
||||
|
||||
|
||||
Close File and exits receiver server \hypertarget{classslsReceiverUsers_f206092e2744e12ce6b717f4181d91a2}{
|
||||
\index{slsReceiverUsers@{sls\-Receiver\-Users}!getReceiverVersion@{getReceiverVersion}}
|
||||
\index{getReceiverVersion@{getReceiverVersion}!slsReceiverUsers@{sls\-Receiver\-Users}}
|
||||
\paragraph[getReceiverVersion]{\setlength{\rightskip}{0pt plus 5cm}int64\_\-t sls\-Receiver\-Users::get\-Receiver\-Version ()}\hfill}
|
||||
\label{classslsReceiverUsers_f206092e2744e12ce6b717f4181d91a2}
|
||||
|
||||
|
||||
get get Receiver Version \begin{Desc}
|
||||
\item[Returns:]id \end{Desc}
|
||||
\hypertarget{classslsReceiverUsers_7471d2945e8650eece86258e6ca56156}{
|
||||
\index{slsReceiverUsers@{sls\-Receiver\-Users}!registerCallBackAcquisitionFinished@{registerCallBackAcquisitionFinished}}
|
||||
\index{registerCallBackAcquisitionFinished@{registerCallBackAcquisitionFinished}!slsReceiverUsers@{sls\-Receiver\-Users}}
|
||||
\paragraph[registerCallBackAcquisitionFinished]{\setlength{\rightskip}{0pt plus 5cm}void sls\-Receiver\-Users::register\-Call\-Back\-Acquisition\-Finished (void($\ast$)(int nf, void $\ast$) {\em func}, void $\ast$ {\em arg})}\hfill}
|
||||
\label{classslsReceiverUsers_7471d2945e8650eece86258e6ca56156}
|
||||
|
||||
|
||||
register callback for end of acquisition \begin{Desc}
|
||||
\item[Parameters:]
|
||||
\begin{description}
|
||||
\item[{\em func}]end of acquisition callback. Argument nf is total frames caught \end{description}
|
||||
\end{Desc}
|
||||
\begin{Desc}
|
||||
\item[Returns:]nothing \end{Desc}
|
||||
\hypertarget{classslsReceiverUsers_343b9fac505e8c08a7fbf9efdd0f5762}{
|
||||
\index{slsReceiverUsers@{sls\-Receiver\-Users}!registerCallBackRawDataReady@{registerCallBackRawDataReady}}
|
||||
\index{registerCallBackRawDataReady@{registerCallBackRawDataReady}!slsReceiverUsers@{sls\-Receiver\-Users}}
|
||||
\paragraph[registerCallBackRawDataReady]{\setlength{\rightskip}{0pt plus 5cm}void sls\-Receiver\-Users::register\-Call\-Back\-Raw\-Data\-Ready (void($\ast$)(int framenumber, char $\ast$datapointer, int datasize, FILE $\ast$filedescriptor, char $\ast$guidatapointer, void $\ast$) {\em func}, void $\ast$ {\em arg})}\hfill}
|
||||
\label{classslsReceiverUsers_343b9fac505e8c08a7fbf9efdd0f5762}
|
||||
|
||||
|
||||
register callback to be called when data are available (to process and/or save the data). \begin{Desc}
|
||||
\item[Parameters:]
|
||||
\begin{description}
|
||||
\item[{\em func}]raw data ready callback. arguments are framenum datapointer datasize file descriptor guidatapointer (NULL, no data required) \end{description}
|
||||
\end{Desc}
|
||||
\begin{Desc}
|
||||
\item[Returns:]nothing \end{Desc}
|
||||
\hypertarget{classslsReceiverUsers_5d4bb9244008d0bc570778230d30c5e3}{
|
||||
\index{slsReceiverUsers@{sls\-Receiver\-Users}!registerCallBackStartAcquisition@{registerCallBackStartAcquisition}}
|
||||
\index{registerCallBackStartAcquisition@{registerCallBackStartAcquisition}!slsReceiverUsers@{sls\-Receiver\-Users}}
|
||||
\paragraph[registerCallBackStartAcquisition]{\setlength{\rightskip}{0pt plus 5cm}void sls\-Receiver\-Users::register\-Call\-Back\-Start\-Acquisition (int($\ast$)(char $\ast$filepath, char $\ast$filename, int fileindex, int datasize, void $\ast$) {\em func}, void $\ast$ {\em arg})}\hfill}
|
||||
\label{classslsReceiverUsers_5d4bb9244008d0bc570778230d30c5e3}
|
||||
|
||||
|
||||
register calbback for starting the acquisition \begin{Desc}
|
||||
\item[Parameters:]
|
||||
\begin{description}
|
||||
\item[{\em func}]callback to be called when starting the acquisition. Its arguments are filepath filename fileindex data size\end{description}
|
||||
\end{Desc}
|
||||
\begin{Desc}
|
||||
\item[Returns:]0 callback takes care of open,close,write file; 1 callback writes file, we have to open, close it; 2 we open, close, write file, callback does not do anything \end{Desc}
|
||||
\hypertarget{classslsReceiverUsers_ef40b4987367b8a0116bcb66534dd7b7}{
|
||||
\index{slsReceiverUsers@{sls\-Receiver\-Users}!start@{start}}
|
||||
\index{start@{start}!slsReceiverUsers@{sls\-Receiver\-Users}}
|
||||
\paragraph[start]{\setlength{\rightskip}{0pt plus 5cm}int sls\-Receiver\-Users::start ()}\hfill}
|
||||
\label{classslsReceiverUsers_ef40b4987367b8a0116bcb66534dd7b7}
|
||||
|
||||
|
||||
starts listening on the TCP port for client comminication \begin{Desc}
|
||||
\item[Returns:]0 for success or 1 for FAIL in creating TCP server \end{Desc}
|
||||
|
||||
|
||||
Referenced by main().\hypertarget{classslsReceiverUsers_394001d873a4b7912865a971d4d25f87}{
|
||||
\index{slsReceiverUsers@{sls\-Receiver\-Users}!stop@{stop}}
|
||||
\index{stop@{stop}!slsReceiverUsers@{sls\-Receiver\-Users}}
|
||||
\paragraph[stop]{\setlength{\rightskip}{0pt plus 5cm}void sls\-Receiver\-Users::stop ()}\hfill}
|
||||
\label{classslsReceiverUsers_394001d873a4b7912865a971d4d25f87}
|
||||
|
||||
|
||||
stops listening to the TCP \& UDP port and exit receiver program
|
||||
|
||||
Referenced by main().
|
||||
|
||||
\subsubsection{Member Data Documentation}
|
||||
\hypertarget{classslsReceiverUsers_8f262724fb99ecd3976214710d82dd18}{
|
||||
\index{slsReceiverUsers@{sls\-Receiver\-Users}!receiver@{receiver}}
|
||||
\index{receiver@{receiver}!slsReceiverUsers@{sls\-Receiver\-Users}}
|
||||
\paragraph[receiver]{\setlength{\rightskip}{0pt plus 5cm}sls\-Receiver\-TCPIPInterface$\ast$ \hyperlink{classslsReceiverUsers_8f262724fb99ecd3976214710d82dd18}{sls\-Receiver\-Users::receiver}\hspace{0.3cm}{\tt \mbox{[}static\mbox{]}}}\hfill}
|
||||
\label{classslsReceiverUsers_8f262724fb99ecd3976214710d82dd18}
|
||||
|
||||
|
||||
|
||||
|
||||
Definition at line 87 of file sls\-Receiver\-Users.h.
|
||||
|
||||
The documentation for this class was generated from the following file:\begin{CompactItemize}
|
||||
\item
|
||||
\hyperlink{slsReceiverUsers_8h}{sls\-Receiver\-Users.h}\end{CompactItemize}
|
@ -0,0 +1,11 @@
|
||||
\hypertarget{detectorData_8h}{
|
||||
\subsection{detector\-Data.h File Reference}
|
||||
\label{detectorData_8h}\index{detectorData.h@{detectorData.h}}
|
||||
}
|
||||
{\tt \#include $<$unistd.h$>$}\par
|
||||
{\tt \#include $<$cstring$>$}\par
|
||||
\subsubsection*{Classes}
|
||||
\begin{CompactItemize}
|
||||
\item
|
||||
class \hyperlink{classdetectorData}{detector\-Data}
|
||||
\begin{CompactList}\small\item\em data structure to hold the detector data after postprocessing (e.g. to plot, store in a root tree etc.) \item\end{CompactList}\end{CompactItemize}
|
77
manual/manual-api/slsDetectorUsersDocs/latex/doxygen.sty
Normal file
77
manual/manual-api/slsDetectorUsersDocs/latex/doxygen.sty
Normal file
@ -0,0 +1,77 @@
|
||||
\NeedsTeXFormat{LaTeX2e}
|
||||
\ProvidesPackage{doxygen}
|
||||
\RequirePackage{calc}
|
||||
\RequirePackage{array}
|
||||
\pagestyle{fancyplain}
|
||||
\newcommand{\clearemptydoublepage}{\newpage{\pagestyle{empty}\cleardoublepage}}
|
||||
\renewcommand{\sectionmark}[1]{\markright{\thesection\ #1}}
|
||||
\lhead[\fancyplain{}{\bfseries\thepage}]
|
||||
{\fancyplain{}{\bfseries\rightmark}}
|
||||
\rhead[\fancyplain{}{\bfseries\leftmark}]
|
||||
{\fancyplain{}{\bfseries\thepage}}
|
||||
\rfoot[\fancyplain{}{\bfseries\scriptsize Generated on Mon May 26 17:07:05 2014 by Doxygen }]{}
|
||||
\lfoot[]{\fancyplain{}{\bfseries\scriptsize Generated on Mon May 26 17:07:05 2014 by Doxygen }}
|
||||
\cfoot{}
|
||||
\newenvironment{Code}
|
||||
{\footnotesize}
|
||||
{\normalsize}
|
||||
\newcommand{\doxyref}[3]{\textbf{#1} (\textnormal{#2}\,\pageref{#3})}
|
||||
\newenvironment{DocInclude}
|
||||
{\footnotesize}
|
||||
{\normalsize}
|
||||
\newenvironment{VerbInclude}
|
||||
{\footnotesize}
|
||||
{\normalsize}
|
||||
\newenvironment{Image}
|
||||
{\begin{figure}[H]}
|
||||
{\end{figure}}
|
||||
\newenvironment{ImageNoCaption}{}{}
|
||||
\newenvironment{CompactList}
|
||||
{\begin{list}{}{
|
||||
\setlength{\leftmargin}{0.5cm}
|
||||
\setlength{\itemsep}{0pt}
|
||||
\setlength{\parsep}{0pt}
|
||||
\setlength{\topsep}{0pt}
|
||||
\renewcommand{\makelabel}{\hfill}}}
|
||||
{\end{list}}
|
||||
\newenvironment{CompactItemize}
|
||||
{
|
||||
\begin{itemize}
|
||||
\setlength{\itemsep}{-3pt}
|
||||
\setlength{\parsep}{0pt}
|
||||
\setlength{\topsep}{0pt}
|
||||
\setlength{\partopsep}{0pt}
|
||||
}
|
||||
{\end{itemize}}
|
||||
\newcommand{\PBS}[1]{\let\temp=\\#1\let\\=\temp}
|
||||
\newlength{\tmplength}
|
||||
\newenvironment{TabularC}[1]
|
||||
{
|
||||
\setlength{\tmplength}
|
||||
{\linewidth/(#1)-\tabcolsep*2-\arrayrulewidth*(#1+1)/(#1)}
|
||||
\par\begin{tabular*}{\linewidth}
|
||||
{*{#1}{|>{\PBS\raggedright\hspace{0pt}}p{\the\tmplength}}|}
|
||||
}
|
||||
{\end{tabular*}\par}
|
||||
\newcommand{\entrylabel}[1]{
|
||||
{\parbox[b]{\labelwidth-4pt}{\makebox[0pt][l]{\textbf{#1}}\vspace{1.5\baselineskip}}}}
|
||||
\newenvironment{Desc}
|
||||
{\begin{list}{}
|
||||
{
|
||||
\settowidth{\labelwidth}{40pt}
|
||||
\setlength{\leftmargin}{\labelwidth}
|
||||
\setlength{\parsep}{0pt}
|
||||
\setlength{\itemsep}{-4pt}
|
||||
\renewcommand{\makelabel}{\entrylabel}
|
||||
}
|
||||
}
|
||||
{\end{list}}
|
||||
\newenvironment{Indent}
|
||||
{\begin{list}{}{\setlength{\leftmargin}{0.5cm}}
|
||||
\item[]\ignorespaces}
|
||||
{\unskip\end{list}}
|
||||
\setlength{\parindent}{0cm}
|
||||
\setlength{\parskip}{0.2cm}
|
||||
\addtocounter{secnumdepth}{1}
|
||||
\sloppy
|
||||
\usepackage[T1]{fontenc}
|
8
manual/manual-api/slsDetectorUsersDocs/latex/files.tex
Normal file
8
manual/manual-api/slsDetectorUsersDocs/latex/files.tex
Normal file
@ -0,0 +1,8 @@
|
||||
\subsection{File List}
|
||||
Here is a list of all files with brief descriptions:\begin{CompactList}
|
||||
\item\contentsline{section}{\hyperlink{detectorData_8h}{detector\-Data.h} }{\pageref{detectorData_8h}}{}
|
||||
\item\contentsline{section}{\hyperlink{mainClient_8cpp}{main\-Client.cpp} }{\pageref{mainClient_8cpp}}{}
|
||||
\item\contentsline{section}{\hyperlink{mainReceiver_8cpp}{main\-Receiver.cpp} }{\pageref{mainReceiver_8cpp}}{}
|
||||
\item\contentsline{section}{\hyperlink{slsDetectorUsers_8h}{sls\-Detector\-Users.h} }{\pageref{slsDetectorUsers_8h}}{}
|
||||
\item\contentsline{section}{\hyperlink{slsReceiverUsers_8h}{sls\-Receiver\-Users.h} }{\pageref{slsReceiverUsers_8h}}{}
|
||||
\end{CompactList}
|
26
manual/manual-api/slsDetectorUsersDocs/latex/index.tex
Normal file
26
manual/manual-api/slsDetectorUsersDocs/latex/index.tex
Normal file
@ -0,0 +1,26 @@
|
||||
\subsection*{API for SLS detectors data acquisition}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Although the SLS detectors group delvelops several types of detectors (1/2D, counting/integrating etc.) it is common interest of the group to use a common platfor for data acquisition
|
||||
|
||||
The architecture of the acquisitions system is intended as follows: \begin{itemize}
|
||||
\item A socket server running on the detector (or more than one in some special cases) \item C++ classes common to all detectors for client-server communication. These can be supplied to users as libraries and embedded also in acquisition systems which are not developed by the SLS \item the possibility of using a Qt-based graphical user interface (with eventually root analisys capabilities) \item the possibility of running all commands from command line. In order to ensure a fast operation of this so called \char`\"{}text client\char`\"{} the detector parameters should not be re-initialized everytime. For this reason a shared memory block is allocated where the main detector flags and parameters are stored \item a Root library for data postprocessing and detector calibration (energy, angle).\end{itemize}
|
||||
\hyperlink{classslsDetectorUsers}{sls\-Detector\-Users} is a class to control the detector which should be instantiated by the users in their acquisition software (EPICS, spec etc.). A callback for dislaying the data can be registered. More advanced configuration functions are not implemented and can be written in a configuration file tha can be read/written.
|
||||
|
||||
\hyperlink{classslsReceiverUsers}{sls\-Receiver\-Users} is a class to receive the data for detectors with external data receiver (e.g. GOTTHARD). Callbacks can be registered to process the data or save them in specific formats.
|
||||
|
||||
\hyperlink{classdetectorData}{detector\-Data} is a structure containing the data and additional information which is used to return the data e.g. to the GUI for displaying them.
|
||||
|
||||
You can find examples of how this classes can be instatiated in \hyperlink{mainClient_8cpp}{main\-Client.cpp} and \hyperlink{mainReceiver_8cpp}{main\-Receiver.cpp}
|
||||
|
||||
\begin{Desc}
|
||||
\item[Authors:]\href{mailto:anna.bergamaschi@psi.ch}{\tt Anna Bergamaschi}, \href{mailto:dhanya.maliakal@psi.ch}{\tt Dhanya Maliakal} \end{Desc}
|
||||
\begin{Desc}
|
||||
\item[Version:]0.2 \subsubsection*{Currently supported detectors}\end{Desc}
|
||||
\begin{itemize}
|
||||
\item MYTHEN \item GOTTHARD controls \item GOTTHARD data receiver \paragraph*{Coming soon}\end{itemize}
|
||||
\begin{itemize}
|
||||
\item EIGER \end{itemize}
|
@ -0,0 +1,79 @@
|
||||
\hypertarget{mainClient_8cpp}{
|
||||
\subsection{main\-Client.cpp File Reference}
|
||||
\label{mainClient_8cpp}\index{mainClient.cpp@{mainClient.cpp}}
|
||||
}
|
||||
{\tt \#include $<$iostream$>$}\par
|
||||
{\tt \#include \char`\"{}sls\-Detector\-Users.h\char`\"{}}\par
|
||||
{\tt \#include \char`\"{}detector\-Data.h\char`\"{}}\par
|
||||
\subsubsection*{Functions}
|
||||
\begin{CompactItemize}
|
||||
\item
|
||||
int \hyperlink{mainClient_8cpp_21ef7438e7f0ed24a190513fb8e6af8a}{data\-Callback} (\hyperlink{classdetectorData}{detector\-Data} $\ast$p\-Data, int iframe, void $\ast$p\-Arg)
|
||||
\item
|
||||
int \hyperlink{mainClient_8cpp_0ddf1224851353fc92bfbff6f499fa97}{main} (int argc, char $\ast$argv\mbox{[}$\,$\mbox{]})
|
||||
\end{CompactItemize}
|
||||
|
||||
|
||||
\subsubsection{Detailed Description}
|
||||
This file is an example of how to implement the \hyperlink{classslsDetectorUsers}{sls\-Detector\-Users} class You can compile it linking it to the sls\-Detector library
|
||||
|
||||
gcc \hyperlink{mainClient_8cpp}{main\-Client.cpp} -L lib -l Sls\-Detector -lm -lpthread
|
||||
|
||||
where lib is the location of lib\-Sls\-Detector.so
|
||||
|
||||
Definition in file \hyperlink{mainClient_8cpp-source}{main\-Client.cpp}.
|
||||
|
||||
\subsubsection{Function Documentation}
|
||||
\hypertarget{mainClient_8cpp_21ef7438e7f0ed24a190513fb8e6af8a}{
|
||||
\index{mainClient.cpp@{main\-Client.cpp}!dataCallback@{dataCallback}}
|
||||
\index{dataCallback@{dataCallback}!mainClient.cpp@{main\-Client.cpp}}
|
||||
\paragraph[dataCallback]{\setlength{\rightskip}{0pt plus 5cm}int data\-Callback (\hyperlink{classdetectorData}{detector\-Data} $\ast$ {\em p\-Data}, int {\em iframe}, void $\ast$ {\em p\-Arg})}\hfill}
|
||||
\label{mainClient_8cpp_21ef7438e7f0ed24a190513fb8e6af8a}
|
||||
|
||||
|
||||
Definition of the data callback which simply prints out the number of points received and teh frame number
|
||||
|
||||
Definition at line 19 of file main\-Client.cpp.
|
||||
|
||||
References detector\-Data::npoints, and detector\-Data::npy.
|
||||
|
||||
Referenced by main().\hypertarget{mainClient_8cpp_0ddf1224851353fc92bfbff6f499fa97}{
|
||||
\index{mainClient.cpp@{main\-Client.cpp}!main@{main}}
|
||||
\index{main@{main}!mainClient.cpp@{main\-Client.cpp}}
|
||||
\paragraph[main]{\setlength{\rightskip}{0pt plus 5cm}int main (int {\em argc}, char $\ast$ {\em argv}\mbox{[}$\,$\mbox{]})}\hfill}
|
||||
\label{mainClient_8cpp_0ddf1224851353fc92bfbff6f499fa97}
|
||||
|
||||
|
||||
example of a main program using the \hyperlink{classslsDetectorUsers}{sls\-Detector\-Users} class
|
||||
|
||||
if specified, argv\mbox{[}2\mbox{]} is used as detector ID (default is 0)
|
||||
|
||||
\hyperlink{classslsDetectorUsers}{sls\-Detector\-Users} is instantiated
|
||||
|
||||
if specified, argv\mbox{[}1\mbox{]} is used as detector config file (necessary at least the first time it is called to properly configure advanced settings in the shared memory)
|
||||
|
||||
Setting the detector online (should be by default
|
||||
|
||||
Load setup file if argv\mbox{[}2\mbox{]} specified
|
||||
|
||||
defining the detector size
|
||||
|
||||
registering data callback
|
||||
|
||||
checking detector status and exiting if not idle
|
||||
|
||||
checking and setting detector settings
|
||||
|
||||
Settings exposure time to 10ms
|
||||
|
||||
Settings exposure time to 100ms
|
||||
|
||||
Settingsnumber of frames to 30
|
||||
|
||||
start measurement
|
||||
|
||||
returning when acquisition is finished or data are avilable
|
||||
|
||||
Definition at line 26 of file main\-Client.cpp.
|
||||
|
||||
References data\-Callback(), sls\-Detector\-Users::get\-Command(), sls\-Detector\-Users::get\-Detector\-Developer(), sls\-Detector\-Users::get\-Detector\-Settings(), sls\-Detector\-Users::get\-Detector\-Size(), sls\-Detector\-Users::get\-Detector\-Status(), sls\-Detector\-Users::read\-Configuration\-File(), sls\-Detector\-Users::register\-Data\-Callback(), sls\-Detector\-Users::retrieve\-Detector\-Setup(), sls\-Detector\-Users::run\-Status\-Type(), sls\-Detector\-Users::set\-Detector\-Size(), sls\-Detector\-Users::set\-Exposure\-Period(), sls\-Detector\-Users::set\-Exposure\-Time(), sls\-Detector\-Users::set\-Number\-Of\-Frames(), sls\-Detector\-Users::set\-Online(), sls\-Detector\-Users::set\-Settings(), and sls\-Detector\-Users::start\-Measurement().
|
@ -0,0 +1,35 @@
|
||||
\hypertarget{mainReceiver_8cpp}{
|
||||
\subsection{main\-Receiver.cpp File Reference}
|
||||
\label{mainReceiver_8cpp}\index{mainReceiver.cpp@{mainReceiver.cpp}}
|
||||
}
|
||||
{\tt \#include \char`\"{}sls\-Receiver\-Users.h\char`\"{}}\par
|
||||
{\tt \#include $<$iostream$>$}\par
|
||||
\subsubsection*{Functions}
|
||||
\begin{CompactItemize}
|
||||
\item
|
||||
int \hyperlink{mainReceiver_8cpp_0ddf1224851353fc92bfbff6f499fa97}{main} (int argc, char $\ast$argv\mbox{[}$\,$\mbox{]})
|
||||
\end{CompactItemize}
|
||||
|
||||
|
||||
\subsubsection{Detailed Description}
|
||||
This file is an example of how to implement the \hyperlink{classslsDetectorUsers}{sls\-Detector\-Users} class You can compile it linking it to the sls\-Detector library
|
||||
|
||||
gcc \hyperlink{mainReceiver_8cpp}{main\-Receiver.cpp} -L lib -l Sls\-Detector -lm -lpthread
|
||||
|
||||
where lib is the location of lib\-Sls\-Detector.so
|
||||
|
||||
Definition in file \hyperlink{mainReceiver_8cpp-source}{main\-Receiver.cpp}.
|
||||
|
||||
\subsubsection{Function Documentation}
|
||||
\hypertarget{mainReceiver_8cpp_0ddf1224851353fc92bfbff6f499fa97}{
|
||||
\index{mainReceiver.cpp@{main\-Receiver.cpp}!main@{main}}
|
||||
\index{main@{main}!mainReceiver.cpp@{main\-Receiver.cpp}}
|
||||
\paragraph[main]{\setlength{\rightskip}{0pt plus 5cm}int main (int {\em argc}, char $\ast$ {\em argv}\mbox{[}$\,$\mbox{]})}\hfill}
|
||||
\label{mainReceiver_8cpp_0ddf1224851353fc92bfbff6f499fa97}
|
||||
|
||||
|
||||
|
||||
|
||||
Definition at line 25 of file main\-Receiver.cpp.
|
||||
|
||||
References sls\-Receiver\-Users::start(), and sls\-Receiver\-Users::stop().
|
@ -0,0 +1,4 @@
|
||||
\subsection{Namespace List}
|
||||
Here is a list of all namespaces with brief descriptions:\begin{CompactList}
|
||||
\item\contentsline{section}{\hyperlink{namespacestd}{std} }{\pageref{namespacestd}}{}
|
||||
\end{CompactList}
|
@ -0,0 +1,6 @@
|
||||
\hypertarget{namespacestd}{
|
||||
\subsection{std Namespace Reference}
|
||||
\label{namespacestd}\index{std@{std}}
|
||||
}
|
||||
|
||||
|
57
manual/manual-api/slsDetectorUsersDocs/latex/refman.tex
Normal file
57
manual/manual-api/slsDetectorUsersDocs/latex/refman.tex
Normal file
@ -0,0 +1,57 @@
|
||||
\documentclass[a4paper]{article}
|
||||
\usepackage{makeidx}
|
||||
\usepackage{fancyhdr}
|
||||
\usepackage{graphicx}
|
||||
\usepackage{multicol}
|
||||
\usepackage{float}
|
||||
\usepackage{textcomp}
|
||||
\usepackage{alltt}
|
||||
\usepackage{times}
|
||||
\ifx\pdfoutput\undefined
|
||||
\usepackage[ps2pdf,
|
||||
pagebackref=true,
|
||||
colorlinks=true,
|
||||
linkcolor=blue
|
||||
]{hyperref}
|
||||
\usepackage{pspicture}
|
||||
\else
|
||||
\usepackage[pdftex,
|
||||
pagebackref=true,
|
||||
colorlinks=true,
|
||||
linkcolor=blue
|
||||
]{hyperref}
|
||||
\fi
|
||||
\usepackage{doxygen}
|
||||
\makeindex
|
||||
\setcounter{tocdepth}{1}
|
||||
\renewcommand{\footrulewidth}{0.4pt}
|
||||
\begin{document}
|
||||
\begin{titlepage}
|
||||
\vspace*{7cm}
|
||||
\begin{center}
|
||||
{\Large Reference Manual}\\
|
||||
\vspace*{1cm}
|
||||
{\large Generated by Doxygen 1.4.7}\\
|
||||
\vspace*{0.5cm}
|
||||
{\small Mon May 26 17:07:05 2014}\\
|
||||
\end{center}
|
||||
\end{titlepage}
|
||||
\pagenumbering{roman}
|
||||
\tableofcontents
|
||||
\pagenumbering{arabic}
|
||||
\section{Main Page}
|
||||
\label{index}\hypertarget{index}{}\input{index}
|
||||
\section{Namespace Documentation}
|
||||
\input{namespacestd}
|
||||
\section{Class Documentation}
|
||||
\input{classdetectorData}
|
||||
\input{classslsDetectorUsers}
|
||||
\input{classslsReceiverUsers}
|
||||
\section{File Documentation}
|
||||
\input{detectorData_8h}
|
||||
\input{mainClient_8cpp}
|
||||
\input{mainReceiver_8cpp}
|
||||
\input{slsDetectorUsers_8h}
|
||||
\input{slsReceiverUsers_8h}
|
||||
\printindex
|
||||
\end{document}
|
@ -0,0 +1,16 @@
|
||||
\hypertarget{slsDetectorUsers_8h}{
|
||||
\subsection{sls\-Detector\-Users.h File Reference}
|
||||
\label{slsDetectorUsers_8h}\index{slsDetectorUsers.h@{slsDetectorUsers.h}}
|
||||
}
|
||||
{\tt \#include $<$stdint.h$>$}\par
|
||||
{\tt \#include $<$string$>$}\par
|
||||
\subsubsection*{Namespaces}
|
||||
\begin{CompactItemize}
|
||||
\item
|
||||
namespace \hyperlink{namespacestd}{std}
|
||||
\end{CompactItemize}
|
||||
\subsubsection*{Classes}
|
||||
\begin{CompactItemize}
|
||||
\item
|
||||
class \hyperlink{classslsDetectorUsers}{sls\-Detector\-Users}
|
||||
\begin{CompactList}\small\item\em Class for detector functionalitiesto embed the detector controls in the users custom interface e.g. EPICS, Lima etc. \item\end{CompactList}\end{CompactItemize}
|
@ -0,0 +1,11 @@
|
||||
\hypertarget{slsReceiverUsers_8h}{
|
||||
\subsection{sls\-Receiver\-Users.h File Reference}
|
||||
\label{slsReceiverUsers_8h}\index{slsReceiverUsers.h@{slsReceiverUsers.h}}
|
||||
}
|
||||
{\tt \#include $<$stdio.h$>$}\par
|
||||
{\tt \#include $<$stdint.h$>$}\par
|
||||
\subsubsection*{Classes}
|
||||
\begin{CompactItemize}
|
||||
\item
|
||||
class \hyperlink{classslsReceiverUsers}{sls\-Receiver\-Users}
|
||||
\begin{CompactList}\small\item\em Class for implementing the SLS data receiver in the users application. Callbacks can be defined for processing and/or saving data. \item\end{CompactList}\end{CompactItemize}
|
Reference in New Issue
Block a user