Moved doc into trunk
authorFlorian Pose <fp@igh-essen.com>
Mon, 25 Sep 2006 15:53:33 +0000
changeset 369 7920ca086e5c
parent 368 5526520f323f
child 370 148155bb9abc
Moved doc into trunk
doc/Makefile
doc/ethercat_doc.tex
doc/images/ethercat.eps
doc/images/ethercat.pdf
doc/images/fmmus.eps
doc/images/fmmus.fig
doc/images/fmmus.pdf
doc/images/fsm-change.eps
doc/images/fsm-change.fig
doc/images/fsm-change.pdf
doc/images/fsm-coedown.eps
doc/images/fsm-coedown.fig
doc/images/fsm-coedown.pdf
doc/images/fsm-eoe.eps
doc/images/fsm-eoe.fig
doc/images/fsm-eoe.pdf
doc/images/fsm-idle.eps
doc/images/fsm-idle.fig
doc/images/fsm-idle.pdf
doc/images/fsm-op.eps
doc/images/fsm-op.fig
doc/images/fsm-op.pdf
doc/images/fsm-sii.eps
doc/images/fsm-sii.fig
doc/images/fsm-sii.pdf
doc/images/fsm-slaveconf.eps
doc/images/fsm-slaveconf.fig
doc/images/fsm-slaveconf.pdf
doc/images/fsm-slavescan.eps
doc/images/fsm-slavescan.fig
doc/images/fsm-slavescan.pdf
doc/images/ighsign.eps
doc/images/ighsign.pdf
doc/images/interrupt.eps
doc/images/interrupt.fig
doc/images/interrupt.pdf
doc/images/master-locks.eps
doc/images/master-locks.fig
doc/images/master-locks.pdf
doc/images/masterarch.eps
doc/images/masterarch.fig
doc/images/masterarch.pdf
doc/images/masters.eps
doc/images/masters.fig
doc/images/masters.pdf
doc/images/modes.eps
doc/images/modes.fig
doc/images/modes.pdf
doc/images/statetrans.eps
doc/images/statetrans.fig
doc/images/statetrans.pdf
doc/images/uml-all.eps
doc/images/uml-all.fig
doc/images/uml-all.pdf
doc/images/uml-datagram.eps
doc/images/uml-datagram.fig
doc/images/uml-datagram.pdf
doc/images/uml-debug.eps
doc/images/uml-debug.fig
doc/images/uml-debug.pdf
doc/images/uml-device.eps
doc/images/uml-device.fig
doc/images/uml-device.pdf
doc/images/uml-domain.eps
doc/images/uml-domain.fig
doc/images/uml-domain.pdf
doc/images/uml-eoe.eps
doc/images/uml-eoe.fig
doc/images/uml-eoe.pdf
doc/images/uml-fsm.eps
doc/images/uml-fsm.fig
doc/images/uml-fsm.pdf
doc/images/uml-master.eps
doc/images/uml-master.fig
doc/images/uml-master.pdf
doc/images/uml-slave.eps
doc/images/uml-slave.fig
doc/images/uml-slave.pdf
doc/svn.sty
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/Makefile	Mon Sep 25 15:53:33 2006 +0000
@@ -0,0 +1,107 @@
+#------------------------------------------------------------------------------
+#
+#  LaTeX Makefile
+#
+#  $Id$
+#
+#------------------------------------------------------------------------------
+
+FILE := ethercat_doc
+
+DVI_DEPEND := images/*.eps
+PDF_DEPEND := images/*.pdf
+
+LATEX_OPTIONS := -file-line-error-style
+
+LATEX_CMD := latex $(LATEX_OPTIONS) \\nonstopmode\\input{$(FILE).tex}
+PDFLATEX_CMD := pdflatex $(LATEX_OPTIONS) $(FILE)
+
+#------------------------------------------------------------------------------
+
+dvi: $(FILE).dvi
+
+pdf: $(FILE).pdf
+
+all: dvi pdf
+
+$(FILE).dvi: $(FILE).tex $(DVI_DEPEND)
+	@if [ ! -f $(FILE).toc ]; then touch $(FILE).toc; fi
+	@if [ ! -f $(FILE).idx ]; then touch $(FILE).idx; fi
+	@if [ ! -f $(FILE).glo ]; then touch $(FILE).glo; fi
+	@cp $(FILE).toc $(FILE).toc.bak
+	@cp $(FILE).idx $(FILE).idx.bak
+	@cp $(FILE).glo $(FILE).glo.bak
+	$(LATEX_CMD)
+	@count=5; \
+	while (grep -s 'cross-references' $(FILE).log || \
+		! diff -q $(FILE).toc $(FILE).toc.bak) && \
+		[ $$count -gt 0 ]; \
+	do \
+		cp $(FILE).toc $(FILE).toc.bak; \
+		$(LATEX_CMD); \
+		count=`expr $$count - 1`; \
+	done
+	@rerunlatex=0
+	@if ! diff -q $(FILE).idx $(FILE).idx.bak; then \
+		echo "Rebuilding Index"; \
+		makeindex $(FILE); \
+		rerunlatex=1; \
+	fi
+	@if ! diff -q $(FILE).glo $(FILE).glo.bak; then \
+		echo "Rebuilding Glossary"; \
+		makeindex $(FILE).glo -s nomencl.ist -o $(FILE).gls; \
+		rerunlatex=1; \
+	fi
+	@if [ ! $$rerunlatex ]; then \
+		echo "Re-running LaTeX..."; \
+		$(LATEX_CMD); \
+	fi
+	@rm -f $(FILE).toc.bak
+	@rm -f $(FILE).idx.bak
+	@rm -f $(FILE).glo.bak
+
+$(FILE).pdf: $(FILE).tex $(PDF_DEPEND)
+	@if [ ! -f $(FILE).toc ]; then touch $(FILE).toc; fi
+	@if [ ! -f $(FILE).idx ]; then touch $(FILE).idx; fi
+	@if [ ! -f $(FILE).glo ]; then touch $(FILE).glo; fi
+	@cp $(FILE).toc $(FILE).toc.bak
+	@cp $(FILE).idx $(FILE).idx.bak
+	@cp $(FILE).glo $(FILE).glo.bak
+	$(PDFLATEX_CMD)
+	@count=5; \
+	while (grep -s 'cross-references' $(FILE).log || \
+		! diff -q $(FILE).toc $(FILE).toc.bak) && \
+		[ $$count -gt 0 ]; \
+	do \
+		cp $(FILE).toc $(FILE).toc.bak; \
+		$(PDFLATEX_CMD); \
+		count=`expr $$count - 1`; \
+	done
+	@rerunlatex=0
+	@if ! diff -q $(FILE).idx $(FILE).idx.bak; then \
+		echo "Rebuilding Index"; \
+		makeindex $(FILE); \
+		rerunlatex=1; \
+	fi
+	@if ! diff -q $(FILE).glo $(FILE).glo.bak; then \
+		echo "Rebuilding Glossary"; \
+		makeindex $(FILE).glo -s nomencl.ist -o $(FILE).gls; \
+		rerunlatex=1; \
+	fi
+	@if [ ! $$rerunlatex ]; then \
+		echo "Re-running LaTeX..."; \
+		$(PDFLATEX_CMD); \
+	fi
+	@rm -f $(FILE).toc.bak
+	@rm -f $(FILE).idx.bak
+	@rm -f $(FILE).glo.bak
+
+clean:
+	@rm -f $(FILE).aux $(FILE).dvi $(FILE).idx \
+			$(FILE).ilg $(FILE).ind $(FILE).log \
+			$(FILE).out $(FILE).pdf $(FILE).ps \
+			$(FILE).toc $(FILE).lot $(FILE).lof \
+			$(FILE).lol $(FILE).glo $(FILE).gls \
+			images/*.bak *~
+
+#------------------------------------------------------------------------------
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/ethercat_doc.tex	Mon Sep 25 15:53:33 2006 +0000
@@ -0,0 +1,5037 @@
+%------------------------------------------------------------------------------
+%
+%  IgH EtherCAT Master Documentation
+%
+%  $Id$
+%
+%------------------------------------------------------------------------------
+
+\documentclass[a4paper,12pt,BCOR6mm,bibtotoc,idxtotoc]{scrbook}
+
+\usepackage[latin1]{inputenc}
+\usepackage[automark,headsepline]{scrpage2}
+\usepackage{graphicx}
+\usepackage{makeidx}
+\usepackage[refpage]{nomencl}
+\usepackage{listings}
+\usepackage{svn}
+\usepackage{textcomp}
+\usepackage{url}
+\usepackage{hyperref}
+
+\setlength{\parskip}{0.8ex plus 0.8ex minus 0.5ex}
+\setlength{\parindent}{0mm}
+
+\setcounter{secnumdepth}{\subsubsectionlevel}
+
+\DeclareFontShape{OT1}{cmtt}{bx}{n}
+{
+  <5><6><7><8><9><10><10.95><12><14.4><17.28><20.74><24.88>cmttb10
+}{}
+
+\lstset{basicstyle=\ttfamily\small,numberstyle=\tiny,aboveskip=4mm,
+  belowskip=2mm,gobble=2,escapechar=`}
+\renewcommand\lstlistlistingname{List of Listings}
+
+\renewcommand\nomname{Glossary}
+
+\newcommand{\IgH}{\raisebox{-0.7667ex}
+  {\includegraphics[height=2.2ex]{images/ighsign}}}
+
+\SVN $Date$
+\SVN $Revision$
+
+\makeindex
+\makeglossary
+
+%------------------------------------------------------------------------------
+
+\begin{document}
+
+\pagenumbering{roman}
+\pagestyle{empty}
+
+\begin{titlepage}
+  \begin{center}
+    \rule{\textwidth}{1.5mm}
+
+    {\Huge\bf IgH \includegraphics[height=2.4ex]{images/ethercat}
+      Master 1.1\\[1ex]
+      Documentation}
+
+    \vspace{1ex}
+    \rule{\textwidth}{1.5mm}
+
+    \vspace{\fill}
+    {\Large Florian Pose, \url{fp@igh-essen.com}\\[1ex]
+      Ingenieurgemeinschaft \IgH}
+
+    \vspace{\fill}
+    {\Large Essen, \SVNDate\\[1ex]
+      Revision \SVNRevision}
+  \end{center}
+\end{titlepage}
+
+%------------------------------------------------------------------------------
+
+\tableofcontents
+\listoftables
+\listoffigures
+\lstlistoflistings
+
+%------------------------------------------------------------------------------
+
+\newpage
+\pagestyle{scrheadings}
+
+\section*{Conventions}
+\addcontentsline{toc}{section}{Conventions}
+\markleft{Conventions}
+
+The following typographic conventions are used:
+
+\begin{itemize}
+\item \textit{Italic face} is used for newly introduced terms, file
+  names, parameter names and in-text source code elements.
+\item \texttt{Typewriter face} is used for code examples and
+  command line output.
+\item \texttt{\textbf{Bold typewriter face}} is used for user input in
+  command lines.
+\end{itemize}
+
+Data values and addresses are specified as hexadecimal values with the
+prefix 0x. Example: 0x88A4. Unless otherwise noted, address values are
+specified as byte addresses.
+
+Concerning bit operations, the phrase ``setting a bit'', stands for
+setting the bit to $1$, ``clearing a bit'' means setting it to $0$,
+respectively.
+
+Function names are always printed with parentheses, but without
+parameters. So, if a function \textit{ecrt\_request\_master()} has
+empty parentheses, this does not mean, that it has no parameters.
+
+If shell commands have to be entered, this is marked by a prompt:
+
+\begin{lstlisting}[gobble=2]
+  host>
+\end{lstlisting}
+
+Further, if a shell command has to be entered as the superuser, the
+prompt ends with a mesh:
+
+\begin{lstlisting}[gobble=2]
+  host#
+\end{lstlisting}
+
+%------------------------------------------------------------------------------
+
+\chapter{The IgH EtherCAT Master}
+\label{chapter:master}
+\pagenumbering{arabic}
+
+This section will first introduce the master's general features and
+the concepts used for master development and will then explain the
+master's general architecture and offer details of the different
+modules. In addition, it will cover state machine definitions, mailbox
+protocol implementation and the user space interface. The last section
+will deal with timing aspects.
+
+%------------------------------------------------------------------------------
+
+\section{Feature Summary}
+\label{sec:summary}
+\index{Master!Features}
+
+The list below gives a short summary of the features of the
+implemented EtherCAT master.
+
+\begin{itemize}
+\item The master runs as a kernel module for Linux 2.6.
+\item It comes with EtherCAT-capable network driver for RealTek
+  RTL8139 (and compatible) network interface cards.
+  \begin{itemize}
+  \item The Ethernet hardware is operated without interrupts.
+  \item Drivers for additional Ethernet hardware can easily be
+    implemented due to a common device interface provided by the
+    master.
+  \end{itemize}
+\item The master module supports multiple EtherCAT masters on one
+  machine.
+\item The master code supports any Linux realtime extension through
+  its independent architecture.
+  \begin{itemize}
+  \item RTAI\nomenclature{RTAI}{RealTime Application Interface},
+    ADEOS\nomenclature{ADEOS}{Adaptive Domain Environment for
+      Operating Systems}, etc.
+  \item It runs well even without realtime extensions.
+  \end{itemize}
+\item Common ``realtime interface'' for modules, that want to use
+  EtherCAT functionality.
+  \begin{itemize}
+  \item Synchronous and asynchronous sending and receiving of frames
+    is supported.
+  \item Avoidance of unnecessary copy operations for process data.
+  \end{itemize}
+\item \textit{Domains} are introduced, to allow grouping of process
+  data objects.
+  \begin{itemize}
+  \item Handling of multiple domains with different sampling rates.
+  \item Automatic calculation of process data mapping, FMMU and sync manager
+    configuration within each domain.
+  \end{itemize}
+\item Communication through serveral finite state machines.
+  \begin{itemize}
+  \item Bus monitoring possible during realtime operation.
+  \item Automatic reconfiguration of slaves on bus power failure
+    during realtime operation.
+  \item Controlling of single slaves during realtime operation.
+  \end{itemize}
+\item Master idle mode.
+  \begin{itemize}
+  \item Automatic scanning of slaves upon topology changes.
+  \item Bus visualisation and EoE processing without a realtime module
+    connected.
+  \end{itemize}
+\item Implementation of the CANopen-over-EtherCAT (CoE) protocol.
+  \begin{itemize}
+  \item Configuration of CoE-capable slaves via SDO interface.
+  \end{itemize}
+\item Implementation of the Ethernet-over-EtherCAT (EoE) protocol.
+  \begin{itemize}
+  \item Each master creates virtual network devices that are
+    automatically coupled to EoE-cap\-able slaves found.
+  \item This implementation natively supports either a switched or a
+    routed EoE network architecture.
+  \end{itemize}
+\item User space interface via the System Filesystem
+  (Sysfs)\nomenclature{Sysfs}{System Filesystem}.
+  \begin{itemize}
+  \item User space tool for bus visualisation.
+  \item Slave E$^2$PROM image reading and writing.
+  \end{itemize}
+\item Seamless system integration though LSB\nomenclature{LSB}{Linux
+    Standard Base} compliance.
+  \begin{itemize}
+  \item Master and network device configuration via Sysconfig files.
+  \item Linux Standard Base compatible init script for master control.
+  \end{itemize}
+\item Virtual read-only network interface for monitoring and debugging
+  purposes.
+\end{itemize}
+
+%------------------------------------------------------------------------------
+
+\section{License}
+\label{sec:license}
+
+The master code is released under the terms and conditions of the GNU
+General Public License\index{GPL} \cite{gpl} (version 2). Other
+developers, that want to use EtherCAT with Linux systems, are invited
+to use the master code or even participate on development.
+
+%------------------------------------------------------------------------------
+
+\section{General Master Architecture}
+\label{sec:masterarch}
+\index{Master!Architecture}
+
+The EtherCAT master is integrated into the Linux 2.6 kernel. This was
+an early design decision, which has been made for serveral reasons:
+
+\begin{itemize}
+\item Kernel code has significantly better realtime characteristics,
+  i.~e. less jitter than user space code. It was foreseeable, that a
+  fieldbus master has a lot of cyclic work to do. Cyclic work is
+  usually triggered by timer interrupts inside the kernel. The
+  execution delay of a function that processes timer interrupts is
+  less, when it resides in kernel space, because there is no need of
+  time-consuming context switches to a user space process.
+\item It was also foreseeable, that the master code has to directly
+  communicate with the Ethernet hardware. This has to be done in the
+  kernel anyway (through network device drivers), which is one more
+  reason for the master code being in kernel space.
+\end{itemize}
+
+A general overview of the master architecture can be seen in
+figure~\ref{fig:masterarch}.
+
+\begin{figure}[htbp]
+  \centering
+  \includegraphics[width=.9\textwidth]{images/masterarch}
+  \caption{Master architecture}
+  \label{fig:masterarch}
+\end{figure}
+
+\paragraph{Master Module}
+\index{Master module}
+
+The EtherCAT master mainly consists of the master module, containing
+one or more EtherCAT masters (section~\ref{sec:mastermod}), the
+``Device Interface'' (section~\ref{sec:ecdev}) and the ``Realtime
+Interface'' (section~\ref{sec:ecrt}).
+
+\paragraph{Device Modules}
+\index{Device modules}
+
+Furthermore there are EtherCAT-capable network device driver
+modules\index{Device modules}, that connect to the EtherCAT master via
+the device interface. These modified network drivers can handle both
+network devices used for EtherCAT operation and ``normal'' Ethernet
+devices. The common case is, that the master module offers a single
+EtherCAT master: An EtherCAT-capable network device driver module
+connects one network device to this master, that is now able to send
+and receive EtherCAT frames, while all other network devices handled
+by the network driver get connected to the kernel's network stack as
+usual.
+
+\paragraph{Realtime Modules}
+
+A ``realtime module''\index{Realtime module} is a kernel module, that
+uses the EtherCAT master for cyclic exchange of process data with
+EtherCAT slaves. Realtime modules are not part of the EtherCAT master
+code\footnote{Although there are serveral examples provided in the
+  \textit{examples} directory, see chapter~\ref{chapter:usage} for
+  more information}, so anybody wanting to use the master has to write
+one. A realtime module can ``request'' a master through the realtime
+interface. If this succeeds, the module has the control over the
+master. It can now configure slaves and set up a process data image
+(see section~\ref{sec:processdata}) for cyclic exchange. This cyclic
+code has to be provided by the realtime module, so it is in hands of
+the developer, which mechanism to use for this. Moreover he has to
+decide, whether or not using a Linux realtime extension.
+
+\paragraph{Why ``Realtime'' Module?}
+
+The name shall not imply, that a linux realtime extension is
+mandatory: The master runs well even without realtime extensions, as
+section~\ref{sec:mini} shows. However, the code using the master is
+time-critical, because process data IO has to be done in cyclic work.
+Some EtherCAT slaves support watchdog units, that stop driving the
+outputs when process data was not exchanged for some time. So the
+names ``realtime interface'' and ``realtime module'' are quite
+appropriate.
+
+%------------------------------------------------------------------------------
+
+\subsection{Handling of Process Data}
+\label{sec:processdata}
+
+\paragraph{Process Data Image}
+\index{Process data}
+
+The slaves offer their inputs and outputs by presenting the master
+so-called ``Process Data Objects'' (PDOs\index{PDO}). The available
+PDOs can be determined by reading out the slave's TXPDO and RXPDO
+E$^2$PROM categories. The realtime module can register the PDOs for
+data exchange during cyclic operation. The sum of all registered PDOs
+defines the ``process data image'', which is exchanged via the
+``Logical ReadWrite'' datagrams introduced
+in~\cite[section~5.4.2.4]{dlspec}.
+
+\paragraph{Process Data Domains}
+\index{Domain}
+
+The process data image can be easily managed by creating co-called
+``domains'', which group PDOs and allocate the datagrams needed to
+exchange them. Domains are mandatory for process data exchange, so
+there has to be at least one. They were introduced for the following
+reasons:
+
+\begin{itemize}
+\item The maximum size of a ``Logical ReadWrite'' datagram is limited
+  due to the limited size of an Ethernet frame: The maximum data size
+  is the Ethernet data field size minus the EtherCAT frame header,
+  EtherCAT datagram header and EtherCAT datagram footer: $1500 - 2 -
+  12 - 2 = 1484$ octets. If the size of the process data image exceeds
+  this limit, multiple frames have to be sent, and the image has to be
+  partitioned for the use of multiple datagrams. A domain manages this
+  automatically.
+\item Not every PDO has to be exchanged with the same frequency: The
+  values of PDOs can vary slowly over time (for example temperature
+  values), so exchanging them with a high frequency would just waste
+  bus bandwidth. For this reason, multiple domains can be created, to
+  group different PDOs and so allow separate exchange.
+\end{itemize}
+
+There is no upper limit for the number of domains, but each domain
+occupies one FMMU in each slave involved, so the maximum number of
+domains is also limited by the slaves' capabilities.
+
+\paragraph{FMMU Configuration}
+\index{FMMU!Configuration}
+
+A realtime module can register PDOs for process data exchange. Every
+PDO is part of a memory area in the slave's physical memory, that is
+protected by a sync manager \cite[section~6.7]{dlspec} for
+synchronized access. In order to make a sync manager react on a
+datagram accessing its memory, it is necessary to access the last byte
+covered by the sync manager. Otherwise the sync manager will not react
+on the datagram and no data will be exchanged. That is why the whole
+synchronized memory area has to be included into the process data
+image: For example, if a certain PDO of a slave is registered for
+exchange with a certain domain, one FMMU will be configured to map the
+complete sync-manager-protected memory, the PDO resides in. If a
+second PDO of the same slave is registered for process data exchange
+within the same domain, and this PDO resides in the same
+sync-manager-protected memory as the first PDO, the FMMU configuration
+is not touched, because the appropriate memory is already part of the
+domain's process data image.  If the second PDO belongs to another
+sync-manager-protected area, this complete area is also included into
+the domains process data image. See figure~\ref{fig:fmmus} for an
+overview, how FMMU's are configured to map physical memory to logical
+process data images.
+
+\begin{figure}[htbp]
+  \centering
+  \includegraphics[width=\textwidth]{images/fmmus}
+  \caption{FMMU configuration for serveral domains}
+  \label{fig:fmmus}
+\end{figure}
+
+\paragraph{Process Data Pointers}
+
+The figure also demonstrates the way, the realtime module can access the
+exchanged process data: At PDO registration, the realtime module has
+to provide the address of a process data pointer. Upon calculation of
+the domain image and allocation of process data memory, this pointer
+is redirected to the appropriate location inside the domain's process
+data memory and can later be easily dereferenced by the module code.
+
+%------------------------------------------------------------------------------
+
+\subsection{Operation Modes}
+\index{Master modes}
+
+The EtherCAT master has serveral modes of operation:
+
+\begin{description}
+\item[Orphaned Mode] This mode takes effect, when the master has no
+  EtherCAT-capable network device connected. No bus communication is
+  possible, so this mode is not of further interest.
+\item[Idle Mode]\index{Idle mode} takes effect when the master is
+  unused (i.~e. there is no realtime module, that reserved the
+  master). In this case, the master has the ability to scan the bus by
+  itsself and generously allow bus access from user space.  This mode
+  is meant for maintenance and visualisation.
+\item[Operation Mode]\index{Operation mode} The master is reserved for
+  exclusive access by a realtime module. In this mode, the master is
+  adjusted for availability and monitoring. Access from user space is
+  very restrictive and mostly limited to reading direction.
+
+\end{description}
+
+Figure~\ref{fig:modes} shows the three modes and the possible mode
+transitions.
+
+\begin{figure}[htbp]
+  \centering
+  \includegraphics[width=.9\textwidth]{images/modes}
+  \caption{Master modes and transitions}
+  \label{fig:modes}
+\end{figure}
+
+\subsubsection{Idle Mode}
+\index{Idle mode}
+
+The master enters idle mode upon connection of a device module (see
+section~\ref{sec:device}) or releasing by a realtime module. The
+master owns a kernel workqueue and a suitable work structure, which is
+used to cyclically process the ``Idle state machine'' (see
+section~\ref{sec:fsm-idle}). This state machine automatically scans
+the bus for slaves (and re-scans upon topology changes), configures
+slaves for idle operation and executes pending operations from the
+user space interface (for example E$^2$PROM writing). On device
+disconnection or realtime request, the idle mode is stopped by
+cancelling the work and flushing the workqueue.
+
+\subsubsection{Operation Mode}
+\index{Operation mode}
+
+Operation mode is entered when a realtime module requests the master.
+The idle mode is stopped and the bus is scanned by getting the number
+of slaves and executing the ``Slave scan state machine'' (see
+section~\ref{sec:fsm-scan}) for each slave. The master is now ready to
+create domains and accept PDO registrations and slave configurations.
+After that, cyclic communication can be done by the realtime module.
+
+\paragraph{Master Phases}
+
+Every realtime module should use the master in three phases:
+
+\begin{enumerate}
+\item \textit{Startup} - The master is requested and the bus is
+  validated. Domains are created and PDOs are registered. Slave
+  configurations are applied.
+\item \textit{Operation} - Cyclic code is run, process data is
+  exchanged and the master state machine is executed.
+\item \textit{Shutdown} - Cyclic code is stopped and the master
+  is released.
+\end{enumerate}
+
+%------------------------------------------------------------------------------
+
+\section{Device Modules}
+\label{sec:device}
+\index{Device modules}
+
+Device modules are network device driver modules that handle Ethernet
+devices, which the master can use to connect to an EtherCAT bus.
+
+Section~\ref{sec:networkdrivers} offers an overview of general Linux
+network driver modules, while section~\ref{sec:requirements} will show
+the requirements to an EtherCAT-enabled network driver. Finally,
+sections~\ref{sec:seldev} to~\ref{sec:patching} show how to fulfill
+these requirements and implement such a driver module.
+
+%------------------------------------------------------------------------------
+
+\subsection{Network Driver Basics}
+\label{sec:networkdrivers}
+\index{Network drivers}
+
+EtherCAT relies on Ethernet hardware and the master needs a physical
+Ethernet device to communicate with the bus. Therefore it is necessary
+to understand how Linux handles network devices and their drivers,
+respectively.
+
+\paragraph{Tasks of a Network Driver}
+
+Network device drivers handle the lower two layers of the OSI model,
+that is the physical layer and the data-link layer. A network device
+itself natively handles the physical layer issues: It represents the
+hardware to connect to the medium and to send and receive data in the
+way, the physical layer protocol describes. The network device driver
+is responsible for getting data from the kernel's networking stack and
+forwarding it to the hardware, that does the physical transmission.
+If data is received by the hardware respectively, the driver is
+notified (usually by means of an interrupt) and has to read the data
+from the hardware memory and forward it to the network stack. There
+are a few more tasks, a network device driver has to handle, including
+queue control, statistics and device dependent features.
+
+\paragraph{Driver Startup}
+
+Usually, a driver searches for compatible devices on module loading.
+For PCI drivers, this is done by scanning the PCI bus and checking for
+known device IDs. If a device is found, data structures are allocated
+and the device is taken into operation.
+
+\paragraph{Interrupt Operation}
+\index{Interrupt}
+
+A network device usually provides a hardware interrupt that is used to
+notify the driver of received frames and success of transmittion, or
+errors, respectively. The driver has to register an interrupt service
+routine (ISR\index{ISR}\nomenclature{ISR}{Interrupt Service Routine}),
+that is executed each time, the hardware signals such an event. If the
+interrupt was thrown by the own device (multiple devices can share one
+hardware interrupt), the reason for the interrupt has to be determined
+by reading the device's interrupt register. For example, if the flag
+for received frames is set, frame data has to be copied from hardware
+to kernel memory and passed to the network stack.
+
+\paragraph{The net\_device structure}
+\index{net\_device}
+
+The driver registers a \textit{net\_device} structure for each device
+to communicate with the network stack and to create a ``network
+interface''. In case of an Ethernet driver, this interface appears as
+\textit{ethX}, where X is a number assigned by the kernel on
+registration. The \textit{net\_device} structure receives events
+(either from user space or from the network stack) via serveral
+callbacks, which have to be set before registration. Not every
+callback is mandatory, but for reasonable operation the ones below are
+needed in any case:
+
+\begin{description}
+\item[int (*open)(struct net\_device *)] This function is called when
+  network communication has to be started, for example after a command
+  \textit{ifconfig ethX up} from user space. Frame reception has to be
+  enabled by the driver.
+\item[int (*stop)(struct net\_device *)] The purpose of this callback
+  is to ``close'' the device, i.~e. make the hardware stop receiving
+  frames.
+\item[int (*hard\_start\_xmit)(struct sk\_buff *, struct net\_device
+  *)] This function is cal\-led for each frame that has to be
+  transmitted.  The network stack passes the frame as a pointer to an
+  \textit{sk\_buff} structure (``socket buffer''\index{Socket buffer},
+  see below), which has to be freed after sending.
+\item[struct net\_device\_stats *(*get\_stats)(struct net\_device *)]
+  This call has to return a pointer to the device's
+  \textit{net\_device\_stats} structure, which permanently has to be
+  filled with frame statistics. This means, that everytime a frame is
+  received, sent, or an error happened, the appropriate counter in
+  this structure has to be increased.
+\end{description}
+
+The actual registration is done with the \textit{register\_netdev()}
+call, unregistering is done with \textit{unregister\_netdev()}.
+
+\paragraph{The netif Interface}
+\index{netif}
+
+All other communication in the direction interface $\to$ network stack
+is done via the \textit{netif\_*} calls. For example, on successful
+device opening, the network stack has to be notified, that it can now
+pass frames to the interface. This is done by calling
+\textit{netif\_start\_queue()}. After this call, the
+\textit{hard\_start\_xmit()} callback can be called by the network
+stack. Furthermore a network driver usually manages a frame
+transmission queue. If this gets filled up, the network stack has to
+be told to stop passing further frames for a while. This happens with
+a call to \textit{netif\_stop\_queue()}. If some frames have been
+sent, and there is enough space again to queue new frames, this can be
+notified with \textit{netif\_wake\_queue()}. Another important call is
+\textit{netif\_receive\_skb()}\footnote{This function is part of the
+  NAPI (``New API''), that replaces the ``old'' kernel 2.4 technique
+  for interfacing to the network stack (with \textit{netif\_rx()}).
+  NAPI is a technique to improve network performance on Linux. Read
+  more in
+  http://www.cyberus.ca/\textasciitilde{}hadi/usenix-paper.tgz}: It
+passes a frame to the network stack, that was just received by the
+device.  Frame data has to be packed into a so-called ``socket
+buffer'' for that (see below).
+
+\paragraph{Socket Buffers}
+\index{Socket buffer}
+
+Socket buffers are the basic data type for the whole network stack.
+They serve as containers for network data and are able to quickly add
+data headers and footers, or strip them off again. Therefore a socket
+buffer consists of an allocated buffer and serveral pointers that mark
+beginning of the buffer (\textit{head}), beginning of data
+(\textit{data}), end of data (\textit{tail}) and end of buffer
+(\textit{end}). In addition, a socket buffer holds network header
+information and (in case of received data) a pointer to the
+\textit{net\_device}, it was received on. There exist functions that
+create a socket buffer (\textit{dev\_alloc\_skb()}), add data either
+from front (\textit{skb\_push()}) or back (\textit{skb\_put()}),
+remove data from front (\textit{skb\_pull()}) or back
+(\textit{skb\_trim()}), or delete the buffer (\textit{kfree\_skb()}).
+A socket buffer is passed from layer to layer, and is freed by the
+layer that uses it the last time. In case of sending, freeing has to
+be done by the network driver.
+
+%------------------------------------------------------------------------------
+
+\subsection{EtherCAT Network Drivers}
+\label{sec:requirements}
+
+There are a few requirements for Ethernet network devices to function
+as EtherCAT devices, when connected to an EtherCAT bus.
+
+\paragraph{Dedicated Interfaces}
+
+For performance and realtime purposes, the EtherCAT master needs
+direct and exclusive access to the Ethernet hardware. This implies
+that the network device must not be connected to the kernel's network
+stack as usual, because the kernel would try to use it as an ordinary
+Ethernet device.
+
+\paragraph{Interrupt-less Operation}
+\index{Interrupt}
+
+EtherCAT frames travel through the logical EtherCAT ring and are then
+sent back to the master. Communication is highly deterministic: A
+frame is sent and will be received again after a constant time.
+Therefore, there is no need to notify the driver about frame
+reception: The master can instead query the hardware for received
+frames.
+
+Figure~\ref{fig:interrupt} shows two workflows for cyclic frame
+transmittion and reception with and without interrupts.
+
+\begin{figure}[htbp]
+  \centering
+  \includegraphics[width=.8\textwidth]{images/interrupt}
+  \caption{Interrupt Operation versus Interrupt-less Operation}
+  \label{fig:interrupt}
+\end{figure}
+
+In the left workflow ``Interrupt Operation'', the data from the last
+cycle is first processed and a new frame is assembled with new
+datagrams, which is then sent.  The cyclic work is done for now.
+Later, when the frame is received again by the hardware, an interrupt
+is triggered and the ISR is executed. The ISR will fetch the frame
+data from the hardware and initiate the frame dissection: The
+datagrams will be processed, so that the data is ready for processing
+in the next cycle.
+
+In the right workflow ``Interrupt-less Operation'', there is no
+hardware interrupt enabled.  Instead, the hardware will be polled by
+the master by executing the ISR. If the frame has been received in the
+meantime, it will be dissected. The situation is now the same as at
+the beginning of the left workflow: The received data is processed and
+a new frame is assembled and sent. There is nothing to do for the rest
+of the cycle.
+
+The interrupt-less operation is desirable, because there is simply no
+need for an interrupt. Moreover hardware interrupts are not conducive
+in improving the driver's realtime behaviour: Their undeterministic
+incidences contribute to increasing the jitter. Besides, if a realtime
+extension (like RTAI) is used, some additional effort would have to be
+made to priorize interrupts.
+
+\paragraph{Ethernet and EtherCAT Devices}
+
+Another issue lies in the way Linux handles devices of the same type.
+For example, a PCI\nomenclature{PCI}{Peripheral Component
+  Interconnect, Computer Bus} driver scans the PCI bus for devices it
+can handle. Then it registers itself as the responsible driver for all
+of the devices found. The problem is, that an unmodified driver can
+not be told to ignore a device because it will be used for EtherCAT
+later. There must be a way to handle multiple devices of the same
+type, where one is reserved for EtherCAT, while the other is treated
+as an ordinary Ethernet device.
+
+For all this reasons, the author has decided that the only acceptable
+solution is to modify standard Ethernet drivers in a way that they
+keep their normal functionality, but gain the ability to treat one or
+more of the devices as EtherCAT-capable.
+
+Below are the advantages of this solution:
+
+\begin{itemize}
+\item No need to tell the standard drivers to ignore certain devices.
+\item One networking driver for EtherCAT and non-EtherCAT devices.
+\item No need to implement a network driver from scratch and running
+  into issues, the former developers already solved.
+\end{itemize}
+
+The chosen approach has the following disadvantages:
+
+\begin{itemize}
+\item The modified driver gets more complicated, as it must handle
+  EtherCAT and non-EtherCAT devices.
+\item Many additional case differentiations in the driver code.
+\item Changes and bugfixes on the standard drivers have to be ported
+  to the Ether\-CAT-capable versions from time to time.
+\end{itemize}
+
+%------------------------------------------------------------------------------
+
+\subsection{Device Selection}
+\label{sec:seldev}
+
+After loading the master module, at least one EtherCAT-capable network
+driver module has to be loaded, that connects one of its devices to
+the master. To specify an EtherCAT device and the master to connect
+to, all EtherCAT-capable network driver modules should provide two
+module parameters:
+
+\begin{description}
+\item[ec\_device\_index] PCI device index of the device that is
+  connected to the EtherCAT bus. If this parameter is left away, all
+  devices found are treated as ordinary Ethernet devices. Default:
+  $-1$
+\item[ec\_master\_index] Index of the master to connect to. Default:
+  $0$
+\end{description}
+
+The following command loads the EtherCAT-capable RTL8139 device
+driver, telling it to handle the second device as an EtherCAT device
+and connecting it to the first master:
+
+\begin{lstlisting}
+  host# `\textbf{modprobe ec\_8139too ec\_device\_index=1}`
+\end{lstlisting}
+
+Usually, this command does not have to be entered manually, but is
+called by the EtherCAT init script. See section~\ref{sec:init} for
+more information.
+
+%------------------------------------------------------------------------------
+
+\subsection{The Device Interface}
+\label{sec:ecdev}
+\index{Device interface}
+
+An anticipation to the section about the master module
+(section~\ref{sec:mastermod}) has to be made in order to understand
+the way, a network device driver module can connect a device to a
+specific EtherCAT master.
+
+The master module provides a ``device interface'' for network device
+drivers. To use this interface, a network device driver module must
+include the header
+\textit{devices/ecdev.h}\nomenclature{ecdev}{EtherCAT Device}, coming
+with the EtherCAT master code. This header offers a function interface
+for EtherCAT devices which is explained below. All functions of the
+device interface are named with the prefix \textit{ecdev}.
+
+\paragraph{Device Registration}
+
+A network device driver can connect a physical device to an EtherCAT
+master with the \textit{ecdev\_register()} function.
+
+\begin{lstlisting}[language=C]
+  ec_device_t *ecdev_register(unsigned int master_index,
+                              struct net_device *net_dev,
+                              ec_isr_t isr,
+                              struct module *module);
+\end{lstlisting}
+
+The first parameter \textit{master\_index} must be the index of the
+EtherCAT master to connect to (see section~\ref{sec:mastermod}),
+followed by \textit{net\_dev}, the pointer to the corresponding
+net\_device structure, which represents the network device to connect.
+The third parameter \textit{isr} must be a pointer to the interrupt
+service routine (ISR\index{ISR}) handling the device. The master will
+later execute the ISR in order to receive frames and to update the
+device status. The last parameter \textit{module} must be the pointer
+to the device driver module, which is usually accessible via the macro
+\textit{THIS\_MODULE} (see next paragraph). On success, the function
+returns a pointer to an \textit{ec\_device\_t} object, which has to be
+specified when calling further functions of the device interface.
+Therefore the device module has to store this pointer for future use.
+In error case, the \textit{ecdev\_register()} returns \textit{NULL},
+which means that the device could not be registered.  The reason for
+this is printed to \textit{syslog}\index{syslog}. In this case, the
+device module is supposed to abort the module initialisation and let
+the \textit{insmod} command fail.
+
+\paragraph{Implicit Dependencies}
+
+The reason for the module pointer has to be specified at device
+registration is a non-trivial one: The master has to know about the
+module, because there will be an implicit dependency between the
+device module and a later connected realtime module: When a realtime
+module connects to the master, the use count of the master module will
+be increased, so that the master module can not be unloaded for the
+time of the connection. This is reasonable, and so automatically done
+by the kernel. The kernel knows about this dependency, because the
+realtime module uses kernel symbols provided by the master module.
+Moreover it is mandatory, that the device module can be unloaded
+neither, because it is implicitely used by the realtime module, too.
+Unloading it would lead to a fatal situation, because the master would
+have no device to send and receive frames for the realtime module.
+This dependency can not be detected automatically, because the
+realtime module does not use any symbols of the device module.
+Therefore the master explicitly increments the use counter of the
+connected device module upon connection of a realtime module and
+decrements it, if the realtime module disconnects. In this manner, it
+is impossible to unload a device module while the master is in use.
+This is done with the kernel function pair \textit{try\_module\_get()}
+\index{try\_module\_get@\textit{try\_module\_get()}} and
+\textit{module\_put()} \index{module\_put@\textit{module\_put()}}. The
+first one increases the use count of a module and only fails, if the
+module is currenly being unloaded. The last one decreases the use
+count again and never fails. Both functions take a pointer to the
+module as their argument, which the device module therefore has to
+specify upon device registration.
+
+\paragraph{Device Unregistering}
+
+The unregistration of a device is usually done in the device module's
+cleanup function, by calling the \textit{ecdev\_unregister()} function
+and specifying the master index and a pointer to the device object
+again.
+
+\begin{lstlisting}[language=C]
+  void ecdev_unregister(unsigned int master_index,
+                        ec_device_t *device);
+\end{lstlisting}
+
+This function can fail too (if the master index is invalid, or the
+given device was not registered), but due to the fact, that this
+failure can not be dealt with appropriately, because the device module
+is unloading anyway, the failure code would not be of any interest. So
+the function has a void return value.
+
+\paragraph{Starting the Master}
+
+When a device has been initialized completely and is ready to send and
+receive frames, the master has to be notified about this by calling
+the \textit{ecdev\_start()} function.
+
+\begin{lstlisting}[language=C]
+  int ecdev_start(unsigned int master_index);
+\end{lstlisting}
+
+The master will then enter ``Idle Mode'' and start scanning the bus
+(and possibly handling EoE slaves). Moreover it will make the bus
+accessible via Sysfs interface and react to user interactions. The
+function takes one parameter \textit{master\_index}, which has to be
+the same as at the call to \textit{ecdev\_register()}. The return
+value will be non-zero if the starting process failed. In this case
+the device module is supposed to abort the init sequence and make the
+init function return an error code.
+
+\paragraph{Stopping the Master}
+
+Before a device can be unregistered, the master has to be stopped by
+calling the \textit{ecdev\_stop()} function. It will stop processing
+messages of EoE slaves and leave ``Idle Mode''. The only parameter is
+\textit{master\_index}. This function can not fail.
+
+\begin{lstlisting}[language=C]
+  void ecdev_stop(unsigned int master_index);
+\end{lstlisting}
+
+A subsequent call to \textit{ecdev\_unregister()} will now unregister
+the device savely.
+
+\paragraph{Receiving Frames}
+
+The interrupt service routine handling device events usually has a
+section where new frames are fetched from the hardware and forwarded
+to the kernel network stack via \textit{netif\_receive\_skb()}. For an
+EtherCAT-capable device, this has to be replaced by calling the
+\textit{ecdev\_receive()} function to forward the received data to the
+connected EtherCAT master instead.
+
+\begin{lstlisting}[language=C]
+  void ecdev_receive(ec_device_t *device,
+                     const void *data,
+                     size_t size);
+\end{lstlisting}
+
+This function takes 3 arguments, a pointer to the device object
+(\textit{device}), a pointer to the received data, and the size of the
+received data. The data range has to include the Ethernet headers
+starting with the destination address and reach up to the last octet
+of EtherCAT data, excluding the FCS. Most network devices handle the
+FCS in hardware, so it is not seen by the driver code and therefore
+doesn't have to be cut off manually.
+
+\paragraph{Handling the Link Status}
+
+Information about the link status (i.~e. if there is a carrier signal
+detected on the physical port) is also important to the master. This
+information is usually gathered by the ISR and should be forwarded to
+the master by calling the \textit{ecdev\_link\_state()} function. The
+master then can react on this and warn the realtime module of a lost
+link.
+
+\begin{lstlisting}[language=C]
+  void ecdev_link_state(ec_device_t *device,
+                        uint8_t new_state);
+\end{lstlisting}
+
+The parameter \textit{device} has to be a pointer to the device object
+returned by \textit{ecdev\_\-register()}. With the second parameter
+\textit{new\_state}, the new link state is passed: 1, if the link went
+up, and 0, if it went down.
+
+%------------------------------------------------------------------------------
+
+\subsection{Patching Network Drivers}
+\label{sec:patching}
+\index{Network drivers}
+
+This section will demonstrate, how to make a standard Ethernet driver
+EtherCAT-capable. The below code examples are taken out of the
+modified RealTek RTL8139 driver coming with the EtherCAT master
+(\textit{devices/8139too.c}). The driver was originally developed by
+Donald Becker, and is currently maintained by Jeff Garzik.
+
+Unfortunately, there is no standard procedure to enable an Ethernet
+driver for use with the EtherCAT master, but there are a few common
+techniques, that are described in this section.
+
+\begin{enumerate}
+\item A first simple rule is, that \textit{netif\_*()}-calls must be
+  strictly avoided for all EtherCAT devices. As mentioned before,
+  EtherCAT devices have no connection to the network stack, and
+  therefore must not call its interface functions.
+\item Another important thing is, that EtherCAT devices should be
+  operated without interrupts. So any calls of registering interrupt
+  handlers and enabling interrupts at hardware level must be avoided,
+  too.
+\item The master does not use a new socket buffer for each send
+  operation: Instead there is a fix one allocated on master
+  initialization. This socket buffer is filled with an EtherCAT frame
+  with every send operation and passed to the
+  \textit{hard\_start\_xmit()} callback. For that it is necessary,
+  that the socket buffer is not be freed by the network driver as
+  usual.
+\end{enumerate}
+
+As mentioned before, the driver will handle both EtherCAT and ordinary
+Ethernet devices. This implies, that for each device-dependent
+operation, it has to be checked if an EtherCAT device is involved, or
+just an Ethernet device. For means of simplicity, this example driver
+will only handle one EtherCAT device. This makes the case
+differentiations easier.
+
+\paragraph{Global Variables}
+
+First of all, there have to be additional global variables declared,
+as shown in the listing:
+
+\begin{lstlisting}[language=C,numbers=left]
+  static int ec_device_index = -1;
+  static int ec_device_master_index = 0;
+  static ec_device_t *rtl_ec_dev;
+  struct net_device *rtl_ec_net_dev = NULL;
+\end{lstlisting}
+
+\begin{description}
+\item[\normalfont\textcircled{\tiny 1} -- \textcircled{\tiny 2}] To
+  comply to the requirements for parameters of EtherCAT device modules
+  described in section~\ref{sec:seldev}, there have to be additional
+  parameter variables: \textit{ec\_\-device\_\-index} holds the index
+  of the EtherCAT device and defaults to $-1$ (no EtherCAT device),
+  while \textit{ec\_device\_master\_index} stores index of the master,
+  the single device will be connected to. Default: $0$
+\item[\normalfont\textcircled{\tiny 3}] \textit{rtl\_ec\_dev} will be
+  the pointer to the later registered RealTek EtherCAT device, which
+  can be used as a parameter for device methods.
+\item[\normalfont\textcircled{\tiny 4}] \textit{rtl\_ec\_net\_dev} is
+  a pointer to the \textit{net\_device} structure of the dedicated
+  device and is set while scanning the PCI bus and finding the device
+  with the specified index. This is done inside the
+  \textit{pci\_module\_init()} function executed as the first thing on
+  module loading.
+\end{description}
+
+\paragraph{Module Initialization}
+
+Below is the (shortened) coding of the device driver's module init
+function:
+
+\begin{lstlisting}[language=C,numbers=left]
+  static int __init rtl8139_init_module(void)
+  {
+          if (pci_module_init(&rtl8139_pci_driver) < 0) {
+                  printk(KERN_ERR "Failed to init PCI mod.\n");
+                  goto out_return;
+          }
+
+          if (rtl_ec_net_dev) {
+                  printk(KERN_INFO "Registering"
+                         " EtherCAT device...\n");
+                  if (!(rtl_ec_dev =
+                          ecdev_register(ec_device_master_index,
+                                         rtl_ec_net_dev,
+                                         rtl8139_interrupt,
+                                         THIS_MODULE))) {
+                          printk(KERN_ERR "Failed to reg."
+                                          " EtherCAT device!\n");
+                          goto out_unreg_pci;
+                  }
+
+                  printk(KERN_INFO "Starting EtherCAT"
+                         " device...\n");
+                  if (ecdev_start(ec_device_master_index)) {
+                          printk(KERN_ERR "Failed to start"
+                                 " EtherCAT device!\n");
+                          goto out_unreg_ec;
+                  }
+          } else {
+                  printk(KERN_WARNING "No EtherCAT device"
+                         " registered!\n");
+          }
+
+          return 0;
+
+      out_unreg_ec:
+          ecdev_unregister(ec_device_master_index, rtl_ec_dev);
+      out_unreg_pci:
+          pci_unregister_driver(&rtl8139_pci_driver);
+      out_return:
+          return -1;
+  }
+\end{lstlisting}
+
+\begin{description}
+\item[\normalfont\textcircled{\tiny 3}] This call initializes all
+  RTL8139-compatible devices found on the pci bus. If a device with
+  index \textit{ec\_device\_index} is found, a pointer to its
+  \textit{net\_device} structure is stored in
+  \textit{rtl\_ec\_net\_dev} for later use (see next listings).
+\item[\normalfont\textcircled{\tiny 8}] If the specified device was
+  found, \textit{rtl\_ec\_net\_dev} is non-zero.
+\item[\normalfont\textcircled{\tiny 11}] The device is connected to
+  the specified master with a call to \textit{ecdev\_register()}. If
+  this fails, module loading is aborted.
+\item[\normalfont\textcircled{\tiny 23}] The device registration was
+  successful and the master is started. This can fail, which aborts
+  module loading.
+\item[\normalfont\textcircled{\tiny 29}] If no EtherCAT device was
+  found, a warning is output.
+\end{description}
+
+\paragraph{Device Searching}
+
+During the PCI initialization phase, a variable \textit{board\_idx} is
+increased for each RTL8139-compatible device found. The code below is
+executed for each device:
+
+\begin{lstlisting}[language=C,numbers=left]
+  if (board_idx == ec_device_index) {
+          rtl_ec_net_dev = dev;
+          strcpy(dev->name, "ec0");
+  }
+\end{lstlisting}
+
+\begin{description}
+\item[\normalfont\textcircled{\tiny 1}] The device with the specified
+  index will be the EtherCAT device.
+\end{description}
+
+\paragraph{Avoiding Device Registration}
+
+Later in the PCI initialization phase, the net\_devices get
+registered. This has to be avoided for EtherCAT devices and so this is
+a typical example for an EtherCAT case differentiation:
+
+\begin{lstlisting}[language=C,numbers=left]
+  if (dev != rtl_ec_net_dev) {
+          i = register_netdev(dev);
+          if (i) goto err_out;
+  }
+\end{lstlisting}
+
+\begin{description}
+\item[\normalfont\textcircled{\tiny 1}] If the current net\_device is
+  not the EtherCAT device, it is registered at the network stack.
+\end{description}
+
+\paragraph{Avoiding Interrupt Registration}
+
+In the next two listings, there is an interrupt requested and the
+device's interrupts are enabled. This also has to be encapsulated by
+if-clauses, because interrupt operation is not wanted for EtherCAT
+devices.
+
+\begin{lstlisting}[language=C,numbers=left]
+  if (dev != rtl_ec_net_dev) {
+          retval = request_irq(dev->irq, rtl8139_interrupt,
+                               SA_SHIRQ, dev->name, dev);
+          if (retval) return retval;
+  }
+\end{lstlisting}
+
+\begin{lstlisting}[language=C,numbers=left]
+  if (dev != rtl_ec_net_dev) {
+          /* Enable all known interrupts by setting
+             the interrupt mask. */
+          RTL_W16(IntrMask, rtl8139_intr_mask);
+  }
+\end{lstlisting}
+
+\paragraph{Frame Sending}
+
+The listing below shows an exerpt of the function representing the
+\textit{hard\_start\_xmit()} callback of the net\_device.
+
+\begin{lstlisting}[language=C,numbers=left]
+  /* Note: the chip doesn't have auto-pad! */
+  if (likely(len < TX_BUF_SIZE)) {
+          if (len < ETH_ZLEN)
+                  memset(tp->tx_buf[entry], 0, ETH_ZLEN);
+          skb_copy_and_csum_dev(skb, tp->tx_buf[entry]);
+          if (dev != rtl_ec_net_dev) {
+                  dev_kfree_skb(skb);
+          }
+  } else {
+          if (dev != rtl_ec_net_dev) {
+                  dev_kfree_skb(skb);
+          }
+          tp->stats.tx_dropped++;
+          return 0;
+  }
+\end{lstlisting}
+
+\begin{description}
+\item[\normalfont\textcircled{\tiny 6} + \textcircled{\tiny 10}] The
+  master uses a fixed socket buffer for transmission, which is reused
+  and may not be freed.
+\end{description}
+
+\paragraph{Frame Receiving}
+
+During ordinary frame reception, a socket buffer is created and filled
+with the received data. This is not necessary for an EtherCAT device:
+
+\begin{lstlisting}[language=C,numbers=left]
+  if (dev != rtl_ec_net_dev) {
+          /* Malloc up new buffer, compatible with net-2e. */
+          /* Omit the four octet CRC from the length. */
+
+          skb = dev_alloc_skb (pkt_size + 2);
+          if (likely(skb)) {
+                  skb->dev = dev;
+                  skb_reserve(skb, 2); /* 16 byte align
+                                          the IP fields. */
+                  eth_copy_and_sum(skb, &rx_ring[ring_off + 4],
+                                   pkt_size, 0);
+                  skb_put(skb, pkt_size);
+                  skb->protocol = eth_type_trans(skb, dev);
+
+                  dev->last_rx = jiffies;
+                  tp->stats.rx_bytes += pkt_size;
+                  tp->stats.rx_packets++;
+
+                  netif_receive_skb (skb);
+          } else {
+                  if (net_ratelimit())
+                          printk(KERN_WARNING
+                                 "%s: Memory squeeze, dropping"
+                                 " packet.\n", dev->name);
+                  tp->stats.rx_dropped++;
+          }
+  } else {
+          ecdev_receive(rtl_ec_dev,
+                        &rx_ring[ring_offset + 4], pkt_size);
+          dev->last_rx = jiffies;
+          tp->stats.rx_bytes += pkt_size;
+          tp->stats.rx_packets++;
+  }
+\end{lstlisting}
+
+\begin{description}
+\item[\normalfont\textcircled{\tiny 28}] If the device is an EtherCAT
+  device, no socket buffer is allocated. Instead a pointer to the data
+  (which is still in the device's receive ring) is passed to the
+  EtherCAT master. Unnecessary copy operations are avoided.
+\item[\normalfont\textcircled{\tiny 30} -- \textcircled{\tiny 32}] The
+  device's statistics are updated as usual.
+\end{description}
+
+\paragraph{Link State}
+
+The link state (i.~e. if there is a carrier signal detected on the
+receive port) is determined during execution of the ISR. The listing
+below shows the different processing for Ethernet and EtherCAT
+devices:
+
+\begin{lstlisting}[language=C,numbers=left]
+  if (dev != rtl_ec_net_dev) {
+          if (tp->phys[0] >= 0) {
+                  mii_check_media(&tp->mii, netif_msg_link(tp),
+                                  init_media);
+          }
+  } else {
+          void __iomem *ioaddr = tp->mmio_addr;
+          uint16_t link = RTL_R16(BasicModeStatus)
+                          & BMSR_LSTATUS;
+          ecdev_link_state(rtl_ec_dev, link ? 1 : 0);
+  }
+\end{lstlisting}
+
+\begin{description}
+\item[\normalfont\textcircled{\tiny 3}] The ``media check'' is done
+  via the media independent interface (MII\nomenclature{MII}{Media
+    Independent Interface}), a standard interface for Fast Ethernet
+  devices.
+\item[\normalfont\textcircled{\tiny 7} -- \textcircled{\tiny 10}] For
+  EtherCAT devices, the link state is fetched manually from the
+  appropriate device register, and passed to the EtherCAT master by
+  calling \textit{ecdev\_\-link\_\-state()}.
+\end{description}
+
+\paragraph{Module Cleanup}
+
+Below is the module's cleanup function:
+
+\begin{lstlisting}[language=C,numbers=left]
+  static void __exit rtl8139_cleanup_module (void)
+  {
+          printk(KERN_INFO "Cleaning up RTL8139-EtherCAT"
+                 " module...\n");
+
+          if (rtl_ec_net_dev) {
+                  printk(KERN_INFO "Stopping device...\n");
+                  ecdev_stop(ec_device_master_index);
+                  printk(KERN_INFO "Unregistering device...\n");
+                  ecdev_unregister(ec_device_master_index,
+                                   rtl_ec_dev);
+                  rtl_ec_dev = NULL;
+          }
+
+          pci_unregister_driver(&rtl8139_pci_driver);
+
+          printk(KERN_INFO "RTL8139-EtherCAT module"
+                 " cleaned up.\n");
+  }
+\end{lstlisting}
+
+\begin{description}
+\item[\normalfont\textcircled{\tiny 6}] Stopping and unregistration is
+  only done, if a device was registered before.
+\item[\normalfont\textcircled{\tiny 8}] The master is first stopped,
+  so it does not access the device any more.
+\item[\normalfont\textcircled{\tiny 10}] After this, the device is
+  unregistered. The master is now ``ophaned''.
+\end{description}
+
+%------------------------------------------------------------------------------
+
+\section{The Master Module}
+\label{sec:mastermod}
+\index{Master module}
+
+The EtherCAT master is designed to run as a kernel module. Moreover
+the master kernel module \textit{ec\_master} can handle multiple
+masters at the same time: The number of masters has to be passed to
+the module with the parameter \textit{ec\_master\_count}, that
+defaults to $1$. A certain master can later be addressed by its index.
+For example, if the master module has been loaded with the command
+
+\begin{lstlisting}
+  host# `\textbf{modprobe ec\_master ec\_master\_count=2}`
+\end{lstlisting}
+
+the two masters can be addressed by their indices 0 and 1 respectively
+(see figure~\ref{fig:masters}). This master index mandatory for
+certain functions of the master interfaces.
+
+\begin{figure}[htbp]
+  \centering
+  \includegraphics[width=.5\textwidth]{images/masters}
+  \caption{Multiple masters in one module}
+  \label{fig:masters}
+\end{figure}
+
+\paragraph{Master Log Messages}
+
+The master module gives information about it's state and events via
+the syslog interface. The module loading command above should result
+in the following syslog messages:
+
+\begin{lstlisting}
+  EtherCAT: Master driver, 1.1 (stable) - rev. 513,
+            compiled by fp at Aug  09 2006 09:43:50
+  EtherCAT: Initializing 2 EtherCAT master(s)...
+  EtherCAT: Initializing master 0.
+  EtherCAT: Initializing master 1.
+  EtherCAT: Master driver initialized.
+\end{lstlisting}
+
+The master provides information about it's version number, subversion
+revision number and compile information, like the date of compilation
+and the user, who compiled. All messages are prefixed either with
+\texttt{EtherCAT:}, \texttt{EtherCAT WARNING:} or \texttt{EtherCAT
+  ERROR:}, which makes searching the logs easier.
+
+%------------------------------------------------------------------------------
+
+\subsection{Class Reference}
+\label{sec:classes}
+
+This section is not intended to be a complete reference of master
+classes and functions\footnote{The comprehensive master reference can
+  be obtained at http://etherlab.org/download/download-en.html}, but
+will give a general survey of the master's classes, and how they
+interact.
+
+Figure~\ref{fig:uml-all} shows an UML class diagram of the master
+classes.
+
+\begin{figure}[htbp]
+  \centering
+  \includegraphics[width=\textwidth]{images/uml-all}
+  \caption{UML class diagram with associations}
+  \label{fig:uml-all}
+\end{figure}
+
+The following subsections introduce serveral classes with their
+attributes and methods.
+
+%------------------------------------------------------------------------------
+
+\subsubsection{The Master Class}
+\label{sec:class-master}
+\index{Master!Class}
+
+Figure~\ref{fig:uml-master} shows an UML class diagram of the master
+class. There is a short explanation of the attributes and methods
+below.
+
+\begin{figure}[htbp]
+  \centering
+  \includegraphics[width=.8\textwidth]{images/uml-master}
+  \caption{Master UML class diagram}
+  \label{fig:uml-master}
+\end{figure}
+
+\paragraph{Master Attributes}
+
+\begin{description}
+\item[list] is a listhead structure that is needed to manage the list
+  of masters in the master module (see section~\ref{sec:mastermod}).
+\item[reserved] is a flag, that marks the master as reserved for a
+  realtime module, so that a call to \textit{ecrt\_request\_master()}
+  fails, if another module is already using the master.
+\item[index] contains the number of the master. The first master will
+  get index 0, the second index 1, and so on.
+\item[kobj] In order to make the master object available via Sysfs
+  (see section~\ref{sec:sysfs}), this structure is needed inside the
+  master object (see section~\ref{sec:sysfs}).
+\item[slaves] is the list of slaves. It consists of objects of the
+  \textit{ec\_slave\_t} class (see section~\ref{sec:class-slave}).
+\item[slave\_count] is the number of slaves in the list.
+\item[device] points to the network device that is used by the master
+  to send and receive frames (see section~\ref{sec:class-device}). It
+  is \textit{NULL}, if no device is connected.
+\item[datagram\_queue] is a list of datagrams (see
+  section~\ref{sec:class-datagram}) that have to be sent by the
+  master, or have already been sent and wait to be received again.
+  Upon reception or error, the datagrams are dequeued.
+\item[datagram\_index] contains the index value for the next datagram.
+  The master stores this incrementing index into every datagram, to
+  make it easier to assign a received datagram to the one sent before.
+\item[domains] contains the list of domains created by the realtime
+  module (section~\ref{sec:class-domain}).
+\item[debug\_level] controls, how much debugging output is printed by
+  the master: 0 means no debugging output, 1 means to output certain
+  executing marks and actions, and 2 means to output frame contents in
+  addition. This value can be changed at runtime via the Sysfs
+  interface (see section~\ref{sec:sysfs}).
+\item[stats] is a statistics object that contains certain counters
+  (like the number of missed frames).  These statistics are output on
+  demand, but at most once a second.
+\item[workqueue] is the kernel workqueue used for idle mode.
+\item[idle\_work] is the work object, that is queued.
+\item[fsm] The attribute \textit{fsm} represents the master's finite
+  state machine, that does all the slave processing. See
+  sections~\ref{sec:class-fsm} and~\ref{sec:fsm} for further details.
+\item[mode] contains the current master mode, if it is orphaned, idle,
+  or in operation mode.
+\item[eoe\_timer] is the kernel timer used for EoE\index{EoE}
+  processing.
+\item[eoe\_running] marks the state of EoE processing.
+\item[eoe\_handlers] is the list of EoE handlers (see
+  section~\ref{sec:class-eoe}).
+\item[internal\_lock] is a spinlock used in idle mode, that controls
+  the concurrency of the idle and EoE processes.
+\item[request\_cb] The ``request lock'' callback function, the master
+  has to provide for foreign instances, which want to access the
+  master (see section~\ref{sec:concurr}).
+\item[release\_cb] The callback function that will release the master
+  lock.
+\item[cb\_data] This value will be passed as an argument to each
+  callback.
+\item[eeprom\_write\_enable] flag can be written via Sysfs to enable
+  the general writing of E$^2$PROM contents.
+\end{description}
+
+\paragraph{Public Master Methods}
+
+\begin{description}
+\item[ec\_master\_init()] is the master's constructor. It initializes
+  all attributes, creates the workqueue, creates EoE handlers and the
+  state machine object, and adds the kernel object to the Sysfs
+  hierarchy.
+\item[ec\_master\_clear()] is the destructor and undoes all these
+  actions.
+\item[ec\_master\_reset()] clears the master, but initializes it
+  again. This is needed, when a realtime module disconnects: Slaves
+  and other attributes are cleared and are later rebuilt by the idle
+  process.
+\item[ec\_master\_idle\_start/stop()] These methods enable or disable
+  the idle process.
+\item[ec\_master\_eoe\_start/stop()] These methods do the same for the
+  EoE timer.
+\item[ec\_master\_receive\_datagrams()] This method is called by the
+  device, which uses it to pass received frames to the master.  The
+  frame is dissected and the contained datagrams are assigned to the
+  datagram objects in the datagram queue, which are dequeued on
+  reception or error.
+\item[ec\_master\_queue\_datagram()] This method is used to queue a
+  new datagram for sending and receiving.
+\item[ec\_master\_output\_stats()] This method is cyclically called to
+  output a summary of the \textit{stats} attribute at most once a
+  second.
+\item[ec\_master\_clear\_slaves()] clears the list of slaves. This is
+  needed on connection/disconnection of a realtime module or at a
+  topology change in idle mode, when all slaves objects are rebuilt.
+\end{description}
+
+\paragraph{Private Master Methods}
+
+A few of a master's methods are private, meaning, that they can only
+be called from other master methods:
+
+\begin{description}
+\item[ec\_master\_send\_datagrams()] searches the datagram queue for
+  unsent datagrams, allocates frames to send them, does the actual
+  sending and marks the datagrams as sent.
+\item[ec\_master\_idle\_run()] is the work function for the idle mode.
+  It executes the idle state machine, described in
+  section~\ref{sec:fsm-idle}.
+\item[ec\_master\_eoe\_run()] is called by the EoE timer and is
+  responsible for communicating with EoE-capable slaves. See
+  section~\ref{sec:eoeimp} for more information.
+\end{description}
+
+\paragraph{Master Methods (Realtime Interface)}
+
+The master methods belonging to the Eth\-er\-CAT realtime
+interface\index{ecrt@\textit{ecrt}}\nomenclature{ecrt}{EtherCAT
+  Realtime Interface} begin with the prefix \textit{ecrt} instead of
+\textit{ec}. The functions of the realtime interface are explained in
+section~\ref{sec:ecrt-master}.
+
+%------------------------------------------------------------------------------
+
+\subsubsection{The Slave Class}
+\label{sec:class-slave}
+\index{Slave!Class}
+
+Figure~\ref{fig:uml-slave} shows an UML class diagram of the slave
+class. There is a short explanation of the attributes and methods
+below.
+
+\begin{figure}[htbp]
+  \centering
+  \includegraphics[width=.8\textwidth]{images/uml-slave}
+  \caption{Slave UML class diagram}
+  \label{fig:uml-slave}
+\end{figure}
+
+\paragraph{Slave Attributes}
+
+\begin{description}
+\item[list] The master holds a slave list, therefore the slave class
+  must contain this structure used as an anchor for the linked
+  list.
+\item[kobj] This pointer serves as base object for the slave's Sysfs
+  representation.
+\item[master] is the pointer to the master owning this slave object.
+\item[ring\_position] is the logical position in the logical ring
+  topology.
+\item[station\_address] is the configured station address. This is
+  always the ring position~+~$1$).
+\item[coupler\_index] is the index of the last bus coupler.
+\item[coupler\_subindex] is the slave's position, counted from the
+  last bus coupler. See section~\ref{sec:addr} for more information.
+\item[base\_*] These attributes contain base information about the
+  slave, that are read from the ``DL Information'' attribute.
+\item[dl\_*] These fields store information of the ``DL Status''
+  attribute, for example states of the the communication ports.
+\item[sii\_*] These attributes contain values from the ``Slave
+  Information Interface'' \cite[section~6.4]{dlspec}, mostly identity
+  and mailbox information, but also the list of sync manager
+  configurations and PDOs.
+\item[registered] This flag is set, if one or more PDOs of the slave
+  have been registered for process data exchange. Otherwise a warning
+  is output, because the slave is unused.
+\item[fmmus] Is an array of FMMU configurations, that have to be
+  applied to the slave.
+\item[fmmu\_count] contains number of FMMUs used.
+\item[eeprom\_*] These fields contain E$^2$PROM contents and the
+  extracted category information \cite[section~5.4]{alspec}.
+\item[new\_eeprom\_data] If this pointer is not \textit{NULL}, it
+  points to new E$^2$PROM contents, that have to be written to the
+  slave.
+\item[new\_eeprom\_size] This field represents the size of the new
+  E$^2$PROM data.
+\item[requested\_state] is the requested slave state.
+\item[current\_state] is the current slave state.
+\item[error\_flag] is used by the operation and idle state machines
+  to indicate, that a state transisition has failed and should not be
+  tried again until an external event happens.
+\item[online] This flag contains the online state of the slave (i.~e.
+  if it currently responds to the masters commands). Changes of the
+  online state are always reported.
+\item[varsize\_fields] is only suitable for slaves that provide PDOs
+  of variable size (like slaves that manage a sub-fieldbus) and
+  contains information about what size this fields actually should
+  have.
+\end{description}
+
+\paragraph{Public Slave Methods}
+
+\begin{description}
+\item[ec\_slave\_init()] The slave's constructor.
+\item[ec\_slave\_clear()] The slave's destructor.
+\item[ec\_prepare\_fmmu()] prepares an FMMU configuration. The FMMU is
+  configured for a certain sync manager and domain.
+\item[ec\_fetch\_*()] Serveral methods to extract information of the
+  E$^2$PROM category contents.
+\item[ec\_slave\_locate\_string()] extracts a string out of a STRING
+  category and allocates string memory.
+\item[ec\_slave\_calc\_sync\_size()] calculates the size of sync
+  manager contents, because they can be variable due to variable-sized
+  PDOs.
+\item[ec\_slave\_info()] This method prints all slave information into
+  a buffer for Sysfs reading.
+\item[ec\_slave\_mbox\_*()] These functions prepare datagrams for
+  mailbox communication, or process mailbox responses, respectively.
+\end{description}
+
+\paragraph{Private Slave Methods}
+
+\begin{description}
+\item[ec\_slave\_write\_eeprom()] This function accepts E$^2$PROM data
+  from user space, does a quick validation of the contents and
+  schedules them for writing through the idle state machine.
+\end{description}
+
+\paragraph{Slave Methods (Realtime Interface)}
+
+\begin{description}
+\item[ecrt\_slave\_conf\_sdo*()] These methods accept SDO
+  configurations, that are applied on slave activation (i.~e.
+  everytime the slave is configured). The methods differ only in the
+  data size of the SDO (8, 16 or 32 bit).
+\item[ecrt\_slave\_pdo\_size()] This method specifies the size of a
+  variable-sized PDO.
+\end{description}
+
+%------------------------------------------------------------------------------
+
+\subsubsection{The Device Class}
+\label{sec:class-device}
+\index{Device!Class}
+
+The device class is responsible for communicating with the connected
+EtherCAT-enabled network driver. Figure~\ref{fig:uml-device} shows its
+UML class diagram.
+
+\begin{figure}[htbp]
+  \centering
+  \includegraphics[width=.3\textwidth]{images/uml-device}
+  \caption{Device UML class diagram}
+  \label{fig:uml-device}
+\end{figure}
+
+\paragraph{Device Attributes}
+
+\begin{description}
+\item[master] A pointer to the master, which owns the device object.
+\item[dev] This is the pointer to the \textit{net\_device} structure
+  of the connected network device driver.
+\item[open] This flag stores, if the network device is ``opened'' and
+  ready for transmitting and receiving frames.
+\item[tx\_skb] The transmittion socket buffer. Instead of allocating a
+  new socket buffer for each frame, the same socket buffer is recycled
+  and used for every frame.
+\item[isr] The pointer to the network device's interrupt service
+  routine. \textit{ec\_isr\_t} is a type definition in the device
+  interface, which looks like below:
+  \begin{lstlisting}[gobble=4,language=C]
+    typedef irqreturn_t (*ec_isr_t)(int, void *,
+                                    struct pt_regs *);
+  \end{lstlisting}
+\item[module] A pointer to the network driver module, to increase and
+  decrease the use counter (see paragraph ``Implicit Dependencies'' in
+  section~\ref{sec:ecdev}).
+\item[link\_state] The current link state. It can be 0 ``down'' or 1
+  ``up''.
+\item[dbg] Every device objects contains a debugging interface (see
+  sectios~\ref{sec:class-debug} and~\ref{sec:debug}).
+\end{description}
+
+\paragraph{Public Device Methods}
+
+\begin{description}
+\item[ec\_device\_init()] The device constructor.
+\item[ec\_device\_clear()] The device destructor.
+\item[ec\_device\_open()] ``Opens'' the device for transmittion and
+  reception of frames. This is equivalent to the \textit{ifconfig up}
+  command for ordinary Ethernet devices.
+\item[ec\_device\_close()] Stops frame transmittion and reception.
+  This is equivalent to the \textit{ifconfig down} command for
+  ordinary Ethernet devices.
+\item[ec\_device\_call\_isr()] Calls the interrupt service routine of
+  the device.
+\item[ec\_device\_tx\_data()] Returns a pointer into the memory of the
+  transmittion socket buffer \textit{tx\_skb}. This is used by the
+  master to assemble a new EtherCAT frame.
+\item[ec\_device\_send()] Sends an assembled frame by passing it to
+  the device's \textit{hard\_\-start\_\-xmit()} callback.
+\end{description}
+
+\paragraph{Device Methods (Device Interface)}
+
+The device methods belonging to the device interface are explained in
+section~\ref{sec:ecdev}.
+
+%------------------------------------------------------------------------------
+
+\subsubsection{The Datagram Class}
+\label{sec:class-datagram}
+\index{Datagram!Class}
+
+So send and receive a datagram, an object of the
+\textit{ec\_datagram\_t} class is needed. It can be initialized with a
+datagram type \cite[section~5.4]{dlspec} and length (optionally filled
+with data) and appended to the master's datagram queue.
+Figure~\ref{fig:uml-datagram} shows its UML class diagram.
+
+\begin{figure}[htbp]
+  \centering
+  \includegraphics[width=.3\textwidth]{images/uml-datagram}
+  \caption{Datagram UML class diagram}
+  \label{fig:uml-datagram}
+\end{figure}
+
+\paragraph{Datagram Attributes}
+
+\begin{description}
+\item[list] This attribute is needed to make a list of datagrams, as
+  used in the domain class (see section~\ref{sec:class-domain}).
+\item[queue] This attribute is the anchor to the master's datagram
+  queue, which is implemented as a linked list.
+\item[type] The datagram type. \textit{ec\_\-datagram\_\-type\_\-t} is
+  an enumeration, which can have the values
+  \textit{EC\_\-DATAGRAM\_\-APRD}, \textit{EC\_\-DATAGRAM\_\-APWR},
+  \textit{EC\_\-DATAGRAM\_\-NPRD}, \textit{EC\_\-DATAGRAM\_\-NPWR},
+  \textit{EC\_\-DATAGRAM\_\-BRD}, \textit{EC\_\-DATAGRAM\_\-BWR} or
+  \textit{EC\_\-DATAGRAM\_\-LRW}.
+\item[address] The slave address. For all addressing schemes take 4
+  bytes, \textit{ec\_address\_t} is a union type:
+  \begin{lstlisting}[gobble=4,language=C]
+    typedef union {
+            struct {
+                    uint16_t slave; /**< configured or
+                                         autoincrement
+                                         address */
+                    uint16_t mem; /**< physical memory
+                                       address */
+            } physical; /**< physical address */
+            uint32_t logical; /**< logical address */
+    } ec_address_t;
+  \end{lstlisting}
+\item[data] The actual data of the datagram. These are either filled
+  in before sending (at writing access) or are inserted by the
+  adressed slave(s) (at reading access). In any case, the data memory
+  must be dynamically allocated. Besides, this can be done before
+  cyclic processing with the \textit{ec\_datagram\_prealloc()} method
+  (see below).
+\item[mem\_size] The size of the allocated memory, \textit{data}
+  points to.
+\item[data\_size] The size of the actual data in the \textit{data}
+  memory.
+\item[index] The sequential EtherCAT datagram index. This value is set
+  by the master on sending, to easier assign a received datagram to a
+  queued datagram object.
+\item[working\_counter] The working counter of the datagram. This is
+  set to zero on sending and filled with the real value of the working
+  counter on datagram reception.
+\item[state] The state of the datagram.
+  \textit{ec\_\-datagram\_\-state\_\-t} is an enumeration and can be
+  \textit{EC\_\-DATA\-GRAM\_\-INIT},
+  \textit{EC\_\-DATA\-GRAM\_\-QUEU\-ED},
+  \textit{EC\_\-DATA\-GR\-AM\_\-SEN\-T},
+  \textit{EC\_\-DATA\-GRAM\_\-REC\-EIVED},
+  \textit{EC\_\-DATA\-GRAM\_\-TIMED\_\-OUT} or
+  \textit{EC\_\-DA\-TA\-GRAM\_\-ERR\-OR}.
+\item[t\_sent] This attribute is set to the timestamp, when the
+  datagram was sent, to later detect a timeout.
+\end{description}
+
+\paragraph{Public Datagram Methods}
+
+\begin{description}
+\item[ec\_datagram\_init()] The datagram's constructor.
+\item[ec\_datagram\_clear()] The datagram's destructor.
+\item[ec\_datagram\_prealloc()] Allocates memory for the datagram
+  data. This is especially needed, if the datagram structure will
+  later be used in a context, where no dynamic memory allocation is
+  allowed.
+\item[ec\_datagram\_nprd()] Initializes a ``Node-Addressed Physical
+  Read'' datagram \cite[section~5.4.1.2]{dlspec}.
+\item[ec\_datagram\_npwr()] Initializes a ``Node-Addressed Physical
+  Write'' datagram \cite[section~5.4.2.2]{dlspec}.
+\item[ec\_datagram\_aprd()] Initializes a ``Auto-Increment Physical
+  Read'' datagram \cite[section~5.4.1.1]{dlspec}.
+\item[ec\_datagram\_apwr()] Initializes a ``Auto-Increment Physical
+  Write'' datagram \cite[section~5.4.2.1]{dlspec}.
+\item[ec\_datagram\_brd()] Initializes a ``Broadcast Read'' datagram
+  \cite[section~5.4.1.3]{dlspec}.
+\item[ec\_datagram\_bwr()] Initializes a ``Broadcast Write'' datagram
+  \cite[section~5.4.2.3]{dlspec}.
+\item[ec\_datagram\_lrw()] Initializes a ``Logical ReadWrite''
+  datagram \cite[section~5.4.3.4]{dlspec}.
+\end{description}
+
+%------------------------------------------------------------------------------
+
+\subsubsection{The Domain Class}
+\label{sec:class-domain}
+\index{Domain!Class}
+
+The domain class encapsules PDO registration and management of the
+process data image and its exchange. The UML class diagram can be seen
+in figure~\ref{fig:uml-domain}.
+
+\begin{figure}[htbp]
+  \centering
+  \includegraphics[width=.4\textwidth]{images/uml-domain}
+  \caption{Domain UML class diagram}
+  \label{fig:uml-domain}
+\end{figure}
+
+\paragraph{Domain Attributes}
+
+\begin{description}
+\item[kobj] This \textit{kobject} structure is needed for the Sysfs
+  representation of the domain.
+\item[list] The master manages a list of domains, so this list anchor
+  is needed.
+\item[index] The domain's index. The first domain will get index 0,
+  the second index 1, and so on.
+\item[master] A pointer to the master owning the domain.
+\item[data\_size] The size of the domain's process data image.
+\item[datagram] A linked list with the datagram objects, the domain
+  needs for process data exchange (see
+  section~\ref{sec:class-datagram}).
+\item[base\_address] This attribute stores the logical offset, to
+  which the domain's process data are mapped.
+\item[response\_count] The sum of the datagrams' working counters at
+  the last process data exchange. Changes are always reported.
+\item[data\_regs] The (linked) list of PDO registrations. The realtime
+  module requests the exchange of certain PDOs and supplies the
+  address of process data pointers, that will later point to the
+  respective locations in the process data image. These ``data
+  registrations'' are saved in the \textit{data\_regs} list.
+\item[working\_counter\_changes] This field stores the number of
+  working counter changes since the last notification. This helps to
+  reduce syslog output in case of frequent changes.
+\item[t\_last] The timestamp of the last working counter change
+  notification.
+\end{description}
+
+\paragraph{Public Domain Methods}
+
+\begin{description}
+\item[ec\_domain\_init()] The domain's constructor.
+\item[ec\_domain\_clear()] The domain's destructor.
+\item[ec\_domain\_alloc()] Allocates the process data image and the
+  respective datagrams based on the process data registrations.
+\item[ec\_domain\_queue()] Queues the domain's datagrams for exchange
+  via the master.
+\end{description}
+
+\paragraph{Private Domain Methods}
+
+\begin{description}
+\item[ec\_domain\_reg\_pdo\_entry()] This method is used to do a PDO
+  registration. It finds the appropriate sync manager covering the PDO
+  data, calculates its offset in the sync-manager-protected memory and
+  prepares the FMMU configurations for the related slave. Then the PDO
+  registration is appended to the list.
+\item[ec\_domain\_clear\_data\_regs()] Clearing all process data
+  registrations is needed in serveral places and therefore has been
+  sourced out to an own method.
+\item[ec\_domain\_add\_datagram()] This methods allocates a datagram
+  and appends it to the list. This is done during domain allocation.
+\end{description}
+
+\paragraph{Domain Methods (Realtime Interface)}
+
+The domain methods belonging to the realtime interface are introduced
+in section~\ref{sec:ecrt-domain}.
+
+%------------------------------------------------------------------------------
+
+\subsubsection{The Finite State Machine Class}
+\label{sec:class-fsm}
+\index{FSM!Class}
+
+This class encapsules all state machines, except the EoE state
+machine. Its UML class diagram can be seen in
+figure~\ref{fig:uml-fsm}.
+
+\begin{figure}[htbp]
+  \centering
+  \includegraphics[width=.9\textwidth]{images/uml-fsm}
+  \caption{Finite State Machine UML class diagram}
+  \label{fig:uml-fsm}
+\end{figure}
+
+\paragraph{FSM Attributes}
+
+\begin{description}
+\item[master] A pointer to the master owning the FSM object.
+\item[slave] Serveral sub state machines are executed for single
+  slaves. This pointer stores the current slave for these FSMs.
+\item[datagram] The FSM class has its own datagram, which is used in
+  every state and sub-state.
+\item[master\_state] This function pointer stores the current state
+  function for one of the master's state machines.
+\item[master\_slaves\_responding] This attribute is used in the
+  operation state machine (see section~\ref{sec:fsm-op}) to store the
+  number of slaves, that responded to the last broadcast command.
+\item[master\_slave\_states] This attribute stores the slave states,
+  that were determined by the last broadcast command.
+\item[master\_validation] This flag is used by the operation state
+  machine and is non-zero, if a bus validation has to be done.
+\item[slave\_state] This function pointer stores the current state of
+  the slave scan state machine (see section~\ref{sec:fsm-scan}) or the
+  slave configuration state machine (see section~\ref{sec:fsm-conf}).
+\item[sii\_state] This function pointer stores the current state of
+  the SII state machine (see section~\ref{sec:fsm-sii}).
+\item[sii\_offset] This attribute is used by the SII state machine to
+  store the word address for the current read or write cycle.
+\item[sii\_mode] If this attribute is zero, the SII access is done
+  with ``auto-increment'' datagrams \cite[section~5.4]{dlspec}.
+  If it is non-zero, ``station-address'' datagrams are used.
+\item[sii\_value] This attribute stores the value to write, or the
+  read value, respectively.
+\item[sii\_start] A timestamp attribute, that stores the beginning
+  time of an SII operation to detect a timeout.
+\item[change\_state] This function pointer stores the current state of
+  the state change state machine.
+\item[change\_new] This attribute stores the requested state for the
+  state change state machine.
+\item[change\_start] A timestamp attribute to detect a timeout while
+  changing slave states.
+\item[coe\_state] This function pointer stores the current state of
+  the CoE state machines.
+\item[sdodata] This is an SDO data object that stores information
+  about the current SDO to write.
+\item[coe\_start] A timestamp attribute to detect timeouts during CoE
+  configuration.
+\end{description}
+
+\paragraph{Public FSM Methods}
+
+\begin{description}
+\item[ec\_fsm\_init()] Constructor of the FSM class.
+\item[ec\_fsm\_clear()] Destructor of the FSM class.
+\item[ec\_fsm\_reset()] Resets the whole FSM object. This is needed to
+  restart the master state machines.
+\item[ec\_fsm\_execute()] Executes one state of the current state
+  machine and then returns.
+\item[ec\_fsm\_startup()] Initializes the master startup state
+  machine, which determines the number of slaves and executes the
+  slave scan state machine for each slave.
+\item[ec\_fsm\_startup\_running()] Returns non-zero, if the startup
+  state machine did not terminate yet.
+\item[ec\_fsm\_startup\_success()] Returns non-zero, if the startup
+  state machine terminated with success.
+\item[ec\_fsm\_configuration()] Initializes the master configuration
+  state machine, which executes the slave configuration state machine
+  for each slave.
+\item[ec\_fsm\_configuration\_running()] Returns non-zero, if the
+  configuration state machine did not terminate yet.
+\item[ec\_fsm\_configuration\_success()] Returns non-zero, if the
+  configuration state machine terminated with success.
+\end{description}
+
+\paragraph{FSM State Methods}
+
+The rest of the methods showed in the UML class diagram are state
+methods of the state machines. These states are described in
+section~\ref{sec:fsm}.
+
+%------------------------------------------------------------------------------
+
+\subsubsection{The EoE Class}
+\label{sec:class-eoe}
+\index{EoE!Class}
+
+Objects of the \textit{ec\_eoe\_t} class are called EoE handlers. Each
+EoE handler represents a virtual network interface and can be coupled
+to a EoE-capable slave on demand. The UML class diagram can be seen in
+figure~\ref{fig:uml-eoe}.
+
+\begin{figure}[htbp]
+  \centering
+  \includegraphics[width=.4\textwidth]{images/uml-eoe}
+  \caption{EoE UML class diagram}
+  \label{fig:uml-eoe}
+\end{figure}
+
+\paragraph{EoE Attributes}
+
+\begin{description}
+\item[list] The master class maintains a list of EoE handlers.
+  Therefore this list anchor is needed.
+\item[slave] If an EoE handler is coupled to a slave, this pointer
+  points to the related slave object. Otherwise it is \textit{NULL}.
+\item[datagram] Every EoE handler owns a datagram object to exchange
+  data with the coupled slave via its state machine.
+\item[state] This function pointer points to the current state of the
+  EoE state machine (see section~\ref{sec:eoeimp}).
+\item[dev] A pointer to the \textit{net\_device} structure that
+  represents the network interface to the kernel.
+\item[stats] The statistics object for the network interface.
+\item[opened] This flag stores, if the network interface was opened.
+  No EoE processing will be done, if the device is not opened.
+\item[t\_last] This timestamp attribute stores the time of the last
+  bit rate measurement.
+\item[rx\_skb] A pointer to the current receive socket buffer. On
+  every first fragment of a received frame, a new receive socket
+  buffer is allocated. On every last fragment, this buffer will be
+  passed to the network stack.
+\item[rx\_skb\_offset] This attribute stores the offset for the next
+  fragment data in the receive socket buffer.
+\item[rx\_skb\_size] This attribute stores the current data size of
+  the receive socket buffer.
+\item[rx\_expected\_fragment] The expected number of the next
+  fragment. If a fragment with an invalid number is received, the
+  whole frame will be dropped.
+\item[rx\_counter] This is the sum of the octets received since the
+  last bit rate measurement.
+\item[rx\_rate] This attribute stores the receive bit rate in bps.
+\item[tx\_queue] Each EoE handler maintains a transmittion queue for
+  frames, that come in via the network interface. This queue is
+  implemented with a linked list and protected by a spinlock.
+\item[tx\_queue\_active] This flag stores, if the transmittion queue
+  is currently accepting frames from the network stack. If the queue
+  gets filled up, frame transmittion is suspended with a call to
+  \textit{netif\_stop\_queue()}. If the fill state decreases below the
+  half capacity, frame transmittion is restarted with
+  \textit{netif\_wake\_queue()}.
+\item[tx\_queued\_frames] The number of frames in the transmittion
+  queue.
+\item[tx\_queue\_lock] The spinlock used to protect the transmittion
+  queue. This is needed, because the queue is accessed both from
+  network stack context and from the master's EoE timer.
+\item[tx\_frame] The frame that is currently sent. The
+  \textit{ec\_eoe\_frame\_t} structure combines the socket buffer
+  structure with a list head to append it to the transmittion queue.
+\item[tx\_frame\_number] The EoE protocol demands to maintain a
+  sequencial frame number, that must be increased with every frame
+  sent.
+\item[tx\_fragment\_number] The sequencial number of the next fragment
+  to transmit.
+\item[tx\_offset] Current frame data offset for the next fragment to
+  transmit.
+\item[tx\_counter] The number of octets transferred since the last bit
+  rate measurement.
+\item[tx\_rate] The recent transmittion bit rate in bps.
+\end{description}
+
+\paragraph{Public EoE Methods}
+
+\begin{description}
+\item[ec\_eoe\_init()] The EoE handler's constructor. The network
+  interface is allocated and registered.
+\item[ec\_eoe\_clear()] The EoE handler's destructor. The network
+  interface is unregistered and all allocated memory is freed.
+\item[ec\_eoe\_run()] Executes the EoE state machine (see
+  section~\ref{sec:eoeimp}) for this handler.
+\item[ec\_eoe\_active()] Returns true, if the handler has a slave
+  coupled and the network interface is opened.
+\end{description}
+
+\paragraph{Private EoE Methods}
+
+\begin{description}
+\item[ec\_eoe\_flush()] Clears the transmittion queue and drops all
+  frames queued for sending.
+\item[ec\_eoe\_send()] Sends one fragment of the current frame.
+\end{description}
+
+
+\paragraph{EoE State Methods}
+
+The rest of the private methods are state functions for the EoE state
+machine, which is discussed in section~\ref{sec:eoeimp}.
+
+%------------------------------------------------------------------------------
+
+\subsubsection{The Debug Class}
+\label{sec:class-debug}
+
+The debug class maintains a virtual network interface. All frames that
+are sent and received by the master will be forwarded to this network
+interface, so that bus monitoring can be done with third party tools
+(see section~\ref{sec:debug}). Figure~\ref{fig:uml-debug} shows the
+UML class diagram.
+
+\begin{figure}[htbp]
+  \centering
+  \includegraphics[width=.3\textwidth]{images/uml-debug}
+  \caption{Debug UML class diagram}
+  \label{fig:uml-debug}
+\end{figure}
+
+\paragraph{Debug Attributes}
+
+\begin{description}
+\item[dev] A pointer to the allocated \textit{net\_device} structure
+  that represents the network interface in the kernel.
+\item[stats] An object for interface statistics.
+\item[opened] Stores the state of the device. Frames will only be
+  forwarded, if the device was opened with the \textit{ifconfig up}
+  command (or something similar).
+\end{description}
+
+\paragraph{Public Debug Methods}
+
+\begin{description}
+\item[ec\_debug\_init()] The constructor.
+\item[ec\_debug\_clear()] The destructor.
+\item[ec\_debug\_send()] This method forwards a frame to the virtual
+  network interface. It dynamically allocates a new socket buffer and
+  passes it to the network stack.
+\end{description}
+
+%------------------------------------------------------------------------------
+
+\subsection{The Realtime Interface}
+\label{sec:ecrt}
+\index{Realtime interface}
+
+The realtime interface provides functions and data structures for
+realtime modules to access and use an EtherCAT master.
+
+\subsubsection{Master Requesting and Releasing}
+
+Before a realtime module can access am EtherCAT master provided by the
+master module, it has to reserve one for exclusive use. After use, it
+has to release the requested master and make it available for other
+modules. This is done with the following functions:
+
+\begin{lstlisting}[language=C]
+  ec_master_t *ecrt_request_master(unsigned int master_index);
+  void ecrt_release_master(ec_master_t *master);
+\end{lstlisting}
+
+The \textit{ecrt\_request\_master()} function has to be the first
+function a module has to call, when using EtherCAT. The function takes
+the index of the master as its argument. The first master has index 0,
+the $n$th master has index $n - 1$. The number of existent masters has
+to be specified when loading the master module (see
+section~\ref{sec:mastermod}). The function tries to reserve the
+specified master and scans for slaves. It returns a pointer to the
+reserved master object upon success, or \textit{NULL} if an error
+occured.
+
+The \textit{ecrt\_release\_master()} function releases a reserved
+master after use. It takes the pointer to the master object returned
+by \textit{ecrt\_request\_master()} as its argument and can never
+fail.
+
+\subsubsection{Master Methods}
+\label{sec:ecrt-master}
+
+\paragraph{Domain Creation}
+
+For process data exchange, at least one process data domain is needed
+(see section~\ref{sec:processdata}).
+
+\begin{lstlisting}[language=C]
+  ec_domain_t *ecrt_master_create_domain(ec_master_t *master);
+\end{lstlisting}
+
+The \textit{ecrt\_master\_create\_domain()} method creates a new
+process data domain and returns a pointer to the new domain object.
+This object can be used for registering process data objects and
+exchange process data in cyclic operation. On failure, the function
+returns \textit{NULL}.
+
+\paragraph{Slave Handlers}
+
+To access a certain slave, there is a method to get a slave handler:
+
+\begin{lstlisting}[language=C]
+  ec_slave_t *ecrt_master_get_slave(const ec_master_t *,
+                                    const char *);
+\end{lstlisting}
+
+The \textit{ecrt\_master\_get\_slave()} method returns a pointer to a
+certain slave object, specified by its ASCII address (see
+section~\ref{sec:addr}). If the address is invalid, \textit{NULL} is
+returned.
+
+\paragraph{Master Activation}
+
+When all domains are created, and all process data objects are
+registered, the master can be activated:
+
+\begin{lstlisting}[language=C]
+  int ecrt_master_activate(ec_master_t *master);
+  void ecrt_master_deactivate(ec_master_t *master);
+\end{lstlisting}
+
+By calling the \textit{ecrt\_master\_activate()} method, all slaves
+are configured according to the prior method calls and are brought
+into \textit{OP} state. In this case, the method has a return value of
+0. Otherwise (wrong configuration or bus failure) the method returns
+non-zero.
+
+The \textit{ecrt\_master\_deactivate()} method is the counterpart to
+the activate call: It brings all slaves back into \textit{INIT} state
+again. This method should be called prior to
+\textit{ecrt\_\-master\_\-release()}.
+
+\paragraph{Locking Callbacks}
+
+For concurrent master access, the realtime module has to provide a
+locking mechanism (see section~\ref{sec:concurr}):
+
+\begin{lstlisting}[language=C]
+  void ecrt_master_callbacks(ec_master_t *master,
+                             int (*request_cb)(void *),
+                             void (*release_cb)(void *),
+                             void *cb_data);
+\end{lstlisting}
+
+The ``request lock'' and ``release lock'' callbacks can be set with
+the \textit{ecrt\_master\_call\-backs()} method. It takes two function
+pointers and a data value as additional arguments. The arbitrary data
+value will be passed as argument on every callback. Asynchronous
+master access (like EoE processing) is only possible if these
+callbacks have been set.
+
+\paragraph{Preparation of Cyclic Data Exchange}
+
+Cyclic operation mostly consists of the three steps input, processing
+and output. In EtherCAT terms this would mean: Receive datagrams,
+evaluate process data and send datagrams. The first cycle differs from
+this principle, because no datagrams have been sent yet, so there is
+nothing to receive. To avoid having a case differantiation (in terms
+of an \textit{if} clause), the following method exists:
+
+\begin{lstlisting}[language=C]
+  void ecrt_master_prepare(ec_master_t *master);
+\end{lstlisting}
+
+As a last thing before cyclic operation, a call to the
+\textit{ecrt\_master\_prepare()} method should be issued. It makes all
+process data domains queue their datagrams and issues a send command,
+so that the first receive call in cyclic operation will not fail.
+
+\paragraph{Frame Sending and Receiving}
+
+To send all queued datagrams and to later receive the sent datagrams
+there are two methods:
+
+\begin{lstlisting}[language=C]
+  void ecrt_master_send(ec_master_t *master);
+  void ecrt_master_receive(ec_master_t *master);
+\end{lstlisting}
+
+The \textit{ecrt\_master\_send()} method takes all datagrams, that
+have been queued for transmission, packs them into frames, and passes
+them to the network device for sending.
+
+The \textit{ecrt\_master\_receive()} queries the network device for
+received frames (by calling the ISR\index{ISR}), extracts received
+datagrams and dispatches the results to the datagram objects in the
+queue. Received datagrams, and the ones that timed out, will be
+marked, and then dequeued.
+
+\paragraph{Running the Operation State Machine}
+
+The master's operation state machine (see section~\ref{sec:fsm-op})
+monitors the bus in cyclic operation and reconfigures slaves, if
+necessary. Therefore, the following method should be called
+cyclically:
+
+\begin{lstlisting}[language=C]
+  void ecrt_master_run(ec_master_t *master);
+\end{lstlisting}
+
+The \textit{ecrt\_master\_run()} method executes the master's
+operation state machine step by step. It returns after processing one
+state and queuing a datagram. Calling this function is not mandatory,
+but highly recommended.
+
+\paragraph{Master Monitoring}
+
+It is also highly recommended to evaluate the master's error state. In
+this way it is possible to notice lost network links, failed bus
+segments, and other issues:
+
+\begin{lstlisting}[language=C]
+  int ecrt_master_state(const ec_master_t *master);
+\end{lstlisting}
+
+The \textit{ecrt\_master\_state()} method returns the master's error
+state. The following states are defined as part of the realtime
+interface:
+
+\begin{description}
+\item[EC\_MASTER\_OK] means, that no error has occurred.
+\item[EC\_MASTER\_LINK\_ERROR] means, that the network link is
+  currently down.
+\item[EC\_MASTER\_BUS\_ERROR] means, that one or more slaves do not
+  respond.
+\end{description}
+
+\subsubsection{Domain Methods}
+\label{sec:ecrt-domain}
+
+\paragraph{PDO Registration}
+
+To access data of a slave's PDO in cyclic operation, it is necessary
+to make it part of a process data domain:
+
+\begin{lstlisting}[language=C]
+  ec_slave_t *ecrt_domain_register_pdo(ec_domain_t *domain,
+                                       const char *address,
+                                       uint32_t vendor_id,
+                                       uint32_t product_code,
+                                       const char *pdo_name
+                                       void **data_ptr);
+  int ecrt_domain_register_pdo_list(ec_domain_t *domain,
+                                    const ec_pdo_reg_t *pdos);
+\end{lstlisting}
+
+The \textit{ecrt\_domain\_register\_pdo()} method registers a certain
+PDO as part of the domain and takes the address of the process data
+pointer. This pointer will be set on master activation and then can be
+parameter to the \textit{EC\_READ\_*} and \textit{EC\_WRITE\_*} macros
+described below.
+
+A perhaps easier way to register multiple PDOs at the same time is to
+fill an array of \textit{ec\_pdo\_reg\_t} and hand it to the
+\textit{ecrt\_domain\_register\_pdo\_list()} method. Attention: This
+array has to be terminated by an empty structure (\textit{\{\}})!
+
+\paragraph{Evaluating Domain Data}
+
+To evaluate domain data, the following method has to be used:
+
+\begin{lstlisting}[language=C]
+  void ecrt_domain_process(ec_domain_t *domain);
+\end{lstlisting}
+
+The \textit{ecrt\_domain\_process()} method sets the domains state and
+requeues its datagram for sending.
+
+\paragraph{Domain State}
+
+Similar to the master state, a domain has an own error state:
+
+\begin{lstlisting}[language=C]
+  int ecrt_domain_state(const ec_domain_t *domain);
+\end{lstlisting}
+
+The \textit{ecrt\_domain\_state()} method returns the domain's error
+state. It is non-zero if \underline{not} all process data values could
+be exchanged, and zero otherwise.
+
+\subsubsection{Slave Methods}
+\label{sec:ecrt-slave}
+
+\paragraph{SDO Configuration}
+
+To configure slave SDOs, the function interface below can be used:
+
+\begin{lstlisting}[language=C]
+  int ecrt_slave_conf_sdo8(ec_slave_t *slave,
+                           uint16_t sdo_index,
+                           uint8_t sdo_subindex,
+                           uint8_t value);
+  int ecrt_slave_conf_sdo16(ec_slave_t *slave,
+                            uint16_t sdo_index,
+                            uint8_t sdo_subindex,
+                            uint16_t value);
+  int ecrt_slave_conf_sdo32(ec_slave_t *slave,
+                            uint16_t sdo_index,
+                            uint8_t sdo_subindex,
+                            uint32_t value);
+\end{lstlisting}
+
+The \textit{ecrt\_slave\_conf\_sdo*()} methods prepare the
+configuration of a certain SDO. The index and subindex of the SDO, and
+the value have to be specified. The configuration is done each time,
+the slave is reconfigured. The methods only differ in the SDO's data
+type. If the configuration could be prepared, zero is returned. If an
+error occured, non-zero is returned.
+
+\paragraph{Variable-sized PDOs}
+
+For specifying the size of variable-sized PDOs, the following method
+can be used:
+
+\begin{lstlisting}[language=C]
+  int ecrt_slave_pdo_size(ec_slave_t *slave,
+                          const char *pdo_name,
+                          size_t size);
+\end{lstlisting}
+
+The \textit{ecrt\_slave\_pdo\_size()} method takes the name of the PDO
+and the size. It returns zero on success, otherwise non-zero.
+
+\subsubsection{Process Data Access}
+\label{sec:macros}
+
+The endianess of the process data could differ from that of the CPU.
+Therefore, process data access has to be done by the macros below,
+that are also provided by the realtime interface:
+
+\begin{lstlisting}[language=C]
+  #define EC_READ_BIT(DATA, POS)
+  #define EC_WRITE_BIT(DATA, POS, VAL)
+
+  #define EC_READ_U8(DATA)
+  #define EC_READ_S8(DATA)
+  #define EC_READ_U16(DATA)
+  #define EC_READ_S16(DATA)
+  #define EC_READ_U32(DATA)
+  #define EC_READ_S32(DATA)
+
+  #define EC_WRITE_U8(DATA, VAL)
+  #define EC_WRITE_S8(DATA, VAL)
+  #define EC_WRITE_U16(DATA, VAL)
+  #define EC_WRITE_S16(DATA, VAL)
+  #define EC_WRITE_U32(DATA, VAL)
+  #define EC_WRITE_S32(DATA, VAL)
+\end{lstlisting}
+
+There are macros for bitwise access (\textit{EC\_READ\_BIT()},
+\textit{EC\_WRITE\_BIT()}), and bytewise access
+(\textit{EC\_READ\_*()}, \textit{EC\_WRITE\_*()}). The bytewise macros
+carry the data type in their name. Example: \textit{EC\_WRITE\_S16()}
+writes a 16 bit signed value to EtherCAT data. The \textit{DATA}
+parameter is supposed to be a process data pointer, as provided at PDO
+registration.
+
+The macros use the kernel's endianess conversion macros, that are
+preprocessed to empty macros in case of equal endianess. This is the
+definition for the \textit{EC\_\-READ\_\-U16()} macro:
+
+\begin{lstlisting}[language=C]
+  #define EC_READ_U16(DATA) \
+          ((uint16_t) le16_to_cpup((void *) (DATA)))
+\end{lstlisting}
+
+The \textit{le16\_to\_cpup()} macro converts a little-endian, 16 bit
+value to the CPU's architecture and takes a pointer to the input value
+as its argument. If the CPU's architecture is little-endian, too (for
+example on X86 and compatible), nothing has to be converted. In this
+case, the macro is replaced with an empty macro by the preprocessor
+and so there is no unneeded function call or case differentiation in
+the code.
+
+For keeping it portable, it is highly recommended to make use of these
+macros.
+
+%------------------------------------------------------------------------------
+
+\subsection{Slave Addressing}
+\label{sec:addr}
+\index{Slave!Addressing}
+
+The master offers the serveral slave addressing schemes (for PDO
+registration or configuration) via the realtime interface. For this
+reason, slave addresses are ASCII\nomenclature{ASCII}{American
+  Standard Code for Information Interchange}-coded and passed as a
+string. The addressing schemes are independent of the EtherCAT
+protocol and represent an additional feature of the master.
+
+Below, the allowed addressing schemes are described. The descriptions
+are followed by a regular expression formally defining the addressing
+scheme, and one or more examples.
+
+\begin{description}
+\item[Position Addressing] This is the normal addressing scheme, where
+  each slave is addressed by its ring position. The first slave has
+  address 0, and the $n$th slave has address $n - 1$. This addressing
+  scheme is useful for small busses that have a fixed number of slaves.\\
+  RegEx: \texttt{[0-9]+} --- Example: \texttt{"42"}
+\item[Advanced Position Addressing] Bus couplers segment the bus into
+  (physical) blocks. Though the logical ring positions keep being the
+  same, it is easier to address a slave with its block number and the
+  relative position inside the block. This addressing is done by
+  passing the (zero-based) index of the bus coupler (not the coupler's
+  ring position), followed by a colon and the relative position of the
+  actual slave starting at the bus coupler.\\
+  RegEx: \texttt{[0-9]+:[0-9]+} --- Examples: \texttt{"0:42"},
+  \texttt{"2:7"}
+\item[Alias Addressing] Each slave can have a ``secondary slave
+  address'' or ``alias address''\footnote{Information about how to set
+    the alias can be found in section~\ref{sec:eepromaccess}} stored
+  in its E$^2$PROM.  The alias is evaluated by the master and can be
+  used to address the slave, which is useful when a clearly defined
+  slave has to be addressed and the ring position is not known or can
+  change over time. This scheme is used by starting the address string
+  with a mesh (\#) followed by the alias address.  The latter can also
+  be provided as hexadecimal value, prefixed with \textit{0x}.\\
+  RegEx: \texttt{\#(0x[0-9A-F]+|[0-9]+)} --- Examples:
+  \texttt{"\#6622"}, \texttt{"\#0xBEEF"}
+\item[Advanced Alias Addressing] This is a mixture of the ``Alias
+  Addressing'' and ``Advanced Position Addressing'' schemes. A certain
+  slave is addressed by specifying its relative position after an
+  aliased slave. This is very useful, if a complete block of slaves
+  can vary its position in the bus. The bus coupler preceeding the
+  block should get an alias. The block slaves can then be addressed by
+  specifying this alias and their position inside the block. This
+  scheme is used by starting the address string with a mesh (\#)
+  followed by the alias address (which can be hexadecimal), then a
+  colon and the relative posision of the slave to
+  address.\\
+  RegEx: \texttt{\#(0x[0-9A-F]+|[0-9]+):[0-9]+} --- Examples:
+  \texttt{"\#0xBEEF:7"}, \texttt{"\#6:2"}
+\end{description}
+
+In anticipation of section~\ref{sec:ecrt}, the functions accepting
+these address strings are \textit{ecrt\_\-master\_\-get\_slave()},
+\textit{ecrt\_domain\_register\_pdo()} and
+\textit{ecrt\_domain\_register\_pdo\_list()} (the latter through the
+\textit{ec\_pdo\_reg\_t} structure).
+
+%------------------------------------------------------------------------------
+
+\subsection{Concurrent Master Access}
+\label{sec:concurr}
+\index{Concurrency}
+
+In some cases, one master is used by serveral instances, for example
+when a realtime module does cyclic process data exchange, and there
+are EoE-capable slaves that require to exchange Ethernet data with the
+kernel (see section~\ref{sec:eoeimp}). For this reason, the master is
+a shared resource, and access to it has to be sequenctialized. This is
+usually done by locking with semaphores, or other methods to protect
+critical sections.
+
+The master itself can not provide locking mechanisms, because it has
+no chance to know the appropriate kind of lock. Imagine, the realtime
+module uses RTAI functionality, then ordinary kernel semaphores would
+not be sufficient. For that, an important design decision was made:
+The realtime module that reserved a master must have the total
+control, therefore it has to take responsibility for providing the
+appropriate locking mechanisms. If another instance wants to access
+the master, it has to request the master lock by callbacks, that have
+to be set by the realtime module. Moreover the realtime module can
+deny access to the master if it consideres it to be awkward at the
+moment.
+
+\begin{figure}[htbp]
+  \centering
+  \includegraphics[width=.6\textwidth]{images/master-locks}
+  \caption{Concurrent master access}
+  \label{fig:locks}
+\end{figure}
+
+Figure~\ref{fig:locks} exemplary shows, how two processes share one
+master: The realtime module's cyclic thread uses the master for
+process data exchange, while the master-internal EoE process uses it
+to communicate with EoE-capable slaves. Both have to aquire the master
+lock before access: The realtime thread can access the lock natively,
+while the EoE process has to use the master callbacks.
+Section~\ref{sec:concurrency} gives an example, of how to implement
+this.
+
+%------------------------------------------------------------------------------
+
+\section{The Master's State Machines}
+\label{sec:fsm}
+\index{FSM}
+
+Many parts of the EtherCAT master are implemented as \textit{finite
+  state machines} (FSMs\nomenclature{FSM}{Finite State Machine}).
+Though this leads to a higher grade of complexity in some aspects, is
+opens many new possibilities.
+
+The below short code example exemplary shows how to read all slave
+states and moreover illustrates the restrictions of ``sequential''
+coding:
+
+\begin{lstlisting}[language=C,numbers=left]
+  ec_datagram_brd(datagram, 0x0130, 2); // prepare datagram
+  if (ec_master_simple_io(master, datagram)) return -1;
+  slave_states = EC_READ_U8(datagram->data); // process datagram
+\end{lstlisting}
+
+The \textit{ec\_master\_simple\_io()} function provides a simple
+interface for synchronously sending a single datagram and receiving
+the result\footnote{For all communication issues have been meanwhile
+  sourced out into state machines, the function is deprecated and
+  stopped existing. Nevertheless it is adequate for showing it's own
+  restrictions.}. Internally, it queues the specified datagram,
+invokes the \textit{ec\_master\_send\_datagrams()} function to send a
+frame with the queued datagram and then waits actively for its
+reception.
+
+This sequential approach is very simple, reflecting in only three
+lines of code. The disadvantage is, that the master is blocked for the
+time it waits for datagram reception. There is no difficulty when only
+one instance is using the master, but if more instances want to
+(synchronously\footnote{At this time, synchronous master access will
+  be adequate to show the advantages of an FSM. The asynchronous
+  approach will be discussed in section~\ref{sec:eoeimp}}) use the
+master, it is inevitable to think about an alternative to the
+sequential model.
+
+Master access has to be sequentialized for more than one instance
+wanting to send and receive datagrams synchronously. With the present
+approach, this would result in having one phase of active waiting for
+each instance, which would be non-acceptable especially in realtime
+circumstances, because of the huge time overhead.
+
+A possible solution is, that all instances would be executed
+sequentially to queue their datagrams, then give the control to the
+next instance instead of waiting for the datagram reception. Finally,
+bus IO is done by a higher instance, which means that all queued
+datagrams are sent and received. The next step is to execute all
+instances again, which then process their received datagrams and issue
+new ones.
+
+This approach results in all instances having to retain their state,
+when giving the control back to the higher instance. It is quite
+obvious to use a \textit{finite state machine} model in this case.
+Section~\ref{sec:fsmtheory} will introduce some of the theory used,
+while the listings below show the basic approach by coding the example
+from above as a state machine:
+
+\begin{lstlisting}[language=C,numbers=left]
+  // state 1
+  ec_datagram_brd(datagram, 0x0130, 2); // prepare datagram
+  ec_master_queue(master, datagram); // queue datagram
+  next_state = state_2;
+  // state processing finished
+\end{lstlisting}
+
+After all instances executed their current state and queued their
+datagrams, these are sent and received. Then the respective next
+states are executed:
+
+\begin{lstlisting}[language=C,numbers=left]
+  // state 2
+  if (datagram->state != EC_DGRAM_STATE_RECEIVED) {
+          next_state = state_error;
+          return; // state processing finished
+  }
+  slave_states = EC_READ_U8(datagram->data); // process datagram
+  // state processing finished.
+\end{lstlisting}
+
+See section~\ref{sec:statemodel} for an introduction to the
+state machine programming concept used in the master code.
+
+%------------------------------------------------------------------------------
+
+\subsection{State Machine Theory}
+\label{sec:fsmtheory}
+\index{FSM!Theory}
+
+A finite state machine \cite{automata} is a model of behavior with
+inputs and outputs, where the outputs not only depend on the inputs,
+but the history of inputs. The mathematical definition of a finite
+state machine (or finite automaton) is a six-tuple $(\Sigma, \Gamma,
+S, s_0, \delta, \omega)$, with
+
+\begin{itemize}
+\item the input alphabet $\Sigma$, with $\Sigma \neq
+  \emptyset$, containing all input symbols,
+\item the output alphabet $\Gamma$, with $\Gamma \neq
+  \emptyset$, containing all output symbols,
+\item the set of states $S$, with $S \neq \emptyset$,
+\item the set of initial states $s_0$ with $s_0 \subseteq S, s_0 \neq
+  \emptyset$
+\item the transition function $\delta: S \times \Sigma \rightarrow S
+  \times \Gamma$
+\item the output function $\omega$.
+\end{itemize}
+
+The state transition function $\delta$ is often specified by a
+\textit{state transition table}, or by a \textit{state transition
+  diagram}. The transition table offers a matrix view of the state
+machine behavior (see table~\ref{tab:statetrans}). The matrix rows
+correspond to the states ($S = \{s_0, s_1, s_2\}$) and the columns
+correspond to the input symbols ($\Gamma = \{a, b, \varepsilon\}$).
+The table contents in a certain row $i$ and column $j$ then represent
+the next state (and possibly the output) for the case, that a certain
+input symbol $\sigma_j$ is read in the state $s_i$.
+
+\begin{table}[htbp]
+  \caption{A typical state transition table}
+  \label{tab:statetrans}
+  \vspace{2mm}
+  \centering
+  \begin{tabular}{l|ccc}
+    & $a$ & $b$ & $\varepsilon$\\ \hline
+    $s_0$ & $s_1$ & $s_1$ & $s_2$\\
+    $s_1$ & $s_2$ & $s_1$ & $s_0$\\
+    $s_2$ & $s_0$ & $s_0$ & $s_0$\\ \hline
+  \end{tabular}
+\end{table}
+
+The state diagram for the same example looks like the one in
+figure~\ref{fig:statetrans}. The states are represented as circles or
+ellipses and the transitions are drawn as arrows between them. Close
+to a transition arrow can be the condition that must be fulfilled to
+allow the transition. The initial state is marked by a filled black
+circle with an arrow pointing to the respective state.
+
+\begin{figure}[htbp]
+  \centering
+  \includegraphics[width=.5\textwidth]{images/statetrans}
+  \caption{A typical state transition diagram}
+  \label{fig:statetrans}
+\end{figure}
+
+\paragraph{Deterministic and non-deterministic state machines}
+
+A state machine can be deterministic, meaning that for one state and
+input, there is one (and only one) following state. In this case, the
+state machine has exactly one starting state. Non-deterministic state
+machines can have more than one transitions for a single state-input
+combination. There is a set of starting states in the latter case.
+
+\paragraph{Moore and Mealy machines}
+
+There is a distinction between so-called \textit{Moore machines}, and
+\textit{Mealy machines}. Mathematically spoken, the distinction lies
+in the output function $\omega$: If it only depends on the current
+state ($\omega: S \rightarrow \Gamma$), the machine corresponds to the
+``Moore Model''. Otherwise, if $\omega$ is a function of a state and
+the input alphabet ($\omega: S \times \Sigma \rightarrow \Gamma$) the
+state machine corresponds to the ``Mealy model''. Mealy machines are
+the more practical solution in most cases, because their design allows
+machines with a minimum number of states. In practice, a mixture of
+both models is often used.
+
+\paragraph{Misunderstandings about state machines}
+
+There is a phenomenon called ``state explosion'', that is oftenly
+taken as a counter-argument against general use of state machines in
+complex environments. It has to be mentioned, that this point is
+misleading~\cite{fsmmis}. State explosions happen usually as a result
+of a bad state machine design: Common mistakes are storing the present
+values of all inputs in a state, or not dividing a complex state
+machine into simpler sub state machines. The EtherCAT master uses
+serveral state machines, that are executed hierarchically and so serve
+as sub state machines. These are also described below.
+
+%------------------------------------------------------------------------------
+
+\subsection{The Master's State Model}
+\label{sec:statemodel}
+
+This section will introduce the techniques used in the master to
+implement state machines.
+
+\paragraph{State Machine Programming}
+
+There are certain ways to implement a state machine in \textit{C}
+code. An obvious way is to implement the different states and actions
+by one big case differentiation:
+
+\begin{lstlisting}[language=C,numbers=left]
+  enum {STATE_1, STATE_2, STATE_3};
+  int state = STATE_1;
+
+  void state_machine_run(void *priv_data) {
+          switch (state) {
+                  case STATE_1:
+                          action_1();
+                          state = STATE_2;
+                          break;
+                  case STATE_2:
+                          action_2()
+                          if (some_condition) state = STATE_1;
+                          else state = STATE_3;
+                          break;
+                  case STATE_3:
+                          action_3();
+                          state = STATE_1;
+                          break;
+          }
+  }
+\end{lstlisting}
+
+For small state machines, this is an option. The disadvantage is, that
+with an increasing number of states the code soon gets complex and an
+additional case differentiation is executed each run. Besides, lots of
+indentation is wasted.
+
+The method used in the master is to implement every state in an own
+function and to store the current state function with a function
+pointer:
+
+\begin{lstlisting}[language=C,numbers=left]
+  void (*state)(void *) = state1;
+
+  void state_machine_run(void *priv_data) {
+          state(priv_data);
+  }
+
+  void state1(void *priv_data) {
+          action_1();
+          state = state2;
+  }
+
+  void state2(void *priv_data) {
+          action_2();
+          if (some_condition) state = state1;
+          else state = state2;
+  }
+
+  void state3(void *priv_data) {
+          action_3();
+          state = state1;
+  }
+\end{lstlisting}
+
+In the master code, state pointers of all state machines\footnote{All
+  except for the EoE state machine, because multiple EoE slaves have
+  to be handled in parallel. For this reason each EoE handler object
+  has its own state pointer.} are gathered in a single object of the
+\textit{ec\_fsm\_t} class. This is advantageous, because there is
+always one instance of every state machine available and can be
+started on demand.
+
+\paragraph{Mealy and Moore}
+
+If a closer look is taken to the above listing, it can be seen that
+the actions executed (the ``outputs'' of the state machine) only
+depend on the current state. This accords to the ``Moore'' model
+introduced in section~\ref{sec:fsmtheory}. As mentioned, the ``Mealy''
+model offers a higher flexibility, which can be seen in the listing
+below:
+
+\begin{lstlisting}[language=C,numbers=left]
+  void state7(void *priv_data) {
+          if (some_condition) {
+                  action_7a();
+                  state = state1;
+          }
+          else {
+                  action_7b();
+                  state = state8;
+          }
+  }
+\end{lstlisting}
+
+\begin{description}
+\item[\normalfont\textcircled{\tiny 3} + \textcircled{\tiny 7}] The
+  state function executes the actions depending on the state
+  transition, that is about to be done.
+\end{description}
+
+The most flexible alternative is to execute certain actions depending
+on the state, followed by some actions dependent on the state
+transition:
+
+\begin{lstlisting}[language=C,numbers=left]
+  void state9(void *priv_data) {
+          action_9();
+          if (some_condition) {
+                  action_9a();
+                  state = state7;
+          }
+          else {
+                  action_9b();
+                  state = state10;
+          }
+  }
+\end{lstlisting}
+
+This model is oftenly used in the master. It combines the best aspects
+of both approaches.
+
+\paragraph{Using Sub State Machines}
+
+To avoid having too much states, certain functions of the EtherCAT
+master state machine have been sourced out into sub state machines.
+This helps to encapsule the related workflows and moreover avoids the
+``state explosion'' phenomenon described in
+section~\ref{sec:fsmtheory}. If the master would instead use one big
+state machine, the number of states would be a multiple of the actual
+number. This would increase the level of complexity to a
+non-manageable grade.
+
+\paragraph{Executing Sub State Machines}
+
+If a state machine starts to execute a sub state machine, it usually
+remains in one state until the sub state machine terminates. This is
+usually done like in the listing below, which is taken out of the
+slave configuration state machine code:
+
+\begin{lstlisting}[language=C,numbers=left]
+  void ec_fsm_slaveconf_saveop(ec_fsm_t *fsm)
+  {
+          fsm->change_state(fsm); // execute state change
+                                  // sub state machine
+
+          if (fsm->change_state == ec_fsm_error) {
+                  fsm->slave_state = ec_fsm_end;
+                  return;
+          }
+
+          if (fsm->change_state != ec_fsm_end) return;
+
+          // continue state processing
+          ...
+\end{lstlisting}
+
+\begin{description}
+\item[\normalfont\textcircled{\tiny 3}] \textit{change\_state} is the
+  state pointer of the state change state machine. The state function,
+  the pointer points on, is executed\ldots
+\item[\normalfont\textcircled{\tiny 6}] \ldots either until the state
+  machine terminates with the error state \ldots
+\item[\normalfont\textcircled{\tiny 11}] \ldots or until the state
+  machine terminates in the end state. Until then, the ``higher''
+  state machine remains in the current state and executes the sub
+  state machine again in the next cycle.
+\end{description}
+
+\paragraph{State Machine Descriptions}
+
+The below sections describe every state machine used in the EtherCAT
+master. The textual descriptions of the state machines contain
+references to the transitions in the corresponding state transition
+diagrams, that are marked with an arrow followed by the name of the
+successive state.  Transitions caused by trivial error cases (i.~e. no
+response from slave) are not described explicitly. These transitions
+are drawn as dashed arrows in the diagrams.
+
+%------------------------------------------------------------------------------
+
+\subsection{The Operation State Machine}
+\label{sec:fsm-op}
+\index{FSM!Operation}
+
+The Operation state machine is executed by calling the
+\textit{ecrt\_master\_run()} method in cyclic realtime code. Its
+purpose is to monitor the bus and to reconfigure slaves after a bus
+failure or power failure. Figure~\ref{fig:fsm-op} shows its transition
+diagram.
+
+\begin{figure}[htbp]
+  \centering
+  \includegraphics[width=.8\textwidth]{images/fsm-op}
+  \caption{Transition diagram of the operation state machine}
+  \label{fig:fsm-op}
+\end{figure}
+
+\begin{description}
+\item[START] This is the beginning state of the operation state
+  machine. There is a datagram issued, that queries the ``AL Control
+  Response'' attribute \cite[section~5.3.2]{alspec} of all slaves via
+  broadcast. In this way, all slave states and the number of slaves
+  responding can be determined.  $\rightarrow$~\textit{BROADCAST}
+
+\item[BROADCAST] The broadcast datagram is evaluated. A change in the
+  number of responding slaves is treates as a topology change. If the
+  number of slaves is not as expected, the bus is marked as
+  ``tainted''. In this state, no slave reconfiguration is possible,
+  because the assignment of known slaves and those present on the bus
+  is ambiguous. If the number of slaves is considered as right, the
+  bus is marked for validation, because it turned from tainted to
+  normal state and it has to be checked, if all slaves are valid. Now,
+  the state of every single slave has to be determined. For that, a
+  (unicast) datagram is issued, that queries the first slave's ``AL
+  Control Response'' attribute. $\rightarrow$~\textit{READ STATES}
+
+\item[READ STATES] If the current slave did not respond to its
+  configured station address, it is marked as offline, and the next
+  slave is queried. $\rightarrow$~\textit{READ STATES}
+
+  If the slave responded, it is marked as online and its current state
+  is stored. The next slave is queried. $\rightarrow$~\textit{READ
+    STATES}
+
+  If all slaves have been queried, and the bus is marked for
+  validation, the validation is started by checking the first slaves
+  vendor ID. $\rightarrow$~\textit{VALIDATE VENDOR}
+
+  If no validation has to be done, it is checked, if all slaves are in
+  the state they are supposed to be. If not, the first of slave with
+  the wrong state is reconfigured and brought in the required state.
+  $\rightarrow$~\textit{CONFIGURE SLAVES}
+
+  If all slaves are in the correct state, the state machine is
+  restarted. $\rightarrow$~\textit{START}
+
+\item[CONFIGURE SLAVES] The slave configuration state machine is
+  executed until termination. $\rightarrow$~\textit{CONFIGURE SLAVES}
+
+  If there are still slaves in the wrong state after another check,
+  the first of these slaves is configured and brought into the correct
+  state again. $\rightarrow$~\textit{CONFIGURE SLAVES}
+
+  If all slaves are in the correct state, the state machine is
+  restarted. $\rightarrow$~\textit{START}
+
+\item[VALIDATE VENDOR] The SII state machine is executed until
+  termination. If the slave has the wrong vendor ID, the state machine
+  is restarted. $\rightarrow$~\textit{START}
+
+  If the slave has the correct vendor ID, its product ID is queried.
+  $\rightarrow$~\textit{VALIDATE PRODUCT}
+
+\item[VALIDATE PRODUCT] The SII state machine is executed until
+  termination. If the slave has the wrong product ID, the state
+  machine is restarted. $\rightarrow$~\textit{START}
+
+  If the slave has the correct product ID, the next slave's vendor ID
+  is queried. $\rightarrow$~\textit{VALIDATE VENDOR}
+
+  If all slaves have the correct vendor IDs and product codes, the
+  configured station addresses can be safely rewritten. This is done
+  for the first slave marked as offline.
+  $\rightarrow$~\textit{REWRITE ADDRESSES}
+
+\item[REWRITE ADDRESSES] If the station address was successfully
+  written, it is sear\-ched for the next slave marked as offline. If
+  there is one, its address is reconfigured, too.
+  $\rightarrow$~\textit{REWRITE ADDRESSES}
+
+  If there are no more slaves marked as offline, the state machine is
+  restarted. $\rightarrow$~\textit{START}
+\end{description}
+
+%------------------------------------------------------------------------------
+
+\subsection{The Idle State Machine}
+\label{sec:fsm-idle}
+\index{FSM!Idle}
+
+The Idle state machine is executed by a kernel workqueue, if no
+realtime module is connected. Its purpose is to make slave information
+available to user space, operate EoE-capable slaves, read and write
+E$^2$PROM contents and test slave functionality.
+Figure~\ref{fig:fsm-idle} shows its transition diagram.
+
+\begin{figure}[htbp]
+  \centering
+  \includegraphics[width=.8\textwidth]{images/fsm-idle}
+  \caption{Transition diagram of the idle state machine}
+  \label{fig:fsm-idle}
+\end{figure}
+
+\begin{description}
+\item[START] The beginning state of the idle state machine. Similar to
+  the operation state machine, a broadcast datagram is issued, to
+  query all slave states and the number of slaves.
+  $\rightarrow$~\textit{BROADCAST}
+
+\item[BROADCAST] The number of responding slaves is evaluated. If it
+  has changed since the last time, this is treated as a topology
+  change and the internal list of slaves is cleared and rebuild
+  completely. The slave scan state machine is started for the first
+  slave. $\rightarrow$~\textit{SCAN FOR SLAVES}
+
+  If no topology change happened, every single slave state is fetched.
+  $\rightarrow$~\textit{READ STATES}
+
+\item[SCAN FOR SLAVES] The slave scan state machine is executed until
+  termination. $\rightarrow$~\textit{SCAN FOR SLAVES}
+
+  If there is another slave to scan, the slave scan state machine is
+  started again. $\rightarrow$~\textit{SCAN FOR SLAVES}
+
+  If all slave information has been fetched, slave addresses are
+  calculated and EoE processing is started. Then, the state machine is
+  restarted. $\rightarrow$~\textit{START}
+
+\item[READ STATES] If the slave did not respond to the query, it is
+  marked as offline. The next slave is queried.
+  $\rightarrow$~\textit{READ STATES}
+
+  If the slave responded, it is marked as online. And the next slave
+  is queried. $\rightarrow$~\textit{READ STATES}
+
+  If all slave states have been determined, it is checked, if any
+  slaves are not in the state they supposed to be. If this is true,
+  the slave configuration state machine is started for the first of
+  them. $\rightarrow$~\textit{CONFIGURE SLAVES}
+
+  If all slaves are in the correct state, it is checked, if any
+  E$^2$PROM write operations are pending. If this is true, the first
+  pending operation is executed by starting the SII state machine for
+  writing access. $\rightarrow$~\textit{WRITE EEPROM}
+
+  If all these conditions are false, there is nothing to do and the
+  state machine is restarted. $\rightarrow$~\textit{START}
+
+\item[CONFIGURE SLAVES] The slave configuration state machine is
+  executed until termination. $\rightarrow$~\textit{CONFIGURE SLAVES}
+
+  After this, it is checked, if another slave needs a state change. If
+  this is true, the slave state change state machine is started for
+  this slave. $\rightarrow$~\textit{CONFIGURE SLAVES}
+
+  If all slaves are in the correct state, it is determined, if any
+  E$^2$PROM write operations are pending. If this is true, the first
+  pending operation is executed by starting the SII state machine for
+  writing access. $\rightarrow$~\textit{WRITE EEPROM}
+
+  If all prior conditions are false, the state machine is restarted.
+  $\rightarrow$~\textit{START}
+
+\item[WRITE EEPROM] The SII state machine is executed until
+  termination. $\rightarrow$~\textit{WRITE EEPROM}
+
+  If the current word has been written successfully, and there are
+  still word to write, the SII state machine is started for the next
+  word. $\rightarrow$~\textit{WRITE EEPROM}
+
+  If all words have been written successfully, the new E$^2$PROM
+  contents are evaluated and the state machine is restarted.
+  $\rightarrow$~\textit{START}
+
+\end{description}
+
+%------------------------------------------------------------------------------
+
+\subsection{The Slave Scan State Machine}
+\label{sec:fsm-scan}
+\index{FSM!Slave Scan}
+
+The slave scan state machine, which can be seen in
+figure~\ref{fig:fsm-slavescan}, leads through the process of fetching
+all slave information.
+
+\begin{figure}[htbp]
+  \centering
+  \includegraphics[width=.6\textwidth]{images/fsm-slavescan}
+  \caption{Transition diagram of the slave scan state machine}
+  \label{fig:fsm-slavescan}
+\end{figure}
+
+\begin{description}
+\item[START] In the beginning state of the slave scan state machine,
+  the station address is written to the slave, which is always the
+  ring position~+~$1$. In this way, the address 0x0000 (default
+  address) is not used, which makes it easy to detect unconfigured
+  slaves.  $\rightarrow$~\textit{ADDRESS}
+
+\item[ADDRESS] The writing of the station address is verified. After
+  that, the slave's ``AL Control Response'' attribute is queried.
+  $\rightarrow$~\textit{STATE}
+
+\item[STATE] The AL state is evaluated. A warning is output, if the
+  slave has still the \textit{Change} bit set. After that, the slave's
+  ``DL Information'' attribute is queried.
+  $\rightarrow$~\textit{BASE}
+
+\item[BASE] The queried base data are evaluated: Slave type, revision
+  and build number, and even more important, the number of supported
+  sync managers and FMMUs are stored. After that, the slave's data
+  link layer information is read from the ``DL Status'' attribute at
+  address 0x0110. $\rightarrow$~\textit{DATALINK}
+
+\item[DATALINK] In this state, the DL information is evaluated: This
+  information about the communication ports contains, if the link is
+  up, if the loop has been closed and if there is a carrier detected
+  on the RX side of each port.
+
+  Then, the state machine starts measuring the size of the slave's
+  E$^2$PROM contents. This is done by subsequently reading out each
+  category header, until the last category is reached (type 0xFFFF).
+  This procedure is started by querying the first category header at
+  word address 0x0040 via the SII state machine.
+  $\rightarrow$~\textit{EEPROM SIZE}
+
+\item[EEPROM SIZE] The SII state machine is executed until
+  termination. $\rightarrow$~\textit{EEPROM SIZE}
+
+  If the category type does not mark the end of the categories, the
+  position of the next category header is determined via the length of
+  the current category, and the SII state machine is started again.
+  $\rightarrow$~\textit{EEPROM SIZE}
+
+  If the size of the E$^2$PROM contents has been determined, memory is
+  allocated, to read all the contents. The SII state machine is
+  started to read the first word. $\rightarrow$~\textit{EEPROM DATA}
+
+\item[EEPROM DATA] The SII state machine is executed until
+  termination. $\rightarrow$~\textit{EEPROM DATA}
+
+  Two words have been read. If more than one word is needed, the two
+  words are written in the allocated memory. Otherwise only one word
+  (the last word) is copied. If more words are to read, the SII state
+  machine is started again to read the next two words.
+  $\rightarrow$~\textit{EEPROM DATA}
+
+  The complete E$^2$PROM contents have been read. The slave's identity
+  object and mailbox information are evaluated. Moreover the category
+  types STRINGS, GENERAL, SYNC and PDO are evaluated. The slave
+  scanning has been completed. $\rightarrow$~\textit{END}
+
+\item[END] Slave scanning has been finished.
+
+\end{description}
+
+%------------------------------------------------------------------------------
+
+\subsection{The Slave Configuration State Machine}
+\label{sec:fsm-conf}
+\index{FSM!Slave Configuration}
+
+The slave configuration state machine, which can be seen in
+figure~\ref{fig:fsm-slaveconf}, leads through the process of
+configuring a slave and bringing it to a certain state.
+
+\begin{figure}[htbp]
+  \centering
+  \includegraphics[width=.6\textwidth]{images/fsm-slaveconf}
+  \caption{Transition diagram of the slave configuration state
+    machine}
+  \label{fig:fsm-slaveconf}
+\end{figure}
+
+\begin{description}
+\item[INIT] The state change state machine has been initialized to
+  bring the slave into the \textit{INIT} state. Now, the slave state
+  change state machine is executed until termination.
+  $\rightarrow$~\textit{INIT}
+
+  If the slave state change failed, the configuration has to be
+  aborted. $\rightarrow$~\textit{END}
+
+  The slave state change succeeded and the slave is now in
+  \textit{INIT} state. If this is the target state, the configuration
+  is finished. $\rightarrow$~\textit{END}
+
+  If the slave does not support any sync managers, the sync manager
+  configuration can be skipped. The state change state machine is
+  started to bring the slave into \textit{PREOP} state.
+  $\rightarrow$~\textit{PREOP}
+
+  Sync managers are configured conforming to the sync manager category
+  information provided in the slave's E$^2$PROM. The corresponding
+  datagram is issued. $\rightarrow$~\textit{SYNC}
+
+\item[SYNC] If the sync manager configuration datagram is accepted,
+  the sync manager configuration was successful. The slave may now
+  enter the \textit{PREOP} state, and the state change state machine
+  is started. $\rightarrow$~\textit{PREOP}
+
+\item[PREOP] The state change state machine is executed until
+  termination. $\rightarrow$~\textit{PREOP}
+
+  If the state change failed, the configuration has to be aborted.
+  $\rightarrow$~\textit{END}
+
+  If the \textit{PREOP} state was the target state, the configuration
+  is finished. $\rightarrow$~\textit{END}
+
+  If the slave supports no FMMUs, the FMMU configuration can be
+  skipped. If the slave has SDOs to configure, it is begun with
+  sending the first SDO. $\rightarrow$~\textit{SDO\_CONF}
+
+  If no SDO configurations are provided, the slave can now directly be
+  brought into the \textit{SAVEOP} state and the state change state
+  machine is started again. $\rightarrow$~\textit{SAVEOP}
+
+  Otherwise, all supported FMMUs are configured according to the PDOs
+  requested via the master's realtime interface. The appropriate
+  datagram is issued. $\rightarrow$~\textit{FMMU}
+
+\item[FMMU] The FMMU configuration datagram was accepted. If the slave
+  has SDOs to configure, it is begun with sending the first SDO.
+  $\rightarrow$~\textit{SDO\_CONF}
+
+  Otherwise, the slave can now be brought into the \textit{SAVEOP}
+  state. The state change state machine is started.
+  $\rightarrow$~\textit{SAVEOP}
+
+\item[SDO\_CONF] The CoE state machine is executed until termination.
+  $\rightarrow$~\textit{SDO\_CONF}
+
+  If another SDO has to be configured, a new SDO download sequence is
+  begun. $\rightarrow$~\textit{SDO\_CONF}
+
+  Otherwise, the slave can now be brought into the \textit{SAVEOP}
+  state. The state change state machine is started.
+  $\rightarrow$~\textit{SAVEOP}
+
+\item[SAVEOP] The state change state machine is executed until
+  termination. $\rightarrow$~\textit{SAVEOP}
+
+  If the state change failed, the configuration has to be aborted.
+  $\rightarrow$~\textit{END}
+
+  If the \textit{SAVEOP} state was the target state, the configuration
+  is finished. $\rightarrow$~\textit{END}
+
+  The slave can now directly be brought into the \textit{OP} state and
+  the state change state machine is started a last time.
+  $\rightarrow$~\textit{OP}
+
+\item[OP] The state change state machine is executed until
+  termination. $\rightarrow$~\textit{OP}
+
+  If the state change state machine terminates, the slave
+  configuration is finished, regardless of its success.
+  $\rightarrow$~\textit{END}
+
+\item[END] The termination state.
+
+\end{description}
+
+%------------------------------------------------------------------------------
+
+\subsection{The State Change State Machine}
+\label{sec:fsm-change}
+\index{FSM!State Change}
+
+The state change state machine, which can be seen in
+figure~\ref{fig:fsm-change}, leads through the process of changing a
+slave's state. This implements the states and transitions described in
+\cite[section~6.4.1]{alspec}.
+
+\begin{figure}[htbp]
+  \centering
+  \includegraphics[width=.9\textwidth]{images/fsm-change}
+  \caption{Transition diagram of the state change state machine}
+  \label{fig:fsm-change}
+\end{figure}
+
+\begin{description}
+\item[START] The beginning state, where a datagram with the state
+  change command is written to the slave's ``AL Control Request''
+  attribute. Nothing can fail. $\rightarrow$~\textit{CHECK}
+
+\item[CHECK] After the state change datagram has been sent, the ``AL
+  Control Response'' attribute is queried with a second datagram.
+  $\rightarrow$~\textit{STATUS}
+
+\item[STATUS] The read memory contents are evaluated: While the
+  parameter \textit{State} still contains the old slave state, the
+  slave is busy with reacting on the state change command. In this
+  case, the attribute has to be queried again.
+  $\rightarrow$~\textit{STATUS}
+
+  In case of success, the \textit{State} parameter contains the new
+  state and the \textit{Change} bit is cleared. The slave is in the
+  requested state.  $\rightarrow$~\textit{END}
+
+  If the slave can not process the state change, the \textit{Change}
+  bit is set: Now the master tries to get the reason for this by
+  querying the \textit{AL Status Code} parameter.
+  $\rightarrow$~\textit{CODE}
+
+\item[END] If the state machine ends in this state, the slaves's state
+  change has been successful.
+
+\item[CODE] The status code query has been sent. Reading the
+  \textit{AL Status Code} might fail, because not all slaves support
+  this parameter. Anyway, the master has to acknowledge the state
+  change error by writing the current slave state to the ``AL Control
+  Request'' attribute with the \textit{Acknowledge} bit set.
+  $\rightarrow$~\textit{ACK}
+
+\item[ACK] After that, the ``AL Control Response'' attribute is
+  queried for the state of the acknowledgement.
+  $\rightarrow$~\textit{CHECK ACK}
+
+\item[CHECK ACK] If the acknowledgement has been accepted by the
+  slave, the old state is kept. Still, the state change was
+  unsuccessful. $\rightarrow$~\textit{ERROR}
+
+  If the acknowledgement is ignored by the slave, a timeout happens.
+  In any case, the overall state change was unsuccessful.
+  $\rightarrow$~\textit{ERROR}
+
+  If there is still now response from the slave, but the timer did not
+  run out yet, the slave's ``AL Control Response'' attribute is
+  queried again.  $\rightarrow$~\textit{CHECK ACK}
+
+\item[ERROR] If the state machine ends in this state, the slave's
+  state change was unsuccessful.
+
+\end{description}
+
+%------------------------------------------------------------------------------
+
+\subsection{The SII State Machine}
+\label{sec:fsm-sii}
+\index{FSM!SII}
+
+The SII\index{SII} state machine (shown in figure~\ref{fig:fsm-sii})
+implements the process of reading or writing E$^2$PROM data via the
+Slave Information Interface described in \cite[section~5.4]{alspec}.
+
+\begin{figure}[htbp]
+  \centering
+  \includegraphics[width=.9\textwidth]{images/fsm-sii}
+  \caption{Transition diagram of the SII state machine}
+  \label{fig:fsm-sii}
+\end{figure}
+
+\begin{description}
+\item[READ\_START] The beginning state for reading access, where the
+  read request and the requested address are written to the SII
+  attribute. Nothing can fail up to now.
+  $\rightarrow$~\textit{READ\_CHECK}
+
+\item[READ\_CHECK] When the SII read request has been sent
+  successfully, a timer is started. A check/fetch datagram is issued,
+  that reads out the SII attribute for state and data.
+  $\rightarrow$~\textit{READ\_FETCH}
+
+\item[READ\_FETCH] Upon reception of the check/fetch datagram, the
+  \textit{Read Operation} and \textit{Busy} parameters are checked:
+  \begin{itemize}
+  \item If the slave is still busy with fetching E$^2$PROM data into
+    the interface, the timer is checked. If it timed out, the reading
+    is aborted ($\rightarrow$~\textit{ERROR}), if not, the check/fetch
+    datagram is issued again. $\rightarrow$~\textit{READ\_FETCH}
+
+  \item If the slave is ready with reading data, these are copied from
+    the datagram and the read cycle is completed.
+    $\rightarrow$~\textit{END}
+  \end{itemize}
+\end{description}
+
+The write access states behave nearly the same:
+
+\begin{description}
+\item[WRITE\_START] The beginning state for writing access,
+  respectively. A write request, the target address and the data word
+  are written to the SII attribute. Nothing can fail.
+  $\rightarrow$~\textit{WRITE\_CHECK}
+
+\item[WRITE\_CHECK] When the SII write request has been sent
+  successfully, the timer is started. A check datagram is issued, that
+  reads out the SII attribute for the state of the write operation.
+  $\rightarrow$~\textit{WRITE\_CHECK2}
+
+\item[WRITE\_CHECK2] Upon reception of the check datagram, the
+  \textit{Write Operation} and \textit{Busy} parameters are checked:
+  \begin{itemize}
+  \item If the slave is still busy with writing E$^2$PROM data, the
+    timer is checked. If it timed out, the operation is aborted
+    ($\rightarrow$~\textit{ERROR}), if not, the check datagram is
+    issued again. $\rightarrow$~\textit{WRITE\_CHECK2}
+  \item If the slave is ready with writing data, the write cycle is
+    completed. $\rightarrow$~\textit{END}
+  \end{itemize}
+\end{description}
+
+%------------------------------------------------------------------------------
+
+\section{Mailbox Protocol Implementations}
+\index{Mailbox}
+
+The EtherCAT master implements the EoE and the CoE mailbox
+protocols. See the below section for details.
+
+%------------------------------------------------------------------------------
+
+\subsection{Ethernet-over-EtherCAT (EoE)}
+\label{sec:eoeimp}
+\index{EoE}
+
+The EtherCAT master implements the Ethernet-over-EtherCAT mailbox
+protocol to enable the tunneling of Ethernet frames to special slaves,
+that can either have physical Ethernet ports to forward the frames to,
+or have an own IP stack to receive the frames.
+
+\paragraph{Virtual Network Interfaces}
+
+The master creates a virtual EoE network interface for every
+EoE-capable slave. These interfaces are called \textit{eoeX}, where X
+is a number provided by the kernel on interface registration. Frames
+sent to these interfaces are forwarded to the associated slaves by the
+master. Frames, that are received by the slaves, are fetched by the
+master and forwarded to the virtual interfaces.
+
+This bears the following advantages:
+
+\begin{itemize}
+\item Flexibility: The user can decide, how the EoE-capable slaves are
+  interconnected with the rest of the world.
+\item Standard tools can be used to monitor the EoE activity and to
+  configure the EoE interfaces.
+\item The Linux kernel's layer-2-bridging implementation (according to
+  the IEEE 802.1D MAC Bridging standard) can be used natively to
+  bridge Ethernet traffic between EoE-capable slaves.
+\item The Linux kernel's network stack can be used to route packets
+  between EoE-capable slaves and to track security issues, just like
+  having physical network interfaces.
+\end{itemize}
+
+\paragraph{EoE Handlers}
+
+The virtual EoE interfaces and the related functionality is encapsuled
+in the \textit{ec\_eoe\_t} class (see section~\ref{sec:class-eoe}).
+So the master does not create the network interfaces directly: This is
+done inside the constructor of the \textit{ec\_eoe\_t} class. An
+object of this class is called ``EoE handler'' below. An EoE handler
+additionaly contains a frame queue. Each time, the kernel passes a new
+socket buffer for sending via the interface's
+\textit{hard\_start\_xmit()} callback, the socket buffer is queued for
+transmittion by the EoE state machine (see below). If the queue gets
+filled up, the passing of new socket buffers is suspended with a call
+to \textit{netif\_stop\_queue()}.
+
+\paragraph{Static Handler Creation}
+
+The master creates a pool of EoE handlers at startup, that are coupled
+to EoE-capable slaves on demand. The lifetime of the corresponding
+network interfaces is equal to the lifetime of the master module.
+This approach is opposed to creating the virtual network interfaces on
+demand (i.~e. on running across a new EoE-capable slave). The latter
+approach was considered as difficult, because of serveral reasons:
+
+\begin{itemize}
+\item The \textit{alloc\_netdev()} function can sleep and must be
+  called from a non-interrupt context. This reduces the flexibility of
+  choosing an appropriate method for cyclic EoE processing.
+\item Unregistering network interfaces requires them to be ``down'',
+  which can not be guaranteed upon sudden disappearing of an
+  EoE-capable slave.
+\item The connection to the EoE-capable slaves must be as continuous
+  as possible. Especially the transition from idle to operation mode
+  (and vice versa) causes the rebuilding of the internal data
+  structures. These transitions must be as transparent as possible for
+  the instances using the network interfaces.
+\end{itemize}
+
+\paragraph{Number of Handlers}
+
+The master module has a parameter \textit{ec\_eoeif\_count} to specify
+the number of EoE interfaces (and handlers) per master to create. This
+parameter can either be specified when manually loading the master
+module, or (when using the init script) by setting the
+\textit{\$EOE\_INTERFACES} variable in the sysconfig file (see
+section~\ref{sec:sysconfig}). Upon loading of the master module, the
+virtual interfaces become available:
+
+\begin{lstlisting}
+  host# `\textbf{ifconfig -a}`
+  eoe0      Link encap:Ethernet  HWaddr 00:11:22:33:44:06
+            BROADCAST MULTICAST  MTU:1500  Metric:1
+            RX packets:0 errors:0 dropped:0 overruns:0 frame:0
+            TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
+            collisions:0 txqueuelen:1000
+            RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
+
+  eoe1      Link encap:Ethernet  HWaddr 00:11:22:33:44:07
+            BROADCAST MULTICAST  MTU:1500  Metric:1
+            RX packets:0 errors:0 dropped:0 overruns:0 frame:0
+            TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
+            collisions:0 txqueuelen:1000
+            RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
+  ...
+\end{lstlisting}
+
+\paragraph{Coupling of EoE Slaves}
+
+During execution of the slave scan state machine (see
+section~\ref{sec:fsm-scan}), the master determines the supported
+mailbox protocols. This is done by examining the ``Supported Mailbox
+Protocols'' mask field at word address 0x001C of the SII\index{SII}.
+If bit 1 is set, the slave supports the EoE protocol. After slave
+scanning, the master runs through all slaves again and couples each
+EoE-capable slave to a free EoE handler. It can happen, that there are
+not enough EoE handlers to cover all EoE-capable slaves. In this case,
+the number of EoE handlers must be increased accordingly.
+
+\paragraph{EoE State Machine}
+\index{FSM!EoE}
+
+Every EoE handler owns an EoE state machine, that is used to send
+frames to the coupled slave and receive frames from the it via the EoE
+communication primitives. This state machine is showed in
+figure~\ref{fig:fsm-eoe}.
+
+\begin{figure}[htbp]
+  \centering
+  \includegraphics[width=.7\textwidth]{images/fsm-eoe}
+  \caption{Transition diagram of the EoE state machine}
+  \label{fig:fsm-eoe}
+\end{figure}
+
+\begin{description}
+\item[RX\_START] The beginning state of the EoE state machine. A
+  mailbox check datagram is sent, to query the slave's mailbox for new
+  frames. $\rightarrow$~\textit{RX\_CHECK}
+
+\item[RX\_CHECK] The mailbox check datagram is received. If the
+  slave's mailbox did not contain data, a transmit cycle is started.
+  $\rightarrow$~\textit{TX\_START}
+
+  If there are new data in the mailbox, a datagram is sent to fetch
+  the new data. $\rightarrow$~\textit{RX\_FETCH}
+
+\item[RX\_FETCH] The fetch datagram is received. If the mailbox data
+  do not contain a ``EoE Fragment request'' command, the data are
+  dropped and a transmit sequence is started.
+  $\rightarrow$~\textit{TX\_START}
+
+  If the received Ethernet frame fragment is the first fragment, a new
+  socket buffer is allocated. In either case, the data are copied into
+  the correct position of the socket buffer.
+
+  If the fragment is the last fragment, the socket buffer is forwarded
+  to the network stack and a transmit sequence is started.
+  $\rightarrow$~\textit{TX\_START}
+
+  Otherwise, a new receive sequence is started to fetch the next
+  fragment. $\rightarrow$~\textit{RX\_\-START}
+
+\item[TX\_START] The beginning state of a transmit sequence. It is
+  checked, if the transmittion queue contains a frame to send. If not,
+  a receive sequence is started. $\rightarrow$~\textit{RX\_START}
+
+  If there is a frame to send, it is dequeued. If the queue was
+  inactive before (because it was full), the queue is woken up with a
+  call to \textit{netif\_wake\_queue()}. The first fragment of the
+  frame is sent. $\rightarrow$~\textit{TX\_SENT}
+
+\item[TX\_SENT] It is checked, if the first fragment was sent
+  successfully. If the current frame consists of further fragments,
+  the next one is sent. $\rightarrow$~\textit{TX\_SENT}
+
+  If the last fragment was sent, a new receive sequence is started.
+  $\rightarrow$~\textit{RX\_START}
+\end{description}
+
+\paragraph{EoE Processing}
+
+To execute the EoE state machine of every active EoE handler, there
+must be a cyclic process. The easiest thing would be to execute the
+EoE state machines synchronously to the operation state machine (see
+section~\ref{sec:fsm-op}) with every realtime cycle. This approach has
+the following disadvantages:
+
+\begin{itemize}
+\item Only one EoE fragment can be sent or received every few cycles.
+  This causes the data rate to be very low, because the EoE state
+  machines are not executed in the time between the realtime
+  cycles. Moreover, the data rate would be dependent on the frequency
+  of the realtime process.
+\item The receiving and forwarding of frames to the kernel requires
+  the dynamic allocation of frames. Some realtime extensions do not
+  support calling memory allocation functions in realtime context, so
+  the EoE state machine may not be executed with each realtime cycle.
+\end{itemize}
+
+To overcome these problems, an own cyclic process is needed to
+asynchronously execute the EoE state machines. For that, the master
+owns a kernel timer, that is executed each timer interrupt. This
+guarantees a constant bandwidth, but poses the new problem of
+concurrent access to the master. The locking mechanisms needed for
+this are introduced in section~\ref{sec:concurr}.
+Section~\ref{sec:concurrency} gives practical implementation examples.
+
+\paragraph{Idle Mode}
+
+EoE data must also be exchanged idle mode, to guarantee the continuous
+availability of the connection to the EoE-capable slaves. Although
+there is no realtime module connected in this case, the master is
+still accessed by the idle state machine (see
+section~\ref{sec:fsm-idle}), that is executed by the master's
+workqueue. With the EoE timer running in addition, there is still
+concurrency, that has to be protected by a lock. Therefore the master
+owns an internal spinlock that is used protect master access during
+idle mode.
+
+\paragraph{Automatic Configuration}
+
+By default, slaves are left in \textit{INIT} state during idle mode.
+If an EoE interface is set to running state (i.~e. with the
+\textit{ifconfig up} command), the requested slave state of the
+related slave is automatically set to \textit{OP}, whereupon the idle
+state machine will attempt to configure the slave and put it into
+operation.
+
+%------------------------------------------------------------------------------
+
+\subsection{CANopen-over-EtherCAT (CoE)}
+\label{sec:coeimp}
+\index{CoE}
+
+The CANopen-over-EtherCAT protocol \cite[section~5.6]{alspec} is used
+to configure slaves on application level. Each CoE-capable slave
+provides a list of SDOs for this reason.
+
+\paragraph{SDO Configuration}
+
+The SDO configurations have to be provided by the realtime module.
+This is done via the \textit{ecrt\_slave\_conf\_sdo*()} methods (see
+section~\ref{sec:ecrt-slave}), that are part of the realtime
+interface. The slave stores the SDO configurations in a linked list,
+but does not apply them at once.
+
+\paragraph{SDO Download State Machine}
+
+The best time to apply SDO configurations is during the slave's
+\textit{PREOP} state, because mailbox communication is already
+possible and slave's application will start with updating input data
+in the succeeding \textit{SAVEOP} state. Therefore the SDO
+configuration has to be part of the slave configuration state machine
+(see section~\ref{sec:fsm-conf}): It is implemented via an SDO
+download state machine, that is executed just before entering the
+slave's \textit{SAVEOP} state. In this way, it is guaranteed that the
+SDO configurations are applied each time, the slave is reconfigured.
+
+The transition diagram of the SDO Download state machine can be seen
+in figure~\ref{fig:fsm-coedown}.
+
+\begin{figure}[htbp]
+  \centering
+  \includegraphics[width=.9\textwidth]{images/fsm-coedown}
+  \caption{Transition diagram of the CoE download state machine}
+  \label{fig:fsm-coedown}
+\end{figure}
+
+\begin{description}
+\item[START] The beginning state of the CoE download state
+  machine. The ``SDO Download Normal Request'' mailbox command is
+  sent. $\rightarrow$~\textit{REQUEST}
+
+\item[REQUEST] It is checked, if the CoE download request has been
+  received by the slave. After that, a mailbox check command is issued
+  and a timer is started. $\rightarrow$~\textit{CHECK}
+
+\item[CHECK] If no mailbox data is available, the timer is checked.
+  \begin{itemize}
+  \item If it timed out, the SDO download is aborted.
+    $\rightarrow$~\textit{ERROR}
+  \item Otherwise, the mailbox is queried again.
+    $\rightarrow$~\textit{CHECK}
+  \end{itemize}
+
+  If the mailbox contains new data, the response is fetched.
+  $\rightarrow$~\textit{RESPONSE}
+
+\item[RESPONSE] If the mailbox response could not be fetched, the data
+  is invalid, the wrong protocol was received, or a ``Abort SDO
+  Transfer Request'' was received, the SDO download is aborted.
+  $\rightarrow$~\textit{ERROR}
+
+  If a ``SDO Download Normal Response'' acknowledgement was received,
+  the SDO download was successful. $\rightarrow$~\textit{END}
+
+\item[END] The SDO download was successful.
+
+\item[ERROR] The SDO download was aborted due to an error.
+
+\end{description}
+
+%------------------------------------------------------------------------------
+
+\section{User Space}
+\label{sec:user}
+\index{User space}
+
+For the master runs as a kernel module, accessing it is natively
+limited to analyzing syslog messages and controlling using modutils.
+
+It is necessary to implement further interfaces, that make it easier
+to access the master from user space and allow a finer influence. It
+should be possible to view and to change special parameters at runtime.
+
+Bus visualization is a second point: For development and debugging
+purposes it would be nice, if one could show the connected slaves with
+a single command.
+
+Another aspect is automatic startup and configuration. If the master
+is to be integrated into a running system, it must be able to
+automatically start with a persistent configuration.
+
+A last thing is monitoring EtherCAT communication. For debugging
+purposes, there had to be a way to analyze EtherCAT datagrams. The
+best way would be with a popular network analyzer, like Wireshark
+\cite{wireshark} (the former Ethereal) or others.
+
+This section covers all those points and introduces the interfaces and
+tools to make all that possible.
+
+%------------------------------------------------------------------------------
+
+\subsection{The Sysfs Interface}
+\label{sec:sysfs}
+
+The system filesystem (Sysfs\index{Sysfs}) was introduced with Linux
+kernel 2.5 and is a well-defined interface for drivers to export
+information to user space. It serves also as an relief for the process
+filesystem (Procfs), where over the years much non-process information
+was concentrated.
+
+Sysfs exports information about devices, classes and busses via a
+virtual filesystem, usually mounted to \textit{/sys}. The EtherCAT
+master slightly differs from this concept, because the only physical
+device is the network adapter it uses for bus communication, which is
+already represented in Sysfs. For the EtherCAT bus is no system bus
+like PCI (with device and driver structures), it would not make any
+sense to represent it as bus structure in Sysfs.
+
+Therefore, the EtherCAT master is represented as a new directory
+directly unter the Sysfs root. Every master gets its own Sysfs entry
+named \textit{ethercatX}, where X is the index of the master. Two
+masters would result in the directories \textit{/sys/ethercat0} and
+\textit{/sys/ethercat1}, respectively.
+
+The Sysfs base class in the kernel code is the \textit{kobject}
+structure. Each object structure, that is to be represented in Sysfs,
+has to contain such a structure, because due to the concurrent access
+(through ``normal'' kernel code and Sysfs code) the object deletion
+gets a little more complicated: The object may not be freed until no
+instance uses it any more. Therefore, each kobject maintains a
+reference counter. If the reference counter gets zero, the object is
+finally freed. A kobject can be registered to appear as a directory in
+Sysfs with a call to \textit{kobject\_add()}. Each kobject type can
+define attributes, that appear as files in the kobject's
+directory. Callback functions have to be provided for reading (and
+perhaps writing) access.
+
+\subsubsection{Master Attributes}
+\label{sec:sysfs-master}
+
+Below is a typical listing of the masters Sysfs directory (that is a
+file system representation of the master's kobject):
+
+\begin{lstlisting}
+  host> `\textbf{ls /sys/ethercat0}`
+  debug_level          slave000  slave003  slave006
+  eeprom_write_enable  slave001  slave004  slave007
+  info                 slave002  slave005  slave008
+\end{lstlisting}
+
+The following attributes exist in the master directory:
+
+\begin{description}
+\item[debug\_level] (read/write) This attribute contains the master's
+  debug level, which controls, how much information is printed into
+  syslog. The values 0 (no additional debug messages), 1 (a few
+  additional debug messages) and 2 (all additional debug messages) are
+  defined. Writing is done with command like
+
+  \begin{lstlisting}[gobble=4]
+    host# `\textbf{echo 1 > /sys/ethercat0/debug\_level}`
+  \end{lstlisting}
+
+  and is receipted with a syslog message by the master:
+
+  \begin{lstlisting}[gobble=4]
+    EtherCAT: Master debug level set to 1.
+  \end{lstlisting}
+
+\item[enable\_eeprom\_writing] (read/write) See
+  section~\ref{sec:eepromaccess} for how to use this attribute.
+
+\item[info] (read only) This attribute contains information about the
+  master. Example contents are below:
+
+  \begin{lstlisting}[gobble=4]
+    host> `\textbf{cat /sys/ethercat0/info}`
+
+    Mode: IDLE
+    Slaves: 9
+
+    Timing (min/avg/max) [us]:
+      Idle cycle: 4 / 4.38 / 34
+      EoE cycle: 9 / 11.91 / 23
+
+    EoE statistics (RX/TX) [bps]:
+      eoe0: 0 / 3184
+  \end{lstlisting}
+
+  The mode can be \textit{ORPHANED}, \textit{IDLE} or
+  \textit{OPERATION}. The other parameters are self-explanatory.
+
+\end{description}
+
+\subsubsection{Domain Attributes}
+\label{sec:sysfs-domain}
+
+In operation mode, each created domain is represented as a directory
+\textit{domainX}, where X is the domain index. Below is a listing of
+the domain directory contents:
+
+\begin{lstlisting}
+  host> `\textbf{ls /sys/ethercat0/domain0}`
+  image_size
+\end{lstlisting}
+
+The domain directories currently only export the domain's image size.
+It is planned to export the whole process data mapping for debugging
+purposes.
+
+\subsubsection{Slave Attributes}
+\label{sec:sysfs-slave}
+
+Each slave on the bus is represented in its own directory
+\textit{slaveXXX}, where XXX is the slave's 3-digit ring position in
+the EtherCAT bus. Below is a listing of a slave directory:
+
+\begin{lstlisting}
+  host> `\textbf{ls /sys/ethercat0/slave003}`
+  eeprom  info  state
+\end{lstlisting}
+
+\begin{description}
+\item[eeprom] (read/write) See section~\ref{sec:eepromaccess} for how
+  to use this attribute.
+
+\item[info] (read only) This attribute contains a bunch of information
+  about the slave. Below is an example output:
+
+  \begin{lstlisting}[gobble=4]
+    host> `\textbf{cat /sys/ethercat0/slave003/info}`
+
+    Name: EL4132 2K. Ana. Ausgang +/-10V
+    Vendor ID: 0x00000002
+    Product code: 0x10243052
+
+    State: INIT
+    Ring position: 3
+    Advanced position: 1:3
+
+    Data link status:
+      Port 0 (EBUS) Link down, Loop open, Signal detected
+      Port 1 (EBUS) Link down, Loop open, Signal detected
+      Port 2 (EBUS) Link down, Loop closed, No signal
+      Port 3 (EBUS) Link down, Loop closed, No signal
+
+    Mailboxes:
+      RX mailbox: 0x1800/246, TX mailbox: 0x18F6/246
+      Supported protocols: CoE, FoE
+
+    SII data:
+      Group: AnaOut
+      Image: TERM_AO
+      Order#: EL4132
+
+    Sync-Managers:
+      0: 0x1800, length 246, control 0x26, enable
+      1: 0x18F6, length 246, control 0x22, enable
+      2: 0x1000, length 0, control 0x24, enable
+      3: 0x1100, length 0, control 0x20, enable
+
+    PDOs:
+      RXPDO "Channel 1" (0x1600), Sync-Manager 2
+        "Output" 0x6411:1, 16 bit
+      RXPDO "Channel 2" (0x1601), Sync-Manager 2
+        "Output" 0x6411:2, 16 bit
+  \end{lstlisting}
+
+  This is nearly all of the SII category information needed to
+  configure the slave, supplemented with state and addressing
+  information.
+
+\item[state] (read/write) This attribute contains the slave's state.
+  It can be read or written:
+
+  \begin{lstlisting}[gobble=4]
+    host# `\textbf{cat /sys/ethercat0/slave003/state}`
+    OP
+    host# `\textbf{echo SAVEOP > /sys/ethercat0/slave003/state}`
+  \end{lstlisting}
+
+  This command should also be receipted with a syslog message:
+
+  \begin{lstlisting}[gobble=4]
+    EtherCAT: Accepted new state SAVEOP for slave 3.
+    EtherCAT: Changing state of slave 3 from OP to SAVEOP.
+    EtherCAT: Slave states: INIT, SAVEOP, OP.
+  \end{lstlisting}
+
+  After the new requested state was accepted from user space, the
+  operation state machine (see section~\ref{sec:fsm-op}) or the idle
+  state machine (section~\ref{sec:fsm-idle}) notices, that the
+  requested slave state differs from the current one, and therefore
+  executes the slave configuration state machine, until the slave has
+  reached the requested state.
+\end{description}
+
+%------------------------------------------------------------------------------
+
+\subsubsection{E$^2$PROM Access}
+\label{sec:eepromaccess}
+\index{E$^2$PROM!Access}
+
+It is possible to directly read or write the complete E$^2$PROM
+contents of the slaves. This was introduced for the reasons below:
+
+\begin{itemize}
+\item The format of the E$^2$PROM data is still in development and
+  categories can be added in the future. With read and write access,
+  the complete memory contents can be easily backed up and restored.
+\item Some E$^2$PROM data fields have to be altered (like the alias
+  address). A quick writing must be possible for that.
+\item Through read access, analyzing category data is possible from
+  user space.
+\end{itemize}
+
+Reading out E$^2$PROM data is as easy as reading other
+attributes. Though the data are in binary format, analyzation is
+easier with a tool like \textit{hexdump}:
+
+\begin{lstlisting}
+  host> `\textbf{cat /sys/ethercat0/slave003/eeprom | hexdump}`
+  0000000 0103 0000 0000 0000 0000 0000 0000 008c
+  0000010 0002 0000 3052 07f0 0000 0000 0000 0000
+  0000020 0000 0000 0000 0000 0000 0000 0000 0000
+  ...
+\end{lstlisting}
+
+Backing up E$^2$PROM contents gets as easy as copying a file:
+
+\begin{lstlisting}
+  host> `\textbf{cp /sys/ethercat0/slave003/eeprom slave003.eep}`
+\end{lstlisting}
+
+Writing access is only possible as \textit{root}. Moreover writing has
+to be explicitly enabled and is only allowed in idle mode. This is a
+safety measure, because without the correct memory contents, a slave
+is unusable. Writing E$^2$PROM contents in operation mode is not
+provided yet.
+
+E$^2$PROM writing is enabled with the command below:
+
+\begin{lstlisting}
+  host# `\textbf{echo 1 > /sys/ethercat0/eeprom\_write\_enable}`
+\end{lstlisting}
+
+The success can be seen in the syslog messages again:
+
+\begin{lstlisting}
+  EtherCAT: Slave EEPROM writing enabled.
+\end{lstlisting}
+
+Now, it is possible to write E$^2$PROM contents to a slave. The master
+will accept data through the \textit{eeprom} file and will perform a
+short validation of the contents, before starting the write operation.
+This validation checks the complete size and the category headers.
+
+\begin{lstlisting}
+  host# `\textbf{cat slave003.eep > /sys/ethercat0/slave003/eeprom}`
+\end{lstlisting}
+
+The write operation can take a few seconds.
+
+\begin{lstlisting}
+  EtherCAT: EEPROM writing scheduled for slave 3, 88 words.
+  EtherCAT: Writing EEPROM of slave 3...
+  EtherCAT: Finished writing EEPROM of slave 3.
+\end{lstlisting}
+
+%------------------------------------------------------------------------------
+
+\subsection{User Space Tools}
+\index{User space!Tools}
+
+There is a user space tool called \textit{lsec}\index{lsec} (``List
+EtherCAT'') to visualize the EtherCAT bus. Running it usually results
+in an output like this:
+
+\begin{lstlisting}
+  host> `\textbf{lsec}`
+  EtherCAT bus listing for master 0:
+     0  1:0  OP      EK1100 Ethernet Kopplerklemme (2A E-Bus)
+     1  1:1  INIT    EL4132 2K. Ana. Ausgang +/-10V
+     2  1:2  INIT    EL4132 2K. Ana. Ausgang +/-10V
+     3  1:3  SAVEOP  EL4132 2K. Ana. Ausgang +/-10V
+     4  1:4  INIT    EL5101 Incremental Encoder Interface
+     5  1:5  INIT    EL1014 4K. Dig. Eingang 24V, 10s
+     6  1:6  OP      EL6601 1 Port Switch (Ethernet, CoE)
+     7  1:7  INIT    EL5101 Incremental Encoder Interface
+     8  1:8  INIT    EL5001 1K. SSI Encoder
+\end{lstlisting}
+
+Every slave is displayed as one text row. The first column shows its
+ring position, the second displays the ``advanced position address''
+(see section~\ref{sec:addr}) and the third column displays the current
+slave state. The last column is the slave's name, as it appears in the
+``general'' E$^2$PROM category.
+
+The lsec program is a Perl script, that evaluates the Sysfs
+\textit{info} attributes of the slaves (see
+section~\ref{sec:sysfs-slave}). This is done for master $0$ by
+default, but the master index can be specified via command line:
+
+\begin{lstlisting}
+  host> `\textbf{lsec -h}`
+  Usage: ec_list [OPTIONS]
+          -m <IDX>    Query master <IDX>.
+          -h          Show this help.
+\end{lstlisting}
+
+This script has proved as useful for troubleshooting: If it displays
+slaves, the master is up and running, and the bus connection is
+present, too. It is also useful when building up a bus: It can verify
+the list of slaves and help to create a process data image (see
+chapter~\ref{chapter:usage}).
+
+%------------------------------------------------------------------------------
+
+\subsection{System Integration}
+\label{sec:system}
+
+To integrate the EtherCAT master into a running system, it has to be
+guaranteed, that it is started on system startup. In addition, there has
+to be a persistent configuration, that is also applied on startup.
+
+\subsubsection{The EtherCAT Init Script}
+\label{sec:init}
+\index{Init script}
+
+The EtherCAT master provides an ``init script'', that conforms to the
+requirements of the ``Linux Standard Base'' (LSB\index{LSB},
+\cite{lsb}). The script is installed to \textit{/etc/init.d/ethercat},
+so that the master can be easily inserted as a service. The different
+Linux distributions offer different ways to mark the service for
+starting and stopping in certain runlevels (for example, SUSE provides
+the \textit{insserv} command).
+
+To provide service dependencies (i.~e. which services have to be
+started before) right inside the init script code, LSB defines a
+special comment block. System tools can extract this information to
+insert the EtherCAT init script at the correct place in the startup
+sequence:
+
+\begin{lstlisting}
+  ### BEGIN INIT INFO
+  # Provides:          ethercat
+  # Required-Start:    $local_fs $syslog $network
+  # Should-Start:      $time
+  # Required-Stop:     $local_fs $syslog $network
+  # Should-Stop:       $time
+  # Default-Start:     3 5
+  # Default-Stop:      0 1 2 6
+  # Short-Description: EtherCAT master modules
+  # Description:
+  ### END INIT INFO
+\end{lstlisting}
+
+The init script can also be used for manually starting and stopping
+the EtherCAT master. It has to be executed with one of the parameters
+\textit{start}, \textit{stop}, \textit{restart} or \textit{status}.
+Besides, a link to the script is placed at
+\textit{/usr/sbin/rcethercat} for easier access.
+
+\begin{lstlisting}
+  host# `\textbf{/etc/init.d/ethercat restart}`
+  Shutting down EtherCAT master                done
+  Starting EtherCAT master                     done
+\end{lstlisting}
+
+\subsubsection{The EtherCAT Sysconfig File}
+\label{sec:sysconfig}
+\index{Sysconfig file}
+
+For persistent configuration, the init script uses a sysconfig file
+installed to \textit{/etc/sys\-config/ethercat}, that is mandatory for
+the init script. The sysconfig file contains all configuration
+variables needed to operate a master:
+
+\begin{description}
+\item[DEVICE\_INDEX] This variable must contain the PCI index of the
+  EtherCAT device.  Setting this is mandatory for the EtherCAT init
+  script. Default: $-1$
+\item[EOE\_INTERFACES] The number of virtual Ethernet-over-EtherCAT
+  interfaces, every master creates on startup. See
+  section~\ref{sec:eoeimp}. Default: $0$
+\item[EOE\_BRIDGE] If this variable is set, all EoE interfaces will be
+  added to a network bridge according to IEEE 802.1D after master
+  startup. The variable must contain the name of the bridge. To use
+  this functionality, the kernel must be configured with the
+  \textit{CONFIG\_BRIDGE} option and the \textit{bridge-utils} package
+  must be installed (i.~e. the \textit{brctl} command is needed).
+\item[EOE\_IP\_ADDRESS] The IP address of the EoE bridge. Setting this
+  together with \textit{EOE\_IP\_NETMASK} will let the local host
+  communicate with devices on the EoE bridge.
+\item[EOE\_IP\_NETMASK] IP netmask of the EoE bridge.
+\item[EOE\_EXTRA\_INTERFACES] The list of extra interfaces to include
+  in the EoE brid\-ge. Set this to interconnect the EoE bridge with
+  other local interfaces. If \textit{EOE\_\-BRIDGE} is empty or
+  undefined, setting this variable has no effect. Important: The IP
+  address of the listed interfaces will be cleared. Setting
+  \textit{EOE\_\-IP\_\-ADDRESS} and \textit{EOE\_IP\_NETMASK} will
+  re-enable them for IP traffic.
+\item[EOE\_GATEWAY] The IP address of the default gateway. If this
+  variable is set, the gateway will be renewed after bridge
+  installation. This is necessary, if the default gateway's interface
+  is one of the \textit{EOE\_EXTRA\_INTERFACES}.
+\end{description}
+
+%------------------------------------------------------------------------------
+
+\subsection{Monitoring and Debugging}
+\label{sec:debug}
+\index{Monitoring}
+
+For debugging purposes, every EtherCAT master registeres a read-only
+network interface \textit{ecX}, where X is a number, provided by the
+kernel on device registration. While it is ``up'', the master forwards
+every frame sent and received to this interface.
+
+This makes it possible to connect an network monitor (like Wireshark
+or tcpdump) to the debug interface and monitor the EtherCAT frames.
+
+It has to be considered, that can be frame rate can be very high. The
+idle state machine usually runs every kernel timer interrupt (up to
+$1$~kHz) and with a connected realtime module, the rate can be even
+higher.
+
+\paragraph{Attention:} The socket buffers needed for the operation of
+the debugging interface have to be allocated dynamically. Some Linux
+realtime extensions do not allow this in realtime context!
+
+%------------------------------------------------------------------------------
+
+\section{Timing Aspects}
+\label{sec:timing}
+
+Although EtherCAT's timing is highly deterministic and therefore
+timing issues are rare, there are a few aspects that can (and should
+be) dealt with.
+
+%------------------------------------------------------------------------------
+
+\subsection{Realtime Interface Profiling}
+\label{sec:timing-profile}
+\index{Realtime!Profiling}
+
+One of the most important timing aspects are the runtimes of the
+realtime interface functions, that are called in cyclic context. These
+functions make up an important part of the overall timing of the
+realtime module. To measure the timing of the functions, the following
+code was used:
+
+\begin{lstlisting}[gobble=2,language=C]
+  c0 = get_cycles();
+  ecrt_master_receive(master);
+  c1 = get_cycles();
+  ecrt_domain_process(domain1);
+  c2 = get_cycles();
+  ecrt_master_run(master);
+  c3 = get_cycles();
+  ecrt_master_send(master);
+  c4 = get_cycles();
+\end{lstlisting}
+
+Between each call of an interface function, the CPU timestamp counter
+is read. The counter differences are converted to microseconds with
+help of the \textit{cpu\_khz} variable, that contains the number of
+increments per millisecond.
+
+For the actual measuring, a system with a $2.0$~GHz CPU was used, that
+ran the above code in an RTAI thread with a cycle time of $100$
+\textmu s.  The measuring was repeated $n = 100$ times and the results
+were averaged. These can be seen in table~\ref{tab:profile}.
+
+\begin{table}[htpb]
+  \centering
+  \caption{Profiling of a Realtime Cycle on a $2.0$~GHz Processor}
+  \label{tab:profile}
+  \vspace{2mm}
+  \begin{tabular}{l|r|r}
+    Element & Mean Duration [\textmu s] & Standard Deviancy [\textmu s] \\
+    \hline
+    \textit{ecrt\_master\_receive()} & 8.04 & 0.48\\
+    \textit{ecrt\_domain\_process()} & 0.14 & 0.03\\
+    \textit{ecrt\_master\_run()} & 0.29 & 0.12\\
+    \textit{ecrt\_master\_send()} & 2.18 & 0.17\\ \hline
+    Complete Cycle & 10.65 & 0.69\\ \hline
+  \end{tabular}
+\end{table}
+
+It is obvious, that the the functions accessing hardware make up the
+lion's share. The \textit{ec\_master\_receive()} executes the ISR of
+the Ethernet device, analyzes datagrams and copies their contents into
+the memory of the datagram objects. The \textit{ec\_master\_send()}
+assembles a frame out of different datagrams and copies it to the
+hardware buffers. Interestingly, this makes up only a quarter of the
+receiving time.
+
+The functions that only operate on the masters internal data
+structures are very fast ($\Delta t < 1$~\textmu s). Interestingly the
+runtime of \textit{ec\_domain\_process()} has a small standard
+deviancy relative to the mean value, while this ratio is about twice
+as big for \textit{ec\_master\_run()}: This probably results from the
+latter function having to execute code depending on the current state
+and the different state functions are more or less complex.
+
+For a realtime cycle makes up about $10$~\textmu s, the theoretical
+frequency can be up to $100$~kHz. For two reasons, this frequency
+keeps being theoretical:
+
+\begin{enumerate}
+\item The processor must still be able to run the operating system
+  between the realtime cycles.
+\item The EtherCAT frame must be sent and received, before the next
+  realtime cycle begins. The determination of the bus cycle time is
+  difficult and covered in section~\ref{sec:timing-bus}.
+\end{enumerate}
+
+%------------------------------------------------------------------------------
+
+\subsection{Bus Cycle Measuring}
+\label{sec:timing-bus}
+\index{Bus cycle}
+
+For measuring the time, a frame is ``on the wire'', two timestamps
+must be be taken:
+
+\begin{enumerate}
+\item The time, the Ethernet hardware begins with physically sending
+  the frame.
+\item The time, the frame is completely received by the Ethernet
+  hardware.
+\end{enumerate}
+
+Both times are difficult to determine. The first reason is, that the
+interrupts are disabled and the master is not notified, when a frame
+is sent or received (polling would distort the results). The second
+reason is, that even with interrupts enabled, the time from the event
+to the notification is unknown. Therefore the only way to confidently
+determine the bus cycle time is an electrical measuring.
+
+Anyway, the bus cycle time is an important factor when designing
+realtime code, because it limits the maximum frequency for the cyclic
+part of the realtime module. In practice, these timing parameters are
+highly dependent on the hardware and often a trial and error method
+must be used to determine the limits of the system.
+
+The central question is: What happens, if the cycle frequency is too
+high? The answer is, that the EtherCAT frames that have been sent at
+the end of the cycle are not yet received, when the next cycle starts.
+First this is noticed by \textit{ecrt\_domain\_process()}, because the
+working counter of the process data datagrams were not increased. The
+function will notify the user via syslog\footnote{To limit syslog
+  output, a mechanism has been implementet, that outputs a summarized
+  notification at maximum once a second.}. In this case, the process
+data keeps being the same as in the last cycle, because it is not
+erased by the domain. When the domain datagrams are queued again, the
+master notices, that they are already queued (and marked as sent). The
+master will mark them as unsent again and output a warning, that
+datagrams were ``skipped''.
+
+On the mentioned $2.0$~GHz system, the possible cycle frequency can be
+up to $25$~kHz without skipped frames. This value can surely be
+increased by choosing faster hardware. Especially the RealTek network
+hardware could be replaced by a faster one. Besides, implementing a
+dedicated ISR for EtherCAT devices would also contribute to increasing
+the latency. These are two points on the author's to-do list.
+
+%------------------------------------------------------------------------------
+
+\chapter{Using the EtherCAT Master}
+\label{chapter:usage}
+\index{Master!Usage}
+
+This chapter will give practical examples of how to use the EtherCAT
+master via the realtime interface by writing a realtime module.
+
+Section~\ref{sec:make} shows how to compile and install the master,
+while the sections~\ref{sec:mini} to~\ref{sec:concurrency} give
+examples for different realtime modules.
+
+%------------------------------------------------------------------------------
+
+\section{Compiling and Installing}
+\label{sec:make}
+\index{Master!Compilation}
+
+The current EtherCAT master code is available at~\cite{etherlab}.
+After downloading the \textit{tar.bz2} file, it has to be unpacked
+with the command below (or similar):
+
+\begin{lstlisting}
+  host> `\textbf{tar xjf ethercat-stable-1.1-r513-src.tar.bz2}`
+  host> `\textbf{cd ethercat-stable-1.1-r513-src}`
+\end{lstlisting}
+
+For compilation, the kernel sources are needed. Basically any kernel
+sources are appropriate\footnote{If a realtime extension is to be
+  used, the kernel has to be patched before that.}, that are
+configured with networking. If the host kernel is not the running
+kernel, a copy of the configuration template has to be made:
+
+\begin{lstlisting}
+  host> `\textbf{cp ethercat.conf.tmpl ethercat.conf}`
+\end{lstlisting}
+
+Now the \textit{\$KERNEL} variable inside the \textit{ethercat.conf}
+file can be adjusted to reflect the appropriate kernel version. If
+everything is correct now, the sucessive call to
+
+\begin{lstlisting}
+  host> `\textbf{make}`
+\end{lstlisting}
+
+will result in no errors.
+
+The following commands have to be entered as \textit{root}: To install
+the kernel modules, the init script, the sysconfig file and the user
+space tools, the below command has to be executed:
+
+\begin{lstlisting}
+  host# `\textbf{make install}`
+\end{lstlisting}
+
+If the sysconfig file did not exist yet, the user is notified to edit
+it, before running the master. For the contents of the file, see
+section~\ref{sec:sysconfig}. To give a short summary: The most
+important thing is to adjust the \textit{\$DEVICE\_INDEX} variable. It
+has to be set to the index of the compatible network device to use
+with EtherCAT, where the order of devices is dependent on their
+position in the PCI bus. If this is not known, the index can be
+determinded with trial and error, but it has to be considered that a
+wrong value can cause a loss of network connection.
+
+After the basic configuration is done, the master can be started with
+the below command:
+
+\begin{lstlisting}
+  host# `\textbf{/etc/init.d/ethercat start}`
+\end{lstlisting}
+
+The operation of the master can be observed by looking at the
+syslog\index{syslog} messages, which should look like the ones below:
+
+\begin{lstlisting}[numbers=left]
+  EtherCAT: Master driver, 1.1 (stable) - rev. 513,
+      compiled by fp at Aug 09 2006 10:23:20
+  EtherCAT: Initializing 1 EtherCAT master(s)...
+  EtherCAT: Initializing master 0.
+  EtherCAT: Master driver initialized.
+  ec_8139too Fast Ethernet driver 0.9.27 Revision 513,
+      compiled by fp at Aug 09 2006 10:23:20
+  ec_device_index is 0
+  ACPI: PCI Interrupt 0000:01:00.0[A] -> Link [LNKC]
+      -> GSI 11 (level, low) -> IRQ 11
+  ec0: RealTek RTL8139 at 0xd047c000, 00:c0:26:00:c6:aa, IRQ 11
+  ec0:  Identified 8139 chip type 'RTL-8100B/8139D'
+  Registering EtherCAT device...
+  Starting EtherCAT device...
+  EtherCAT: Link state changed to UP.
+  EtherCAT: Starting Idle mode.
+  EtherCAT: 11 slaves responding.
+  EtherCAT: Slave states: INIT, OP.
+  EtherCAT: Scanning bus.
+  EtherCAT: Bus scanning completed.
+  EtherCAT: No EoE handlers coupled.
+\end{lstlisting}
+
+\begin{description}
+\item[\normalfont\textcircled{\tiny 1}] The master module is loaded,
+  and one master is initialized.
+\item[\normalfont\textcircled{\tiny 6}] The EtherCAT-capable RTL8139
+  device driver is loaded. It connects its first network device to the
+  master.
+\item[\normalfont\textcircled{\tiny 16}] The master starts idle mode
+  and begins scanning the bus for slaves.
+\end{description}
+
+%------------------------------------------------------------------------------
+
+\section{A Minimal Example Module}
+\label{sec:mini}
+\index{Examples!Minimal}
+
+This section will explain the usage of the EtherCAT master from a
+minimal kernel module. The complete module code is obtainable as a
+part of the EtherCAT master code release (see~\cite{etherlab}, file
+\textit{examples/mini/mini.c}).
+
+The minimal example uses a kernel timer (software interrupt) to handle
+cyclic code. After the timer function is executed, it re-adds itself
+with a delay of one \textit{jiffy}\index{jiffies}, which results in a
+timer frequency of \textit{HZ}\nomenclature{HZ}{Kernel macro
+  containing the timer interrupt frequency}
+
+The module-global variables, needed to operate the master can be seen
+in listing~\ref{lst:minivar}.
+
+\begin{lstlisting}[language=C,numbers=left,caption={Minimal
+    variables},label=lst:minivar]
+  struct timer_list timer;
+
+  ec_master_t *master = NULL;
+  ec_domain_t *domain1 = NULL;
+
+  void *r_dig_in, *r_ana_out;
+
+  ec_pdo_reg_t domain1_pdos[] = {
+          {"1", Beckhoff_EL1014_Inputs, &r_dig_in},
+          {"2", Beckhoff_EL4132_Ouput1, &r_ana_out},
+          {}
+  };
+\end{lstlisting}
+
+\begin{description}
+\item[\normalfont\textcircled{\tiny 1}] There is a timer object
+  declared, that is needed to tell the kernel to install a timer and
+  execute a certain function, if it runs out. This is done by a
+  variable of the \textit{timer\_list} structure.
+\item[\normalfont\textcircled{\tiny 3} -- \textcircled{\tiny 4}] There
+  is a pointer declared, that will later point to a requested EtherCAT
+  master.  Additionally there is a pointer to a domain object needed,
+  that will manage process data IO.
+\item[\normalfont\textcircled{\tiny 6}] The pointers \textit{r\_*}
+  will later point to the \underline{r}aw process data values inside
+  the domain memory. The addresses they point to will be set during a
+  call to \textit{ec\_\-master\_\-activate()}, that will create the
+  domain memory and configure the mapped process data image.
+\item[\normalfont\textcircled{\tiny 8} -- \textcircled{\tiny 12}] The
+  configuration of the mapping of certain PDOs in a domain can easily
+  be done with the help of an initialization array of the
+  \textit{ec\_pdo\_reg\_t} type, defined as part of the realtime
+  interface. Each record must contain the ASCII bus-address of the
+  slave (see section~\ref{sec:addr}), the slave's vendor ID and
+  product code, and the index and subindex of the PDO to map (these
+  four fields can be specified in junction, by using one of the
+  defines out of the \textit{include/ecdb.h} header). The last field
+  has to be the address of the process data pointer, so it can later
+  be redirected appropriately. Attention: The initialization array
+  must end with an empty record (\textit{\{\}})!
+\end{description}
+
+The initialization of the minimal realtime module is done by the
+``Minimal init function'' in listing~\ref{lst:miniinit}.
+
+\begin{lstlisting}[language=C,numbers=left,caption={Minimal init
+    function},label={lst:miniinit}]
+  int __init init_mini_module(void)
+  {
+          if (!(master = ecrt_request_master(0))) {
+                  goto out_return;
+          }
+
+          if (!(domain1 = ecrt_master_create_domain(master))) {
+                  goto out_release_master;
+          }
+
+          if (ecrt_domain_register_pdo_list(domain1,
+                                            domain1_pdos)) {
+                  goto out_release_master;
+          }
+
+          if (ecrt_master_activate(master)) {
+                  goto out_release_master;
+          }
+
+          ecrt_master_prepare(master);
+
+          init_timer(&timer);
+          timer.function = run;
+          timer.expires = jiffies + 10;
+          add_timer(&timer);
+
+          return 0;
+
+        out_release_master:
+          ecrt_release_master(master);
+        out_return:
+          return -1;
+  }
+\end{lstlisting}
+
+\begin{description}
+\item[\normalfont\textcircled{\tiny 3}] It is tried to request the
+  first EtherCAT master (index 0). On success, the
+  \textit{ecrt\_\-request\_\-master()} function returns a pointer to
+  the reserved master, that can be used as an object to following
+  functions calls. On failure, the function returns \textit{NULL}.
+\item[\normalfont\textcircled{\tiny 7}] In order to exchange process
+  data, a domain object has to be created. The
+  \textit{ecrt\_\-master\_\-create\_domain()} function also returns a
+  pointer to the created domain, or \textit{NULL} in error case.
+\item[\normalfont\textcircled{\tiny 11}] The registration of domain
+  PDOs with an initialization array results in a single function call.
+  Alternatively the data fields could be registered with individual
+  calls of \textit{ecrt\_domain\_register\_pdo()}.
+\item[\normalfont\textcircled{\tiny 16}] After the configuration of
+  process data mapping, the master can be activated for cyclic
+  operation. This will configure all slaves and bring them into
+  \textit{OP} state.
+\item[\normalfont\textcircled{\tiny 20}] This call is needed to avoid
+  a case differentiation in cyclic operation: The first operation in
+  cyclic mode is a receive call. Due to the fact, that there is
+  nothing to receive during the first cycle, there had to be an
+  \textit{if}-statement to avoid a warning. A call to
+  \textit{ec\_master\_prepare()} sends a first datagram containing a
+  process data exchange datagram, so that the first receive call will
+  not fail.
+\item[\normalfont\textcircled{\tiny 22} -- \textcircled{\tiny 25}] The
+  master is now ready for cyclic operation. The kernel timer that
+  cyclically executes the \textit{run()} function is initialized and
+  started.
+\end{description}
+
+The coding of a cleanup function fo the minimal module can be seen in
+listing~\ref{lst:miniclean}.
+
+\begin{lstlisting}[language=C,numbers=left,caption={Minimal cleanup
+    function},label={lst:miniclean}]
+  void __exit cleanup_mini_module(void)
+  {
+          del_timer_sync(&timer);
+          ecrt_master_deactivate(master);
+          ecrt_release_master(master);
+  }
+\end{lstlisting}
+
+\begin{description}
+\item[\normalfont\textcircled{\tiny 3}] To cleanup the module, it it
+  necessary to stop the cyclic processing. This is done by a call to
+  \textit{del\_timer\_sync()} which safely removes a queued timer
+  object. It is assured, that no cyclic work will be done after this
+  call returns.
+\item[\normalfont\textcircled{\tiny 4}] This call deactivates the
+  master, which results in all slaves being brought to their
+  \textit{INIT} state again.
+\item[\normalfont\textcircled{\tiny 5}] This call releases the master,
+  removes any existing configuration and silently starts the idle
+  mode. The value of the master pointer is invalid after this call and
+  the module can be safely unloaded.
+\end{description}
+
+The final part of the minimal module is that for the cyclic work. Its
+coding can be seen in listing~\ref{lst:minirun}.
+
+\begin{lstlisting}[language=C,numbers=left,caption={Minimal cyclic
+    function},label={lst:minirun}]
+  void run(unsigned long data)
+  {
+          static uint8_t dig_in_0;
+
+          ecrt_master_receive(master);
+          ecrt_domain_process(domain1);
+
+          dig_in_0 = EC_READ_BIT(r_dig_in, 0);
+          EC_WRITE_S16(r_ana_out, dig_in_0 * 0x3FFF);
+
+          ecrt_master_run(master);
+          ecrt_master_send(master);
+
+          timer.expires += 1; // frequency = HZ
+          add_timer(&timer);
+  }
+\end{lstlisting}
+
+\begin{description}
+\item[\normalfont\textcircled{\tiny 5}] The cyclic processing starts
+  with receiving datagrams, that were sent in the last cycle. The
+  frames containing these datagrams have to be received by the network
+  interface card prior to this call.
+\item[\normalfont\textcircled{\tiny 6}] The process data of domain 1
+  has been automatically copied into domain memory while datagram
+  reception. This call checks the working counter for changes and
+  re-queues the domain's datagram for sending.
+\item[\normalfont\textcircled{\tiny 8}] This is an example for reading
+  out a bit-oriented process data value (i.~e. bit 0) via the
+  \textit{EC\_READ\_BIT()} macro. See section~\ref{sec:macros} for
+  more information about those macros.
+\item[\normalfont\textcircled{\tiny 9}] This line shows how to write a
+  signed, 16-bit process data value. In this case, the slave is able
+  to output voltages of $-10$~V to $+10$~V with a resolution of 16
+  bit.  This write command outputs either $0$~V or $+5$~V, depending
+  of the value of \textit{dig\_in\_0}.
+\item[\normalfont\textcircled{\tiny 11}] This call runs the master's
+  operation state machine (see section~\ref{sec:fsm-op}). A single
+  state is processed, and datagrams are queued. Mainly bus observation
+  is done: The bus state is determined and in case of slaves that lost
+  their configuration, reconfiguration is tried.
+\item[\normalfont\textcircled{\tiny 12}] This method sends all queued
+  datagrams, in this case the domain's datagram and one of the master
+  state machine. In best case, all datagrams fit into one frame.
+\item[\normalfont\textcircled{\tiny 14} -- \textcircled{\tiny 15}]
+  Kernel timers are implemented as ``one-shot'' timers, so they have
+  to be re-added after each execution. The time of the next execution
+  is specified in \textit{jiffies} and will happen at the time of the
+  next system timer interrupt. This results in the \textit{run()}
+  function being executed with a frequency of \textit{HZ}.
+\end{description}
+
+%------------------------------------------------------------------------------
+
+\section{An RTAI Example Module}
+\label{sec:rtai}
+\index{Examples!RTAI}
+
+The whole code can be seen in the EtherCAT master code release
+(see~\cite{etherlab}, file \textit{examples/rtai/rtai\_sample.c}).
+
+Listing~\ref{lst:rtaivar} shows the defines and global variables
+needed for a minimal RTAI module with EtherCAT processing.
+
+\begin{lstlisting}[language=C,numbers=left,caption={RTAI task
+    declaration},label={lst:rtaivar}]
+  #define FREQUENCY 10000
+  #define TIMERTICKS (1000000000 / FREQUENCY)
+
+  RT_TASK task;
+\end{lstlisting}
+
+\begin{description}
+\item[\normalfont\textcircled{\tiny 1} -- \textcircled{\tiny 2}] RTAI
+  takes the cycle period as nanoseconds, so the easiest way is to
+  define a frequency and convert it to a cycle time in nanoseconds.
+\item[\normalfont\textcircled{\tiny 4}] The \textit{task} variable
+  later contains information about the running RTAI task.
+\end{description}
+
+Listing~\ref{lst:rtaiinit} shows the module init function for the RTAI
+module. Most lines are the same as in listing~\ref{lst:miniinit},
+differences come up when starting the cyclic code.
+
+\begin{lstlisting}[language=C,numbers=left,caption={RTAI module init
+    function},label={lst:rtaiinit}]
+  int __init init_mod(void)
+  {
+          RTIME requested_ticks, tick_period, now;
+
+          if (!(master = ecrt_request_master(0))) {
+                  goto out_return;
+          }
+
+          if (!(domain1 = ecrt_master_create_domain(master))) {
+                  goto out_release_master;
+          }
+
+          if (ecrt_domain_register_pdo_list(domain1,
+                                            domain1_pdos)) {
+                  goto out_release_master;
+          }
+
+          if (ecrt_master_activate(master)) {
+                  goto out_release_master;
+          }
+
+          ecrt_master_prepare(master);
+
+          requested_ticks = nano2count(TIMERTICKS);
+          tick_period = start_rt_timer(requested_ticks);
+
+          if (rt_task_init(&task, run, 0, 2000, 0, 1, NULL)) {
+                  goto out_stop_timer;
+          }
+
+          now = rt_get_time();
+          if (rt_task_make_periodic(&task, now + tick_period,
+                                    tick_period)) {
+                  goto out_stop_task;
+          }
+
+          return 0;
+
+      out_stop_task:
+          rt_task_delete(&task);
+      out_stop_timer:
+          stop_rt_timer();
+      out_deactivate:
+          ecrt_master_deactivate(master);
+      out_release_master:
+          ecrt_release_master(master);
+      out_return:
+          return -1;
+  }
+\end{lstlisting}
+
+\begin{description}
+\item[\normalfont\textcircled{\tiny 24} -- \textcircled{\tiny 25}] The
+  nanoseconds are converted to RTAI timer ticks and an RTAI timer is
+  started.  \textit{tick\_period} will be the ``real'' number of ticks
+  used for the timer period (which can be different to the requested
+  one).
+\item[\normalfont\textcircled{\tiny 27}] The RTAI task is initialized
+  by specifying the cyclic function, the parameter to hand over, the
+  stack size, priority, a flag that tells, if the function will use
+  floating point operations and a signal handler.
+\item[\normalfont\textcircled{\tiny 32}] The task is made periodic by
+  specifying a start time and a period.
+\end{description}
+
+The cleanup function of the RTAI module in listing~\ref{lst:rtaiclean}
+is nearly as simple as that of the minimal module.
+
+\begin{lstlisting}[language=C,numbers=left,caption={RTAI module
+    cleanup function},label={lst:rtaiclean}]
+  void __exit cleanup_mod(void)
+  {
+          rt_task_delete(&task);
+          stop_rt_timer();
+          ecrt_master_deactivate(master);
+          ecrt_release_master(master);
+          rt_sem_delete(&master_sem);
+  }
+\end{lstlisting}
+
+\begin{description}
+\item[\normalfont\textcircled{\tiny 2}] The RTAI task will be stopped
+  and deleted.
+\item[\normalfont\textcircled{\tiny 3}] After that, the RTAI timer can
+  be stopped.
+\end{description}
+
+The rest is the same as for the minimal module.
+
+Worth to mention is, that the cyclic function of the RTAI module
+(listing~\ref{lst:rtairun}) has a slightly different architecture. The
+function is not executed until returning for every cycle, but has an
+infinite loop in it, that is placed in a waiting state for the rest of
+each cycle.
+
+\begin{lstlisting}[language=C,numbers=left,caption={RTAI module cyclic
+    function},label={lst:rtairun}]
+  void run(long data)
+  {
+          while (1) {
+                  ecrt_master_receive(master);
+                  ecrt_domain_process(domain1);
+
+                  k_pos = EC_READ_U32(r_ssi_input);
+
+                  ecrt_master_run(master);
+                  ecrt_master_send(master);
+
+                  rt_task_wait_period();
+          }
+  }
+\end{lstlisting}
+
+\begin{description}
+\item[\normalfont\textcircled{\tiny 3}] The \textit{while (1)} loop
+  executes for the lifetime of the RTAI task.
+\item[\normalfont\textcircled{\tiny 12}] The
+  \textit{rt\_task\_wait\_period()} function sets the process into a
+  sleeping state until the beginning of the next cycle. It also
+  checks, if the cyclic function has to be terminated.
+\end{description}
+
+%------------------------------------------------------------------------------
+
+\section{Concurrency Example}
+\label{sec:concurrency}
+\index{Examples!Concurrency}
+
+As mentioned before, there can be concurrent access to the EtherCAT
+master. The realtime module and a EoE\index{EoE} process can compete
+for master access, for example. In this case, the module has to
+provide the locking mechanism, because it depends on the module's
+architecture which lock has to be used. The module makes this locking
+mechanism available to the master through the master's locking
+callbacks.
+
+In case of RTAI, the lock can be an RTAI semaphore, as shown in
+listing~\ref{lst:convar}. A normal linux semaphore would not be
+appropriate, because it could not block the RTAI task due to RTAI
+running in a higher domain than the linux kernel (see~\cite{rtai}).
+
+\begin{lstlisting}[language=C,numbers=left,caption={RTAI semaphore for
+    concurrent access},label={lst:convar}]
+  SEM master_sem;
+\end{lstlisting}
+
+The module has to implement the two callbacks for requesting and
+releasing the master lock. An exemplary coding can be seen in
+listing~\ref{lst:conlock}.
+
+\begin{lstlisting}[language=C,numbers=left,caption={RTAI locking
+    callbacks for concurrent access},label={lst:conlock}]
+  int request_lock(void *data)
+  {
+          rt_sem_wait(&master_sem);
+          return 0;
+  }
+
+  void release_lock(void *data)
+  {
+          rt_sem_signal(&master_sem);
+  }
+\end{lstlisting}
+
+\begin{description}
+\item[\normalfont\textcircled{\tiny 1}] The \textit{request\_lock()}
+  function has a data parameter. The master always passes the value,
+  that was specified when registering the callback function. This can
+  be used for handing the master pointer. Notice, that it has an
+  integer return value (see line 4).
+\item[\normalfont\textcircled{\tiny 3}] The call to
+  \textit{rt\_sem\_wait()} either returns at once, when the semaphore
+  was free, or blocks until the semaphore is freed again. In any case,
+  the semaphore finally is reserved for the process calling the
+  request function.
+\item[\normalfont\textcircled{\tiny 4}] When the lock was requested
+  successfully, the function should return 0. The module can prohibit
+  requesting the lock by returning non-zero (see paragraph ``Tuning
+  the jitter'' below).
+\item[\normalfont\textcircled{\tiny 7}] The \textit{release\_lock()}
+  function gets the same argument passed, but has a void return value,
+  because is always succeeds.
+\item[\normalfont\textcircled{\tiny 9}] The \textit{rt\_sem\_signal()}
+  function frees the semaphore, that was prior reserved with
+  \textit{rt\_sem\_wait()}.
+\end{description}
+
+In the module's init function, the semaphore must be initialized, and
+the callbacks must be passed to the EtherCAT master:
+
+\begin{lstlisting}[language=C,numbers=left,caption={Module init
+    function for concurrent access},label={lst:coninit}]
+  int __init init_mod(void)
+  {
+          RTIME tick_period, requested_ticks, now;
+
+          rt_sem_init(&master_sem, 1);
+
+          if (!(master = ecrt_request_master(0))) {
+                  goto out_return;
+          }
+
+          ecrt_master_callbacks(master, request_lock,
+                                release_lock, NULL);
+          // ...
+\end{lstlisting}
+
+\begin{description}
+\item[\normalfont\textcircled{\tiny 5}] The call to
+  \textit{rt\_sem\_init()} initializes the semaphore and sets its
+  value to 1, meaning that only one process can reserve the semaphore
+  without blocking.
+\item[\normalfont\textcircled{\tiny 11}] The callbacks are passed to
+  the master with a call to \textit{ecrt\_master\_callbacks()}. The
+  last parameter is the argument, that the master should pass with
+  each call to a callback function. Here it is not used and set to
+  \textit{NULL}.
+\end{description}
+
+For the cyclic function being only one competitor for master access,
+it has to request the lock like any other process. There is no need to
+use the callbacks (which are meant for processes of lower priority),
+so it can access the semaphore directly:
+
+\begin{lstlisting}[language=C,numbers=left,caption={RTAI cyclic
+    function for concurrent access},label={lst:conrun}]
+  void run(long data)
+  {
+          while (1) {
+                  rt_sem_wait(&master_sem);
+
+                  ecrt_master_receive(master);
+                  ecrt_domain_process(domain1);
+
+                  k_pos = EC_READ_U32(r_ssi_input);
+
+                  ecrt_master_run(master);
+                  ecrt_master_send(master);
+
+                  rt_sem_signal(&master_sem);
+                  rt_task_wait_period();
+          }
+  }
+\end{lstlisting}
+
+\begin{description}
+\item[\normalfont\textcircled{\tiny 4}] Every access to the master has
+  to be preceeded by a call to \textit{rt\_sem\_wait()}, because
+  another instance might currently access the master.
+\item[\normalfont\textcircled{\tiny 14}] When cyclic processing
+  finished, the semaphore has to be freed again, so that other
+  processes have the possibility to access the master.
+\end{description}
+
+A little change has to be made to the cleanup function in case of
+concurrent master access.
+
+\begin{lstlisting}[language=C,numbers=left,caption={RTAI module
+    cleanup function for concurrent access},label={lst:conclean}]
+  void __exit cleanup_mod(void)
+  {
+          rt_task_delete(&task);
+          stop_rt_timer();
+          ecrt_master_deactivate(master);
+          ecrt_release_master(master);
+          rt_sem_delete(&master_sem);
+  }
+\end{lstlisting}
+
+\begin{description}
+\item[\normalfont\textcircled{\tiny 7}] Upon module cleanup, the
+  semaphore has to be deleted, so that memory can be freed.
+\end{description}
+
+\paragraph{Tuning the Jitter}
+\index{Jitter}
+
+Concurrent access leads to higher jitter of the realtime process,
+because there are situations, in which the realtime process has to
+wait for a process of lower priority to finish accessing the master.
+In most cases this is acceptable, because a master access cycle
+(receive/process/send) only takes $10$~\textmu s to $20$~\textmu s on
+recent systems, what would be the maximum additional jitter. However
+some applications demand a minimum jitter. For this reason the master
+access can be prohibited by the realtime module: If the time, another
+process wants to access the master, is to close to the beginning of
+the next realtime cycle, the module can disallow, that the lock is
+taken. In this case, the request callback has to return $1$, meaning
+that the lock has not been taken. The foreign process must abort its
+master access and try again next time.
+
+This measure helps to significantly reducing the jitter produced by
+concurrent master access. Below are exerpts of an example coding:
+
+\begin{lstlisting}[language=C,numbers=left,caption={Variables for
+    jitter reduction},label={lst:redvar}]
+  #define FREQUENCY 10000 // RTAI task frequency in Hz
+  // ...
+  cycles_t t_last_cycle = 0;
+  const cycles_t t_critical = cpu_khz * 1000 / FREQUENCY
+                              - cpu_khz * 30 / 1000;
+\end{lstlisting}
+
+\begin{description}
+\item[\normalfont\textcircled{\tiny 3}] The variable
+  \textit{t\_last\_cycle} holds the timer ticks at the beginning of
+  the last realtime cycle.
+\item[\normalfont\textcircled{\tiny 4}] \textit{t\_critical} contains
+  the number of ticks, that may have passed since the beginning of the
+  last cycle, until there is no more foreign access possible. It is
+  calculated by substracting the ticks for $30$~\textmu s from the
+  ticks for a complete cycle.
+\end{description}
+
+\begin{lstlisting}[language=C,numbers=left,caption={Cyclic function
+    with reduced jitter},label={lst:redrun}]
+  void run(long data)
+  {
+          while (1) {
+                  t_last_cycle = get_cycles();
+                  rt_sem_wait(&master_sem);
+                  // ...
+\end{lstlisting}
+
+\begin{description}
+\item[\normalfont\textcircled{\tiny 4}] The ticks of the beginning of
+  the current realtime cycle are taken before reserving the semaphore.
+\end{description}
+
+\begin{lstlisting}[language=C,numbers=left,caption={Request callback
+    for reduced jitter},label={lst:redreq}]
+  int request_lock(void *data)
+  {
+          // too close to the next RT cycle: deny access.
+          if (get_cycles() - t_last_cycle > t_critical)
+                  return -1;
+
+          // allow access
+          rt_sem_wait(&master_sem);
+          return 0;
+  }
+\end{lstlisting}
+
+\begin{description}
+\item[\normalfont\textcircled{\tiny 4}] If the time of request is too
+  close to the next realtime cycle (here: \textless~$30$~\textmu s
+  before the estimated beginning), the locking is denied. The
+  requesting process must abort its cycle.
+\end{description}
+
+%------------------------------------------------------------------------------
+
+\begin{thebibliography}{99}
+\bibitem{etherlab} Ingenieurgemeinschaft IgH: EtherLab -- Open Source
+  Toolkit for rapid realtime code generation under Linux with
+  Simulink/RTW and EtherCAT technology. URL: http://etherlab.org,
+  July~31, 2006.
+\bibitem{dlspec} IEC 61158-4-12: Data-link Protocol Specification.
+  International Electrotechnical Comission (IEC), 2005.
+\bibitem{alspec} IEC 61158-6-12: Application Layer Protocol
+  Specification. International Electrotechnical Comission (IEC), 2005.
+\bibitem{gpl} GNU General Public License, Version 2. URL:
+  http://www.gnu.org/licenses/gpl.txt. August~9, 2006.
+\bibitem{lsb} Linux Standard Base. URL:
+  http://www.freestandards.org/en/LSB. August~9, 2006.
+\bibitem{wireshark} Wireshark. URL: http://www.wireshark.org.
+  August~9, 2006.
+\bibitem{automata} {\it Hopcroft, J.~E. / Ullman, J.~D.}: Introduction
+  to Automata Theory, Languages and Computation. Adison-Wesley,
+  Reading, Mass.~1979.
+\bibitem{fsmmis} {\it Wagner, F. / Wolstenholme, P.}: State machine
+  misunderstandings. In: IEE journal ``Computing and Control
+  Engineering'', 2004.
+\bibitem{rtai} RTAI. The RealTime Application Interface for Linux from
+  DIAPM. URL: http://www.rtai.org, 2006.
+\end{thebibliography}
+
+\printglossary
+\addcontentsline{toc}{chapter}{\nomname}
+\markleft{\nomname}
+
+\printindex
+\markleft{Index}
+
+%------------------------------------------------------------------------------
+
+\end{document}
+
+%------------------------------------------------------------------------------
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/images/ethercat.eps	Mon Sep 25 15:53:33 2006 +0000
@@ -0,0 +1,1617 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%Title: E_CAT_4c_oT.FH10
+%%Creator: FreeHand 10.0
+%%CreationDate: Sat Nov 22 16:59:04 2003 
+%%BoundingBox: 0 0 364 83
+%%FHPathName:\\Nt-data01\dfs\Marketingcom\Sonstiges\EtherCAT_Marketing\gespeert\logo\ethercat\E_CAT_4c_oT.FH10
+%ALDOriginalFile:\\Nt-data01\dfs\Marketingcom\Sonstiges\EtherCAT_Marketing\gespeert\logo\ethercat\E_CAT_4c_oT.FH10
+%ALDBoundingBox: -104 -400 491 442
+%%FHPageNum:1
+%%DocumentSuppliedResources: procset Altsys_header 4 0
+%%ColorUsage: Color
+%%DocumentProcessColors: Cyan Magenta Yellow Black
+%%CMYKProcessColor: 0 1 1 0 (Rot)
+%%EndComments
+%%BeginAGDEmbeddedDoc: version 1.0
+%:s8W,W5t==#^::et!!!KAGQG3TH$g;p(4MY[WQDsgNY!=r^aZD&
+%:s8VO$KL?VQ6b!2+5saRn)j:7OYQQ_4^uR0S&;4U[<,dt=$+PSiMActI_&k-sJ,fX#Elaq>jA;1K,)YB2XtJDr^$\L=3oa$8f^8K/IpMNDpZg;0fA0HWj<,h0,WB;^Gm^?t.QJmW;E:bW!!.Jh=6AC3MGe*h9ql?d:AH^KF<H%PTljcO!mrkCL,p#B_k:"[?`%Lt8*d6`a/l-1lhK"ST]Z3;980;R5<erq,U=Rc*2Y>Rqh`K-7=li;
+%:e-HXu+DNkbLg8r#iDY4[XCpb.E5d7.O`8EDU,e3&n(:g'KWha7,DKVBT%P7X:Ln+F(#<ni?*1#?&2f**;#E]ALPpZe\-dr7\l=aU;ZdB)L=AbA!R$8:PASmE^e^`LGZRmFDD4UgPkls%6I-IYH9g6X%(21$WSC<MAS>3YQ%-+l%YT+,3uRtrFOK[5C\hs8Gi>$+FNoi=cti&I/MnlGs&T4U1.MaR#6]5f7P./OXfABQL*eLs)G+fE
+%:NhR+1B-KD]rbXAHlga^<8TRh0<caefp1ADLFR799no$J-pP4#n2u!20flsddnE>+:'mJKL9k+TbW6uMB6*=LMdFpY"e<5BX9k+Tj]5F9;:3(3BUVD09Lfsa*N\NV,8$6\kHYOc1R7G9DZD.@W%&q!4.\@[Cj9Vnk<TT.5SX*kUcAlKLHYXk,XZ(lK8#\(+[GN:3`Mr.qK=*hjT&O1UnAg(b>8)meVA+lB??9k4)o,%YW>I:L'(fKs
+%:*4u\tiSG`;FC6,P;S!!kH"\TE%#p*gg#V)QOUf9['Q(.eG$p<4>bMdlgZo)-%ul?>XL&2@fJadF?QE&u&3&lN]GfHnDDRC6MuZiC"o7G/`L,=Z55csZ]9R%abB7$h7Yet"&Y`7&3`7OYL0@G:h$0M;%8&9skP**>.dW_laj#Tm]V8&KJ/)o5_U9O%QU-`'X,3c4[1P5j-'3jZInUD5DJo)\,5t"ZAY;@oW<Bi;Grsh*G&OgS/p4)-
+%:"S#[8QqF<J=Mf\$Q4e2^dt+!re3S3LW=sD3/gX[joKqK(DQ.]"O$&e]'OY1VDcr5@6le]4X[>1,]#[P<B)P9O/c\Pk?=Sgrm8d[A04plr/2JN_M'h5C<rY_HV<9ell<T]VSTo#]_=T.JZI+Cs`XDU3RH<s0/I)Fo'^"RREMJ1hbJC@sSI^;4R[!6^/BlAt)E_0]9IB$npYahrm\N*46^(kG6.Aus"MPu3mSC/c%[MS%!i(QBq4-`Q
+%:#.napr3E?XFO#n?%3E5T*Eg,1Ngcu8j:TOd9MIT1;H6C?[\K]L[q#kX62&;\N2NQ/rIJp;&0<>WY;0%sFIue7-8%tc>*)r]qm_\;ZtGgJ9hO724N<U#6)gn,S5D4c-J6_=:8i)?F$]Vpp)W@]dB^AK'N;bTa="h-OL'`RIY'V4e^g=Oec)g\WQj2;$LS2sOHE`tT7<1g(a#c$Q8MMEJi`*N;e;AFe[>Kue[W<Q:MT4;_//VCf@90u
+%:=\[Ds8,K90hHM=/HF=&';es)cVN/,L.9M%9Lu@H1Q!3KHcZHQIV*m%U4-e#<DS-mk0)r8S.e>JoPomG5j[NBOT-deU&`^%`rp&9UV:)OL"mXkr%^j217e"[BWu7=O4m9KRkd)tZ1OJ9l^:tj2q<FHU6iBP\=PSj%o]fZ?Lm130IWVT,,>7FFe?N'r&B]`$S[c"sg3;Ir4#1r`n9q!HaOD$.[u3Nk1A1U#2heO\;jTgg;3e2NMuXHO
+%:g6&A0%m;J.%K5qV8SQWQ#+#8KNXo0'0%<l;Or)hLW#I;saqpI,?hC!PRW7/D9V$L&>UUP3elG#;;eZ@MI%8g]`1N0@4DmCp8<%SHa7)8ph)4?t<?>:LNBN#%;7i0kF,"d`nXA/P>?>t9fM&Nmi<tUGQ*dNng>=/[Y^BeR?.MuobR5W#TPfZVgnk64F`H@iTe*,OZA@8BTVfH;H<M^)16n4c<O'W"RUSWX=cfVk=b.d&Tr-IVm6Ee>
+%:VC\YTZA8rn:fI60?5#q@ff6t0:%!=1D%BE@*G94)luoco,AV:LFp&&N*mQ^op.*a!ZCc+GUPEAb)d:5rCW0Zrk#H/C`"kEiF_dsX-lZo9pWa.E`I^c@$9PCmA4''3n!#&]"dt60T:f:s6VVu,YuE+ZC4e(s[OeAVbN%Iqb(<=+s8<&=+rb:^C</i;/BAM1MFBGq'C,iZ7Uk2p&o5#sH6;oZ!bt*25/?iU:c?hQZ#=5G'oeiuQ]l6D
+%:pGf(jr=+Za78g'&gq#gk7+5sAef'edVN*<V9CVS[EOr5#*ceDm6)MXS>:1U6C?f>9A#Z3me,:<>NKfi\<Yq,#X<*<=,<.Nc%jPj!8D'T\T%]qD*]p:Fj,n)BKgM,oi\"G3;g_M!AO31QFtBqmT4+\sJdS8mR)T^R5rGig9X'-!S@uD26_4,.;,]t#m1N%OR<O,@DAVGpQL<&"=t;T.f?)HX;"";*e`$#jJuAY9(>RC812@W8TV</I
+%:%]aG>dM1;FS:9I37W*#8CX9%%LV?hGhonsPa+()36D[IUH]"QJC_LH(4figVELdP6h<7\I;NIj;6N[I4G?nWf/PjM7kniAdcZ*7a'.bM3A/q$D95$"p2G>+hl(Fs^(=-$Z:WV=f0YEOJ3'9jqKs_OEY.KUS[2t`?U:<*+hjA$/kB3#LIEt."NRCoIc1'ao(mYp7_J3h*9@A09BcfoG)fj\kr`(,+%5i:(h,LAJn`0NN*6"2PFYnf[
+%:J$%#!=f%F]N>#RmT6ZBsoup>Re_,m$[H^;a3r@u)?.K^&5$)/tp<tcg!HqsKR5u;?<@rYY=e4I@X=fDMX.L2COY7&!Th&Gt>GW,2,#e)']7d3(g_T21f]RoS1cW]!%IO?Dap>Jeo#DY`3+a?FdV'PWELquO%8Y=?#/L.['!>u0g:'dnM$rXC,,d?-%#_2^DJB*.gACPe/fQ"MY*O>`L!ggoBb$JtM@!Xkp7-M-E:<chK&u*..E=F<
+%:U,?M].Y"Fm.iQSP`g0(3SX)09`,/Z(D\hGj].GT%@L4"?C9]*WQ%a+_UUJG^>IU9&G0g.Y-jqf\da:UjaG*C-6nB-A2In<2\NHR%aAd9/.CFNMV.ttBT;d"K<f]T]>;BCLH.siO54YN-^55WVe5dShml!j^`B4nbf[;1S61-L,2Y7Y?-fmqLU+B/_MY3+!(CX[0MB,SjYf4+&N(c\>>$mPq)1lF<)7XTaJ_&O^2T!G@)-Ip"(a%(b
+%:<8?Uh7>hbcV$q4U54O@6)-^+(ZO2UMQtQeu[XNSJeNESf@&pmQ(n%rm4$]l'Q:8P=jaC37CTW4d^UUd3,ARCLC>.udd:,L\.75&`Pl;:nJrP=dH5PBX;t0HL^*DQJ.R]8b%?_p(/2pb.`,I2@KjYibDk@HXZY^TiOG,l/d)H^D:Tn(!0#X4[/M/1jb:$]p<c31M(;CXGEGfpc$<),t<5moq6<TDLnAKYfMeo>kD4*$_AO30pOJ.4B
+%:ZKEYPfhbU`O=:Qh&uQnYUJHR26hDFnT&`?/d:5RX-EaE^SqVEC@U[.n2&W\kA)1+r)mst]cC06[fs2Jp]u`c+ktYuS/Zp/!YHZZgDth1H.P+>]04]VJSEc\PQr7&QiV0,f`qBF_DsN,.ZXfP]o>$2i1NLtQVoQ'n_Gc5NHL]X2A]2$E\OY-j>Hf^;JKlk7k$hNb3V2<FJsd;/`5^@>7H!P]AS`qUHNs%c$Lg@nd>@'b-EoSZ$k>1M
+%:TgQU]L=qA^'/N%9,,U`0BZfM+jb8;HLa<0q`+lWc$0[2t8rqq9:/?C#@Hpj[HA7b#EQ-H&Q8P,>U%oN3A)hV_4\?)99'4P8gWk638OTQ*]t"f6ZJ@Np]o*4)F0eAI\Yg/Z7ZI"`YgCn/cEQqtmZadjmTT;Uk/0N3MAG1D<db*-\3I["d%)9-?K0c.k]>uk.ip@HWg`\'agRP)SVmqjj!@4Y],*.*7fQt25ifMQ>+9)J[olYr_7\pT
+%:4'JYE,K56g2l][0YS1/fTOUC5nINWi2l8#""3huBr<;"_9M;Cdac25,10TPW4cN*^3Qsk:I!Wd)1#FYpj=;=B-r-d(`'(50;-&F`JA]3D*GM7_&nV-o7gV=/fD)o`$Tt<2nDuD6B*rqj-.n-5%pJ;<A^h_dD#b:#acRe"4`GpZDa$NP8AGfp*9`3)R#lYl1P=6c2c"N9;%%&3c.s5@"26`cjlL.:?i\DWk4+`,[JCq,]D5ZTK=D`X
+%:JUBB&?`QOKihJ9bq0e0A-?.9tZ"]@g;rq?b68ll0X1T!%E"D*mAY`#@GIqqKAe99SKIq'PhGdXBJ.:[0r%b($VsLdlS71+dI)1f_jC^=;nPn<:]s.I(Lc]N3[TSA_%!F.J@B6C=[RUP[S-hgmr7G0]5'HRMI%\RLK76$qEe?[!1&0!BS2)8DHmC[#/28;.Z#eNmY+7X$G%;Cd2r%<?2j3'SLPqn]-RU8f,^8M$-+RfhV"Vnb3t"^5
+%:AiVTV;jRtcSWe;Ek2Ig.Xeb.EDnm1Q7='gAd`_7i]h5-.Nn2Y`g;qss.mGPTo=!ceGT3&<[";VZf1!jNTGoc$laiF7CF()-/H^Qi-^E1uO!krmGUK^=r`mGTE!K-$WI)Nqk'=K\HGcZsn6^oZ)AW;u!VueW7VQ[M@:F%a!!0W26tp.Q!!0K-;fm%oDJ&qM*`-EgF)Y]#FD5o07ri<S!!*'oE)0qXARff^!:ro`FE2)5B)hqs]FInU
+%:9h]8BF8u=&9gi]*F8u@<6t(1K<,$2\!!%U?847B+87c4?AT@bN2aV>!@qu&EH:;X]D.RU,!!0`59lNm;C&e5B5t==4Df0Xs!KL,f@T6cFCh3SIo2BpO@W-'VBju*kEd7Wc;,D:OE(k=p!!,ejEc5H!A9Dp(!!#YZDes?42?3aE9ho,6AH2_Y9PJQi!!()6Bl7KY@<;JLG"$4YD+nYbF8u;b7;QOP:i^Jn9QP:U!/sB]B6A6+=KjnY
+%:!!.XLFEq\6:i^Jn9QP:U!I[mcDfe?bCi=>P!!"Z=@<6-m9PJBU!!"W<@<6-m7VQ[T!!'#hF_PAtErZ5$:gnHZ!!#SXDes6$@ruX0!!'`,@<lF)!!"?3EcQ)B:gnHZ!!#tcDf'H3F(o`-:gnHZ!!&fbEc6)>!!!!!YQ;-4I0$_VI0$_VI0$_U9*!B?a8j9]a8j9]a8j9]a8j9]a8j9]dJtTo-3,@m-3,@m-3,@mdK-`VI0$_Vps8:@
+%:I0$_VI0$_VI0$_VI/q[qm/TcZG6$n/[/do@9)s/9l2\Nu9)s/9G6"WCl2e9m^&Ue+G6$n/[/do@9)s/9G6,)Om/ZMR0*(A?JH.;&G6'](G5s5qG6'](G5s5qG6'](G5ugf3<47(3<8=E;uh+C3<47(3<47(3<47'G6'](G6'](l2Xc`G6'](l2[U[G5ugeG6'](G6'](G6'](G6'](l2Xc`l2[U[l2[U[G6'](l2[U[l2e9mpsoN)
+%:^&ZR^[/fRpNW:[4[/^U9[/mo@JH4*um/ZDOm/ZDOG6$%l*WYI+q>p0f2ZW4FG6"WCm/V>1l2[U\]E%3sm/ZMS[/fRp[/fRp[/fRp[/fRoo)S.Xo)V\gm/ZDOJjsQbFCdjO@rGmh!<<*!rr<$!Hd6uF
+%:~>
+%%EndAGDEmbeddedDoc
+%%BeginResource: procset Altsys_header 4 0
+userdict begin /AltsysDict 300 dict def end
+AltsysDict begin
+/bdf{bind def}bind def
+/xdf{exch def}bdf
+/defed{where{pop true}{false}ifelse}bdf
+/ndf{1 index where{pop pop pop}{dup xcheck{bind}if def}ifelse}bdf
+/d{setdash}bdf
+/h{closepath}bdf
+/H{}bdf
+/J{setlinecap}bdf
+/j{setlinejoin}bdf
+/M{setmiterlimit}bdf
+/n{newpath}bdf
+/N{newpath}bdf
+/q{gsave}bdf
+/Q{grestore}bdf
+/w{setlinewidth}bdf
+/Xic{matrix invertmatrix concat}bdf
+/Xq{matrix currentmatrix mark}bdf
+/XQ{cleartomark setmatrix}bdf
+/sepdef{
+dup where not
+{
+AltsysSepDict
+}
+if	
+3 1 roll exch put
+}bdf
+/st{settransfer}bdf
+/colorimage defed /_rci xdf
+/cntr 0 def
+/readbinarystring{
+/cntr 0 def
+2 copy readstring
+{
+{
+dup
+(\034) search
+{
+length exch pop exch
+dup length 0 ne
+{
+dup dup 0 get  32 sub 0 exch put
+/cntr cntr 1 add def
+}
+{
+pop 1 string dup
+0 6 index read pop 32 sub put
+}ifelse
+3 copy
+putinterval pop
+1 add
+1 index length 1 sub
+1 index sub
+dup 0 le {pop pop exit}if
+getinterval
+}
+{
+pop exit
+} ifelse
+} loop
+}if
+cntr 0 gt
+{
+pop 2 copy
+dup length cntr sub cntr getinterval
+readbinarystring
+} if
+pop exch pop
+} bdf
+/_NXLevel2 defed {			
+_NXLevel2 not {			
+/colorimage where {
+userdict eq {
+/_rci false def		
+} if
+} if
+} if
+} if
+/md defed{	
+md type /dicttype eq {		
+/colorimage where {		
+md eq {				
+/_rci false def	
+}if
+}if
+/settransfer where {
+md eq {
+/st systemdict /settransfer get def
+}if
+}if
+}if
+}if
+/setstrokeadjust defed
+{
+true setstrokeadjust
+/C{curveto}bdf
+/L{lineto}bdf
+/m{moveto}bdf
+}
+{
+/dr{transform .25 sub round .25 add
+exch .25 sub round .25 add exch itransform}bdf
+/C{dr curveto}bdf
+/L{dr lineto}bdf
+/m{dr moveto}bdf
+/setstrokeadjust{pop}bdf	
+}ifelse
+/privrectpath {	
+4 -2 roll m
+dtransform round exch round exch idtransform	
+2 copy 0 lt exch 0 lt xor
+{dup 0 exch rlineto exch 0 rlineto neg 0 exch rlineto}
+{exch dup 0 rlineto exch 0 exch rlineto neg 0 rlineto}
+ifelse
+closepath
+}bdf
+/rectclip{newpath privrectpath clip newpath}def
+/rectfill{gsave newpath privrectpath fill grestore}def
+/rectstroke{gsave newpath privrectpath stroke grestore}def
+/_fonthacksave false def
+/currentpacking defed
+{
+/_bfh {/_fonthacksave currentpacking def false setpacking} bdf
+/_efh {_fonthacksave setpacking} bdf
+}
+{
+/_bfh {} bdf
+/_efh {} bdf
+}ifelse
+/packedarray{array astore readonly}ndf
+/`	
+{
+false setoverprint		
+/-save0- save def
+5 index concat
+pop
+storerect left bottom width height rectclip
+pop
+/MMdict_count countdictstack def
+/MMop_count count 1 sub def
+userdict begin
+/showpage {} def
+0 setgray 0 setlinecap 1 setlinewidth
+0 setlinejoin 10 setmiterlimit [] 0 setdash newpath
+} bdf
+/currentpacking defed{true setpacking}if
+/min{2 copy gt{exch}if pop}bdf
+/max{2 copy lt{exch}if pop}bdf
+/xformfont { currentfont exch makefont setfont } bdf
+/fhnumcolors 1
+statusdict begin
+/processcolors defed
+{
+pop processcolors
+}
+{
+/deviceinfo defed {
+deviceinfo /Colors known {
+pop deviceinfo /Colors get
+} if
+} if
+} ifelse
+end 
+def
+%	pix = x^2 + y^2
+/printerRes
+gsave
+matrix defaultmatrix setmatrix
+72 72 dtransform
+abs exch abs
+max
+grestore
+def
+/graycalcs
+[
+{Angle Frequency}			
+{GrayAngle GrayFrequency}	
+{0 Width Height matrix defaultmatrix idtransform
+dup mul exch dup mul add sqrt 72 exch div}	
+{0 GrayWidth GrayHeight matrix defaultmatrix idtransform
+dup mul exch dup mul add sqrt 72 exch div}	
+] def
+/calcgraysteps {
+forcemaxsteps
+{
+maxsteps
+}
+{
+/currenthalftone defed
+{currenthalftone /dicttype eq}{false}ifelse
+{
+currenthalftone begin
+HalftoneType 4 le
+{graycalcs HalftoneType 1 sub get exec}
+{
+HalftoneType 5 eq
+{
+Default begin
+{graycalcs HalftoneType 1 sub get exec}
+end
+}
+{0 60}	
+ifelse
+}
+ifelse
+end
+}
+{
+currentscreen pop exch			
+}
+ifelse
+printerRes 300 max exch div exch	
+2 copy								
+sin mul round dup mul				
+3 1 roll							
+cos mul round dup mul				
+add 1 add							
+dup maxsteps gt {pop maxsteps} if	
+dup minsteps lt {pop minsteps} if	
+}
+ifelse
+} bdf
+/nextrelease defed {						
+/languagelevel defed not {				
+/framebuffer defed {				
+0 40 string framebuffer 9 1 roll 8 {pop} repeat
+dup 516 eq exch 520 eq or
+{
+/fhnumcolors 3 def
+/currentscreen {60 0 {pop pop 1}}bdf
+/calcgraysteps {maxsteps} bdf
+}if
+}if
+}if
+}if
+fhnumcolors 1 ne {
+/calcgraysteps {maxsteps} bdf
+} if
+/currentpagedevice defed {
+currentpagedevice /PreRenderingEnhance known
+{
+currentpagedevice /PreRenderingEnhance get
+{
+/calcgraysteps
+{
+forcemaxsteps
+{maxsteps}
+{256 maxsteps min}
+ifelse
+} def
+} if
+} if
+} if
+/gradfrequency 144 def
+printerRes 1000 lt {
+/gradfrequency 72 def
+} if
+/adjnumsteps {
+dup dtransform abs exch abs max  
+printerRes div 					 
+gradfrequency mul 				 
+round 						 
+5 max						 
+min							 
+}bdf
+/goodsep {
+spots exch get 4 get dup sepname eq exch (_vc_Registration) eq or
+}bdf
+/BeginGradation defed
+{/bb{BeginGradation}bdf}
+{/bb{}bdf}
+ifelse
+/EndGradation defed
+{/eb{EndGradation}bdf}
+{/eb{}bdf}
+ifelse
+/bottom -0 def			
+/delta -0 def			
+/frac -0 def			
+/height -0 def			
+/left -0 def			
+/numsteps1 -0 def		
+/radius -0 def			
+/right -0 def			
+/top -0 def				
+/width -0 def			
+/xt -0 def				
+/yt -0 def				
+/df currentflat def		
+/tempstr 1 string def	
+/clipflatness currentflat def	
+/inverted?				
+0 currenttransfer exec .5 ge def
+/tc1 [0 0 0 1] def		
+/tc2 [0 0 0 1] def		
+/storerect{/top xdf /right xdf /bottom xdf /left xdf
+/width right left sub def /height top bottom sub def}bdf
+/concatprocs{
+systemdict /packedarray known
+{dup type /packedarraytype eq 2 index type /packedarraytype eq or}{false}ifelse
+{	
+/proc2 exch cvlit def	/proc1 exch cvlit def
+proc1 aload pop proc2 aload pop
+proc1 length proc2 length add packedarray cvx
+}
+{	
+/proc2 exch cvlit def	/proc1 exch cvlit def
+/newproc proc1 length proc2 length add array def
+newproc 0 proc1 putinterval newproc proc1 length proc2 putinterval
+newproc cvx
+}ifelse
+}bdf
+/i{dup 0 eq
+{pop df dup}	
+{dup} ifelse
+/clipflatness xdf setflat
+}bdf
+version cvr 38.0 le
+{/setrgbcolor{
+currenttransfer exec 3 1 roll
+currenttransfer exec 3 1 roll
+currenttransfer exec 3 1 roll
+setrgbcolor}bdf}if
+/vms {/vmsv save def} bdf
+/vmr {vmsv restore} bdf
+/vmrs{vmsv restore /vmsv save def}bdf
+/eomode{
+{/filler /eofill load def /clipper /eoclip load def}
+{/filler /fill load def /clipper /clip load def}
+ifelse
+}bdf
+/normtaper{}bdf
+/logtaper{9 mul 1 add log}bdf
+/CD{
+/NF exch def	
+{				
+exch dup	
+/FID ne 1 index/UniqueID ne and
+{exch NF 3 1 roll put}
+{pop pop}
+ifelse
+}forall
+NF
+}bdf
+/MN{
+1 index length 		
+/Len exch def
+dup length Len add 	
+string dup 			
+Len 				
+4 -1 roll 			
+putinterval 		
+dup 				
+0 					
+4 -1 roll			
+putinterval			
+}bdf
+/RC{4 -1 roll /ourvec xdf 256 string cvs(|______)anchorsearch
+{1 index MN cvn/NewN exch def cvn
+findfont dup maxlength dict CD dup/FontName NewN put dup
+/Encoding ourvec put NewN exch definefont pop}{pop}ifelse}bdf
+/RF{						
+dup 					
+FontDirectory exch 		
+known					
+{pop 3 -1 roll pop}		
+{RC}
+ifelse
+}bdf
+/FF{dup 256 string cvs(|______)exch MN cvn dup FontDirectory exch known
+{exch pop findfont 3 -1 roll pop}
+{pop dup findfont dup maxlength dict CD dup dup
+/Encoding exch /Encoding get 256 array copy 7 -1 roll
+{3 -1 roll dup 4 -2 roll put}forall put definefont}
+ifelse}bdf
+/RCJ{4 -1 roll 			
+/ourvec xdf  		
+256 string cvs 		
+(|______) anchorsearch
+{pop				
+cvn				
+dup FDFJ		
+exch	 		
+1 index 		
+eq				
+{
+_bfh findfont _efh		
+dup 					
+maxlength dict			
+CD						
+dup						
+/FontName 		
+3 index			
+put						
+dup						
+/Encoding ourvec put	
+1 index					
+exch 					
+definefont				
+pop						
+}
+{exch pop}		
+ifelse
+}
+{pop}				
+ifelse
+}bdf
+/RFJ{						
+dup 					
+FontDirectory exch 		
+known					
+{pop 3 -1 roll pop}		
+{RCJ}
+ifelse
+}bdf
+/hasfont
+{
+/resourcestatus where	
+{
+pop			
+/Font resourcestatus
+{			
+pop pop true
+}
+{			
+false
+}
+ifelse
+}
+{
+dup FontDirectory exch known
+{pop true}
+{
+256 string
+cvs
+(fonts/) exch MN
+status
+{pop pop pop pop true}
+{false}
+ifelse
+}
+ifelse
+}
+ifelse
+}bdf
+/FDFJ
+{
+dup			
+hasfont		
+not			
+{			
+pop
+/Ryumin-Light-83pv-RKSJ-H
+hasfont			
+{
+/Ryumin-Light-83pv-RKSJ-H
+}
+{
+/Courier
+}
+ifelse			
+}
+if
+}bdf
+/FFJ{
+_bfh
+dup					
+256 string cvs		
+(|______)exch MN	
+cvn					
+dup					
+FontDirectory
+exch known			
+{					
+exch				
+pop					
+findfont			
+3 -1 roll			
+pop					
+}
+{					
+pop					
+FDFJ				
+dup findfont		
+dup maxlength dict	
+CD 					
+dup dup				
+/Encoding exch		
+/Encoding get		
+256 array copy		
+7 -1 roll 			
+{					
+3 -1 roll		
+dup				
+4 -2 roll		
+put				
+}forall
+put 				
+definefont			
+}
+ifelse
+_efh
+}bdf
+/GS {
+dup
+hasfont
+{
+findfont
+exch makesetfont
+exch
+pop
+ts
+}
+{
+pop pop pop
+ts
+} ifelse
+} bdf
+/RCK{4 -1 roll 			
+/ourvec xdf  		
+256 string cvs 		
+(|______) anchorsearch
+{pop				
+cvn				
+dup FDFK		
+exch	 		
+1 index 		
+eq				
+{
+_bfh findfont _efh		
+dup 					
+maxlength dict			
+CD						
+dup						
+/FontName 		
+3 index			
+put						
+dup						
+/Encoding ourvec put	
+1 index					
+exch 					
+definefont				
+pop						
+}
+{exch pop}		
+ifelse
+}
+{pop}				
+ifelse
+}bdf
+/RFK{						
+dup 					
+FontDirectory exch 		
+known					
+{pop 3 -1 roll pop}		
+{RCK}
+ifelse
+}bdf
+/hasfont
+{
+/resourcestatus where	
+{
+pop			
+/Font resourcestatus
+{			
+pop pop true
+}
+{			
+false
+}
+ifelse
+}
+{
+dup FontDirectory exch known
+{pop true}
+{
+256 string
+cvs
+(fonts/) exch MN
+status
+{pop pop pop pop true}
+{false}
+ifelse
+}
+ifelse
+}
+ifelse
+}bdf
+/FDFK
+{
+dup			
+hasfont		
+not			
+{			
+pop
+/JCsm
+hasfont			
+{
+/JCsm
+}
+{
+/Courier
+}
+ifelse			
+}
+if
+}bdf
+/FFK{
+_bfh
+dup					
+256 string cvs		
+(|______)exch MN	
+cvn					
+dup					
+FontDirectory
+exch known			
+{					
+exch				
+pop					
+findfont			
+3 -1 roll			
+pop					
+}
+{					
+pop					
+FDFK				
+dup findfont		
+dup maxlength dict	
+CD 					
+dup dup				
+/Encoding exch		
+/Encoding get		
+256 array copy		
+7 -1 roll 			
+{					
+3 -1 roll		
+dup				
+4 -2 roll		
+put				
+}forall
+put 				
+definefont			
+}
+ifelse
+_efh
+}bdf
+/RCTC{4 -1 roll 			
+/ourvec xdf  		
+256 string cvs 		
+(|______) anchorsearch
+{pop				
+cvn				
+dup FDFTC		
+exch	 		
+1 index 		
+eq				
+{
+_bfh findfont _efh		
+dup 					
+maxlength dict			
+CD						
+dup						
+/FontName 		
+3 index			
+put						
+dup						
+/Encoding ourvec put	
+1 index					
+exch 					
+definefont				
+pop						
+}
+{exch pop}		
+ifelse
+}
+{pop}				
+ifelse
+}bdf
+/RFTC{						
+dup 					
+FontDirectory exch 		
+known					
+{pop 3 -1 roll pop}		
+{RCTC}
+ifelse
+}bdf
+/FDFTC
+{
+dup			
+hasfont		
+not			
+{			
+pop
+/DFMing-Lt-HK-BF
+hasfont			
+{
+/DFMing-Lt-HK-BF
+}
+{
+/Courier
+}
+ifelse			
+}
+if
+}bdf
+/FFTC{
+_bfh
+dup					
+256 string cvs		
+(|______)exch MN	
+cvn					
+dup					
+FontDirectory
+exch known			
+{					
+exch				
+pop					
+findfont			
+3 -1 roll			
+pop					
+}
+{					
+pop					
+FDFTC				
+dup findfont		
+dup maxlength dict	
+CD 					
+dup dup				
+/Encoding exch		
+/Encoding get		
+256 array copy		
+7 -1 roll 			
+{					
+3 -1 roll		
+dup				
+4 -2 roll		
+put				
+}forall
+put 				
+definefont			
+}
+ifelse
+_efh
+}bdf
+/RCSC{4 -1 roll 			
+/ourvec xdf  		
+256 string cvs 		
+(|______) anchorsearch
+{pop				
+cvn				
+dup FDFSC		
+exch	 		
+1 index 		
+eq				
+{
+_bfh findfont _efh		
+dup 					
+maxlength dict			
+CD						
+dup						
+/FontName 		
+3 index			
+put						
+dup						
+/Encoding ourvec put	
+1 index					
+exch 					
+definefont				
+pop						
+}
+{exch pop}		
+ifelse
+}
+{pop}				
+ifelse
+}bdf
+/RFSC{						
+dup 					
+FontDirectory exch 		
+known					
+{pop 3 -1 roll pop}		
+{RCSC}
+ifelse
+}bdf
+/FDFSC
+{
+dup			
+hasfont		
+not			
+{			
+pop
+/zh-gbscript-1.11
+hasfont			
+{
+/zh-gbscript-1.11
+}
+{
+/Courier
+}
+ifelse			
+}
+if
+}bdf
+/FFSC{
+_bfh
+dup					
+256 string cvs		
+(|______)exch MN	
+cvn					
+dup					
+FontDirectory
+exch known			
+{					
+exch				
+pop					
+findfont			
+3 -1 roll			
+pop					
+}
+{					
+pop					
+FDFSC				
+dup findfont		
+dup maxlength dict	
+CD 					
+dup dup				
+/Encoding exch		
+/Encoding get		
+256 array copy		
+7 -1 roll 			
+{					
+3 -1 roll		
+dup				
+4 -2 roll		
+put				
+}forall
+put 				
+definefont			
+}
+ifelse
+_efh
+}bdf
+/fps{
+currentflat 		
+exch 				
+dup 0 le{pop 1}if	
+{
+dup setflat 3 index stopped
+{1.3 mul dup 3 index gt{pop setflat pop pop stop}if}	
+{exit}			
+ifelse
+}loop
+pop setflat pop pop
+}bdf
+/fp{100 currentflat fps}bdf
+/clipper{clip}bdf		
+/W{/clipper load 100 clipflatness dup setflat fps}bdf
+/AVec 256 array def
+AVec 0 /Helvetica findfont
+/Encoding get 0 256 getinterval putinterval
+/ANSIPatch[
+16#0/grave 16#1/acute 16#2/circumflex 16#3/tilde 16#4/macron 16#5/breve
+16#6/dotaccent 16#7/dieresis 16#8/ring 16#9/cedilla 16#A/hungarumlaut
+16#B/ogonek 16#C/caron 16#D/dotlessi 16#27/quotesingle 16#60/grave
+16#7C/bar 16#82/quotesinglbase 16#83/florin 16#84/quotedblbase 16#85
+/ellipsis 16#86/dagger 16#87/daggerdbl 16#89/perthousand 16#8A/Scaron
+16#8B/guilsinglleft 16#8C/OE 16#91/quoteleft 16#92/quoteright 16#93
+/quotedblleft 16#94/quotedblright 16#95/bullet 16#96/endash 16#97/emdash
+16#99/trademark 16#9A/scaron 16#9B/guilsinglright 16#9C/oe
+16#9F/Ydieresis 16#A0/space 16#A4/currency 16#A6/brokenbar
+16#A7/section 16#A8/dieresis 16#A9/copyright 16#AA/ordfeminine 16#AB/guillemotleft
+16#AC/logicalnot 16#AD/hyphen 16#AE/registered 16#AF/macron 16#B0/degree
+16#B1/plusminus 16#B2/twosuperior 16#B3/threesuperior 16#B4/acute 16#B5/mu
+16#B6/paragraph 16#B7/periodcentered 16#B8/cedilla 16#B9/onesuperior
+16#BA/ordmasculine 16#BB/guillemotright 16#BC/onequarter 16#BD/onehalf
+16#BE/threequarters 16#BF/questiondown 16#C0/Agrave 16#C1/Aacute 16#C2/Acircumflex
+16#C3/Atilde 16#C4/Adieresis 16#C5/Aring 16#C6/AE 16#C7/Ccedilla 16#C8/Egrave
+16#C9/Eacute 16#CA/Ecircumflex 16#CB/Edieresis 16#CC/Igrave 16#CD/Iacute
+16#CE/Icircumflex 16#CF/Idieresis 16#D0/Eth 16#D1/Ntilde 16#D2/Ograve
+16#D3/Oacute 16#D4/Ocircumflex 16#D5/Otilde 16#D6/Odieresis 16#D7/multiply
+16#D8/Oslash 16#D9/Ugrave 16#DA/Uacute 16#DB/Ucircumflex 16#DC/Udieresis
+16#DD/Yacute 16#DE/Thorn 16#DF/germandbls 16#E0/agrave 16#E1/aacute
+16#E2/acircumflex 16#E3/atilde 16#E4/adieresis 16#E5/aring 16#E6/ae
+16#E7/ccedilla 16#E8/egrave 16#E9/eacute 16#EA/ecircumflex 16#EB/edieresis
+16#EC/igrave 16#ED/iacute 16#EE/icircumflex 16#EF/idieresis 16#F0/eth
+16#F1/ntilde 16#F2/ograve 16#F3/oacute 16#F4/ocircumflex 16#F5/otilde
+16#F6/odieresis 16#F7/divide 16#F8/oslash 16#F9/ugrave 16#FA/uacute
+16#FB/ucircumflex 16#FC/udieresis 16#FD/yacute 16#FE/thorn 16#FF/ydieresis
+] def
+127 1 159 { AVec exch/bullet put } for
+ANSIPatch aload pop ANSIPatch length 2 idiv{AVec 3 1 roll put}repeat
+/DoPatch { dup /CharStrings known
+{ setfont
+0 1 255 { dup
+currentfont
+/Encoding get
+exch get
+currentfont /CharStrings get
+exch known
+{pop} {currentfont /Encoding get exch /bullet put} ifelse
+} for
+} {pop} ifelse
+} def
+/findheaderfont {
+AVec 256 array copy
+/FHT /|______Helvetica dup RF findfont def
+FHT DoPatch
+FHT
+}	def
+end		%. AltsysDict
+%%EndResource
+%%EndProlog
+%%BeginSetup
+AltsysDict begin
+_bfh	
+_efh	
+end %. AltsysDict
+%%EndSetup
+AltsysDict begin	
+/onlyk4{false}ndf
+/ccmyk{dup 5 -1 roll sub 0 max exch}ndf
+/cmyk2gray{
+4 -1 roll 0.3 mul 4 -1 roll 0.59 mul 4 -1 roll 0.11 mul
+add add add 1 min neg 1 add
+}bdf
+/setcmykcolor{1 exch sub ccmyk ccmyk ccmyk pop setrgbcolor}ndf
+/maxcolor {    
+max max max		
+} ndf
+/maxspot {
+pop
+} ndf
+/setcmykcoloroverprint{4{dup -1 eq{pop 0}if 4 1 roll}repeat setcmykcolor}ndf
+/findcmykcustomcolor{5 packedarray}ndf
+/setcustomcolor{exch aload pop pop 4{4 index mul 4 1 roll}repeat setcmykcolor pop}ndf
+/setseparationgray{setgray}ndf
+/setoverprint{pop}ndf		
+/currentoverprint false ndf
+/cmykbufs2gray{
+0 1 2 index length 1 sub
+{
+4 index 1 index get	0.3 mul		
+4 index 2 index get	0.59 mul	
+4 index 3 index get	0.11 mul	
+4 index 4 index get				
+add add add cvi 255 min
+255 exch sub
+2 index 3 1 roll put
+}for
+4 1 roll pop pop pop
+}bdf
+/colorimage{
+pop pop
+[
+5 -1 roll/exec cvx
+6 -1 roll/exec cvx
+7 -1 roll/exec cvx
+8 -1 roll/exec cvx
+/cmykbufs2gray cvx
+]cvx
+image
+}
+%. version 47.1 on Linotronic of Postscript defines colorimage incorrectly (rgb model only)
+version cvr 47.1 le
+statusdict /product get (Lino) anchorsearch{pop pop true}{pop false}ifelse
+and{userdict begin bdf end}{ndf}ifelse
+fhnumcolors 1 ne {/yt save def} if
+/customcolorimage{
+aload pop
+(_vc_Registration) eq
+{
+pop pop pop pop separationimage
+}
+{
+/ik xdf /iy xdf /im xdf /ic xdf
+ic im iy ik cmyk2gray /xt xdf
+currenttransfer
+{dup 1.0 exch sub xt mul add}concatprocs
+st
+image
+}
+ifelse
+}ndf
+fhnumcolors 1 ne {yt restore} if
+fhnumcolors 3 ne {/yt save def} if
+/customcolorimage{
+aload pop
+(_vc_Registration) eq
+{
+pop pop pop pop separationimage
+}
+{
+/ik xdf /iy xdf /im xdf /ic xdf
+1.0 dup ic ik add min sub	
+1.0 dup im ik add min sub	
+1.0 dup iy ik add min sub	
+/ic xdf /iy xdf /im xdf
+currentcolortransfer
+4 1 roll	
+{dup 1.0 exch sub ic mul add}concatprocs 4 1 roll	
+{dup 1.0 exch sub iy mul add}concatprocs 4 1 roll	
+{dup 1.0 exch sub im mul add}concatprocs 4 1 roll	
+setcolortransfer
+{/dummy xdf dummy}concatprocs{dummy}{dummy}true 3 colorimage
+}
+ifelse
+}ndf
+fhnumcolors 3 ne {yt restore} if
+fhnumcolors 4 ne {/yt save def} if
+/customcolorimage{
+aload pop
+(_vc_Registration) eq
+{
+pop pop pop pop separationimage
+}
+{
+/ik xdf /iy xdf /im xdf /ic xdf
+currentcolortransfer
+{1.0 exch sub ik mul ik sub 1 add}concatprocs 4 1 roll
+{1.0 exch sub iy mul iy sub 1 add}concatprocs 4 1 roll
+{1.0 exch sub im mul im sub 1 add}concatprocs 4 1 roll
+{1.0 exch sub ic mul ic sub 1 add}concatprocs 4 1 roll
+setcolortransfer
+{/dummy xdf dummy}concatprocs{dummy}{dummy}{dummy}
+true 4 colorimage
+}
+ifelse
+}ndf
+fhnumcolors 4 ne {yt restore} if
+/separationimage{image}ndf
+/spotascmyk false ndf
+/newcmykcustomcolor{6 packedarray}ndf
+/inkoverprint false ndf
+/setinkoverprint{pop}ndf		
+/setspotcolor {		
+spots exch get
+dup 4 get (_vc_Registration) eq
+{pop 1 exch sub setseparationgray}
+{0 5 getinterval exch setcustomcolor}
+ifelse
+}ndf
+/currentcolortransfer{currenttransfer dup dup dup}ndf
+/setcolortransfer{st pop pop pop}ndf
+/fas{}ndf
+/sas{}ndf
+/fhsetspreadsize{pop}ndf
+/filler{fill}bdf			
+/F{gsave {filler}fp grestore}bdf
+/f{closepath F}bdf
+/S{gsave {stroke}fp grestore}bdf
+/s{closepath S}bdf
+userdict /islevel2
+systemdict /languagelevel known dup
+{
+pop systemdict /languagelevel get 2 ge
+} if
+put
+islevel2 not
+{
+/currentcmykcolor
+{
+0 0 0 1 currentgray sub
+} ndf
+} if
+/tc
+{
+gsave
+setcmykcolor currentcmykcolor
+grestore
+} bind def
+/testCMYKColorThrough
+{
+tc add add add 0 ne
+} bind def
+/fhiscomposite where not {
+userdict /fhiscomposite
+islevel2
+{
+gsave 1 1 1 1 setcmykcolor currentcmykcolor grestore
+add add add 4 eq
+}
+{
+1 0 0 0 testCMYKColorThrough
+0 1 0 0 testCMYKColorThrough
+0 0 1 0 testCMYKColorThrough
+0 0 0 1 testCMYKColorThrough
+and and and
+} ifelse
+put
+}
+{ pop }
+ifelse
+/bc4 [0 0 0 0] def	
+/_lfp4 {
+1 pop	
+/yt xdf							
+/xt xdf							
+/ang xdf						
+storerect
+/taperfcn xdf
+/k2 xdf /y2 xdf /m2 xdf /c2 xdf
+/k1 xdf /y1 xdf /m1 xdf /c1 xdf
+c1 c2 sub abs
+m1 m2 sub abs
+y1 y2 sub abs
+k1 k2 sub abs
+maxcolor						
+calcgraysteps mul abs round		
+height abs adjnumsteps			
+dup 1 lt {pop 1} if				
+1 sub /numsteps1 xdf
+currentflat mark				
+currentflat clipflatness		
+/delta top bottom sub numsteps1 1 add div def	
+/right right left sub def		
+/botsv top delta sub def		
+{
+{
+W
+xt yt translate
+ang rotate
+xt neg yt neg translate
+dup setflat				
+/bottom botsv def
+0 1 numsteps1			
+{
+numsteps1 dup 0 eq {pop pop 0.5} {div} ifelse 
+taperfcn /frac xdf
+bc4 0 c2 c1 sub frac mul c1 add put
+bc4 1 m2 m1 sub frac mul m1 add put
+bc4 2 y2 y1 sub frac mul y1 add put
+bc4 3 k2 k1 sub frac mul k1 add put
+bc4 vc
+1 index setflat		
+{
+mark {newpath left bottom right delta rectfill}stopped
+{cleartomark exch 1.3 mul dup setflat exch 2 copy gt{stop}if}
+{cleartomark exit}ifelse
+}loop
+/bottom bottom delta sub def
+}for
+}
+gsave stopped grestore
+{exch pop 2 index exch 1.3 mul dup 100 gt{cleartomark setflat stop}if}
+{exit}ifelse
+}loop
+cleartomark setflat
+}bdf
+/bcs [0 0] def	
+/_lfs4 {
+/yt xdf							
+/xt xdf							
+/ang xdf						
+storerect
+/taperfcn xdf
+/tint2 xdf						
+/tint1 xdf						
+bcs exch 1 exch put				
+tint1 tint2 sub abs				
+bcs 1 get maxspot				
+calcgraysteps mul abs round		
+height abs adjnumsteps			
+dup 2 lt {pop 2} if				
+1 sub /numsteps1 xdf
+currentflat mark				
+currentflat clipflatness		
+/delta top bottom sub numsteps1 1 add div def	
+/right right left sub def		
+/botsv top delta sub def		
+{
+{
+W
+xt yt translate
+ang rotate
+xt neg yt neg translate
+dup setflat				
+/bottom botsv def
+0 1 numsteps1			
+{
+numsteps1 div taperfcn /frac xdf
+bcs 0
+1.0 tint2 tint1 sub frac mul tint1 add sub
+put bcs vc
+1 index setflat		
+{
+mark {newpath left bottom right delta rectfill}stopped
+{cleartomark exch 1.3 mul dup setflat exch 2 copy gt{stop}if}
+{cleartomark exit}ifelse
+}loop
+/bottom bottom delta sub def
+}for
+}
+gsave stopped grestore
+{exch pop 2 index exch 1.3 mul dup 100 gt{cleartomark setflat stop}if}
+{exit}ifelse
+}loop
+cleartomark setflat
+}bdf
+/_rfs6 {
+/tint2 xdf						
+/tint1 xdf						
+bcs exch 1 exch put				
+/inrad xdf						
+/radius xdf						
+/yt xdf							
+/xt xdf							
+tint1 tint2 sub abs				
+bcs 1 get maxspot				
+calcgraysteps mul abs round		
+radius inrad sub abs			
+adjnumsteps						
+dup 1 lt {pop 1} if				
+1 sub /numsteps1 xdf
+radius inrad sub numsteps1 dup 0 eq {pop} {div} ifelse	
+2 div /halfstep xdf				
+currentflat mark				
+currentflat clipflatness		
+{
+{
+dup setflat				
+W 						
+0 1 numsteps1			
+{
+dup /radindex xdf
+numsteps1 dup 0 eq {pop pop 0.5} {div} ifelse 
+/frac xdf
+bcs 0
+tint2 tint1 sub frac mul tint1 add
+put bcs vc
+1 index setflat		
+{
+newpath mark	
+xt yt radius inrad sub 1 frac sub mul halfstep add inrad add 0 360
+{	arc
+radindex numsteps1 ne
+inrad 0 gt or		
+{
+xt yt			
+numsteps1 0 eq
+{ inrad }	
+{			
+radindex 1 add numsteps1 div 1 exch sub
+radius inrad sub mul halfstep add inrad add
+}ifelse
+dup xt add yt moveto
+360 0 arcn
+} if
+fill
+}stopped
+{cleartomark exch 1.3 mul dup setflat exch 2 copy gt{stop}if}
+{cleartomark exit}ifelse
+}loop
+}for
+}
+gsave stopped grestore
+{exch pop 2 index exch 1.3 mul dup 100 gt{cleartomark setflat stop}if}
+{exit}ifelse
+}loop
+cleartomark setflat
+}bdf
+/_rfp6 {
+1 pop	
+/k2 xdf /y2 xdf /m2 xdf /c2 xdf
+/k1 xdf /y1 xdf /m1 xdf /c1 xdf
+/inrad xdf						
+/radius xdf						
+/yt xdf							
+/xt xdf							
+c1 c2 sub abs
+m1 m2 sub abs
+y1 y2 sub abs
+k1 k2 sub abs
+maxcolor					
+calcgraysteps mul abs round	
+radius inrad sub abs		
+adjnumsteps					
+dup 1 lt {pop 1} if			
+1 sub /numsteps1 xdf
+radius inrad sub numsteps1 dup 0 eq {pop} {div} ifelse	
+2 div /halfstep xdf			
+currentflat mark			
+currentflat clipflatness	
+{
+{
+dup setflat			
+W 					
+0 1 numsteps1		
+{
+dup /radindex xdf
+numsteps1 dup 0 eq {pop pop 0.5} {div} ifelse 
+/frac xdf
+bc4 0 c2 c1 sub frac mul c1 add put
+bc4 1 m2 m1 sub frac mul m1 add put
+bc4 2 y2 y1 sub frac mul y1 add put
+bc4 3 k2 k1 sub frac mul k1 add put
+bc4 vc
+1 index setflat		
+{
+newpath mark	
+xt yt radius inrad sub 1 frac sub mul halfstep add inrad add 0 360
+{	arc
+radindex numsteps1 ne
+inrad 0 gt or		
+{
+xt yt			
+numsteps1 0 eq
+{ inrad }	
+{			
+radindex 1 add numsteps1 div 1 exch sub
+radius inrad sub mul halfstep add inrad add
+}ifelse
+dup xt add yt moveto
+360 0 arcn
+} if
+fill
+}stopped
+{cleartomark exch 1.3 mul dup setflat exch 2 copy gt{stop}if}
+{cleartomark exit}ifelse
+}loop
+}for
+}
+gsave stopped grestore
+{exch pop 2 index exch 1.3 mul dup 100 gt{cleartomark setflat stop}if}
+{exit}ifelse
+}loop
+cleartomark setflat
+}bdf
+/lfp4{_lfp4}ndf
+/lfs4{_lfs4}ndf
+/rfs6{_rfs6}ndf
+/rfp6{_rfp6}ndf
+/cvc [0 0 0 1] def	
+/vc{
+AltsysDict /cvc 2 index put	
+aload length dup 4 eq
+{pop dup -1 eq{pop setrgbcolor}{setcmykcolor}ifelse}
+{6 eq {sethexcolor} {setspotcolor}	ifelse }
+ifelse
+}bdf	
+0 setseparationgray
+/imgr {1700.5 1577 2295.5 2419 } def			
+/bleed 0 def			
+/clpr {1700.5 1577 2295.5 2419 } def			
+/xs 1 def				
+/ys 1 def				
+/botx 0 def			
+/overlap 0 def			
+/wdist 18 def			
+0 2 mul fhsetspreadsize	
+0 0 ne {/df 0 def /clipflatness 0 def} if	
+/maxsteps 256 def		
+/forcemaxsteps false def	
+/minsteps 0 def		
+userdict begin /AGDOrigMtx matrix currentmatrix def end
+vms
+-1804 -1977 translate
+/currentpacking defed{false setpacking}if 	
+/spots[
+1 0 0 0 (Process Cyan) false newcmykcustomcolor
+0 1 0 0 (Process Magenta) false newcmykcustomcolor
+0 0 1 0 (Process Yellow) false newcmykcustomcolor
+0 0 0 1 (Process Black) false newcmykcustomcolor
+]def
+n
+[] 0 d
+3.863708 M
+1 w
+0 j
+0 J
+false setoverprint
+0 i
+false eomode
+[0 0 0 1]vc
+vms
+2091.3033 2026.6948 m
+2125.3191 1999.5805 L
+2125.3191 2012.4079 L
+2167.8568 2012.4081 L
+2167.8568 2026.7087 L
+2091.3033 2026.6948 L
+f	
+n
+2167.8568 2032.1369 m
+2133.8409 2059.2513 L
+2133.8409 2046.4239 L
+2031.7963 2046.4312 L
+2031.7962 2032.1306 L
+2167.8568 2032.1369 L
+[0 1 1 0]vc
+f	
+n
+1977.2503 1990.3708 m
+1980.05 1990.3708 1982.7386 1991.0242 1985.5322 1992.1408 C
+1981.3995 1978.2896 L
+1979.203 1977.8332 1976.7874 1977.5128 1974.4886 1977.5128 C
+1960.8564 1977.5128 1949.927 1985.9465 1949.927 2003.1595 C
+1949.927 2019.3356 1961.3264 2027.4237 1974.4886 2027.4237 C
+1978.8368 2027.4237 1981.4222 2026.8015 1985.6529 2025.9028 C
+1985.6529 2013.1832 L
+1983.0675 2014.151 1980.4233 2014.9805 1977.7791 2014.9805 C
+1971.0805 2014.9805 1966.0272 2010.7637 1966.0272 2002.883 C
+1966.0272 1994.5876 1970.728 1990.3708 1977.2503 1990.3708 C
+[0 0 0 1]vc
+true setoverprint
+f	
+false setoverprint
+n
+true eomode
+1985.961 1978.3424 m
+2001.6498 1978.3424 L
+2004.1765 1988.7808 L
+2017.4562 1988.7808 L
+2020.1591 1978.3424 L
+2036.6707 1978.3424 L
+2022.0395 2026.5941 L
+2000.3572 2026.5941 L
+1985.961 1978.3424 L
+h
+2010.8752 2016.2248 m
+2010.9926 2016.2248 L
+2015.4584 2000.3944 L
+2006.3506 2000.3944 L
+2010.8752 2016.2248 L
+true setoverprint
+f	
+false setoverprint
+n
+false eomode
+1854.507 1985.0967 m
+1853.3161 1984.5757 1852.1996 1984.1291 1850.6365 1984.1291 C
+1847.8081 1984.1291 1846.6916 1985.7666 1846.6916 1990.0837 C
+1846.6916 2012.4878 L
+1854.507 2012.4878 L
+1854.507 2017.5492 L
+1846.6916 2017.5492 L
+1846.6916 2030.9369 L
+1840.4393 2030.9369 L
+1840.4393 2017.5492 L
+1834.4102 2017.5492 L
+1834.4102 2012.4878 L
+1840.4393 2012.4878 L
+1840.4393 1988.074 L
+1840.4393 1981.3751 1843.491 1979.0677 1849.2223 1979.0677 C
+1850.9342 1979.0677 1853.0183 1979.5143 1854.507 1980.0353 C
+1854.507 1985.0967 L
+true setoverprint
+f	
+false setoverprint
+n
+1804.5001 1979.0887 m
+1829.6582 1979.0887 L
+1829.6582 1984.7456 L
+1811.0501 1984.7456 L
+1811.0501 2003.2048 L
+1827.8718 2003.2048 L
+1827.8718 2008.8616 L
+1811.0501 2008.8616 L
+1811.0501 2025.3856 L
+1828.6906 2025.3856 L
+1828.6906 2031.0425 L
+1804.5001 2031.0425 L
+1804.5001 1979.0887 L
+true setoverprint
+f	
+false setoverprint
+n
+1859.7811 1979.0887 m
+1866.0334 1979.0887 L
+1866.0334 2001.9394 L
+1866.0334 2008.7872 1869.1596 2012.2111 1874.0721 2012.2111 C
+1878.0915 2012.2111 1880.3244 2009.606 1880.3244 2003.577 C
+1880.3244 1979.0887 L
+1886.5768 1979.0887 L
+1886.5768 2005.4378 L
+1886.5768 2013.7742 1882.1108 2017.5702 1875.4863 2017.5702 C
+1871.0948 2017.5702 1867.8198 2015.0395 1866.1823 2011.8389 C
+1866.0334 2011.8389 L
+1866.0334 2030.9369 L
+1859.7811 2030.9369 L
+1859.7811 1979.0887 L
+true setoverprint
+f	
+false setoverprint
+n
+true eomode
+1921.7623 1996.2081 m
+1921.7623 1999.5576 L
+1921.7623 2010.7225 1916.9986 2017.5702 1908.4389 2017.5702 C
+1898.986 2017.5702 1893.7757 2009.9781 1893.7757 1998.069 C
+1893.7757 1986.1598 1898.986 1978.5677 1909.0344 1978.5677 C
+1912.8304 1978.5677 1916.7009 1979.3864 1919.6782 1980.8006 C
+1919.3805 1986.4575 L
+1917.2219 1984.8944 1913.798 1983.3313 1910.6719 1983.3313 C
+1903.7497 1983.3313 1900.3258 1987.4251 1900.3258 1996.2081 C
+1921.7623 1996.2081 L
+h
+1900.3258 2000.9718 m
+1900.4746 2009.8293 1904.0474 2012.8066 1908.0667 2012.8066 C
+1913.0537 2012.8066 1915.51 2008.8616 1915.51 2000.9718 C
+1900.3258 2000.9718 L
+true setoverprint
+f	
+false setoverprint
+n
+false eomode
+1928.6573 1979.0887 m
+1934.9096 1979.0887 L
+1934.9096 1999.1854 L
+1934.9096 2007.4474 1938.3335 2011.6156 1943.1716 2011.6156 C
+1943.9903 2011.6156 1944.8091 2011.5412 1945.5534 2011.3923 C
+1945.5534 2017.5702 L
+1939.971 2017.5702 1936.7704 2015.7094 1934.7607 2011.0946 C
+1934.6118 2011.0946 L
+1934.3885 2017.0492 L
+1928.3595 2017.0492 L
+1928.434 2014.3696 1928.6573 2011.6156 1928.6573 2008.8616 C
+1928.6573 1979.0887 L
+true setoverprint
+f	
+false setoverprint
+n
+true eomode
+2077.1054 1987.9334 m
+2078.4398 1987.9334 L
+2079.2051 1987.9334 2080.0686 1987.7764 2080.0686 1986.8345 C
+2080.0686 1985.7552 2079.3033 1985.6375 2078.4202 1985.6375 C
+2077.1054 1985.6375 L
+2077.1054 1987.9334 L
+h
+2075.6141 1981.0456 m
+2077.1054 1981.0456 L
+2077.1054 1984.4993 L
+2078.0081 1984.4993 L
+2080.0882 1981.0456 L
+2081.6189 1981.0456 L
+2079.4603 1984.5582 L
+2080.775 1984.676 2081.56 1985.3431 2081.56 1986.7168 C
+2081.56 1988.4044 2080.5199 1989.0716 2078.5968 1989.0716 C
+2075.6141 1989.0716 L
+2075.6141 1981.0456 L
+h
+2078.3418 1979.3187 m
+2075.3786 1979.3187 2072.9846 1981.7128 2072.9846 1985.0292 C
+2072.9846 1988.3455 2075.3786 1990.7396 2078.3418 1990.7396 C
+2081.3049 1990.7396 2083.6989 1988.3455 2083.6989 1985.0292 C
+2083.6989 1981.7128 2081.3049 1979.3187 2078.3418 1979.3187 C
+h
+2078.3418 1977.9451 m
+2082.2468 1977.9451 2085.4258 1981.1241 2085.4258 1985.0292 C
+2085.4258 1988.9342 2082.2468 1992.1132 2078.3418 1992.1132 C
+2074.4367 1992.1132 2071.2577 1988.9342 2071.2577 1985.0292 C
+2071.2577 1981.1241 2074.4367 1977.9451 2078.3418 1977.9451 C
+true setoverprint
+f	
+false setoverprint
+n
+false eomode
+2031.7963 2026.7097 m
+2082.82 2026.7097 L
+2082.82 2012.4154 L
+2065.1885 2012.4154 L
+2065.1885 1978.4009 L
+2049.4278 1978.4009 L
+2049.4278 2012.4154 L
+2031.7963 2012.4154 L
+2031.7963 2026.7097 L
+true setoverprint
+f	
+false setoverprint
+n
+vmr
+vmr
+end
+%%Trailer
Binary file doc/images/ethercat.pdf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/images/fmmus.eps	Mon Sep 25 15:53:33 2006 +0000
@@ -0,0 +1,941 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: fmmus.fig
+%%Creator: fig2dev Version 3.2 Patchlevel 4
+%%CreationDate: Sat Aug  5 16:55:20 2006
+%%For: fp@jupiter (Florian Pose)
+%%BoundingBox: 0 0 555 299
+%%Magnification: 1.0000
+%%EndComments
+/MyAppDict 100 dict dup begin def
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+
+end
+save
+newpath 0 299 moveto 0 0 lineto 555 0 lineto 555 299 lineto closepath clip newpath
+-27.6 337.3 translate
+1 -1 scale
+
+% This junk string is used by the show operators
+/PATsstr 1 string def
+/PATawidthshow { 	% cx cy cchar rx ry string
+  % Loop over each character in the string
+  {  % cx cy cchar rx ry char
+    % Show the character
+    dup				% cx cy cchar rx ry char char
+    PATsstr dup 0 4 -1 roll put	% cx cy cchar rx ry char (char)
+    false charpath		% cx cy cchar rx ry char
+    /clip load PATdraw
+    % Move past the character (charpath modified the
+    % current point)
+    currentpoint			% cx cy cchar rx ry char x y
+    newpath
+    moveto			% cx cy cchar rx ry char
+    % Reposition by cx,cy if the character in the string is cchar
+    3 index eq {			% cx cy cchar rx ry
+      4 index 4 index rmoveto
+    } if
+    % Reposition all characters by rx ry
+    2 copy rmoveto		% cx cy cchar rx ry
+  } forall
+  pop pop pop pop pop		% -
+  currentpoint
+  newpath
+  moveto
+} bind def
+/PATcg {
+  7 dict dup begin
+    /lw currentlinewidth def
+    /lc currentlinecap def
+    /lj currentlinejoin def
+    /ml currentmiterlimit def
+    /ds [ currentdash ] def
+    /cc [ currentrgbcolor ] def
+    /cm matrix currentmatrix def
+  end
+} bind def
+% PATdraw - calculates the boundaries of the object and
+% fills it with the current pattern
+/PATdraw {			% proc
+  save exch
+    PATpcalc			% proc nw nh px py
+    5 -1 roll exec		% nw nh px py
+    newpath
+    PATfill			% -
+  restore
+} bind def
+% PATfill - performs the tiling for the shape
+/PATfill { % nw nh px py PATfill -
+  PATDict /CurrentPattern get dup begin
+    setfont
+    % Set the coordinate system to Pattern Space
+    PatternGState PATsg
+    % Set the color for uncolored pattezns
+    PaintType 2 eq { PATDict /PColor get PATsc } if
+    % Create the string for showing
+    3 index string		% nw nh px py str
+    % Loop for each of the pattern sources
+    0 1 Multi 1 sub {		% nw nh px py str source
+	% Move to the starting location
+	3 index 3 index		% nw nh px py str source px py
+	moveto			% nw nh px py str source
+	% For multiple sources, set the appropriate color
+	Multi 1 ne { dup PC exch get PATsc } if
+	% Set the appropriate string for the source
+	0 1 7 index 1 sub { 2 index exch 2 index put } for pop
+	% Loop over the number of vertical cells
+	3 index 		% nw nh px py str nh
+	{			% nw nh px py str
+	  currentpoint		% nw nh px py str cx cy
+	  2 index oldshow	% nw nh px py str cx cy
+	  YStep add moveto	% nw nh px py str
+	} repeat		% nw nh px py str
+    } for
+    5 { pop } repeat
+  end
+} bind def
+
+% PATkshow - kshow with the current pattezn
+/PATkshow {			% proc string
+  exch bind			% string proc
+  1 index 0 get			% string proc char
+  % Loop over all but the last character in the string
+  0 1 4 index length 2 sub {
+				% string proc char idx
+    % Find the n+1th character in the string
+    3 index exch 1 add get	% string proc char char+1
+    exch 2 copy			% strinq proc char+1 char char+1 char
+    % Now show the nth character
+    PATsstr dup 0 4 -1 roll put	% string proc chr+1 chr chr+1 (chr)
+    false charpath		% string proc char+1 char char+1
+    /clip load PATdraw
+    % Move past the character (charpath modified the current point)
+    currentpoint newpath moveto
+    % Execute the user proc (should consume char and char+1)
+    mark 3 1 roll		% string proc char+1 mark char char+1
+    4 index exec		% string proc char+1 mark...
+    cleartomark			% string proc char+1
+  } for
+  % Now display the last character
+  PATsstr dup 0 4 -1 roll put	% string proc (char+1)
+  false charpath		% string proc
+  /clip load PATdraw
+  neewath
+  pop pop			% -
+} bind def
+% PATmp - the makepattern equivalent
+/PATmp {			% patdict patmtx PATmp patinstance
+  exch dup length 7 add		% We will add 6 new entries plus 1 FID
+  dict copy			% Create a new dictionary
+  begin
+    % Matrix to install when painting the pattern
+    TilingType PATtcalc
+    /PatternGState PATcg def
+    PatternGState /cm 3 -1 roll put
+    % Check for multi pattern sources (Level 1 fast color patterns)
+    currentdict /Multi known not { /Multi 1 def } if
+    % Font dictionary definitions
+    /FontType 3 def
+    % Create a dummy encoding vector
+    /Encoding 256 array def
+    3 string 0 1 255 {
+      Encoding exch dup 3 index cvs cvn put } for pop
+    /FontMatrix matrix def
+    /FontBBox BBox def
+    /BuildChar {
+	mark 3 1 roll		% mark dict char
+	exch begin
+	Multi 1 ne {PaintData exch get}{pop} ifelse  % mark [paintdata]
+	  PaintType 2 eq Multi 1 ne or
+	  { XStep 0 FontBBox aload pop setcachedevice }
+	  { XStep 0 setcharwidth } ifelse
+	  currentdict		% mark [paintdata] dict
+	  /PaintProc load	% mark [paintdata] dict paintproc
+	end
+	gsave
+	  false PATredef exec true PATredef
+	grestore
+	cleartomark		% -
+    } bind def
+    currentdict
+  end				% newdict
+  /foo exch			% /foo newlict
+  definefont			% newfont
+} bind def
+% PATpcalc - calculates the starting point and width/height
+% of the tile fill for the shape
+/PATpcalc {	% - PATpcalc nw nh px py
+  PATDict /CurrentPattern get begin
+    gsave
+	% Set up the coordinate system to Pattern Space
+	% and lock down pattern
+	PatternGState /cm get setmatrix
+	BBox aload pop pop pop translate
+	% Determine the bounding box of the shape
+	pathbbox			% llx lly urx ury
+    grestore
+    % Determine (nw, nh) the # of cells to paint width and height
+    PatHeight div ceiling		% llx lly urx qh
+    4 1 roll				% qh llx lly urx
+    PatWidth div ceiling		% qh llx lly qw
+    4 1 roll				% qw qh llx lly
+    PatHeight div floor			% qw qh llx ph
+    4 1 roll				% ph qw qh llx
+    PatWidth div floor			% ph qw qh pw
+    4 1 roll				% pw ph qw qh
+    2 index sub cvi abs			% pw ph qs qh-ph
+    exch 3 index sub cvi abs exch	% pw ph nw=qw-pw nh=qh-ph
+    % Determine the starting point of the pattern fill
+    %(px, py)
+    4 2 roll				% nw nh pw ph
+    PatHeight mul			% nw nh pw py
+    exch				% nw nh py pw
+    PatWidth mul exch			% nw nh px py
+  end
+} bind def
+
+% Save the original routines so that we can use them later on
+/oldfill	/fill load def
+/oldeofill	/eofill load def
+/oldstroke	/stroke load def
+/oldshow	/show load def
+/oldashow	/ashow load def
+/oldwidthshow	/widthshow load def
+/oldawidthshow	/awidthshow load def
+/oldkshow	/kshow load def
+
+% These defs are necessary so that subsequent procs don't bind in
+% the originals
+/fill	   { oldfill } bind def
+/eofill	   { oldeofill } bind def
+/stroke	   { oldstroke } bind def
+/show	   { oldshow } bind def
+/ashow	   { oldashow } bind def
+/widthshow { oldwidthshow } bind def
+/awidthshow { oldawidthshow } bind def
+/kshow 	   { oldkshow } bind def
+/PATredef {
+  MyAppDict begin
+    {
+    /fill { /clip load PATdraw newpath } bind def
+    /eofill { /eoclip load PATdraw newpath } bind def
+    /stroke { PATstroke } bind def
+    /show { 0 0 null 0 0 6 -1 roll PATawidthshow } bind def
+    /ashow { 0 0 null 6 3 roll PATawidthshow }
+    bind def
+    /widthshow { 0 0 3 -1 roll PATawidthshow }
+    bind def
+    /awidthshow { PATawidthshow } bind def
+    /kshow { PATkshow } bind def
+  } {
+    /fill   { oldfill } bind def
+    /eofill { oldeofill } bind def
+    /stroke { oldstroke } bind def
+    /show   { oldshow } bind def
+    /ashow  { oldashow } bind def
+    /widthshow { oldwidthshow } bind def
+    /awidthshow { oldawidthshow } bind def
+    /kshow  { oldkshow } bind def
+    } ifelse
+  end
+} bind def
+false PATredef
+% Conditionally define setcmykcolor if not available
+/setcmykcolor where { pop } {
+  /setcmykcolor {
+    1 sub 4 1 roll
+    3 {
+	3 index add neg dup 0 lt { pop 0 } if 3 1 roll
+    } repeat
+    setrgbcolor - pop
+  } bind def
+} ifelse
+/PATsc {		% colorarray
+  aload length		% c1 ... cn length
+    dup 1 eq { pop setgray } { 3 eq { setrgbcolor } { setcmykcolor
+  } ifelse } ifelse
+} bind def
+/PATsg {		% dict
+  begin
+    lw setlinewidth
+    lc setlinecap
+    lj setlinejoin
+    ml setmiterlimit
+    ds aload pop setdash
+    cc aload pop setrgbcolor
+    cm setmatrix
+  end
+} bind def
+
+/PATDict 3 dict def
+/PATsp {
+  true PATredef
+  PATDict begin
+    /CurrentPattern exch def
+    % If it's an uncolored pattern, save the color
+    CurrentPattern /PaintType get 2 eq {
+      /PColor exch def
+    } if
+    /CColor [ currentrgbcolor ] def
+  end
+} bind def
+% PATstroke - stroke with the current pattern
+/PATstroke {
+  countdictstack
+  save
+  mark
+  {
+    currentpoint strokepath moveto
+    PATpcalc				% proc nw nh px py
+    clip newpath PATfill
+    } stopped {
+	(*** PATstroke Warning: Path is too complex, stroking
+	  with gray) =
+    cleartomark
+    restore
+    countdictstack exch sub dup 0 gt
+	{ { end } repeat } { pop } ifelse
+    gsave 0.5 setgray oldstroke grestore
+  } { pop restore pop } ifelse
+  newpath
+} bind def
+/PATtcalc {		% modmtx tilingtype PATtcalc tilematrix
+  % Note: tiling types 2 and 3 are not supported
+  gsave
+    exch concat					% tilingtype
+    matrix currentmatrix exch			% cmtx tilingtype
+    % Tiling type 1 and 3: constant spacing
+    2 ne {
+	% Distort the pattern so that it occupies
+	% an integral number of device pixels
+	dup 4 get exch dup 5 get exch		% tx ty cmtx
+	XStep 0 dtransform
+	round exch round exch			% tx ty cmtx dx.x dx.y
+	XStep div exch XStep div exch		% tx ty cmtx a b
+	0 YStep dtransform
+	round exch round exch			% tx ty cmtx a b dy.x dy.y
+	YStep div exch YStep div exch		% tx ty cmtx a b c d
+	7 -3 roll astore			% { a b c d tx ty }
+    } if
+  grestore
+} bind def
+/PATusp {
+  false PATredef
+  PATDict begin
+    CColor PATsc
+  end
+} bind def
+
+% right30
+11 dict begin
+/PaintType 1 def
+/PatternType 1 def
+/TilingType 1 def
+/BBox [0 0 1 1] def
+/XStep 1 def
+/YStep 1 def
+/PatWidth 1 def
+/PatHeight 1 def
+/Multi 2 def
+/PaintData [
+  { clippath } bind
+  { 32 16 true [ 32 0 0 -16 0 16 ]
+	{<00030003000c000c0030003000c000c0030003000c000c00
+	30003000c000c00000030003000c000c0030003000c000c0
+	030003000c000c0030003000c000c000>}
+     imagemask } bind
+] def
+/PaintProc {
+	pop
+	exec fill
+} def
+currentdict
+end
+/P2 exch def
+
+% crosshatch45
+11 dict begin
+/PaintType 1 def
+/PatternType 1 def
+/TilingType 1 def
+/BBox [0 0 1 1] def
+/XStep 1 def
+/YStep 1 def
+/PatWidth 1 def
+/PatHeight 1 def
+/Multi 2 def
+/PaintData [
+  { clippath } bind
+  { 20 20 true [ 20 0 0 -20 0 20 ]
+	{<8020004050102088201104400a02800401000a02
+	8011044020882040501080200040501020882011
+	04400a02800401000a0280110440208820405010>}
+     imagemask } bind
+] def
+/PaintProc {
+	pop
+	exec fill
+} def
+currentdict
+end
+/P6 exch def
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+  bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+  4 -2 roll mul srgb} bind def
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+$F2psBegin
+10 setmiterlimit
+0 slj 0 slc
+ 0.06299 0.06299 sc
+%
+% Fig objects follow
+%
+% 
+% here starts figure with depth 52
+% Polyline
+7.500 slw
+ [60] 0 sd
+n 1215 1665 m
+ 1620 3870 l gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
+15.00 15.00 sc P6 [16 0 0 -16 81.00 111.00] PATmp PATsp ef gr PATusp gs col0 s gr  [] 0 sd
+% Polyline
+ [60] 0 sd
+n 2296 1665 m
+ 2700 3870 l gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
+15.00 15.00 sc P6 [16 0 0 -16 153.07 111.00] PATmp PATsp ef gr PATusp gs col0 s gr  [] 0 sd
+% Polyline
+ [60] 0 sd
+n 3735 1665 m
+ 2700 3870 l gs col0 s gr  [] 0 sd
+% Polyline
+ [60] 0 sd
+n 4453 1664 m
+ 3420 3870 l gs col0 s gr  [] 0 sd
+% Polyline
+ [60] 0 sd
+n 3735 1665 m
+ 5130 3870 l gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
+15.00 15.00 sc P2 [16 0 0 -8 249.00 111.00] PATmp PATsp ef gr PATusp gs col0 s gr  [] 0 sd
+% Polyline
+ [60] 0 sd
+n 7650 1665 m
+ 5850 3870 l gs col0 s gr  [] 0 sd
+% Polyline
+ [60] 0 sd
+n 8730 1665 m
+ 6930 3870 l gs col0 s gr  [] 0 sd
+% Polyline
+ [60] 0 sd
+n 4455 1665 m
+ 5850 3870 l gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
+15.00 15.00 sc P2 [16 0 0 -8 297.00 111.00] PATmp PATsp ef gr PATusp gs col0 s gr  [] 0 sd
+% Polyline
+n 6675 2520 m 6570 2520 6570 2775 105 arcto 4 {pop} repeat
+  6570 2880 7995 2880 105 arcto 4 {pop} repeat
+  8100 2880 8100 2625 105 arcto 4 {pop} repeat
+  8100 2520 6675 2520 105 arcto 4 {pop} repeat
+ cp gs col7 1.00 shd ef gr gs col0 s gr 
+% Polyline
+n 1440 2520 m 1350 2520 1350 2790 90 arcto 4 {pop} repeat
+  1350 2880 2520 2880 90 arcto 4 {pop} repeat
+  2610 2880 2610 2610 90 arcto 4 {pop} repeat
+  2610 2520 1440 2520 90 arcto 4 {pop} repeat
+ cp gs col7 1.00 shd ef gr gs col0 s gr 
+% Polyline
+n 3090 2520 m 3015 2520 3015 2805 75 arcto 4 {pop} repeat
+  3015 2880 4065 2880 75 arcto 4 {pop} repeat
+  4140 2880 4140 2595 75 arcto 4 {pop} repeat
+  4140 2520 3090 2520 75 arcto 4 {pop} repeat
+ cp gs col7 1.00 shd ef gr gs col0 s gr 
+% Polyline
+n 4260 2520 m 4185 2520 4185 2805 75 arcto 4 {pop} repeat
+  4185 2880 5235 2880 75 arcto 4 {pop} repeat
+  5310 2880 5310 2595 75 arcto 4 {pop} repeat
+  5310 2520 4260 2520 75 arcto 4 {pop} repeat
+ cp gs col7 1.00 shd ef gr gs col0 s gr 
+% Arc
+n 1755.0 1440.0 540.0 180.0 0.0 arc
+gs col7 1.00 shd ef gr gs col0 s gr
+
+% Arc
+n 4095.0 1440.0 360.0 180.0 0.0 arc
+gs col7 1.00 shd ef gr gs col0 s gr
+
+% Arc
+n 8190.0 1440.0 540.0 180.0 0.0 arc
+gs col7 1.00 shd ef gr gs col0 s gr
+
+% Polyline
+ [60] 0 sd
+n 1935 1440 m 2115 1440 l 2115 1665 l 1935 1665 l
+ cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
+15.00 15.00 sc P2 [16 0 0 -8 129.00 96.00] PATmp PATsp ef gr PATusp gs col0 s gr  [] 0 sd
+% Polyline
+ [60] 0 sd
+n 1395 1440 m 1755 1440 l 1755 1665 l 1395 1665 l
+ cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
+15.00 15.00 sc P2 [16 0 0 -8 93.00 96.00] PATmp PATsp ef gr PATusp gs col0 s gr  [] 0 sd
+% Polyline
+ [60] 0 sd
+n 3735 1440 m 4095 1440 l 4095 1665 l 3735 1665 l
+ cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
+15.00 15.00 sc P2 [16 0 0 -8 249.00 96.00] PATmp PATsp ef gr PATusp gs col0 s gr  [] 0 sd
+% Polyline
+ [60] 0 sd
+n 1800 3870 m 2160 3870 l 2160 4095 l 1800 4095 l
+ cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
+15.00 15.00 sc P2 [16 0 0 -8 120.00 258.00] PATmp PATsp ef gr PATusp gs col0 s gr  [] 0 sd
+% Polyline
+ [60] 0 sd
+n 2340 3870 m 2520 3870 l 2520 4095 l 2340 4095 l
+ cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
+15.00 15.00 sc P2 [16 0 0 -8 156.00 258.00] PATmp PATsp ef gr PATusp gs col0 s gr  [] 0 sd
+% Polyline
+ [60] 0 sd
+n 2700 3870 m 3060 3870 l 3060 4095 l 2700 4095 l
+ cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
+15.00 15.00 sc P2 [16 0 0 -8 180.00 258.00] PATmp PATsp ef gr PATusp gs col0 s gr  [] 0 sd
+% Polyline
+n 1620 3870 m
+ 1620 4095 l gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
+15.00 15.00 sc P6 [16 0 0 -16 108.00 258.00] PATmp PATsp ef gr PATusp gs col0 s gr 
+% Polyline
+n 1800 3870 m
+ 1800 4095 l gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
+15.00 15.00 sc P6 [16 0 0 -16 120.00 258.00] PATmp PATsp ef gr PATusp gs col0 s gr 
+% Polyline
+n 2160 3870 m
+ 2160 4095 l gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
+15.00 15.00 sc P6 [16 0 0 -16 144.00 258.00] PATmp PATsp ef gr PATusp gs col0 s gr 
+% Polyline
+n 2340 3870 m
+ 2340 4095 l gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
+15.00 15.00 sc P6 [16 0 0 -16 156.00 258.00] PATmp PATsp ef gr PATusp gs col0 s gr 
+% Polyline
+n 2520 3870 m
+ 2520 4095 l gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
+15.00 15.00 sc P6 [16 0 0 -16 168.00 258.00] PATmp PATsp ef gr PATusp gs col0 s gr 
+% Polyline
+n 2700 3870 m
+ 2700 4095 l gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
+15.00 15.00 sc P6 [16 0 0 -16 180.00 258.00] PATmp PATsp ef gr PATusp gs col0 s gr 
+% Polyline
+n 3060 3870 m
+ 3060 4095 l gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
+15.00 15.00 sc P6 [16 0 0 -16 204.00 258.00] PATmp PATsp ef gr PATusp gs col0 s gr 
+% Polyline
+n 3240 3870 m
+ 3240 4095 l gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
+15.00 15.00 sc P6 [16 0 0 -16 216.00 258.00] PATmp PATsp ef gr PATusp gs col0 s gr 
+% Polyline
+n 3420 3870 m
+ 3420 4095 l gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
+15.00 15.00 sc P6 [16 0 0 -16 228.00 258.00] PATmp PATsp ef gr PATusp gs col0 s gr 
+% Polyline
+n 1440 3870 m
+ 1440 4095 l gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
+15.00 15.00 sc P6 [16 0 0 -16 96.00 258.00] PATmp PATsp ef gr PATusp gs col0 s gr 
+% Polyline
+n 1260 3870 m
+ 1260 4095 l gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
+15.00 15.00 sc P6 [16 0 0 -16 84.00 258.00] PATmp PATsp ef gr PATusp gs col0 s gr 
+% Polyline
+n 1080 3870 m
+ 3600 3870 l gs col0 s gr 
+% Polyline
+n 1080 4095 m
+ 3600 4095 l gs col0 s gr 
+% Polyline
+ [60] 0 sd
+n 5130 3870 m 5490 3870 l 5490 4095 l 5130 4095 l
+ cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
+15.00 15.00 sc P2 [16 0 0 -8 342.00 258.00] PATmp PATsp ef gr PATusp gs col0 s gr  [] 0 sd
+% Polyline
+n 4590 3870 m
+ 4590 4095 l gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
+15.00 15.00 sc P6 [16 0 0 -16 306.00 258.00] PATmp PATsp ef gr PATusp gs col0 s gr 
+% Polyline
+n 4770 3870 m
+ 4770 4095 l gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
+15.00 15.00 sc P6 [16 0 0 -16 318.00 258.00] PATmp PATsp ef gr PATusp gs col0 s gr 
+% Polyline
+n 4950 3870 m
+ 4950 4095 l gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
+15.00 15.00 sc P6 [16 0 0 -16 330.00 258.00] PATmp PATsp ef gr PATusp gs col0 s gr 
+% Polyline
+n 5130 3870 m
+ 5130 4095 l gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
+15.00 15.00 sc P6 [16 0 0 -16 342.00 258.00] PATmp PATsp ef gr PATusp gs col0 s gr 
+% Polyline
+n 5490 3870 m
+ 5490 4095 l gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
+15.00 15.00 sc P6 [16 0 0 -16 366.00 258.00] PATmp PATsp ef gr PATusp gs col0 s gr 
+% Polyline
+n 5670 3870 m
+ 5670 4095 l gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
+15.00 15.00 sc P6 [16 0 0 -16 378.00 258.00] PATmp PATsp ef gr PATusp gs col0 s gr 
+% Polyline
+n 5850 3870 m
+ 5850 4095 l gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
+15.00 15.00 sc P6 [16 0 0 -16 390.00 258.00] PATmp PATsp ef gr PATusp gs col0 s gr 
+% Polyline
+n 6030 3870 m
+ 6030 4095 l gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
+15.00 15.00 sc P6 [16 0 0 -16 402.00 258.00] PATmp PATsp ef gr PATusp gs col0 s gr 
+% Polyline
+n 6210 3870 m
+ 6210 4095 l gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
+15.00 15.00 sc P6 [16 0 0 -16 414.00 258.00] PATmp PATsp ef gr PATusp gs col0 s gr 
+% Polyline
+n 4410 3870 m
+ 4410 4095 l gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
+15.00 15.00 sc P6 [16 0 0 -16 294.00 258.00] PATmp PATsp ef gr PATusp gs col0 s gr 
+% Polyline
+n 4230 3870 m
+ 4230 4095 l gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
+15.00 15.00 sc P6 [16 0 0 -16 282.00 258.00] PATmp PATsp ef gr PATusp gs col0 s gr 
+% Polyline
+n 4050 3870 m
+ 7470 3870 l gs col0 s gr 
+% Polyline
+n 4050 4095 m
+ 7470 4095 l gs col0 s gr 
+% Polyline
+n 6930 1440 m
+ 6930 1665 l gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
+15.00 15.00 sc P6 [16 0 0 -16 462.00 96.00] PATmp PATsp ef gr PATusp gs col0 s gr 
+% Polyline
+n 7110 1440 m
+ 7110 1665 l gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
+15.00 15.00 sc P6 [16 0 0 -16 474.00 96.00] PATmp PATsp ef gr PATusp gs col0 s gr 
+% Polyline
+n 7290 1440 m
+ 7290 1665 l gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
+15.00 15.00 sc P6 [16 0 0 -16 486.00 96.00] PATmp PATsp ef gr PATusp gs col0 s gr 
+% Polyline
+n 7470 1440 m
+ 7470 1665 l gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
+15.00 15.00 sc P6 [16 0 0 -16 498.00 96.00] PATmp PATsp ef gr PATusp gs col0 s gr 
+% Polyline
+n 7650 1440 m
+ 7650 1665 l gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
+15.00 15.00 sc P6 [16 0 0 -16 510.00 96.00] PATmp PATsp ef gr PATusp gs col0 s gr 
+% Polyline
+n 7830 1440 m
+ 7830 1665 l gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
+15.00 15.00 sc P6 [16 0 0 -16 522.00 96.00] PATmp PATsp ef gr PATusp gs col0 s gr 
+% Polyline
+n 8010 1440 m
+ 8010 1665 l gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
+15.00 15.00 sc P6 [16 0 0 -16 534.00 96.00] PATmp PATsp ef gr PATusp gs col0 s gr 
+% Polyline
+n 8730 1440 m
+ 8730 1665 l gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
+15.00 15.00 sc P6 [16 0 0 -16 582.00 96.00] PATmp PATsp ef gr PATusp gs col0 s gr 
+% Polyline
+n 8910 1440 m
+ 8910 1665 l gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
+15.00 15.00 sc P6 [16 0 0 -16 594.00 96.00] PATmp PATsp ef gr PATusp gs col0 s gr 
+% Polyline
+n 6750 1440 m
+ 6750 1665 l gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
+15.00 15.00 sc P6 [16 0 0 -16 450.00 96.00] PATmp PATsp ef gr PATusp gs col0 s gr 
+% Polyline
+n 6570 1440 m
+ 6570 1665 l gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
+15.00 15.00 sc P6 [16 0 0 -16 438.00 96.00] PATmp PATsp ef gr PATusp gs col0 s gr 
+% Polyline
+n 6390 1440 m
+ 9090 1440 l gs col0 s gr 
+% Polyline
+n 6390 1665 m
+ 9090 1665 l gs col0 s gr 
+% Polyline
+n 8010 1440 m 8730 1440 l 8730 1665 l 8010 1665 l
+ cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
+15.00 15.00 sc P2 [16 0 0 -8 534.00 96.00] PATmp PATsp ef gr PATusp gs col0 s gr 
+% Polyline
+n 6930 3870 m
+ 6930 4095 l gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
+15.00 15.00 sc P6 [16 0 0 -16 462.00 258.00] PATmp PATsp ef gr PATusp gs col0 s gr 
+% Polyline
+n 6210 3870 m 6930 3870 l 6930 4095 l 6210 4095 l
+ cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
+15.00 15.00 sc P2 [16 0 0 -8 414.00 258.00] PATmp PATsp ef gr PATusp gs col0 s gr 
+% Polyline
+n 6165 630 m 9225 630 l 9225 3015 l 6165 3015 l
+ cp gs col0 s gr 
+% Polyline
+n 450 630 m 5490 630 l 5490 3015 l 450 3015 l
+ cp gs col0 s gr 
+% Polyline
+n 1215 1440 m
+ 1215 1665 l gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
+15.00 15.00 sc P6 [16 0 0 -16 81.00 96.00] PATmp PATsp ef gr PATusp gs col0 s gr 
+% Polyline
+n 1395 1440 m
+ 1395 1665 l gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
+15.00 15.00 sc P6 [16 0 0 -16 93.00 96.00] PATmp PATsp ef gr PATusp gs col0 s gr 
+% Polyline
+n 1755 1440 m
+ 1755 1665 l gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
+15.00 15.00 sc P6 [16 0 0 -16 117.00 96.00] PATmp PATsp ef gr PATusp gs col0 s gr 
+% Polyline
+n 1935 1440 m
+ 1935 1665 l gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
+15.00 15.00 sc P6 [16 0 0 -16 129.00 96.00] PATmp PATsp ef gr PATusp gs col0 s gr 
+% Polyline
+n 2115 1440 m
+ 2115 1665 l gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
+15.00 15.00 sc P6 [16 0 0 -16 141.00 96.00] PATmp PATsp ef gr PATusp gs col0 s gr 
+% Polyline
+n 2295 1440 m
+ 2295 1665 l gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
+15.00 15.00 sc P6 [16 0 0 -16 153.00 96.00] PATmp PATsp ef gr PATusp gs col0 s gr 
+% Polyline
+n 2475 1440 m
+ 2475 1665 l gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
+15.00 15.00 sc P6 [16 0 0 -16 165.00 96.00] PATmp PATsp ef gr PATusp gs col0 s gr 
+% Polyline
+n 2655 1440 m
+ 2655 1665 l gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
+15.00 15.00 sc P6 [16 0 0 -16 177.00 96.00] PATmp PATsp ef gr PATusp gs col0 s gr 
+% Polyline
+n 2835 1440 m
+ 2835 1665 l gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
+15.00 15.00 sc P6 [16 0 0 -16 189.00 96.00] PATmp PATsp ef gr PATusp gs col0 s gr 
+% Polyline
+n 3015 1440 m
+ 3015 1665 l gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
+15.00 15.00 sc P6 [16 0 0 -16 201.00 96.00] PATmp PATsp ef gr PATusp gs col0 s gr 
+% Polyline
+n 3195 1440 m
+ 3195 1665 l gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
+15.00 15.00 sc P6 [16 0 0 -16 213.00 96.00] PATmp PATsp ef gr PATusp gs col0 s gr 
+% Polyline
+n 3375 1440 m
+ 3375 1665 l gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
+15.00 15.00 sc P6 [16 0 0 -16 225.00 96.00] PATmp PATsp ef gr PATusp gs col0 s gr 
+% Polyline
+n 3555 1440 m
+ 3555 1665 l gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
+15.00 15.00 sc P6 [16 0 0 -16 237.00 96.00] PATmp PATsp ef gr PATusp gs col0 s gr 
+% Polyline
+n 3735 1440 m
+ 3735 1665 l gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
+15.00 15.00 sc P6 [16 0 0 -16 249.00 96.00] PATmp PATsp ef gr PATusp gs col0 s gr 
+% Polyline
+n 4095 1440 m
+ 4095 1665 l gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
+15.00 15.00 sc P6 [16 0 0 -16 273.00 96.00] PATmp PATsp ef gr PATusp gs col0 s gr 
+% Polyline
+n 4275 1440 m
+ 4275 1665 l gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
+15.00 15.00 sc P6 [16 0 0 -16 285.00 96.00] PATmp PATsp ef gr PATusp gs col0 s gr 
+% Polyline
+n 4455 1440 m
+ 4455 1665 l gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
+15.00 15.00 sc P6 [16 0 0 -16 297.00 96.00] PATmp PATsp ef gr PATusp gs col0 s gr 
+% Polyline
+n 4635 1440 m
+ 4635 1665 l gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
+15.00 15.00 sc P6 [16 0 0 -16 309.00 96.00] PATmp PATsp ef gr PATusp gs col0 s gr 
+% Polyline
+n 4815 1440 m
+ 4815 1665 l gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
+15.00 15.00 sc P6 [16 0 0 -16 321.00 96.00] PATmp PATsp ef gr PATusp gs col0 s gr 
+% Polyline
+n 1035 1440 m
+ 1035 1665 l gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
+15.00 15.00 sc P6 [16 0 0 -16 69.00 96.00] PATmp PATsp ef gr PATusp gs col0 s gr 
+% Polyline
+n 855 1440 m
+ 855 1665 l gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
+15.00 15.00 sc P6 [16 0 0 -16 57.00 96.00] PATmp PATsp ef gr PATusp gs col0 s gr 
+% Polyline
+n 675 1440 m
+ 4995 1440 l gs col0 s gr 
+% Polyline
+n 675 1665 m
+ 4995 1665 l gs col0 s gr 
+% Polyline
+n 7110 3870 m
+ 7110 4095 l gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
+15.00 15.00 sc P6 [16 0 0 -16 474.00 258.00] PATmp PATsp ef gr PATusp gs col0 s gr 
+% Polyline
+n 7290 3870 m
+ 7290 4095 l gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
+15.00 15.00 sc P6 [16 0 0 -16 486.00 258.00] PATmp PATsp ef gr PATusp gs col0 s gr 
+% Polyline
+gs  clippath
+1830 4080 m 1770 4080 l 1770 4231 l 1800 4111 l 1830 4231 l cp
+eoclip
+n 1800 4410 m
+ 1800 4095 l gs col0 s gr gr
+
+% arrowhead
+n 1830 4231 m 1800 4111 l 1770 4231 l 1830 4231 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+gs  clippath
+2730 4080 m 2670 4080 l 2670 4231 l 2700 4111 l 2730 4231 l cp
+eoclip
+n 2700 4410 m
+ 2700 4095 l gs col0 s gr gr
+
+% arrowhead
+n 2730 4231 m 2700 4111 l 2670 4231 l 2730 4231 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+gs  clippath
+5160 4080 m 5100 4080 l 5100 4231 l 5130 4111 l 5160 4231 l cp
+eoclip
+n 5130 4410 m
+ 5130 4095 l gs col0 s gr gr
+
+% arrowhead
+n 5160 4231 m 5130 4111 l 5100 4231 l 5160 4231 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+gs  clippath
+6240 4080 m 6180 4080 l 6180 4231 l 6210 4111 l 6240 4231 l cp
+eoclip
+n 6210 4410 m
+ 6210 4095 l gs col0 s gr gr
+
+% arrowhead
+n 6240 4231 m 6210 4111 l 6180 4231 l 6240 4231 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+gs  clippath
+2370 4080 m 2310 4080 l 2310 4231 l 2340 4111 l 2370 4231 l cp
+eoclip
+n 2340 4410 m
+ 2340 4095 l gs col0 s gr gr
+
+% arrowhead
+n 2370 4231 m 2340 4111 l 2310 4231 l 2370 4231 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+gs  clippath
+3315 5235 m 3315 5295 l 3466 5295 l 3346 5265 l 3466 5235 l cp
+eoclip
+n 3645 5265 m
+ 3330 5265 l gs col0 s gr gr
+
+% arrowhead
+n 3466 5235 m 3346 5265 l 3466 5295 l 3466 5235 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+n 3465 4815 m 3645 4815 l 3645 5040 l 3465 5040 l
+ cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
+15.00 15.00 sc P2 [16 0 0 -8 231.00 321.00] PATmp PATsp ef gr PATusp gs col0 s gr 
+/Helvetica ff 180.00 scf sf
+675 1395 m
+gs 1 -1 sc (RAM) col0 sh gr
+/Helvetica ff 180.00 scf sf
+4095 1350 m
+gs 1 -1 sc (SM1) dup sw pop 2 div neg 0 rm  col0 sh gr
+/Helvetica ff 180.00 scf sf
+6390 1395 m
+gs 1 -1 sc (RAM) col0 sh gr
+/Helvetica ff 180.00 scf sf
+540 855 m
+gs 1 -1 sc (Slave0) col0 sh gr
+/Helvetica ff 180.00 scf sf
+6255 855 m
+gs 1 -1 sc (Slave1) col0 sh gr
+/Helvetica ff 180.00 scf sf
+7290 2745 m
+gs 1 -1 sc (FMMU0) dup sw pop 2 div neg 0 rm  col0 sh gr
+/Helvetica ff 180.00 scf sf
+1980 2745 m
+gs 1 -1 sc (FMMU0) dup sw pop 2 div neg 0 rm  col0 sh gr
+/Helvetica ff 180.00 scf sf
+3555 2745 m
+gs 1 -1 sc (FMMU1) dup sw pop 2 div neg 0 rm  col0 sh gr
+/Helvetica ff 180.00 scf sf
+4725 2745 m
+gs 1 -1 sc (FMMU2) dup sw pop 2 div neg 0 rm  col0 sh gr
+/Helvetica ff 180.00 scf sf
+1755 1305 m
+gs 1 -1 sc (SM0) dup sw pop 2 div neg 0 rm  col0 sh gr
+/Helvetica ff 180.00 scf sf
+8190 1305 m
+gs 1 -1 sc (SM3) dup sw pop 2 div neg 0 rm  col0 sh gr
+/Helvetica ff 180.00 scf sf
+1080 3825 m
+gs 1 -1 sc (Domain0 Image) col0 sh gr
+/Helvetica ff 180.00 scf sf
+4050 3825 m
+gs 1 -1 sc (Domain1 Image) col0 sh gr
+/Helvetica ff 180.00 scf sf
+3735 5310 m
+gs 1 -1 sc (Process data pointers) col0 sh gr
+/Helvetica ff 180.00 scf sf
+3735 4995 m
+gs 1 -1 sc (Registered PDOs) col0 sh gr
+% here ends figure;
+$F2psEnd
+rs
+end
+showpage
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/images/fmmus.fig	Mon Sep 25 15:53:33 2006 +0000
@@ -0,0 +1,223 @@
+#FIG 3.2
+Portrait
+Center
+Metric
+A4      
+100.00
+Single
+-2
+1200 2
+5 1 0 1 0 7 50 -1 20 0.000 0 0 0 0 1755.000 1440.000 1215 1440 1755 900 2295 1440
+5 1 0 1 0 7 50 -1 20 0.000 0 0 0 0 4095.000 1440.000 3735 1440 4095 1080 4455 1440
+5 1 0 1 0 7 50 -1 20 0.000 0 0 0 0 8190.000 1440.000 7650 1440 8190 900 8730 1440
+2 1 1 1 0 7 52 -1 46 4.000 0 0 -1 0 0 2
+	 1215 1665 1620 3870
+2 1 1 1 0 7 52 -1 46 4.000 0 0 -1 0 0 2
+	 2296 1665 2700 3870
+2 1 1 1 0 7 52 -1 -1 4.000 0 0 -1 0 0 2
+	 3735 1665 2700 3870
+2 1 1 1 0 7 52 -1 -1 4.000 0 0 -1 0 0 2
+	 4453 1664 3420 3870
+2 2 1 1 0 7 50 -1 42 4.000 0 0 -1 0 0 5
+	 1935 1440 2115 1440 2115 1665 1935 1665 1935 1440
+2 2 1 1 0 7 50 -1 42 4.000 0 0 -1 0 0 5
+	 1395 1440 1755 1440 1755 1665 1395 1665 1395 1440
+2 2 1 1 0 7 50 -1 42 4.000 0 0 -1 0 0 5
+	 3735 1440 4095 1440 4095 1665 3735 1665 3735 1440
+2 1 1 1 0 7 52 -1 42 4.000 0 0 -1 0 0 2
+	 3735 1665 5130 3870
+2 2 1 1 0 7 50 -1 42 4.000 0 0 -1 0 0 5
+	 1800 3870 2160 3870 2160 4095 1800 4095 1800 3870
+2 2 1 1 0 7 50 -1 42 4.000 0 0 -1 0 0 5
+	 2340 3870 2520 3870 2520 4095 2340 4095 2340 3870
+2 2 1 1 0 7 50 -1 42 4.000 0 0 -1 0 0 5
+	 2700 3870 3060 3870 3060 4095 2700 4095 2700 3870
+2 1 0 1 0 7 50 -1 46 0.000 0 0 -1 0 0 2
+	 1620 3870 1620 4095
+2 1 0 1 0 7 50 -1 46 0.000 0 0 -1 0 0 2
+	 1800 3870 1800 4095
+2 1 0 1 0 7 50 -1 46 0.000 0 0 -1 0 0 2
+	 2160 3870 2160 4095
+2 1 0 1 0 7 50 -1 46 0.000 0 0 -1 0 0 2
+	 2340 3870 2340 4095
+2 1 0 1 0 7 50 -1 46 0.000 0 0 -1 0 0 2
+	 2520 3870 2520 4095
+2 1 0 1 0 7 50 -1 46 0.000 0 0 -1 0 0 2
+	 2700 3870 2700 4095
+2 1 0 1 0 7 50 -1 46 0.000 0 0 -1 0 0 2
+	 3060 3870 3060 4095
+2 1 0 1 0 7 50 -1 46 0.000 0 0 -1 0 0 2
+	 3240 3870 3240 4095
+2 1 0 1 0 7 50 -1 46 0.000 0 0 -1 0 0 2
+	 3420 3870 3420 4095
+2 1 0 1 0 7 50 -1 46 0.000 0 0 -1 0 0 2
+	 1440 3870 1440 4095
+2 1 0 1 0 7 50 -1 46 0.000 0 0 -1 0 0 2
+	 1260 3870 1260 4095
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1080 3870 3600 3870
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1080 4095 3600 4095
+2 2 1 1 0 7 50 -1 42 4.000 0 0 -1 0 0 5
+	 5130 3870 5490 3870 5490 4095 5130 4095 5130 3870
+2 1 0 1 0 7 50 -1 46 0.000 0 0 -1 0 0 2
+	 4590 3870 4590 4095
+2 1 0 1 0 7 50 -1 46 0.000 0 0 -1 0 0 2
+	 4770 3870 4770 4095
+2 1 0 1 0 7 50 -1 46 0.000 0 0 -1 0 0 2
+	 4950 3870 4950 4095
+2 1 0 1 0 7 50 -1 46 0.000 0 0 -1 0 0 2
+	 5130 3870 5130 4095
+2 1 0 1 0 7 50 -1 46 0.000 0 0 -1 0 0 2
+	 5490 3870 5490 4095
+2 1 0 1 0 7 50 -1 46 0.000 0 0 -1 0 0 2
+	 5670 3870 5670 4095
+2 1 0 1 0 7 50 -1 46 0.000 0 0 -1 0 0 2
+	 5850 3870 5850 4095
+2 1 0 1 0 7 50 -1 46 0.000 0 0 -1 0 0 2
+	 6030 3870 6030 4095
+2 1 0 1 0 7 50 -1 46 0.000 0 0 -1 0 0 2
+	 6210 3870 6210 4095
+2 1 0 1 0 7 50 -1 46 0.000 0 0 -1 0 0 2
+	 4410 3870 4410 4095
+2 1 0 1 0 7 50 -1 46 0.000 0 0 -1 0 0 2
+	 4230 3870 4230 4095
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 4050 3870 7470 3870
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 4050 4095 7470 4095
+2 1 0 1 0 7 50 -1 46 0.000 0 0 -1 0 0 2
+	 6930 1440 6930 1665
+2 1 0 1 0 7 50 -1 46 0.000 0 0 -1 0 0 2
+	 7110 1440 7110 1665
+2 1 0 1 0 7 50 -1 46 0.000 0 0 -1 0 0 2
+	 7290 1440 7290 1665
+2 1 0 1 0 7 50 -1 46 0.000 0 0 -1 0 0 2
+	 7470 1440 7470 1665
+2 1 0 1 0 7 50 -1 46 0.000 0 0 -1 0 0 2
+	 7650 1440 7650 1665
+2 1 0 1 0 7 50 -1 46 0.000 0 0 -1 0 0 2
+	 7830 1440 7830 1665
+2 1 0 1 0 7 50 -1 46 0.000 0 0 -1 0 0 2
+	 8010 1440 8010 1665
+2 1 0 1 0 7 50 -1 46 0.000 0 0 -1 0 0 2
+	 8730 1440 8730 1665
+2 1 0 1 0 7 50 -1 46 0.000 0 0 -1 0 0 2
+	 8910 1440 8910 1665
+2 1 0 1 0 7 50 -1 46 0.000 0 0 -1 0 0 2
+	 6750 1440 6750 1665
+2 1 0 1 0 7 50 -1 46 0.000 0 0 -1 0 0 2
+	 6570 1440 6570 1665
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 6390 1440 9090 1440
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 6390 1665 9090 1665
+2 2 0 1 0 7 50 -1 42 0.000 0 0 -1 0 0 5
+	 8010 1440 8730 1440 8730 1665 8010 1665 8010 1440
+2 1 1 1 0 7 52 -1 -1 4.000 0 0 -1 0 0 2
+	 7650 1665 5850 3870
+2 1 1 1 0 7 52 -1 -1 4.000 0 0 -1 0 0 2
+	 8730 1665 6930 3870
+2 1 0 1 0 7 50 -1 46 0.000 0 0 -1 0 0 2
+	 6930 3870 6930 4095
+2 4 0 1 0 7 51 -1 20 0.000 0 0 7 0 0 5
+	 8100 2880 6570 2880 6570 2520 8100 2520 8100 2880
+2 2 0 1 0 7 50 -1 42 0.000 0 0 -1 0 0 5
+	 6210 3870 6930 3870 6930 4095 6210 4095 6210 3870
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 6165 630 9225 630 9225 3015 6165 3015 6165 630
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 450 630 5490 630 5490 3015 450 3015 450 630
+2 4 0 1 0 7 51 -1 20 0.000 0 0 6 0 0 5
+	 2610 2880 1350 2880 1350 2520 2610 2520 2610 2880
+2 4 0 1 0 7 51 -1 20 0.000 0 0 5 0 0 5
+	 4140 2880 3015 2880 3015 2520 4140 2520 4140 2880
+2 1 0 1 0 7 50 -1 46 0.000 0 0 -1 0 0 2
+	 1215 1440 1215 1665
+2 1 0 1 0 7 50 -1 46 0.000 0 0 -1 0 0 2
+	 1395 1440 1395 1665
+2 1 0 1 0 7 50 -1 46 0.000 0 0 -1 0 0 2
+	 1755 1440 1755 1665
+2 1 0 1 0 7 50 -1 46 0.000 0 0 -1 0 0 2
+	 1935 1440 1935 1665
+2 1 0 1 0 7 50 -1 46 0.000 0 0 -1 0 0 2
+	 2115 1440 2115 1665
+2 1 0 1 0 7 50 -1 46 0.000 0 0 -1 0 0 2
+	 2295 1440 2295 1665
+2 1 0 1 0 7 50 -1 46 0.000 0 0 -1 0 0 2
+	 2475 1440 2475 1665
+2 1 0 1 0 7 50 -1 46 0.000 0 0 -1 0 0 2
+	 2655 1440 2655 1665
+2 1 0 1 0 7 50 -1 46 0.000 0 0 -1 0 0 2
+	 2835 1440 2835 1665
+2 1 0 1 0 7 50 -1 46 0.000 0 0 -1 0 0 2
+	 3015 1440 3015 1665
+2 1 0 1 0 7 50 -1 46 0.000 0 0 -1 0 0 2
+	 3195 1440 3195 1665
+2 1 0 1 0 7 50 -1 46 0.000 0 0 -1 0 0 2
+	 3375 1440 3375 1665
+2 1 0 1 0 7 50 -1 46 0.000 0 0 -1 0 0 2
+	 3555 1440 3555 1665
+2 1 0 1 0 7 50 -1 46 0.000 0 0 -1 0 0 2
+	 3735 1440 3735 1665
+2 1 0 1 0 7 50 -1 46 0.000 0 0 -1 0 0 2
+	 4095 1440 4095 1665
+2 1 0 1 0 7 50 -1 46 0.000 0 0 -1 0 0 2
+	 4275 1440 4275 1665
+2 1 0 1 0 7 50 -1 46 0.000 0 0 -1 0 0 2
+	 4455 1440 4455 1665
+2 1 0 1 0 7 50 -1 46 0.000 0 0 -1 0 0 2
+	 4635 1440 4635 1665
+2 1 0 1 0 7 50 -1 46 0.000 0 0 -1 0 0 2
+	 4815 1440 4815 1665
+2 1 0 1 0 7 50 -1 46 0.000 0 0 -1 0 0 2
+	 1035 1440 1035 1665
+2 1 0 1 0 7 50 -1 46 0.000 0 0 -1 0 0 2
+	 855 1440 855 1665
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 675 1440 4995 1440
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 675 1665 4995 1665
+2 1 0 1 0 7 50 -1 46 0.000 0 0 -1 0 0 2
+	 7110 3870 7110 4095
+2 1 0 1 0 7 50 -1 46 0.000 0 0 -1 0 0 2
+	 7290 3870 7290 4095
+2 4 0 1 0 7 51 -1 20 0.000 0 0 5 0 0 5
+	 5310 2880 4185 2880 4185 2520 5310 2520 5310 2880
+2 1 1 1 0 7 52 -1 42 4.000 0 0 -1 0 0 2
+	 4455 1665 5850 3870
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 1800 4410 1800 4095
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 2700 4410 2700 4095
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 5130 4410 5130 4095
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 6210 4410 6210 4095
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 2340 4410 2340 4095
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 3645 5265 3330 5265
+2 2 0 1 0 7 50 -1 42 0.000 0 0 -1 0 0 5
+	 3465 4815 3645 4815 3645 5040 3465 5040 3465 4815
+4 0 0 50 -1 16 12 0.0000 4 120 720 675 1395 RAM\001
+4 1 0 50 -1 16 12 0.0000 4 120 660 4095 1350 SM1\001
+4 0 0 50 -1 16 12 0.0000 4 120 720 6390 1395 RAM\001
+4 0 0 50 -1 16 12 0.0000 4 120 1005 540 855 Slave0\001
+4 0 0 50 -1 16 12 0.0000 4 120 1005 6255 855 Slave1\001
+4 1 0 50 -1 16 12 0.0000 4 120 1125 7290 2745 FMMU0\001
+4 1 0 50 -1 16 12 0.0000 4 120 1125 1980 2745 FMMU0\001
+4 1 0 50 -1 16 12 0.0000 4 120 1125 3555 2745 FMMU1\001
+4 1 0 50 -1 16 12 0.0000 4 120 1125 4725 2745 FMMU2\001
+4 1 0 50 -1 16 12 0.0000 4 120 660 1755 1305 SM0\001
+4 1 0 50 -1 16 12 0.0000 4 120 660 8190 1305 SM3\001
+4 0 0 50 -1 16 12 0.0000 4 165 2235 1080 3825 Domain0 Image\001
+4 0 0 50 -1 16 12 0.0000 4 165 2235 4050 3825 Domain1 Image\001
+4 0 0 50 -1 16 12 0.0000 4 150 3090 3735 5310 Process data pointers\001
+4 0 0 50 -1 16 12 0.0000 4 165 2520 3735 4995 Registered PDOs\001
Binary file doc/images/fmmus.pdf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/images/fsm-change.eps	Mon Sep 25 15:53:33 2006 +0000
@@ -0,0 +1,424 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: fsm-change.fig
+%%Creator: fig2dev Version 3.2 Patchlevel 4
+%%CreationDate: Thu Jul 20 10:40:23 2006
+%%For: fp@jupiter (Florian Pose)
+%%BoundingBox: 0 0 510 193
+%%Magnification: 1.0000
+%%EndComments
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+/col32 {0.555 0.555 0.555 srgb} bind def
+
+end
+save
+newpath 0 193 moveto 0 0 lineto 510 0 lineto 510 193 lineto closepath clip newpath
+-24.3 221.9 translate
+1 -1 scale
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+  bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+  4 -2 roll mul srgb} bind def
+ /DrawEllipse {
+	/endangle exch def
+	/startangle exch def
+	/yrad exch def
+	/xrad exch def
+	/y exch def
+	/x exch def
+	/savematrix mtrx currentmatrix def
+	x y tr xrad yrad sc 0 0 1 startangle endangle arc
+	closepath
+	savematrix setmatrix
+	} def
+
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+$F2psBegin
+10 setmiterlimit
+0 slj 0 slc
+ 0.06299 0.06299 sc
+%
+% Fig objects follow
+%
+% 
+% here starts figure with depth 50
+% Ellipse
+7.500 slw
+n 1260 2745 855 360 0 360 DrawEllipse gs col0 s gr
+
+/Helvetica ff 180.00 scf sf
+1260 2790 m
+gs 1 -1 sc (CODE) dup sw pop 2 div neg 0 rm  col0 sh gr
+% Ellipse
+n 3375 2745 855 360 0 360 DrawEllipse gs col0 s gr
+
+/Helvetica ff 180.00 scf sf
+3375 2790 m
+gs 1 -1 sc (ACK) dup sw pop 2 div neg 0 rm  col0 sh gr
+% Ellipse
+n 5490 2745 855 360 0 360 DrawEllipse gs col0 s gr
+
+/Helvetica ff 180.00 scf sf
+5490 2790 m
+gs 1 -1 sc (CHECK ACK) dup sw pop 2 div neg 0 rm  col0 sh gr
+% Ellipse
+n 7605 2745 855 360 0 360 DrawEllipse gs col0 s gr
+
+% Ellipse
+n 7605 2738 765 322 0 360 DrawEllipse gs col0 s gr
+
+/Helvetica ff 180.00 scf sf
+7605 2790 m
+gs 1 -1 sc (ERROR) dup sw pop 2 div neg 0 rm  col0 sh gr
+% Ellipse
+n 3375 1260 855 360 0 360 DrawEllipse gs col0 s gr
+
+/Helvetica ff 180.00 scf sf
+3375 1305 m
+gs 1 -1 sc (CHECK) dup sw pop 2 div neg 0 rm  col0 sh gr
+% Ellipse
+n 5490 1260 855 360 0 360 DrawEllipse gs col0 s gr
+
+/Helvetica ff 180.00 scf sf
+5490 1305 m
+gs 1 -1 sc (STATUS) dup sw pop 2 div neg 0 rm  col0 sh gr
+% Ellipse
+n 7605 1260 855 360 0 360 DrawEllipse gs col0 s gr
+
+% Ellipse
+n 7605 1261 748 315 0 360 DrawEllipse gs col0 s gr
+
+/Helvetica ff 180.00 scf sf
+7605 1305 m
+gs 1 -1 sc (END) dup sw pop 2 div neg 0 rm  col0 sh gr
+% Ellipse
+n 1260 1260 855 360 0 360 DrawEllipse gs col0 s gr
+
+/Helvetica ff 180.00 scf sf
+1260 1305 m
+gs 1 -1 sc (START) dup sw pop 2 div neg 0 rm  col0 sh gr
+% Ellipse
+n 495 675 101 101 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Polyline
+2 slj
+gs  clippath
+2535 1290 m 2535 1230 l 2384 1230 l 2504 1260 l 2384 1290 l cp
+eoclip
+n 2115 1260 m
+ 2520 1260 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 2384 1290 m 2504 1260 l 2384 1230 l 2384 1290 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+4650 1290 m 4650 1230 l 4499 1230 l 4619 1260 l 4499 1290 l cp
+eoclip
+n 4230 1260 m
+ 4635 1260 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 4499 1290 m 4619 1260 l 4499 1230 l 4499 1290 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+6765 1290 m 6765 1230 l 6614 1230 l 6734 1260 l 6614 1290 l cp
+eoclip
+n 6345 1260 m
+ 6750 1260 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 6614 1290 m 6734 1260 l 6614 1230 l 6614 1290 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+5326 917 m 5386 912 l 5371 761 l 5353 884 l 5311 767 l cp
+eoclip
+n 5670 900 m 5671 897 l 5672 892 l 5674 882 l 5677 868 l 5681 849 l
+ 5686 827 l 5691 803 l 5695 776 l 5699 749 l 5702 721 l
+ 5704 693 l 5705 666 l 5703 639 l 5700 612 l 5693 586 l
+ 5683 562 l 5670 540 l 5657 525 l 5643 513 l 5628 504 l
+ 5614 496 l 5601 491 l 5588 487 l 5577 484 l 5567 482 l
+ 5557 481 l 5548 480 l 5539 480 l 5530 480 l 5520 481 l
+ 5510 482 l 5500 484 l 5488 487 l 5475 491 l 5461 496 l
+ 5446 504 l 5431 513 l 5415 525 l 5400 540 l 5384 562 l
+ 5371 586 l 5361 612 l 5354 639 l 5349 666 l 5346 693 l
+ 5345 721 l 5345 749 l 5345 776 l 5346 803 l 5348 827 l
+ 5350 849 l 5352 868 l
+ 5355 900 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 5311 767 m 5353 884 l 5371 761 l 5311 767 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+2535 2775 m 2535 2715 l 2384 2715 l 2504 2745 l 2384 2775 l cp
+eoclip
+n 2115 2745 m
+ 2520 2745 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 2384 2775 m 2504 2745 l 2384 2715 l 2384 2775 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+4650 2775 m 4650 2715 l 4499 2715 l 4619 2745 l 4499 2775 l cp
+eoclip
+n 4230 2745 m
+ 4635 2745 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 4499 2775 m 4619 2745 l 4499 2715 l 4499 2775 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+6765 2775 m 6765 2715 l 6614 2715 l 6734 2745 l 6614 2775 l cp
+eoclip
+n 6345 2745 m
+ 6750 2745 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 6614 2775 m 6734 2745 l 6614 2715 l 6614 2775 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+1723 2417 m 1764 2462 l 1875 2360 l 1767 2419 l 1835 2316 l cp
+eoclip
+n 4905 1530 m 4905 1531 l 4905 1532 l 4905 1534 l 4905 1538 l 4906 1543 l
+ 4906 1549 l 4906 1558 l 4905 1568 l 4905 1579 l 4903 1592 l
+ 4901 1606 l 4899 1621 l 4895 1638 l 4890 1654 l 4884 1672 l
+ 4876 1690 l 4867 1708 l 4855 1727 l 4841 1746 l 4825 1765 l
+ 4806 1784 l 4783 1803 l 4757 1822 l 4727 1842 l 4692 1862 l
+ 4652 1882 l 4607 1902 l 4555 1922 l 4498 1942 l 4434 1961 l
+ 4365 1980 l 4306 1994 l 4246 2007 l 4186 2019 l 4126 2030 l
+ 4068 2040 l 4012 2048 l 3959 2055 l 3909 2060 l 3862 2064 l
+ 3818 2068 l 3778 2070 l 3740 2071 l 3706 2071 l 3673 2071 l
+ 3643 2070 l 3615 2068 l 3589 2066 l 3563 2064 l 3538 2061 l
+ 3514 2059 l 3489 2056 l 3464 2053 l 3438 2051 l 3411 2049 l
+ 3382 2047 l 3352 2046 l 3318 2045 l 3283 2045 l 3244 2045 l
+ 3201 2047 l 3156 2049 l 3106 2052 l 3053 2056 l 2997 2062 l
+ 2937 2068 l 2874 2076 l 2809 2084 l 2743 2094 l 2676 2104 l
+ 2610 2115 l 2525 2130 l 2446 2146 l 2373 2162 l 2306 2178 l
+ 2246 2193 l 2191 2208 l 2142 2223 l 2098 2238 l 2058 2252 l
+ 2022 2266 l 1989 2281 l 1959 2294 l 1932 2308 l 1907 2321 l
+ 1884 2334 l 1864 2347 l 1845 2359 l 1828 2371 l 1813 2382 l
+ 1800 2392 l 1789 2400 l 1780 2408 l 1772 2415 l 1766 2420 l
+
+ 1755 2430 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 1835 2316 m 1767 2419 l 1875 2360 l 1835 2316 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+656 1018 m 708 987 l 630 857 l 667 976 l 579 888 l cp
+eoclip
+n 540 765 m
+ 675 990 l gs 0.00 setgray ef gr gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 579 888 m 667 976 l 630 857 l 579 888 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+ [60] 0 sd
+gs  clippath
+6914 2549 m 6963 2515 l 6876 2391 l 6921 2507 l 6827 2425 l cp
+eoclip
+n 4050 1485 m 4049 1485 l 4048 1485 l 4048 1486 l 4047 1486 l 4046 1487 l
+ 4045 1488 l 4044 1489 l 4044 1490 l 4045 1491 l 4046 1493 l
+ 4049 1495 l 4053 1498 l 4058 1500 l 4066 1504 l 4075 1507 l
+ 4087 1512 l 4102 1517 l 4119 1522 l 4141 1528 l 4166 1536 l
+ 4197 1544 l 4232 1553 l 4273 1564 l 4320 1576 l 4374 1589 l
+ 4434 1604 l 4500 1620 l 4553 1633 l 4608 1645 l 4662 1658 l
+ 4717 1670 l 4770 1682 l 4821 1693 l 4869 1703 l 4915 1712 l
+ 4958 1721 l 4998 1728 l 5035 1735 l 5070 1740 l 5102 1745 l
+ 5132 1750 l 5160 1753 l 5186 1756 l 5210 1759 l 5234 1762 l
+ 5257 1764 l 5280 1766 l 5303 1769 l 5326 1771 l 5350 1774 l
+ 5375 1777 l 5402 1781 l 5431 1786 l 5462 1791 l 5495 1798 l
+ 5531 1805 l 5571 1814 l 5613 1824 l 5659 1836 l 5708 1849 l
+ 5760 1863 l 5816 1879 l 5874 1897 l 5935 1916 l 5996 1936 l
+ 6058 1958 l 6120 1980 l 6199 2010 l 6273 2041 l 6341 2070 l
+ 6404 2100 l 6460 2128 l 6512 2155 l 6558 2182 l 6600 2207 l
+ 6637 2232 l 6672 2256 l 6703 2280 l 6732 2303 l 6758 2325 l
+ 6782 2347 l 6803 2368 l 6823 2389 l 6842 2408 l 6858 2427 l
+ 6872 2444 l 6885 2459 l 6896 2474 l 6906 2486 l 6913 2496 l
+ 6919 2504 l 6923 2510 l
+ 6930 2520 l gs col0 s gr gr
+ [] 0 sd
+% arrowhead
+0 slj
+n 6827 2425 m 6921 2507 l 6876 2391 l 6827 2425 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+ [60] 0 sd
+gs  clippath
+7089 2456 m 7143 2430 l 7079 2293 l 7103 2415 l 7025 2318 l cp
+eoclip
+n 6165 1485 m 6166 1486 l 6169 1487 l 6173 1490 l 6181 1495 l 6191 1501 l
+ 6204 1509 l 6220 1519 l 6238 1531 l 6259 1545 l 6282 1560 l
+ 6307 1576 l 6332 1593 l 6359 1612 l 6387 1631 l 6416 1651 l
+ 6445 1673 l 6475 1695 l 6506 1719 l 6538 1744 l 6570 1771 l
+ 6605 1800 l 6640 1831 l 6676 1864 l 6713 1899 l 6750 1935 l
+ 6788 1974 l 6824 2013 l 6857 2049 l 6886 2084 l 6913 2116 l
+ 6937 2147 l 6958 2176 l 6978 2203 l 6996 2230 l 7012 2255 l
+ 7027 2279 l 7041 2302 l 7054 2324 l 7065 2344 l 7075 2363 l
+ 7084 2380 l 7092 2394 l 7098 2406 l 7103 2415 l
+ 7110 2430 l gs col0 s gr gr
+ [] 0 sd
+% arrowhead
+0 slj
+n 7025 2318 m 7103 2415 l 7079 2293 l 7025 2318 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+ [60] 0 sd
+gs  clippath
+6822 2944 m 6793 2891 l 6661 2964 l 6781 2933 l 6690 3016 l cp
+eoclip
+n 3915 3060 m 3916 3060 l 3918 3061 l 3922 3062 l 3928 3064 l 3937 3067 l
+ 3949 3070 l 3965 3075 l 3983 3080 l 4006 3086 l 4031 3093 l
+ 4060 3101 l 4092 3110 l 4126 3119 l 4164 3129 l 4203 3139 l
+ 4245 3150 l 4289 3160 l 4334 3171 l 4381 3182 l 4429 3192 l
+ 4478 3203 l 4529 3213 l 4581 3223 l 4634 3232 l 4689 3241 l
+ 4745 3249 l 4802 3257 l 4862 3264 l 4923 3270 l 4987 3276 l
+ 5053 3281 l 5121 3285 l 5192 3287 l 5264 3289 l 5338 3289 l
+ 5414 3288 l 5490 3285 l 5569 3280 l 5647 3274 l 5721 3267 l
+ 5793 3258 l 5860 3248 l 5925 3237 l 5986 3226 l 6043 3214 l
+ 6098 3201 l 6150 3188 l 6200 3174 l 6247 3160 l 6292 3146 l
+ 6336 3131 l 6378 3116 l 6418 3101 l 6457 3085 l 6494 3070 l
+ 6530 3055 l 6563 3040 l 6595 3025 l 6625 3011 l 6653 2998 l
+ 6679 2985 l 6702 2974 l 6722 2963 l 6740 2954 l 6755 2946 l
+ 6767 2940 l 6777 2935 l 6784 2931 l
+ 6795 2925 l gs col0 s gr gr
+ [] 0 sd
+% arrowhead
+0 slj
+n 6690 3016 m 6781 2933 l 6661 2964 l 6690 3016 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+ [60] 0 sd
+gs  clippath
+7008 3019 m 6959 2985 l 6872 3109 l 6966 3028 l 6921 3143 l cp
+eoclip
+n 1890 3015 m 1891 3015 l 1892 3016 l 1895 3016 l 1900 3017 l 1907 3019 l
+ 1917 3021 l 1929 3024 l 1944 3027 l 1963 3031 l 1985 3036 l
+ 2011 3042 l 2040 3048 l 2073 3055 l 2109 3063 l 2149 3072 l
+ 2193 3081 l 2240 3091 l 2290 3102 l 2344 3113 l 2400 3125 l
+ 2459 3137 l 2520 3150 l 2584 3163 l 2650 3176 l 2717 3190 l
+ 2786 3204 l 2857 3218 l 2929 3232 l 3002 3246 l 3077 3260 l
+ 3152 3273 l 3228 3287 l 3305 3301 l 3382 3315 l 3460 3328 l
+ 3539 3341 l 3618 3354 l 3698 3366 l 3779 3378 l 3860 3390 l
+ 3942 3402 l 4025 3413 l 4109 3424 l 4193 3434 l 4279 3444 l
+ 4365 3453 l 4452 3462 l 4541 3470 l 4630 3478 l 4720 3485 l
+ 4811 3491 l 4902 3497 l 4994 3501 l 5085 3505 l 5176 3508 l
+ 5266 3509 l 5355 3510 l 5474 3509 l 5587 3506 l 5695 3501 l
+ 5796 3494 l 5890 3486 l 5978 3476 l 6060 3465 l 6136 3453 l
+ 6206 3440 l 6271 3426 l 6332 3411 l 6388 3395 l 6439 3379 l
+ 6487 3362 l 6532 3345 l 6574 3327 l 6612 3308 l 6649 3289 l
+ 6682 3270 l 6714 3251 l 6743 3232 l 6770 3212 l 6796 3193 l
+ 6819 3174 l 6841 3156 l 6861 3138 l 6879 3122 l 6895 3106 l
+ 6910 3091 l 6922 3077 l 6934 3065 l 6943 3054 l 6952 3044 l
+ 6958 3036 l 6964 3030 l 6968 3025 l
+ 6975 3015 l gs col0 s gr gr
+ [] 0 sd
+% arrowhead
+0 slj
+n 6921 3143 m 6966 3028 l 6872 3109 l 6921 3143 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+5326 2403 m 5386 2398 l 5371 2247 l 5353 2370 l 5311 2253 l cp
+eoclip
+n 5670 2386 m 5671 2383 l 5672 2378 l 5674 2368 l 5677 2354 l 5681 2335 l
+ 5686 2313 l 5691 2289 l 5695 2262 l 5699 2235 l 5702 2207 l
+ 5704 2179 l 5705 2152 l 5703 2125 l 5700 2098 l 5693 2072 l
+ 5683 2048 l 5670 2026 l 5657 2011 l 5643 1999 l 5628 1990 l
+ 5614 1982 l 5601 1977 l 5588 1973 l 5577 1970 l 5567 1968 l
+ 5557 1967 l 5548 1966 l 5539 1966 l 5530 1966 l 5520 1967 l
+ 5510 1968 l 5500 1970 l 5488 1973 l 5475 1977 l 5461 1982 l
+ 5446 1990 l 5431 1999 l 5415 2011 l 5400 2026 l 5384 2048 l
+ 5371 2072 l 5361 2098 l 5354 2125 l 5349 2152 l 5346 2179 l
+ 5345 2207 l 5345 2235 l 5345 2262 l 5346 2289 l 5348 2313 l
+ 5350 2335 l 5352 2354 l
+ 5355 2386 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 5311 2253 m 5353 2370 l 5371 2247 l 5311 2253 l  cp gs 0.00 setgray ef gr  col0 s
+% here ends figure;
+$F2psEnd
+rs
+showpage
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/images/fsm-change.fig	Mon Sep 25 15:53:33 2006 +0000
@@ -0,0 +1,101 @@
+#FIG 3.2
+Portrait
+Center
+Metric
+A4      
+100.00
+Single
+-2
+1200 2
+0 32 #8e8e8e
+6 398 2378 2122 3112
+1 2 0 1 0 7 50 -1 -1 0.000 1 0.0000 1260 2745 855 360 405 2385 2115 3105
+4 1 0 50 -1 16 12 0.0000 4 120 960 1260 2790 CODE\001
+-6
+6 2513 2378 4237 3112
+1 2 0 1 0 7 50 -1 -1 0.000 1 0.0000 3375 2745 855 360 2520 2385 4230 3105
+4 1 0 50 -1 16 12 0.0000 4 120 690 3375 2790 ACK\001
+-6
+6 4523 2378 6458 3112
+1 2 0 1 0 7 50 -1 -1 0.000 1 0.0000 5490 2745 855 360 4635 2385 6345 3105
+4 1 0 50 -1 16 12 0.0000 4 120 1935 5490 2790 CHECK ACK\001
+-6
+6 6705 2340 8505 3150
+1 2 0 1 0 7 50 -1 -1 0.000 1 0.0000 7605 2745 855 360 6750 2385 8460 3105
+1 2 0 1 0 7 50 -1 -1 0.000 1 0.0000 7605 2738 765 322 6840 2416 8370 3060
+4 1 0 50 -1 16 12 0.0000 4 120 1200 7605 2790 ERROR\001
+-6
+6 2513 893 4237 1627
+1 2 0 1 0 7 50 -1 -1 0.000 1 0.0000 3375 1260 855 360 2520 900 4230 1620
+4 1 0 50 -1 16 12 0.0000 4 120 1170 3375 1305 CHECK\001
+-6
+6 4628 893 6352 1627
+1 2 0 1 0 7 50 -1 -1 0.000 1 0.0000 5490 1260 855 360 4635 900 6345 1620
+4 1 0 50 -1 16 12 0.0000 4 120 1305 5490 1305 STATUS\001
+-6
+6 6705 855 8505 1665
+1 2 0 1 0 7 50 -1 -1 0.000 1 0.0000 7605 1260 855 360 6750 900 8460 1620
+1 2 0 1 0 7 50 -1 -1 0.000 1 0.0000 7605 1261 748 315 6857 946 8353 1576
+4 1 0 50 -1 16 12 0.0000 4 120 705 7605 1305 END\001
+-6
+6 360 855 2160 1665
+1 2 0 1 0 7 50 -1 -1 0.000 1 0.0000 1260 1260 855 360 405 900 2115 1620
+4 1 0 50 -1 16 12 0.0000 4 120 1080 1260 1305 START\001
+-6
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 495 675 101 101 495 675 585 720
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 2
+	1 1 1.00 60.00 120.00
+	 2115 1260 2520 1260
+	 0.000 0.000
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 2
+	1 1 1.00 60.00 120.00
+	 4230 1260 4635 1260
+	 0.000 0.000
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 2
+	1 1 1.00 60.00 120.00
+	 6345 1260 6750 1260
+	 0.000 0.000
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 4
+	1 1 1.00 60.00 120.00
+	 5670 900 5670 540 5400 540 5355 900
+	 0.000 -1.000 -1.000 0.000
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 2
+	1 1 1.00 60.00 120.00
+	 2115 2745 2520 2745
+	 0.000 0.000
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 2
+	1 1 1.00 60.00 120.00
+	 4230 2745 4635 2745
+	 0.000 0.000
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 2
+	1 1 1.00 60.00 120.00
+	 6345 2745 6750 2745
+	 0.000 0.000
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 4
+	1 1 1.00 60.00 120.00
+	 4905 1530 4365 1980 2610 2115 1755 2430
+	 0.000 -1.000 -1.000 0.000
+3 2 0 1 0 0 50 -1 20 0.000 0 1 0 2
+	1 1 1.00 60.00 120.00
+	 540 765 675 990
+	 0.000 0.000
+3 2 1 1 0 7 50 -1 -1 4.000 0 1 0 4
+	1 1 1.00 60.00 120.00
+	 4050 1485 4500 1620 6120 1980 6930 2520
+	 0.000 -1.000 -1.000 0.000
+3 2 1 1 0 7 50 -1 -1 4.000 0 1 0 3
+	1 1 1.00 60.00 120.00
+	 6165 1485 6750 1935 7110 2430
+	 0.000 -1.000 0.000
+3 2 1 1 0 7 50 -1 -1 4.000 0 1 0 3
+	1 1 1.00 60.00 120.00
+	 3915 3060 5490 3285 6795 2925
+	 0.000 -1.000 0.000
+3 2 1 1 0 7 50 -1 -1 4.000 0 1 0 3
+	1 1 1.00 60.00 120.00
+	 1890 3015 5355 3510 6975 3015
+	 0.000 -1.000 0.000
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 4
+	1 1 1.00 60.00 120.00
+	 5670 2386 5670 2026 5400 2026 5355 2386
+	 0.000 -1.000 -1.000 0.000
Binary file doc/images/fsm-change.pdf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/images/fsm-coedown.eps	Mon Sep 25 15:53:33 2006 +0000
@@ -0,0 +1,319 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: fsm-coedown.fig
+%%Creator: fig2dev Version 3.2 Patchlevel 4
+%%CreationDate: Sat Aug  5 09:58:10 2006
+%%For: fp@jupiter (Florian Pose)
+%%BoundingBox: 0 0 539 160
+%%Magnification: 1.0000
+%%EndComments
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+/col32 {0.555 0.555 0.555 srgb} bind def
+
+end
+save
+newpath 0 160 moveto 0 0 lineto 539 0 lineto 539 160 lineto closepath clip newpath
+-15.8 192.8 translate
+1 -1 scale
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+  bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+  4 -2 roll mul srgb} bind def
+ /DrawEllipse {
+	/endangle exch def
+	/startangle exch def
+	/yrad exch def
+	/xrad exch def
+	/y exch def
+	/x exch def
+	/savematrix mtrx currentmatrix def
+	x y tr xrad yrad sc 0 0 1 startangle endangle arc
+	closepath
+	savematrix setmatrix
+	} def
+
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+$F2psBegin
+10 setmiterlimit
+0 slj 0 slc
+ 0.06299 0.06299 sc
+%
+% Fig objects follow
+%
+% 
+% here starts figure with depth 50
+% Ellipse
+7.500 slw
+n 360 675 101 101 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Polyline
+2 slj
+gs  clippath
+521 1018 m 573 987 l 495 857 l 532 976 l 444 888 l cp
+eoclip
+n 405 765 m
+ 540 990 l gs 0.00 setgray ef gr gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 444 888 m 532 976 l 495 857 l 444 888 l  cp gs 0.00 setgray ef gr  col0 s
+% Ellipse
+n 1177 1253 855 360 0 360 DrawEllipse gs col0 s gr
+
+/Helvetica ff 180.00 scf sf
+1177 1298 m
+gs 1 -1 sc (START) dup sw pop 2 div neg 0 rm  col0 sh gr
+% Ellipse
+n 3323 1253 855 360 0 360 DrawEllipse gs col0 s gr
+
+/Helvetica ff 180.00 scf sf
+3323 1298 m
+gs 1 -1 sc (REQUEST) dup sw pop 2 div neg 0 rm  col0 sh gr
+% Ellipse
+n 5595 1253 855 360 0 360 DrawEllipse gs col0 s gr
+
+/Helvetica ff 180.00 scf sf
+5595 1298 m
+gs 1 -1 sc (CHECK) dup sw pop 2 div neg 0 rm  col0 sh gr
+% Ellipse
+n 7845 1253 855 360 0 360 DrawEllipse gs col0 s gr
+
+/Helvetica ff 180.00 scf sf
+7845 1298 m
+gs 1 -1 sc (RESPONSE) dup sw pop 2 div neg 0 rm  col0 sh gr
+% Ellipse
+n 7823 2693 855 360 0 360 DrawEllipse gs col0 s gr
+
+% Ellipse
+n 7823 2700 748 315 0 360 DrawEllipse gs col0 s gr
+
+/Helvetica ff 180.00 scf sf
+7823 2738 m
+gs 1 -1 sc (END) dup sw pop 2 div neg 0 rm  col0 sh gr
+% Ellipse
+n 4448 2693 855 360 0 360 DrawEllipse gs col0 s gr
+
+% Ellipse
+n 4448 2700 748 315 0 360 DrawEllipse gs col0 s gr
+
+/Helvetica ff 180.00 scf sf
+4448 2738 m
+gs 1 -1 sc (ERROR) dup sw pop 2 div neg 0 rm  col0 sh gr
+% Polyline
+2 slj
+gs  clippath
+2490 1290 m 2490 1230 l 2339 1230 l 2459 1260 l 2339 1290 l cp
+eoclip
+n 2025 1260 m 2027 1260 l 2031 1260 l 2039 1260 l 2049 1260 l 2062 1260 l
+ 2076 1260 l 2094 1260 l 2114 1260 l 2139 1260 l 2169 1260 l
+ 2205 1260 l 2233 1260 l 2261 1260 l 2288 1260 l 2312 1260 l
+ 2336 1260 l 2358 1260 l 2379 1260 l 2399 1260 l 2418 1260 l
+ 2435 1260 l 2449 1260 l
+ 2475 1260 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 2339 1290 m 2459 1260 l 2339 1230 l 2339 1290 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+4740 1290 m 4740 1230 l 4589 1230 l 4709 1260 l 4589 1290 l cp
+eoclip
+n 4185 1260 m
+ 4725 1260 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 4589 1290 m 4709 1260 l 4589 1230 l 4589 1290 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+6990 1290 m 6990 1230 l 6839 1230 l 6959 1260 l 6839 1290 l cp
+eoclip
+n 6435 1260 m
+ 6975 1260 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 6839 1290 m 6959 1260 l 6839 1230 l 6839 1290 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+5372 918 m 5431 910 l 5412 761 l 5398 884 l 5352 768 l cp
+eoclip
+n 5760 900 m 5760 897 l 5761 890 l 5763 879 l 5765 862 l 5767 842 l
+ 5768 818 l 5770 792 l 5770 765 l 5770 737 l 5768 710 l
+ 5763 683 l 5757 657 l 5747 631 l 5733 607 l 5715 585 l
+ 5698 571 l 5681 560 l 5664 551 l 5648 545 l 5634 540 l
+ 5621 537 l 5609 535 l 5599 533 l 5589 533 l 5580 533 l
+ 5571 533 l 5561 533 l 5551 535 l 5539 537 l 5526 540 l
+ 5512 545 l 5496 551 l 5479 560 l 5462 571 l 5445 585 l
+ 5427 607 l 5413 631 l 5403 657 l 5397 683 l 5392 710 l
+ 5390 737 l 5390 765 l 5390 792 l 5392 818 l 5393 842 l
+ 5395 862 l
+ 5400 900 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 5352 768 m 5398 884 l 5412 761 l 5352 768 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+ [60] 0 sd
+gs  clippath
+3900 2415 m 3948 2379 l 3857 2258 l 3905 2372 l 3809 2294 l cp
+eoclip
+n 3555 1620 m 3555 1622 l 3556 1625 l 3557 1631 l 3559 1640 l 3562 1652 l
+ 3566 1667 l 3570 1684 l 3575 1704 l 3580 1725 l 3587 1748 l
+ 3593 1772 l 3601 1798 l 3610 1824 l 3619 1853 l 3630 1883 l
+ 3643 1915 l 3657 1950 l 3673 1987 l 3690 2025 l 3708 2063 l
+ 3727 2098 l 3744 2131 l 3761 2161 l 3777 2189 l 3793 2214 l
+ 3808 2238 l 3823 2260 l 3837 2280 l 3850 2299 l 3863 2317 l
+ 3875 2333 l 3886 2347 l 3895 2359 l 3903 2369 l
+ 3915 2385 l gs col0 s gr gr
+ [] 0 sd
+% arrowhead
+0 slj
+n 3809 2294 m 3905 2372 l 3857 2258 l 3809 2294 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+5038 2379 m 5086 2415 l 5177 2294 l 5081 2372 l 5129 2258 l cp
+eoclip
+n 5431 1620 m 5431 1622 l 5430 1625 l 5429 1631 l 5427 1640 l 5424 1652 l
+ 5420 1667 l 5416 1684 l 5411 1704 l 5406 1725 l 5399 1748 l
+ 5393 1772 l 5385 1798 l 5376 1824 l 5367 1853 l 5356 1883 l
+ 5343 1915 l 5329 1950 l 5313 1987 l 5296 2025 l 5278 2063 l
+ 5259 2098 l 5242 2131 l 5225 2161 l 5209 2189 l 5193 2214 l
+ 5178 2238 l 5163 2260 l 5149 2280 l 5136 2299 l 5123 2317 l
+ 5111 2333 l 5100 2347 l 5091 2359 l 5083 2369 l
+ 5071 2385 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 5129 2258 m 5081 2372 l 5177 2294 l 5129 2258 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+ [60] 0 sd
+gs  clippath
+3655 2641 m 3664 2582 l 3514 2561 l 3629 2608 l 3505 2620 l cp
+eoclip
+n 1620 1575 m 1621 1576 l 1622 1577 l 1625 1581 l 1629 1586 l 1635 1593 l
+ 1643 1602 l 1653 1613 l 1665 1627 l 1680 1643 l 1696 1661 l
+ 1714 1680 l 1734 1702 l 1756 1725 l 1779 1748 l 1804 1773 l
+ 1830 1799 l 1858 1825 l 1887 1852 l 1918 1879 l 1950 1907 l
+ 1984 1935 l 2021 1964 l 2059 1993 l 2100 2023 l 2144 2054 l
+ 2191 2086 l 2241 2118 l 2295 2151 l 2352 2184 l 2413 2217 l
+ 2475 2250 l 2535 2280 l 2595 2308 l 2654 2335 l 2711 2359 l
+ 2767 2382 l 2821 2403 l 2874 2422 l 2925 2440 l 2974 2456 l
+ 3021 2471 l 3068 2485 l 3113 2498 l 3157 2510 l 3200 2521 l
+ 3242 2531 l 3283 2541 l 3323 2550 l 3362 2558 l 3399 2565 l
+ 3434 2572 l 3467 2579 l 3498 2585 l 3526 2590 l 3552 2594 l
+ 3574 2598 l 3593 2601 l 3609 2604 l 3621 2606 l 3631 2608 l
+
+ 3645 2610 l gs col0 s gr gr
+ [] 0 sd
+% arrowhead
+0 slj
+n 3505 2620 m 3629 2608 l 3514 2561 l 3505 2620 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+5295 2582 m 5304 2641 l 5454 2620 l 5331 2608 l 5445 2561 l cp
+eoclip
+n 7340 1575 m 7339 1576 l 7338 1577 l 7335 1581 l 7331 1586 l 7325 1593 l
+ 7317 1602 l 7307 1613 l 7295 1627 l 7280 1643 l 7264 1661 l
+ 7246 1680 l 7226 1702 l 7204 1725 l 7181 1748 l 7156 1773 l
+ 7130 1799 l 7102 1825 l 7073 1852 l 7042 1879 l 7010 1907 l
+ 6976 1935 l 6939 1964 l 6901 1993 l 6860 2023 l 6816 2054 l
+ 6769 2086 l 6719 2118 l 6665 2151 l 6608 2184 l 6547 2217 l
+ 6485 2250 l 6425 2280 l 6365 2308 l 6306 2335 l 6249 2359 l
+ 6193 2382 l 6139 2403 l 6086 2422 l 6035 2440 l 5986 2456 l
+ 5939 2471 l 5892 2485 l 5847 2498 l 5803 2510 l 5760 2521 l
+ 5718 2531 l 5677 2541 l 5637 2550 l 5598 2558 l 5561 2565 l
+ 5526 2572 l 5493 2579 l 5462 2585 l 5434 2590 l 5408 2594 l
+ 5386 2598 l 5367 2601 l 5351 2604 l 5339 2606 l 5329 2608 l
+
+ 5315 2610 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 5445 2561 m 5331 2608 l 5454 2620 l 5445 2561 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+7800 2355 m 7860 2355 l 7860 2204 l 7830 2324 l 7800 2204 l cp
+eoclip
+n 7830 1620 m
+ 7830 2340 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 7800 2204 m 7830 2324 l 7860 2204 l 7800 2204 l  cp gs 0.00 setgray ef gr  col0 s
+% here ends figure;
+$F2psEnd
+rs
+showpage
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/images/fsm-coedown.fig	Mon Sep 25 15:53:33 2006 +0000
@@ -0,0 +1,79 @@
+#FIG 3.2
+Portrait
+Center
+Metric
+A4      
+100.00
+Single
+-2
+1200 2
+0 32 #8e8e8e
+6 225 540 540 990
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 360 675 101 101 360 675 450 720
+3 2 0 1 0 0 50 -1 20 0.000 0 1 0 2
+	1 1 1.00 60.00 120.00
+	 405 765 540 990
+	 0.000 0.000
+-6
+6 315 886 2039 1620
+1 2 0 1 0 7 50 -1 -1 0.000 1 0.0000 1177 1253 855 360 322 893 2032 1613
+4 1 0 50 -1 16 12 0.0000 4 120 1080 1177 1298 START\001
+-6
+6 2461 886 4185 1620
+1 2 0 1 0 7 50 -1 -1 0.000 1 0.0000 3323 1253 855 360 2468 893 4178 1613
+4 1 0 50 -1 16 12 0.0000 4 120 1605 3323 1298 REQUEST\001
+-6
+6 4733 886 6457 1620
+1 2 0 1 0 7 50 -1 -1 0.000 1 0.0000 5595 1253 855 360 4740 893 6450 1613
+4 1 0 50 -1 16 12 0.0000 4 120 1170 5595 1298 CHECK\001
+-6
+6 6915 886 8775 1620
+1 2 0 1 0 7 50 -1 -1 0.000 1 0.0000 7845 1253 855 360 6990 893 8700 1613
+4 1 0 50 -1 16 12 0.0000 4 120 1860 7845 1298 RESPONSE\001
+-6
+6 6930 2295 8685 3060
+1 2 0 1 0 7 50 -1 -1 0.000 1 0.0000 7823 2693 855 360 6968 2333 8678 3053
+1 2 0 1 0 7 50 -1 -1 0.000 1 0.0000 7823 2700 748 315 7075 2385 8571 3015
+4 1 0 50 -1 16 12 0.0000 4 120 705 7823 2738 END\001
+-6
+6 3555 2295 5310 3060
+1 2 0 1 0 7 50 -1 -1 0.000 1 0.0000 4448 2693 855 360 3593 2333 5303 3053
+1 2 0 1 0 7 50 -1 -1 0.000 1 0.0000 4448 2700 748 315 3700 2385 5196 3015
+4 1 0 50 -1 16 12 0.0000 4 120 1200 4448 2738 ERROR\001
+-6
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 3
+	1 1 1.00 60.00 120.00
+	 2025 1260 2205 1260 2475 1260
+	 0.000 -1.000 0.000
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 2
+	1 1 1.00 60.00 120.00
+	 4185 1260 4725 1260
+	 0.000 0.000
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 2
+	1 1 1.00 60.00 120.00
+	 6435 1260 6975 1260
+	 0.000 0.000
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 4
+	1 1 1.00 60.00 120.00
+	 5760 900 5715 585 5445 585 5400 900
+	 0.000 -1.000 -1.000 0.000
+3 2 1 1 0 7 50 -1 -1 4.000 0 1 0 3
+	1 1 1.00 60.00 120.00
+	 3555 1620 3690 2025 3915 2385
+	 0.000 -1.000 0.000
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 3
+	1 1 1.00 60.00 120.00
+	 5431 1620 5296 2025 5071 2385
+	 0.000 -1.000 0.000
+3 2 1 1 0 7 50 -1 -1 4.000 0 1 0 3
+	1 1 1.00 60.00 120.00
+	 1620 1575 2475 2250 3645 2610
+	 0.000 -1.000 0.000
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 3
+	1 1 1.00 60.00 120.00
+	 7340 1575 6485 2250 5315 2610
+	 0.000 -1.000 0.000
+3 2 0 1 0 7 50 -1 -1 4.000 0 1 0 2
+	1 1 1.00 60.00 120.00
+	 7830 1620 7830 2340
+	 0.000 0.000
Binary file doc/images/fsm-coedown.pdf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/images/fsm-eoe.eps	Mon Sep 25 15:53:33 2006 +0000
@@ -0,0 +1,282 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: fsm-eoe.fig
+%%Creator: fig2dev Version 3.2 Patchlevel 4
+%%CreationDate: Tue Aug  1 18:22:14 2006
+%%For: fp@jupiter (Florian Pose)
+%%BoundingBox: 0 0 386 160
+%%Magnification: 1.0000
+%%EndComments
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+/col32 {0.555 0.555 0.555 srgb} bind def
+
+end
+save
+newpath 0 160 moveto 0 0 lineto 386 0 lineto 386 160 lineto closepath clip newpath
+-23.6 189.9 translate
+1 -1 scale
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+  bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+  4 -2 roll mul srgb} bind def
+ /DrawEllipse {
+	/endangle exch def
+	/startangle exch def
+	/yrad exch def
+	/xrad exch def
+	/y exch def
+	/x exch def
+	/savematrix mtrx currentmatrix def
+	x y tr xrad yrad sc 0 0 1 startangle endangle arc
+	closepath
+	savematrix setmatrix
+	} def
+
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+$F2psBegin
+10 setmiterlimit
+0 slj 0 slc
+ 0.06299 0.06299 sc
+%
+% Fig objects follow
+%
+% 
+% here starts figure with depth 50
+% Ellipse
+7.500 slw
+n 1260 1260 855 360 0 360 DrawEllipse gs col0 s gr
+
+/Helvetica ff 180.00 scf sf
+1260 1305 m
+gs 1 -1 sc (RX_START) dup sw pop 2 div neg 0 rm  col0 sh gr
+% Ellipse
+n 495 675 101 101 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Polyline
+2 slj
+gs  clippath
+656 1018 m 708 987 l 630 857 l 667 976 l 579 888 l cp
+eoclip
+n 540 765 m
+ 675 990 l gs 0.00 setgray ef gr gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 579 888 m 667 976 l 630 857 l 579 888 l  cp gs 0.00 setgray ef gr  col0 s
+% Ellipse
+n 3457 1260 855 360 0 360 DrawEllipse gs col0 s gr
+
+/Helvetica ff 180.00 scf sf
+3457 1305 m
+gs 1 -1 sc (RX_CHECK) dup sw pop 2 div neg 0 rm  col0 sh gr
+% Ellipse
+n 5610 1260 855 360 0 360 DrawEllipse gs col0 s gr
+
+/Helvetica ff 180.00 scf sf
+5610 1305 m
+gs 1 -1 sc (RX_FETCH) dup sw pop 2 div neg 0 rm  col0 sh gr
+% Ellipse
+n 2347 2648 855 360 0 360 DrawEllipse gs col0 s gr
+
+/Helvetica ff 180.00 scf sf
+2347 2693 m
+gs 1 -1 sc (TX_START) dup sw pop 2 div neg 0 rm  col0 sh gr
+% Ellipse
+n 4538 2648 855 360 0 360 DrawEllipse gs col0 s gr
+
+/Helvetica ff 180.00 scf sf
+4538 2693 m
+gs 1 -1 sc (TX_SENT) dup sw pop 2 div neg 0 rm  col0 sh gr
+% Polyline
+2 slj
+gs  clippath
+2625 1290 m 2625 1230 l 2474 1230 l 2594 1260 l 2474 1290 l cp
+eoclip
+n 2115 1260 m
+ 2610 1260 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 2474 1290 m 2594 1260 l 2474 1230 l 2474 1290 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+4785 1290 m 4785 1230 l 4634 1230 l 4754 1260 l 4634 1290 l cp
+eoclip
+n 4230 1260 m
+ 4770 1260 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 4634 1290 m 4754 1260 l 4634 1230 l 4634 1290 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+1816 972 m 1848 1023 l 1976 941 l 1859 981 l 1944 891 l cp
+eoclip
+n 5040 990 m 5039 990 l 5037 988 l 5034 987 l 5029 983 l 5021 979 l
+ 5011 973 l 4998 966 l 4982 957 l 4964 946 l 4942 934 l
+ 4917 920 l 4889 905 l 4859 888 l 4826 871 l 4791 853 l
+ 4754 833 l 4714 814 l 4673 794 l 4631 773 l 4587 753 l
+ 4541 733 l 4494 713 l 4446 693 l 4397 674 l 4346 655 l
+ 4294 637 l 4240 619 l 4184 603 l 4126 587 l 4067 571 l
+ 4005 557 l 3940 544 l 3873 532 l 3803 522 l 3731 513 l
+ 3656 505 l 3579 500 l 3500 496 l 3420 495 l 3340 496 l
+ 3262 500 l 3185 505 l 3111 513 l 3039 522 l 2970 532 l
+ 2904 544 l 2841 557 l 2780 571 l 2722 587 l 2666 603 l
+ 2611 619 l 2559 637 l 2508 655 l 2459 674 l 2412 693 l
+ 2365 713 l 2320 733 l 2277 753 l 2235 773 l 2194 794 l
+ 2155 814 l 2117 833 l 2082 853 l 2048 871 l 2017 888 l
+ 1988 905 l 1962 920 l 1938 934 l 1917 946 l 1900 957 l
+ 1885 966 l 1872 973 l 1863 979 l 1856 983 l
+ 1845 990 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 1944 891 m 1859 981 l 1976 941 l 1944 891 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+2716 2322 m 2748 2373 l 2876 2291 l 2759 2331 l 2844 2241 l cp
+eoclip
+n 4950 1485 m 4949 1485 l 4947 1486 l 4942 1487 l 4936 1488 l 4926 1490 l
+ 4914 1493 l 4898 1497 l 4879 1501 l 4856 1506 l 4831 1512 l
+ 4802 1519 l 4771 1526 l 4737 1535 l 4702 1543 l 4664 1553 l
+ 4625 1562 l 4585 1573 l 4543 1584 l 4500 1595 l 4456 1607 l
+ 4410 1620 l 4363 1633 l 4315 1647 l 4266 1662 l 4215 1678 l
+ 4162 1694 l 4106 1712 l 4049 1731 l 3990 1752 l 3928 1773 l
+ 3865 1796 l 3800 1820 l 3735 1845 l 3667 1872 l 3601 1899 l
+ 3537 1925 l 3478 1951 l 3421 1976 l 3368 2000 l 3318 2023 l
+ 3271 2045 l 3227 2067 l 3185 2088 l 3145 2109 l 3107 2129 l
+ 3071 2148 l 3036 2167 l 3003 2186 l 2971 2204 l 2941 2221 l
+ 2913 2238 l 2886 2253 l 2862 2268 l 2839 2282 l 2819 2294 l
+ 2801 2305 l 2786 2314 l 2774 2322 l 2764 2328 l 2756 2333 l
+
+ 2745 2340 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 2844 2241 m 2759 2331 l 2876 2291 l 2844 2241 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+1926 1452 m 1914 1511 l 2062 1542 l 1951 1488 l 2074 1483 l cp
+eoclip
+n 4095 2340 m 4094 2339 l 4093 2338 l 4089 2336 l 4085 2333 l 4078 2328 l
+ 4068 2322 l 4057 2314 l 4043 2305 l 4026 2294 l 4008 2282 l
+ 3987 2268 l 3964 2253 l 3939 2238 l 3912 2221 l 3884 2204 l
+ 3854 2186 l 3823 2167 l 3790 2148 l 3756 2129 l 3720 2109 l
+ 3682 2088 l 3642 2067 l 3600 2045 l 3555 2023 l 3507 2000 l
+ 3456 1976 l 3401 1951 l 3343 1925 l 3281 1899 l 3217 1872 l
+ 3150 1845 l 3086 1820 l 3023 1796 l 2960 1773 l 2899 1752 l
+ 2841 1731 l 2784 1712 l 2729 1694 l 2676 1678 l 2625 1662 l
+ 2575 1647 l 2527 1633 l 2481 1620 l 2435 1607 l 2391 1595 l
+ 2347 1584 l 2305 1573 l 2264 1562 l 2225 1553 l 2187 1543 l
+ 2150 1535 l 2117 1526 l 2085 1519 l 2056 1512 l 2030 1506 l
+ 2007 1501 l 1988 1497 l 1972 1493 l 1959 1490 l 1949 1488 l
+
+ 1935 1485 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 2074 1483 m 1951 1488 l 2062 1542 l 2074 1483 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+3705 2685 m 3705 2625 l 3554 2625 l 3674 2655 l 3554 2685 l cp
+eoclip
+n 3195 2655 m
+ 3690 2655 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 3554 2685 m 3674 2655 l 3554 2625 l 3554 2685 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+5286 2450 m 5304 2508 l 5448 2462 l 5325 2470 l 5430 2405 l cp
+eoclip
+n 5310 2835 m 5313 2836 l 5318 2838 l 5328 2841 l 5342 2845 l 5361 2850 l
+ 5383 2856 l 5407 2863 l 5434 2869 l 5461 2874 l 5489 2878 l
+ 5517 2881 l 5544 2881 l 5571 2880 l 5598 2874 l 5624 2866 l
+ 5648 2853 l 5670 2835 l 5686 2816 l 5699 2794 l 5709 2773 l
+ 5716 2752 l 5721 2733 l 5725 2715 l 5727 2699 l 5729 2684 l
+ 5730 2669 l 5730 2655 l 5730 2641 l 5729 2626 l 5727 2611 l
+ 5725 2595 l 5721 2577 l 5716 2558 l 5709 2537 l 5699 2516 l
+ 5686 2494 l 5670 2475 l 5648 2457 l 5624 2444 l 5598 2436 l
+ 5571 2430 l 5544 2429 l 5517 2429 l 5489 2432 l 5461 2436 l
+ 5434 2441 l 5407 2447 l 5383 2454 l 5361 2460 l 5342 2465 l
+
+ 5310 2475 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 5430 2405 m 5325 2470 l 5448 2462 l 5430 2405 l  cp gs 0.00 setgray ef gr  col0 s
+% here ends figure;
+$F2psEnd
+rs
+showpage
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/images/fsm-eoe.fig	Mon Sep 25 15:53:33 2006 +0000
@@ -0,0 +1,65 @@
+#FIG 3.2
+Portrait
+Center
+Metric
+A4      
+100.00
+Single
+-2
+1200 2
+0 32 #8e8e8e
+6 398 893 2123 1627
+1 2 0 1 0 7 50 -1 -1 0.000 1 0.0000 1260 1260 855 360 405 900 2115 1620
+4 1 0 50 -1 16 12 0.0000 4 150 1725 1260 1305 RX_START\001
+-6
+6 360 540 675 990
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 495 675 101 101 495 675 585 720
+3 2 0 1 0 0 50 -1 20 0.000 0 1 0 2
+	1 1 1.00 60.00 120.00
+	 540 765 675 990
+	 0.000 0.000
+-6
+6 2550 893 4365 1627
+1 2 0 1 0 7 50 -1 -1 0.000 1 0.0000 3457 1260 855 360 2602 900 4312 1620
+4 1 0 50 -1 16 12 0.0000 4 150 1815 3457 1305 RX_CHECK\001
+-6
+6 4740 893 6480 1627
+1 2 0 1 0 7 50 -1 -1 0.000 1 0.0000 5610 1260 855 360 4755 900 6465 1620
+4 1 0 50 -1 16 12 0.0000 4 150 1740 5610 1305 RX_FETCH\001
+-6
+6 1485 2250 3240 3015
+1 2 0 1 0 7 50 -1 -1 0.000 1 0.0000 2347 2648 855 360 1492 2288 3202 3008
+4 1 0 50 -1 16 12 0.0000 4 150 1680 2347 2693 TX_START\001
+-6
+6 3676 2281 5400 3015
+1 2 0 1 0 7 50 -1 -1 0.000 1 0.0000 4538 2648 855 360 3683 2288 5393 3008
+4 1 0 50 -1 16 12 0.0000 4 150 1485 4538 2693 TX_SENT\001
+-6
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 2
+	1 1 1.00 60.00 120.00
+	 2115 1260 2610 1260
+	 0.000 0.000
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 2
+	1 1 1.00 60.00 120.00
+	 4230 1260 4770 1260
+	 0.000 0.000
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 3
+	1 1 1.00 60.00 120.00
+	 5040 990 3420 495 1845 990
+	 0.000 -1.000 0.000
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 3
+	1 1 1.00 60.00 120.00
+	 4950 1485 3735 1845 2745 2340
+	 0.000 -1.000 0.000
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 3
+	1 1 1.00 60.00 120.00
+	 4095 2340 3150 1845 1935 1485
+	 0.000 -1.000 0.000
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 2
+	1 1 1.00 60.00 120.00
+	 3195 2655 3690 2655
+	 0.000 0.000
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 4
+	1 1 1.00 60.00 120.00
+	 5310 2835 5670 2835 5670 2475 5310 2475
+	 0.000 -1.000 -1.000 0.000
Binary file doc/images/fsm-eoe.pdf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/images/fsm-idle.eps	Mon Sep 25 15:53:33 2006 +0000
@@ -0,0 +1,479 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: fsm-idle.fig
+%%Creator: fig2dev Version 3.2 Patchlevel 4
+%%CreationDate: Wed Jul 19 16:13:27 2006
+%%For: fp@jupiter (Florian Pose)
+%%BoundingBox: 0 0 391 279
+%%Magnification: 1.0000
+%%EndComments
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+/col32 {0.555 0.555 0.555 srgb} bind def
+/col33 {0.000 0.000 0.000 srgb} bind def
+
+end
+save
+newpath 0 279 moveto 0 0 lineto 391 0 lineto 391 279 lineto closepath clip newpath
+-73.9 314.6 translate
+1 -1 scale
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+  bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+  4 -2 roll mul srgb} bind def
+ /DrawEllipse {
+	/endangle exch def
+	/startangle exch def
+	/yrad exch def
+	/xrad exch def
+	/y exch def
+	/x exch def
+	/savematrix mtrx currentmatrix def
+	x y tr xrad yrad sc 0 0 1 startangle endangle arc
+	closepath
+	savematrix setmatrix
+	} def
+
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+$F2psBegin
+10 setmiterlimit
+0 slj 0 slc
+ 0.06299 0.06299 sc
+%
+% Fig objects follow
+%
+% 
+% here starts figure with depth 50
+% Ellipse
+7.500 slw
+n 4275 1260 855 360 0 360 DrawEllipse gs col0 s gr
+
+/Helvetica ff 180.00 scf sf
+4275 1305 m
+gs 1 -1 sc (START) dup sw pop 2 div neg 0 rm  col0 sh gr
+% Ellipse
+n 4282 3503 855 360 0 360 DrawEllipse gs col0 s gr
+
+/Helvetica ff 180.00 scf sf
+4282 3465 m
+gs 1 -1 sc (READ) dup sw pop 2 div neg 0 rm  col0 sh gr
+/Helvetica ff 180.00 scf sf
+4282 3690 m
+gs 1 -1 sc (STATES) dup sw pop 2 div neg 0 rm  col0 sh gr
+% Ellipse
+n 2482 4628 855 360 0 360 DrawEllipse gs col0 s gr
+
+/Helvetica ff 180.00 scf sf
+2482 4590 m
+gs 1 -1 sc (CONFIGURE) dup sw pop 2 div neg 0 rm  col0 sh gr
+/Helvetica ff 180.00 scf sf
+2482 4815 m
+gs 1 -1 sc (SLAVES) dup sw pop 2 div neg 0 rm  col0 sh gr
+% Ellipse
+n 4275 2378 855 360 0 360 DrawEllipse gs col0 s gr
+
+/Helvetica ff 180.00 scf sf
+4275 2423 m
+gs 1 -1 sc (BROADCAST) dup sw pop 2 div neg 0 rm  col0 sh gr
+% Ellipse
+n 6082 4628 855 360 0 360 DrawEllipse gs col0 s gr
+
+/Helvetica ff 180.00 scf sf
+6082 4590 m
+gs 1 -1 sc (WRITE) dup sw pop 2 div neg 0 rm  col0 sh gr
+/Helvetica ff 180.00 scf sf
+6082 4815 m
+gs 1 -1 sc (EEPROM) dup sw pop 2 div neg 0 rm  col0 sh gr
+% Ellipse
+n 6068 1838 855 360 0 360 DrawEllipse gs col0 s gr
+
+/Helvetica ff 180.00 scf sf
+6068 1800 m
+gs 1 -1 sc (SCAN FOR) dup sw pop 2 div neg 0 rm  col0 sh gr
+/Helvetica ff 180.00 scf sf
+6068 2025 m
+gs 1 -1 sc (SLAVES) dup sw pop 2 div neg 0 rm  col0 sh gr
+% Ellipse
+n 3510 675 101 101 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Polyline
+2 slj
+gs  clippath
+3671 1018 m 3723 987 l 3645 857 l 3682 976 l 3594 888 l cp
+eoclip
+n 3555 765 m
+ 3690 990 l gs 0.00 setgray ef gr gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 3594 888 m 3682 976 l 3645 857 l 3594 888 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+4245 2040 m 4305 2040 l 4305 1889 l 4275 2009 l 4245 1889 l cp
+eoclip
+n 4275 1620 m
+ 4275 2025 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 4245 1889 m 4275 2009 l 4305 1889 l 4245 1889 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+4245 3165 m 4305 3165 l 4305 3014 l 4275 3134 l 4245 3014 l cp
+eoclip
+n 4275 2745 m
+ 4275 3150 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 4245 3014 m 4275 3134 l 4305 3014 l 4245 3014 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+3517 3362 m 3532 3304 l 3385 3266 l 3494 3326 l 3370 3325 l cp
+eoclip
+n 3510 3690 m 3508 3691 l 3502 3692 l 3493 3694 l 3479 3698 l 3461 3702 l
+ 3439 3707 l 3413 3713 l 3385 3718 l 3355 3724 l 3325 3729 l
+ 3293 3733 l 3262 3735 l 3231 3737 l 3201 3736 l 3170 3733 l
+ 3140 3727 l 3112 3718 l 3084 3706 l 3060 3690 l 3041 3672 l
+ 3026 3653 l 3015 3634 l 3005 3615 l 2999 3597 l 2994 3580 l
+ 2990 3564 l 2988 3550 l 2986 3536 l 2985 3523 l 2985 3510 l
+ 2985 3497 l 2986 3484 l 2988 3470 l 2990 3456 l 2994 3440 l
+ 2999 3423 l 3005 3405 l 3015 3386 l 3026 3367 l 3041 3348 l
+ 3060 3330 l 3084 3314 l 3112 3302 l 3140 3293 l 3170 3287 l
+ 3201 3284 l 3231 3283 l 3262 3285 l 3293 3287 l 3325 3291 l
+ 3355 3296 l 3385 3302 l 3413 3307 l 3439 3313 l 3461 3318 l
+ 3479 3322 l
+ 3510 3330 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 3370 3325 m 3494 3326 l 3385 3266 l 3370 3325 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+ [60] 0 sd
+gs  clippath
+4383 920 m 4442 908 l 4411 760 l 4407 884 l 4353 772 l cp
+eoclip
+n 4770 945 m 4771 942 l 4773 935 l 4777 924 l 4782 907 l 4787 887 l
+ 4794 863 l 4800 837 l 4805 810 l 4809 782 l 4811 755 l
+ 4810 728 l 4807 702 l 4799 676 l 4787 652 l 4770 630 l
+ 4751 614 l 4730 603 l 4710 594 l 4691 588 l 4673 584 l
+ 4657 582 l 4643 581 l 4629 581 l 4616 581 l 4603 582 l
+ 4590 584 l 4575 586 l 4558 589 l 4540 593 l 4520 599 l
+ 4499 606 l 4476 617 l 4455 630 l 4437 646 l 4422 665 l
+ 4411 684 l 4404 704 l 4399 725 l 4396 745 l 4394 766 l
+ 4395 787 l 4396 807 l 4398 827 l 4400 846 l 4403 862 l
+ 4405 876 l
+ 4410 900 l gs col0 s gr gr
+ [] 0 sd
+% arrowhead
+0 slj
+n 4353 772 m 4407 884 l 4411 760 l 4353 772 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+3212 4435 m 3240 4488 l 3374 4417 l 3254 4447 l 3346 4364 l cp
+eoclip
+n 3825 3825 m 3825 3826 l 3825 3829 l 3825 3833 l 3825 3840 l 3825 3849 l
+ 3825 3860 l 3824 3873 l 3823 3888 l 3821 3904 l 3818 3921 l
+ 3813 3939 l 3807 3959 l 3800 3979 l 3789 4002 l 3777 4025 l
+ 3761 4051 l 3741 4079 l 3718 4109 l 3690 4140 l 3662 4168 l
+ 3633 4196 l 3604 4222 l 3575 4246 l 3546 4268 l 3518 4289 l
+ 3490 4308 l 3463 4327 l 3435 4344 l 3408 4361 l 3382 4376 l
+ 3357 4391 l 3333 4405 l 3311 4417 l 3291 4428 l 3275 4437 l
+ 3261 4444 l
+ 3240 4455 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 3346 4364 m 3254 4447 l 3374 4417 l 3346 4364 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+ [60] 0 sd
+gs  clippath
+3946 1587 m 3906 1542 l 3793 1643 l 3903 1586 l 3833 1688 l cp
+eoclip
+n 3870 2070 m 3869 2069 l 3866 2067 l 3860 2063 l 3853 2057 l 3843 2050 l
+ 3832 2041 l 3820 2030 l 3807 2018 l 3794 2005 l 3781 1991 l
+ 3770 1975 l 3759 1959 l 3750 1940 l 3742 1920 l 3737 1897 l
+ 3734 1872 l 3735 1845 l 3739 1818 l 3747 1791 l 3756 1766 l
+ 3768 1743 l 3781 1721 l 3795 1701 l 3809 1682 l 3825 1664 l
+ 3840 1647 l 3856 1631 l 3871 1616 l 3884 1603 l 3895 1593 l
+
+ 3915 1575 l gs col0 s gr gr
+ [] 0 sd
+% arrowhead
+0 slj
+n 3833 1688 m 3903 1586 l 3793 1643 l 3833 1688 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+ [60] 0 sd
+gs  clippath
+3677 1494 m 3633 1453 l 3530 1564 l 3634 1497 l 3574 1605 l cp
+eoclip
+n 3600 3285 m 3599 3284 l 3597 3282 l 3593 3278 l 3586 3273 l 3577 3264 l
+ 3566 3254 l 3552 3240 l 3535 3224 l 3516 3205 l 3495 3184 l
+ 3472 3161 l 3448 3135 l 3424 3108 l 3399 3080 l 3374 3050 l
+ 3349 3018 l 3325 2985 l 3301 2951 l 3279 2915 l 3257 2877 l
+ 3237 2838 l 3218 2796 l 3201 2752 l 3186 2705 l 3173 2656 l
+ 3162 2603 l 3155 2547 l 3151 2490 l 3150 2430 l 3153 2374 l
+ 3160 2318 l 3169 2264 l 3181 2212 l 3195 2163 l 3211 2115 l
+ 3228 2070 l 3247 2026 l 3267 1984 l 3289 1944 l 3311 1905 l
+ 3334 1868 l 3358 1832 l 3383 1797 l 3408 1763 l 3433 1730 l
+ 3458 1698 l 3482 1668 l 3506 1640 l 3528 1613 l 3550 1589 l
+ 3569 1567 l 3587 1548 l 3602 1531 l 3615 1517 l 3625 1506 l
+ 3633 1498 l
+ 3645 1485 l gs col0 s gr gr
+ [] 0 sd
+% arrowhead
+0 slj
+n 3574 1605 m 3634 1497 l 3530 1564 l 3574 1605 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+5112 1231 m 5117 1291 l 5268 1276 l 5146 1258 l 5262 1216 l cp
+eoclip
+n 5625 1530 m 5624 1528 l 5623 1523 l 5619 1516 l 5615 1505 l 5609 1491 l
+ 5601 1475 l 5593 1457 l 5582 1438 l 5571 1419 l 5557 1400 l
+ 5541 1381 l 5523 1362 l 5501 1342 l 5475 1323 l 5445 1305 l
+ 5413 1290 l 5382 1278 l 5352 1269 l 5324 1262 l 5297 1258 l
+ 5271 1256 l 5245 1255 l 5221 1254 l 5199 1255 l 5179 1256 l
+ 5161 1257 l
+ 5130 1260 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 5262 1216 m 5146 1258 l 5268 1276 l 5262 1216 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+5658 2156 m 5602 2135 l 5549 2277 l 5619 2175 l 5605 2297 l cp
+eoclip
+n 5130 2385 m 5133 2386 l 5138 2387 l 5148 2390 l 5161 2393 l 5179 2397 l
+ 5199 2402 l 5221 2406 l 5245 2410 l 5271 2413 l 5297 2414 l
+ 5324 2414 l 5352 2411 l 5382 2406 l 5413 2397 l 5445 2385 l
+ 5475 2369 l 5501 2352 l 5523 2334 l 5541 2315 l 5557 2296 l
+ 5571 2276 l 5582 2257 l 5593 2237 l 5601 2219 l 5609 2202 l
+ 5615 2187 l
+ 5625 2160 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 5605 2297 m 5619 2175 l 5549 2277 l 5605 2297 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+5324 4488 m 5352 4435 l 5218 4364 l 5311 4447 l 5190 4417 l cp
+eoclip
+n 4740 3825 m 4740 3826 l 4740 3829 l 4740 3833 l 4740 3840 l 4740 3849 l
+ 4740 3860 l 4741 3873 l 4742 3888 l 4744 3904 l 4747 3921 l
+ 4752 3939 l 4758 3959 l 4765 3979 l 4776 4002 l 4788 4025 l
+ 4804 4051 l 4824 4079 l 4847 4109 l 4875 4140 l 4903 4168 l
+ 4932 4196 l 4961 4222 l 4990 4246 l 5019 4268 l 5047 4289 l
+ 5075 4308 l 5102 4327 l 5130 4344 l 5157 4361 l 5183 4376 l
+ 5208 4391 l 5232 4405 l 5254 4417 l 5274 4428 l 5290 4437 l
+ 5304 4444 l
+ 5325 4455 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 5190 4417 m 5311 4447 l 5218 4364 l 5190 4417 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+5235 4665 m 5235 4605 l 5084 4605 l 5204 4635 l 5084 4665 l cp
+eoclip
+n 3330 4635 m
+ 5220 4635 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 5084 4665 m 5204 4635 l 5084 4605 l 5084 4665 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+1717 4487 m 1732 4429 l 1585 4391 l 1694 4451 l 1570 4450 l cp
+eoclip
+n 1710 4815 m 1708 4816 l 1702 4817 l 1693 4819 l 1679 4823 l 1661 4827 l
+ 1639 4832 l 1613 4838 l 1585 4843 l 1555 4849 l 1525 4854 l
+ 1493 4858 l 1462 4860 l 1431 4862 l 1401 4861 l 1370 4858 l
+ 1340 4852 l 1312 4843 l 1284 4831 l 1260 4815 l 1241 4797 l
+ 1226 4778 l 1215 4759 l 1205 4740 l 1199 4722 l 1194 4705 l
+ 1190 4689 l 1188 4675 l 1186 4661 l 1185 4648 l 1185 4635 l
+ 1185 4622 l 1186 4609 l 1188 4595 l 1190 4581 l 1194 4565 l
+ 1199 4548 l 1205 4530 l 1215 4511 l 1226 4492 l 1241 4473 l
+ 1260 4455 l 1284 4439 l 1312 4427 l 1340 4418 l 1370 4412 l
+ 1401 4409 l 1431 4408 l 1462 4410 l 1493 4412 l 1525 4416 l
+ 1555 4421 l 1585 4427 l 1613 4432 l 1639 4438 l 1661 4443 l
+ 1679 4447 l
+ 1710 4455 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 1570 4450 m 1694 4451 l 1585 4391 l 1570 4450 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+3445 1417 m 3422 1361 l 3282 1417 l 3405 1401 l 3304 1473 l cp
+eoclip
+n 2475 4275 m 2475 4274 l 2475 4272 l 2475 4268 l 2475 4262 l 2475 4253 l
+ 2475 4241 l 2475 4226 l 2475 4208 l 2475 4186 l 2475 4160 l
+ 2475 4130 l 2475 4098 l 2476 4061 l 2476 4022 l 2477 3979 l
+ 2478 3934 l 2478 3887 l 2480 3837 l 2481 3786 l 2483 3733 l
+ 2485 3679 l 2487 3623 l 2490 3567 l 2493 3510 l 2497 3452 l
+ 2501 3393 l 2505 3334 l 2510 3274 l 2516 3213 l 2523 3152 l
+ 2530 3090 l 2538 3028 l 2547 2965 l 2557 2900 l 2568 2835 l
+ 2580 2769 l 2593 2702 l 2608 2634 l 2624 2566 l 2641 2498 l
+ 2659 2429 l 2679 2361 l 2700 2295 l 2729 2212 l 2758 2135 l
+ 2788 2062 l 2819 1996 l 2849 1935 l 2879 1879 l 2909 1829 l
+ 2939 1783 l 2968 1742 l 2997 1704 l 3026 1670 l 3055 1638 l
+ 3083 1610 l 3111 1584 l 3139 1560 l 3167 1539 l 3194 1519 l
+ 3220 1501 l 3245 1484 l 3270 1469 l 3293 1456 l 3315 1444 l
+ 3335 1434 l 3353 1425 l 3369 1417 l 3382 1411 l 3394 1406 l
+ 3403 1402 l 3410 1399 l
+ 3420 1395 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 3304 1473 m 3405 1401 l 3282 1417 l 3304 1473 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+5065 1097 m 5074 1156 l 5224 1135 l 5101 1123 l 5215 1076 l cp
+eoclip
+n 6660 4365 m 6660 4364 l 6661 4362 l 6663 4359 l 6666 4353 l 6670 4344 l
+ 6676 4333 l 6683 4318 l 6692 4300 l 6703 4278 l 6715 4253 l
+ 6729 4223 l 6746 4189 l 6763 4152 l 6783 4111 l 6804 4066 l
+ 6826 4017 l 6850 3966 l 6875 3911 l 6900 3854 l 6927 3794 l
+ 6954 3732 l 6981 3668 l 7009 3603 l 7036 3536 l 7064 3468 l
+ 7091 3399 l 7117 3329 l 7143 3259 l 7168 3188 l 7192 3116 l
+ 7215 3045 l 7237 2973 l 7258 2901 l 7277 2829 l 7295 2757 l
+ 7311 2685 l 7325 2613 l 7337 2540 l 7348 2468 l 7356 2395 l
+ 7361 2322 l 7364 2250 l 7364 2177 l 7362 2104 l 7356 2032 l
+ 7347 1960 l 7334 1889 l 7318 1819 l 7297 1750 l 7273 1684 l
+ 7245 1620 l 7210 1555 l 7171 1493 l 7128 1437 l 7082 1384 l
+ 7033 1337 l 6983 1293 l 6930 1254 l 6876 1220 l 6820 1188 l
+ 6763 1161 l 6704 1137 l 6645 1116 l 6585 1098 l 6524 1082 l
+ 6462 1070 l 6399 1059 l 6335 1051 l 6271 1044 l 6207 1039 l
+ 6142 1036 l 6077 1035 l 6012 1035 l 5947 1036 l 5882 1038 l
+ 5818 1041 l 5755 1045 l 5693 1049 l 5633 1054 l 5574 1060 l
+ 5518 1066 l 5464 1072 l 5413 1078 l 5365 1084 l 5321 1089 l
+ 5281 1095 l 5244 1100 l 5211 1105 l 5183 1109 l 5158 1113 l
+ 5138 1116 l 5121 1119 l 5109 1121 l 5099 1123 l
+ 5085 1125 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 5215 1076 m 5101 1123 l 5224 1135 l 5215 1076 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+6817 4429 m 6832 4487 l 6979 4450 l 6856 4451 l 6964 4391 l cp
+eoclip
+n 6840 4815 m 6842 4816 l 6848 4817 l 6857 4819 l 6871 4823 l 6889 4827 l
+ 6911 4832 l 6937 4838 l 6965 4843 l 6995 4849 l 7025 4854 l
+ 7057 4858 l 7088 4860 l 7119 4862 l 7149 4861 l 7180 4858 l
+ 7210 4852 l 7238 4843 l 7266 4831 l 7290 4815 l 7309 4797 l
+ 7324 4778 l 7335 4759 l 7345 4740 l 7351 4722 l 7356 4705 l
+ 7360 4689 l 7362 4675 l 7364 4661 l 7365 4648 l 7365 4635 l
+ 7365 4622 l 7364 4609 l 7362 4595 l 7360 4581 l 7356 4565 l
+ 7351 4548 l 7345 4530 l 7335 4511 l 7324 4492 l 7309 4473 l
+ 7290 4455 l 7266 4439 l 7238 4427 l 7210 4418 l 7180 4412 l
+ 7149 4409 l 7119 4408 l 7088 4410 l 7057 4412 l 7025 4416 l
+ 6995 4421 l 6965 4427 l 6937 4432 l 6911 4438 l 6889 4443 l
+ 6871 4447 l
+ 6840 4455 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 6964 4391 m 6856 4451 l 6979 4450 l 6964 4391 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+6267 1492 m 6325 1506 l 6360 1359 l 6304 1469 l 6302 1345 l cp
+eoclip
+n 6615 1575 m 6616 1572 l 6619 1566 l 6623 1555 l 6629 1539 l 6636 1519 l
+ 6644 1496 l 6652 1471 l 6659 1445 l 6666 1418 l 6671 1391 l
+ 6675 1364 l 6676 1337 l 6674 1310 l 6669 1284 l 6660 1260 l
+ 6650 1243 l 6638 1230 l 6627 1219 l 6615 1210 l 6604 1203 l
+ 6595 1198 l 6586 1195 l 6578 1192 l 6570 1190 l 6562 1189 l
+ 6555 1188 l 6547 1187 l 6538 1187 l 6528 1187 l 6516 1188 l
+ 6503 1190 l 6488 1193 l 6471 1198 l 6453 1205 l 6435 1215 l
+ 6413 1231 l 6394 1250 l 6378 1271 l 6364 1294 l 6352 1317 l
+ 6342 1340 l 6333 1364 l 6325 1388 l 6318 1411 l 6313 1432 l
+ 6308 1451 l
+ 6300 1485 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 6302 1345 m 6304 1469 l 6360 1359 l 6302 1345 l  cp gs 0.00 setgray ef gr  col0 s
+% here ends figure;
+$F2psEnd
+rs
+showpage
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/images/fsm-idle.fig	Mon Sep 25 15:53:33 2006 +0000
@@ -0,0 +1,110 @@
+#FIG 3.2
+Portrait
+Center
+Metric
+A4      
+100.00
+Single
+-2
+1200 2
+0 32 #8e8e8e
+0 33 #000000
+6 3375 855 5175 1665
+1 2 0 1 0 7 50 -1 -1 0.000 1 0.0000 4275 1260 855 360 3420 900 5130 1620
+4 1 0 50 -1 16 12 0.0000 4 120 1080 4275 1305 START\001
+-6
+6 3420 3105 5175 3870
+1 2 0 1 0 7 50 -1 -1 0.000 1 0.0000 4282 3503 855 360 3427 3143 5137 3863
+4 1 0 50 -1 16 12 0.0000 4 120 930 4282 3465 READ\001
+4 1 0 50 -1 16 12 0.0000 4 120 1290 4282 3690 STATES\001
+-6
+6 1500 4261 3465 4995
+1 2 0 1 0 7 50 -1 -1 0.000 1 0.0000 2482 4628 855 360 1627 4268 3337 4988
+4 1 0 50 -1 16 12 0.0000 4 120 1965 2482 4590 CONFIGURE\001
+4 1 0 50 -1 16 12 0.0000 4 120 1305 2482 4815 SLAVES\001
+-6
+6 4950 1800 4950 1800
+-6
+6 3240 2011 5310 2745
+1 2 0 1 0 7 50 -1 -1 0.000 1 0.0000 4275 2378 855 360 3420 2018 5130 2738
+4 1 0 50 -1 16 12 0.0000 4 120 2070 4275 2423 BROADCAST\001
+-6
+6 5220 4261 6944 4995
+1 2 0 1 0 7 50 -1 -1 0.000 1 0.0000 6082 4628 855 360 5227 4268 6937 4988
+4 1 0 50 -1 16 12 0.0000 4 120 1035 6082 4590 WRITE\001
+4 1 0 50 -1 16 12 0.0000 4 120 1425 6082 4815 EEPROM\001
+-6
+6 5206 1471 6930 2205
+1 2 0 1 0 7 50 -1 -1 0.000 1 0.0000 6068 1838 855 360 5213 1478 6923 2198
+4 1 0 50 -1 16 12 0.0000 4 120 1695 6068 1800 SCAN FOR\001
+4 1 0 50 -1 16 12 0.0000 4 120 1305 6068 2025 SLAVES\001
+-6
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 3510 675 101 101 3510 675 3600 720
+3 2 0 1 0 0 50 -1 20 0.000 0 1 0 2
+	1 1 1.00 60.00 120.00
+	 3555 765 3690 990
+	 0.000 0.000
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 2
+	1 1 1.00 60.00 120.00
+	 4275 1620 4275 2025
+	 0.000 0.000
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 2
+	1 1 1.00 60.00 120.00
+	 4275 2745 4275 3150
+	 0.000 0.000
+3 2 0 1 0 7 50 -1 -1 4.000 0 1 0 4
+	1 1 1.00 60.00 120.00
+	 3510 3690 3060 3690 3060 3330 3510 3330
+	 0.000 -1.000 -1.000 0.000
+3 2 1 1 0 7 50 -1 -1 4.000 0 1 0 4
+	1 1 1.00 60.00 120.00
+	 4770 945 4770 630 4455 630 4410 900
+	 0.000 -1.000 -1.000 0.000
+3 2 0 1 0 7 50 -1 -1 4.000 0 1 0 3
+	1 1 1.00 60.00 120.00
+	 3825 3825 3690 4140 3240 4455
+	 0.000 -1.000 0.000
+3 2 1 1 0 7 50 -1 -1 4.000 0 1 0 3
+	1 1 1.00 60.00 120.00
+	 3870 2070 3735 1845 3915 1575
+	 0.000 -1.000 0.000
+3 2 1 1 0 7 50 -1 -1 4.000 0 1 0 3
+	1 1 1.00 60.00 120.00
+	 3600 3285 3150 2430 3645 1485
+	 0.000 -1.000 0.000
+3 2 0 1 0 7 50 -1 -1 4.000 0 1 0 3
+	1 1 1.00 60.00 120.00
+	 5625 1530 5445 1305 5130 1260
+	 0.000 -1.000 0.000
+3 2 0 1 0 7 50 -1 -1 4.000 0 1 0 3
+	1 1 1.00 60.00 120.00
+	 5130 2385 5445 2385 5625 2160
+	 0.000 -1.000 0.000
+3 2 0 1 0 7 50 -1 -1 4.000 0 1 0 3
+	1 1 1.00 60.00 120.00
+	 4740 3825 4875 4140 5325 4455
+	 0.000 -1.000 0.000
+3 2 0 1 0 7 50 -1 -1 4.000 0 1 0 2
+	1 1 1.00 60.00 120.00
+	 3330 4635 5220 4635
+	 0.000 0.000
+3 2 0 1 0 7 50 -1 -1 4.000 0 1 0 4
+	1 1 1.00 60.00 120.00
+	 1710 4815 1260 4815 1260 4455 1710 4455
+	 0.000 -1.000 -1.000 0.000
+3 2 0 1 0 7 50 -1 -1 4.000 0 1 0 3
+	1 1 1.00 60.00 120.00
+	 2475 4275 2700 2295 3420 1395
+	 0.000 -1.000 0.000
+3 2 0 1 0 7 50 -1 -1 4.000 0 1 0 3
+	1 1 1.00 60.00 120.00
+	 6660 4365 7245 1620 5085 1125
+	 0.000 -1.000 0.000
+3 2 0 1 0 7 50 -1 -1 4.000 0 1 0 4
+	1 1 1.00 60.00 120.00
+	 6840 4815 7290 4815 7290 4455 6840 4455
+	 0.000 -1.000 -1.000 0.000
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 4
+	1 1 1.00 60.00 120.00
+	 6615 1575 6660 1260 6435 1215 6300 1485
+	 0.000 -1.000 -1.000 0.000
Binary file doc/images/fsm-idle.pdf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/images/fsm-op.eps	Mon Sep 25 15:53:33 2006 +0000
@@ -0,0 +1,524 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: /home/fp/diplom/diplom/bilder/fsm-op.fig
+%%Creator: fig2dev Version 3.2 Patchlevel 4
+%%CreationDate: Wed Jul 19 12:25:28 2006
+%%For: fp@jupiter (Florian Pose)
+%%BoundingBox: 0 0 394 421
+%%Magnification: 1.0000
+%%EndComments
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+/col32 {0.555 0.555 0.555 srgb} bind def
+
+end
+save
+newpath 0 421 moveto 0 0 lineto 394 0 lineto 394 421 lineto closepath clip newpath
+-73.9 456.4 translate
+1 -1 scale
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+  bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+  4 -2 roll mul srgb} bind def
+ /DrawEllipse {
+	/endangle exch def
+	/startangle exch def
+	/yrad exch def
+	/xrad exch def
+	/y exch def
+	/x exch def
+	/savematrix mtrx currentmatrix def
+	x y tr xrad yrad sc 0 0 1 startangle endangle arc
+	closepath
+	savematrix setmatrix
+	} def
+
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+$F2psBegin
+10 setmiterlimit
+0 slj 0 slc
+ 0.06299 0.06299 sc
+%
+% Fig objects follow
+%
+% 
+% here starts figure with depth 50
+% Ellipse
+7.500 slw
+n 4275 1260 855 360 0 360 DrawEllipse gs col0 s gr
+
+/Helvetica ff 180.00 scf sf
+4275 1305 m
+gs 1 -1 sc (START) dup sw pop 2 div neg 0 rm  col0 sh gr
+% Ellipse
+n 4275 2378 855 360 0 360 DrawEllipse gs col0 s gr
+
+/Helvetica ff 180.00 scf sf
+4275 2423 m
+gs 1 -1 sc (BROADCAST) dup sw pop 2 div neg 0 rm  col0 sh gr
+% Ellipse
+n 4282 3503 855 360 0 360 DrawEllipse gs col0 s gr
+
+/Helvetica ff 180.00 scf sf
+4282 3465 m
+gs 1 -1 sc (READ) dup sw pop 2 div neg 0 rm  col0 sh gr
+/Helvetica ff 180.00 scf sf
+4282 3690 m
+gs 1 -1 sc (STATES) dup sw pop 2 div neg 0 rm  col0 sh gr
+% Ellipse
+n 6097 4628 855 360 0 360 DrawEllipse gs col0 s gr
+
+/Helvetica ff 180.00 scf sf
+6097 4590 m
+gs 1 -1 sc (VALIDATE) dup sw pop 2 div neg 0 rm  col0 sh gr
+/Helvetica ff 180.00 scf sf
+6097 4815 m
+gs 1 -1 sc (VENDOR) dup sw pop 2 div neg 0 rm  col0 sh gr
+% Ellipse
+n 6112 5753 855 360 0 360 DrawEllipse gs col0 s gr
+
+/Helvetica ff 180.00 scf sf
+6112 5715 m
+gs 1 -1 sc (VALIDATE) dup sw pop 2 div neg 0 rm  col0 sh gr
+/Helvetica ff 180.00 scf sf
+6112 5925 m
+gs 1 -1 sc (PRODUCT) dup sw pop 2 div neg 0 rm  col0 sh gr
+% Ellipse
+n 6127 6878 855 360 0 360 DrawEllipse gs col0 s gr
+
+/Helvetica ff 180.00 scf sf
+6127 6840 m
+gs 1 -1 sc (REWRITE) dup sw pop 2 div neg 0 rm  col0 sh gr
+/Helvetica ff 180.00 scf sf
+6127 7050 m
+gs 1 -1 sc (ADDRESSES) dup sw pop 2 div neg 0 rm  col0 sh gr
+% Ellipse
+n 2467 4628 855 360 0 360 DrawEllipse gs col0 s gr
+
+/Helvetica ff 180.00 scf sf
+2467 4590 m
+gs 1 -1 sc (CONFIGURE) dup sw pop 2 div neg 0 rm  col0 sh gr
+/Helvetica ff 180.00 scf sf
+2467 4800 m
+gs 1 -1 sc (SLAVES) dup sw pop 2 div neg 0 rm  col0 sh gr
+% Ellipse
+n 3510 675 101 101 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Polyline
+2 slj
+gs  clippath
+3671 1018 m 3723 987 l 3645 857 l 3682 976 l 3594 888 l cp
+eoclip
+n 3555 765 m
+ 3690 990 l gs 0.00 setgray ef gr gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 3594 888 m 3682 976 l 3645 857 l 3594 888 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+4245 2040 m 4305 2040 l 4305 1889 l 4275 2009 l 4245 1889 l cp
+eoclip
+n 4275 1620 m
+ 4275 2025 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 4245 1889 m 4275 2009 l 4305 1889 l 4245 1889 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+4245 3165 m 4305 3165 l 4305 3014 l 4275 3134 l 4245 3014 l cp
+eoclip
+n 4275 2745 m
+ 4275 3150 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 4245 3014 m 4275 3134 l 4305 3014 l 4245 3014 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+3212 4435 m 3241 4488 l 3373 4415 l 3254 4447 l 3344 4362 l cp
+eoclip
+n 3825 3825 m 3824 3826 l 3823 3830 l 3821 3835 l 3817 3844 l 3813 3855 l
+ 3807 3869 l 3799 3885 l 3791 3904 l 3781 3923 l 3771 3944 l
+ 3759 3966 l 3746 3989 l 3732 4013 l 3716 4038 l 3698 4065 l
+ 3678 4093 l 3654 4122 l 3628 4153 l 3600 4185 l 3570 4216 l
+ 3541 4244 l 3512 4271 l 3485 4294 l 3459 4315 l 3434 4334 l
+ 3410 4352 l 3387 4368 l 3364 4382 l 3343 4396 l 3322 4408 l
+ 3303 4420 l 3286 4429 l 3271 4438 l 3260 4444 l
+ 3240 4455 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 3344 4362 m 3254 4447 l 3373 4415 l 3344 4362 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+5289 4488 m 5318 4435 l 5186 4362 l 5277 4447 l 5157 4415 l cp
+eoclip
+n 4706 3825 m 4707 3826 l 4708 3830 l 4710 3835 l 4714 3844 l 4718 3855 l
+ 4724 3869 l 4732 3885 l 4740 3904 l 4750 3923 l 4760 3944 l
+ 4772 3966 l 4785 3989 l 4799 4013 l 4815 4038 l 4833 4065 l
+ 4853 4093 l 4877 4122 l 4903 4153 l 4931 4185 l 4961 4216 l
+ 4990 4244 l 5019 4271 l 5046 4294 l 5072 4315 l 5097 4334 l
+ 5121 4352 l 5144 4368 l 5167 4382 l 5188 4396 l 5209 4408 l
+ 5228 4420 l 5245 4429 l 5260 4438 l 5271 4444 l
+ 5291 4455 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 5157 4415 m 5277 4447 l 5186 4362 l 5157 4415 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+5653 5474 m 5703 5440 l 5619 5315 l 5661 5432 l 5569 5348 l cp
+eoclip
+n 5715 4950 m 5713 4951 l 5710 4954 l 5704 4960 l 5696 4967 l 5685 4977 l
+ 5673 4989 l 5660 5002 l 5647 5017 l 5634 5033 l 5622 5051 l
+ 5611 5070 l 5600 5092 l 5591 5117 l 5584 5145 l 5580 5175 l
+ 5579 5206 l 5581 5235 l 5585 5263 l 5591 5288 l 5598 5311 l
+ 5607 5333 l 5616 5354 l 5626 5373 l 5636 5391 l 5646 5407 l
+ 5654 5421 l
+ 5670 5445 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 5569 5348 m 5661 5432 l 5619 5315 l 5569 5348 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+6586 4920 m 6536 4954 l 6620 5079 l 6579 4963 l 6670 5046 l cp
+eoclip
+n 6525 5445 m 6527 5444 l 6530 5441 l 6536 5435 l 6544 5428 l 6555 5418 l
+ 6567 5406 l 6580 5393 l 6593 5378 l 6606 5362 l 6618 5344 l
+ 6629 5325 l 6640 5303 l 6649 5278 l 6656 5250 l 6660 5220 l
+ 6661 5189 l 6659 5160 l 6655 5132 l 6649 5107 l 6642 5084 l
+ 6633 5062 l 6624 5041 l 6614 5022 l 6604 5004 l 6594 4988 l
+ 6586 4974 l
+ 6570 4950 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 6670 5046 m 6579 4963 l 6620 5079 l 6670 5046 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+6090 6540 m 6150 6540 l 6150 6389 l 6120 6509 l 6090 6389 l cp
+eoclip
+n 6120 6120 m
+ 6120 6525 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 6090 6389 m 6120 6509 l 6150 6389 l 6090 6389 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+3490 1417 m 3467 1361 l 3327 1417 l 3450 1401 l 3349 1473 l cp
+eoclip
+n 2475 4275 m 2475 4274 l 2475 4272 l 2475 4268 l 2475 4262 l 2475 4253 l
+ 2476 4241 l 2476 4226 l 2477 4208 l 2477 4186 l 2478 4160 l
+ 2479 4130 l 2480 4098 l 2481 4061 l 2483 4022 l 2485 3979 l
+ 2486 3934 l 2489 3887 l 2491 3837 l 2494 3786 l 2497 3733 l
+ 2500 3679 l 2504 3623 l 2508 3567 l 2513 3510 l 2518 3452 l
+ 2523 3393 l 2529 3334 l 2536 3274 l 2543 3213 l 2551 3152 l
+ 2560 3090 l 2569 3028 l 2579 2965 l 2591 2900 l 2603 2835 l
+ 2616 2769 l 2631 2702 l 2647 2634 l 2664 2566 l 2682 2498 l
+ 2702 2429 l 2723 2361 l 2745 2295 l 2775 2212 l 2805 2135 l
+ 2837 2062 l 2868 1996 l 2899 1935 l 2929 1879 l 2960 1829 l
+ 2989 1783 l 3019 1742 l 3048 1704 l 3077 1670 l 3105 1638 l
+ 3134 1610 l 3161 1584 l 3189 1560 l 3216 1539 l 3243 1519 l
+ 3269 1501 l 3294 1484 l 3318 1469 l 3341 1456 l 3362 1444 l
+ 3382 1434 l 3399 1425 l 3415 1417 l 3428 1411 l 3439 1406 l
+ 3448 1402 l 3455 1399 l
+ 3465 1395 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 3349 1473 m 3450 1401 l 3327 1417 l 3349 1473 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+ [60] 0 sd
+gs  clippath
+4778 1542 m 4738 1587 l 4851 1688 l 4782 1586 l 4891 1643 l cp
+eoclip
+n 4815 2070 m 4816 2069 l 4819 2067 l 4825 2063 l 4832 2057 l 4842 2050 l
+ 4853 2041 l 4865 2030 l 4878 2018 l 4891 2005 l 4904 1991 l
+ 4915 1975 l 4926 1959 l 4935 1940 l 4943 1920 l 4948 1897 l
+ 4951 1872 l 4950 1845 l 4946 1818 l 4938 1791 l 4929 1766 l
+ 4917 1743 l 4904 1721 l 4890 1701 l 4876 1682 l 4860 1664 l
+ 4845 1647 l 4829 1631 l 4814 1616 l 4801 1603 l 4790 1593 l
+
+ 4770 1575 l gs col0 s gr gr
+ [] 0 sd
+% arrowhead
+0 slj
+n 4891 1643 m 4782 1586 l 4851 1688 l 4891 1643 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+ [60] 0 sd
+gs  clippath
+4916 1453 m 4872 1494 l 4975 1605 l 4916 1497 l 5019 1564 l cp
+eoclip
+n 4950 3285 m 4951 3284 l 4953 3282 l 4957 3278 l 4964 3273 l 4973 3264 l
+ 4984 3254 l 4998 3240 l 5015 3224 l 5034 3205 l 5055 3184 l
+ 5078 3161 l 5102 3135 l 5126 3108 l 5151 3080 l 5176 3050 l
+ 5201 3018 l 5225 2985 l 5249 2951 l 5271 2915 l 5293 2877 l
+ 5313 2838 l 5332 2796 l 5349 2752 l 5364 2705 l 5377 2656 l
+ 5388 2603 l 5395 2547 l 5399 2490 l 5400 2430 l 5397 2374 l
+ 5390 2318 l 5381 2264 l 5369 2212 l 5355 2163 l 5339 2115 l
+ 5322 2070 l 5303 2026 l 5283 1984 l 5261 1944 l 5239 1905 l
+ 5216 1868 l 5192 1832 l 5167 1797 l 5142 1763 l 5117 1730 l
+ 5092 1698 l 5068 1668 l 5044 1640 l 5022 1613 l 5000 1589 l
+ 4981 1567 l 4963 1548 l 4948 1531 l 4935 1517 l 4925 1506 l
+ 4917 1498 l
+ 4905 1485 l gs col0 s gr gr
+ [] 0 sd
+% arrowhead
+0 slj
+n 5019 1564 m 4916 1497 l 4975 1605 l 5019 1564 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+ [60] 0 sd
+gs  clippath
+5048 1407 m 5008 1452 l 5121 1553 l 5052 1451 l 5161 1508 l cp
+eoclip
+n 6120 4275 m 6120 4274 l 6120 4272 l 6120 4268 l 6120 4262 l 6120 4253 l
+ 6120 4242 l 6120 4227 l 6119 4209 l 6119 4187 l 6118 4162 l
+ 6118 4134 l 6117 4102 l 6116 4068 l 6115 4030 l 6113 3991 l
+ 6111 3949 l 6109 3905 l 6106 3859 l 6103 3812 l 6100 3764 l
+ 6096 3714 l 6091 3664 l 6086 3612 l 6080 3559 l 6073 3505 l
+ 6066 3451 l 6057 3395 l 6048 3337 l 6037 3279 l 6026 3219 l
+ 6013 3157 l 5998 3094 l 5982 3029 l 5965 2962 l 5945 2894 l
+ 5924 2824 l 5901 2753 l 5876 2681 l 5850 2610 l 5819 2532 l
+ 5788 2457 l 5755 2385 l 5723 2317 l 5690 2253 l 5658 2192 l
+ 5626 2136 l 5594 2083 l 5563 2033 l 5532 1986 l 5501 1941 l
+ 5470 1899 l 5440 1859 l 5410 1821 l 5380 1785 l 5351 1750 l
+ 5322 1717 l 5293 1686 l 5265 1656 l 5238 1628 l 5212 1602 l
+ 5187 1577 l 5164 1554 l 5142 1533 l 5122 1515 l 5105 1498 l
+ 5089 1484 l 5076 1472 l 5065 1462 l 5056 1454 l 5050 1449 l
+
+ 5040 1440 l gs col0 s gr gr
+ [] 0 sd
+% arrowhead
+0 slj
+n 5161 1508 m 5052 1451 l 5121 1553 l 5161 1508 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+3517 3362 m 3532 3304 l 3385 3266 l 3494 3326 l 3370 3325 l cp
+eoclip
+n 3510 3690 m 3508 3691 l 3502 3692 l 3493 3694 l 3479 3698 l 3461 3702 l
+ 3439 3707 l 3413 3713 l 3385 3718 l 3355 3724 l 3325 3729 l
+ 3293 3733 l 3262 3735 l 3231 3737 l 3201 3736 l 3170 3733 l
+ 3140 3727 l 3112 3718 l 3084 3706 l 3060 3690 l 3041 3672 l
+ 3026 3653 l 3015 3634 l 3005 3615 l 2999 3597 l 2994 3580 l
+ 2990 3564 l 2988 3550 l 2986 3536 l 2985 3523 l 2985 3510 l
+ 2985 3497 l 2986 3484 l 2988 3470 l 2990 3456 l 2994 3440 l
+ 2999 3423 l 3005 3405 l 3015 3386 l 3026 3367 l 3041 3348 l
+ 3060 3330 l 3084 3314 l 3112 3302 l 3140 3293 l 3170 3287 l
+ 3201 3284 l 3231 3283 l 3262 3285 l 3293 3287 l 3325 3291 l
+ 3355 3296 l 3385 3302 l 3413 3307 l 3439 3313 l 3461 3318 l
+ 3479 3322 l
+ 3510 3330 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 3370 3325 m 3494 3326 l 3385 3266 l 3370 3325 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+ [60] 0 sd
+gs  clippath
+4383 920 m 4442 908 l 4411 760 l 4407 884 l 4353 772 l cp
+eoclip
+n 4770 945 m 4771 942 l 4773 935 l 4777 924 l 4782 907 l 4787 887 l
+ 4794 863 l 4800 837 l 4805 810 l 4809 782 l 4811 755 l
+ 4810 728 l 4807 702 l 4799 676 l 4787 652 l 4770 630 l
+ 4751 614 l 4730 603 l 4710 594 l 4691 588 l 4673 584 l
+ 4657 582 l 4643 581 l 4629 581 l 4616 581 l 4603 582 l
+ 4590 584 l 4575 586 l 4558 589 l 4540 593 l 4520 599 l
+ 4499 606 l 4476 617 l 4455 630 l 4437 646 l 4422 665 l
+ 4411 684 l 4404 704 l 4399 725 l 4396 745 l 4394 766 l
+ 4395 787 l 4396 807 l 4398 827 l 4400 846 l 4403 862 l
+ 4405 876 l
+ 4410 900 l gs col0 s gr gr
+ [] 0 sd
+% arrowhead
+0 slj
+n 4353 772 m 4407 884 l 4411 760 l 4353 772 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+ [60] 0 sd
+gs  clippath
+5138 1317 m 5098 1362 l 5211 1463 l 5142 1361 l 5251 1418 l cp
+eoclip
+n 6840 5580 m 6840 5579 l 6841 5578 l 6842 5576 l 6845 5572 l 6848 5566 l
+ 6852 5558 l 6857 5548 l 6863 5536 l 6871 5521 l 6880 5503 l
+ 6889 5483 l 6900 5460 l 6912 5435 l 6925 5407 l 6938 5377 l
+ 6952 5345 l 6967 5310 l 6981 5274 l 6996 5236 l 7011 5195 l
+ 7026 5154 l 7040 5110 l 7053 5066 l 7066 5019 l 7079 4972 l
+ 7090 4923 l 7100 4873 l 7109 4821 l 7117 4767 l 7123 4712 l
+ 7128 4656 l 7130 4597 l 7131 4536 l 7130 4473 l 7127 4408 l
+ 7121 4339 l 7113 4269 l 7102 4195 l 7087 4118 l 7070 4038 l
+ 7049 3955 l 7025 3870 l 6997 3782 l 6965 3692 l 6930 3600 l
+ 6896 3519 l 6859 3437 l 6821 3357 l 6780 3278 l 6739 3200 l
+ 6696 3124 l 6653 3050 l 6608 2978 l 6564 2908 l 6518 2840 l
+ 6472 2773 l 6426 2708 l 6379 2645 l 6332 2584 l 6285 2524 l
+ 6238 2465 l 6190 2407 l 6142 2351 l 6094 2296 l 6046 2242 l
+ 5997 2188 l 5949 2136 l 5901 2085 l 5853 2035 l 5805 1986 l
+ 5757 1938 l 5710 1891 l 5664 1845 l 5618 1801 l 5574 1758 l
+ 5531 1717 l 5489 1677 l 5449 1640 l 5411 1604 l 5375 1571 l
+ 5341 1540 l 5309 1511 l 5280 1484 l 5254 1460 l 5230 1439 l
+ 5209 1420 l 5191 1404 l 5176 1390 l 5163 1379 l 5153 1370 l
+ 5145 1363 l 5139 1358 l
+ 5130 1350 l gs col0 s gr gr
+ [] 0 sd
+% arrowhead
+0 slj
+n 5251 1418 m 5142 1361 l 5211 1463 l 5251 1418 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+5086 1136 m 5057 1188 l 5189 1262 l 5099 1178 l 5218 1210 l cp
+eoclip
+n 6885 6705 m 6885 6704 l 6886 6703 l 6887 6700 l 6889 6696 l 6892 6690 l
+ 6896 6681 l 6901 6670 l 6907 6656 l 6914 6640 l 6922 6620 l
+ 6932 6597 l 6943 6571 l 6955 6542 l 6969 6510 l 6983 6474 l
+ 6999 6435 l 7016 6394 l 7033 6349 l 7052 6302 l 7071 6252 l
+ 7090 6200 l 7110 6145 l 7130 6089 l 7151 6030 l 7171 5970 l
+ 7191 5909 l 7211 5846 l 7231 5781 l 7250 5716 l 7269 5649 l
+ 7287 5581 l 7304 5512 l 7320 5443 l 7335 5372 l 7350 5300 l
+ 7363 5227 l 7375 5152 l 7385 5077 l 7394 5000 l 7402 4922 l
+ 7408 4842 l 7412 4761 l 7414 4678 l 7414 4594 l 7412 4508 l
+ 7408 4419 l 7401 4329 l 7392 4237 l 7380 4143 l 7365 4048 l
+ 7348 3951 l 7327 3853 l 7303 3754 l 7276 3654 l 7245 3555 l
+ 7211 3457 l 7175 3360 l 7136 3266 l 7095 3173 l 7052 3084 l
+ 7008 2998 l 6962 2914 l 6915 2834 l 6867 2756 l 6818 2681 l
+ 6769 2609 l 6719 2540 l 6668 2473 l 6616 2409 l 6564 2347 l
+ 6512 2287 l 6459 2229 l 6406 2173 l 6352 2119 l 6298 2066 l
+ 6244 2015 l 6189 1965 l 6134 1917 l 6080 1870 l 6025 1824 l
+ 5970 1780 l 5915 1736 l 5861 1695 l 5808 1654 l 5754 1615 l
+ 5702 1577 l 5651 1540 l 5601 1505 l 5553 1471 l 5506 1439 l
+ 5461 1409 l 5417 1380 l 5377 1353 l 5338 1328 l 5303 1305 l
+ 5269 1284 l 5239 1265 l 5212 1248 l 5187 1232 l 5166 1219 l
+ 5147 1208 l 5131 1198 l 5118 1190 l 5108 1184 l 5100 1179 l
+ 5094 1175 l
+ 5085 1170 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 5218 1210 m 5099 1178 l 5189 1262 l 5218 1210 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+1717 4487 m 1732 4429 l 1585 4391 l 1694 4451 l 1570 4450 l cp
+eoclip
+n 1710 4815 m 1708 4816 l 1702 4817 l 1693 4819 l 1679 4823 l 1661 4827 l
+ 1639 4832 l 1613 4838 l 1585 4843 l 1555 4849 l 1525 4854 l
+ 1493 4858 l 1462 4860 l 1431 4862 l 1401 4861 l 1370 4858 l
+ 1340 4852 l 1312 4843 l 1284 4831 l 1260 4815 l 1241 4797 l
+ 1226 4778 l 1215 4759 l 1205 4740 l 1199 4722 l 1194 4705 l
+ 1190 4689 l 1188 4675 l 1186 4661 l 1185 4648 l 1185 4635 l
+ 1185 4622 l 1186 4609 l 1188 4595 l 1190 4581 l 1194 4565 l
+ 1199 4548 l 1205 4530 l 1215 4511 l 1226 4492 l 1241 4473 l
+ 1260 4455 l 1284 4439 l 1312 4427 l 1340 4418 l 1370 4412 l
+ 1401 4409 l 1431 4408 l 1462 4410 l 1493 4412 l 1525 4416 l
+ 1555 4421 l 1585 4427 l 1613 4432 l 1639 4438 l 1661 4443 l
+ 1679 4447 l
+ 1710 4455 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 1570 4450 m 1694 4451 l 1585 4391 l 1570 4450 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+5362 6737 m 5377 6679 l 5230 6641 l 5339 6701 l 5215 6700 l cp
+eoclip
+n 5355 7065 m 5353 7066 l 5347 7067 l 5338 7069 l 5324 7073 l 5306 7077 l
+ 5284 7082 l 5258 7088 l 5230 7093 l 5200 7099 l 5170 7104 l
+ 5138 7108 l 5107 7110 l 5076 7112 l 5046 7111 l 5015 7108 l
+ 4985 7102 l 4957 7093 l 4929 7081 l 4905 7065 l 4886 7047 l
+ 4871 7028 l 4860 7009 l 4850 6990 l 4844 6972 l 4839 6955 l
+ 4835 6939 l 4833 6925 l 4831 6911 l 4830 6898 l 4830 6885 l
+ 4830 6872 l 4831 6859 l 4833 6845 l 4835 6831 l 4839 6815 l
+ 4844 6798 l 4850 6780 l 4860 6761 l 4871 6742 l 4886 6723 l
+ 4905 6705 l 4929 6689 l 4957 6677 l 4985 6668 l 5015 6662 l
+ 5046 6659 l 5076 6658 l 5107 6660 l 5138 6662 l 5170 6666 l
+ 5200 6671 l 5230 6677 l 5258 6682 l 5284 6688 l 5306 6693 l
+ 5324 6697 l
+ 5355 6705 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 5215 6700 m 5339 6701 l 5230 6641 l 5215 6700 l  cp gs 0.00 setgray ef gr  col0 s
+% here ends figure;
+$F2psEnd
+rs
+showpage
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/images/fsm-op.fig	Mon Sep 25 15:53:33 2006 +0000
@@ -0,0 +1,116 @@
+#FIG 3.2
+Portrait
+Center
+Metric
+A4      
+100.00
+Single
+-2
+1200 2
+0 32 #8e8e8e
+6 3375 855 5175 1665
+1 2 0 1 0 7 50 -1 -1 0.000 1 0.0000 4275 1260 855 360 3420 900 5130 1620
+4 1 0 50 -1 16 12 0.0000 4 120 1080 4275 1305 START\001
+-6
+6 3240 2011 5310 2745
+1 2 0 1 0 7 50 -1 -1 0.000 1 0.0000 4275 2378 855 360 3420 2018 5130 2738
+4 1 0 50 -1 16 12 0.0000 4 120 2070 4275 2423 BROADCAST\001
+-6
+6 3420 3105 5175 3870
+1 2 0 1 0 7 50 -1 -1 0.000 1 0.0000 4282 3503 855 360 3427 3143 5137 3863
+4 1 0 50 -1 16 12 0.0000 4 120 930 4282 3465 READ\001
+4 1 0 50 -1 16 12 0.0000 4 120 1290 4282 3690 STATES\001
+-6
+6 5220 4230 6975 4995
+1 2 0 1 0 7 50 -1 -1 0.000 1 0.0000 6097 4628 855 360 5242 4268 6952 4988
+4 1 0 50 -1 16 12 0.0000 4 120 1590 6097 4590 VALIDATE\001
+4 1 0 50 -1 16 12 0.0000 4 120 1425 6097 4815 VENDOR\001
+-6
+6 5220 5355 6975 6120
+1 2 0 1 0 7 50 -1 -1 0.000 1 0.0000 6112 5753 855 360 5257 5393 6967 6113
+4 1 0 50 -1 16 12 0.0000 4 120 1590 6112 5715 VALIDATE\001
+4 1 0 50 -1 16 12 0.0000 4 120 1635 6112 5925 PRODUCT\001
+-6
+6 5092 6511 7162 7245
+1 2 0 1 0 7 50 -1 -1 0.000 1 0.0000 6127 6878 855 360 5272 6518 6982 7238
+4 1 0 50 -1 16 12 0.0000 4 120 1500 6127 6840 REWRITE\001
+4 1 0 50 -1 16 12 0.0000 4 120 2070 6127 7050 ADDRESSES\001
+-6
+6 1485 4261 3450 4995
+1 2 0 1 0 7 50 -1 -1 0.000 1 0.0000 2467 4628 855 360 1612 4268 3322 4988
+4 1 0 50 -1 16 12 0.0000 4 120 1965 2467 4590 CONFIGURE\001
+4 1 0 50 -1 16 12 0.0000 4 120 1305 2467 4800 SLAVES\001
+-6
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 3510 675 101 101 3510 675 3600 720
+3 2 0 1 0 0 50 -1 20 0.000 0 1 0 2
+	1 1 1.00 60.00 120.00
+	 3555 765 3690 990
+	 0.000 0.000
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 2
+	1 1 1.00 60.00 120.00
+	 4275 1620 4275 2025
+	 0.000 0.000
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 2
+	1 1 1.00 60.00 120.00
+	 4275 2745 4275 3150
+	 0.000 0.000
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 3
+	1 1 1.00 60.00 120.00
+	 3825 3825 3600 4185 3240 4455
+	 0.000 -1.000 0.000
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 3
+	1 1 1.00 60.00 120.00
+	 4706 3825 4931 4185 5291 4455
+	 0.000 -1.000 0.000
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 3
+	1 1 1.00 60.00 120.00
+	 5715 4950 5580 5175 5670 5445
+	 0.000 -1.000 0.000
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 3
+	1 1 1.00 60.00 120.00
+	 6525 5445 6660 5220 6570 4950
+	 0.000 -1.000 0.000
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 2
+	1 1 1.00 60.00 120.00
+	 6120 6120 6120 6525
+	 0.000 0.000
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 3
+	1 1 1.00 60.00 120.00
+	 2475 4275 2745 2295 3465 1395
+	 0.000 -1.000 0.000
+3 2 1 1 0 7 50 -1 -1 4.000 0 1 0 3
+	1 1 1.00 60.00 120.00
+	 4815 2070 4950 1845 4770 1575
+	 0.000 -1.000 0.000
+3 2 1 1 0 7 50 -1 -1 4.000 0 1 0 3
+	1 1 1.00 60.00 120.00
+	 4950 3285 5400 2430 4905 1485
+	 0.000 -1.000 0.000
+3 2 1 1 0 7 50 -1 -1 4.000 0 1 0 3
+	1 1 1.00 60.00 120.00
+	 6120 4275 5850 2610 5040 1440
+	 0.000 -1.000 0.000
+3 2 0 1 0 7 50 -1 -1 4.000 0 1 0 4
+	1 1 1.00 60.00 120.00
+	 3510 3690 3060 3690 3060 3330 3510 3330
+	 0.000 -1.000 -1.000 0.000
+3 2 1 1 0 7 50 -1 -1 4.000 0 1 0 4
+	1 1 1.00 60.00 120.00
+	 4770 945 4770 630 4455 630 4410 900
+	 0.000 -1.000 -1.000 0.000
+3 2 1 1 0 7 50 -1 -1 4.000 0 1 0 3
+	1 1 1.00 60.00 120.00
+	 6840 5580 6930 3600 5130 1350
+	 0.000 -1.000 0.000
+3 2 0 1 0 7 50 -1 -1 4.000 0 1 0 3
+	1 1 1.00 60.00 120.00
+	 6885 6705 7245 3555 5085 1170
+	 0.000 -1.000 0.000
+3 2 0 1 0 7 50 -1 -1 4.000 0 1 0 4
+	1 1 1.00 60.00 120.00
+	 1710 4815 1260 4815 1260 4455 1710 4455
+	 0.000 -1.000 -1.000 0.000
+3 2 0 1 0 7 50 -1 -1 4.000 0 1 0 4
+	1 1 1.00 60.00 120.00
+	 5355 7065 4905 7065 4905 6705 5355 6705
+	 0.000 -1.000 -1.000 0.000
Binary file doc/images/fsm-op.pdf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/images/fsm-sii.eps	Mon Sep 25 15:53:33 2006 +0000
@@ -0,0 +1,376 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: fsm-sii.fig
+%%Creator: fig2dev Version 3.2 Patchlevel 4
+%%CreationDate: Wed Jul 19 12:40:51 2006
+%%For: fp@jupiter (Florian Pose)
+%%BoundingBox: 0 0 529 201
+%%Magnification: 1.0000
+%%EndComments
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+/col32 {0.555 0.555 0.555 srgb} bind def
+
+end
+save
+newpath 0 201 moveto 0 0 lineto 529 0 lineto 529 201 lineto closepath clip newpath
+-5.2 236.5 translate
+1 -1 scale
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+  bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+  4 -2 roll mul srgb} bind def
+ /DrawEllipse {
+	/endangle exch def
+	/startangle exch def
+	/yrad exch def
+	/xrad exch def
+	/y exch def
+	/x exch def
+	/savematrix mtrx currentmatrix def
+	x y tr xrad yrad sc 0 0 1 startangle endangle arc
+	closepath
+	savematrix setmatrix
+	} def
+
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+$F2psBegin
+10 setmiterlimit
+0 slj 0 slc
+ 0.06299 0.06299 sc
+%
+% Fig objects follow
+%
+% 
+% here starts figure with depth 50
+% Ellipse
+7.500 slw
+n 3375 1260 855 360 0 360 DrawEllipse gs col0 s gr
+
+/Helvetica ff 180.00 scf sf
+3375 1305 m
+gs 1 -1 sc (READ_CHECK) dup sw pop 2 div neg 0 rm  col0 sh gr
+% Ellipse
+n 5490 1260 855 360 0 360 DrawEllipse gs col0 s gr
+
+/Helvetica ff 180.00 scf sf
+5490 1305 m
+gs 1 -1 sc (READ_FETCH) dup sw pop 2 div neg 0 rm  col0 sh gr
+% Ellipse
+n 1260 1260 855 360 0 360 DrawEllipse gs col0 s gr
+
+/Helvetica ff 180.00 scf sf
+1260 1305 m
+gs 1 -1 sc (READ_START) dup sw pop 2 div neg 0 rm  col0 sh gr
+% Ellipse
+n 7605 2115 855 360 0 360 DrawEllipse gs col0 s gr
+
+% Ellipse
+n 7605 2116 748 315 0 360 DrawEllipse gs col0 s gr
+
+/Helvetica ff 180.00 scf sf
+7605 2160 m
+gs 1 -1 sc (END) dup sw pop 2 div neg 0 rm  col0 sh gr
+% Ellipse
+n 1260 3015 855 360 0 360 DrawEllipse gs col0 s gr
+
+/Helvetica ff 180.00 scf sf
+1260 3060 m
+gs 1 -1 sc (WRITE_START) dup sw pop 2 div neg 0 rm  col0 sh gr
+% Ellipse
+n 3375 3015 855 360 0 360 DrawEllipse gs col0 s gr
+
+/Helvetica ff 180.00 scf sf
+3375 3060 m
+gs 1 -1 sc (WRITE_CHECK) dup sw pop 2 div neg 0 rm  col0 sh gr
+% Ellipse
+n 5490 3015 855 360 0 360 DrawEllipse gs col0 s gr
+
+/Helvetica ff 180.00 scf sf
+5490 3060 m
+gs 1 -1 sc (WRITE_CHECK2) dup sw pop 2 div neg 0 rm  col0 sh gr
+% Ellipse
+n 4455 2115 855 360 0 360 DrawEllipse gs col0 s gr
+
+% Ellipse
+n 4455 2108 765 322 0 360 DrawEllipse gs col0 s gr
+
+/Helvetica ff 180.00 scf sf
+4455 2160 m
+gs 1 -1 sc (ERROR) dup sw pop 2 div neg 0 rm  col0 sh gr
+% Ellipse
+n 495 675 101 101 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Polyline
+2 slj
+gs  clippath
+656 1018 m 708 987 l 630 857 l 667 976 l 579 888 l cp
+eoclip
+n 540 765 m
+ 675 990 l gs 0.00 setgray ef gr gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 579 888 m 667 976 l 630 857 l 579 888 l  cp gs 0.00 setgray ef gr  col0 s
+% Ellipse
+n 495 2430 101 101 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Polyline
+2 slj
+gs  clippath
+656 2773 m 708 2742 l 630 2612 l 667 2731 l 579 2643 l cp
+eoclip
+n 540 2520 m
+ 675 2745 l gs 0.00 setgray ef gr gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 579 2643 m 667 2731 l 630 2612 l 579 2643 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+2535 1290 m 2535 1230 l 2384 1230 l 2504 1260 l 2384 1290 l cp
+eoclip
+n 2115 1260 m
+ 2520 1260 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 2384 1290 m 2504 1260 l 2384 1230 l 2384 1290 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+4650 1290 m 4650 1230 l 4499 1230 l 4619 1260 l 4499 1290 l cp
+eoclip
+n 4230 1260 m
+ 4635 1260 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 4499 1290 m 4619 1260 l 4499 1230 l 4499 1290 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+2535 3045 m 2535 2985 l 2384 2985 l 2504 3015 l 2384 3045 l cp
+eoclip
+n 2115 3015 m
+ 2520 3015 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 2384 3045 m 2504 3015 l 2384 2985 l 2384 3045 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+4650 3045 m 4650 2985 l 4499 2985 l 4619 3015 l 4499 3045 l cp
+eoclip
+n 4230 3015 m
+ 4635 3015 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 4499 3045 m 4619 3015 l 4499 2985 l 4499 3045 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+ [60] 0 sd
+gs  clippath
+3746 1966 m 3753 1906 l 3602 1890 l 3719 1933 l 3596 1950 l cp
+eoclip
+n 3375 1620 m 3375 1623 l 3375 1629 l 3376 1639 l 3377 1653 l 3378 1670 l
+ 3381 1689 l 3384 1709 l 3390 1730 l 3398 1752 l 3408 1775 l
+ 3423 1798 l 3441 1822 l 3465 1845 l 3489 1863 l 3513 1879 l
+ 3537 1892 l 3561 1902 l 3584 1910 l 3607 1916 l 3629 1921 l
+ 3651 1925 l 3671 1928 l 3690 1931 l 3706 1932 l
+ 3735 1935 l gs col0 s gr gr
+ [] 0 sd
+% arrowhead
+0 slj
+n 3596 1950 m 3719 1933 l 3602 1890 l 3596 1950 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+5201 1906 m 5208 1966 l 5358 1949 l 5236 1933 l 5351 1889 l cp
+eoclip
+n 5490 1620 m 5490 1623 l 5491 1629 l 5492 1639 l 5494 1653 l 5495 1670 l
+ 5496 1689 l 5495 1709 l 5494 1730 l 5490 1752 l 5484 1775 l
+ 5475 1798 l 5462 1822 l 5445 1845 l 5424 1866 l 5402 1883 l
+ 5380 1896 l 5358 1907 l 5336 1914 l 5314 1921 l 5293 1925 l
+ 5273 1929 l 5255 1931 l
+ 5220 1935 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 5351 1889 m 5236 1933 l 5358 1949 l 5351 1889 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+ [60] 0 sd
+gs  clippath
+3753 2323 m 3746 2263 l 3596 2279 l 3719 2297 l 3602 2339 l cp
+eoclip
+n 3375 2610 m 3375 2607 l 3375 2601 l 3376 2591 l 3377 2577 l 3378 2560 l
+ 3381 2541 l 3384 2521 l 3390 2500 l 3398 2478 l 3408 2455 l
+ 3423 2432 l 3441 2408 l 3465 2385 l 3489 2367 l 3513 2351 l
+ 3537 2338 l 3561 2328 l 3584 2320 l 3607 2314 l 3629 2309 l
+ 3651 2305 l 3671 2302 l 3690 2299 l 3706 2298 l
+ 3735 2295 l gs col0 s gr gr
+ [] 0 sd
+% arrowhead
+0 slj
+n 3602 2339 m 3719 2297 l 3596 2279 l 3602 2339 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+5208 2263 m 5201 2323 l 5351 2340 l 5236 2297 l 5358 2280 l cp
+eoclip
+n 5490 2610 m 5490 2607 l 5491 2601 l 5492 2591 l 5494 2577 l 5495 2560 l
+ 5496 2541 l 5495 2521 l 5494 2500 l 5490 2478 l 5484 2455 l
+ 5475 2432 l 5462 2408 l 5445 2385 l 5424 2364 l 5402 2347 l
+ 5380 2334 l 5358 2323 l 5336 2316 l 5314 2309 l 5293 2305 l
+ 5273 2301 l 5255 2299 l
+ 5220 2295 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 5358 2280 m 5236 2297 l 5351 2340 l 5358 2280 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+7003 1874 m 7053 1840 l 6969 1715 l 7011 1832 l 6919 1748 l cp
+eoclip
+n 6255 1440 m 6257 1440 l 6260 1441 l 6267 1443 l 6277 1446 l 6290 1449 l
+ 6307 1454 l 6327 1459 l 6349 1466 l 6374 1473 l 6400 1481 l
+ 6427 1489 l 6456 1498 l 6485 1508 l 6515 1518 l 6545 1529 l
+ 6577 1541 l 6610 1555 l 6644 1569 l 6679 1585 l 6715 1602 l
+ 6750 1620 l 6791 1643 l 6827 1664 l 6858 1685 l 6885 1704 l
+ 6908 1722 l 6928 1739 l 6945 1755 l 6960 1770 l 6974 1785 l
+ 6985 1798 l 6995 1810 l 7003 1821 l 7010 1830 l
+ 7020 1845 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 6919 1748 m 7011 1832 l 6969 1715 l 6919 1748 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+7053 2381 m 6997 2360 l 6942 2500 l 7014 2400 l 6998 2522 l cp
+eoclip
+n 6210 2835 m 6212 2835 l 6216 2835 l 6223 2834 l 6234 2833 l 6249 2832 l
+ 6267 2830 l 6289 2828 l 6314 2825 l 6341 2822 l 6370 2818 l
+ 6401 2814 l 6432 2808 l 6464 2802 l 6496 2795 l 6530 2787 l
+ 6564 2777 l 6600 2766 l 6637 2753 l 6674 2737 l 6712 2720 l
+ 6750 2700 l 6789 2677 l 6824 2653 l 6854 2630 l 6881 2607 l
+ 6903 2584 l 6922 2563 l 6939 2541 l 6954 2521 l 6967 2500 l
+ 6978 2481 l 6988 2462 l 6996 2444 l 7003 2428 l 7009 2415 l
+ 7013 2403 l
+ 7020 2385 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 6998 2522 m 7014 2400 l 6942 2500 l 6998 2522 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+5375 923 m 5433 905 l 5387 761 l 5395 885 l 5330 779 l cp
+eoclip
+n 5670 900 m 5671 897 l 5673 892 l 5676 882 l 5680 868 l 5685 850 l
+ 5690 829 l 5695 807 l 5700 784 l 5703 761 l 5705 737 l
+ 5704 714 l 5701 692 l 5695 670 l 5685 649 l 5670 630 l
+ 5654 617 l 5636 606 l 5618 599 l 5602 594 l 5586 590 l
+ 5572 588 l 5559 586 l 5547 585 l 5535 585 l 5523 585 l
+ 5511 586 l 5498 588 l 5484 590 l 5468 594 l 5452 599 l
+ 5434 606 l 5416 617 l 5400 630 l 5385 649 l 5375 670 l
+ 5369 692 l 5366 714 l 5365 737 l 5367 761 l 5370 784 l
+ 5375 807 l 5380 829 l 5385 850 l 5390 868 l
+ 5400 900 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 5330 779 m 5395 885 l 5387 761 l 5330 779 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+5343 3370 m 5286 3350 l 5236 3492 l 5305 3390 l 5292 3513 l cp
+eoclip
+n 5670 3375 m 5671 3377 l 5673 3382 l 5676 3391 l 5680 3403 l 5685 3419 l
+ 5691 3439 l 5698 3460 l 5704 3483 l 5709 3507 l 5713 3531 l
+ 5716 3556 l 5716 3580 l 5715 3603 l 5709 3627 l 5701 3649 l
+ 5688 3671 l 5670 3690 l 5651 3704 l 5629 3715 l 5608 3724 l
+ 5587 3730 l 5568 3735 l 5550 3738 l 5534 3740 l 5519 3742 l
+ 5504 3742 l 5490 3742 l 5476 3742 l 5461 3742 l 5446 3740 l
+ 5430 3738 l 5412 3735 l 5393 3730 l 5372 3724 l 5351 3715 l
+ 5329 3704 l 5310 3690 l 5292 3671 l 5279 3649 l 5271 3627 l
+ 5265 3603 l 5264 3580 l 5264 3556 l 5267 3531 l 5271 3507 l
+ 5276 3483 l 5282 3460 l 5289 3439 l 5295 3419 l 5300 3403 l
+
+ 5310 3375 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 5292 3513 m 5305 3390 l 5236 3492 l 5292 3513 l  cp gs 0.00 setgray ef gr  col0 s
+% here ends figure;
+$F2psEnd
+rs
+showpage
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/images/fsm-sii.fig	Mon Sep 25 15:53:33 2006 +0000
@@ -0,0 +1,106 @@
+#FIG 3.2
+Portrait
+Center
+Metric
+A4      
+100.00
+Single
+-2
+1200 2
+0 32 #8e8e8e
+6 2235 893 4515 1627
+1 2 0 1 0 7 50 -1 -1 0.000 1 0.0000 3375 1260 855 360 2520 900 4230 1620
+4 1 0 50 -1 16 12 0.0000 4 150 2280 3375 1305 READ_CHECK\001
+-6
+6 4388 893 6593 1627
+1 2 0 1 0 7 50 -1 -1 0.000 1 0.0000 5490 1260 855 360 4635 900 6345 1620
+4 1 0 50 -1 16 12 0.0000 4 150 2205 5490 1305 READ_FETCH\001
+-6
+6 165 893 2355 1627
+1 2 0 1 0 7 50 -1 -1 0.000 1 0.0000 1260 1260 855 360 405 900 2115 1620
+4 1 0 50 -1 16 12 0.0000 4 150 2190 1260 1305 READ_START\001
+-6
+6 6705 1710 8505 2520
+1 2 0 1 0 7 50 -1 -1 0.000 1 0.0000 7605 2115 855 360 6750 1755 8460 2475
+1 2 0 1 0 7 50 -1 -1 0.000 1 0.0000 7605 2116 748 315 6857 1801 8353 2431
+4 1 0 50 -1 16 12 0.0000 4 120 705 7605 2160 END\001
+-6
+6 113 2648 2408 3382
+1 2 0 1 0 7 50 -1 -1 0.000 1 0.0000 1260 3015 855 360 405 2655 2115 3375
+4 1 0 50 -1 16 12 0.0000 4 150 2295 1260 3060 WRITE_START\001
+-6
+6 2183 2648 4568 3382
+1 2 0 1 0 7 50 -1 -1 0.000 1 0.0000 3375 3015 855 360 2520 2655 4230 3375
+4 1 0 50 -1 16 12 0.0000 4 150 2385 3375 3060 WRITE_CHECK\001
+-6
+6 4208 2648 6773 3382
+1 2 0 1 0 7 50 -1 -1 0.000 1 0.0000 5490 3015 855 360 4635 2655 6345 3375
+4 1 0 50 -1 16 12 0.0000 4 150 2565 5490 3060 WRITE_CHECK2\001
+-6
+6 3555 1710 5355 2520
+1 2 0 1 0 7 50 -1 -1 0.000 1 0.0000 4455 2115 855 360 3600 1755 5310 2475
+1 2 0 1 0 7 50 -1 -1 0.000 1 0.0000 4455 2108 765 322 3690 1786 5220 2430
+4 1 0 50 -1 16 12 0.0000 4 120 1200 4455 2160 ERROR\001
+-6
+6 360 540 675 990
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 495 675 101 101 495 675 585 720
+3 2 0 1 0 0 50 -1 20 0.000 0 1 0 2
+	1 1 1.00 60.00 120.00
+	 540 765 675 990
+	 0.000 0.000
+-6
+6 360 2295 675 2745
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 495 2430 101 101 495 2430 585 2475
+3 2 0 1 0 0 50 -1 20 0.000 0 1 0 2
+	1 1 1.00 60.00 120.00
+	 540 2520 675 2745
+	 0.000 0.000
+-6
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 2
+	1 1 1.00 60.00 120.00
+	 2115 1260 2520 1260
+	 0.000 0.000
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 2
+	1 1 1.00 60.00 120.00
+	 4230 1260 4635 1260
+	 0.000 0.000
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 2
+	1 1 1.00 60.00 120.00
+	 2115 3015 2520 3015
+	 0.000 0.000
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 2
+	1 1 1.00 60.00 120.00
+	 4230 3015 4635 3015
+	 0.000 0.000
+3 2 1 1 0 7 50 -1 -1 4.000 0 1 0 3
+	1 1 1.00 60.00 120.00
+	 3375 1620 3465 1845 3735 1935
+	 0.000 -1.000 0.000
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 3
+	1 1 1.00 60.00 120.00
+	 5490 1620 5445 1845 5220 1935
+	 0.000 -1.000 0.000
+3 2 1 1 0 7 50 -1 -1 4.000 0 1 0 3
+	1 1 1.00 60.00 120.00
+	 3375 2610 3465 2385 3735 2295
+	 0.000 -1.000 0.000
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 3
+	1 1 1.00 60.00 120.00
+	 5490 2610 5445 2385 5220 2295
+	 0.000 -1.000 0.000
+3 2 0 1 0 7 50 -1 -1 4.000 0 1 0 3
+	1 1 1.00 60.00 120.00
+	 6255 1440 6750 1620 7020 1845
+	 0.000 -1.000 0.000
+3 2 0 1 0 7 50 -1 -1 4.000 0 1 0 3
+	1 1 1.00 60.00 120.00
+	 6210 2835 6750 2700 7020 2385
+	 0.000 -1.000 0.000
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 4
+	1 1 1.00 60.00 120.00
+	 5670 900 5670 630 5400 630 5400 900
+	 0.000 -1.000 -1.000 0.000
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 4
+	1 1 1.00 60.00 120.00
+	 5670 3375 5670 3690 5310 3690 5310 3375
+	 0.000 -1.000 -1.000 0.000
Binary file doc/images/fsm-sii.pdf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/images/fsm-slaveconf.eps	Mon Sep 25 15:53:33 2006 +0000
@@ -0,0 +1,567 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: fsm-slaveconf.fig
+%%Creator: fig2dev Version 3.2 Patchlevel 4
+%%CreationDate: Sat Aug  5 09:10:48 2006
+%%For: fp@jupiter (Florian Pose)
+%%BoundingBox: 0 0 316 492
+%%Magnification: 1.0000
+%%EndComments
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+/col32 {0.555 0.555 0.555 srgb} bind def
+
+end
+save
+newpath 0 492 moveto 0 0 lineto 316 0 lineto 316 492 lineto closepath clip newpath
+-177.8 527.2 translate
+1 -1 scale
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+  bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+  4 -2 roll mul srgb} bind def
+ /DrawEllipse {
+	/endangle exch def
+	/startangle exch def
+	/yrad exch def
+	/xrad exch def
+	/y exch def
+	/x exch def
+	/savematrix mtrx currentmatrix def
+	x y tr xrad yrad sc 0 0 1 startangle endangle arc
+	closepath
+	savematrix setmatrix
+	} def
+
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+$F2psBegin
+10 setmiterlimit
+0 slj 0 slc
+ 0.06299 0.06299 sc
+%
+% Fig objects follow
+%
+% 
+% here starts figure with depth 50
+% Ellipse
+7.500 slw
+n 4275 1260 855 360 0 360 DrawEllipse gs col0 s gr
+
+/Helvetica ff 180.00 scf sf
+4275 1305 m
+gs 1 -1 sc (INIT) dup sw pop 2 div neg 0 rm  col0 sh gr
+% Ellipse
+n 4275 2378 855 360 0 360 DrawEllipse gs col0 s gr
+
+/Helvetica ff 180.00 scf sf
+4275 2423 m
+gs 1 -1 sc (SYNC) dup sw pop 2 div neg 0 rm  col0 sh gr
+% Ellipse
+n 4275 3503 855 360 0 360 DrawEllipse gs col0 s gr
+
+/Helvetica ff 180.00 scf sf
+4275 3548 m
+gs 1 -1 sc (PREOP) dup sw pop 2 div neg 0 rm  col0 sh gr
+% Ellipse
+n 4275 4628 855 360 0 360 DrawEllipse gs col0 s gr
+
+/Helvetica ff 180.00 scf sf
+4275 4673 m
+gs 1 -1 sc (FMMU) dup sw pop 2 div neg 0 rm  col0 sh gr
+% Ellipse
+n 4275 5753 855 360 0 360 DrawEllipse gs col0 s gr
+
+/Helvetica ff 180.00 scf sf
+4275 5798 m
+gs 1 -1 sc (SDO_CONF) dup sw pop 2 div neg 0 rm  col0 sh gr
+% Ellipse
+n 4275 6878 855 360 0 360 DrawEllipse gs col0 s gr
+
+/Helvetica ff 180.00 scf sf
+4275 6923 m
+gs 1 -1 sc (SAVEOP) dup sw pop 2 div neg 0 rm  col0 sh gr
+% Ellipse
+n 4275 8003 855 360 0 360 DrawEllipse gs col0 s gr
+
+/Helvetica ff 180.00 scf sf
+4275 8048 m
+gs 1 -1 sc (OP) dup sw pop 2 div neg 0 rm  col0 sh gr
+% Ellipse
+n 6968 4628 855 360 0 360 DrawEllipse gs col0 s gr
+
+% Ellipse
+n 6968 4635 748 315 0 360 DrawEllipse gs col0 s gr
+
+/Helvetica ff 180.00 scf sf
+6968 4673 m
+gs 1 -1 sc (END) dup sw pop 2 div neg 0 rm  col0 sh gr
+% Ellipse
+n 3510 675 101 101 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Polyline
+2 slj
+gs  clippath
+3671 1018 m 3723 987 l 3645 857 l 3682 976 l 3594 888 l cp
+eoclip
+n 3555 765 m
+ 3690 990 l gs 0.00 setgray ef gr gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 3594 888 m 3682 976 l 3645 857 l 3594 888 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+4245 2040 m 4305 2040 l 4305 1889 l 4275 2009 l 4245 1889 l cp
+eoclip
+n 4275 1620 m
+ 4275 2025 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 4245 1889 m 4275 2009 l 4305 1889 l 4245 1889 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+4245 3165 m 4305 3165 l 4305 3014 l 4275 3134 l 4245 3014 l cp
+eoclip
+n 4275 2745 m
+ 4275 3150 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 4245 3014 m 4275 3134 l 4305 3014 l 4245 3014 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+4245 4290 m 4305 4290 l 4305 4139 l 4275 4259 l 4245 4139 l cp
+eoclip
+n 4275 3870 m
+ 4275 4275 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 4245 4139 m 4275 4259 l 4305 4139 l 4245 4139 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+ [60] 0 sd
+gs  clippath
+6684 4301 m 6738 4275 l 6671 4140 l 6698 4261 l 6617 4167 l cp
+eoclip
+n 5085 2520 m 5086 2520 l 5088 2521 l 5092 2522 l 5099 2523 l 5108 2526 l
+ 5120 2529 l 5134 2533 l 5152 2538 l 5173 2544 l 5195 2551 l
+ 5221 2560 l 5248 2569 l 5277 2580 l 5307 2592 l 5339 2605 l
+ 5372 2620 l 5406 2636 l 5441 2655 l 5478 2675 l 5516 2698 l
+ 5555 2723 l 5596 2751 l 5639 2783 l 5684 2818 l 5732 2858 l
+ 5781 2902 l 5833 2950 l 5886 3003 l 5940 3060 l 5985 3110 l
+ 6029 3160 l 6071 3212 l 6112 3263 l 6150 3313 l 6187 3363 l
+ 6223 3412 l 6256 3461 l 6288 3508 l 6318 3555 l 6347 3601 l
+ 6375 3647 l 6402 3692 l 6428 3736 l 6453 3780 l 6477 3824 l
+ 6500 3866 l 6522 3908 l 6544 3949 l 6564 3988 l 6583 4026 l
+ 6602 4062 l 6618 4096 l 6634 4127 l 6648 4156 l 6660 4182 l
+ 6671 4204 l 6680 4223 l 6688 4239 l 6694 4251 l 6698 4261 l
+
+ 6705 4275 l gs col0 s gr gr
+ [] 0 sd
+% arrowhead
+0 slj
+n 6617 4167 m 6698 4261 l 6671 4140 l 6617 4167 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+ [60] 0 sd
+gs  clippath
+6135 4665 m 6135 4605 l 5984 4605 l 6104 4635 l 5984 4665 l cp
+eoclip
+n 5130 4635 m 5132 4635 l 5135 4635 l 5141 4635 l 5151 4635 l 5164 4635 l
+ 5180 4635 l 5200 4635 l 5222 4635 l 5247 4635 l 5273 4635 l
+ 5301 4635 l 5331 4635 l 5361 4635 l 5393 4635 l 5427 4635 l
+ 5462 4635 l 5499 4635 l 5539 4635 l 5581 4635 l 5625 4635 l
+ 5670 4635 l 5719 4635 l 5764 4635 l 5806 4635 l 5845 4635 l
+ 5879 4635 l 5911 4635 l 5940 4635 l 5967 4635 l 5992 4635 l
+ 6016 4635 l 6038 4635 l 6057 4635 l 6075 4635 l 6089 4635 l
+ 6101 4635 l
+ 6120 4635 l gs col0 s gr gr
+ [] 0 sd
+% arrowhead
+0 slj
+n 5984 4665 m 6104 4635 l 5984 4605 l 5984 4665 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+6947 4294 m 7007 4284 l 6981 4135 l 6972 4259 l 6922 4145 l cp
+eoclip
+n 5130 1304 m 5131 1304 l 5132 1305 l 5136 1307 l 5141 1310 l 5148 1315 l
+ 5158 1321 l 5170 1329 l 5185 1338 l 5203 1349 l 5224 1362 l
+ 5247 1377 l 5273 1394 l 5301 1413 l 5332 1433 l 5364 1455 l
+ 5398 1478 l 5434 1503 l 5470 1530 l 5508 1557 l 5547 1587 l
+ 5587 1617 l 5627 1649 l 5667 1682 l 5709 1717 l 5750 1753 l
+ 5792 1791 l 5835 1831 l 5878 1873 l 5922 1917 l 5966 1963 l
+ 6012 2013 l 6057 2065 l 6104 2121 l 6151 2179 l 6199 2241 l
+ 6247 2307 l 6295 2375 l 6343 2447 l 6390 2520 l 6433 2591 l
+ 6474 2663 l 6513 2734 l 6550 2804 l 6584 2873 l 6616 2940 l
+ 6646 3006 l 6673 3070 l 6699 3132 l 6722 3193 l 6744 3252 l
+ 6764 3311 l 6783 3367 l 6800 3423 l 6816 3478 l 6831 3532 l
+ 6845 3584 l 6858 3636 l 6870 3687 l 6882 3737 l 6892 3786 l
+ 6902 3833 l 6911 3879 l 6919 3924 l 6927 3966 l 6934 4007 l
+ 6941 4045 l 6946 4080 l 6952 4113 l 6956 4143 l 6960 4170 l
+ 6964 4193 l 6967 4213 l 6969 4230 l 6971 4244 l 6972 4255 l
+ 6973 4263 l
+ 6975 4275 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 6922 4145 m 6972 4259 l 6981 4135 l 6922 4145 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+7007 4988 m 6950 4972 l 6910 5118 l 6971 5011 l 6968 5134 l cp
+eoclip
+n 5130 8010 m 5131 8010 l 5132 8009 l 5135 8007 l 5139 8004 l 5145 8000 l
+ 5153 7995 l 5163 7988 l 5176 7980 l 5191 7970 l 5208 7958 l
+ 5228 7945 l 5250 7930 l 5273 7913 l 5299 7895 l 5326 7875 l
+ 5355 7853 l 5386 7830 l 5417 7806 l 5449 7781 l 5482 7754 l
+ 5516 7726 l 5551 7696 l 5586 7665 l 5622 7632 l 5659 7598 l
+ 5696 7562 l 5734 7524 l 5773 7483 l 5812 7440 l 5852 7395 l
+ 5894 7347 l 5936 7295 l 5979 7240 l 6024 7182 l 6069 7120 l
+ 6115 7055 l 6162 6986 l 6208 6914 l 6255 6840 l 6296 6771 l
+ 6337 6701 l 6375 6632 l 6412 6563 l 6448 6495 l 6481 6428 l
+ 6513 6363 l 6543 6299 l 6571 6236 l 6598 6175 l 6623 6115 l
+ 6647 6056 l 6670 5998 l 6692 5942 l 6712 5886 l 6732 5831 l
+ 6751 5777 l 6769 5724 l 6786 5671 l 6802 5620 l 6818 5569 l
+ 6833 5520 l 6847 5471 l 6861 5424 l 6874 5379 l 6886 5335 l
+ 6898 5293 l 6909 5253 l 6919 5216 l 6928 5182 l 6936 5150 l
+ 6944 5121 l 6950 5095 l 6956 5073 l 6961 5053 l 6965 5037 l
+ 6968 5024 l 6970 5014 l 6972 5006 l
+ 6975 4995 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 6968 5134 m 6971 5011 l 6910 5118 l 6968 5134 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+6376 4350 m 6422 4311 l 6323 4197 l 6379 4308 l 6278 4236 l cp
+eoclip
+n 5085 3600 m 5086 3600 l 5089 3601 l 5095 3601 l 5103 3602 l 5114 3604 l
+ 5129 3606 l 5147 3608 l 5169 3612 l 5193 3616 l 5219 3620 l
+ 5247 3625 l 5278 3631 l 5309 3638 l 5342 3645 l 5376 3653 l
+ 5411 3663 l 5448 3673 l 5486 3685 l 5526 3699 l 5567 3714 l
+ 5611 3732 l 5657 3751 l 5705 3774 l 5755 3798 l 5805 3825 l
+ 5855 3853 l 5902 3882 l 5947 3911 l 5988 3940 l 6027 3968 l
+ 6062 3995 l 6096 4021 l 6127 4048 l 6156 4073 l 6183 4098 l
+ 6209 4123 l 6233 4147 l 6256 4171 l 6278 4194 l 6298 4215 l
+ 6317 4236 l 6333 4254 l 6348 4271 l 6360 4285 l 6370 4297 l
+ 6378 4306 l
+ 6390 4320 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 6278 4236 m 6379 4308 l 6323 4197 l 6278 4236 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+6738 4993 m 6683 4969 l 6624 5108 l 6699 5010 l 6679 5132 l cp
+eoclip
+n 5085 6750 m 5086 6750 l 5088 6749 l 5092 6749 l 5098 6747 l 5106 6745 l
+ 5117 6743 l 5131 6739 l 5147 6735 l 5167 6730 l 5188 6724 l
+ 5212 6717 l 5238 6709 l 5266 6700 l 5296 6690 l 5327 6678 l
+ 5359 6666 l 5392 6652 l 5426 6637 l 5461 6620 l 5497 6602 l
+ 5534 6581 l 5573 6559 l 5612 6533 l 5653 6505 l 5696 6474 l
+ 5740 6440 l 5787 6402 l 5834 6359 l 5884 6313 l 5934 6263 l
+ 5985 6210 l 6030 6160 l 6073 6110 l 6115 6058 l 6155 6007 l
+ 6192 5957 l 6228 5907 l 6262 5858 l 6294 5809 l 6324 5762 l
+ 6353 5715 l 6381 5669 l 6407 5623 l 6432 5578 l 6456 5534 l
+ 6478 5490 l 6500 5446 l 6522 5404 l 6542 5362 l 6561 5321 l
+ 6580 5282 l 6597 5244 l 6613 5208 l 6628 5174 l 6642 5143 l
+ 6655 5114 l 6666 5088 l 6675 5066 l 6683 5047 l 6690 5031 l
+ 6695 5019 l 6699 5009 l
+ 6705 4995 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 6679 5132 m 6699 5010 l 6624 5108 l 6679 5132 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+3496 3360 m 3542 3322 l 3446 3206 l 3500 3318 l 3400 3245 l cp
+eoclip
+n 3510 1440 m 3509 1441 l 3508 1443 l 3505 1446 l 3500 1452 l 3493 1460 l
+ 3485 1471 l 3474 1484 l 3461 1500 l 3447 1519 l 3430 1540 l
+ 3413 1563 l 3394 1589 l 3374 1616 l 3354 1646 l 3333 1676 l
+ 3312 1708 l 3291 1742 l 3271 1776 l 3251 1812 l 3232 1849 l
+ 3214 1888 l 3196 1928 l 3180 1970 l 3165 2013 l 3150 2060 l
+ 3138 2108 l 3127 2159 l 3118 2213 l 3111 2268 l 3107 2326 l
+ 3105 2385 l 3107 2444 l 3111 2502 l 3118 2557 l 3127 2611 l
+ 3138 2662 l 3150 2710 l 3165 2757 l 3180 2800 l 3196 2842 l
+ 3214 2882 l 3232 2921 l 3251 2958 l 3271 2994 l 3291 3028 l
+ 3312 3062 l 3333 3094 l 3354 3124 l 3374 3154 l 3394 3181 l
+ 3413 3207 l 3430 3230 l 3447 3251 l 3461 3270 l 3474 3286 l
+ 3485 3299 l 3493 3310 l 3500 3318 l
+ 3510 3330 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 3400 3245 m 3500 3318 l 3446 3206 l 3400 3245 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+3496 5610 m 3542 5572 l 3446 5456 l 3500 5568 l 3400 5495 l cp
+eoclip
+n 3510 3690 m 3509 3691 l 3508 3693 l 3505 3696 l 3500 3702 l 3493 3710 l
+ 3485 3721 l 3474 3734 l 3461 3750 l 3447 3769 l 3430 3790 l
+ 3413 3813 l 3394 3839 l 3374 3866 l 3354 3896 l 3333 3926 l
+ 3312 3958 l 3291 3992 l 3271 4026 l 3251 4062 l 3232 4099 l
+ 3214 4138 l 3196 4178 l 3180 4220 l 3165 4263 l 3150 4310 l
+ 3138 4358 l 3127 4409 l 3118 4463 l 3111 4518 l 3107 4576 l
+ 3105 4635 l 3107 4694 l 3111 4752 l 3118 4807 l 3127 4861 l
+ 3138 4912 l 3150 4960 l 3165 5007 l 3180 5050 l 3196 5092 l
+ 3214 5132 l 3232 5171 l 3251 5208 l 3271 5244 l 3291 5278 l
+ 3312 5312 l 3333 5344 l 3354 5374 l 3374 5404 l 3394 5431 l
+ 3413 5457 l 3430 5480 l 3447 5501 l 3461 5520 l 3474 5536 l
+ 3485 5549 l 3493 5560 l 3500 5568 l
+ 3510 5580 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 3400 5495 m 3500 5568 l 3446 5456 l 3400 5495 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+4692 953 m 4751 966 l 4784 818 l 4729 929 l 4725 805 l cp
+eoclip
+n 4950 1035 m 4952 1033 l 4956 1027 l 4964 1019 l 4974 1006 l 4987 990 l
+ 5002 971 l 5018 951 l 5033 929 l 5047 907 l 5060 884 l
+ 5072 861 l 5080 837 l 5086 813 l 5088 789 l 5085 765 l
+ 5078 746 l 5068 730 l 5057 717 l 5046 706 l 5035 697 l
+ 5024 690 l 5014 684 l 5005 679 l 4995 675 l 4985 671 l
+ 4975 668 l 4963 665 l 4950 663 l 4935 661 l 4919 661 l
+ 4900 663 l 4880 667 l 4860 675 l 4838 689 l 4819 706 l
+ 4803 726 l 4789 748 l 4777 771 l 4767 795 l 4758 819 l
+ 4750 844 l 4743 868 l 4738 890 l 4733 909 l
+ 4725 945 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 4725 805 m 4729 929 l 4784 818 l 4725 805 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+4692 3203 m 4751 3216 l 4784 3068 l 4729 3179 l 4725 3055 l cp
+eoclip
+n 4950 3285 m 4952 3283 l 4956 3277 l 4964 3269 l 4974 3256 l 4987 3240 l
+ 5002 3221 l 5018 3201 l 5033 3179 l 5047 3157 l 5060 3134 l
+ 5072 3111 l 5080 3087 l 5086 3063 l 5088 3039 l 5085 3015 l
+ 5078 2996 l 5068 2980 l 5057 2967 l 5046 2956 l 5035 2947 l
+ 5024 2940 l 5014 2934 l 5005 2929 l 4995 2925 l 4985 2921 l
+ 4975 2918 l 4963 2915 l 4950 2913 l 4935 2911 l 4919 2911 l
+ 4900 2913 l 4880 2917 l 4860 2925 l 4838 2939 l 4819 2956 l
+ 4803 2976 l 4789 2998 l 4777 3021 l 4767 3045 l 4758 3069 l
+ 4750 3094 l 4743 3118 l 4738 3140 l 4733 3159 l
+ 4725 3195 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 4725 3055 m 4729 3179 l 4784 3068 l 4725 3055 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+4245 5415 m 4305 5415 l 4305 5264 l 4275 5384 l 4245 5264 l cp
+eoclip
+n 4275 4995 m
+ 4275 5400 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 4245 5264 m 4275 5384 l 4305 5264 l 4245 5264 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+4245 6540 m 4305 6540 l 4305 6389 l 4275 6509 l 4245 6389 l cp
+eoclip
+n 4275 6120 m
+ 4275 6525 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 4245 6389 m 4275 6509 l 4305 6389 l 4245 6389 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+4245 7665 m 4305 7665 l 4305 7514 l 4275 7634 l 4245 7514 l cp
+eoclip
+n 4275 7245 m
+ 4275 7650 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 4245 7514 m 4275 7634 l 4305 7514 l 4245 7514 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+4692 6578 m 4751 6591 l 4784 6443 l 4729 6554 l 4725 6430 l cp
+eoclip
+n 4950 6660 m 4952 6658 l 4956 6652 l 4964 6644 l 4974 6631 l 4987 6615 l
+ 5002 6596 l 5018 6576 l 5033 6554 l 5047 6532 l 5060 6509 l
+ 5072 6486 l 5080 6462 l 5086 6438 l 5088 6414 l 5085 6390 l
+ 5078 6371 l 5068 6355 l 5057 6342 l 5046 6331 l 5035 6322 l
+ 5024 6315 l 5014 6309 l 5005 6304 l 4995 6300 l 4985 6296 l
+ 4975 6293 l 4963 6290 l 4950 6288 l 4935 6286 l 4919 6286 l
+ 4900 6288 l 4880 6292 l 4860 6300 l 4838 6314 l 4819 6331 l
+ 4803 6351 l 4789 6373 l 4777 6396 l 4767 6420 l 4758 6444 l
+ 4750 6469 l 4743 6493 l 4738 6515 l 4733 6534 l
+ 4725 6570 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 4725 6430 m 4729 6554 l 4784 6443 l 4725 6430 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+4692 7703 m 4751 7716 l 4784 7568 l 4729 7679 l 4725 7555 l cp
+eoclip
+n 4950 7785 m 4952 7783 l 4956 7777 l 4964 7769 l 4974 7756 l 4987 7740 l
+ 5002 7721 l 5018 7701 l 5033 7679 l 5047 7657 l 5060 7634 l
+ 5072 7611 l 5080 7587 l 5086 7563 l 5088 7539 l 5085 7515 l
+ 5078 7496 l 5068 7480 l 5057 7467 l 5046 7456 l 5035 7447 l
+ 5024 7440 l 5014 7434 l 5005 7429 l 4995 7425 l 4985 7421 l
+ 4975 7418 l 4963 7415 l 4950 7413 l 4935 7411 l 4919 7411 l
+ 4900 7413 l 4880 7417 l 4860 7425 l 4838 7439 l 4819 7456 l
+ 4803 7476 l 4789 7498 l 4777 7521 l 4767 7545 l 4758 7569 l
+ 4750 7594 l 4743 7618 l 4738 7640 l 4733 7659 l
+ 4725 7695 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 4725 7555 m 4729 7679 l 4784 7568 l 4725 7555 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+3449 6779 m 3498 6744 l 3408 6622 l 3455 6737 l 3360 6657 l cp
+eoclip
+n 3465 3645 m 3464 3646 l 3463 3647 l 3461 3650 l 3457 3655 l 3451 3662 l
+ 3443 3671 l 3434 3683 l 3422 3698 l 3409 3715 l 3393 3735 l
+ 3376 3758 l 3357 3784 l 3336 3812 l 3313 3842 l 3290 3875 l
+ 3266 3909 l 3241 3946 l 3215 3984 l 3189 4023 l 3164 4064 l
+ 3138 4107 l 3112 4150 l 3087 4195 l 3063 4242 l 3039 4289 l
+ 3016 4339 l 2993 4389 l 2972 4442 l 2951 4497 l 2932 4553 l
+ 2914 4612 l 2898 4674 l 2882 4738 l 2869 4805 l 2857 4875 l
+ 2848 4947 l 2841 5021 l 2837 5098 l 2835 5175 l 2837 5252 l
+ 2841 5329 l 2848 5404 l 2857 5477 l 2869 5547 l 2882 5615 l
+ 2898 5680 l 2914 5743 l 2932 5804 l 2951 5862 l 2972 5918 l
+ 2993 5972 l 3016 6024 l 3039 6075 l 3063 6125 l 3087 6173 l
+ 3112 6219 l 3138 6265 l 3164 6309 l 3189 6352 l 3215 6393 l
+ 3241 6433 l 3266 6472 l 3290 6508 l 3313 6542 l 3336 6574 l
+ 3357 6603 l 3376 6630 l 3393 6654 l 3409 6676 l 3422 6694 l
+ 3434 6709 l 3443 6722 l 3451 6732 l 3457 6739 l
+ 3465 6750 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 3360 6657 m 3455 6737 l 3408 6622 l 3360 6657 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+4692 5453 m 4751 5466 l 4784 5318 l 4729 5429 l 4725 5305 l cp
+eoclip
+n 4950 5535 m 4952 5533 l 4956 5527 l 4964 5519 l 4974 5506 l 4987 5490 l
+ 5002 5471 l 5018 5451 l 5033 5429 l 5047 5407 l 5060 5384 l
+ 5072 5361 l 5080 5337 l 5086 5313 l 5088 5289 l 5085 5265 l
+ 5078 5246 l 5068 5230 l 5057 5217 l 5046 5206 l 5035 5197 l
+ 5024 5190 l 5014 5184 l 5005 5179 l 4995 5175 l 4985 5171 l
+ 4975 5168 l 4963 5165 l 4950 5163 l 4935 5161 l 4919 5161 l
+ 4900 5163 l 4880 5167 l 4860 5175 l 4838 5189 l 4819 5206 l
+ 4803 5226 l 4789 5248 l 4777 5271 l 4767 5295 l 4758 5319 l
+ 4750 5344 l 4743 5368 l 4738 5390 l 4733 5409 l
+ 4725 5445 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 4725 5305 m 4729 5429 l 4784 5318 l 4725 5305 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+ [60] 0 sd
+gs  clippath
+6422 4913 m 6376 4874 l 6278 4988 l 6379 4917 l 6323 5027 l cp
+eoclip
+n 5085 5629 m 5086 5629 l 5089 5629 l 5095 5628 l 5103 5627 l 5114 5625 l
+ 5129 5623 l 5147 5621 l 5169 5618 l 5193 5614 l 5219 5609 l
+ 5247 5604 l 5278 5598 l 5309 5592 l 5342 5585 l 5376 5576 l
+ 5411 5567 l 5448 5556 l 5486 5544 l 5526 5531 l 5567 5515 l
+ 5611 5498 l 5657 5478 l 5705 5456 l 5755 5431 l 5805 5404 l
+ 5855 5376 l 5902 5346 l 5947 5317 l 5988 5289 l 6027 5260 l
+ 6062 5233 l 6096 5206 l 6127 5180 l 6156 5154 l 6183 5129 l
+ 6209 5104 l 6233 5079 l 6256 5055 l 6278 5032 l 6298 5011 l
+ 6317 4990 l 6333 4971 l 6348 4955 l 6360 4940 l 6370 4928 l
+ 6378 4919 l
+ 6390 4905 l gs col0 s gr gr
+ [] 0 sd
+% arrowhead
+0 slj
+n 6323 5027 m 6379 4917 l 6278 4988 l 6323 5027 l  cp gs 0.00 setgray ef gr  col0 s
+% here ends figure;
+$F2psEnd
+rs
+showpage
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/images/fsm-slaveconf.fig	Mon Sep 25 15:53:33 2006 +0000
@@ -0,0 +1,132 @@
+#FIG 3.2
+Portrait
+Center
+Metric
+A4      
+100.00
+Single
+-2
+1200 2
+0 32 #8e8e8e
+6 3413 893 5137 1627
+1 2 0 1 0 7 50 -1 -1 0.000 1 0.0000 4275 1260 855 360 3420 900 5130 1620
+4 1 0 50 -1 16 12 0.0000 4 120 585 4275 1305 INIT\001
+-6
+6 3413 2011 5137 2745
+1 2 0 1 0 7 50 -1 -1 0.000 1 0.0000 4275 2378 855 360 3420 2018 5130 2738
+4 1 0 50 -1 16 12 0.0000 4 120 930 4275 2423 SYNC\001
+-6
+6 3413 3136 5137 3870
+1 2 0 1 0 7 50 -1 -1 0.000 1 0.0000 4275 3503 855 360 3420 3143 5130 3863
+4 1 0 50 -1 16 12 0.0000 4 120 1170 4275 3548 PREOP\001
+-6
+6 3413 4261 5137 4995
+1 2 0 1 0 7 50 -1 -1 0.000 1 0.0000 4275 4628 855 360 3420 4268 5130 4988
+4 1 0 50 -1 16 12 0.0000 4 120 945 4275 4673 FMMU\001
+-6
+6 3360 5386 5190 6120
+1 2 0 1 0 7 50 -1 -1 0.000 1 0.0000 4275 5753 855 360 3420 5393 5130 6113
+4 1 0 50 -1 16 12 0.0000 4 150 1830 4275 5798 SDO_CONF\001
+-6
+6 3413 6511 5137 7245
+1 2 0 1 0 7 50 -1 -1 0.000 1 0.0000 4275 6878 855 360 3420 6518 5130 7238
+4 1 0 50 -1 16 12 0.0000 4 120 1380 4275 6923 SAVEOP\001
+-6
+6 3413 7636 5137 8370
+1 2 0 1 0 7 50 -1 -1 0.000 1 0.0000 4275 8003 855 360 3420 7643 5130 8363
+4 1 0 50 -1 16 12 0.0000 4 120 480 4275 8048 OP\001
+-6
+6 6075 4230 7830 4995
+1 2 0 1 0 7 50 -1 -1 0.000 1 0.0000 6968 4628 855 360 6113 4268 7823 4988
+1 2 0 1 0 7 50 -1 -1 0.000 1 0.0000 6968 4635 748 315 6220 4320 7716 4950
+4 1 0 50 -1 16 12 0.0000 4 120 705 6968 4673 END\001
+-6
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 3510 675 101 101 3510 675 3600 720
+3 2 0 1 0 0 50 -1 20 0.000 0 1 0 2
+	1 1 1.00 60.00 120.00
+	 3555 765 3690 990
+	 0.000 0.000
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 2
+	1 1 1.00 60.00 120.00
+	 4275 1620 4275 2025
+	 0.000 0.000
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 2
+	1 1 1.00 60.00 120.00
+	 4275 2745 4275 3150
+	 0.000 0.000
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 2
+	1 1 1.00 60.00 120.00
+	 4275 3870 4275 4275
+	 0.000 0.000
+3 2 1 1 0 7 50 -1 -1 4.000 0 1 0 3
+	1 1 1.00 60.00 120.00
+	 5085 2520 5940 3060 6705 4275
+	 0.000 -1.000 0.000
+3 2 1 1 0 7 50 -1 -1 4.000 0 1 0 3
+	1 1 1.00 60.00 120.00
+	 5130 4635 5670 4635 6120 4635
+	 0.000 -1.000 0.000
+3 2 0 1 0 7 50 -1 -1 4.000 0 1 0 3
+	1 1 1.00 60.00 120.00
+	 5130 1304 6390 2520 6975 4275
+	 0.000 -1.000 0.000
+3 2 0 1 0 7 50 -1 -1 4.000 0 1 0 3
+	1 1 1.00 60.00 120.00
+	 5130 8010 6255 6840 6975 4995
+	 0.000 -1.000 0.000
+3 2 0 1 0 7 50 -1 -1 4.000 0 1 0 3
+	1 1 1.00 60.00 120.00
+	 5085 3600 5805 3825 6390 4320
+	 0.000 -1.000 0.000
+3 2 0 1 0 7 50 -1 -1 4.000 0 1 0 3
+	1 1 1.00 60.00 120.00
+	 5085 6750 5985 6210 6705 4995
+	 0.000 -1.000 0.000
+3 2 0 1 0 7 50 -1 -1 4.000 0 1 0 3
+	1 1 1.00 60.00 120.00
+	 3510 1440 3105 2385 3510 3330
+	 0.000 -1.000 0.000
+3 2 0 1 0 7 50 -1 -1 4.000 0 1 0 3
+	1 1 1.00 60.00 120.00
+	 3510 3690 3105 4635 3510 5580
+	 0.000 -1.000 0.000
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 4
+	1 1 1.00 60.00 120.00
+	 4950 1035 5085 765 4860 675 4725 945
+	 0.000 -1.000 -1.000 0.000
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 4
+	1 1 1.00 60.00 120.00
+	 4950 3285 5085 3015 4860 2925 4725 3195
+	 0.000 -1.000 -1.000 0.000
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 2
+	1 1 1.00 60.00 120.00
+	 4275 4995 4275 5400
+	 0.000 0.000
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 2
+	1 1 1.00 60.00 120.00
+	 4275 6120 4275 6525
+	 0.000 0.000
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 2
+	1 1 1.00 60.00 120.00
+	 4275 7245 4275 7650
+	 0.000 0.000
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 4
+	1 1 1.00 60.00 120.00
+	 4950 6660 5085 6390 4860 6300 4725 6570
+	 0.000 -1.000 -1.000 0.000
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 4
+	1 1 1.00 60.00 120.00
+	 4950 7785 5085 7515 4860 7425 4725 7695
+	 0.000 -1.000 -1.000 0.000
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 3
+	1 1 1.00 60.00 120.00
+	 3465 3645 2835 5175 3465 6750
+	 0.000 -1.000 0.000
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 4
+	1 1 1.00 60.00 120.00
+	 4950 5535 5085 5265 4860 5175 4725 5445
+	 0.000 -1.000 -1.000 0.000
+3 2 1 1 0 7 50 -1 -1 4.000 0 1 0 3
+	1 1 1.00 60.00 120.00
+	 5085 5629 5805 5404 6390 4905
+	 0.000 -1.000 0.000
Binary file doc/images/fsm-slaveconf.pdf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/images/fsm-slavescan.eps	Mon Sep 25 15:53:33 2006 +0000
@@ -0,0 +1,414 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: fsm-slavescan.fig
+%%Creator: fig2dev Version 3.2 Patchlevel 4
+%%CreationDate: Thu Jul 20 11:33:08 2006
+%%For: fp@jupiter (Florian Pose)
+%%BoundingBox: 0 0 303 492
+%%Magnification: 1.0000
+%%EndComments
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+/col32 {0.555 0.555 0.555 srgb} bind def
+
+end
+save
+newpath 0 492 moveto 0 0 lineto 303 0 lineto 303 492 lineto closepath clip newpath
+-190.6 527.2 translate
+1 -1 scale
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+  bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+  4 -2 roll mul srgb} bind def
+ /DrawEllipse {
+	/endangle exch def
+	/startangle exch def
+	/yrad exch def
+	/xrad exch def
+	/y exch def
+	/x exch def
+	/savematrix mtrx currentmatrix def
+	x y tr xrad yrad sc 0 0 1 startangle endangle arc
+	closepath
+	savematrix setmatrix
+	} def
+
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+$F2psBegin
+10 setmiterlimit
+0 slj 0 slc
+ 0.06299 0.06299 sc
+%
+% Fig objects follow
+%
+% 
+% here starts figure with depth 50
+% Ellipse
+7.500 slw
+n 4275 1260 855 360 0 360 DrawEllipse gs col0 s gr
+
+/Helvetica ff 180.00 scf sf
+4275 1305 m
+gs 1 -1 sc (START) dup sw pop 2 div neg 0 rm  col0 sh gr
+% Ellipse
+n 4275 3503 855 360 0 360 DrawEllipse gs col0 s gr
+
+/Helvetica ff 180.00 scf sf
+4275 3548 m
+gs 1 -1 sc (STATE) dup sw pop 2 div neg 0 rm  col0 sh gr
+% Ellipse
+n 4275 4628 855 360 0 360 DrawEllipse gs col0 s gr
+
+/Helvetica ff 180.00 scf sf
+4275 4673 m
+gs 1 -1 sc (BASE) dup sw pop 2 div neg 0 rm  col0 sh gr
+% Ellipse
+n 4275 5753 855 360 0 360 DrawEllipse gs col0 s gr
+
+/Helvetica ff 180.00 scf sf
+4275 5798 m
+gs 1 -1 sc (DATALINK) dup sw pop 2 div neg 0 rm  col0 sh gr
+% Ellipse
+n 4275 6878 855 360 0 360 DrawEllipse gs col0 s gr
+
+/Helvetica ff 180.00 scf sf
+4275 6923 m
+gs 1 -1 sc (EEPROM SIZE) dup sw pop 2 div neg 0 rm  col0 sh gr
+% Ellipse
+n 4275 2378 855 360 0 360 DrawEllipse gs col0 s gr
+
+/Helvetica ff 180.00 scf sf
+4275 2423 m
+gs 1 -1 sc (ADDRESS) dup sw pop 2 div neg 0 rm  col0 sh gr
+% Ellipse
+n 4275 8003 855 360 0 360 DrawEllipse gs col0 s gr
+
+/Helvetica ff 180.00 scf sf
+4275 8048 m
+gs 1 -1 sc (EEPROM DATA) dup sw pop 2 div neg 0 rm  col0 sh gr
+% Ellipse
+n 6968 4628 855 360 0 360 DrawEllipse gs col0 s gr
+
+% Ellipse
+n 6968 4635 748 315 0 360 DrawEllipse gs col0 s gr
+
+/Helvetica ff 180.00 scf sf
+6968 4673 m
+gs 1 -1 sc (END) dup sw pop 2 div neg 0 rm  col0 sh gr
+% Ellipse
+n 3510 675 101 101 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Polyline
+2 slj
+gs  clippath
+3671 1018 m 3723 987 l 3645 857 l 3682 976 l 3594 888 l cp
+eoclip
+n 3555 765 m
+ 3690 990 l gs 0.00 setgray ef gr gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 3594 888 m 3682 976 l 3645 857 l 3594 888 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+4245 2040 m 4305 2040 l 4305 1889 l 4275 2009 l 4245 1889 l cp
+eoclip
+n 4275 1620 m
+ 4275 2025 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 4245 1889 m 4275 2009 l 4305 1889 l 4245 1889 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+4245 3165 m 4305 3165 l 4305 3014 l 4275 3134 l 4245 3014 l cp
+eoclip
+n 4275 2745 m
+ 4275 3150 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 4245 3014 m 4275 3134 l 4305 3014 l 4245 3014 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+4245 4290 m 4305 4290 l 4305 4139 l 4275 4259 l 4245 4139 l cp
+eoclip
+n 4275 3870 m
+ 4275 4275 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 4245 4139 m 4275 4259 l 4305 4139 l 4245 4139 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+4245 5415 m 4305 5415 l 4305 5264 l 4275 5384 l 4245 5264 l cp
+eoclip
+n 4275 4995 m
+ 4275 5400 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 4245 5264 m 4275 5384 l 4305 5264 l 4245 5264 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+4245 6540 m 4305 6540 l 4305 6389 l 4275 6509 l 4245 6389 l cp
+eoclip
+n 4275 6120 m
+ 4275 6525 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 4245 6389 m 4275 6509 l 4305 6389 l 4245 6389 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+4245 7665 m 4305 7665 l 4305 7514 l 4275 7634 l 4245 7514 l cp
+eoclip
+n 4275 7245 m
+ 4275 7650 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 4245 7514 m 4275 7634 l 4305 7514 l 4245 7514 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+ [60] 0 sd
+gs  clippath
+6548 4300 m 6603 4276 l 6544 4137 l 6564 4260 l 6489 4161 l cp
+eoclip
+n 5085 2520 m 5086 2520 l 5088 2522 l 5091 2524 l 5096 2527 l 5104 2532 l
+ 5114 2538 l 5126 2546 l 5141 2556 l 5159 2567 l 5179 2581 l
+ 5202 2595 l 5226 2612 l 5252 2629 l 5280 2648 l 5309 2669 l
+ 5340 2690 l 5371 2713 l 5403 2736 l 5436 2761 l 5469 2787 l
+ 5504 2814 l 5538 2842 l 5574 2872 l 5611 2904 l 5648 2937 l
+ 5687 2972 l 5727 3010 l 5768 3050 l 5810 3092 l 5853 3137 l
+ 5897 3184 l 5941 3234 l 5985 3285 l 6031 3340 l 6074 3395 l
+ 6115 3449 l 6154 3501 l 6190 3551 l 6223 3600 l 6254 3647 l
+ 6282 3692 l 6309 3735 l 6334 3777 l 6357 3818 l 6378 3858 l
+ 6399 3897 l 6418 3934 l 6436 3971 l 6453 4006 l 6469 4041 l
+ 6484 4073 l 6498 4104 l 6511 4133 l 6523 4160 l 6533 4184 l
+ 6542 4206 l 6549 4224 l 6556 4239 l 6561 4252 l 6564 4261 l
+
+ 6570 4275 l gs col0 s gr gr
+ [] 0 sd
+% arrowhead
+0 slj
+n 6489 4161 m 6564 4260 l 6544 4137 l 6489 4161 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+ [60] 0 sd
+gs  clippath
+6286 4440 m 6332 4401 l 6233 4287 l 6289 4398 l 6188 4326 l cp
+eoclip
+n 5130 3600 m 5131 3601 l 5134 3602 l 5139 3604 l 5147 3607 l 5158 3612 l
+ 5173 3618 l 5190 3626 l 5211 3635 l 5234 3645 l 5259 3656 l
+ 5287 3668 l 5316 3682 l 5346 3696 l 5377 3711 l 5409 3727 l
+ 5443 3743 l 5477 3761 l 5513 3780 l 5550 3801 l 5589 3823 l
+ 5629 3847 l 5671 3872 l 5715 3900 l 5760 3929 l 5805 3960 l
+ 5853 3994 l 5898 4027 l 5940 4059 l 5978 4090 l 6013 4119 l
+ 6046 4146 l 6075 4173 l 6102 4198 l 6127 4222 l 6151 4245 l
+ 6173 4268 l 6193 4289 l 6212 4310 l 6230 4329 l 6245 4346 l
+ 6259 4362 l 6271 4376 l 6281 4387 l 6288 4396 l
+ 6300 4410 l gs col0 s gr gr
+ [] 0 sd
+% arrowhead
+0 slj
+n 6188 4326 m 6289 4398 l 6233 4287 l 6188 4326 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+ [60] 0 sd
+gs  clippath
+6135 4665 m 6135 4605 l 5984 4605 l 6104 4635 l 5984 4665 l cp
+eoclip
+n 5130 4635 m
+ 6120 4635 l gs col0 s gr gr
+ [] 0 sd
+% arrowhead
+0 slj
+n 5984 4665 m 6104 4635 l 5984 4605 l 5984 4665 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+ [60] 0 sd
+gs  clippath
+6332 4878 m 6286 4839 l 6188 4953 l 6289 4882 l 6233 4992 l cp
+eoclip
+n 5130 5680 m 5131 5679 l 5134 5678 l 5139 5676 l 5147 5673 l 5158 5668 l
+ 5173 5662 l 5190 5654 l 5211 5645 l 5234 5635 l 5259 5624 l
+ 5287 5612 l 5316 5598 l 5346 5584 l 5377 5569 l 5409 5553 l
+ 5443 5537 l 5477 5519 l 5513 5500 l 5550 5479 l 5589 5457 l
+ 5629 5433 l 5671 5408 l 5715 5380 l 5760 5351 l 5805 5320 l
+ 5853 5286 l 5898 5253 l 5940 5221 l 5978 5190 l 6013 5161 l
+ 6046 5134 l 6075 5107 l 6102 5082 l 6127 5058 l 6151 5035 l
+ 6173 5012 l 6193 4991 l 6212 4970 l 6230 4951 l 6245 4934 l
+ 6259 4918 l 6271 4904 l 6281 4893 l 6288 4884 l
+ 6300 4870 l gs col0 s gr gr
+ [] 0 sd
+% arrowhead
+0 slj
+n 6233 4992 m 6289 4882 l 6188 4953 l 6233 4992 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+ [60] 0 sd
+gs  clippath
+6603 4974 m 6548 4950 l 6489 5089 l 6564 4991 l 6544 5113 l cp
+eoclip
+n 5085 6731 m 5086 6731 l 5088 6729 l 5091 6727 l 5096 6724 l 5104 6719 l
+ 5114 6713 l 5126 6705 l 5141 6695 l 5159 6684 l 5179 6670 l
+ 5202 6656 l 5226 6639 l 5252 6622 l 5280 6603 l 5309 6582 l
+ 5340 6561 l 5371 6538 l 5403 6515 l 5436 6490 l 5469 6464 l
+ 5504 6437 l 5538 6409 l 5574 6379 l 5611 6347 l 5648 6314 l
+ 5687 6279 l 5727 6241 l 5768 6201 l 5810 6159 l 5853 6114 l
+ 5897 6067 l 5941 6017 l 5985 5966 l 6031 5911 l 6074 5856 l
+ 6115 5802 l 6154 5750 l 6190 5700 l 6223 5651 l 6254 5604 l
+ 6282 5559 l 6309 5516 l 6334 5474 l 6357 5433 l 6378 5393 l
+ 6399 5354 l 6418 5317 l 6436 5280 l 6453 5245 l 6469 5210 l
+ 6484 5178 l 6498 5147 l 6511 5118 l 6523 5091 l 6533 5067 l
+ 6542 5045 l 6549 5027 l 6556 5012 l 6561 4999 l 6564 4990 l
+
+ 6570 4976 l gs col0 s gr gr
+ [] 0 sd
+% arrowhead
+0 slj
+n 6544 5113 m 6564 4991 l 6489 5089 l 6544 5113 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+6961 4982 m 6901 4977 l 6888 5127 l 6929 5011 l 6948 5133 l cp
+eoclip
+n 5130 7920 m 5131 7919 l 5132 7918 l 5135 7916 l 5139 7912 l 5146 7907 l
+ 5155 7900 l 5166 7890 l 5179 7879 l 5195 7866 l 5214 7850 l
+ 5235 7832 l 5258 7812 l 5284 7789 l 5312 7765 l 5342 7739 l
+ 5373 7711 l 5406 7681 l 5441 7650 l 5476 7618 l 5513 7584 l
+ 5550 7549 l 5588 7513 l 5626 7476 l 5665 7437 l 5704 7398 l
+ 5744 7357 l 5784 7315 l 5825 7271 l 5865 7226 l 5907 7179 l
+ 5949 7131 l 5991 7080 l 6034 7028 l 6078 6973 l 6122 6916 l
+ 6167 6856 l 6212 6794 l 6257 6729 l 6302 6663 l 6346 6594 l
+ 6390 6525 l 6434 6452 l 6476 6379 l 6515 6308 l 6552 6239 l
+ 6586 6172 l 6617 6107 l 6646 6044 l 6672 5984 l 6697 5926 l
+ 6719 5870 l 6740 5815 l 6758 5763 l 6775 5712 l 6791 5662 l
+ 6806 5614 l 6819 5567 l 6831 5521 l 6843 5476 l 6853 5432 l
+ 6863 5390 l 6871 5349 l 6879 5310 l 6887 5272 l 6893 5236 l
+ 6899 5202 l 6905 5170 l 6909 5141 l 6913 5114 l 6917 5090 l
+ 6920 5069 l 6923 5051 l 6925 5035 l 6926 5023 l 6928 5013 l
+ 6929 5006 l
+ 6930 4995 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 6948 5133 m 6929 5011 l 6888 5127 l 6948 5133 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+3516 6737 m 3532 6679 l 3385 6641 l 3494 6701 l 3370 6699 l cp
+eoclip
+n 3510 7020 m 3508 7021 l 3503 7022 l 3495 7024 l 3483 7027 l 3466 7030 l
+ 3446 7035 l 3423 7040 l 3398 7045 l 3371 7050 l 3343 7054 l
+ 3315 7057 l 3287 7060 l 3259 7061 l 3231 7060 l 3204 7058 l
+ 3177 7053 l 3151 7045 l 3127 7034 l 3105 7020 l 3088 7005 l
+ 3075 6988 l 3064 6971 l 3056 6954 l 3050 6938 l 3045 6924 l
+ 3042 6910 l 3040 6897 l 3039 6885 l 3038 6874 l 3038 6862 l
+ 3038 6851 l 3039 6840 l 3040 6828 l 3042 6815 l 3045 6801 l
+ 3050 6787 l 3056 6771 l 3064 6754 l 3075 6737 l 3088 6720 l
+ 3105 6705 l 3127 6691 l 3151 6680 l 3177 6672 l 3204 6667 l
+ 3231 6665 l 3259 6664 l 3287 6665 l 3315 6668 l 3343 6671 l
+ 3371 6675 l 3398 6680 l 3423 6685 l 3446 6690 l 3466 6695 l
+ 3483 6698 l
+ 3510 6705 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 3370 6699 m 3494 6701 l 3385 6641 l 3370 6699 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+3516 7862 m 3532 7804 l 3385 7766 l 3494 7826 l 3370 7824 l cp
+eoclip
+n 3510 8145 m 3508 8146 l 3503 8147 l 3495 8149 l 3483 8152 l 3466 8155 l
+ 3446 8160 l 3423 8165 l 3398 8170 l 3371 8175 l 3343 8179 l
+ 3315 8182 l 3287 8185 l 3259 8186 l 3231 8185 l 3204 8183 l
+ 3177 8178 l 3151 8170 l 3127 8159 l 3105 8145 l 3088 8130 l
+ 3075 8113 l 3064 8096 l 3056 8079 l 3050 8063 l 3045 8049 l
+ 3042 8035 l 3040 8022 l 3039 8010 l 3038 7999 l 3038 7987 l
+ 3038 7976 l 3039 7965 l 3040 7953 l 3042 7940 l 3045 7926 l
+ 3050 7912 l 3056 7896 l 3064 7879 l 3075 7862 l 3088 7845 l
+ 3105 7830 l 3127 7816 l 3151 7805 l 3177 7797 l 3204 7792 l
+ 3231 7790 l 3259 7789 l 3287 7790 l 3315 7793 l 3343 7796 l
+ 3371 7800 l 3398 7805 l 3423 7810 l 3446 7815 l 3466 7820 l
+ 3483 7823 l
+ 3510 7830 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 3370 7824 m 3494 7826 l 3385 7766 l 3370 7824 l  cp gs 0.00 setgray ef gr  col0 s
+% here ends figure;
+$F2psEnd
+rs
+showpage
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/images/fsm-slavescan.fig	Mon Sep 25 15:53:33 2006 +0000
@@ -0,0 +1,104 @@
+#FIG 3.2
+Portrait
+Center
+Metric
+A4      
+100.00
+Single
+-2
+1200 2
+0 32 #8e8e8e
+6 3413 893 5137 1627
+1 2 0 1 0 7 50 -1 -1 0.000 1 0.0000 4275 1260 855 360 3420 900 5130 1620
+4 1 0 50 -1 16 12 0.0000 4 120 1080 4275 1305 START\001
+-6
+6 3413 3136 5137 3870
+1 2 0 1 0 7 50 -1 -1 0.000 1 0.0000 4275 3503 855 360 3420 3143 5130 3863
+4 1 0 50 -1 16 12 0.0000 4 120 1065 4275 3548 STATE\001
+-6
+6 3413 4261 5137 4995
+1 2 0 1 0 7 50 -1 -1 0.000 1 0.0000 4275 4628 855 360 3420 4268 5130 4988
+4 1 0 50 -1 16 12 0.0000 4 120 900 4275 4673 BASE\001
+-6
+6 3413 5386 5137 6120
+1 2 0 1 0 7 50 -1 -1 0.000 1 0.0000 4275 5753 855 360 3420 5393 5130 6113
+4 1 0 50 -1 16 12 0.0000 4 120 1605 4275 5798 DATALINK\001
+-6
+6 3165 6511 5385 7245
+1 2 0 1 0 7 50 -1 -1 0.000 1 0.0000 4275 6878 855 360 3420 6518 5130 7238
+4 1 0 50 -1 16 12 0.0000 4 120 2220 4275 6923 EEPROM SIZE\001
+-6
+6 3413 2011 5137 2745
+1 2 0 1 0 7 50 -1 -1 0.000 1 0.0000 4275 2378 855 360 3420 2018 5130 2738
+4 1 0 50 -1 16 12 0.0000 4 120 1620 4275 2423 ADDRESS\001
+-6
+6 3083 7636 5468 8370
+1 2 0 1 0 7 50 -1 -1 0.000 1 0.0000 4275 8003 855 360 3420 7643 5130 8363
+4 1 0 50 -1 16 12 0.0000 4 120 2385 4275 8048 EEPROM DATA\001
+-6
+6 6075 4230 7830 4995
+1 2 0 1 0 7 50 -1 -1 0.000 1 0.0000 6968 4628 855 360 6113 4268 7823 4988
+1 2 0 1 0 7 50 -1 -1 0.000 1 0.0000 6968 4635 748 315 6220 4320 7716 4950
+4 1 0 50 -1 16 12 0.0000 4 120 705 6968 4673 END\001
+-6
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 3510 675 101 101 3510 675 3600 720
+3 2 0 1 0 0 50 -1 20 0.000 0 1 0 2
+	1 1 1.00 60.00 120.00
+	 3555 765 3690 990
+	 0.000 0.000
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 2
+	1 1 1.00 60.00 120.00
+	 4275 1620 4275 2025
+	 0.000 0.000
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 2
+	1 1 1.00 60.00 120.00
+	 4275 2745 4275 3150
+	 0.000 0.000
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 2
+	1 1 1.00 60.00 120.00
+	 4275 3870 4275 4275
+	 0.000 0.000
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 2
+	1 1 1.00 60.00 120.00
+	 4275 4995 4275 5400
+	 0.000 0.000
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 2
+	1 1 1.00 60.00 120.00
+	 4275 6120 4275 6525
+	 0.000 0.000
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 2
+	1 1 1.00 60.00 120.00
+	 4275 7245 4275 7650
+	 0.000 0.000
+3 2 1 1 0 7 50 -1 -1 4.000 0 1 0 3
+	1 1 1.00 60.00 120.00
+	 5085 2520 5985 3285 6570 4275
+	 0.000 -1.000 0.000
+3 2 1 1 0 7 50 -1 -1 4.000 0 1 0 3
+	1 1 1.00 60.00 120.00
+	 5130 3600 5805 3960 6300 4410
+	 0.000 -1.000 0.000
+3 2 1 1 0 7 50 -1 -1 4.000 0 1 0 2
+	1 1 1.00 60.00 120.00
+	 5130 4635 6120 4635
+	 0.000 0.000
+3 2 1 1 0 7 50 -1 -1 4.000 0 1 0 3
+	1 1 1.00 60.00 120.00
+	 5130 5680 5805 5320 6300 4870
+	 0.000 -1.000 0.000
+3 2 1 1 0 7 50 -1 -1 4.000 0 1 0 3
+	1 1 1.00 60.00 120.00
+	 5085 6731 5985 5966 6570 4976
+	 0.000 -1.000 0.000
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 3
+	1 1 1.00 60.00 120.00
+	 5130 7920 6390 6525 6930 4995
+	 0.000 -1.000 0.000
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 4
+	1 1 1.00 60.00 120.00
+	 3510 7020 3105 7020 3105 6705 3510 6705
+	 0.000 -1.000 -1.000 0.000
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 4
+	1 1 1.00 60.00 120.00
+	 3510 8145 3105 8145 3105 7830 3510 7830
+	 0.000 -1.000 -1.000 0.000
Binary file doc/images/fsm-slavescan.pdf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/images/ighsign.eps	Mon Sep 25 15:53:33 2006 +0000
@@ -0,0 +1,183 @@
+%!PS-Adobe-2.0 EPSF-1.2
+%%BoundingBox: 0 0 91 62
+userdict begin /AltsysDict 245 dict def end
+AltsysDict begin
+/bdf{bind def}bind def
+
+/n{newpath}bdf
+
+/fps{
+ currentflat   
+ exch     
+ dup 0 le{pop 1}if 
+ {
+dup setflat 3 index stopped
+{1.3 mul dup 3 index gt{pop setflat pop pop stop}if} 
+{exit} 
+ifelse
+ }loop 
+ pop setflat pop pop
+}bdf
+
+/fp{100 currentflat fps}bdf
+
+/filler{fill}bdf 
+
+/F{gsave {filler}fp grestore}bdf
+
+/f{closepath F}bdf
+
+/h{closepath}bdf
+
+/C{curveto}bdf
+
+/L{lineto}bdf
+
+/m{moveto}bdf
+
+/cvc [0 0 0 1] def 
+/vc{
+ AltsysDict /cvc 2 index put 
+ aload length 4 eq
+ {setcmykcolor}
+ {setspotcolor}
+ ifelse
+}bdf 
+
+end
+
+AltsysDict begin
+
+-2076 -1773 translate
+
+[0 0 0 1]  vc
+n
+2078.3088 1791.6006 m
+2079.7873 1791.7829 2080.8812 1792.1475 2081.5905 1792.6945 C
+2082.2989 1793.2414 2082.8866 1794.3657 2083.3529 1796.0673 C
+2090.9798 1823.992 L
+2091.202 1824.782 2091.3643 1825.44 2091.4659 1825.9671 C
+2091.5875 1826.514 2091.6482 1826.9897 2091.6482 1827.3952 C
+2091.6482 1828.4483 2091.3539 1829.1063 2090.767 1829.3703 C
+2090.1793 1829.6533 2088.9534 1829.8764 2087.0903 1830.0388 C
+2087.0903 1831.6493 L
+2105.5954 1831.6493 L
+2105.5954 1830.0388 L
+2104.0761 1829.8356 2102.9717 1829.471 2102.2833 1828.9449 C
+2101.6148 1828.4179 2101.047 1827.2936 2100.5817 1825.5721 C
+2092.9245 1797.6474 L
+2092.4383 1795.49 L
+2092.3974 1795.2868 2092.3566 1795.0741 2092.3167 1794.8519 C
+2092.2958 1794.6487 2092.2863 1794.4568 2092.2863 1794.2745 C
+2092.2863 1793.2205 2092.5693 1792.552 2093.1371 1792.2691 C
+2093.7041 1791.9852 2094.929 1791.762 2096.8138 1791.6006 C
+2096.8138 1790.0205 L
+2078.3088 1790.0205 L
+2078.3088 1791.6006 L
+f 
+n
+2108.6234 1791.5533 m
+2114.5553 1791.5533 2115.3693 1792.157 2116.0179 1792.7249 C
+2116.6864 1793.2917 2117.2533 1794.4056 2117.7195 1796.0673 C
+2125.3768 1823.992 L
+2125.5382 1824.6396 2125.6797 1825.2673 2125.8022 1825.8759 C
+2125.9436 1826.4837 2126.0139 1826.9897 2126.0149 1827.3952 C
+2126.0149 1828.4483 2125.731 1829.1063 2125.164 1829.3703 C
+2124.5962 1829.6533 2123.3713 1829.8764 2121.4874 1830.0388 C
+2121.4874 1831.6493 L
+2141.2078 1831.6493 L
+2141.2078 1830.0388 L
+2139.04 1829.8156 2137.5815 1829.471 2136.8323 1829.0057 C
+2136.0821 1828.5594 2135.4545 1827.4152 2134.9483 1825.5721 C
+2131.5451 1813.205 L
+2146.4038 1813.205 L
+2149.3513 1823.992 L
+2149.5336 1824.7004 2149.6855 1825.3385 2149.8071 1825.9063 C
+2149.9286 1826.4931 2149.9894 1826.9897 2149.9894 1827.3952 C
+2149.9894 1828.4891 2149.584 1829.2079 2148.7739 1829.5526 C
+2148.2469 1829.7748 2147.1426 1829.9372 2145.4619 1830.0388 C
+2145.4619 1831.6493 L
+2163.9669 1831.6493 L
+2163.9669 1830.0388 L
+2162.5283 1829.8565 2161.5256 1829.5726 2160.9587 1829.188 C
+2160.087 1828.5594 2159.409 1827.3544 2158.9229 1825.5721 C
+2151.296 1797.6474 L
+2150.7794 1795.49 L
+2150.6778 1795.0237 2150.6171 1794.7303 2150.5971 1794.6088 C
+2150.5762 1794.5072 2150.5667 1794.3752 2150.5667 1794.2138 C
+2150.5667 1793.1398 2151.0225 1792.421 2151.9341 1792.0564 C
+2152.4811 1791.8332 2153.5645 1791.6813 2155.1854 1791.6006 C
+2155.1854 1790.0205 L
+2135.4346 1790.0205 L
+2135.4346 1791.6006 L
+2137.6014 1791.8228 2139.0599 1792.157 2139.8101 1792.6033 C
+2140.5792 1793.0686 2141.2173 1794.2233 2141.7244 1796.0673 C
+2145.6746 1810.4703 L
+2130.8462 1810.4703 L
+2127.3214 1797.6474 L
+2127.0784 1796.695 2126.916 1796.0161 2126.8353 1795.6115 C
+2126.7536 1795.2061 2126.7137 1794.7094 2126.7137 1794.1226 C
+2126.7137 1793.1294 2126.9872 1792.5017 2127.5342 1792.2387 C
+2128.0811 1791.9747 2129.306 1791.762 2131.2109 1791.6006 C
+2131.2109 1790.0205 L
+2112.6754 1790.0205 L
+2108.6234 1791.5533 L
+f
+n
+2109.4208 1783.5683 m
+2108.833 1784.1362 2108.023 1784.6318 2106.9899 1785.0573 C
+2106.2806 1785.3411 2105.1364 1785.7466 2103.5563 1786.2727 C
+2101.9962 1786.7797 2101.0646 1787.0323 2100.7608 1787.0323 C
+2100.7608 1787.3362 2099.9498 1786.9013 2098.3299 1785.7257 C
+2096.709 1784.5511 2095.899 1783.1838 2095.899 1781.6236 C
+2095.899 1780.6513 2096.2731 1779.7606 2097.0233 1778.9497 C
+2098.2587 1777.5728 2100.304 1776.8844 2103.1613 1776.8834 C
+2105.4098 1776.8834 2107.1618 1777.2889 2108.4181 1778.0989 C
+2109.6942 1778.9098 2110.3324 1779.9524 2110.3324 1781.2286 C
+2110.3324 1782.2218 2110.0285 1783.0014 2109.4208 1783.5683 C
+h
+2110.4539 1802.8938 m
+2111.7301 1805.5469 2112.3682 1808.0793 2112.3682 1810.4903 C
+2112.3682 1811.5841 2112.1451 1812.4853 2111.6997 1813.1946 C
+2111.2534 1813.903 2110.5242 1814.2572 2109.5119 1814.2581 C
+2107.5872 1814.2581 2106.0375 1812.8395 2104.8629 1810.0041 C
+2103.7082 1807.1678 2103.1309 1804.6353 2103.1309 1802.4076 C
+2103.1309 1801.2729 2103.3939 1800.4116 2103.9209 1799.8248 C
+2104.447 1799.237 2105.1155 1798.9436 2105.9264 1798.9436 C
+2107.6888 1798.9436 2109.1976 1800.2597 2110.4539 1802.8938 C
+h
+2096.3244 1789.0986 m
+2095.392 1789.8677 2094.9267 1790.8904 2094.9267 1792.1675 C
+2094.9267 1793.2007 2095.3521 1794.1322 2096.2029 1794.9631 C
+2097.0537 1795.8139 2098.6129 1796.847 2100.8823 1798.0624 C
+2099.2007 1798.6701 2097.9548 1799.5912 2097.1448 1800.8275 C
+2096.3339 1802.0629 2095.9294 1803.5518 2095.9294 1805.2943 C
+2095.9294 1807.9075 2097.1543 1810.3782 2099.6061 1812.7085 C
+2102.0569 1815.0377 2105.2873 1816.2019 2109.2992 1816.2028 C
+2111.3854 1816.2028 2113.2085 1815.8686 2114.7687 1815.2001 C
+2116.3488 1814.5316 2116.9625 1814.0148 2117.6794 1813.2212 C
+2123.5167 1813.2212 L
+2123.5167 1810.475 L
+2119.3435 1810.475 L
+2119.4651 1809.9479 2119.5393 1809.6898 2119.6001 1809.3052 C
+2119.6608 1808.9197 2119.6912 1808.4848 2119.6912 1807.9986 C
+2119.6912 1804.9999 2118.5062 1802.4276 2116.1361 1800.2806 C
+2113.7859 1798.1536 2110.4738 1797.0901 2106.1998 1797.0901 C
+2105.2674 1797.0901 2104.1535 1797.2012 2102.8574 1797.4243 C
+2102.5327 1797.4243 2102.1889 1797.1708 2101.8243 1796.6647 C
+2101.4796 1796.1576 2101.3077 1795.7227 2101.3077 1795.3581 C
+2101.3077 1794.6896 2101.8034 1794.0913 2102.7966 1793.5653 C
+2103.2619 1793.3013 2103.8288 1793.0687 2104.4983 1792.8664 C
+2107.8103 1791.9245 L
+2110.7065 1791.0936 2112.7623 1790.2836 2113.9786 1789.4936 C
+2116.0648 1788.1566 2117.1075 1786.3135 2117.1084 1783.9633 C
+2117.1084 1781.3302 2115.7202 1779.1424 2112.9456 1777.4 C
+2110.17 1775.6585 2106.7259 1774.7877 2102.6143 1774.7868 C
+2099.9195 1774.7868 2097.5797 1775.1115 2095.5952 1775.7592 C
+2092.172 1776.853 2090.4609 1778.7778 2090.4599 1781.5325 C
+2090.4599 1783.3157 2091.3715 1784.7638 2093.1947 1785.8777 C
+2094.2069 1786.4854 2095.9997 1787.1643 2098.573 1787.9135 C
+2097.5598 1788.2782 2096.8106 1788.6732 2096.3244 1789.0986 C
+f 
+
+end
Binary file doc/images/ighsign.pdf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/images/interrupt.eps	Mon Sep 25 15:53:33 2006 +0000
@@ -0,0 +1,635 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: interrupt.fig
+%%Creator: fig2dev Version 3.2 Patchlevel 4
+%%CreationDate: Mon Aug  7 13:51:08 2006
+%%For: fp@jupiter (Florian Pose)
+%%BoundingBox: 0 0 538 278
+%%Magnification: 1.0000
+%%EndComments
+/MyAppDict 100 dict dup begin def
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+
+end
+save
+newpath 0 278 moveto 0 0 lineto 538 0 lineto 538 278 lineto closepath clip newpath
+-12.2 386.3 translate
+1 -1 scale
+
+% This junk string is used by the show operators
+/PATsstr 1 string def
+/PATawidthshow { 	% cx cy cchar rx ry string
+  % Loop over each character in the string
+  {  % cx cy cchar rx ry char
+    % Show the character
+    dup				% cx cy cchar rx ry char char
+    PATsstr dup 0 4 -1 roll put	% cx cy cchar rx ry char (char)
+    false charpath		% cx cy cchar rx ry char
+    /clip load PATdraw
+    % Move past the character (charpath modified the
+    % current point)
+    currentpoint			% cx cy cchar rx ry char x y
+    newpath
+    moveto			% cx cy cchar rx ry char
+    % Reposition by cx,cy if the character in the string is cchar
+    3 index eq {			% cx cy cchar rx ry
+      4 index 4 index rmoveto
+    } if
+    % Reposition all characters by rx ry
+    2 copy rmoveto		% cx cy cchar rx ry
+  } forall
+  pop pop pop pop pop		% -
+  currentpoint
+  newpath
+  moveto
+} bind def
+/PATcg {
+  7 dict dup begin
+    /lw currentlinewidth def
+    /lc currentlinecap def
+    /lj currentlinejoin def
+    /ml currentmiterlimit def
+    /ds [ currentdash ] def
+    /cc [ currentrgbcolor ] def
+    /cm matrix currentmatrix def
+  end
+} bind def
+% PATdraw - calculates the boundaries of the object and
+% fills it with the current pattern
+/PATdraw {			% proc
+  save exch
+    PATpcalc			% proc nw nh px py
+    5 -1 roll exec		% nw nh px py
+    newpath
+    PATfill			% -
+  restore
+} bind def
+% PATfill - performs the tiling for the shape
+/PATfill { % nw nh px py PATfill -
+  PATDict /CurrentPattern get dup begin
+    setfont
+    % Set the coordinate system to Pattern Space
+    PatternGState PATsg
+    % Set the color for uncolored pattezns
+    PaintType 2 eq { PATDict /PColor get PATsc } if
+    % Create the string for showing
+    3 index string		% nw nh px py str
+    % Loop for each of the pattern sources
+    0 1 Multi 1 sub {		% nw nh px py str source
+	% Move to the starting location
+	3 index 3 index		% nw nh px py str source px py
+	moveto			% nw nh px py str source
+	% For multiple sources, set the appropriate color
+	Multi 1 ne { dup PC exch get PATsc } if
+	% Set the appropriate string for the source
+	0 1 7 index 1 sub { 2 index exch 2 index put } for pop
+	% Loop over the number of vertical cells
+	3 index 		% nw nh px py str nh
+	{			% nw nh px py str
+	  currentpoint		% nw nh px py str cx cy
+	  2 index oldshow	% nw nh px py str cx cy
+	  YStep add moveto	% nw nh px py str
+	} repeat		% nw nh px py str
+    } for
+    5 { pop } repeat
+  end
+} bind def
+
+% PATkshow - kshow with the current pattezn
+/PATkshow {			% proc string
+  exch bind			% string proc
+  1 index 0 get			% string proc char
+  % Loop over all but the last character in the string
+  0 1 4 index length 2 sub {
+				% string proc char idx
+    % Find the n+1th character in the string
+    3 index exch 1 add get	% string proc char char+1
+    exch 2 copy			% strinq proc char+1 char char+1 char
+    % Now show the nth character
+    PATsstr dup 0 4 -1 roll put	% string proc chr+1 chr chr+1 (chr)
+    false charpath		% string proc char+1 char char+1
+    /clip load PATdraw
+    % Move past the character (charpath modified the current point)
+    currentpoint newpath moveto
+    % Execute the user proc (should consume char and char+1)
+    mark 3 1 roll		% string proc char+1 mark char char+1
+    4 index exec		% string proc char+1 mark...
+    cleartomark			% string proc char+1
+  } for
+  % Now display the last character
+  PATsstr dup 0 4 -1 roll put	% string proc (char+1)
+  false charpath		% string proc
+  /clip load PATdraw
+  neewath
+  pop pop			% -
+} bind def
+% PATmp - the makepattern equivalent
+/PATmp {			% patdict patmtx PATmp patinstance
+  exch dup length 7 add		% We will add 6 new entries plus 1 FID
+  dict copy			% Create a new dictionary
+  begin
+    % Matrix to install when painting the pattern
+    TilingType PATtcalc
+    /PatternGState PATcg def
+    PatternGState /cm 3 -1 roll put
+    % Check for multi pattern sources (Level 1 fast color patterns)
+    currentdict /Multi known not { /Multi 1 def } if
+    % Font dictionary definitions
+    /FontType 3 def
+    % Create a dummy encoding vector
+    /Encoding 256 array def
+    3 string 0 1 255 {
+      Encoding exch dup 3 index cvs cvn put } for pop
+    /FontMatrix matrix def
+    /FontBBox BBox def
+    /BuildChar {
+	mark 3 1 roll		% mark dict char
+	exch begin
+	Multi 1 ne {PaintData exch get}{pop} ifelse  % mark [paintdata]
+	  PaintType 2 eq Multi 1 ne or
+	  { XStep 0 FontBBox aload pop setcachedevice }
+	  { XStep 0 setcharwidth } ifelse
+	  currentdict		% mark [paintdata] dict
+	  /PaintProc load	% mark [paintdata] dict paintproc
+	end
+	gsave
+	  false PATredef exec true PATredef
+	grestore
+	cleartomark		% -
+    } bind def
+    currentdict
+  end				% newdict
+  /foo exch			% /foo newlict
+  definefont			% newfont
+} bind def
+% PATpcalc - calculates the starting point and width/height
+% of the tile fill for the shape
+/PATpcalc {	% - PATpcalc nw nh px py
+  PATDict /CurrentPattern get begin
+    gsave
+	% Set up the coordinate system to Pattern Space
+	% and lock down pattern
+	PatternGState /cm get setmatrix
+	BBox aload pop pop pop translate
+	% Determine the bounding box of the shape
+	pathbbox			% llx lly urx ury
+    grestore
+    % Determine (nw, nh) the # of cells to paint width and height
+    PatHeight div ceiling		% llx lly urx qh
+    4 1 roll				% qh llx lly urx
+    PatWidth div ceiling		% qh llx lly qw
+    4 1 roll				% qw qh llx lly
+    PatHeight div floor			% qw qh llx ph
+    4 1 roll				% ph qw qh llx
+    PatWidth div floor			% ph qw qh pw
+    4 1 roll				% pw ph qw qh
+    2 index sub cvi abs			% pw ph qs qh-ph
+    exch 3 index sub cvi abs exch	% pw ph nw=qw-pw nh=qh-ph
+    % Determine the starting point of the pattern fill
+    %(px, py)
+    4 2 roll				% nw nh pw ph
+    PatHeight mul			% nw nh pw py
+    exch				% nw nh py pw
+    PatWidth mul exch			% nw nh px py
+  end
+} bind def
+
+% Save the original routines so that we can use them later on
+/oldfill	/fill load def
+/oldeofill	/eofill load def
+/oldstroke	/stroke load def
+/oldshow	/show load def
+/oldashow	/ashow load def
+/oldwidthshow	/widthshow load def
+/oldawidthshow	/awidthshow load def
+/oldkshow	/kshow load def
+
+% These defs are necessary so that subsequent procs don't bind in
+% the originals
+/fill	   { oldfill } bind def
+/eofill	   { oldeofill } bind def
+/stroke	   { oldstroke } bind def
+/show	   { oldshow } bind def
+/ashow	   { oldashow } bind def
+/widthshow { oldwidthshow } bind def
+/awidthshow { oldawidthshow } bind def
+/kshow 	   { oldkshow } bind def
+/PATredef {
+  MyAppDict begin
+    {
+    /fill { /clip load PATdraw newpath } bind def
+    /eofill { /eoclip load PATdraw newpath } bind def
+    /stroke { PATstroke } bind def
+    /show { 0 0 null 0 0 6 -1 roll PATawidthshow } bind def
+    /ashow { 0 0 null 6 3 roll PATawidthshow }
+    bind def
+    /widthshow { 0 0 3 -1 roll PATawidthshow }
+    bind def
+    /awidthshow { PATawidthshow } bind def
+    /kshow { PATkshow } bind def
+  } {
+    /fill   { oldfill } bind def
+    /eofill { oldeofill } bind def
+    /stroke { oldstroke } bind def
+    /show   { oldshow } bind def
+    /ashow  { oldashow } bind def
+    /widthshow { oldwidthshow } bind def
+    /awidthshow { oldawidthshow } bind def
+    /kshow  { oldkshow } bind def
+    } ifelse
+  end
+} bind def
+false PATredef
+% Conditionally define setcmykcolor if not available
+/setcmykcolor where { pop } {
+  /setcmykcolor {
+    1 sub 4 1 roll
+    3 {
+	3 index add neg dup 0 lt { pop 0 } if 3 1 roll
+    } repeat
+    setrgbcolor - pop
+  } bind def
+} ifelse
+/PATsc {		% colorarray
+  aload length		% c1 ... cn length
+    dup 1 eq { pop setgray } { 3 eq { setrgbcolor } { setcmykcolor
+  } ifelse } ifelse
+} bind def
+/PATsg {		% dict
+  begin
+    lw setlinewidth
+    lc setlinecap
+    lj setlinejoin
+    ml setmiterlimit
+    ds aload pop setdash
+    cc aload pop setrgbcolor
+    cm setmatrix
+  end
+} bind def
+
+/PATDict 3 dict def
+/PATsp {
+  true PATredef
+  PATDict begin
+    /CurrentPattern exch def
+    % If it's an uncolored pattern, save the color
+    CurrentPattern /PaintType get 2 eq {
+      /PColor exch def
+    } if
+    /CColor [ currentrgbcolor ] def
+  end
+} bind def
+% PATstroke - stroke with the current pattern
+/PATstroke {
+  countdictstack
+  save
+  mark
+  {
+    currentpoint strokepath moveto
+    PATpcalc				% proc nw nh px py
+    clip newpath PATfill
+    } stopped {
+	(*** PATstroke Warning: Path is too complex, stroking
+	  with gray) =
+    cleartomark
+    restore
+    countdictstack exch sub dup 0 gt
+	{ { end } repeat } { pop } ifelse
+    gsave 0.5 setgray oldstroke grestore
+  } { pop restore pop } ifelse
+  newpath
+} bind def
+/PATtcalc {		% modmtx tilingtype PATtcalc tilematrix
+  % Note: tiling types 2 and 3 are not supported
+  gsave
+    exch concat					% tilingtype
+    matrix currentmatrix exch			% cmtx tilingtype
+    % Tiling type 1 and 3: constant spacing
+    2 ne {
+	% Distort the pattern so that it occupies
+	% an integral number of device pixels
+	dup 4 get exch dup 5 get exch		% tx ty cmtx
+	XStep 0 dtransform
+	round exch round exch			% tx ty cmtx dx.x dx.y
+	XStep div exch XStep div exch		% tx ty cmtx a b
+	0 YStep dtransform
+	round exch round exch			% tx ty cmtx a b dy.x dy.y
+	YStep div exch YStep div exch		% tx ty cmtx a b c d
+	7 -3 roll astore			% { a b c d tx ty }
+    } if
+  grestore
+} bind def
+/PATusp {
+  false PATredef
+  PATDict begin
+    CColor PATsc
+  end
+} bind def
+
+% right45
+11 dict begin
+/PaintType 1 def
+/PatternType 1 def
+/TilingType 1 def
+/BBox [0 0 1 1] def
+/XStep 1 def
+/YStep 1 def
+/PatWidth 1 def
+/PatHeight 1 def
+/Multi 2 def
+/PaintData [
+  { clippath } bind
+  { 20 20 true [ 20 0 0 -20 0 20 ]
+	{<0040100080200100400200800401000802001004
+	0020080040100080200000401000802001004002
+	0080040100080200100400200800401000802000>}
+     imagemask } bind
+] def
+/PaintProc {
+	pop
+	exec fill
+} def
+currentdict
+end
+/P5 exch def
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+  bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+  4 -2 roll mul srgb} bind def
+/reencdict 12 dict def /ReEncode { reencdict begin
+/newcodesandnames exch def /newfontname exch def /basefontname exch def
+/basefontdict basefontname findfont def /newfont basefontdict maxlength dict def
+basefontdict { exch dup /FID ne { dup /Encoding eq
+{ exch dup length array copy newfont 3 1 roll put }
+{ exch newfont 3 1 roll put } ifelse } { pop pop } ifelse } forall
+newfont /FontName newfontname put newcodesandnames aload pop
+128 1 255 { newfont /Encoding get exch /.notdef put } for
+newcodesandnames length 2 idiv { newfont /Encoding get 3 1 roll put } repeat
+newfontname newfont definefont pop end } def
+/isovec [
+8#055 /minus 8#200 /grave 8#201 /acute 8#202 /circumflex 8#203 /tilde
+8#204 /macron 8#205 /breve 8#206 /dotaccent 8#207 /dieresis
+8#210 /ring 8#211 /cedilla 8#212 /hungarumlaut 8#213 /ogonek 8#214 /caron
+8#220 /dotlessi 8#230 /oe 8#231 /OE
+8#240 /space 8#241 /exclamdown 8#242 /cent 8#243 /sterling
+8#244 /currency 8#245 /yen 8#246 /brokenbar 8#247 /section 8#250 /dieresis
+8#251 /copyright 8#252 /ordfeminine 8#253 /guillemotleft 8#254 /logicalnot
+8#255 /hyphen 8#256 /registered 8#257 /macron 8#260 /degree 8#261 /plusminus
+8#262 /twosuperior 8#263 /threesuperior 8#264 /acute 8#265 /mu 8#266 /paragraph
+8#267 /periodcentered 8#270 /cedilla 8#271 /onesuperior 8#272 /ordmasculine
+8#273 /guillemotright 8#274 /onequarter 8#275 /onehalf
+8#276 /threequarters 8#277 /questiondown 8#300 /Agrave 8#301 /Aacute
+8#302 /Acircumflex 8#303 /Atilde 8#304 /Adieresis 8#305 /Aring
+8#306 /AE 8#307 /Ccedilla 8#310 /Egrave 8#311 /Eacute
+8#312 /Ecircumflex 8#313 /Edieresis 8#314 /Igrave 8#315 /Iacute
+8#316 /Icircumflex 8#317 /Idieresis 8#320 /Eth 8#321 /Ntilde 8#322 /Ograve
+8#323 /Oacute 8#324 /Ocircumflex 8#325 /Otilde 8#326 /Odieresis 8#327 /multiply
+8#330 /Oslash 8#331 /Ugrave 8#332 /Uacute 8#333 /Ucircumflex
+8#334 /Udieresis 8#335 /Yacute 8#336 /Thorn 8#337 /germandbls 8#340 /agrave
+8#341 /aacute 8#342 /acircumflex 8#343 /atilde 8#344 /adieresis 8#345 /aring
+8#346 /ae 8#347 /ccedilla 8#350 /egrave 8#351 /eacute
+8#352 /ecircumflex 8#353 /edieresis 8#354 /igrave 8#355 /iacute
+8#356 /icircumflex 8#357 /idieresis 8#360 /eth 8#361 /ntilde 8#362 /ograve
+8#363 /oacute 8#364 /ocircumflex 8#365 /otilde 8#366 /odieresis 8#367 /divide
+8#370 /oslash 8#371 /ugrave 8#372 /uacute 8#373 /ucircumflex
+8#374 /udieresis 8#375 /yacute 8#376 /thorn 8#377 /ydieresis] def
+/Helvetica /Helvetica-iso isovec ReEncode
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+$F2psBegin
+10 setmiterlimit
+0 slj 0 slc
+ 0.06299 0.06299 sc
+%
+% Fig objects follow
+%
+% 
+% here starts figure with depth 50
+% Polyline
+7.500 slw
+gs  clippath
+3450 4020 m 3450 4080 l 3602 4080 l 3482 4050 l 3602 4020 l cp
+eoclip
+n 4230 3915 m 3825 3915 l 3960 4050 l
+ 3465 4050 l gs col0 s gr gr
+
+% arrowhead
+n 3602 4020 m 3482 4050 l 3602 4080 l  col0 s
+% Polyline
+gs  clippath
+330 5910 m 390 5910 l 390 5759 l 360 5879 l 330 5759 l cp
+eoclip
+n 360 2295 m
+ 360 5895 l gs col0 s gr gr
+
+% arrowhead
+n 330 5759 m 360 5879 l 390 5759 l 330 5759 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+n 3465 2160 m
+ 3465 6120 l gs col0 s gr 
+% Polyline
+n 1215 2160 m
+ 1215 6120 l gs col0 s gr 
+% Polyline
+n 1215 3375 m
+ 3465 3375 l gs col0 s gr 
+% Polyline
+n 1215 4050 m
+ 3465 4050 l gs col0 s gr 
+% Polyline
+n 1215 4770 m
+ 3465 4770 l gs col0 s gr 
+% Polyline
+n 1215 3375 m 3465 3375 l 3465 4050 l 1215 4050 l
+ cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
+15.00 15.00 sc P5 [16 0 0 -16 81.00 225.00] PATmp PATsp ef gr PATusp gs col0 s gr 
+% Polyline
+n 1215 4410 m
+ 3465 4410 l gs col0 s gr 
+% Polyline
+n 1215 3015 m
+ 3465 3015 l gs col0 s gr 
+% Polyline
+n 855 2295 m
+ 3465 2295 l gs col0 s gr 
+% Polyline
+n 1215 2655 m
+ 3465 2655 l gs col0 s gr 
+% Polyline
+n 1215 4770 m 3465 4770 l 3465 5445 l 1215 5445 l
+ cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
+15.00 15.00 sc P5 [16 0 0 -16 81.00 318.00] PATmp PATsp ef gr PATusp gs col0 s gr 
+% Polyline
+n 855 5445 m
+ 3465 5445 l gs col0 s gr 
+% Polyline
+n 1215 5805 m
+ 3465 5805 l gs col0 s gr 
+% Polyline
+n 7560 2160 m
+ 7560 6120 l gs col0 s gr 
+% Polyline
+n 5310 2160 m
+ 5310 6120 l gs col0 s gr 
+% Polyline
+n 5310 3375 m
+ 7560 3375 l gs col0 s gr 
+% Polyline
+n 5310 4770 m
+ 7560 4770 l gs col0 s gr 
+% Polyline
+n 5310 3015 m
+ 7560 3015 l gs col0 s gr 
+% Polyline
+n 4950 2295 m
+ 7560 2295 l gs col0 s gr 
+% Polyline
+n 5310 2655 m
+ 7560 2655 l gs col0 s gr 
+% Polyline
+n 5310 5805 m
+ 7560 5805 l gs col0 s gr 
+% Polyline
+n 5310 3735 m
+ 7560 3735 l gs col0 s gr 
+% Polyline
+n 5310 4095 m 7560 4095 l 7560 5445 l 5310 5445 l
+ cp gs /PC [[1.00 1.00 1.00] [0.00 0.00 0.00]] def
+15.00 15.00 sc P5 [16 0 0 -16 354.00 273.00] PATmp PATsp ef gr PATusp gs col0 s gr 
+% Polyline
+n 4950 5445 m
+ 7560 5445 l gs col0 s gr 
+/Helvetica-iso ff 180.00 scf sf
+3555 3870 m
+gs 1 -1 sc (Interrupt) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+315 4320 m
+gs 1 -1 sc  90.0 rot (Time) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+2340 2880 m
+gs 1 -1 sc (Frame Assembly) dup sw pop 2 div neg 0 rm  col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+2340 3240 m
+gs 1 -1 sc (Frame Sending) dup sw pop 2 div neg 0 rm  col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+2340 4275 m
+gs 1 -1 sc (ISR) dup sw pop 2 div neg 0 rm  col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+2340 4635 m
+gs 1 -1 sc (Frame Dissection) dup sw pop 2 div neg 0 rm  col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+2340 2520 m
+gs 1 -1 sc (Data Processing) dup sw pop 2 div neg 0 rm  col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+2340 5670 m
+gs 1 -1 sc (Data Processing) dup sw pop 2 div neg 0 rm  col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+2340 6030 m
+gs 1 -1 sc (...) dup sw pop 2 div neg 0 rm  col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+2340 2160 m
+gs 1 -1 sc (...) dup sw pop 2 div neg 0 rm  col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+1215 1845 m
+gs 1 -1 sc (Interrupt Operation) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+6435 5670 m
+gs 1 -1 sc (ISR) dup sw pop 2 div neg 0 rm  col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+6435 6030 m
+gs 1 -1 sc (...) dup sw pop 2 div neg 0 rm  col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+6435 2160 m
+gs 1 -1 sc (...) dup sw pop 2 div neg 0 rm  col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+6435 3240 m
+gs 1 -1 sc (Data Processing) dup sw pop 2 div neg 0 rm  col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+6435 2520 m
+gs 1 -1 sc (ISR) dup sw pop 2 div neg 0 rm  col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+6435 2880 m
+gs 1 -1 sc (Frame Dissection) dup sw pop 2 div neg 0 rm  col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+6435 3600 m
+gs 1 -1 sc (Frame Assembly) dup sw pop 2 div neg 0 rm  col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+6435 3960 m
+gs 1 -1 sc (Frame Sending) dup sw pop 2 div neg 0 rm  col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+5130 3870 m
+gs 1 -1 sc  90.0 rot (Realtime Cycle) dup sw pop 2 div neg 0 rm  col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+5310 1845 m
+gs 1 -1 sc (Interrupt-less Operation) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+1035 3870 m
+gs 1 -1 sc  90.0 rot (Realtime Cycle) dup sw pop 2 div neg 0 rm  col0 sh gr
+% here ends figure;
+$F2psEnd
+rs
+end
+showpage
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/images/interrupt.fig	Mon Sep 25 15:53:33 2006 +0000
@@ -0,0 +1,85 @@
+#FIG 3.2
+Portrait
+Center
+Metric
+A4      
+100.00
+Single
+-2
+1200 2
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 4
+	0 0 1.00 60.00 120.00
+	 4230 3915 3825 3915 3960 4050 3465 4050
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	1 1 1.00 60.00 120.00
+	 360 2295 360 5895
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 3465 2160 3465 6120
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1215 2160 1215 6120
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1215 3375 3465 3375
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1215 4050 3465 4050
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1215 4770 3465 4770
+2 2 0 1 0 7 50 -1 45 0.000 0 0 -1 0 0 5
+	 1215 3375 3465 3375 3465 4050 1215 4050 1215 3375
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1215 4410 3465 4410
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1215 3015 3465 3015
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 855 2295 3465 2295
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1215 2655 3465 2655
+2 2 0 1 0 7 50 -1 45 0.000 0 0 -1 0 0 5
+	 1215 4770 3465 4770 3465 5445 1215 5445 1215 4770
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 855 5445 3465 5445
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1215 5805 3465 5805
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 7560 2160 7560 6120
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 5310 2160 5310 6120
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 5310 3375 7560 3375
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 5310 4770 7560 4770
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 5310 3015 7560 3015
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 4950 2295 7560 2295
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 5310 2655 7560 2655
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 5310 5805 7560 5805
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 5310 3735 7560 3735
+2 2 0 1 0 7 50 -1 45 0.000 0 0 -1 0 0 5
+	 5310 4095 7560 4095 7560 5445 5310 5445 5310 4095
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 4950 5445 7560 5445
+4 0 0 50 -1 16 12 0.0000 4 150 1155 3555 3870 Interrupt\001
+4 0 0 50 -1 16 12 1.5708 4 120 705 315 4320 Time\001
+4 1 0 50 -1 16 12 0.0000 4 165 2400 2340 2880 Frame Assembly\001
+4 1 0 50 -1 16 12 0.0000 4 165 2190 2340 3240 Frame Sending\001
+4 1 0 50 -1 16 12 0.0000 4 120 540 2340 4275 ISR\001
+4 1 0 50 -1 16 12 0.0000 4 120 2490 2340 4635 Frame Dissection\001
+4 1 0 50 -1 16 12 0.0000 4 165 2370 2340 2520 Data Processing\001
+4 1 0 50 -1 16 12 0.0000 4 165 2370 2340 5670 Data Processing\001
+4 1 0 50 -1 16 12 0.0000 4 15 225 2340 6030 ...\001
+4 1 0 50 -1 16 12 0.0000 4 15 225 2340 2160 ...\001
+4 0 0 50 -1 16 12 0.0000 4 150 2640 1215 1845 Interrupt Operation\001
+4 1 0 50 -1 16 12 0.0000 4 120 540 6435 5670 ISR\001
+4 1 0 50 -1 16 12 0.0000 4 15 225 6435 6030 ...\001
+4 1 0 50 -1 16 12 0.0000 4 15 225 6435 2160 ...\001
+4 1 0 50 -1 16 12 0.0000 4 165 2370 6435 3240 Data Processing\001
+4 1 0 50 -1 16 12 0.0000 4 120 540 6435 2520 ISR\001
+4 1 0 50 -1 16 12 0.0000 4 120 2490 6435 2880 Frame Dissection\001
+4 1 0 50 -1 16 12 0.0000 4 165 2400 6435 3600 Frame Assembly\001
+4 1 0 50 -1 16 12 0.0000 4 165 2190 6435 3960 Frame Sending\001
+4 1 0 50 -1 16 12 1.5708 4 165 2160 5130 3870 Realtime Cycle\001
+4 0 0 50 -1 16 12 0.0000 4 150 3330 5310 1845 Interrupt-less Operation\001
+4 1 0 50 -1 16 12 1.5708 4 165 2160 1035 3870 Realtime Cycle\001
Binary file doc/images/interrupt.pdf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/images/master-locks.eps	Mon Sep 25 15:53:33 2006 +0000
@@ -0,0 +1,254 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: master-locks.fig
+%%Creator: fig2dev Version 3.2 Patchlevel 4
+%%CreationDate: Fri Jul 21 18:34:19 2006
+%%For: fp@jupiter (Florian Pose)
+%%BoundingBox: 0 0 365 161
+%%Magnification: 1.0000
+%%EndComments
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+
+end
+save
+newpath 0 161 moveto 0 0 lineto 365 0 lineto 365 161 lineto closepath clip newpath
+-61.6 306.9 translate
+1 -1 scale
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+  bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+  4 -2 roll mul srgb} bind def
+ /DrawEllipse {
+	/endangle exch def
+	/startangle exch def
+	/yrad exch def
+	/xrad exch def
+	/y exch def
+	/x exch def
+	/savematrix mtrx currentmatrix def
+	x y tr xrad yrad sc 0 0 1 startangle endangle arc
+	closepath
+	savematrix setmatrix
+	} def
+
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+$F2psBegin
+10 setmiterlimit
+0 slj 0 slc
+ 0.06299 0.06299 sc
+%
+% Fig objects follow
+%
+% 
+% here starts figure with depth 51
+% Polyline
+7.500 slw
+n 1140 2520 m 990 2520 990 3900 150 arcto 4 {pop} repeat
+  990 4050 3180 4050 150 arcto 4 {pop} repeat
+  3330 4050 3330 2670 150 arcto 4 {pop} repeat
+  3330 2520 1140 2520 150 arcto 4 {pop} repeat
+ cp gs col7 1.00 shd ef gr gs col0 s gr 
+% Polyline
+n 4260 2340 m 4140 2340 4140 4740 120 arcto 4 {pop} repeat
+  4140 4860 6630 4860 120 arcto 4 {pop} repeat
+  6750 4860 6750 2460 120 arcto 4 {pop} repeat
+  6750 2340 4260 2340 120 arcto 4 {pop} repeat
+ cp gs col7 1.00 shd ef gr gs col0 s gr 
+% Ellipse
+n 1665 3278 360 360 0 360 DrawEllipse gs col0 s gr
+
+/Helvetica ff 180.00 scf sf
+1665 3323 m
+gs 1 -1 sc (RT) dup sw pop 2 div neg 0 rm  col0 sh gr
+% Arc
+n 2745.0 3645.0 180.0 180.0 0.0 arc
+gs col0 s gr
+
+% Arc
+n 2745.0 3645.0 90.0 180.0 0.0 arc
+gs col0 s gr
+
+% Ellipse
+n 2745 3780 45 45 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Polyline
+n 2565 3645 m 2520 3645 2520 3915 45 arcto 4 {pop} repeat
+  2520 3960 2925 3960 45 arcto 4 {pop} repeat
+  2970 3960 2970 3690 45 arcto 4 {pop} repeat
+  2970 3645 2565 3645 45 arcto 4 {pop} repeat
+ cp gs col0 s gr 
+% Polyline
+n 2745 3780 m 2700 3915 l 2790 3915 l
+ cp gs 0.00 setgray ef gr gs col0 s gr 
+% Ellipse
+n 5445 4320 360 360 0 360 DrawEllipse gs col0 s gr
+
+/Helvetica ff 180.00 scf sf
+5445 4365 m
+gs 1 -1 sc (EoE) dup sw pop 2 div neg 0 rm  col0 sh gr
+% Ellipse
+n 5938 3231 631 444 0 360 DrawEllipse gs col0 s gr
+
+% Polyline
+2 slj
+gs  clippath
+2506 3765 m 2552 3727 l 2457 3610 l 2510 3722 l 2410 3648 l cp
+eoclip
+n 2025 3375 m 2027 3375 l 2031 3375 l 2039 3376 l 2049 3377 l 2062 3378 l
+ 2077 3381 l 2094 3384 l 2113 3390 l 2134 3398 l 2158 3408 l
+ 2185 3423 l 2216 3441 l 2250 3465 l 2277 3486 l 2304 3507 l
+ 2329 3529 l 2352 3550 l 2374 3571 l 2394 3592 l 2413 3612 l
+ 2431 3631 l 2448 3651 l 2464 3669 l 2479 3686 l 2492 3701 l
+ 2502 3713 l
+ 2520 3735 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 2410 3648 m 2510 3722 l 2457 3610 l 2410 3648 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+2942 3715 m 2971 3768 l 3103 3696 l 2984 3727 l 3075 3643 l cp
+eoclip
+n 5220 4005 m 5219 4004 l 5217 4002 l 5214 3998 l 5209 3992 l 5202 3984 l
+ 5192 3972 l 5180 3959 l 5165 3942 l 5148 3923 l 5128 3902 l
+ 5106 3879 l 5082 3854 l 5055 3829 l 5027 3802 l 4998 3774 l
+ 4967 3747 l 4934 3719 l 4899 3692 l 4863 3665 l 4826 3638 l
+ 4786 3612 l 4744 3587 l 4700 3563 l 4652 3539 l 4602 3517 l
+ 4549 3496 l 4492 3477 l 4431 3459 l 4367 3443 l 4300 3430 l
+ 4230 3420 l 4167 3414 l 4105 3410 l 4043 3409 l 3983 3411 l
+ 3925 3414 l 3868 3419 l 3814 3426 l 3761 3434 l 3710 3444 l
+ 3661 3455 l 3613 3467 l 3567 3480 l 3521 3494 l 3477 3508 l
+ 3434 3523 l 3391 3539 l 3350 3555 l 3310 3572 l 3272 3588 l
+ 3234 3605 l 3199 3621 l 3165 3637 l 3134 3652 l 3105 3666 l
+ 3078 3679 l 3055 3691 l 3034 3701 l 3017 3710 l 3003 3718 l
+ 2991 3724 l 2983 3728 l
+ 2970 3735 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 3075 3643 m 2984 3727 l 3103 3696 l 3075 3643 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+5327 3223 m 5322 3163 l 5171 3176 l 5294 3196 l 5177 3236 l cp
+eoclip
+n 2025 3285 m 2026 3285 l 2028 3285 l 2031 3285 l 2037 3285 l 2045 3285 l
+ 2056 3286 l 2070 3286 l 2087 3286 l 2108 3287 l 2132 3287 l
+ 2159 3288 l 2189 3288 l 2223 3289 l 2259 3289 l 2298 3290 l
+ 2339 3291 l 2383 3291 l 2428 3292 l 2475 3293 l 2524 3293 l
+ 2574 3294 l 2626 3295 l 2678 3295 l 2732 3296 l 2787 3296 l
+ 2843 3296 l 2900 3296 l 2958 3297 l 3018 3297 l 3079 3297 l
+ 3142 3296 l 3207 3296 l 3273 3296 l 3342 3295 l 3412 3294 l
+ 3485 3293 l 3559 3292 l 3635 3290 l 3713 3289 l 3792 3287 l
+ 3870 3285 l 3960 3282 l 4048 3280 l 4133 3277 l 4213 3273 l
+ 4289 3270 l 4361 3267 l 4430 3264 l 4494 3260 l 4555 3257 l
+ 4612 3253 l 4667 3250 l 4719 3247 l 4769 3243 l 4816 3240 l
+ 4862 3236 l 4906 3233 l 4948 3229 l 4988 3226 l 5026 3223 l
+ 5063 3219 l 5097 3216 l 5129 3213 l 5159 3210 l 5186 3208 l
+ 5211 3205 l 5233 3203 l 5252 3201 l 5268 3199 l 5281 3198 l
+ 5291 3197 l 5299 3196 l
+ 5310 3195 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 5177 3236 m 5294 3196 l 5171 3176 l 5177 3236 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+5520 3567 m 5481 3522 l 5367 3621 l 5478 3566 l 5406 3667 l cp
+eoclip
+n 5355 3960 m 5354 3958 l 5353 3952 l 5351 3944 l 5348 3932 l 5345 3917 l
+ 5342 3900 l 5340 3881 l 5338 3861 l 5338 3839 l 5338 3816 l
+ 5341 3791 l 5347 3764 l 5355 3735 l 5366 3707 l 5378 3682 l
+ 5391 3660 l 5404 3641 l 5417 3624 l 5430 3609 l 5444 3596 l
+ 5456 3584 l 5468 3574 l
+ 5490 3555 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 5406 3667 m 5478 3566 l 5367 3621 l 5406 3667 l  cp gs 0.00 setgray ef gr  col0 s
+/Helvetica ff 180.00 scf sf
+1080 2745 m
+gs 1 -1 sc (Realtime Module) col0 sh gr
+/Helvetica ff 180.00 scf sf
+4230 2565 m
+gs 1 -1 sc (Master Module) col0 sh gr
+/Helvetica ff 180.00 scf sf
+5940 3285 m
+gs 1 -1 sc (Master0) dup sw pop 2 div neg 0 rm  col0 sh gr
+% Arc
+n 4140.0 3285.0 360.0 -90.0 90.0 arc
+gs col7 1.00 shd ef gr gs col0 s gr
+
+/Helvetica ff 150.00 scf sf
+4230 3285 m
+gs 1 -1 sc  270.0 rot (ecrt) dup sw pop 2 div neg 0 rm  col0 sh gr
+% here ends figure;
+$F2psEnd
+rs
+showpage
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/images/master-locks.fig	Mon Sep 25 15:53:33 2006 +0000
@@ -0,0 +1,54 @@
+#FIG 3.2
+Portrait
+Center
+Metric
+A4      
+100.00
+Single
+-2
+1200 2
+6 1298 2911 2032 3645
+1 4 0 1 0 7 50 -1 -1 0.000 1 0.0000 1665 3278 360 360 1305 3278 2025 3278
+4 1 0 50 -1 16 12 0.0000 4 120 435 1665 3323 RT\001
+-6
+6 4095 2880 4545 3690
+5 1 0 1 0 7 49 -1 20 0.000 0 0 0 0 4140.000 3285.000 4140 2925 4500 3285 4140 3645
+4 1 0 48 -1 16 10 4.7124 4 90 420 4230 3285 ecrt\001
+-6
+6 2520 3420 2970 3960
+5 1 0 1 0 7 50 -1 -1 0.000 0 0 0 0 2745.000 3645.000 2565 3645 2745 3465 2925 3645
+5 1 0 1 0 7 50 -1 -1 0.000 0 0 0 0 2745.000 3645.000 2655 3645 2745 3555 2835 3645
+1 3 0 1 0 -1 50 -1 20 0.000 1 0.0000 2745 3780 45 45 2745 3780 2790 3780
+2 4 0 1 0 7 50 -1 -1 0.000 0 0 3 0 0 5
+	 2970 3960 2520 3960 2520 3645 2970 3645 2970 3960
+2 3 0 1 0 -1 50 -1 20 0.000 0 0 -1 0 0 4
+	 2745 3780 2700 3915 2790 3915 2745 3780
+-6
+6 5040 3915 5850 4725
+1 4 0 1 0 7 50 -1 -1 0.000 1 0.0000 5445 4320 360 360 5085 4320 5805 4320
+4 1 0 50 -1 16 12 0.0000 4 120 630 5445 4365 EoE\001
+-6
+1 2 0 1 0 7 50 -1 -1 0.000 1 0.0000 5938 3231 631 444 5307 2787 6570 3676
+2 4 0 1 0 7 51 -1 20 0.000 0 0 10 0 0 5
+	 3330 4050 990 4050 990 2520 3330 2520 3330 4050
+2 4 0 1 0 7 51 -1 20 0.000 0 0 8 0 0 5
+	 6750 4860 4140 4860 4140 2340 6750 2340 6750 4860
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 3
+	1 1 1.00 60.00 120.00
+	 2025 3375 2250 3465 2520 3735
+	 0.000 -1.000 0.000
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 3
+	1 1 1.00 60.00 120.00
+	 5220 4005 4230 3420 2970 3735
+	 0.000 -1.000 0.000
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 3
+	1 1 1.00 60.00 120.00
+	 2025 3285 3870 3285 5310 3195
+	 0.000 -1.000 0.000
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 3
+	1 1 1.00 60.00 120.00
+	 5355 3960 5355 3735 5490 3555
+	 0.000 -1.000 0.000
+4 0 0 50 -1 16 12 0.0000 4 120 2385 1080 2745 Realtime Module\001
+4 0 0 50 -1 16 12 0.0000 4 120 2085 4230 2565 Master Module\001
+4 1 0 50 -1 16 12 0.0000 4 120 1140 5940 3285 Master0\001
Binary file doc/images/master-locks.pdf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/images/masterarch.eps	Mon Sep 25 15:53:33 2006 +0000
@@ -0,0 +1,432 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: masterarch.fig
+%%Creator: fig2dev Version 3.2 Patchlevel 4
+%%CreationDate: Thu Jul 27 11:10:35 2006
+%%For: fp@jupiter (Florian Pose)
+%%BoundingBox: 0 0 393 517
+%%Magnification: 1.0000
+%%EndComments
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+
+end
+save
+newpath 0 517 moveto 0 0 lineto 393 0 lineto 393 517 lineto closepath clip newpath
+-98.5 598.1 translate
+1 -1 scale
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+  bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+  4 -2 roll mul srgb} bind def
+/reencdict 12 dict def /ReEncode { reencdict begin
+/newcodesandnames exch def /newfontname exch def /basefontname exch def
+/basefontdict basefontname findfont def /newfont basefontdict maxlength dict def
+basefontdict { exch dup /FID ne { dup /Encoding eq
+{ exch dup length array copy newfont 3 1 roll put }
+{ exch newfont 3 1 roll put } ifelse } { pop pop } ifelse } forall
+newfont /FontName newfontname put newcodesandnames aload pop
+128 1 255 { newfont /Encoding get exch /.notdef put } for
+newcodesandnames length 2 idiv { newfont /Encoding get 3 1 roll put } repeat
+newfontname newfont definefont pop end } def
+/isovec [
+8#055 /minus 8#200 /grave 8#201 /acute 8#202 /circumflex 8#203 /tilde
+8#204 /macron 8#205 /breve 8#206 /dotaccent 8#207 /dieresis
+8#210 /ring 8#211 /cedilla 8#212 /hungarumlaut 8#213 /ogonek 8#214 /caron
+8#220 /dotlessi 8#230 /oe 8#231 /OE
+8#240 /space 8#241 /exclamdown 8#242 /cent 8#243 /sterling
+8#244 /currency 8#245 /yen 8#246 /brokenbar 8#247 /section 8#250 /dieresis
+8#251 /copyright 8#252 /ordfeminine 8#253 /guillemotleft 8#254 /logicalnot
+8#255 /hyphen 8#256 /registered 8#257 /macron 8#260 /degree 8#261 /plusminus
+8#262 /twosuperior 8#263 /threesuperior 8#264 /acute 8#265 /mu 8#266 /paragraph
+8#267 /periodcentered 8#270 /cedilla 8#271 /onesuperior 8#272 /ordmasculine
+8#273 /guillemotright 8#274 /onequarter 8#275 /onehalf
+8#276 /threequarters 8#277 /questiondown 8#300 /Agrave 8#301 /Aacute
+8#302 /Acircumflex 8#303 /Atilde 8#304 /Adieresis 8#305 /Aring
+8#306 /AE 8#307 /Ccedilla 8#310 /Egrave 8#311 /Eacute
+8#312 /Ecircumflex 8#313 /Edieresis 8#314 /Igrave 8#315 /Iacute
+8#316 /Icircumflex 8#317 /Idieresis 8#320 /Eth 8#321 /Ntilde 8#322 /Ograve
+8#323 /Oacute 8#324 /Ocircumflex 8#325 /Otilde 8#326 /Odieresis 8#327 /multiply
+8#330 /Oslash 8#331 /Ugrave 8#332 /Uacute 8#333 /Ucircumflex
+8#334 /Udieresis 8#335 /Yacute 8#336 /Thorn 8#337 /germandbls 8#340 /agrave
+8#341 /aacute 8#342 /acircumflex 8#343 /atilde 8#344 /adieresis 8#345 /aring
+8#346 /ae 8#347 /ccedilla 8#350 /egrave 8#351 /eacute
+8#352 /ecircumflex 8#353 /edieresis 8#354 /igrave 8#355 /iacute
+8#356 /icircumflex 8#357 /idieresis 8#360 /eth 8#361 /ntilde 8#362 /ograve
+8#363 /oacute 8#364 /ocircumflex 8#365 /otilde 8#366 /odieresis 8#367 /divide
+8#370 /oslash 8#371 /ugrave 8#372 /uacute 8#373 /ucircumflex
+8#374 /udieresis 8#375 /yacute 8#376 /thorn 8#377 /ydieresis] def
+/Helvetica /Helvetica-iso isovec ReEncode
+/Courier /Courier-iso isovec ReEncode
+ /DrawEllipse {
+	/endangle exch def
+	/startangle exch def
+	/yrad exch def
+	/xrad exch def
+	/y exch def
+	/x exch def
+	/savematrix mtrx currentmatrix def
+	x y tr xrad yrad sc 0 0 1 startangle endangle arc
+	closepath
+	savematrix setmatrix
+	} def
+
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+$F2psBegin
+10 setmiterlimit
+0 slj 0 slc
+ 0.06299 0.06299 sc
+%
+% Fig objects follow
+%
+% 
+% here starts figure with depth 50
+% Polyline
+7.500 slw
+n 5175 7965 m 5760 7965 l 5760 8775 l 5175 8775 l 5175 8415 l 5085 8415 l
+ 5085 7965 l
+ cp gs col0 s gr 
+% Polyline
+n 5490 8190 m 5670 8190 l 5670 8370 l 5490 8370 l
+ cp gs col0 s gr 
+% Polyline
+n 5310 8505 m 5400 8505 l 5400 8595 l 5310 8595 l
+ cp gs col0 s gr 
+% Polyline
+n 5175 8055 m
+ 5085 8055 l gs col0 s gr 
+% Polyline
+n 5175 8145 m
+ 5085 8145 l gs col0 s gr 
+% Polyline
+n 5175 8190 m
+ 5085 8190 l gs col0 s gr 
+% Polyline
+n 5175 8280 m
+ 5085 8280 l gs col0 s gr 
+% Polyline
+n 5175 8235 m
+ 5085 8235 l gs col0 s gr 
+% Polyline
+n 5175 8100 m
+ 5085 8100 l gs col0 s gr 
+% Polyline
+n 5175 8010 m
+ 5085 8010 l gs col0 s gr 
+% Polyline
+n 5175 8325 m
+ 5085 8325 l gs col0 s gr 
+% Polyline
+n 5175 8370 m
+ 5085 8370 l gs col0 s gr 
+% Polyline
+n 5850 8775 m 5085 8775 l 5085 8815 l 5850 8815 l
+ cp gs col0 s gr 
+% Polyline
+n 6525 7965 m 7110 7965 l 7110 8775 l 6525 8775 l 6525 8415 l 6435 8415 l
+ 6435 7965 l
+ cp gs col0 s gr 
+% Polyline
+n 6840 8190 m 7020 8190 l 7020 8370 l 6840 8370 l
+ cp gs col0 s gr 
+% Polyline
+n 6660 8505 m 6750 8505 l 6750 8595 l 6660 8595 l
+ cp gs col0 s gr 
+% Polyline
+n 6525 8055 m
+ 6435 8055 l gs col0 s gr 
+% Polyline
+n 6525 8145 m
+ 6435 8145 l gs col0 s gr 
+% Polyline
+n 6525 8190 m
+ 6435 8190 l gs col0 s gr 
+% Polyline
+n 6525 8280 m
+ 6435 8280 l gs col0 s gr 
+% Polyline
+n 6525 8235 m
+ 6435 8235 l gs col0 s gr 
+% Polyline
+n 6525 8100 m
+ 6435 8100 l gs col0 s gr 
+% Polyline
+n 6525 8010 m
+ 6435 8010 l gs col0 s gr 
+% Polyline
+n 6525 8325 m
+ 6435 8325 l gs col0 s gr 
+% Polyline
+n 6525 8370 m
+ 6435 8370 l gs col0 s gr 
+% Polyline
+n 7200 8775 m 6435 8775 l 6435 8815 l 7200 8815 l
+ cp gs col0 s gr 
+% Arc
+n 5445.0 5985.0 495.0 180.0 0.0 arc
+gs col0 s gr
+
+/Helvetica-iso ff 150.00 scf sf
+5445 5760 m
+gs 1 -1 sc (Device) dup sw pop 2 div neg 0 rm  col0 sh gr
+/Helvetica-iso ff 150.00 scf sf
+5445 5925 m
+gs 1 -1 sc (Interface) dup sw pop 2 div neg 0 rm  col0 sh gr
+% Arc
+n 3958.1 4815.0 496.9 -95.0 95.0 arc
+gs col0 s gr
+
+/Helvetica-iso ff 150.00 scf sf
+4162 4822 m
+gs 1 -1 sc  270.0 rot (Realtime) dup sw pop 2 div neg 0 rm  col0 sh gr
+/Helvetica-iso ff 150.00 scf sf
+3997 4822 m
+gs 1 -1 sc  270.0 rot (Interface) dup sw pop 2 div neg 0 rm  col0 sh gr
+% Arc
+n 5175.0 2655.0 630.0 0.0 180.0 arc
+gs col0 s gr
+
+/Helvetica-iso ff 180.00 scf sf
+5175 3105 m
+gs 1 -1 sc (Interface) dup sw pop 2 div neg 0 rm  col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+5175 2880 m
+gs 1 -1 sc (Sysfs) dup sw pop 2 div neg 0 rm  col0 sh gr
+% Polyline
+ [60] 0 sd
+n 7785 2655 m
+ 1575 2655 l gs col0 s gr  [] 0 sd
+/Helvetica-iso ff 180.00 scf sf
+1665 2880 m
+gs 1 -1 sc (Kernel-Space) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+1665 2565 m
+gs 1 -1 sc (User-Space) col0 sh gr
+% Ellipse
+n 5175 1800 495 495 0 360 DrawEllipse gs col0 s gr
+
+/Helvetica-iso ff 180.00 scf sf
+5175 1845 m
+gs 1 -1 sc (lsec) dup sw pop 2 div neg 0 rm  col0 sh gr
+% Arc
+n 7245.0 5985.0 270.0 180.0 0.0 arc
+gs col0 s gr
+
+% Ellipse
+n 5445 4815 810 495 0 360 DrawEllipse gs col0 s gr
+
+% Polyline
+n 5445 7965 m
+ 5445 7425 l gs col0 s gr 
+% Polyline
+n 6795 7965 m
+ 6795 7425 l gs col0 s gr 
+% Polyline
+n 5445 6885 m
+ 5445 5985 l gs col0 s gr 
+% Polyline
+n 5535 8820 m 5625 8820 l 5625 8910 l 5535 8910 l
+ cp gs col0 s gr 
+% Polyline
+n 6885 8820 m 6975 8820 l 6975 8910 l 6885 8910 l
+ cp gs col0 s gr 
+% Polyline
+n 7245 6885 m
+ 7245 5985 l gs col0 s gr 
+% Polyline
+n 4740 6345 m 4635 6345 4635 7500 105 arcto 4 {pop} repeat
+  4635 7605 7500 7605 105 arcto 4 {pop} repeat
+  7605 7605 7605 6450 105 arcto 4 {pop} repeat
+  7605 6345 4740 6345 105 arcto 4 {pop} repeat
+ cp gs col0 s gr 
+% Polyline
+n 4905 6885 m 5985 6885 l 5985 7425 l 4905 7425 l
+ cp gs col0 s gr 
+% Polyline
+n 6255 6885 m 7335 6885 l 7335 7425 l 6255 7425 l
+ cp gs col0 s gr 
+% Polyline
+n 5445 5490 m
+ 5445 5310 l gs col0 s gr 
+% Polyline
+n 4035 3645 m 3915 3645 3915 5865 120 arcto 4 {pop} repeat
+  3915 5985 6315 5985 120 arcto 4 {pop} repeat
+  6435 5985 6435 3765 120 arcto 4 {pop} repeat
+  6435 3645 4035 3645 120 arcto 4 {pop} repeat
+ cp gs col0 s gr 
+% Polyline
+n 4635 4815 m
+ 4455 4815 l gs col0 s gr 
+% Polyline
+n 3915 4815 m
+ 3465 4815 l gs col0 s gr 
+% Polyline
+n 7605 3645 m 6885 3645 l 6885 5985 l 7605 5985 l
+ cp gs col0 s gr 
+% Polyline
+ [60] 0 sd
+n 1575 7785 m
+ 7785 7785 l gs col0 s gr  [] 0 sd
+% Polyline
+n 1890 3645 m 1755 3645 1755 5850 135 arcto 4 {pop} repeat
+  1755 5985 3330 5985 135 arcto 4 {pop} repeat
+  3465 5985 3465 3780 135 arcto 4 {pop} repeat
+  3465 3645 1890 3645 135 arcto 4 {pop} repeat
+ cp gs col0 s gr 
+% Polyline
+ [60] 0 sd
+n 1575 8280 m
+ 1575 2205 l gs col0 s gr  [] 0 sd
+% Polyline
+n 5175 3285 m
+ 5175 3645 l gs col0 s gr 
+% Polyline
+ [60] 0 sd
+n 7785 8280 m
+ 7785 2205 l gs col0 s gr  [] 0 sd
+% Polyline
+n 5175 2655 m
+ 5175 2295 l gs col0 s gr 
+% Polyline
+2 slj
+n 5580 8910 m 5580 8911 l 5579 8912 l 5579 8915 l 5577 8918 l 5575 8923 l
+ 5572 8929 l 5568 8936 l 5564 8944 l 5557 8952 l 5550 8961 l
+ 5541 8970 l 5530 8979 l 5516 8988 l 5500 8997 l 5480 9007 l
+ 5456 9016 l 5427 9026 l 5393 9036 l 5355 9045 l 5320 9052 l
+ 5284 9059 l 5248 9064 l 5213 9069 l 5178 9073 l 5144 9076 l
+ 5110 9079 l 5077 9081 l 5044 9083 l 5012 9085 l 4981 9086 l
+ 4950 9087 l 4920 9088 l 4892 9089 l 4866 9089 l 4843 9089 l
+ 4822 9090 l 4805 9090 l 4791 9090 l 4782 9090 l 4775 9090 l
+ 4772 9090 l
+ 4770 9090 l gs col0 s gr 
+% Polyline
+n 6931 8910 m 6931 8912 l 6931 8914 l 6931 8917 l 6930 8921 l 6929 8927 l
+ 6928 8934 l 6926 8943 l 6924 8953 l 6921 8964 l 6917 8976 l
+ 6911 8989 l 6905 9003 l 6897 9017 l 6887 9032 l 6876 9047 l
+ 6862 9062 l 6846 9078 l 6827 9094 l 6805 9110 l 6780 9126 l
+ 6750 9143 l 6716 9160 l 6676 9178 l 6631 9196 l 6580 9214 l
+ 6523 9233 l 6459 9252 l 6390 9270 l 6335 9283 l 6278 9296 l
+ 6220 9308 l 6161 9319 l 6103 9330 l 6044 9339 l 5986 9349 l
+ 5929 9357 l 5872 9365 l 5815 9372 l 5759 9379 l 5704 9385 l
+ 5649 9391 l 5594 9396 l 5540 9401 l 5486 9406 l 5432 9410 l
+ 5380 9414 l 5327 9418 l 5276 9422 l 5226 9425 l 5177 9428 l
+ 5130 9431 l 5084 9434 l 5041 9436 l 5000 9439 l 4962 9441 l
+ 4927 9442 l 4896 9444 l 4868 9445 l 4844 9447 l 4824 9448 l
+ 4807 9448 l 4794 9449 l 4784 9449 l 4778 9450 l 4773 9450 l
+ 4771 9450 l
+ 4770 9450 l gs col0 s gr 
+/Helvetica-iso ff 150.00 scf sf
+5445 7200 m
+gs 1 -1 sc (net_device) dup sw pop 2 div neg 0 rm  col0 sh gr
+/Helvetica-iso ff 150.00 scf sf
+6795 7200 m
+gs 1 -1 sc (net_device) dup sw pop 2 div neg 0 rm  col0 sh gr
+/Courier-iso ff 150.00 scf sf
+5355 6210 m
+gs 1 -1 sc (ecdev_*\(\)) dup sw pop neg 0 rm  col0 sh gr
+/Courier-iso ff 150.00 scf sf
+7110 6210 m
+gs 1 -1 sc (netif_*\(\)) dup sw pop neg 0 rm  col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+6345 6570 m
+gs 1 -1 sc (EtherCAT Network) dup sw pop 2 div neg 0 rm  col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+6345 6750 m
+gs 1 -1 sc (Driver Module) dup sw pop 2 div neg 0 rm  col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+5445 4860 m
+gs 1 -1 sc (Master0) dup sw pop 2 div neg 0 rm  col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+4005 3870 m
+gs 1 -1 sc (EtherCAT Master Module) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+7290 4815 m
+gs 1 -1 sc  90.0 rot (Network Stack) dup sw pop 2 div neg 0 rm  col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+4725 9135 m
+gs 1 -1 sc (EtherCAT) dup sw pop neg 0 rm  col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+4725 9495 m
+gs 1 -1 sc (Ethernet) dup sw pop neg 0 rm  col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+4995 8100 m
+gs 1 -1 sc (NIC) dup sw pop neg 0 rm  col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+6345 8100 m
+gs 1 -1 sc (NIC) dup sw pop neg 0 rm  col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+1665 8010 m
+gs 1 -1 sc (Hardware) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+1845 3870 m
+gs 1 -1 sc (Realtime Module) col0 sh gr
+/Courier-iso ff 150.00 scf sf
+3645 4725 m
+gs 1 -1 sc  270.0 rot (ecrt_*\(\)) dup sw pop neg 0 rm  col0 sh gr
+% here ends figure;
+$F2psEnd
+rs
+showpage
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/images/masterarch.fig	Mon Sep 25 15:53:33 2006 +0000
@@ -0,0 +1,156 @@
+#FIG 3.2
+Portrait
+Center
+Metric
+A4      
+100.00
+Single
+-2
+1200 2
+5 1 0 1 0 7 50 -1 -1 0.000 0 0 0 0 7245.000 5985.000 6975 5985 7245 5715 7515 5985
+6 5085 7965 5850 8820
+2 3 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 8
+	 5175 7965 5760 7965 5760 8775 5175 8775 5175 8415 5085 8415
+	 5085 7965 5175 7965
+2 2 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 5
+	 5490 8190 5670 8190 5670 8370 5490 8370 5490 8190
+2 2 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 5
+	 5310 8505 5400 8505 5400 8595 5310 8595 5310 8505
+2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
+	 5175 8055 5085 8055
+2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
+	 5175 8145 5085 8145
+2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
+	 5175 8190 5085 8190
+2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
+	 5175 8280 5085 8280
+2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
+	 5175 8235 5085 8235
+2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
+	 5175 8100 5085 8100
+2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
+	 5175 8010 5085 8010
+2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
+	 5175 8325 5085 8325
+2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
+	 5175 8370 5085 8370
+2 2 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 5
+	 5850 8775 5085 8775 5085 8815 5850 8815 5850 8775
+-6
+6 6435 7965 7200 8820
+2 3 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 8
+	 6525 7965 7110 7965 7110 8775 6525 8775 6525 8415 6435 8415
+	 6435 7965 6525 7965
+2 2 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 5
+	 6840 8190 7020 8190 7020 8370 6840 8370 6840 8190
+2 2 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 5
+	 6660 8505 6750 8505 6750 8595 6660 8595 6660 8505
+2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
+	 6525 8055 6435 8055
+2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
+	 6525 8145 6435 8145
+2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
+	 6525 8190 6435 8190
+2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
+	 6525 8280 6435 8280
+2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
+	 6525 8235 6435 8235
+2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
+	 6525 8100 6435 8100
+2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
+	 6525 8010 6435 8010
+2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
+	 6525 8325 6435 8325
+2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
+	 6525 8370 6435 8370
+2 2 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 5
+	 7200 8775 6435 8775 6435 8815 7200 8815 7200 8775
+-6
+6 4905 5445 5985 6030
+5 1 0 1 0 7 50 -1 -1 0.000 0 0 0 0 5445.000 5985.000 4950 5985 5445 5490 5940 5985
+4 1 0 50 -1 16 10 0.0000 4 105 795 5445 5760 Device\001
+4 1 0 50 -1 16 10 0.0000 4 105 975 5445 5925 Interface\001
+-6
+6 3870 4275 4500 5355
+5 1 0 1 0 7 50 -1 -1 0.000 0 0 0 0 3958.125 4815.000 3915 4320 4455 4815 3915 5310
+4 1 0 50 -1 16 10 4.7124 4 105 1020 4162 4822 Realtime\001
+4 1 0 50 -1 16 10 4.7124 4 105 975 3997 4822 Interface\001
+-6
+6 4500 2610 5850 3330
+5 1 0 1 0 7 50 -1 -1 0.000 0 0 0 0 5175.000 2655.000 5805 2655 5175 3285 4545 2655
+4 1 0 50 -1 16 12 0.0000 4 120 1215 5175 3105 Interface\001
+4 1 0 50 -1 16 12 0.0000 4 165 795 5175 2880 Sysfs\001
+-6
+6 1575 2430 7785 2925
+2 1 1 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
+	 7785 2655 1575 2655
+4 0 0 50 -1 16 12 0.0000 4 150 1980 1665 2880 Kernel-Space\001
+4 0 0 50 -1 16 12 0.0000 4 150 1725 1665 2565 User-Space\001
+-6
+6 4635 1260 5715 2340
+1 2 0 1 0 7 50 -1 -1 4.000 1 0.0000 5175 1800 495 495 5670 2295 4680 1305
+4 1 0 50 -1 16 12 0.0000 4 120 585 5175 1845 lsec\001
+-6
+1 2 0 1 0 7 50 -1 -1 0.000 1 0.0000 5445 4815 810 495 4635 4320 6255 5310
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 5445 7965 5445 7425
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 6795 7965 6795 7425
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 5445 6885 5445 5985
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 5535 8820 5625 8820 5625 8910 5535 8910 5535 8820
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 6885 8820 6975 8820 6975 8910 6885 8910 6885 8820
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 7245 6885 7245 5985
+2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
+	 7605 7605 7605 6345 4635 6345 4635 7605 7605 7605
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 4905 6885 5985 6885 5985 7425 4905 7425 4905 6885
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 6255 6885 7335 6885 7335 7425 6255 7425 6255 6885
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 5445 5490 5445 5310
+2 4 0 1 0 7 50 -1 -1 0.000 0 0 8 0 0 5
+	 6435 5985 6435 3645 3915 3645 3915 5985 6435 5985
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 4635 4815 4455 4815
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 3915 4815 3465 4815
+2 2 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 5
+	 7605 3645 6885 3645 6885 5985 7605 5985 7605 3645
+2 1 1 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
+	 1575 7785 7785 7785
+2 4 0 1 0 7 50 -1 -1 0.000 0 0 9 0 0 5
+	 1755 5985 1755 3645 3465 3645 3465 5985 1755 5985
+2 1 1 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
+	 1575 8280 1575 2205
+2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
+	 5175 3285 5175 3645
+2 1 1 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
+	 7785 8280 7785 2205
+2 1 0 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 2
+	 5175 2655 5175 2295
+3 2 0 1 0 7 50 -1 -1 0.000 0 0 0 3
+	 5580 8910 5355 9045 4770 9090
+	 0.000 -1.000 0.000
+3 2 0 1 0 7 50 -1 -1 0.000 0 0 0 3
+	 6931 8910 6390 9270 4770 9450
+	 0.000 -1.000 0.000
+4 1 0 50 -1 16 10 0.0000 4 135 1215 5445 7200 net_device\001
+4 1 0 50 -1 16 10 0.0000 4 135 1215 6795 7200 net_device\001
+4 2 0 50 -1 12 10 0.0000 4 105 1080 5355 6210 ecdev_*()\001
+4 2 0 50 -1 12 10 0.0000 4 105 1080 7110 6210 netif_*()\001
+4 1 0 50 -1 16 12 0.0000 4 120 2685 6345 6570 EtherCAT Network\001
+4 1 0 50 -1 16 12 0.0000 4 120 1995 6345 6750 Driver Module\001
+4 1 0 50 -1 16 12 0.0000 4 120 1140 5445 4860 Master0\001
+4 0 0 50 -1 16 12 0.0000 4 120 3585 4005 3870 EtherCAT Master Module\001
+4 1 0 50 -1 16 12 1.5708 4 120 2070 7290 4815 Network Stack\001
+4 2 0 50 -1 16 12 0.0000 4 120 1425 4725 9135 EtherCAT\001
+4 2 0 50 -1 16 12 0.0000 4 120 1200 4725 9495 Ethernet\001
+4 2 0 50 -1 16 12 0.0000 4 120 555 4995 8100 NIC\001
+4 2 0 50 -1 16 12 0.0000 4 120 555 6345 8100 NIC\001
+4 0 0 50 -1 16 12 0.0000 4 120 1410 1665 8010 Hardware\001
+4 0 0 50 -1 16 12 0.0000 4 120 2385 1845 3870 Realtime Module\001
+4 2 0 50 -1 12 10 4.7124 4 105 960 3645 4725 ecrt_*()\001
Binary file doc/images/masterarch.pdf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/images/masters.eps	Mon Sep 25 15:53:33 2006 +0000
@@ -0,0 +1,140 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: masters.fig
+%%Creator: fig2dev Version 3.2 Patchlevel 4
+%%CreationDate: Thu Jul 27 11:18:48 2006
+%%For: fp@jupiter (Florian Pose)
+%%BoundingBox: 0 0 278 143
+%%Magnification: 1.0000
+%%EndComments
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+
+end
+save
+newpath 0 143 moveto 0 0 lineto 278 0 lineto 278 143 lineto closepath clip newpath
+-98.5 221.9 translate
+1 -1 scale
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+  bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+  4 -2 roll mul srgb} bind def
+ /DrawEllipse {
+	/endangle exch def
+	/startangle exch def
+	/yrad exch def
+	/xrad exch def
+	/y exch def
+	/x exch def
+	/savematrix mtrx currentmatrix def
+	x y tr xrad yrad sc 0 0 1 startangle endangle arc
+	closepath
+	savematrix setmatrix
+	} def
+
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+$F2psBegin
+10 setmiterlimit
+0 slj 0 slc
+ 0.06299 0.06299 sc
+%
+% Fig objects follow
+%
+% 
+% here starts figure with depth 50
+% Ellipse
+7.500 slw
+n 3037 2700 697 337 0 360 DrawEllipse gs col0 s gr
+
+/Helvetica ff 180.00 scf sf
+3015 2790 m
+gs 1 -1 sc (master 0) dup sw pop 2 div neg 0 rm  col0 sh gr
+% Ellipse
+n 4747 2700 697 337 0 360 DrawEllipse gs col0 s gr
+
+/Helvetica ff 180.00 scf sf
+4770 2790 m
+gs 1 -1 sc (master 1) dup sw pop 2 div neg 0 rm  col0 sh gr
+% Polyline
+n 2265 1890 m 2160 1890 2160 3135 105 arcto 4 {pop} repeat
+  2160 3240 5520 3240 105 arcto 4 {pop} repeat
+  5625 3240 5625 1995 105 arcto 4 {pop} repeat
+  5625 1890 2265 1890 105 arcto 4 {pop} repeat
+ cp gs col0 s gr 
+% Polyline
+ [60] 0 sd
+n 1575 1275 m 5895 1275 l 5895 3510 l 1575 3510 l
+ cp gs col0 s gr  [] 0 sd
+/Helvetica ff 180.00 scf sf
+2295 2115 m
+gs 1 -1 sc (EtherCAT master module) col0 sh gr
+/Helvetica ff 180.00 scf sf
+1710 1530 m
+gs 1 -1 sc (Kernel space) col0 sh gr
+% here ends figure;
+$F2psEnd
+rs
+showpage
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/images/masters.fig	Mon Sep 25 15:53:33 2006 +0000
@@ -0,0 +1,23 @@
+#FIG 3.2
+Portrait
+Center
+Metric
+A4      
+100.00
+Single
+-2
+1200 2
+6 2295 2340 3780 3060
+1 2 0 1 0 7 50 -1 -1 0.000 1 0.0000 3037 2700 697 337 2340 2700 3734 2700
+4 1 0 50 -1 16 12 0.0000 4 120 1215 3015 2790 master 0\001
+-6
+6 4005 2340 5490 3060
+1 2 0 1 0 7 50 -1 -1 0.000 1 0.0000 4747 2700 697 337 4050 2700 5444 2700
+4 1 0 50 -1 16 12 0.0000 4 120 1215 4770 2790 master 1\001
+-6
+2 4 0 1 0 7 50 -1 -1 0.000 0 0 7 0 0 5
+	 5625 3240 5625 1890 2160 1890 2160 3240 5625 3240
+2 2 1 1 0 7 50 -1 -1 4.000 0 0 -1 0 0 5
+	 1575 1275 5895 1275 5895 3510 1575 3510 1575 1275
+4 0 0 50 -1 16 12 0.0000 4 120 3585 2295 2115 EtherCAT master module\001
+4 0 0 50 -1 16 12 0.0000 4 150 1890 1710 1530 Kernel space\001
Binary file doc/images/masters.pdf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/images/modes.eps	Mon Sep 25 15:53:33 2006 +0000
@@ -0,0 +1,254 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: modes.fig
+%%Creator: fig2dev Version 3.2 Patchlevel 4
+%%CreationDate: Sat Aug  5 17:19:24 2006
+%%For: fp@jupiter (Florian Pose)
+%%BoundingBox: 0 0 428 87
+%%Magnification: 1.0000
+%%EndComments
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+/col32 {0.555 0.555 0.555 srgb} bind def
+
+end
+save
+newpath 0 87 moveto 0 0 lineto 428 0 lineto 428 87 lineto closepath clip newpath
+-69.2 130.4 translate
+1 -1 scale
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+  bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+  4 -2 roll mul srgb} bind def
+ /DrawEllipse {
+	/endangle exch def
+	/startangle exch def
+	/yrad exch def
+	/xrad exch def
+	/y exch def
+	/x exch def
+	/savematrix mtrx currentmatrix def
+	x y tr xrad yrad sc 0 0 1 startangle endangle arc
+	closepath
+	savematrix setmatrix
+	} def
+
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+$F2psBegin
+10 setmiterlimit
+0 slj 0 slc
+ 0.06299 0.06299 sc
+%
+% Fig objects follow
+%
+% 
+% here starts figure with depth 100
+% Polyline
+7.500 slw
+n 1500 1125 m 1395 1125 1395 1560 105 arcto 4 {pop} repeat
+  1395 1665 2370 1665 105 arcto 4 {pop} repeat
+  2475 1665 2475 1230 105 arcto 4 {pop} repeat
+  2475 1125 1500 1125 105 arcto 4 {pop} repeat
+ cp gs col7 1.00 shd ef gr gs col0 s gr 
+/Helvetica ff 180.00 scf sf
+1935 1462 m
+gs 1 -1 sc (Orphaned) dup sw pop 2 div neg 0 rm  col0 sh gr
+% Polyline
+n 4110 1125 m 4005 1125 4005 1560 105 arcto 4 {pop} repeat
+  4005 1665 4980 1665 105 arcto 4 {pop} repeat
+  5085 1665 5085 1230 105 arcto 4 {pop} repeat
+  5085 1125 4110 1125 105 arcto 4 {pop} repeat
+ cp gs col7 1.00 shd ef gr gs col0 s gr 
+/Helvetica ff 180.00 scf sf
+4545 1462 m
+gs 1 -1 sc (Idle) dup sw pop 2 div neg 0 rm  col0 sh gr
+% Polyline
+n 6720 1125 m 6615 1125 6615 1560 105 arcto 4 {pop} repeat
+  6615 1665 7590 1665 105 arcto 4 {pop} repeat
+  7695 1665 7695 1230 105 arcto 4 {pop} repeat
+  7695 1125 6720 1125 105 arcto 4 {pop} repeat
+ cp gs col7 1.00 shd ef gr gs col0 s gr 
+/Helvetica ff 180.00 scf sf
+7155 1462 m
+gs 1 -1 sc (Operation) dup sw pop 2 div neg 0 rm  col0 sh gr
+% here ends figure;
+% 
+% here starts figure with depth 50
+% Ellipse
+7.500 slw
+n 1170 810 64 64 0 360 DrawEllipse gs 0.00 setgray ef gr gs col0 s gr
+
+% Polyline
+2 slj
+gs  clippath
+4049 1158 m 4077 1105 l 3944 1034 l 4036 1117 l 3916 1087 l cp
+eoclip
+n 2430 1125 m 2431 1124 l 2434 1123 l 2438 1121 l 2445 1117 l 2455 1112 l
+ 2468 1105 l 2484 1097 l 2502 1087 l 2524 1077 l 2548 1065 l
+ 2574 1053 l 2603 1040 l 2633 1027 l 2664 1013 l 2697 1000 l
+ 2731 988 l 2767 975 l 2804 963 l 2843 952 l 2884 942 l
+ 2927 932 l 2973 923 l 3021 916 l 3072 909 l 3126 904 l
+ 3182 901 l 3240 900 l 3298 901 l 3354 904 l 3408 909 l
+ 3459 916 l 3507 923 l 3553 932 l 3596 942 l 3637 952 l
+ 3676 963 l 3713 975 l 3749 988 l 3783 1000 l 3816 1013 l
+ 3848 1027 l 3877 1040 l 3906 1053 l 3932 1065 l 3956 1077 l
+ 3978 1087 l 3996 1097 l 4012 1105 l 4025 1112 l 4035 1117 l
+
+ 4050 1125 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 3916 1087 m 4036 1117 l 3944 1034 l 3916 1087 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+6659 1158 m 6687 1105 l 6554 1034 l 6646 1117 l 6526 1087 l cp
+eoclip
+n 5040 1125 m 5041 1124 l 5044 1123 l 5048 1121 l 5055 1117 l 5065 1112 l
+ 5078 1105 l 5094 1097 l 5112 1087 l 5134 1077 l 5158 1065 l
+ 5184 1053 l 5213 1040 l 5243 1027 l 5274 1013 l 5307 1000 l
+ 5341 988 l 5377 975 l 5414 963 l 5453 952 l 5494 942 l
+ 5537 932 l 5583 923 l 5631 916 l 5682 909 l 5736 904 l
+ 5792 901 l 5850 900 l 5908 901 l 5964 904 l 6018 909 l
+ 6069 916 l 6117 923 l 6163 932 l 6206 942 l 6247 952 l
+ 6286 963 l 6323 975 l 6359 988 l 6393 1000 l 6426 1013 l
+ 6458 1027 l 6487 1040 l 6516 1053 l 6542 1065 l 6566 1077 l
+ 6588 1087 l 6606 1097 l 6622 1105 l 6635 1112 l 6645 1117 l
+
+ 6660 1125 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 6526 1087 m 6646 1117 l 6554 1034 l 6526 1087 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+1426 1155 m 1472 1116 l 1373 1002 l 1429 1113 l 1328 1041 l cp
+eoclip
+n 1170 810 m
+ 1440 1125 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 1328 1041 m 1429 1113 l 1373 1002 l 1328 1041 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+2430 1631 m 2402 1684 l 2535 1755 l 2444 1673 l 2564 1703 l cp
+eoclip
+n 4050 1665 m 4049 1666 l 4046 1667 l 4042 1669 l 4035 1673 l 4025 1678 l
+ 4012 1685 l 3996 1693 l 3978 1703 l 3956 1713 l 3932 1725 l
+ 3906 1737 l 3877 1750 l 3847 1763 l 3816 1777 l 3783 1790 l
+ 3749 1802 l 3713 1815 l 3676 1827 l 3637 1838 l 3596 1848 l
+ 3553 1858 l 3507 1867 l 3459 1874 l 3408 1881 l 3354 1886 l
+ 3298 1889 l 3240 1890 l 3182 1889 l 3126 1886 l 3072 1881 l
+ 3021 1874 l 2973 1867 l 2927 1858 l 2884 1848 l 2843 1838 l
+ 2804 1827 l 2767 1815 l 2731 1802 l 2697 1790 l 2664 1777 l
+ 2632 1763 l 2603 1750 l 2574 1737 l 2548 1725 l 2524 1713 l
+ 2502 1703 l 2484 1693 l 2468 1685 l 2455 1678 l 2445 1673 l
+
+ 2430 1665 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 2564 1703 m 2444 1673 l 2535 1755 l 2564 1703 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+5040 1631 m 5012 1684 l 5145 1755 l 5054 1673 l 5174 1703 l cp
+eoclip
+n 6660 1665 m 6659 1666 l 6656 1667 l 6652 1669 l 6645 1673 l 6635 1678 l
+ 6622 1685 l 6606 1693 l 6588 1703 l 6566 1713 l 6542 1725 l
+ 6516 1737 l 6487 1750 l 6457 1763 l 6426 1777 l 6393 1790 l
+ 6359 1802 l 6323 1815 l 6286 1827 l 6247 1838 l 6206 1848 l
+ 6163 1858 l 6117 1867 l 6069 1874 l 6018 1881 l 5964 1886 l
+ 5908 1889 l 5850 1890 l 5792 1889 l 5736 1886 l 5682 1881 l
+ 5631 1874 l 5583 1867 l 5537 1858 l 5494 1848 l 5453 1838 l
+ 5414 1827 l 5377 1815 l 5341 1802 l 5307 1790 l 5274 1777 l
+ 5242 1763 l 5213 1750 l 5184 1737 l 5158 1725 l 5134 1713 l
+ 5112 1703 l 5094 1693 l 5078 1685 l 5065 1678 l 5055 1673 l
+
+ 5040 1665 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 5174 1703 m 5054 1673 l 5145 1755 l 5174 1703 l  cp gs 0.00 setgray ef gr  col0 s
+/Helvetica ff 180.00 scf sf
+3240 810 m
+gs 1 -1 sc (Device connection) dup sw pop 2 div neg 0 rm  col0 sh gr
+/Helvetica ff 180.00 scf sf
+5850 810 m
+gs 1 -1 sc (Master request) dup sw pop 2 div neg 0 rm  col0 sh gr
+/Helvetica ff 180.00 scf sf
+3240 2070 m
+gs 1 -1 sc (Device disconnection) dup sw pop 2 div neg 0 rm  col0 sh gr
+/Helvetica ff 180.00 scf sf
+5850 2070 m
+gs 1 -1 sc (Master release) dup sw pop 2 div neg 0 rm  col0 sh gr
+% here ends figure;
+$F2psEnd
+rs
+showpage
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/images/modes.fig	Mon Sep 25 15:53:33 2006 +0000
@@ -0,0 +1,50 @@
+#FIG 3.2
+Portrait
+Center
+Metric
+A4      
+100.00
+Single
+-2
+1200 2
+0 32 #8e8e8e
+6 1215 1125 2655 1665
+2 4 0 1 0 7 100 0 20 4.000 0 0 7 0 0 5
+	 2475 1665 2475 1125 1395 1125 1395 1665 2475 1665
+4 1 0 100 0 16 12 0.0000 4 150 1440 1935 1462 Orphaned\001
+-6
+6 4005 1125 5085 1665
+2 4 0 1 0 7 100 0 20 4.000 0 0 7 0 0 5
+	 5085 1665 5085 1125 4005 1125 4005 1665 5085 1665
+4 1 0 100 0 16 12 0.0000 4 120 510 4545 1462 Idle\001
+-6
+6 6450 1125 7860 1665
+2 4 0 1 0 7 100 0 20 4.000 0 0 7 0 0 5
+	 7695 1665 7695 1125 6615 1125 6615 1665 7695 1665
+4 1 0 100 0 16 12 0.0000 4 150 1410 7155 1462 Operation\001
+-6
+1 3 0 1 0 0 50 -1 20 0.000 1 0.0000 1170 810 64 64 1170 810 1125 765
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 3
+	1 1 1.00 60.00 120.00
+	 2430 1125 3240 900 4050 1125
+	 0.000 -1.000 0.000
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 3
+	1 1 1.00 60.00 120.00
+	 5040 1125 5850 900 6660 1125
+	 0.000 -1.000 0.000
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 2
+	1 1 1.00 60.00 120.00
+	 1170 810 1440 1125
+	 0.000 0.000
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 3
+	1 1 1.00 60.00 120.00
+	 4050 1665 3240 1890 2430 1665
+	 0.000 -1.000 0.000
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 3
+	1 1 1.00 60.00 120.00
+	 6660 1665 5850 1890 5040 1665
+	 0.000 -1.000 0.000
+4 1 0 50 -1 16 12 0.0000 4 120 2640 3240 810 Device connection\001
+4 1 0 50 -1 16 12 0.0000 4 150 2100 5850 810 Master request\001
+4 1 0 50 -1 16 12 0.0000 4 120 3060 3240 2070 Device disconnection\001
+4 1 0 50 -1 16 12 0.0000 4 120 2100 5850 2070 Master release\001
Binary file doc/images/modes.pdf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/images/statetrans.eps	Mon Sep 25 15:53:33 2006 +0000
@@ -0,0 +1,287 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: statetrans.fig
+%%Creator: fig2dev Version 3.2 Patchlevel 4
+%%CreationDate: Wed Aug  9 13:16:04 2006
+%%For: fp@jupiter (Florian Pose)
+%%BoundingBox: 0 0 296 178
+%%Magnification: 1.0000
+%%EndComments
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+/col32 {0.555 0.555 0.555 srgb} bind def
+
+end
+save
+newpath 0 178 moveto 0 0 lineto 296 0 lineto 296 178 lineto closepath clip newpath
+-109.4 255.3 translate
+1 -1 scale
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+  bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+  4 -2 roll mul srgb} bind def
+ /DrawEllipse {
+	/endangle exch def
+	/startangle exch def
+	/yrad exch def
+	/xrad exch def
+	/y exch def
+	/x exch def
+	/savematrix mtrx currentmatrix def
+	x y tr xrad yrad sc 0 0 1 startangle endangle arc
+	closepath
+	savematrix setmatrix
+	} def
+
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+$F2psBegin
+10 setmiterlimit
+0 slj 0 slc
+ 0.06299 0.06299 sc
+%
+% Fig objects follow
+%
+% 
+% here starts figure with depth 100
+% Ellipse
+7.500 slw
+n 1845 2025 101 101 0 360 DrawEllipse gs col7 0.00 shd ef gr gs col0 s gr
+
+% Polyline
+2 slj
+gs  clippath
+2715 2055 m 2715 1995 l 2564 1995 l 2684 2025 l 2564 2055 l cp
+eoclip
+n 1840 2025 m
+ 2700 2025 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 2564 2055 m 2684 2025 l 2564 1995 l 2564 2055 l  cp gs 0.00 setgray ef gr  col0 s
+% here ends figure;
+% 
+% here starts figure with depth 50
+% Ellipse
+7.500 slw
+n 3150 2025 445 445 0 360 DrawEllipse gs col7 1.00 shd ef gr gs col0 s gr
+
+% Ellipse
+n 4280 3600 445 445 0 360 DrawEllipse gs col7 1.00 shd ef gr gs col0 s gr
+
+% Ellipse
+n 5405 2025 445 445 0 360 DrawEllipse gs col7 1.00 shd ef gr gs col0 s gr
+
+% Polyline
+2 slj
+gs  clippath
+4022 3214 m 4081 3205 l 4059 3055 l 4048 3179 l 4000 3064 l cp
+eoclip
+n 3465 2340 m 3466 2341 l 3469 2343 l 3475 2346 l 3483 2351 l 3495 2358 l
+ 3509 2366 l 3526 2377 l 3545 2389 l 3565 2402 l 3587 2417 l
+ 3610 2434 l 3634 2451 l 3658 2470 l 3683 2490 l 3708 2513 l
+ 3734 2537 l 3760 2564 l 3787 2594 l 3815 2626 l 3843 2662 l
+ 3870 2700 l 3896 2739 l 3918 2778 l 3939 2815 l 3956 2850 l
+ 3971 2884 l 3984 2916 l 3995 2947 l 4005 2976 l 4013 3005 l
+ 4020 3032 l 4026 3059 l 4031 3084 l 4036 3107 l 4040 3128 l
+ 4043 3147 l 4045 3162 l 4047 3175 l
+ 4050 3195 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 4000 3064 m 4048 3179 l 4059 3055 l 4000 3064 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+4997 1878 m 5020 1822 l 4880 1765 l 4980 1839 l 4857 1821 l cp
+eoclip
+n 3600 1935 m 3601 1934 l 3604 1933 l 3608 1930 l 3615 1926 l 3625 1920 l
+ 3637 1913 l 3652 1904 l 3670 1894 l 3691 1883 l 3714 1871 l
+ 3738 1858 l 3765 1845 l 3792 1832 l 3822 1819 l 3852 1806 l
+ 3884 1793 l 3918 1781 l 3954 1769 l 3992 1758 l 4032 1747 l
+ 4075 1737 l 4121 1728 l 4170 1721 l 4222 1714 l 4275 1710 l
+ 4328 1708 l 4381 1707 l 4431 1708 l 4478 1711 l 4523 1715 l
+ 4566 1721 l 4606 1727 l 4644 1734 l 4680 1742 l 4715 1750 l
+ 4748 1759 l 4780 1768 l 4811 1778 l 4840 1787 l 4867 1796 l
+ 4893 1805 l 4916 1814 l 4936 1821 l 4953 1828 l 4967 1834 l
+ 4978 1838 l
+ 4995 1845 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 4857 1821 m 4980 1839 l 4880 1765 l 4857 1821 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+4467 3201 m 4524 3217 l 4565 3071 l 4504 3179 l 4507 3055 l cp
+eoclip
+n 5130 2385 m 5129 2386 l 5126 2388 l 5120 2391 l 5112 2396 l 5102 2404 l
+ 5088 2413 l 5072 2424 l 5053 2437 l 5033 2451 l 5012 2467 l
+ 4989 2483 l 4966 2501 l 4943 2521 l 4918 2541 l 4893 2563 l
+ 4867 2588 l 4840 2614 l 4812 2643 l 4783 2675 l 4754 2709 l
+ 4725 2745 l 4697 2782 l 4672 2818 l 4649 2853 l 4629 2886 l
+ 4611 2917 l 4596 2946 l 4582 2974 l 4569 3000 l 4558 3026 l
+ 4548 3051 l 4539 3074 l 4531 3096 l 4524 3117 l 4518 3136 l
+ 4513 3152 l 4508 3166 l 4505 3177 l
+ 4500 3195 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 4507 3055 m 4504 3179 l 4565 3071 l 4507 3055 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+3597 2126 m 3574 2182 l 3715 2238 l 3615 2166 l 3737 2182 l cp
+eoclip
+n 4950 2115 m 4949 2116 l 4946 2117 l 4942 2119 l 4935 2122 l 4925 2127 l
+ 4912 2133 l 4896 2141 l 4877 2149 l 4856 2158 l 4833 2168 l
+ 4808 2179 l 4781 2190 l 4753 2200 l 4723 2211 l 4692 2222 l
+ 4660 2232 l 4626 2242 l 4590 2251 l 4553 2260 l 4513 2269 l
+ 4470 2276 l 4425 2283 l 4377 2288 l 4327 2292 l 4275 2295 l
+ 4223 2296 l 4173 2295 l 4125 2293 l 4080 2289 l 4037 2284 l
+ 3997 2279 l 3960 2272 l 3924 2265 l 3890 2258 l 3858 2250 l
+ 3827 2241 l 3797 2232 l 3769 2223 l 3742 2214 l 3717 2205 l
+ 3694 2197 l 3673 2189 l 3654 2182 l 3638 2176 l 3625 2171 l
+ 3615 2166 l
+ 3600 2160 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 3737 2182 m 3615 2166 l 3715 2238 l 3737 2182 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+3268 2457 m 3208 2463 l 3224 2613 l 3242 2491 l 3283 2607 l cp
+eoclip
+n 3870 3420 m 3869 3419 l 3866 3418 l 3861 3416 l 3854 3413 l 3843 3408 l
+ 3830 3402 l 3814 3394 l 3796 3385 l 3776 3375 l 3755 3364 l
+ 3732 3351 l 3709 3337 l 3684 3322 l 3660 3306 l 3635 3288 l
+ 3609 3268 l 3583 3247 l 3557 3223 l 3530 3196 l 3503 3167 l
+ 3475 3134 l 3447 3098 l 3420 3060 l 3395 3020 l 3372 2980 l
+ 3352 2941 l 3335 2903 l 3319 2867 l 3306 2831 l 3295 2798 l
+ 3286 2765 l 3278 2733 l 3271 2702 l 3265 2672 l 3260 2642 l
+ 3255 2614 l 3252 2588 l 3249 2564 l 3246 2542 l 3244 2523 l
+ 3243 2507 l 3242 2495 l
+ 3240 2475 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 3283 2607 m 3242 2491 l 3224 2613 l 3283 2607 l  cp gs 0.00 setgray ef gr  col0 s
+% Polyline
+2 slj
+gs  clippath
+5681 1668 m 5737 1689 l 5791 1548 l 5721 1650 l 5735 1527 l cp
+eoclip
+n 5805 1800 m 5807 1800 l 5813 1800 l 5822 1799 l 5836 1799 l 5855 1798 l
+ 5879 1797 l 5907 1795 l 5938 1793 l 5970 1791 l 6005 1787 l
+ 6039 1783 l 6074 1779 l 6107 1773 l 6140 1766 l 6171 1758 l
+ 6200 1748 l 6227 1736 l 6251 1722 l 6272 1705 l 6289 1686 l
+ 6300 1665 l 6305 1642 l 6305 1618 l 6300 1594 l 6292 1572 l
+ 6283 1550 l 6271 1530 l 6259 1511 l 6246 1493 l 6233 1476 l
+ 6220 1460 l 6206 1444 l 6192 1428 l 6177 1413 l 6161 1398 l
+ 6145 1383 l 6126 1367 l 6107 1353 l 6085 1338 l 6062 1326 l
+ 6038 1315 l 6012 1308 l 5985 1305 l 5956 1308 l 5929 1318 l
+ 5904 1332 l 5881 1350 l 5861 1372 l 5842 1395 l 5824 1421 l
+ 5808 1449 l 5792 1478 l 5778 1508 l 5765 1537 l 5753 1565 l
+ 5743 1591 l 5734 1614 l 5727 1633 l
+ 5715 1665 l gs col0 s gr gr
+
+% arrowhead
+0 slj
+n 5735 1527 m 5721 1650 l 5791 1548 l 5735 1527 l  cp gs 0.00 setgray ef gr  col0 s
+/Helvetica ff 240.00 scf sf
+3150 2115 m
+gs 1 -1 sc (s0) dup sw pop 2 div neg 0 rm  col0 sh gr
+/Helvetica ff 240.00 scf sf
+5400 2115 m
+gs 1 -1 sc (s1) dup sw pop 2 div neg 0 rm  col0 sh gr
+/Helvetica ff 240.00 scf sf
+4275 3690 m
+gs 1 -1 sc (s2) dup sw pop 2 div neg 0 rm  col0 sh gr
+/Symbol ff 240.00 scf sf
+3915 2610 m
+gs 1 -1 sc (e) dup sw pop 2 div neg 0 rm  col0 sh gr
+/Symbol ff 240.00 scf sf
+3375 3240 m
+gs 1 -1 sc (e) dup sw pop 2 div neg 0 rm  col0 sh gr
+/Symbol ff 240.00 scf sf
+4320 2250 m
+gs 1 -1 sc (e) dup sw pop 2 div neg 0 rm  col0 sh gr
+/Helvetica ff 240.00 scf sf
+3015 3240 m
+gs 1 -1 sc (a, b,) dup sw pop 2 div neg 0 rm  col0 sh gr
+/Helvetica ff 240.00 scf sf
+4590 2745 m
+gs 1 -1 sc (a) dup sw pop 2 div neg 0 rm  col0 sh gr
+/Helvetica ff 240.00 scf sf
+6300 1395 m
+gs 1 -1 sc (b) dup sw pop 2 div neg 0 rm  col0 sh gr
+/Helvetica ff 240.00 scf sf
+4185 1665 m
+gs 1 -1 sc (a, b) dup sw pop 2 div neg 0 rm  col0 sh gr
+% here ends figure;
+$F2psEnd
+rs
+showpage
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/images/statetrans.fig	Mon Sep 25 15:53:33 2006 +0000
@@ -0,0 +1,52 @@
+#FIG 3.2
+Portrait
+Center
+Metric
+A4      
+100.00
+Single
+-2
+1200 2
+0 32 #8e8e8e
+1 3 0 1 0 7 50 -1 20 0.000 1 0.0000 3150 2025 445 445 3150 2025 3595 2025
+1 3 0 1 0 7 50 -1 20 0.000 1 0.0000 4280 3600 445 445 4280 3600 4725 3600
+1 3 0 1 0 7 50 -1 20 0.000 1 0.0000 5405 2025 445 445 5405 2025 5850 2025
+1 3 0 1 0 7 100 0 0 4.000 1 0.0000 1845 2025 101 101 1845 2025 1935 2070
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 3
+	1 1 1.00 60.00 120.00
+	 3465 2340 3870 2700 4050 3195
+	 0.000 -1.000 0.000
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 3
+	1 1 1.00 60.00 120.00
+	 3600 1935 4275 1710 4995 1845
+	 0.000 -1.000 0.000
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 3
+	1 1 1.00 60.00 120.00
+	 5130 2385 4725 2745 4500 3195
+	 0.000 -1.000 0.000
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 3
+	1 1 1.00 60.00 120.00
+	 4950 2115 4275 2295 3600 2160
+	 0.000 -1.000 0.000
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 3
+	1 1 1.00 60.00 120.00
+	 3870 3420 3420 3060 3240 2475
+	 0.000 -1.000 0.000
+3 2 0 1 0 7 50 -1 -1 0.000 0 1 0 4
+	1 1 1.00 60.00 120.00
+	 5805 1800 6300 1665 5985 1305 5715 1665
+	 0.000 -1.000 -1.000 0.000
+3 2 0 1 0 7 100 0 -1 0.000 0 1 0 2
+	1 1 1.00 60.00 120.00
+	 1840 2025 2700 2025
+	 0.000 0.000
+4 1 0 50 -1 16 16 0.0000 4 150 465 3150 2115 s0\001
+4 1 0 50 -1 16 16 0.0000 4 150 465 5400 2115 s1\001
+4 1 0 50 -1 16 16 0.0000 4 150 465 4275 3690 s2\001
+4 1 0 50 -1 32 16 0.0000 4 120 180 3915 2610 e\001
+4 1 0 50 -1 32 16 0.0000 4 120 180 3375 3240 e\001
+4 1 0 50 -1 32 16 0.0000 4 120 180 4320 2250 e\001
+4 1 0 50 -1 16 16 0.0000 4 195 840 3015 3240 a, b,\001
+4 1 0 50 -1 16 16 0.0000 4 120 240 4590 2745 a\001
+4 1 0 50 -1 16 16 0.0000 4 165 240 6300 1395 b\001
+4 1 0 50 -1 16 16 0.0000 4 195 720 4185 1665 a, b\001
Binary file doc/images/statetrans.pdf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/images/uml-all.eps	Mon Sep 25 15:53:33 2006 +0000
@@ -0,0 +1,539 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: uml-all.fig
+%%Creator: fig2dev Version 3.2 Patchlevel 4
+%%CreationDate: Mon Aug  7 21:30:07 2006
+%%For: fp@jupiter (Florian Pose)
+%%BoundingBox: 0 0 551 542
+%%Magnification: 1.0000
+%%EndComments
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+/col32 {0.555 0.555 0.555 srgb} bind def
+
+end
+save
+newpath 0 542 moveto 0 0 lineto 551 0 lineto 551 542 lineto closepath clip newpath
+-16.3 556.3 translate
+1 -1 scale
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+  bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+  4 -2 roll mul srgb} bind def
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+$F2psBegin
+10 setmiterlimit
+0 slj 0 slc
+ 0.06299 0.06299 sc
+%
+% Fig objects follow
+%
+% 
+% here starts figure with depth 101
+% Polyline
+7.500 slw
+n 270 292 m 2556 292 l 2556 720 l 270 720 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr 
+% Polyline
+n 270 8392 m 2556 8392 l 2556 8820 l 270 8820 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr 
+% Polyline
+n 270 7492 m 2556 7492 l 2556 7920 l 270 7920 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr 
+% Polyline
+n 3465 292 m 5751 292 l 5751 720 l 3465 720 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr 
+% Polyline
+n 3465 2092 m 5751 2092 l 5751 2520 l 3465 2520 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr 
+% Polyline
+n 3465 1192 m 5751 1192 l 5751 1620 l 3465 1620 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr 
+% Polyline
+n 3465 5377 m 5751 5377 l 5751 5805 l 3465 5805 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr 
+% Polyline
+n 3465 6277 m 5751 6277 l 5751 6705 l 3465 6705 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr 
+% Polyline
+n 6705 292 m 8991 292 l 8991 720 l 6705 720 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr 
+% Polyline
+n 6705 2092 m 8991 2092 l 8991 2520 l 6705 2520 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr 
+% Polyline
+n 3465 3307 m 5751 3307 l 5751 3735 l 3465 3735 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr 
+% Polyline
+n 3465 4207 m 5751 4207 l 5751 4635 l 3465 4635 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr 
+% Polyline
+n 270 4207 m 2556 4207 l 2556 4635 l 270 4635 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr 
+% Polyline
+n 3465 7492 m 5751 7492 l 5751 7920 l 3465 7920 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr 
+% Polyline
+n 3465 8392 m 5751 8392 l 5751 8820 l 3465 8820 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr 
+% Polyline
+n 270 577 m
+ 2556 577 l gs col0 s gr 
+% Polyline
+n 270 649 m
+ 2556 649 l gs col0 s gr 
+/Helvetica ff 180.00 scf sf
+341 506 m
+gs 1 -1 sc (ec_master_t) col0 sh gr
+% Polyline
+n 270 8677 m
+ 2556 8677 l gs col0 s gr 
+% Polyline
+n 270 8749 m
+ 2556 8749 l gs col0 s gr 
+/Helvetica ff 180.00 scf sf
+341 8606 m
+gs 1 -1 sc (ec_sii_pdo_entry_t) col0 sh gr
+% Polyline
+n 270 7777 m
+ 2556 7777 l gs col0 s gr 
+% Polyline
+n 270 7849 m
+ 2556 7849 l gs col0 s gr 
+/Helvetica ff 180.00 scf sf
+341 7706 m
+gs 1 -1 sc (ec_sii_pdo_t) col0 sh gr
+% Polyline
+n 3465 577 m
+ 5751 577 l gs col0 s gr 
+% Polyline
+n 3465 649 m
+ 5751 649 l gs col0 s gr 
+/Helvetica ff 180.00 scf sf
+3536 506 m
+gs 1 -1 sc (ec_device_t) col0 sh gr
+% Polyline
+n 3465 2377 m
+ 5751 2377 l gs col0 s gr 
+% Polyline
+n 3465 2449 m
+ 5751 2449 l gs col0 s gr 
+/Helvetica ff 180.00 scf sf
+3536 2306 m
+gs 1 -1 sc (ec_eoe_t) col0 sh gr
+% Polyline
+n 3465 1477 m
+ 5751 1477 l gs col0 s gr 
+% Polyline
+n 3465 1549 m
+ 5751 1549 l gs col0 s gr 
+/Helvetica ff 180.00 scf sf
+3536 1406 m
+gs 1 -1 sc (ec_fsm_t) col0 sh gr
+% Polyline
+n 3465 5662 m
+ 5751 5662 l gs col0 s gr 
+% Polyline
+n 3465 5734 m
+ 5751 5734 l gs col0 s gr 
+/Helvetica ff 180.00 scf sf
+3536 5591 m
+gs 1 -1 sc (ec_sii_sync_t) col0 sh gr
+% Polyline
+n 3465 6562 m
+ 5751 6562 l gs col0 s gr 
+% Polyline
+n 3465 6634 m
+ 5751 6634 l gs col0 s gr 
+/Helvetica ff 180.00 scf sf
+3536 6491 m
+gs 1 -1 sc (ec_fmmu_t) col0 sh gr
+% Polyline
+n 6705 577 m
+ 8991 577 l gs col0 s gr 
+% Polyline
+n 6705 649 m
+ 8991 649 l gs col0 s gr 
+/Helvetica ff 180.00 scf sf
+6776 506 m
+gs 1 -1 sc (ec_debug_t) col0 sh gr
+% Polyline
+n 6705 2377 m
+ 8991 2377 l gs col0 s gr 
+% Polyline
+n 6705 2449 m
+ 8991 2449 l gs col0 s gr 
+/Helvetica ff 180.00 scf sf
+6776 2306 m
+gs 1 -1 sc (ec_datagram_t) col0 sh gr
+% Polyline
+n 3465 3592 m
+ 5751 3592 l gs col0 s gr 
+% Polyline
+n 3465 3664 m
+ 5751 3664 l gs col0 s gr 
+/Helvetica ff 180.00 scf sf
+3536 3521 m
+gs 1 -1 sc (ec_domain_t) col0 sh gr
+% Polyline
+n 3465 4492 m
+ 5751 4492 l gs col0 s gr 
+% Polyline
+n 3465 4564 m
+ 5751 4564 l gs col0 s gr 
+/Helvetica ff 180.00 scf sf
+3536 4421 m
+gs 1 -1 sc (ec_data_reg_t) col0 sh gr
+% Polyline
+n 270 4492 m
+ 2556 4492 l gs col0 s gr 
+% Polyline
+n 270 4564 m
+ 2556 4564 l gs col0 s gr 
+/Helvetica ff 180.00 scf sf
+341 4421 m
+gs 1 -1 sc (ec_slave_t) col0 sh gr
+% Polyline
+n 3465 7777 m
+ 5751 7777 l gs col0 s gr 
+% Polyline
+n 3465 7849 m
+ 5751 7849 l gs col0 s gr 
+/Helvetica ff 180.00 scf sf
+3536 7706 m
+gs 1 -1 sc (ec_sdo_t) col0 sh gr
+% Polyline
+n 3465 8677 m
+ 5751 8677 l gs col0 s gr 
+% Polyline
+n 3465 8749 m
+ 5751 8749 l gs col0 s gr 
+/Helvetica ff 180.00 scf sf
+3536 8606 m
+gs 1 -1 sc (ec_sdo_entry_t) col0 sh gr
+% here ends figure;
+% 
+% here starts figure with depth 50
+% Polyline
+7.500 slw
+n 1395 7920 m 1305 8055 l 1395 8190 l 1485 8055 l
+ cp gs col32 1.00 shd ef gr gs col0 s gr 
+% Polyline
+n 1395 8190 m
+ 1395 8370 l gs col0 s gr 
+% Polyline
+n 4590 7920 m 4500 8055 l 4590 8190 l 4680 8055 l
+ cp gs col32 1.00 shd ef gr gs col0 s gr 
+% Polyline
+n 4590 8190 m
+ 4590 8370 l gs col0 s gr 
+% Polyline
+n 2565 540 m
+ 3465 540 l gs col0 s gr 
+% Polyline
+n 1890 990 m 1890 2340 l
+ 3465 2340 l gs col0 s gr 
+% Polyline
+n 1440 990 m 1440 3375 l
+ 3465 3375 l gs col0 s gr 
+% Polyline
+n 2340 720 m 2250 855 l 2340 990 l 2430 855 l
+ cp gs col32 1.00 shd ef gr gs col0 s gr 
+% Polyline
+n 1440 720 m 1350 855 l 1440 990 l 1530 855 l
+ cp gs col32 1.00 shd ef gr gs col0 s gr 
+% Polyline
+n 1890 720 m 1800 855 l 1890 990 l 1980 855 l
+ cp gs col32 1.00 shd ef gr gs col0 s gr 
+% Polyline
+n 990 720 m 900 855 l 990 990 l 1080 855 l
+ cp gs col32 1.00 shd ef gr gs col0 s gr 
+% Polyline
+gs  clippath
+2550 4425 m 2550 4485 l 2702 4485 l 2582 4455 l 2702 4425 l cp
+eoclip
+n 3465 4455 m
+ 2565 4455 l gs col0 s gr gr
+
+% arrowhead
+n 2702 4425 m 2582 4455 l 2702 4485 l  col0 s
+% Polyline
+n 2340 4905 m 2340 5625 l
+ 3465 5625 l gs col0 s gr 
+% Polyline
+n 1890 4905 m 1890 6615 l
+ 3465 6615 l gs col0 s gr 
+% Polyline
+n 990 4905 m
+ 990 7470 l gs col0 s gr 
+% Polyline
+n 1440 4905 m 1440 7065 l 4590 7065 l
+ 4590 7470 l gs col0 s gr 
+% Polyline
+n 2340 990 m 2340 1440 l
+ 3465 1440 l gs col0 s gr 
+% Polyline
+n 990 990 m
+ 990 4185 l gs col0 s gr 
+% Polyline
+n 5760 2340 m 5895 2250 l 6030 2340 l 5895 2430 l
+ cp gs col32 1.00 shd ef gr gs col0 s gr 
+% Polyline
+n 5760 1440 m 5895 1350 l 6030 1440 l 5895 1530 l
+ cp gs col32 1.00 shd ef gr gs col0 s gr 
+% Polyline
+n 5760 540 m 5895 450 l 6030 540 l 5895 630 l
+ cp gs col32 1.00 shd ef gr gs col0 s gr 
+% Polyline
+n 5760 3555 m 5895 3465 l 6030 3555 l 5895 3645 l
+ cp gs col32 1.00 shd ef gr gs col0 s gr 
+% Polyline
+gs  clippath
+4560 5415 m 4620 5415 l 4620 5263 l 4590 5383 l 4560 5263 l cp
+eoclip
+n 4590 4635 m
+ 4590 5400 l gs col0 s gr gr
+
+% arrowhead
+n 4560 5263 m 4590 5383 l 4620 5263 l  col0 s
+% Polyline
+n 4590 3735 m 4500 3870 l 4590 4005 l 4680 3870 l
+ cp gs col32 1.00 shd ef gr gs col0 s gr 
+% Polyline
+n 4590 4005 m
+ 4590 4185 l gs col0 s gr 
+% Polyline
+gs  clippath
+4620 5790 m 4560 5790 l 4560 5942 l 4590 5822 l 4620 5942 l cp
+eoclip
+n 4590 6255 m
+ 4590 5805 l gs col0 s gr gr
+
+% arrowhead
+n 4620 5942 m 4590 5822 l 4560 5942 l  col0 s
+% Polyline
+n 6030 3555 m 6930 3555 l
+ 6930 2520 l gs col0 s gr 
+% Polyline
+n 6030 2340 m
+ 6705 2340 l gs col0 s gr 
+% Polyline
+n 6030 1440 m 6930 1440 l
+ 6930 2070 l gs col0 s gr 
+% Polyline
+gs  clippath
+6720 570 m 6720 510 l 6568 510 l 6688 540 l 6568 570 l cp
+eoclip
+n 6030 540 m
+ 6705 540 l gs col0 s gr gr
+
+% arrowhead
+n 6568 570 m 6688 540 l 6568 510 l  col0 s
+% Polyline
+gs  clippath
+3480 3675 m 3480 3615 l 3328 3615 l 3448 3645 l 3328 3675 l cp
+eoclip
+n 3465 6345 m 3060 6345 l 3060 3645 l
+ 3465 3645 l gs col0 s gr gr
+
+% arrowhead
+n 3328 3675 m 3448 3645 l 3328 3615 l  col0 s
+% Polyline
+n 2340 4663 m 2250 4798 l 2340 4933 l 2430 4798 l
+ cp gs col32 1.00 shd ef gr gs col0 s gr 
+% Polyline
+n 1890 4663 m 1800 4798 l 1890 4933 l 1980 4798 l
+ cp gs col32 1.00 shd ef gr gs col0 s gr 
+% Polyline
+n 1440 4663 m 1350 4798 l 1440 4933 l 1530 4798 l
+ cp gs col32 1.00 shd ef gr gs col0 s gr 
+% Polyline
+n 990 4663 m 900 4798 l 990 4933 l 1080 4798 l
+ cp gs col32 1.00 shd ef gr gs col0 s gr 
+/Helvetica ff 180.00 scf sf
+2655 450 m
+gs 1 -1 sc (1) col0 sh gr
+/Helvetica ff 180.00 scf sf
+2070 900 m
+gs 1 -1 sc (1) col0 sh gr
+/Helvetica ff 180.00 scf sf
+2520 900 m
+gs 1 -1 sc (1) col0 sh gr
+/Helvetica ff 180.00 scf sf
+1620 900 m
+gs 1 -1 sc (1) col0 sh gr
+/Helvetica ff 180.00 scf sf
+1170 900 m
+gs 1 -1 sc (1) col0 sh gr
+/Helvetica ff 180.00 scf sf
+1080 7380 m
+gs 1 -1 sc (*) col0 sh gr
+/Helvetica ff 180.00 scf sf
+1575 8100 m
+gs 1 -1 sc (1) col0 sh gr
+/Helvetica ff 180.00 scf sf
+1575 8325 m
+gs 1 -1 sc (1) col0 sh gr
+/Helvetica ff 180.00 scf sf
+3375 450 m
+gs 1 -1 sc (1) dup sw pop neg 0 rm  col0 sh gr
+/Helvetica ff 180.00 scf sf
+3375 2250 m
+gs 1 -1 sc (*) dup sw pop neg 0 rm  col0 sh gr
+/Helvetica ff 180.00 scf sf
+3375 1350 m
+gs 1 -1 sc (1) dup sw pop neg 0 rm  col0 sh gr
+/Helvetica ff 180.00 scf sf
+5850 360 m
+gs 1 -1 sc (1) col0 sh gr
+/Helvetica ff 180.00 scf sf
+5850 1260 m
+gs 1 -1 sc (1) col0 sh gr
+/Helvetica ff 180.00 scf sf
+5850 2160 m
+gs 1 -1 sc (1) col0 sh gr
+/Helvetica ff 180.00 scf sf
+3375 3330 m
+gs 1 -1 sc (*) dup sw pop neg 0 rm  col0 sh gr
+/Helvetica ff 180.00 scf sf
+3375 3825 m
+gs 1 -1 sc (1) dup sw pop neg 0 rm  col0 sh gr
+/Helvetica ff 180.00 scf sf
+5850 3375 m
+gs 1 -1 sc (1) col0 sh gr
+/Helvetica ff 180.00 scf sf
+4770 4140 m
+gs 1 -1 sc (*) col0 sh gr
+/Helvetica ff 180.00 scf sf
+3375 4365 m
+gs 1 -1 sc (*) dup sw pop neg 0 rm  col0 sh gr
+/Helvetica ff 180.00 scf sf
+4770 5310 m
+gs 1 -1 sc (1) col0 sh gr
+/Helvetica ff 180.00 scf sf
+4770 5985 m
+gs 1 -1 sc (1) col0 sh gr
+/Helvetica ff 180.00 scf sf
+4770 6210 m
+gs 1 -1 sc (1) col0 sh gr
+/Helvetica ff 180.00 scf sf
+3375 5535 m
+gs 1 -1 sc (*) dup sw pop neg 0 rm  col0 sh gr
+/Helvetica ff 180.00 scf sf
+3375 6795 m
+gs 1 -1 sc (*) dup sw pop neg 0 rm  col0 sh gr
+/Helvetica ff 180.00 scf sf
+3375 6300 m
+gs 1 -1 sc (1) dup sw pop neg 0 rm  col0 sh gr
+/Helvetica ff 180.00 scf sf
+7020 1980 m
+gs 1 -1 sc (1) col0 sh gr
+/Helvetica ff 180.00 scf sf
+7020 2745 m
+gs 1 -1 sc (*) col0 sh gr
+/Helvetica ff 180.00 scf sf
+4770 8325 m
+gs 1 -1 sc (1) col0 sh gr
+/Helvetica ff 180.00 scf sf
+4770 8100 m
+gs 1 -1 sc (1) col0 sh gr
+/Helvetica ff 180.00 scf sf
+4770 7380 m
+gs 1 -1 sc (*) col0 sh gr
+/Helvetica ff 180.00 scf sf
+4770 3915 m
+gs 1 -1 sc (1) col0 sh gr
+/Helvetica ff 180.00 scf sf
+1080 4095 m
+gs 1 -1 sc (*) col0 sh gr
+/Helvetica ff 180.00 scf sf
+1170 4815 m
+gs 1 -1 sc (1) col0 sh gr
+/Helvetica ff 180.00 scf sf
+1620 4815 m
+gs 1 -1 sc (1) col0 sh gr
+/Helvetica ff 180.00 scf sf
+2070 4815 m
+gs 1 -1 sc (1) col0 sh gr
+/Helvetica ff 180.00 scf sf
+2520 4815 m
+gs 1 -1 sc (1) col0 sh gr
+/Helvetica ff 180.00 scf sf
+2655 4365 m
+gs 1 -1 sc (1) col0 sh gr
+/Helvetica ff 180.00 scf sf
+4770 4815 m
+gs 1 -1 sc (*) col0 sh gr
+/Helvetica ff 180.00 scf sf
+6615 360 m
+gs 1 -1 sc (1) dup sw pop neg 0 rm  col0 sh gr
+/Helvetica ff 180.00 scf sf
+6615 2160 m
+gs 1 -1 sc (1) dup sw pop neg 0 rm  col0 sh gr
+% here ends figure;
+$F2psEnd
+rs
+showpage
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/images/uml-all.fig	Mon Sep 25 15:53:33 2006 +0000
@@ -0,0 +1,264 @@
+#FIG 3.2
+Portrait
+Center
+Metric
+A4      
+100.00
+Single
+-2
+1200 2
+0 32 #8e8e8e
+6 270 292 2556 720
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
+	 270 577 2556 577
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
+	 270 649 2556 649
+2 2 0 1 0 7 101 0 20 4.000 0 0 7 0 0 5
+	 270 292 2556 292 2556 720 270 720 270 292
+4 0 0 100 0 16 12 0.0000 4 150 1740 341 506 ec_master_t\001
+-6
+6 270 8392 3041 8820
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
+	 270 8677 2556 8677
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
+	 270 8749 2556 8749
+2 2 0 1 0 7 101 0 20 4.000 0 0 7 0 0 5
+	 270 8392 2556 8392 2556 8820 270 8820 270 8392
+4 0 0 100 0 16 12 0.0000 4 165 2700 341 8606 ec_sii_pdo_entry_t\001
+-6
+6 1305 7920 1485 8370
+2 3 0 1 0 32 50 -1 20 0.000 0 0 -1 0 0 5
+	 1395 7920 1305 8055 1395 8190 1485 8055 1395 7920
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 1395 8190 1395 8370
+-6
+6 270 7492 2556 7920
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
+	 270 7777 2556 7777
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
+	 270 7849 2556 7849
+2 2 0 1 0 7 101 0 20 4.000 0 0 7 0 0 5
+	 270 7492 2556 7492 2556 7920 270 7920 270 7492
+4 0 0 100 0 16 12 0.0000 4 150 1815 341 7706 ec_sii_pdo_t\001
+-6
+6 3465 292 5751 720
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
+	 3465 577 5751 577
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
+	 3465 649 5751 649
+2 2 0 1 0 7 101 0 20 4.000 0 0 7 0 0 5
+	 3465 292 5751 292 5751 720 3465 720 3465 292
+4 0 0 100 0 16 12 0.0000 4 150 1725 3536 506 ec_device_t\001
+-6
+6 3465 2092 5751 2520
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
+	 3465 2377 5751 2377
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
+	 3465 2449 5751 2449
+2 2 0 1 0 7 101 0 20 4.000 0 0 7 0 0 5
+	 3465 2092 5751 2092 5751 2520 3465 2520 3465 2092
+4 0 0 100 0 16 12 0.0000 4 150 1320 3536 2306 ec_eoe_t\001
+-6
+6 3465 1192 5751 1620
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
+	 3465 1477 5751 1477
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
+	 3465 1549 5751 1549
+2 2 0 1 0 7 101 0 20 4.000 0 0 7 0 0 5
+	 3465 1192 5751 1192 5751 1620 3465 1620 3465 1192
+4 0 0 100 0 16 12 0.0000 4 150 1275 3536 1406 ec_fsm_t\001
+-6
+6 3465 5377 5751 5805
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
+	 3465 5662 5751 5662
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
+	 3465 5734 5751 5734
+2 2 0 1 0 7 101 0 20 4.000 0 0 7 0 0 5
+	 3465 5377 5751 5377 5751 5805 3465 5805 3465 5377
+4 0 0 100 0 16 12 0.0000 4 165 1950 3536 5591 ec_sii_sync_t\001
+-6
+6 3465 6277 5751 6705
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
+	 3465 6562 5751 6562
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
+	 3465 6634 5751 6634
+2 2 0 1 0 7 101 0 20 4.000 0 0 7 0 0 5
+	 3465 6277 5751 6277 5751 6705 3465 6705 3465 6277
+4 0 0 100 0 16 12 0.0000 4 150 1545 3536 6491 ec_fmmu_t\001
+-6
+6 6705 292 8991 720
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
+	 6705 577 8991 577
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
+	 6705 649 8991 649
+2 2 0 1 0 7 101 0 20 4.000 0 0 7 0 0 5
+	 6705 292 8991 292 8991 720 6705 720 6705 292
+4 0 0 100 0 16 12 0.0000 4 165 1680 6776 506 ec_debug_t\001
+-6
+6 6705 2092 8991 2520
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
+	 6705 2377 8991 2377
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
+	 6705 2449 8991 2449
+2 2 0 1 0 7 101 0 20 4.000 0 0 7 0 0 5
+	 6705 2092 8991 2092 8991 2520 6705 2520 6705 2092
+4 0 0 100 0 16 12 0.0000 4 165 2115 6776 2306 ec_datagram_t\001
+-6
+6 3465 3307 5751 3735
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
+	 3465 3592 5751 3592
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
+	 3465 3664 5751 3664
+2 2 0 1 0 7 101 0 20 4.000 0 0 7 0 0 5
+	 3465 3307 5751 3307 5751 3735 3465 3735 3465 3307
+4 0 0 100 0 16 12 0.0000 4 150 1830 3536 3521 ec_domain_t\001
+-6
+6 3465 4207 5751 4635
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
+	 3465 4492 5751 4492
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
+	 3465 4564 5751 4564
+2 2 0 1 0 7 101 0 20 4.000 0 0 7 0 0 5
+	 3465 4207 5751 4207 5751 4635 3465 4635 3465 4207
+4 0 0 100 0 16 12 0.0000 4 165 2040 3536 4421 ec_data_reg_t\001
+-6
+6 270 4207 2556 4635
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
+	 270 4492 2556 4492
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
+	 270 4564 2556 4564
+2 2 0 1 0 7 101 0 20 4.000 0 0 7 0 0 5
+	 270 4207 2556 4207 2556 4635 270 4635 270 4207
+4 0 0 100 0 16 12 0.0000 4 150 1545 341 4421 ec_slave_t\001
+-6
+6 3465 7492 5751 7920
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
+	 3465 7777 5751 7777
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
+	 3465 7849 5751 7849
+2 2 0 1 0 7 101 0 20 4.000 0 0 7 0 0 5
+	 3465 7492 5751 7492 5751 7920 3465 7920 3465 7492
+4 0 0 100 0 16 12 0.0000 4 150 1305 3536 7706 ec_sdo_t\001
+-6
+6 3465 8392 5751 8820
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
+	 3465 8677 5751 8677
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
+	 3465 8749 5751 8749
+2 2 0 1 0 7 101 0 20 4.000 0 0 7 0 0 5
+	 3465 8392 5751 8392 5751 8820 3465 8820 3465 8392
+4 0 0 100 0 16 12 0.0000 4 165 2190 3536 8606 ec_sdo_entry_t\001
+-6
+6 4500 7920 4680 8370
+2 3 0 1 0 32 50 -1 20 0.000 0 0 -1 0 0 5
+	 4590 7920 4500 8055 4590 8190 4680 8055 4590 7920
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 4590 8190 4590 8370
+-6
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 2565 540 3465 540
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3
+	 1890 990 1890 2340 3465 2340
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3
+	 1440 990 1440 3375 3465 3375
+2 3 0 1 0 32 50 -1 20 0.000 0 0 -1 0 0 5
+	 2340 720 2250 855 2340 990 2430 855 2340 720
+2 3 0 1 0 32 50 -1 20 0.000 0 0 -1 0 0 5
+	 1440 720 1350 855 1440 990 1530 855 1440 720
+2 3 0 1 0 32 50 -1 20 0.000 0 0 -1 0 0 5
+	 1890 720 1800 855 1890 990 1980 855 1890 720
+2 3 0 1 0 32 50 -1 20 0.000 0 0 -1 0 0 5
+	 990 720 900 855 990 990 1080 855 990 720
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 3465 4455 2565 4455
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3
+	 2340 4905 2340 5625 3465 5625
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3
+	 1890 4905 1890 6615 3465 6615
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 990 4905 990 7470
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 4
+	 1440 4905 1440 7065 4590 7065 4590 7470
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3
+	 2340 990 2340 1440 3465 1440
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 990 990 990 4185
+2 3 0 1 0 32 50 -1 20 0.000 0 0 -1 0 0 5
+	 5760 2340 5895 2250 6030 2340 5895 2430 5760 2340
+2 3 0 1 0 32 50 -1 20 0.000 0 0 -1 0 0 5
+	 5760 1440 5895 1350 6030 1440 5895 1530 5760 1440
+2 3 0 1 0 32 50 -1 20 0.000 0 0 -1 0 0 5
+	 5760 540 5895 450 6030 540 5895 630 5760 540
+2 3 0 1 0 32 50 -1 20 0.000 0 0 -1 0 0 5
+	 5760 3555 5895 3465 6030 3555 5895 3645 5760 3555
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 4590 4635 4590 5400
+2 3 0 1 0 32 50 -1 20 0.000 0 0 -1 0 0 5
+	 4590 3735 4500 3870 4590 4005 4680 3870 4590 3735
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 4590 4005 4590 4185
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 4590 6255 4590 5805
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3
+	 6030 3555 6930 3555 6930 2520
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 2
+	 6030 2340 6705 2340
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 0 0 3
+	 6030 1440 6930 1440 6930 2070
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 2
+	0 0 1.00 60.00 120.00
+	 6030 540 6705 540
+2 1 0 1 0 7 50 -1 -1 0.000 0 0 -1 1 0 4
+	0 0 1.00 60.00 120.00
+	 3465 6345 3060 6345 3060 3645 3465 3645
+2 3 0 1 0 32 50 -1 20 0.000 0 0 -1 0 0 5
+	 2340 4663 2250 4798 2340 4933 2430 4798 2340 4663
+2 3 0 1 0 32 50 -1 20 0.000 0 0 -1 0 0 5
+	 1890 4663 1800 4798 1890 4933 1980 4798 1890 4663
+2 3 0 1 0 32 50 -1 20 0.000 0 0 -1 0 0 5
+	 1440 4663 1350 4798 1440 4933 1530 4798 1440 4663
+2 3 0 1 0 32 50 -1 20 0.000 0 0 -1 0 0 5
+	 990 4663 900 4798 990 4933 1080 4798 990 4663
+4 0 0 50 -1 16 12 0.0000 4 120 180 2655 450 1\001
+4 0 0 50 -1 16 12 0.0000 4 120 180 2070 900 1\001
+4 0 0 50 -1 16 12 0.0000 4 120 180 2520 900 1\001
+4 0 0 50 -1 16 12 0.0000 4 120 180 1620 900 1\001
+4 0 0 50 -1 16 12 0.0000 4 120 180 1170 900 1\001
+4 0 0 50 -1 16 12 0.0000 4 45 120 1080 7380 *\001
+4 0 0 50 -1 16 12 0.0000 4 120 180 1575 8100 1\001
+4 0 0 50 -1 16 12 0.0000 4 120 180 1575 8325 1\001
+4 2 0 50 -1 16 12 0.0000 4 120 180 3375 450 1\001
+4 2 0 50 -1 16 12 0.0000 4 45 120 3375 2250 *\001
+4 2 0 50 -1 16 12 0.0000 4 120 180 3375 1350 1\001
+4 0 0 50 -1 16 12 0.0000 4 120 180 5850 360 1\001
+4 0 0 50 -1 16 12 0.0000 4 120 180 5850 1260 1\001
+4 0 0 50 -1 16 12 0.0000 4 120 180 5850 2160 1\001
+4 2 0 50 -1 16 12 0.0000 4 45 120 3375 3330 *\001
+4 2 0 50 -1 16 12 0.0000 4 120 180 3375 3825 1\001
+4 0 0 50 -1 16 12 0.0000 4 120 180 5850 3375 1\001
+4 0 0 50 -1 16 12 0.0000 4 45 120 4770 4140 *\001
+4 2 0 50 -1 16 12 0.0000 4 45 120 3375 4365 *\001
+4 0 0 50 -1 16 12 0.0000 4 120 180 4770 5310 1\001
+4 0 0 50 -1 16 12 0.0000 4 120 180 4770 5985 1\001
+4 0 0 50 -1 16 12 0.0000 4 120 180 4770 6210 1\001
+4 2 0 50 -1 16 12 0.0000 4 45 120 3375 5535 *\001
+4 2 0 50 -1 16 12 0.0000 4 45 120 3375 6795 *\001
+4 2 0 50 -1 16 12 0.0000 4 120 180 3375 6300 1\001
+4 0 0 50 -1 16 12 0.0000 4 120 180 7020 1980 1\001
+4 0 0 50 -1 16 12 0.0000 4 45 120 7020 2745 *\001
+4 0 0 50 -1 16 12 0.0000 4 120 180 4770 8325 1\001
+4 0 0 50 -1 16 12 0.0000 4 120 180 4770 8100 1\001
+4 0 0 50 -1 16 12 0.0000 4 45 120 4770 7380 *\001
+4 0 0 50 -1 16 12 0.0000 4 120 180 4770 3915 1\001
+4 0 0 50 -1 16 12 0.0000 4 45 120 1080 4095 *\001
+4 0 0 50 -1 16 12 0.0000 4 120 180 1170 4815 1\001
+4 0 0 50 -1 16 12 0.0000 4 120 180 1620 4815 1\001
+4 0 0 50 -1 16 12 0.0000 4 120 180 2070 4815 1\001
+4 0 0 50 -1 16 12 0.0000 4 120 180 2520 4815 1\001
+4 0 0 50 -1 16 12 0.0000 4 120 180 2655 4365 1\001
+4 0 0 50 -1 16 12 0.0000 4 45 120 4770 4815 *\001
+4 2 0 50 -1 16 12 0.0000 4 120 180 6615 360 1\001
+4 2 0 50 -1 16 12 0.0000 4 120 180 6615 2160 1\001
Binary file doc/images/uml-all.pdf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/images/uml-datagram.eps	Mon Sep 25 15:53:33 2006 +0000
@@ -0,0 +1,179 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: uml-datagram.fig
+%%Creator: fig2dev Version 3.2 Patchlevel 4
+%%CreationDate: Mon Aug  7 20:49:08 2006
+%%For: fp@jupiter (Florian Pose)
+%%BoundingBox: 0 0 178 297
+%%Magnification: 1.0000
+%%EndComments
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+/col32 {0.555 0.555 0.555 srgb} bind def
+
+end
+save
+newpath 0 297 moveto 0 0 lineto 273 0 lineto 273 297 lineto closepath clip newpath
+-27.6 323.9 translate
+1 -1 scale
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+  bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+  4 -2 roll mul srgb} bind def
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+$F2psBegin
+10 setmiterlimit
+0 slj 0 slc
+ 0.06299 0.06299 sc
+%
+% Fig objects follow
+%
+% 
+% here starts figure with depth 110
+% Polyline
+7.500 slw
+n 450 450 m 3240 450 l 3240 5130 l 450 5130 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr 
+% here ends figure;
+% 
+% here starts figure with depth 100
+% Polyline
+7.500 slw
+n 450 765 m
+ 3240 765 l gs col0 s gr 
+% Polyline
+n 450 2925 m
+ 3240 2925 l gs col0 s gr 
+/Helvetica ff 180.00 scf sf
+540 675 m
+gs 1 -1 sc (ec_datagram_t) col0 sh gr
+/Helvetica ff 180.00 scf sf
+540 990 m
+gs 1 -1 sc (list: struct list_head) col0 sh gr
+/Helvetica ff 180.00 scf sf
+540 1170 m
+gs 1 -1 sc (queue: struct list_head) col0 sh gr
+/Helvetica ff 180.00 scf sf
+540 1350 m
+gs 1 -1 sc (type: ec_datagram_type_t) col0 sh gr
+/Helvetica ff 180.00 scf sf
+540 1530 m
+gs 1 -1 sc (address: ec_address_t) col0 sh gr
+/Helvetica ff 180.00 scf sf
+540 1710 m
+gs 1 -1 sc (data: uint8_t *) col0 sh gr
+/Helvetica ff 180.00 scf sf
+540 1890 m
+gs 1 -1 sc (mem_size: size_t) col0 sh gr
+/Helvetica ff 180.00 scf sf
+540 2070 m
+gs 1 -1 sc (data_size: size_t) col0 sh gr
+/Helvetica ff 180.00 scf sf
+540 2250 m
+gs 1 -1 sc (index: uint8_t) col0 sh gr
+/Helvetica ff 180.00 scf sf
+540 2430 m
+gs 1 -1 sc (working_counter: uint16_t) col0 sh gr
+/Helvetica ff 180.00 scf sf
+540 2610 m
+gs 1 -1 sc (state: ec_datagram_state_t) col0 sh gr
+/Helvetica ff 180.00 scf sf
+540 2790 m
+gs 1 -1 sc (t_sent: cylces_t) col0 sh gr
+/Helvetica ff 180.00 scf sf
+540 3150 m
+gs 1 -1 sc (+ ec_datagram_init\(\)) col0 sh gr
+/Helvetica ff 180.00 scf sf
+540 3330 m
+gs 1 -1 sc (+ ec_datagram_clear\(\)) col0 sh gr
+/Helvetica ff 180.00 scf sf
+540 3540 m
+gs 1 -1 sc (+ ec_datagram_prealloc\(\): int) col0 sh gr
+/Helvetica ff 180.00 scf sf
+540 3750 m
+gs 1 -1 sc (+ ec_datagram_nprd\(\):int) col0 sh gr
+/Helvetica ff 180.00 scf sf
+540 3960 m
+gs 1 -1 sc (+ ec_datagram_npwr\(\): int) col0 sh gr
+/Helvetica ff 180.00 scf sf
+540 4170 m
+gs 1 -1 sc (+ ec_datagram_aprd\(\): int) col0 sh gr
+/Helvetica ff 180.00 scf sf
+540 4380 m
+gs 1 -1 sc (+ ec_datagram_apwr\(\): int) col0 sh gr
+/Helvetica ff 180.00 scf sf
+540 4590 m
+gs 1 -1 sc (+ ec_datagram_brd\(\): int) col0 sh gr
+/Helvetica ff 180.00 scf sf
+540 4800 m
+gs 1 -1 sc (+ ec_datagram_bwr\(\): int) col0 sh gr
+/Helvetica ff 180.00 scf sf
+540 5010 m
+gs 1 -1 sc (+ ec_datagram_lrw\(\): int) col0 sh gr
+% here ends figure;
+$F2psEnd
+rs
+showpage
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/images/uml-datagram.fig	Mon Sep 25 15:53:33 2006 +0000
@@ -0,0 +1,38 @@
+#FIG 3.2
+Portrait
+Center
+Metric
+A4      
+100.00
+Single
+-2
+1200 2
+0 32 #8e8e8e
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
+	 450 765 3240 765
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
+	 450 2925 3240 2925
+2 2 0 1 0 7 110 -1 20 0.000 0 0 -1 0 0 5
+	 450 450 3240 450 3240 5130 450 5130 450 450
+4 0 0 100 0 16 12 0.0000 4 165 2115 540 675 ec_datagram_t\001
+4 0 0 100 0 16 12 0.0000 4 150 2670 540 990 list: struct list_head\001
+4 0 0 100 -1 16 12 0.0000 4 150 3180 540 1170 queue: struct list_head\001
+4 0 0 100 -1 16 12 0.0000 4 165 3645 540 1350 type: ec_datagram_type_t\001
+4 0 0 100 -1 16 12 0.0000 4 150 3240 540 1530 address: ec_address_t\001
+4 0 0 100 -1 16 12 0.0000 4 150 1905 540 1710 data: uint8_t *\001
+4 0 0 100 -1 16 12 0.0000 4 150 2445 540 1890 mem_size: size_t\001
+4 0 0 100 -1 16 12 0.0000 4 150 2370 540 2070 data_size: size_t\001
+4 0 0 100 -1 16 12 0.0000 4 150 1875 540 2250 index: uint8_t\001
+4 0 0 100 -1 16 12 0.0000 4 165 3645 540 2430 working_counter: uint16_t\001
+4 0 0 100 -1 16 12 0.0000 4 165 3795 540 2610 state: ec_datagram_state_t\001
+4 0 0 100 -1 16 12 0.0000 4 165 2175 540 2790 t_sent: cylces_t\001
+4 0 0 100 -1 16 12 0.0000 4 165 2910 540 3150 + ec_datagram_init()\001
+4 0 0 100 -1 16 12 0.0000 4 165 3210 540 3330 + ec_datagram_clear()\001
+4 0 0 100 -1 16 12 0.0000 4 165 4125 540 3540 + ec_datagram_prealloc(): int\001
+4 0 0 100 -1 16 12 0.0000 4 165 3555 540 3750 + ec_datagram_nprd():int\001
+4 0 0 100 -1 16 12 0.0000 4 165 3690 540 3960 + ec_datagram_npwr(): int\001
+4 0 0 100 -1 16 12 0.0000 4 165 3630 540 4170 + ec_datagram_aprd(): int\001
+4 0 0 100 -1 16 12 0.0000 4 165 3690 540 4380 + ec_datagram_apwr(): int\001
+4 0 0 100 -1 16 12 0.0000 4 165 3450 540 4590 + ec_datagram_brd(): int\001
+4 0 0 100 -1 16 12 0.0000 4 165 3510 540 4800 + ec_datagram_bwr(): int\001
+4 0 0 100 -1 16 12 0.0000 4 165 3405 540 5010 + ec_datagram_lrw(): int\001
Binary file doc/images/uml-datagram.pdf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/images/uml-debug.eps	Mon Sep 25 15:53:33 2006 +0000
@@ -0,0 +1,134 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: /home/fp/diplom/diplom/bilder/uml-debug.fig
+%%Creator: fig2dev Version 3.2 Patchlevel 4
+%%CreationDate: Mon Aug  7 17:57:04 2006
+%%For: fp@jupiter (Florian Pose)
+%%BoundingBox: 0 0 177 121
+%%Magnification: 1.0000
+%%EndComments
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+/col32 {0.555 0.555 0.555 srgb} bind def
+
+end
+save
+newpath 0 121 moveto 0 0 lineto 269 0 lineto 269 121 lineto closepath clip newpath
+-27.6 148.2 translate
+1 -1 scale
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+  bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+  4 -2 roll mul srgb} bind def
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+$F2psBegin
+10 setmiterlimit
+0 slj 0 slc
+ 0.06299 0.06299 sc
+%
+% Fig objects follow
+%
+% 
+% here starts figure with depth 110
+% Polyline
+7.500 slw
+n 450 450 m 3240 450 l 3240 2340 l 450 2340 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr 
+% here ends figure;
+% 
+% here starts figure with depth 100
+% Polyline
+7.500 slw
+n 450 765 m
+ 3240 765 l gs col0 s gr 
+% Polyline
+n 450 1575 m
+ 3240 1575 l gs col0 s gr 
+/Helvetica ff 180.00 scf sf
+540 990 m
+gs 1 -1 sc (dev: struct net_device *) col0 sh gr
+/Helvetica ff 180.00 scf sf
+540 1215 m
+gs 1 -1 sc (stats: struct net_device_stats) col0 sh gr
+/Helvetica ff 180.00 scf sf
+540 1440 m
+gs 1 -1 sc (opened: uint8_t) col0 sh gr
+/Helvetica ff 180.00 scf sf
+540 675 m
+gs 1 -1 sc (ec_debug_t) col0 sh gr
+/Helvetica ff 180.00 scf sf
+540 1800 m
+gs 1 -1 sc (+ ec_debug_init\(\): int) col0 sh gr
+/Helvetica ff 180.00 scf sf
+540 2010 m
+gs 1 -1 sc (+ ec_debug_clear\(\)) col0 sh gr
+/Helvetica ff 180.00 scf sf
+540 2220 m
+gs 1 -1 sc (+ ec_debug_send\(\)) col0 sh gr
+% here ends figure;
+$F2psEnd
+rs
+showpage
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/images/uml-debug.fig	Mon Sep 25 15:53:33 2006 +0000
@@ -0,0 +1,23 @@
+#FIG 3.2
+Portrait
+Center
+Metric
+A4      
+100.00
+Single
+-2
+1200 2
+0 32 #8e8e8e
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
+	 450 765 3240 765
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
+	 450 1575 3240 1575
+2 2 0 1 0 7 110 -1 20 0.000 0 0 -1 0 0 5
+	 450 450 3240 450 3240 2340 450 2340 450 450
+4 0 0 100 0 16 12 0.0000 4 150 3270 540 990 dev: struct net_device *\001
+4 0 0 100 -1 16 12 0.0000 4 150 4050 540 1215 stats: struct net_device_stats\001
+4 0 0 100 -1 16 12 0.0000 4 150 2175 540 1440 opened: uint8_t\001
+4 0 0 100 0 16 12 0.0000 4 165 1680 540 675 ec_debug_t\001
+4 0 0 100 -1 16 12 0.0000 4 165 2955 540 1800 + ec_debug_init(): int\001
+4 0 0 100 -1 16 12 0.0000 4 165 2775 540 2010 + ec_debug_clear()\001
+4 0 0 100 -1 16 12 0.0000 4 165 2775 540 2220 + ec_debug_send()\001
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/images/uml-debug.pdf	Mon Sep 25 15:53:33 2006 +0000
@@ -0,0 +1,75 @@
+%PDF-1.3
+%쏢
+5 0 obj
+<</Length 6 0 R/Filter /FlateDecode>>
+stream
+xmOO0сdi.'M[6iBȇ<Qu,ymo`l	<YgXc %␽K#s1	^/+%;`_Z
+(*TyE:u<la|:!ʶdLƒ,[08
+
+;(51:cJmv߁-7:ccvgS3Cb)Y8x"dsJKP̾Kۼ,9JD!]Z7
7g1‹qendstream
+endobj
+6 0 obj
+277
+endobj
+4 0 obj
+<</Type/Page/MediaBox [0 0 177 121]
+/Rotate 0/Parent 3 0 R
+/Resources<</ProcSet[/PDF /Text]
+/ExtGState 9 0 R
+/Font 10 0 R
+>>
+/Contents 5 0 R
+>>
+endobj
+3 0 obj
+<< /Type /Pages /Kids [
+4 0 R
+] /Count 1
+>>
+endobj
+1 0 obj
+<</Type /Catalog /Pages 3 0 R
+>>
+endobj
+7 0 obj
+<</Type/ExtGState
+/OPM 1>>endobj
+9 0 obj
+<</R7
+7 0 R>>
+endobj
+10 0 obj
+<</R8
+8 0 R>>
+endobj
+8 0 obj
+<</BaseFont/Helvetica/Type/Font
+/Subtype/Type1>>
+endobj
+2 0 obj
+<</Producer(ESP Ghostscript 8.15)
+/CreationDate(D:20060807175937)
+/ModDate(D:20060807175937)
+/Title(/home/fp/diplom/diplom/bilder/uml-debug.fig)
+/Creator(fig2dev Version 3.2 Patchlevel 4)
+/Author(fp@jupiter \(Florian Pose\))>>endobj
+xref
+0 11
+0000000000 65535 f 
+0000000599 00000 n 
+0000000811 00000 n 
+0000000540 00000 n 
+0000000381 00000 n 
+0000000015 00000 n 
+0000000362 00000 n 
+0000000647 00000 n 
+0000000747 00000 n 
+0000000688 00000 n 
+0000000717 00000 n 
+trailer
+<< /Size 11 /Root 1 0 R /Info 2 0 R
+/ID [(Nv;O*YQ0)(Nv;O*YQ0)]
+>>
+startxref
+1052
+%%EOF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/images/uml-device.eps	Mon Sep 25 15:53:33 2006 +0000
@@ -0,0 +1,167 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: uml-device.fig
+%%Creator: fig2dev Version 3.2 Patchlevel 4
+%%CreationDate: Mon Aug  7 17:47:24 2006
+%%For: fp@jupiter (Florian Pose)
+%%BoundingBox: 0 0 176 280
+%%Magnification: 1.0000
+%%EndComments
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+/col32 {0.555 0.555 0.555 srgb} bind def
+
+end
+save
+newpath 0 280 moveto 0 0 lineto 294 0 lineto 294 280 lineto closepath clip newpath
+-27.6 306.9 translate
+1 -1 scale
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+  bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+  4 -2 roll mul srgb} bind def
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+$F2psBegin
+10 setmiterlimit
+0 slj 0 slc
+ 0.06299 0.06299 sc
+%
+% Fig objects follow
+%
+% 
+% here starts figure with depth 110
+% Polyline
+7.500 slw
+n 450 450 m 3240 450 l 3240 4860 l 450 4860 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr 
+% here ends figure;
+% 
+% here starts figure with depth 100
+% Polyline
+7.500 slw
+n 450 765 m
+ 3240 765 l gs col0 s gr 
+% Polyline
+n 450 2700 m
+ 3240 2700 l gs col0 s gr 
+/Helvetica ff 180.00 scf sf
+540 990 m
+gs 1 -1 sc (master: ec_master_t *) col0 sh gr
+/Helvetica ff 180.00 scf sf
+540 1215 m
+gs 1 -1 sc (dev: struct net_device *) col0 sh gr
+/Helvetica ff 180.00 scf sf
+540 1440 m
+gs 1 -1 sc (open: uint8_t) col0 sh gr
+/Helvetica ff 180.00 scf sf
+540 1665 m
+gs 1 -1 sc (tx_skb: struct sk_buff *) col0 sh gr
+/Helvetica ff 180.00 scf sf
+540 1890 m
+gs 1 -1 sc (isr: ec_isr_t *) col0 sh gr
+/Helvetica ff 180.00 scf sf
+540 2115 m
+gs 1 -1 sc (module: struct module *) col0 sh gr
+/Helvetica ff 180.00 scf sf
+540 2340 m
+gs 1 -1 sc (link_state: uint8_t) col0 sh gr
+/Helvetica ff 180.00 scf sf
+540 2565 m
+gs 1 -1 sc (dbg: ec_debug_t) col0 sh gr
+/Helvetica ff 180.00 scf sf
+540 3150 m
+gs 1 -1 sc (+ ec_device_clear\(\)) col0 sh gr
+/Helvetica ff 180.00 scf sf
+540 2925 m
+gs 1 -1 sc (+ ec_device_init\(\): int) col0 sh gr
+/Helvetica ff 180.00 scf sf
+540 3375 m
+gs 1 -1 sc (+ ec_device_open\(\): int) col0 sh gr
+/Helvetica ff 180.00 scf sf
+540 3600 m
+gs 1 -1 sc (+ ec_device_close\(\): int) col0 sh gr
+/Helvetica ff 180.00 scf sf
+540 3825 m
+gs 1 -1 sc (+ ec_device_call_isr\(\)) col0 sh gr
+/Helvetica ff 180.00 scf sf
+540 4050 m
+gs 1 -1 sc (+ ec_device_tx_data\(\): uint8_t *) col0 sh gr
+/Helvetica ff 180.00 scf sf
+540 675 m
+gs 1 -1 sc (ec_device_t) col0 sh gr
+/Helvetica ff 180.00 scf sf
+540 4275 m
+gs 1 -1 sc (+ ec_device_send\(\)) col0 sh gr
+/Helvetica ff 180.00 scf sf
+540 4500 m
+gs 1 -1 sc (+ ecdev_receive\(\)) col0 sh gr
+/Helvetica ff 180.00 scf sf
+540 4725 m
+gs 1 -1 sc (+ ecdev_link_state\(\)) col0 sh gr
+% here ends figure;
+$F2psEnd
+rs
+showpage
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/images/uml-device.fig	Mon Sep 25 15:53:33 2006 +0000
@@ -0,0 +1,34 @@
+#FIG 3.2
+Portrait
+Center
+Metric
+A4      
+100.00
+Single
+-2
+1200 2
+0 32 #8e8e8e
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
+	 450 765 3240 765
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
+	 450 2700 3240 2700
+2 2 0 1 0 7 110 -1 20 0.000 0 0 -1 0 0 5
+	 450 450 3240 450 3240 4860 450 4860 450 450
+4 0 0 100 0 16 12 0.0000 4 150 3045 540 990 master: ec_master_t *\001
+4 0 0 100 -1 16 12 0.0000 4 150 3270 540 1215 dev: struct net_device *\001
+4 0 0 100 -1 16 12 0.0000 4 150 1815 540 1440 open: uint8_t\001
+4 0 0 100 -1 16 12 0.0000 4 150 3135 540 1665 tx_skb: struct sk_buff *\001
+4 0 0 100 -1 16 12 0.0000 4 150 1815 540 1890 isr: ec_isr_t *\001
+4 0 0 100 -1 16 12 0.0000 4 120 3285 540 2115 module: struct module *\001
+4 0 0 100 -1 16 12 0.0000 4 150 2445 540 2340 link_state: uint8_t\001
+4 0 0 100 -1 16 12 0.0000 4 165 2370 540 2565 dbg: ec_debug_t\001
+4 0 0 100 -1 16 12 0.0000 4 165 2820 540 3150 + ec_device_clear()\001
+4 0 0 100 -1 16 12 0.0000 4 165 3000 540 2925 + ec_device_init(): int\001
+4 0 0 100 -1 16 12 0.0000 4 165 3315 540 3375 + ec_device_open(): int\001
+4 0 0 100 -1 16 12 0.0000 4 165 3360 540 3600 + ec_device_close(): int\001
+4 0 0 100 -1 16 12 0.0000 4 165 3135 540 3825 + ec_device_call_isr()\001
+4 0 0 100 -1 16 12 0.0000 4 165 4440 540 4050 + ec_device_tx_data(): uint8_t *\001
+4 0 0 100 0 16 12 0.0000 4 150 1725 540 675 ec_device_t\001
+4 0 0 100 -1 16 12 0.0000 4 165 2820 540 4275 + ec_device_send()\001
+4 0 0 100 -1 16 12 0.0000 4 165 2565 540 4500 + ecdev_receive()\001
+4 0 0 100 -1 16 12 0.0000 4 165 2865 540 4725 + ecdev_link_state()\001
Binary file doc/images/uml-device.pdf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/images/uml-domain.eps	Mon Sep 25 15:53:33 2006 +0000
@@ -0,0 +1,220 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: uml-domain.fig
+%%Creator: fig2dev Version 3.2 Patchlevel 4
+%%CreationDate: Mon Aug  7 21:01:39 2006
+%%For: fp@jupiter (Florian Pose)
+%%BoundingBox: 0 0 236 294
+%%Magnification: 1.0000
+%%EndComments
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+/col32 {0.555 0.555 0.555 srgb} bind def
+
+end
+save
+newpath 0 294 moveto 0 0 lineto 399 0 lineto 399 294 lineto closepath clip newpath
+-27.6 321.1 translate
+1 -1 scale
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+  bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+  4 -2 roll mul srgb} bind def
+/reencdict 12 dict def /ReEncode { reencdict begin
+/newcodesandnames exch def /newfontname exch def /basefontname exch def
+/basefontdict basefontname findfont def /newfont basefontdict maxlength dict def
+basefontdict { exch dup /FID ne { dup /Encoding eq
+{ exch dup length array copy newfont 3 1 roll put }
+{ exch newfont 3 1 roll put } ifelse } { pop pop } ifelse } forall
+newfont /FontName newfontname put newcodesandnames aload pop
+128 1 255 { newfont /Encoding get exch /.notdef put } for
+newcodesandnames length 2 idiv { newfont /Encoding get 3 1 roll put } repeat
+newfontname newfont definefont pop end } def
+/isovec [
+8#055 /minus 8#200 /grave 8#201 /acute 8#202 /circumflex 8#203 /tilde
+8#204 /macron 8#205 /breve 8#206 /dotaccent 8#207 /dieresis
+8#210 /ring 8#211 /cedilla 8#212 /hungarumlaut 8#213 /ogonek 8#214 /caron
+8#220 /dotlessi 8#230 /oe 8#231 /OE
+8#240 /space 8#241 /exclamdown 8#242 /cent 8#243 /sterling
+8#244 /currency 8#245 /yen 8#246 /brokenbar 8#247 /section 8#250 /dieresis
+8#251 /copyright 8#252 /ordfeminine 8#253 /guillemotleft 8#254 /logicalnot
+8#255 /hyphen 8#256 /registered 8#257 /macron 8#260 /degree 8#261 /plusminus
+8#262 /twosuperior 8#263 /threesuperior 8#264 /acute 8#265 /mu 8#266 /paragraph
+8#267 /periodcentered 8#270 /cedilla 8#271 /onesuperior 8#272 /ordmasculine
+8#273 /guillemotright 8#274 /onequarter 8#275 /onehalf
+8#276 /threequarters 8#277 /questiondown 8#300 /Agrave 8#301 /Aacute
+8#302 /Acircumflex 8#303 /Atilde 8#304 /Adieresis 8#305 /Aring
+8#306 /AE 8#307 /Ccedilla 8#310 /Egrave 8#311 /Eacute
+8#312 /Ecircumflex 8#313 /Edieresis 8#314 /Igrave 8#315 /Iacute
+8#316 /Icircumflex 8#317 /Idieresis 8#320 /Eth 8#321 /Ntilde 8#322 /Ograve
+8#323 /Oacute 8#324 /Ocircumflex 8#325 /Otilde 8#326 /Odieresis 8#327 /multiply
+8#330 /Oslash 8#331 /Ugrave 8#332 /Uacute 8#333 /Ucircumflex
+8#334 /Udieresis 8#335 /Yacute 8#336 /Thorn 8#337 /germandbls 8#340 /agrave
+8#341 /aacute 8#342 /acircumflex 8#343 /atilde 8#344 /adieresis 8#345 /aring
+8#346 /ae 8#347 /ccedilla 8#350 /egrave 8#351 /eacute
+8#352 /ecircumflex 8#353 /edieresis 8#354 /igrave 8#355 /iacute
+8#356 /icircumflex 8#357 /idieresis 8#360 /eth 8#361 /ntilde 8#362 /ograve
+8#363 /oacute 8#364 /ocircumflex 8#365 /otilde 8#366 /odieresis 8#367 /divide
+8#370 /oslash 8#371 /ugrave 8#372 /uacute 8#373 /ucircumflex
+8#374 /udieresis 8#375 /yacute 8#376 /thorn 8#377 /ydieresis] def
+/Helvetica /Helvetica-iso isovec ReEncode
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+$F2psBegin
+10 setmiterlimit
+0 slj 0 slc
+ 0.06299 0.06299 sc
+%
+% Fig objects follow
+%
+% 
+% here starts figure with depth 110
+% Polyline
+7.500 slw
+n 450 450 m 4140 450 l 4140 5085 l 450 5085 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr 
+% here ends figure;
+% 
+% here starts figure with depth 100
+% Polyline
+7.500 slw
+n 450 765 m
+ 4140 765 l gs col0 s gr 
+% Polyline
+n 450 2925 m
+ 4140 2925 l gs col0 s gr 
+/Helvetica-iso ff 180.00 scf sf
+540 675 m
+gs 1 -1 sc (ec_domain_t) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 990 m
+gs 1 -1 sc (kobj: struct kobject) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 1170 m
+gs 1 -1 sc (list: struct list_head) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 1350 m
+gs 1 -1 sc (index: unsigned int) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 1530 m
+gs 1 -1 sc (master: ec_master_t *) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 1710 m
+gs 1 -1 sc (data_size: size_t) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 1890 m
+gs 1 -1 sc (datagrams: struct list_head) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 2070 m
+gs 1 -1 sc (base_address: uint32_t) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 2250 m
+gs 1 -1 sc (response_count: unsigned int) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 2430 m
+gs 1 -1 sc (data_regs: struct list_head) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 2610 m
+gs 1 -1 sc (working_counter_changes: unsigned int) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 2790 m
+gs 1 -1 sc (t_last: cycles_t) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 3150 m
+gs 1 -1 sc (+ ec_domain_init\(\): int) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 3330 m
+gs 1 -1 sc (+ ec_domain_clear\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 3510 m
+gs 1 -1 sc (+ ec_domain_alloc\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 3690 m
+gs 1 -1 sc (+ ec_domain_queue\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 3870 m
+gs 1 -1 sc (- ec_domain_reg_pdo_entry\(\): int) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 4050 m
+gs 1 -1 sc (- ec_domain_clear_data_regs\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 4230 m
+gs 1 -1 sc (- ec_domain_add_datagram\(\): int) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 4410 m
+gs 1 -1 sc (+ ecrt_domain_register_pdo\(\): ec_slave_t *) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 4590 m
+gs 1 -1 sc (+ ecrt_domain_register_pdo_list\(\): int) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 4770 m
+gs 1 -1 sc (+ ecrt_domain_process\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 4950 m
+gs 1 -1 sc (+ ecrt_domain_state\(\): int) col0 sh gr
+% here ends figure;
+$F2psEnd
+rs
+showpage
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/images/uml-domain.fig	Mon Sep 25 15:53:33 2006 +0000
@@ -0,0 +1,39 @@
+#FIG 3.2
+Portrait
+Center
+Metric
+A4      
+100.00
+Single
+-2
+1200 2
+0 32 #8e8e8e
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
+	 450 765 4140 765
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
+	 450 2925 4140 2925
+2 2 0 1 0 7 110 -1 20 0.000 0 0 -1 0 0 5
+	 450 450 4140 450 4140 5085 450 5085 450 450
+4 0 0 100 0 16 12 0.0000 4 150 1830 540 675 ec_domain_t\001
+4 0 0 100 0 16 12 0.0000 4 165 2610 540 990 kobj: struct kobject\001
+4 0 0 100 -1 16 12 0.0000 4 150 2670 540 1170 list: struct list_head\001
+4 0 0 100 -1 16 12 0.0000 4 165 2655 540 1350 index: unsigned int\001
+4 0 0 100 -1 16 12 0.0000 4 150 3045 540 1530 master: ec_master_t *\001
+4 0 0 100 -1 16 12 0.0000 4 150 2370 540 1710 data_size: size_t\001
+4 0 0 100 -1 16 12 0.0000 4 165 3780 540 1890 datagrams: struct list_head\001
+4 0 0 100 -1 16 12 0.0000 4 150 3315 540 2070 base_address: uint32_t\001
+4 0 0 100 -1 16 12 0.0000 4 165 4170 540 2250 response_count: unsigned int\001
+4 0 0 100 -1 16 12 0.0000 4 165 3705 540 2430 data_regs: struct list_head\001
+4 0 0 100 -1 16 12 0.0000 4 165 5655 540 2610 working_counter_changes: unsigned int\001
+4 0 0 100 -1 16 12 0.0000 4 165 2070 540 2790 t_last: cycles_t\001
+4 0 0 100 -1 16 12 0.0000 4 165 3105 540 3150 + ec_domain_init(): int\001
+4 0 0 100 -1 16 12 0.0000 4 165 2925 540 3330 + ec_domain_clear()\001
+4 0 0 100 -1 16 12 0.0000 4 165 2895 540 3510 + ec_domain_alloc()\001
+4 0 0 100 -1 16 12 0.0000 4 165 3120 540 3690 + ec_domain_queue()\001
+4 0 0 100 -1 16 12 0.0000 4 165 4695 540 3870 - ec_domain_reg_pdo_entry(): int\001
+4 0 0 100 -1 16 12 0.0000 4 165 4455 540 4050 - ec_domain_clear_data_regs()\001
+4 0 0 100 -1 16 12 0.0000 4 165 4680 540 4230 - ec_domain_add_datagram(): int\001
+4 0 0 100 -1 16 12 0.0000 4 165 6075 540 4410 + ecrt_domain_register_pdo(): ec_slave_t *\001
+4 0 0 100 -1 16 12 0.0000 4 165 5235 540 4590 + ecrt_domain_register_pdo_list(): int\001
+4 0 0 100 -1 16 12 0.0000 4 165 3540 540 4770 + ecrt_domain_process()\001
+4 0 0 100 -1 16 12 0.0000 4 165 3555 540 4950 + ecrt_domain_state(): int\001
Binary file doc/images/uml-domain.pdf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/images/uml-eoe.eps	Mon Sep 25 15:53:33 2006 +0000
@@ -0,0 +1,259 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: uml-eoe.fig
+%%Creator: fig2dev Version 3.2 Patchlevel 4
+%%CreationDate: Mon Aug  7 20:40:53 2006
+%%For: fp@jupiter (Florian Pose)
+%%BoundingBox: 0 0 178 439
+%%Magnification: 1.0000
+%%EndComments
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+/col32 {0.555 0.555 0.555 srgb} bind def
+
+end
+save
+newpath 0 439 moveto 0 0 lineto 299 0 lineto 299 439 lineto closepath clip newpath
+-27.6 465.6 translate
+1 -1 scale
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+  bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+  4 -2 roll mul srgb} bind def
+/reencdict 12 dict def /ReEncode { reencdict begin
+/newcodesandnames exch def /newfontname exch def /basefontname exch def
+/basefontdict basefontname findfont def /newfont basefontdict maxlength dict def
+basefontdict { exch dup /FID ne { dup /Encoding eq
+{ exch dup length array copy newfont 3 1 roll put }
+{ exch newfont 3 1 roll put } ifelse } { pop pop } ifelse } forall
+newfont /FontName newfontname put newcodesandnames aload pop
+128 1 255 { newfont /Encoding get exch /.notdef put } for
+newcodesandnames length 2 idiv { newfont /Encoding get 3 1 roll put } repeat
+newfontname newfont definefont pop end } def
+/isovec [
+8#055 /minus 8#200 /grave 8#201 /acute 8#202 /circumflex 8#203 /tilde
+8#204 /macron 8#205 /breve 8#206 /dotaccent 8#207 /dieresis
+8#210 /ring 8#211 /cedilla 8#212 /hungarumlaut 8#213 /ogonek 8#214 /caron
+8#220 /dotlessi 8#230 /oe 8#231 /OE
+8#240 /space 8#241 /exclamdown 8#242 /cent 8#243 /sterling
+8#244 /currency 8#245 /yen 8#246 /brokenbar 8#247 /section 8#250 /dieresis
+8#251 /copyright 8#252 /ordfeminine 8#253 /guillemotleft 8#254 /logicalnot
+8#255 /hyphen 8#256 /registered 8#257 /macron 8#260 /degree 8#261 /plusminus
+8#262 /twosuperior 8#263 /threesuperior 8#264 /acute 8#265 /mu 8#266 /paragraph
+8#267 /periodcentered 8#270 /cedilla 8#271 /onesuperior 8#272 /ordmasculine
+8#273 /guillemotright 8#274 /onequarter 8#275 /onehalf
+8#276 /threequarters 8#277 /questiondown 8#300 /Agrave 8#301 /Aacute
+8#302 /Acircumflex 8#303 /Atilde 8#304 /Adieresis 8#305 /Aring
+8#306 /AE 8#307 /Ccedilla 8#310 /Egrave 8#311 /Eacute
+8#312 /Ecircumflex 8#313 /Edieresis 8#314 /Igrave 8#315 /Iacute
+8#316 /Icircumflex 8#317 /Idieresis 8#320 /Eth 8#321 /Ntilde 8#322 /Ograve
+8#323 /Oacute 8#324 /Ocircumflex 8#325 /Otilde 8#326 /Odieresis 8#327 /multiply
+8#330 /Oslash 8#331 /Ugrave 8#332 /Uacute 8#333 /Ucircumflex
+8#334 /Udieresis 8#335 /Yacute 8#336 /Thorn 8#337 /germandbls 8#340 /agrave
+8#341 /aacute 8#342 /acircumflex 8#343 /atilde 8#344 /adieresis 8#345 /aring
+8#346 /ae 8#347 /ccedilla 8#350 /egrave 8#351 /eacute
+8#352 /ecircumflex 8#353 /edieresis 8#354 /igrave 8#355 /iacute
+8#356 /icircumflex 8#357 /idieresis 8#360 /eth 8#361 /ntilde 8#362 /ograve
+8#363 /oacute 8#364 /ocircumflex 8#365 /otilde 8#366 /odieresis 8#367 /divide
+8#370 /oslash 8#371 /ugrave 8#372 /uacute 8#373 /ucircumflex
+8#374 /udieresis 8#375 /yacute 8#376 /thorn 8#377 /ydieresis] def
+/Helvetica /Helvetica-iso isovec ReEncode
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+$F2psBegin
+10 setmiterlimit
+0 slj 0 slc
+ 0.06299 0.06299 sc
+%
+% Fig objects follow
+%
+% 
+% here starts figure with depth 110
+% Polyline
+7.500 slw
+n 450 450 m 3240 450 l 3240 7380 l 450 7380 l
+ cp gs col7 1.00 shd ef gr gs col0 s gr 
+% here ends figure;
+% 
+% here starts figure with depth 100
+% Polyline
+7.500 slw
+n 450 765 m
+ 3240 765 l gs col0 s gr 
+% Polyline
+n 450 5220 m
+ 3240 5220 l gs col0 s gr 
+/Helvetica-iso ff 180.00 scf sf
+540 675 m
+gs 1 -1 sc (ec_eoe_t) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 990 m
+gs 1 -1 sc (list: struct list_head) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 1170 m
+gs 1 -1 sc (slave: ec_slave_t *) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 1350 m
+gs 1 -1 sc (datagram: ec_datagram_t) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 1530 m
+gs 1 -1 sc (state: void \(*\)\(ec_eoe_t *\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 1710 m
+gs 1 -1 sc (dev: struct net_device *) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 1890 m
+gs 1 -1 sc (stats: struct net_device_stats) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 2070 m
+gs 1 -1 sc (opened: unsigned int) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 2250 m
+gs 1 -1 sc (t_last: cycles_t) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 2430 m
+gs 1 -1 sc (rx_skb: struct sk_buff *) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 2610 m
+gs 1 -1 sc (rx_skb_offset: off_t) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 2790 m
+gs 1 -1 sc (rx_skb_size: size_t) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 2970 m
+gs 1 -1 sc (rx_expected_fragment: uint8_t) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 3150 m
+gs 1 -1 sc (rx_counter: uint32_t) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 3330 m
+gs 1 -1 sc (rx_rate: uint32_t) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 3510 m
+gs 1 -1 sc (tx_queue: struct list_head) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 3690 m
+gs 1 -1 sc (tx_queue_active: unsigned int) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 3870 m
+gs 1 -1 sc (tx_queued_frames: unsigned int) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 4050 m
+gs 1 -1 sc (tx_queue_lock: spinlock_t) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 4230 m
+gs 1 -1 sc (tx_frame: ec_eoe_frame_t) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 4410 m
+gs 1 -1 sc (tx_frame_number: uint8_t) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 4590 m
+gs 1 -1 sc (tx_fragment_number: uint8_t) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 4770 m
+gs 1 -1 sc (tx_offset: size_t) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 4950 m
+gs 1 -1 sc (tx_counter: uint32_t) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 5130 m
+gs 1 -1 sc (tx_rate: uint32_t) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 5445 m
+gs 1 -1 sc (+ ec_eoe_init\(\): int) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 5625 m
+gs 1 -1 sc (+ ec_eoe_clear\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 5805 m
+gs 1 -1 sc (+ ec_eoe_run\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 5985 m
+gs 1 -1 sc (+ ec_eoe_active\(\): int) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 6165 m
+gs 1 -1 sc (- ec_eoe_flush\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 6345 m
+gs 1 -1 sc (- ec_eoe_send\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 6525 m
+gs 1 -1 sc (- ec_eoe_state_rx_start\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 6705 m
+gs 1 -1 sc (- ec_eoe_state_rx_check\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 6885 m
+gs 1 -1 sc (- ec_eoe_state_rx_fetch\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 7065 m
+gs 1 -1 sc (- ec_eoe_state_tx_start\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 7245 m
+gs 1 -1 sc (- ec_eoe_state_tx_sent\(\)) col0 sh gr
+% here ends figure;
+$F2psEnd
+rs
+showpage
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/images/uml-eoe.fig	Mon Sep 25 15:53:33 2006 +0000
@@ -0,0 +1,52 @@
+#FIG 3.2
+Portrait
+Center
+Metric
+A4      
+100.00
+Single
+-2
+1200 2
+0 32 #8e8e8e
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
+	 450 765 3240 765
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
+	 450 5220 3240 5220
+2 2 0 1 0 7 110 -1 20 0.000 0 0 -1 0 0 5
+	 450 450 3240 450 3240 7380 450 7380 450 450
+4 0 0 100 0 16 12 0.0000 4 150 1320 540 675 ec_eoe_t\001
+4 0 0 100 0 16 12 0.0000 4 150 2670 540 990 list: struct list_head\001
+4 0 0 100 -1 16 12 0.0000 4 150 2655 540 1170 slave: ec_slave_t *\001
+4 0 0 100 -1 16 12 0.0000 4 165 3600 540 1350 datagram: ec_datagram_t\001
+4 0 0 100 -1 16 12 0.0000 4 165 3555 540 1530 state: void (*)(ec_eoe_t *)\001
+4 0 0 100 -1 16 12 0.0000 4 150 3270 540 1710 dev: struct net_device *\001
+4 0 0 100 -1 16 12 0.0000 4 150 4050 540 1890 stats: struct net_device_stats\001
+4 0 0 100 -1 16 12 0.0000 4 165 2955 540 2070 opened: unsigned int\001
+4 0 0 100 -1 16 12 0.0000 4 165 2070 540 2250 t_last: cycles_t\001
+4 0 0 100 -1 16 12 0.0000 4 150 3165 540 2430 rx_skb: struct sk_buff *\001
+4 0 0 100 -1 16 12 0.0000 4 150 2625 540 2610 rx_skb_offset: off_t\001
+4 0 0 100 -1 16 12 0.0000 4 150 2715 540 2790 rx_skb_size: size_t\001
+4 0 0 100 -1 16 12 0.0000 4 165 4260 540 2970 rx_expected_fragment: uint8_t\001
+4 0 0 100 -1 16 12 0.0000 4 150 2790 540 3150 rx_counter: uint32_t\001
+4 0 0 100 -1 16 12 0.0000 4 150 2265 540 3330 rx_rate: uint32_t\001
+4 0 0 100 -1 16 12 0.0000 4 150 3600 540 3510 tx_queue: struct list_head\001
+4 0 0 100 -1 16 12 0.0000 4 165 4215 540 3690 tx_queue_active: unsigned int\001
+4 0 0 100 -1 16 12 0.0000 4 165 4515 540 3870 tx_queued_frames: unsigned int\001
+4 0 0 100 -1 16 12 0.0000 4 150 3675 540 4050 tx_queue_lock: spinlock_t\001
+4 0 0 100 -1 16 12 0.0000 4 150 3660 540 4230 tx_frame: ec_eoe_frame_t\001
+4 0 0 100 -1 16 12 0.0000 4 150 3570 540 4410 tx_frame_number: uint8_t\001
+4 0 0 100 -1 16 12 0.0000 4 165 4005 540 4590 tx_fragment_number: uint8_t\001
+4 0 0 100 -1 16 12 0.0000 4 150 2160 540 4770 tx_offset: size_t\001
+4 0 0 100 -1 16 12 0.0000 4 150 2760 540 4950 tx_counter: uint32_t\001
+4 0 0 100 -1 16 12 0.0000 4 150 2235 540 5130 tx_rate: uint32_t\001
+4 0 0 100 -1 16 12 0.0000 4 165 2595 540 5445 + ec_eoe_init(): int\001
+4 0 0 100 -1 16 12 0.0000 4 165 2415 540 5625 + ec_eoe_clear()\001
+4 0 0 100 -1 16 12 0.0000 4 165 2175 540 5805 + ec_eoe_run()\001
+4 0 0 100 -1 16 12 0.0000 4 165 3030 540 5985 + ec_eoe_active(): int\001
+4 0 0 100 -1 16 12 0.0000 4 165 2310 540 6165 - ec_eoe_flush()\001
+4 0 0 100 -1 16 12 0.0000 4 165 2340 540 6345 - ec_eoe_send()\001
+4 0 0 100 -1 16 12 0.0000 4 165 3540 540 6525 - ec_eoe_state_rx_start()\001
+4 0 0 100 -1 16 12 0.0000 4 165 3795 540 6705 - ec_eoe_state_rx_check()\001
+4 0 0 100 -1 16 12 0.0000 4 165 3615 540 6885 - ec_eoe_state_rx_fetch()\001
+4 0 0 100 -1 16 12 0.0000 4 165 3510 540 7065 - ec_eoe_state_tx_start()\001
+4 0 0 100 -1 16 12 0.0000 4 165 3510 540 7245 - ec_eoe_state_tx_sent()\001
Binary file doc/images/uml-eoe.pdf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/images/uml-fsm.eps	Mon Sep 25 15:53:33 2006 +0000
@@ -0,0 +1,382 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: uml-fsm.fig
+%%Creator: fig2dev Version 3.2 Patchlevel 4
+%%CreationDate: Mon Aug  7 19:25:18 2006
+%%For: fp@jupiter (Florian Pose)
+%%BoundingBox: 0 0 500 461
+%%Magnification: 1.0000
+%%EndComments
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+/col32 {0.555 0.555 0.555 srgb} bind def
+
+end
+save
+newpath 0 461 moveto 0 0 lineto 600 0 lineto 600 461 lineto closepath clip newpath
+-27.6 488.3 translate
+1 -1 scale
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+  bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+  4 -2 roll mul srgb} bind def
+/reencdict 12 dict def /ReEncode { reencdict begin
+/newcodesandnames exch def /newfontname exch def /basefontname exch def
+/basefontdict basefontname findfont def /newfont basefontdict maxlength dict def
+basefontdict { exch dup /FID ne { dup /Encoding eq
+{ exch dup length array copy newfont 3 1 roll put }
+{ exch newfont 3 1 roll put } ifelse } { pop pop } ifelse } forall
+newfont /FontName newfontname put newcodesandnames aload pop
+128 1 255 { newfont /Encoding get exch /.notdef put } for
+newcodesandnames length 2 idiv { newfont /Encoding get 3 1 roll put } repeat
+newfontname newfont definefont pop end } def
+/isovec [
+8#055 /minus 8#200 /grave 8#201 /acute 8#202 /circumflex 8#203 /tilde
+8#204 /macron 8#205 /breve 8#206 /dotaccent 8#207 /dieresis
+8#210 /ring 8#211 /cedilla 8#212 /hungarumlaut 8#213 /ogonek 8#214 /caron
+8#220 /dotlessi 8#230 /oe 8#231 /OE
+8#240 /space 8#241 /exclamdown 8#242 /cent 8#243 /sterling
+8#244 /currency 8#245 /yen 8#246 /brokenbar 8#247 /section 8#250 /dieresis
+8#251 /copyright 8#252 /ordfeminine 8#253 /guillemotleft 8#254 /logicalnot
+8#255 /hyphen 8#256 /registered 8#257 /macron 8#260 /degree 8#261 /plusminus
+8#262 /twosuperior 8#263 /threesuperior 8#264 /acute 8#265 /mu 8#266 /paragraph
+8#267 /periodcentered 8#270 /cedilla 8#271 /onesuperior 8#272 /ordmasculine
+8#273 /guillemotright 8#274 /onequarter 8#275 /onehalf
+8#276 /threequarters 8#277 /questiondown 8#300 /Agrave 8#301 /Aacute
+8#302 /Acircumflex 8#303 /Atilde 8#304 /Adieresis 8#305 /Aring
+8#306 /AE 8#307 /Ccedilla 8#310 /Egrave 8#311 /Eacute
+8#312 /Ecircumflex 8#313 /Edieresis 8#314 /Igrave 8#315 /Iacute
+8#316 /Icircumflex 8#317 /Idieresis 8#320 /Eth 8#321 /Ntilde 8#322 /Ograve
+8#323 /Oacute 8#324 /Ocircumflex 8#325 /Otilde 8#326 /Odieresis 8#327 /multiply
+8#330 /Oslash 8#331 /Ugrave 8#332 /Uacute 8#333 /Ucircumflex
+8#334 /Udieresis 8#335 /Yacute 8#336 /Thorn 8#337 /germandbls 8#340 /agrave
+8#341 /aacute 8#342 /acircumflex 8#343 /atilde 8#344 /adieresis 8#345 /aring
+8#346 /ae 8#347 /ccedilla 8#350 /egrave 8#351 /eacute
+8#352 /ecircumflex 8#353 /edieresis 8#354 /igrave 8#355 /iacute
+8#356 /icircumflex 8#357 /idieresis 8#360 /eth 8#361 /ntilde 8#362 /ograve
+8#363 /oacute 8#364 /ocircumflex 8#365 /otilde 8#366 /odieresis 8#367 /divide
+8#370 /oslash 8#371 /ugrave 8#372 /uacute 8#373 /ucircumflex
+8#374 /udieresis 8#375 /yacute 8#376 /thorn 8#377 /ydieresis] def
+/Helvetica /Helvetica-iso isovec ReEncode
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+$F2psBegin
+10 setmiterlimit
+0 slj 0 slc
+ 0.06299 0.06299 sc
+%
+% Fig objects follow
+%
+% 
+% here starts figure with depth 110
+% Polyline
+7.500 slw
+n 4635 450 m 4635 7740 l 8325 7740 l
+ 8325 450 l gs col7 1.00 shd ef gr gs col0 s gr 
+% Polyline
+n 450 7695 m 450 450 l 4140 450 l
+ 4140 7740 l gs col7 1.00 shd ef gr gs col0 s gr 
+% here ends figure;
+% 
+% here starts figure with depth 100
+% Polyline
+7.500 slw
+n 450 765 m
+ 4140 765 l gs col0 s gr 
+% Polyline
+n 450 4365 m
+ 4140 4365 l gs col0 s gr 
+/Helvetica-iso ff 180.00 scf sf
+540 675 m
+gs 1 -1 sc (ec_fsm_t) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 990 m
+gs 1 -1 sc (master: ec_master_t *) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 1170 m
+gs 1 -1 sc (slave: ec_slave_t *) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 1350 m
+gs 1 -1 sc (datagram: ec_datagram_t) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 1530 m
+gs 1 -1 sc (master_state: void \(*\)\(ec_fsm_t *\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 1710 m
+gs 1 -1 sc (master_slaves_responding: unsigned int) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 1890 m
+gs 1 -1 sc (master_slave_states: ec_slave_state_t) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 2070 m
+gs 1 -1 sc (master_validation: unsigned int) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 2250 m
+gs 1 -1 sc (slave_state: void \(*\)\(ec_fsm_t *\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 2430 m
+gs 1 -1 sc (sii_state: void \(*\)\(ec_fsm_t *\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 2610 m
+gs 1 -1 sc (sii_offset: uint16_t) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 2790 m
+gs 1 -1 sc (sii_mode: unsigned int) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 2970 m
+gs 1 -1 sc (sii_value: uint8_t[4]) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 3150 m
+gs 1 -1 sc (sii_start: cycles_t) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 3330 m
+gs 1 -1 sc (change_state: void \(*\)\(ec_fsm_t *\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 3510 m
+gs 1 -1 sc (change_new: ec_sllave_state_t) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 3690 m
+gs 1 -1 sc (change_start: cycles_t) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 3870 m
+gs 1 -1 sc (coe_state: void \(*\)\(ec_fsm_t *\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 4050 m
+gs 1 -1 sc (sdodata: ec_sdo_data_t *) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 4230 m
+gs 1 -1 sc (coe_start: cycles_t) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 4590 m
+gs 1 -1 sc (+ ec_fsm_init\(\): int) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 4770 m
+gs 1 -1 sc (+ ec_fsm_clear\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 4950 m
+gs 1 -1 sc (+ ec_fsm_reset\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 5130 m
+gs 1 -1 sc (+ ec_fsm_execute\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 5310 m
+gs 1 -1 sc (+ ec_fsm_startup\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 5490 m
+gs 1 -1 sc (+ ec_fsm_startup_running\(\): int) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 5670 m
+gs 1 -1 sc (+ ec_fsm_startup_success\(\): int) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 5850 m
+gs 1 -1 sc (+ ec_fsm_configuration\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 6030 m
+gs 1 -1 sc (+ ec_fsm_configuration_running\(\): int) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 6210 m
+gs 1 -1 sc (+ ec_fsm_configuration_success\(\): int) col0 sh gr
+% here ends figure;
+% 
+% here starts figure with depth 50
+/Helvetica-iso ff 180.00 scf sf
+4725 1665 m
+gs 1 -1 sc (- ec_fsm_configuration_conf\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+4725 1845 m
+gs 1 -1 sc (- ec_fsm_slavescan_start\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+4725 2025 m
+gs 1 -1 sc (- ec_fsm_slavescan_address\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+4725 2205 m
+gs 1 -1 sc (- ec_fsm_slavescan_state\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+4725 2385 m
+gs 1 -1 sc (- ec_fsm_slavescan_base\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+4725 2565 m
+gs 1 -1 sc (- ec_fsm_slavescan_datalink\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+4725 2745 m
+gs 1 -1 sc (- ec_fsm_slavescan_eeprom_size\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+4725 2925 m
+gs 1 -1 sc (- ec_fsm_slavescan_eeprom_data\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+4725 3105 m
+gs 1 -1 sc (- ec_fsm_slaveconf_init\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+4725 3285 m
+gs 1 -1 sc (- ec_fsm_slaveconf_sync\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+4725 3465 m
+gs 1 -1 sc (- ec_fsm_slaveconf_preop\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+4725 3645 m
+gs 1 -1 sc (- ec_fsm_slaveconf_fmmu\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+4725 3825 m
+gs 1 -1 sc (- ec_fsm_slaveconf_sdoconf\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+4725 4005 m
+gs 1 -1 sc (- ec_fsm_slaveconf_saveop\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+4725 4185 m
+gs 1 -1 sc (- ec_fsm_slaveconf_op\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+4725 4365 m
+gs 1 -1 sc (- ec_fsm_sii_start_reading\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+4725 4545 m
+gs 1 -1 sc (- ec_fsm_sii_read_check\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+4725 4725 m
+gs 1 -1 sc (- ec_fsm_sii_read_fetch\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+4725 4905 m
+gs 1 -1 sc (- ec_fsm_sii_start_writing\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+4725 5085 m
+gs 1 -1 sc (- ec_fsm_sii_write_check\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+4725 5265 m
+gs 1 -1 sc (- ec_fsm_sii_write_check2\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+4725 5445 m
+gs 1 -1 sc (- ec_fsm_change_start\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+4725 5625 m
+gs 1 -1 sc (- ec_fsm_change_check\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+4725 5805 m
+gs 1 -1 sc (- ec_fsm_change_status\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+4725 5985 m
+gs 1 -1 sc (- ec_fsm_change_code\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+4725 6165 m
+gs 1 -1 sc (- ec_fsm_change_ack\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+4725 6345 m
+gs 1 -1 sc (- ec_fsm_change_check_ack\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+4725 6525 m
+gs 1 -1 sc (- ec_fsm_coe_down_start\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+4725 6705 m
+gs 1 -1 sc (- ec_fsm_coe_down_request\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+4725 6885 m
+gs 1 -1 sc (- ec_fsm_coe_down_check\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+4725 7065 m
+gs 1 -1 sc (- ec_fsm_coe_down_response\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+4725 7245 m
+gs 1 -1 sc (- ec_fsm_end\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+4725 7425 m
+gs 1 -1 sc (- ec_fsm_error\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+4725 765 m
+gs 1 -1 sc (- ec_fsm_master_write_eeprom\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+4725 945 m
+gs 1 -1 sc (- ec_fsm_startup_start\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+4725 1125 m
+gs 1 -1 sc (- ec_fsm_startup_broadcast\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+4725 1305 m
+gs 1 -1 sc (- ec_fsm_startup_scan\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+4725 1485 m
+gs 1 -1 sc (- ec_fsm_configuration_start\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 6390 m
+gs 1 -1 sc (- ec_fsm_master_start\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 6570 m
+gs 1 -1 sc (- ec_fsm_master_broadcast\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 6750 m
+gs 1 -1 sc (- ec_fsm_master_read_states\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 6930 m
+gs 1 -1 sc (- ec_fsm_master_validate_vendor\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 7110 m
+gs 1 -1 sc (- ec_fsm_master_validate_product\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 7290 m
+gs 1 -1 sc (- ec_fsm_master_rewrite_addresses\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+540 7470 m
+gs 1 -1 sc (- ec_fsm_master_configure_slaves\(\)) col0 sh gr
+% here ends figure;
+$F2psEnd
+rs
+showpage
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/images/uml-fsm.fig	Mon Sep 25 15:53:33 2006 +0000
@@ -0,0 +1,93 @@
+#FIG 3.2
+Portrait
+Center
+Metric
+A4      
+100.00
+Single
+-2
+1200 2
+0 32 #8e8e8e
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
+	 450 765 4140 765
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
+	 450 4365 4140 4365
+2 1 0 1 0 7 110 -1 20 0.000 0 0 -1 0 0 4
+	 4635 450 4635 7740 8325 7740 8325 450
+2 1 0 1 0 7 110 -1 20 0.000 0 0 -1 0 0 4
+	 450 7695 450 450 4140 450 4140 7740
+4 0 0 100 0 16 12 0.0000 4 150 1275 540 675 ec_fsm_t\001
+4 0 0 100 0 16 12 0.0000 4 150 3045 540 990 master: ec_master_t *\001
+4 0 0 100 -1 16 12 0.0000 4 150 2655 540 1170 slave: ec_slave_t *\001
+4 0 0 100 -1 16 12 0.0000 4 165 3600 540 1350 datagram: ec_datagram_t\001
+4 0 0 100 -1 16 12 0.0000 4 165 4650 540 1530 master_state: void (*)(ec_fsm_t *)\001
+4 0 0 100 -1 16 12 0.0000 4 165 5730 540 1710 master_slaves_responding: unsigned int\001
+4 0 0 100 -1 16 12 0.0000 4 150 5475 540 1890 master_slave_states: ec_slave_state_t\001
+4 0 0 100 -1 16 12 0.0000 4 165 4380 540 2070 master_validation: unsigned int\001
+4 0 0 100 -1 16 12 0.0000 4 165 4455 540 2250 slave_state: void (*)(ec_fsm_t *)\001
+4 0 0 100 -1 16 12 0.0000 4 165 4005 540 2430 sii_state: void (*)(ec_fsm_t *)\001
+4 0 0 100 -1 16 12 0.0000 4 150 2520 540 2610 sii_offset: uint16_t\001
+4 0 0 100 -1 16 12 0.0000 4 165 3165 540 2790 sii_mode: unsigned int\001
+4 0 0 100 -1 16 12 0.0000 4 165 2700 540 2970 sii_value: uint8_t[4]\001
+4 0 0 100 -1 16 12 0.0000 4 165 2415 540 3150 sii_start: cycles_t\001
+4 0 0 100 -1 16 12 0.0000 4 165 4755 540 3330 change_state: void (*)(ec_fsm_t *)\001
+4 0 0 100 -1 16 12 0.0000 4 165 4470 540 3510 change_new: ec_sllave_state_t\001
+4 0 0 100 -1 16 12 0.0000 4 165 3165 540 3690 change_start: cycles_t\001
+4 0 0 100 -1 16 12 0.0000 4 165 4215 540 3870 coe_state: void (*)(ec_fsm_t *)\001
+4 0 0 100 -1 16 12 0.0000 4 150 3585 540 4050 sdodata: ec_sdo_data_t *\001
+4 0 0 100 -1 16 12 0.0000 4 165 2625 540 4230 coe_start: cycles_t\001
+4 0 0 100 -1 16 12 0.0000 4 165 2550 540 4590 + ec_fsm_init(): int\001
+4 0 0 100 -1 16 12 0.0000 4 165 2370 540 4770 + ec_fsm_clear()\001
+4 0 0 100 -1 16 12 0.0000 4 165 2370 540 4950 + ec_fsm_reset()\001
+4 0 0 100 -1 16 12 0.0000 4 165 2790 540 5130 + ec_fsm_execute()\001
+4 0 0 100 -1 16 12 0.0000 4 165 2625 540 5310 + ec_fsm_startup()\001
+4 0 0 100 -1 16 12 0.0000 4 165 4365 540 5490 + ec_fsm_startup_running(): int\001
+4 0 0 100 -1 16 12 0.0000 4 165 4470 540 5670 + ec_fsm_startup_success(): int\001
+4 0 0 100 -1 16 12 0.0000 4 165 3495 540 5850 + ec_fsm_configuration()\001
+4 0 0 100 -1 16 12 0.0000 4 165 5235 540 6030 + ec_fsm_configuration_running(): int\001
+4 0 0 50 -1 16 12 0.0000 4 165 4200 4725 1665 - ec_fsm_configuration_conf()\001
+4 0 0 50 -1 16 12 0.0000 4 165 3825 4725 1845 - ec_fsm_slavescan_start()\001
+4 0 0 50 -1 16 12 0.0000 4 165 4380 4725 2025 - ec_fsm_slavescan_address()\001
+4 0 0 50 -1 16 12 0.0000 4 165 3900 4725 2205 - ec_fsm_slavescan_state()\001
+4 0 0 50 -1 16 12 0.0000 4 165 3930 4725 2385 - ec_fsm_slavescan_base()\001
+4 0 0 50 -1 16 12 0.0000 4 165 4335 4725 2565 - ec_fsm_slavescan_datalink()\001
+4 0 0 50 -1 16 12 0.0000 4 165 5070 4725 2745 - ec_fsm_slavescan_eeprom_size()\001
+4 0 0 50 -1 16 12 0.0000 4 165 5100 4725 2925 - ec_fsm_slavescan_eeprom_data()\001
+4 0 0 50 -1 16 12 0.0000 4 165 3540 4725 3105 - ec_fsm_slaveconf_init()\001
+4 0 0 50 -1 16 12 0.0000 4 165 3810 4725 3285 - ec_fsm_slaveconf_sync()\001
+4 0 0 50 -1 16 12 0.0000 4 165 3960 4725 3465 - ec_fsm_slaveconf_preop()\001
+4 0 0 50 -1 16 12 0.0000 4 165 3900 4725 3645 - ec_fsm_slaveconf_fmmu()\001
+4 0 0 50 -1 16 12 0.0000 4 165 4260 4725 3825 - ec_fsm_slaveconf_sdoconf()\001
+4 0 0 50 -1 16 12 0.0000 4 165 4185 4725 4005 - ec_fsm_slaveconf_saveop()\001
+4 0 0 50 -1 16 12 0.0000 4 165 3495 4725 4185 - ec_fsm_slaveconf_op()\001
+4 0 0 50 -1 16 12 0.0000 4 165 3945 4725 4365 - ec_fsm_sii_start_reading()\001
+4 0 0 50 -1 16 12 0.0000 4 165 3765 4725 4545 - ec_fsm_sii_read_check()\001
+4 0 0 50 -1 16 12 0.0000 4 165 3585 4725 4725 - ec_fsm_sii_read_fetch()\001
+4 0 0 50 -1 16 12 0.0000 4 165 3795 4725 4905 - ec_fsm_sii_start_writing()\001
+4 0 0 50 -1 16 12 0.0000 4 165 3795 4725 5085 - ec_fsm_sii_write_check()\001
+4 0 0 50 -1 16 12 0.0000 4 165 3975 4725 5265 - ec_fsm_sii_write_check2()\001
+4 0 0 50 -1 16 12 0.0000 4 165 3435 4725 5445 - ec_fsm_change_start()\001
+4 0 0 50 -1 16 12 0.0000 4 165 3690 4725 5625 - ec_fsm_change_check()\001
+4 0 0 50 -1 16 12 0.0000 4 165 3675 4725 5805 - ec_fsm_change_status()\001
+4 0 0 50 -1 16 12 0.0000 4 165 3540 4725 5985 - ec_fsm_change_code()\001
+4 0 0 50 -1 16 12 0.0000 4 165 3345 4725 6165 - ec_fsm_change_ack()\001
+4 0 0 50 -1 16 12 0.0000 4 165 4380 4725 6345 - ec_fsm_change_check_ack()\001
+4 0 0 50 -1 16 12 0.0000 4 165 3855 4725 6525 - ec_fsm_coe_down_start()\001
+4 0 0 50 -1 16 12 0.0000 4 165 4320 4725 6705 - ec_fsm_coe_down_request()\001
+4 0 0 50 -1 16 12 0.0000 4 165 4110 4725 6885 - ec_fsm_coe_down_check()\001
+4 0 0 50 -1 16 12 0.0000 4 165 4590 4725 7065 - ec_fsm_coe_down_response()\001
+4 0 0 50 -1 16 12 0.0000 4 165 2130 4725 7245 - ec_fsm_end()\001
+4 0 0 50 -1 16 12 0.0000 4 165 2265 4725 7425 - ec_fsm_error()\001
+4 0 0 50 -1 16 12 0.0000 4 165 4665 4725 765 - ec_fsm_master_write_eeprom()\001
+4 0 0 50 -1 16 12 0.0000 4 165 3330 4725 945 - ec_fsm_startup_start()\001
+4 0 0 50 -1 16 12 0.0000 4 165 4140 4725 1125 - ec_fsm_startup_broadcast()\001
+4 0 0 50 -1 16 12 0.0000 4 165 3420 4725 1305 - ec_fsm_startup_scan()\001
+4 0 0 50 -1 16 12 0.0000 4 165 4200 4725 1485 - ec_fsm_configuration_start()\001
+4 0 0 100 -1 16 12 0.0000 4 165 5340 540 6210 + ec_fsm_configuration_success(): int\001
+4 0 0 50 -1 16 12 0.0000 4 165 3330 540 6390 - ec_fsm_master_start()\001
+4 0 0 50 -1 16 12 0.0000 4 165 4140 540 6570 - ec_fsm_master_broadcast()\001
+4 0 0 50 -1 16 12 0.0000 4 165 4395 540 6750 - ec_fsm_master_read_states()\001
+4 0 0 50 -1 16 12 0.0000 4 165 5010 540 6930 - ec_fsm_master_validate_vendor()\001
+4 0 0 50 -1 16 12 0.0000 4 165 5085 540 7110 - ec_fsm_master_validate_product()\001
+4 0 0 50 -1 16 12 0.0000 4 165 5370 540 7290 - ec_fsm_master_rewrite_addresses()\001
+4 0 0 50 -1 16 12 0.0000 4 165 5160 540 7470 - ec_fsm_master_configure_slaves()\001
Binary file doc/images/uml-fsm.pdf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/images/uml-master.eps	Mon Sep 25 15:53:33 2006 +0000
@@ -0,0 +1,303 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: uml-master.fig
+%%Creator: fig2dev Version 3.2 Patchlevel 4
+%%CreationDate: Mon Aug  7 13:47:53 2006
+%%For: fp@jupiter (Florian Pose)
+%%BoundingBox: 0 0 478 365
+%%Magnification: 1.0000
+%%EndComments
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+/col32 {0.555 0.555 0.555 srgb} bind def
+
+end
+save
+newpath 0 365 moveto 0 0 lineto 594 0 lineto 594 365 lineto closepath clip newpath
+-55.9 411.8 translate
+1 -1 scale
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+  bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+  4 -2 roll mul srgb} bind def
+/reencdict 12 dict def /ReEncode { reencdict begin
+/newcodesandnames exch def /newfontname exch def /basefontname exch def
+/basefontdict basefontname findfont def /newfont basefontdict maxlength dict def
+basefontdict { exch dup /FID ne { dup /Encoding eq
+{ exch dup length array copy newfont 3 1 roll put }
+{ exch newfont 3 1 roll put } ifelse } { pop pop } ifelse } forall
+newfont /FontName newfontname put newcodesandnames aload pop
+128 1 255 { newfont /Encoding get exch /.notdef put } for
+newcodesandnames length 2 idiv { newfont /Encoding get 3 1 roll put } repeat
+newfontname newfont definefont pop end } def
+/isovec [
+8#055 /minus 8#200 /grave 8#201 /acute 8#202 /circumflex 8#203 /tilde
+8#204 /macron 8#205 /breve 8#206 /dotaccent 8#207 /dieresis
+8#210 /ring 8#211 /cedilla 8#212 /hungarumlaut 8#213 /ogonek 8#214 /caron
+8#220 /dotlessi 8#230 /oe 8#231 /OE
+8#240 /space 8#241 /exclamdown 8#242 /cent 8#243 /sterling
+8#244 /currency 8#245 /yen 8#246 /brokenbar 8#247 /section 8#250 /dieresis
+8#251 /copyright 8#252 /ordfeminine 8#253 /guillemotleft 8#254 /logicalnot
+8#255 /hyphen 8#256 /registered 8#257 /macron 8#260 /degree 8#261 /plusminus
+8#262 /twosuperior 8#263 /threesuperior 8#264 /acute 8#265 /mu 8#266 /paragraph
+8#267 /periodcentered 8#270 /cedilla 8#271 /onesuperior 8#272 /ordmasculine
+8#273 /guillemotright 8#274 /onequarter 8#275 /onehalf
+8#276 /threequarters 8#277 /questiondown 8#300 /Agrave 8#301 /Aacute
+8#302 /Acircumflex 8#303 /Atilde 8#304 /Adieresis 8#305 /Aring
+8#306 /AE 8#307 /Ccedilla 8#310 /Egrave 8#311 /Eacute
+8#312 /Ecircumflex 8#313 /Edieresis 8#314 /Igrave 8#315 /Iacute
+8#316 /Icircumflex 8#317 /Idieresis 8#320 /Eth 8#321 /Ntilde 8#322 /Ograve
+8#323 /Oacute 8#324 /Ocircumflex 8#325 /Otilde 8#326 /Odieresis 8#327 /multiply
+8#330 /Oslash 8#331 /Ugrave 8#332 /Uacute 8#333 /Ucircumflex
+8#334 /Udieresis 8#335 /Yacute 8#336 /Thorn 8#337 /germandbls 8#340 /agrave
+8#341 /aacute 8#342 /acircumflex 8#343 /atilde 8#344 /adieresis 8#345 /aring
+8#346 /ae 8#347 /ccedilla 8#350 /egrave 8#351 /eacute
+8#352 /ecircumflex 8#353 /edieresis 8#354 /igrave 8#355 /iacute
+8#356 /icircumflex 8#357 /idieresis 8#360 /eth 8#361 /ntilde 8#362 /ograve
+8#363 /oacute 8#364 /ocircumflex 8#365 /otilde 8#366 /odieresis 8#367 /divide
+8#370 /oslash 8#371 /ugrave 8#372 /uacute 8#373 /ucircumflex
+8#374 /udieresis 8#375 /yacute 8#376 /thorn 8#377 /ydieresis] def
+/Helvetica /Helvetica-iso isovec ReEncode
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+$F2psBegin
+10 setmiterlimit
+0 slj 0 slc
+ 0.06299 0.06299 sc
+%
+% Fig objects follow
+%
+% 
+% here starts figure with depth 101
+% Polyline
+7.500 slw
+n 900 6525 m 900 765 l 4140 765 l
+ 4140 6525 l gs col7 1.00 shd ef gr gs col0 s gr 
+% Polyline
+n 5220 975 m 5220 6315 l 8460 6315 l
+ 8460 975 l gs col7 1.00 shd ef gr gs col0 s gr 
+% Polyline
+n 900 1077 m
+ 4140 1080 l gs col0 s gr 
+% Polyline
+n 900 6210 m
+ 4140 6210 l gs col0 s gr 
+/Helvetica-iso ff 180.00 scf sf
+1005 972 m
+gs 1 -1 sc (ec_master_t) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+1005 1258 m
+gs 1 -1 sc (list: struct list_head) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+1005 1468 m
+gs 1 -1 sc (reserved: unsigned int) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+1005 1678 m
+gs 1 -1 sc (index: unsigned int) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+1005 1888 m
+gs 1 -1 sc (kobj: struct kobj) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+1005 2098 m
+gs 1 -1 sc (slaves: struct list_head) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+1005 2308 m
+gs 1 -1 sc (slave_count: unsigned int) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+1005 2518 m
+gs 1 -1 sc (device: ec_device_t *) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+1005 2728 m
+gs 1 -1 sc (datagram_queue: struct list_head) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+1005 2938 m
+gs 1 -1 sc (datagram_index: uint8_t) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+1005 3148 m
+gs 1 -1 sc (domains: struct list_head) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+1005 3360 m
+gs 1 -1 sc (debug_level: unsigned int) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+1005 3570 m
+gs 1 -1 sc (stats: ec_stats_t) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+1005 3780 m
+gs 1 -1 sc (workqueue: struct workqueue_struct *) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+1005 3990 m
+gs 1 -1 sc (idle_work: struct work_struct) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+1005 4200 m
+gs 1 -1 sc (fsm: ec_fsm_t) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+1005 4408 m
+gs 1 -1 sc (mode: ec_master_mode_t) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+1005 4618 m
+gs 1 -1 sc (eoe_timer: struct timer_list) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+1005 4828 m
+gs 1 -1 sc (eoe_running: unsigned int) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+1005 5038 m
+gs 1 -1 sc (eoe_handlers: struct list_head) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+1005 5248 m
+gs 1 -1 sc (internal_lock: spinlock_t) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+1005 5458 m
+gs 1 -1 sc (request_cb: int \(*\)\(void *\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+1005 5668 m
+gs 1 -1 sc (release_cb: void \(*\)\(void *\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+1005 5878 m
+gs 1 -1 sc (cb_data: void *) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+1005 6088 m
+gs 1 -1 sc (eeprom_write_enable: uint8_t) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+1005 6435 m
+gs 1 -1 sc (+ ec_master_init\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+5325 2628 m
+gs 1 -1 sc (+ ec_master_queue_datagram\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+5325 1788 m
+gs 1 -1 sc (+ ec_master_idle_stop\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+5325 2208 m
+gs 1 -1 sc (+ ec_master_eoe_stop\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+5325 2418 m
+gs 1 -1 sc (+ ec_master_receive_datagrams\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+5325 1368 m
+gs 1 -1 sc (+ ec_master_reset\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+5325 1998 m
+gs 1 -1 sc (+ ec_master_eoe_start\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+5325 1578 m
+gs 1 -1 sc (+ ec_master_idle_start\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+5325 2835 m
+gs 1 -1 sc (+ ec_master_output_stats\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+5325 3045 m
+gs 1 -1 sc (+ ec_master_clear_slaves\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+5325 3255 m
+gs 1 -1 sc (- ec_master_send_datagrams\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+5325 3468 m
+gs 1 -1 sc (- ec_master_idle\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+5325 3678 m
+gs 1 -1 sc (- ec_master_eoe_run\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+5321 3888 m
+gs 1 -1 sc (+ ecrt_master_callbacks\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+5321 4098 m
+gs 1 -1 sc (+ ecrt_master_create_domain\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+5321 4308 m
+gs 1 -1 sc (+ ecrt_master_activate\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+5321 4518 m
+gs 1 -1 sc (+ ecrt_master_deactivate\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+5325 1155 m
+gs 1 -1 sc (+ ec_master_clear\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+5321 4725 m
+gs 1 -1 sc (+ ecrt_master_send\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+5321 4935 m
+gs 1 -1 sc (+ ecrt_master_receive\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+5321 5148 m
+gs 1 -1 sc (+ ecrt_master_prepare\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+5321 5358 m
+gs 1 -1 sc (+ ecrt_master_run\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+5321 5568 m
+gs 1 -1 sc (+ ecrt_master_start_eoe\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+5321 5778 m
+gs 1 -1 sc (+ ecrt_master_debug\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+5321 5988 m
+gs 1 -1 sc (+ ecrt_master_print\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+5321 6198 m
+gs 1 -1 sc (+ ecrt_master_get_slave\(\)) col0 sh gr
+% here ends figure;
+$F2psEnd
+rs
+showpage
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/images/uml-master.fig	Mon Sep 25 15:53:33 2006 +0000
@@ -0,0 +1,69 @@
+#FIG 3.2
+Portrait
+Center
+Metric
+A4      
+100.00
+Single
+-2
+1200 2
+0 32 #8e8e8e
+2 1 0 1 0 7 101 -1 20 0.000 0 0 -1 0 0 4
+	 900 6525 900 765 4140 765 4140 6525
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
+	 900 1077 4140 1080
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
+	 900 6210 4140 6210
+2 1 0 1 0 7 101 -1 20 0.000 0 0 -1 0 0 4
+	 5220 975 5220 6315 8460 6315 8460 975
+4 0 0 100 0 16 12 0.0000 4 150 1740 1005 972 ec_master_t\001
+4 0 0 100 0 16 12 0.0000 4 150 2670 1005 1258 list: struct list_head\001
+4 0 0 100 -1 16 12 0.0000 4 165 3135 1005 1468 reserved: unsigned int\001
+4 0 0 100 -1 16 12 0.0000 4 165 2655 1005 1678 index: unsigned int\001
+4 0 0 100 -1 16 12 0.0000 4 165 2190 1005 1888 kobj: struct kobj\001
+4 0 0 100 -1 16 12 0.0000 4 150 3210 1005 2098 slaves: struct list_head\001
+4 0 0 100 -1 16 12 0.0000 4 165 3600 1005 2308 slave_count: unsigned int\001
+4 0 0 100 -1 16 12 0.0000 4 150 3015 1005 2518 device: ec_device_t *\001
+4 0 0 100 -1 16 12 0.0000 4 165 4695 1005 2728 datagram_queue: struct list_head\001
+4 0 0 100 -1 16 12 0.0000 4 165 3390 1005 2938 datagram_index: uint8_t\001
+4 0 0 100 -1 16 12 0.0000 4 150 3495 1005 3148 domains: struct list_head\001
+4 0 0 100 -1 16 12 0.0000 4 165 3630 1005 3360 debug_level: unsigned int\001
+4 0 0 100 -1 16 12 0.0000 4 150 2250 1005 3570 stats: ec_stats_t\001
+4 0 0 100 -1 16 12 0.0000 4 150 5310 1005 3780 workqueue: struct workqueue_struct *\001
+4 0 0 100 -1 16 12 0.0000 4 150 4005 1005 3990 idle_work: struct work_struct\001
+4 0 0 100 -1 16 12 0.0000 4 150 1920 1005 4200 fsm: ec_fsm_t\001
+4 0 0 100 -1 16 12 0.0000 4 150 3660 1005 4408 mode: ec_master_mode_t\001
+4 0 0 100 -1 16 12 0.0000 4 150 3660 1005 4618 eoe_timer: struct timer_list\001
+4 0 0 100 -1 16 12 0.0000 4 165 3675 1005 4828 eoe_running: unsigned int\001
+4 0 0 100 -1 16 12 0.0000 4 150 4245 1005 5038 eoe_handlers: struct list_head\001
+4 0 0 100 -1 16 12 0.0000 4 150 3405 1005 5248 internal_lock: spinlock_t\001
+4 0 0 100 -1 16 12 0.0000 4 165 3480 1005 5458 request_cb: int (*)(void *)\001
+4 0 0 100 -1 16 12 0.0000 4 165 3750 1005 5668 release_cb: void (*)(void *)\001
+4 0 0 100 -1 16 12 0.0000 4 150 2085 1005 5878 cb_data: void *\001
+4 0 0 100 -1 16 12 0.0000 4 150 4185 1005 6088 eeprom_write_enable: uint8_t\001
+4 0 0 100 0 16 12 0.0000 4 165 2535 1005 6435 + ec_master_init()\001
+4 0 0 100 -1 16 12 0.0000 4 165 4545 5325 2628 + ec_master_queue_datagram()\001
+4 0 0 100 -1 16 12 0.0000 4 165 3420 5325 1788 + ec_master_idle_stop()\001
+4 0 0 100 -1 16 12 0.0000 4 165 3450 5325 2208 + ec_master_eoe_stop()\001
+4 0 0 100 -1 16 12 0.0000 4 165 4860 5325 2418 + ec_master_receive_datagrams()\001
+4 0 0 100 0 16 12 0.0000 4 165 2835 5325 1368 + ec_master_reset()\001
+4 0 0 100 -1 16 12 0.0000 4 165 3450 5325 1998 + ec_master_eoe_start()\001
+4 0 0 100 -1 16 12 0.0000 4 165 3420 5325 1578 + ec_master_idle_start()\001
+4 0 0 100 -1 16 12 0.0000 4 165 3840 5325 2835 + ec_master_output_stats()\001
+4 0 0 100 -1 16 12 0.0000 4 165 3945 5325 3045 + ec_master_clear_slaves()\001
+4 0 0 100 -1 16 12 0.0000 4 165 4440 5325 3255 - ec_master_send_datagrams()\001
+4 0 0 100 -1 16 12 0.0000 4 165 2565 5325 3468 - ec_master_idle()\001
+4 0 0 100 -1 16 12 0.0000 4 165 3240 5325 3678 - ec_master_eoe_run()\001
+4 0 0 100 -1 16 12 0.0000 4 165 3660 5321 3888 + ecrt_master_callbacks()\001
+4 0 0 100 -1 16 12 0.0000 4 165 4425 5321 4098 + ecrt_master_create_domain()\001
+4 0 0 100 -1 16 12 0.0000 4 165 3405 5321 4308 + ecrt_master_activate()\001
+4 0 0 100 -1 16 12 0.0000 4 165 3765 5321 4518 + ecrt_master_deactivate()\001
+4 0 0 100 0 16 12 0.0000 4 165 2835 5325 1155 + ec_master_clear()\001
+4 0 0 100 -1 16 12 0.0000 4 165 3015 5321 4725 + ecrt_master_send()\001
+4 0 0 100 -1 16 12 0.0000 4 165 3360 5321 4935 + ecrt_master_receive()\001
+4 0 0 100 -1 16 12 0.0000 4 165 3420 5321 5148 + ecrt_master_prepare()\001
+4 0 0 100 -1 16 12 0.0000 4 165 2775 5321 5358 + ecrt_master_run()\001
+4 0 0 100 -1 16 12 0.0000 4 165 3630 5321 5568 + ecrt_master_start_eoe()\001
+4 0 0 100 -1 16 12 0.0000 4 165 3210 5321 5778 + ecrt_master_debug()\001
+4 0 0 100 -1 16 12 0.0000 4 165 2925 5321 5988 + ecrt_master_print()\001
+4 0 0 100 -1 16 12 0.0000 4 165 3690 5321 6198 + ecrt_master_get_slave()\001
Binary file doc/images/uml-master.pdf has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/images/uml-slave.eps	Mon Sep 25 15:53:33 2006 +0000
@@ -0,0 +1,357 @@
+%!PS-Adobe-2.0 EPSF-2.0
+%%Title: uml-slave.fig
+%%Creator: fig2dev Version 3.2 Patchlevel 4
+%%CreationDate: Thu Jul 13 16:33:29 2006
+%%For: fp@jupiter (Florian Pose)
+%%BoundingBox: 0 0 457 478
+%%Magnification: 1.0000
+%%EndComments
+/$F2psDict 200 dict def
+$F2psDict begin
+$F2psDict /mtrx matrix put
+/col-1 {0 setgray} bind def
+/col0 {0.000 0.000 0.000 srgb} bind def
+/col1 {0.000 0.000 1.000 srgb} bind def
+/col2 {0.000 1.000 0.000 srgb} bind def
+/col3 {0.000 1.000 1.000 srgb} bind def
+/col4 {1.000 0.000 0.000 srgb} bind def
+/col5 {1.000 0.000 1.000 srgb} bind def
+/col6 {1.000 1.000 0.000 srgb} bind def
+/col7 {1.000 1.000 1.000 srgb} bind def
+/col8 {0.000 0.000 0.560 srgb} bind def
+/col9 {0.000 0.000 0.690 srgb} bind def
+/col10 {0.000 0.000 0.820 srgb} bind def
+/col11 {0.530 0.810 1.000 srgb} bind def
+/col12 {0.000 0.560 0.000 srgb} bind def
+/col13 {0.000 0.690 0.000 srgb} bind def
+/col14 {0.000 0.820 0.000 srgb} bind def
+/col15 {0.000 0.560 0.560 srgb} bind def
+/col16 {0.000 0.690 0.690 srgb} bind def
+/col17 {0.000 0.820 0.820 srgb} bind def
+/col18 {0.560 0.000 0.000 srgb} bind def
+/col19 {0.690 0.000 0.000 srgb} bind def
+/col20 {0.820 0.000 0.000 srgb} bind def
+/col21 {0.560 0.000 0.560 srgb} bind def
+/col22 {0.690 0.000 0.690 srgb} bind def
+/col23 {0.820 0.000 0.820 srgb} bind def
+/col24 {0.500 0.190 0.000 srgb} bind def
+/col25 {0.630 0.250 0.000 srgb} bind def
+/col26 {0.750 0.380 0.000 srgb} bind def
+/col27 {1.000 0.500 0.500 srgb} bind def
+/col28 {1.000 0.630 0.630 srgb} bind def
+/col29 {1.000 0.750 0.750 srgb} bind def
+/col30 {1.000 0.880 0.880 srgb} bind def
+/col31 {1.000 0.840 0.000 srgb} bind def
+/col32 {0.555 0.555 0.555 srgb} bind def
+
+end
+save
+newpath 0 478 moveto 0 0 lineto 586 0 lineto 586 478 lineto closepath clip newpath
+-55.9 522.3 translate
+1 -1 scale
+
+/cp {closepath} bind def
+/ef {eofill} bind def
+/gr {grestore} bind def
+/gs {gsave} bind def
+/sa {save} bind def
+/rs {restore} bind def
+/l {lineto} bind def
+/m {moveto} bind def
+/rm {rmoveto} bind def
+/n {newpath} bind def
+/s {stroke} bind def
+/sh {show} bind def
+/slc {setlinecap} bind def
+/slj {setlinejoin} bind def
+/slw {setlinewidth} bind def
+/srgb {setrgbcolor} bind def
+/rot {rotate} bind def
+/sc {scale} bind def
+/sd {setdash} bind def
+/ff {findfont} bind def
+/sf {setfont} bind def
+/scf {scalefont} bind def
+/sw {stringwidth} bind def
+/tr {translate} bind def
+/tnt {dup dup currentrgbcolor
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add
+  4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb}
+  bind def
+/shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul
+  4 -2 roll mul srgb} bind def
+/reencdict 12 dict def /ReEncode { reencdict begin
+/newcodesandnames exch def /newfontname exch def /basefontname exch def
+/basefontdict basefontname findfont def /newfont basefontdict maxlength dict def
+basefontdict { exch dup /FID ne { dup /Encoding eq
+{ exch dup length array copy newfont 3 1 roll put }
+{ exch newfont 3 1 roll put } ifelse } { pop pop } ifelse } forall
+newfont /FontName newfontname put newcodesandnames aload pop
+128 1 255 { newfont /Encoding get exch /.notdef put } for
+newcodesandnames length 2 idiv { newfont /Encoding get 3 1 roll put } repeat
+newfontname newfont definefont pop end } def
+/isovec [
+8#055 /minus 8#200 /grave 8#201 /acute 8#202 /circumflex 8#203 /tilde
+8#204 /macron 8#205 /breve 8#206 /dotaccent 8#207 /dieresis
+8#210 /ring 8#211 /cedilla 8#212 /hungarumlaut 8#213 /ogonek 8#214 /caron
+8#220 /dotlessi 8#230 /oe 8#231 /OE
+8#240 /space 8#241 /exclamdown 8#242 /cent 8#243 /sterling
+8#244 /currency 8#245 /yen 8#246 /brokenbar 8#247 /section 8#250 /dieresis
+8#251 /copyright 8#252 /ordfeminine 8#253 /guillemotleft 8#254 /logicalnot
+8#255 /hyphen 8#256 /registered 8#257 /macron 8#260 /degree 8#261 /plusminus
+8#262 /twosuperior 8#263 /threesuperior 8#264 /acute 8#265 /mu 8#266 /paragraph
+8#267 /periodcentered 8#270 /cedilla 8#271 /onesuperior 8#272 /ordmasculine
+8#273 /guillemotright 8#274 /onequarter 8#275 /onehalf
+8#276 /threequarters 8#277 /questiondown 8#300 /Agrave 8#301 /Aacute
+8#302 /Acircumflex 8#303 /Atilde 8#304 /Adieresis 8#305 /Aring
+8#306 /AE 8#307 /Ccedilla 8#310 /Egrave 8#311 /Eacute
+8#312 /Ecircumflex 8#313 /Edieresis 8#314 /Igrave 8#315 /Iacute
+8#316 /Icircumflex 8#317 /Idieresis 8#320 /Eth 8#321 /Ntilde 8#322 /Ograve
+8#323 /Oacute 8#324 /Ocircumflex 8#325 /Otilde 8#326 /Odieresis 8#327 /multiply
+8#330 /Oslash 8#331 /Ugrave 8#332 /Uacute 8#333 /Ucircumflex
+8#334 /Udieresis 8#335 /Yacute 8#336 /Thorn 8#337 /germandbls 8#340 /agrave
+8#341 /aacute 8#342 /acircumflex 8#343 /atilde 8#344 /adieresis 8#345 /aring
+8#346 /ae 8#347 /ccedilla 8#350 /egrave 8#351 /eacute
+8#352 /ecircumflex 8#353 /edieresis 8#354 /igrave 8#355 /iacute
+8#356 /icircumflex 8#357 /idieresis 8#360 /eth 8#361 /ntilde 8#362 /ograve
+8#363 /oacute 8#364 /ocircumflex 8#365 /otilde 8#366 /odieresis 8#367 /divide
+8#370 /oslash 8#371 /ugrave 8#372 /uacute 8#373 /ucircumflex
+8#374 /udieresis 8#375 /yacute 8#376 /thorn 8#377 /ydieresis] def
+/Helvetica /Helvetica-iso isovec ReEncode
+/$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def
+/$F2psEnd {$F2psEnteredState restore end} def
+
+$F2psBegin
+10 setmiterlimit
+0 slj 0 slc
+ 0.06299 0.06299 sc
+%
+% Fig objects follow
+%
+% 
+% here starts figure with depth 101
+% Polyline
+7.500 slw
+n 900 8265 m 900 720 l 4185 720 l
+ 4185 8250 l gs col7 1.00 shd ef gr gs col0 s gr 
+% Polyline
+n 4860 855 m 4860 8280 l 8145 8280 l
+ 8145 855 l gs col7 1.00 shd ef gr gs col0 s gr 
+% Polyline
+n 4860 3525 m
+ 8145 3525 l gs col0 s gr 
+/Helvetica-iso ff 180.00 scf sf
+5010 3225 m
+gs 1 -1 sc (online: unsigned int) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+5010 3435 m
+gs 1 -1 sc (varsize_fields: struct list_head) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+5006 3735 m
+gs 1 -1 sc (+ ec_slave_init\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+5006 3945 m
+gs 1 -1 sc (+ ec_slave_clear\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+5006 4170 m
+gs 1 -1 sc (+ ec_slave_prepare_fmmu\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+5006 4380 m
+gs 1 -1 sc (+ ec_slave_fetch_strings\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+5006 4590 m
+gs 1 -1 sc (+ ec_slave_fetch_general\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+5006 4800 m
+gs 1 -1 sc (+ ec_slave_fetch_sync\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+5006 5010 m
+gs 1 -1 sc (+ ec_slave_fetch_pdo\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+5006 5220 m
+gs 1 -1 sc (+ ec_slave_locate_string\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+5006 5430 m
+gs 1 -1 sc (+ ec_slave_calc_sync_size\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+5006 5640 m
+gs 1 -1 sc (+ ec_slave_print\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+5006 5850 m
+gs 1 -1 sc (+ ec_slave_mbox_prepare_send\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+5006 6060 m
+gs 1 -1 sc (+ ec_slave_mbox_prepare_check\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+5006 6270 m
+gs 1 -1 sc (+ ec_slave_mbox_check\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+5006 6480 m
+gs 1 -1 sc (+ ec_slave_mbox_prepare_fetch\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+5006 6690 m
+gs 1 -1 sc (+ ec_slave_mbox_fetch\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+5006 6900 m
+gs 1 -1 sc (+ ec_slave_mbox_simple_io\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+5006 7110 m
+gs 1 -1 sc (+ ec_slave_mbox_simple_receive\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+5010 7320 m
+gs 1 -1 sc (- ec_slave_write_eeprom\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+5006 7530 m
+gs 1 -1 sc (+ ecrt_slave_conf_sdo8\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+5006 7740 m
+gs 1 -1 sc (+ ecrt_slave_conf_sdo16\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+5006 7950 m
+gs 1 -1 sc (+ ecrt_slave_conf_sdo32\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+5006 8160 m
+gs 1 -1 sc (+ ecrt_slave_field_size\(\)) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+5010 1125 m
+gs 1 -1 sc (eeprom_group: char *) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+5010 1335 m
+gs 1 -1 sc (eeprom_image: char *) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+5010 1545 m
+gs 1 -1 sc (eeprom_order: char *) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+5010 1755 m
+gs 1 -1 sc (eeprom_name: char *) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+5010 1965 m
+gs 1 -1 sc (new_eeprom_data: uint8_t *) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+5010 2175 m
+gs 1 -1 sc (new_eeprom_size: uint16_t) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+5010 2385 m
+gs 1 -1 sc (sdo_dictionary: struct list_head) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+5010 2595 m
+gs 1 -1 sc (requested_state: ec_slave_state_t) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+5010 2805 m
+gs 1 -1 sc (current_state: ec_slave_state_t) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+5010 3015 m
+gs 1 -1 sc (error_flag: unsigned int) col0 sh gr
+% Polyline
+n 900 1035 m
+ 4185 1043 l gs col0 s gr 
+/Helvetica-iso ff 180.00 scf sf
+1005 972 m
+gs 1 -1 sc (ec_slave_t) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+1005 1258 m
+gs 1 -1 sc (list: struct list_head) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+1005 1440 m
+gs 1 -1 sc (kobj: struct kobj) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+1005 1650 m
+gs 1 -1 sc (master: ec_master_t *) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+1005 1860 m
+gs 1 -1 sc (ring_position: uint16_t) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+1005 2070 m
+gs 1 -1 sc (station_address: uint16_t) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+1005 2280 m
+gs 1 -1 sc (coupler_index: uint16_t) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+1005 2490 m
+gs 1 -1 sc (coupler_subindex: uint16_t) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+1005 2700 m
+gs 1 -1 sc (base_type: uint8_t) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+1005 2910 m
+gs 1 -1 sc (base_revision: uint8_t) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+1005 3120 m
+gs 1 -1 sc (base_build: uint16_t) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+1005 3330 m
+gs 1 -1 sc (base_fmmu_count: uint16_t) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+1005 3540 m
+gs 1 -1 sc (base_sync_count: uint16_t) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+1005 3750 m
+gs 1 -1 sc (dl_link: uint8_t[4]) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+1005 3960 m
+gs 1 -1 sc (dl_loop: uint8_t[4]) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+1005 4170 m
+gs 1 -1 sc (dl_signal: uint8_t[4]) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+1005 4380 m
+gs 1 -1 sc (sii_alias: uint16_t) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+1005 4590 m
+gs 1 -1 sc (sii_vendor_id: uint32_t) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+1005 4800 m
+gs 1 -1 sc (sii_product_code: uint32_t) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+1005 5010 m
+gs 1 -1 sc (sii_revision_number: uint32_t) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+1005 5220 m
+gs 1 -1 sc (sii_serial_number: uint32_t) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+1005 5430 m
+gs 1 -1 sc (sii_rx_mailbox_offset: uint16_t) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+1005 5850 m
+gs 1 -1 sc (sii_tx_mailbox_offset: uint16_t) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+1005 6060 m
+gs 1 -1 sc (sii_tx_mailbox_size: uint16_t) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+1005 6270 m
+gs 1 -1 sc (sii_mailbox_protocols: uint16_t) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+1005 6480 m
+gs 1 -1 sc (sii_physical_layer: uint8_t[4]) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+1005 6690 m
+gs 1 -1 sc (registered: uint8_t) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+1005 6900 m
+gs 1 -1 sc (fmmus: ec_fmmu_t[EC_MAX_FMMUS]) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+1005 7110 m
+gs 1 -1 sc (fmmu_count: uint8_t) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+1005 7320 m
+gs 1 -1 sc (eeprom_data: uint8_t *) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+1005 7530 m
+gs 1 -1 sc (eeprom_size: uint16_t) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+1005 7740 m
+gs 1 -1 sc (eeprom_strings: struct list_head) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+1005 7950 m
+gs 1 -1 sc (eeprom_syncs: struct list_head) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+1005 5640 m
+gs 1 -1 sc (sii_rx_mailbox_size: uint16_t) col0 sh gr
+/Helvetica-iso ff 180.00 scf sf
+1005 8160 m
+gs 1 -1 sc (eeprom_pdos: struct list_head) col0 sh gr
+% here ends figure;
+$F2psEnd
+rs
+showpage
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/images/uml-slave.fig	Mon Sep 25 15:53:33 2006 +0000
@@ -0,0 +1,89 @@
+#FIG 3.2
+Portrait
+Center
+Metric
+A4      
+100.00
+Single
+-2
+1200 2
+0 32 #8e8e8e
+6 4860 1005 10061 8205
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
+	 4860 3525 8145 3525
+4 0 0 100 -1 16 12 0.0000 4 165 2745 5010 3225 online: unsigned int\001
+4 0 0 100 -1 16 12 0.0000 4 150 4245 5010 3435 varsize_fields: struct list_head\001
+4 0 0 100 -1 16 12 0.0000 4 165 2340 5006 3735 + ec_slave_init()\001
+4 0 0 100 -1 16 12 0.0000 4 165 2640 5006 3945 + ec_slave_clear()\001
+4 0 0 100 -1 16 12 0.0000 4 165 3990 5006 4170 + ec_slave_prepare_fmmu()\001
+4 0 0 100 -1 16 12 0.0000 4 165 3735 5006 4380 + ec_slave_fetch_strings()\001
+4 0 0 100 -1 16 12 0.0000 4 165 3870 5006 4590 + ec_slave_fetch_general()\001
+4 0 0 100 -1 16 12 0.0000 4 165 3465 5006 4800 + ec_slave_fetch_sync()\001
+4 0 0 100 -1 16 12 0.0000 4 165 3330 5006 5010 + ec_slave_fetch_pdo()\001
+4 0 0 100 -1 16 12 0.0000 4 165 3750 5006 5220 + ec_slave_locate_string()\001
+4 0 0 100 -1 16 12 0.0000 4 165 4140 5006 5430 + ec_slave_calc_sync_size()\001
+4 0 0 100 -1 16 12 0.0000 4 165 2550 5006 5640 + ec_slave_print()\001
+4 0 0 100 -1 16 12 0.0000 4 165 4890 5006 5850 + ec_slave_mbox_prepare_send()\001
+4 0 0 100 -1 16 12 0.0000 4 165 5040 5006 6060 + ec_slave_mbox_prepare_check()\001
+4 0 0 100 -1 16 12 0.0000 4 165 3750 5006 6270 + ec_slave_mbox_check()\001
+4 0 0 100 -1 16 12 0.0000 4 165 4860 5006 6480 + ec_slave_mbox_prepare_fetch()\001
+4 0 0 100 -1 16 12 0.0000 4 165 3570 5006 6690 + ec_slave_mbox_fetch()\001
+4 0 0 100 -1 16 12 0.0000 4 165 4260 5006 6900 + ec_slave_mbox_simple_io()\001
+4 0 0 100 -1 16 12 0.0000 4 165 5055 5006 7110 + ec_slave_mbox_simple_receive()\001
+4 0 0 100 -1 16 12 0.0000 4 165 3795 5010 7320 - ec_slave_write_eeprom()\001
+4 0 0 100 -1 16 12 0.0000 4 165 3600 5006 7530 + ecrt_slave_conf_sdo8()\001
+4 0 0 100 -1 16 12 0.0000 4 165 3780 5006 7740 + ecrt_slave_conf_sdo16()\001
+4 0 0 100 -1 16 12 0.0000 4 165 3780 5006 7950 + ecrt_slave_conf_sdo32()\001
+4 0 0 100 -1 16 12 0.0000 4 165 3465 5006 8160 + ecrt_slave_field_size()\001
+4 0 0 100 -1 16 12 0.0000 4 165 3060 5010 1125 eeprom_group: char *\001
+4 0 0 100 -1 16 12 0.0000 4 165 3105 5010 1335 eeprom_image: char *\001
+4 0 0 100 -1 16 12 0.0000 4 150 2985 5010 1545 eeprom_order: char *\001
+4 0 0 100 -1 16 12 0.0000 4 150 3030 5010 1755 eeprom_name: char *\001
+4 0 0 100 -1 16 12 0.0000 4 150 3945 5010 1965 new_eeprom_data: uint8_t *\001
+4 0 0 100 -1 16 12 0.0000 4 150 3900 5010 2175 new_eeprom_size: uint16_t\001
+4 0 0 100 -1 16 12 0.0000 4 165 4365 5010 2385 sdo_dictionary: struct list_head\001
+4 0 0 100 -1 16 12 0.0000 4 150 4830 5010 2595 requested_state: ec_slave_state_t\001
+4 0 0 100 -1 16 12 0.0000 4 150 4395 5010 2805 current_state: ec_slave_state_t\001
+4 0 0 100 -1 16 12 0.0000 4 165 3240 5010 3015 error_flag: unsigned int\001
+-6
+2 1 0 1 0 7 100 0 -1 0.000 0 0 -1 0 0 2
+	 900 1035 4185 1043
+2 1 0 1 0 7 101 -1 20 0.000 0 0 -1 0 0 4
+	 900 8265 900 720 4185 720 4185 8250
+2 1 0 1 0 7 101 -1 20 0.000 0 0 -1 0 0 4
+	 4860 855 4860 8280 8145 8280 8145 855
+4 0 0 100 0 16 12 0.0000 4 150 1545 1005 972 ec_slave_t\001
+4 0 0 100 0 16 12 0.0000 4 150 2670 1005 1258 list: struct list_head\001
+4 0 0 100 -1 16 12 0.0000 4 165 2190 1005 1440 kobj: struct kobj\001
+4 0 0 100 -1 16 12 0.0000 4 150 3045 1005 1650 master: ec_master_t *\001
+4 0 0 100 -1 16 12 0.0000 4 165 3105 1005 1860 ring_position: uint16_t\001
+4 0 0 100 -1 16 12 0.0000 4 150 3540 1005 2070 station_address: uint16_t\001
+4 0 0 100 -1 16 12 0.0000 4 150 3300 1005 2280 coupler_index: uint16_t\001
+4 0 0 100 -1 16 12 0.0000 4 150 3825 1005 2490 coupler_subindex: uint16_t\001
+4 0 0 100 -1 16 12 0.0000 4 165 2580 1005 2700 base_type: uint8_t\001
+4 0 0 100 -1 16 12 0.0000 4 150 3105 1005 2910 base_revision: uint8_t\001
+4 0 0 100 -1 16 12 0.0000 4 150 2850 1005 3120 base_build: uint16_t\001
+4 0 0 100 -1 16 12 0.0000 4 150 3885 1005 3330 base_fmmu_count: uint16_t\001
+4 0 0 100 -1 16 12 0.0000 4 165 3795 1005 3540 base_sync_count: uint16_t\001
+4 0 0 100 -1 16 12 0.0000 4 165 2355 1005 3750 dl_link: uint8_t[4]\001
+4 0 0 100 -1 16 12 0.0000 4 165 2475 1005 3960 dl_loop: uint8_t[4]\001
+4 0 0 100 -1 16 12 0.0000 4 165 2715 1005 4170 dl_signal: uint8_t[4]\001
+4 0 0 100 -1 16 12 0.0000 4 150 2445 1005 4380 sii_alias: uint16_t\001
+4 0 0 100 -1 16 12 0.0000 4 150 3195 1005 4590 sii_vendor_id: uint32_t\001
+4 0 0 100 -1 16 12 0.0000 4 150 3720 1005 4800 sii_product_code: uint32_t\001
+4 0 0 100 -1 16 12 0.0000 4 150 4155 1005 5010 sii_revision_number: uint32_t\001
+4 0 0 100 -1 16 12 0.0000 4 150 3810 1005 5220 sii_serial_number: uint32_t\001
+4 0 0 100 -1 16 12 0.0000 4 150 4260 1005 5430 sii_rx_mailbox_offset: uint16_t\001
+4 0 0 100 -1 16 12 0.0000 4 150 4230 1005 5850 sii_tx_mailbox_offset: uint16_t\001
+4 0 0 100 -1 16 12 0.0000 4 150 4065 1005 6060 sii_tx_mailbox_size: uint16_t\001
+4 0 0 100 -1 16 12 0.0000 4 150 4365 1005 6270 sii_mailbox_protocols: uint16_t\001
+4 0 0 100 -1 16 12 0.0000 4 165 3990 1005 6480 sii_physical_layer: uint8_t[4]\001
+4 0 0 100 -1 16 12 0.0000 4 165 2520 1005 6690 registered: uint8_t\001
+4 0 0 100 -1 16 12 0.0000 4 165 5475 1005 6900 fmmus: ec_fmmu_t[EC_MAX_FMMUS]\001
+4 0 0 100 -1 16 12 0.0000 4 150 2820 1005 7110 fmmu_count: uint8_t\001
+4 0 0 100 -1 16 12 0.0000 4 150 3165 1005 7320 eeprom_data: uint8_t *\001
+4 0 0 100 -1 16 12 0.0000 4 150 3120 1005 7530 eeprom_size: uint16_t\001
+4 0 0 100 -1 16 12 0.0000 4 165 4485 1005 7740 eeprom_strings: struct list_head\001
+4 0 0 100 -1 16 12 0.0000 4 165 4380 1005 7950 eeprom_syncs: struct list_head\001
+4 0 0 100 -1 16 12 0.0000 4 150 4095 1005 5640 sii_rx_mailbox_size: uint16_t\001
+4 0 0 100 -1 16 12 0.0000 4 150 4245 1005 8160 eeprom_pdos: struct list_head\001
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/images/uml-slave.pdf	Mon Sep 25 15:53:33 2006 +0000
@@ -0,0 +1,81 @@
+%PDF-1.3
+%쏢
+5 0 obj
+<</Length 6 0 R/Filter /FlateDecode>>
+stream
+xVMo6WgD}8v
+.Zmnw/2A/(3<*s&8h׀ t 00Iq%4KfHQeĞHBdu
$pLPa,GQf8]"¢("|X4)1l<_d'Wuq!8q߇GQ_W QqGh	z%Ns%&IVUhj%kZH~# 18F#F
+UGd)i,	^!Lb@r/`3]xpIQZ-ZaڏLW^N̍ŎA}ޚzoE-4W7qs`[6L5bك\]^ZXh=jݼMQ)vxEzdvEz4jڧ9AB(]y8-}M5laEo
3e_Lr8e8T1x	f[GTFJ@V|+&n7yuA +parfPWhYX)+V/xc|?z{Emߣ6ogNs|\N.t=ytd/
iҐTZoq9$NCܩ@fh~F4dA*)LNY@$2^Zs	05
+Ⱥo~t
؊i i2Α^ғ.܆}m=`iT^,._14'솂9`d\I>ƅ`0Tr(9NL|	=Jq
+z_]#&ߠR9?k6#.O!h,pl.||flύˆmS4#L;	/q[fSlm~=7/Gy@;ȁ3'at=q'CnxSw))9zendstream
+endobj
+6 0 obj
+964
+endobj
+4 0 obj
+<</Type/Page/MediaBox [0 0 457 478]
+/Rotate 0/Parent 3 0 R
+/Resources<</ProcSet[/PDF /Text]
+/ExtGState 9 0 R
+/Font 10 0 R
+>>
+/Contents 5 0 R
+>>
+endobj
+3 0 obj
+<< /Type /Pages /Kids [
+4 0 R
+] /Count 1
+>>
+endobj
+1 0 obj
+<</Type /Catalog /Pages 3 0 R
+>>
+endobj
+7 0 obj
+<</Type/ExtGState
+/OPM 1>>endobj
+9 0 obj
+<</R7
+7 0 R>>
+endobj
+10 0 obj
+<</R8
+8 0 R>>
+endobj
+8 0 obj
+<</BaseFont/Helvetica/Type/Font
+/Encoding 11 0 R/Subtype/Type1>>
+endobj
+11 0 obj
+<</Type/Encoding/Differences[
+45/minus]>>
+endobj
+2 0 obj
+<</Producer(ESP Ghostscript 8.15)
+/CreationDate(D:20060807135421)
+/ModDate(D:20060807135421)
+/Title(uml-slave.fig)
+/Creator(fig2dev Version 3.2 Patchlevel 4)
+/Author(fp@jupiter \(Florian Pose\))>>endobj
+xref
+0 12
+0000000000 65535 f 
+0000001286 00000 n 
+0000001572 00000 n 
+0000001227 00000 n 
+0000001068 00000 n 
+0000000015 00000 n 
+0000001049 00000 n 
+0000001334 00000 n 
+0000001434 00000 n 
+0000001375 00000 n 
+0000001404 00000 n 
+0000001514 00000 n 
+trailer
+<< /Size 12 /Root 1 0 R /Info 2 0 R
+/ID [(a+gijE\rdDa)(a+gijE\rdDa)]
+>>
+startxref
+1783
+%%EOF
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/svn.sty	Mon Sep 25 15:53:33 2006 +0000
@@ -0,0 +1,79 @@
+%%
+%% This is file `svn.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% svn.dtx  (with options: `package')
+%% 
+%% This is a generated file.
+%% 
+%% Copyright (C) 2003 by Richard Lewis <rpil+svn@rtf.org.uk>
+%% 
+%% This file may be distributed and/or modified under the conditions
+%% of the LaTeX Project Public License, either version 1.2 of this
+%% license or (at your option) any later version.  The latest version
+%% of this license is in:
+%% 
+%%    http://www.latex-project.org/lppl.txt
+%% 
+%% and version 1.2 or later is part of all distributions of LaTeX
+%% version 1999/12/01 or later.
+%% 
+\NeedsTeXFormat{LaTeX2e}
+\def\next $Id: #1 #2 #3-#4-#5 #6${%
+  \def\svn@date{#3/#4/#5}%
+  \def\svn@revision{#2}%
+}
+\next $Id: svn.dtx 32 2003-09-21 19:08:50Z rpil2 $
+\edef\next{%
+  \noexpand\ProvidesPackage{svn}[\svn@date\space r\svn@revision\space
+                                 Typeset Subversion keywords.]%
+}
+\next
+\def\SVN $#1${\svn@$#1: $}
+\let\SVNempty\relax
+\def\svn@$#1: #2${%
+  \def\svn@tmp{#2}%
+  \ifx\svn@tmp\@empty
+    \def\svn@suffix{@unexpanded}%
+  \else
+    \def\svn@suffix{@expanded}%
+  \fi
+  \@ifundefined{SVN@#1\svn@suffix}%
+      {\@nameuse{SVN@generic\svn@suffix}{#1}{#2}}%
+    {\@nameuse{SVN@#1\svn@suffix}{#1}{#2}}%
+}
+\def\SVN@generic@expanded#1#2{%
+  \expandafter\svn@set\csname SVN#1\endcsname$#2$%
+}
+\def\SVN@generic@unexpanded#1#2{%
+  \expandafter\global\expandafter\let\csname SVN#1\endcsname\SVNempty
+}
+\def\svn@set#1$#2 : ${\gdef#1{#2}}
+\def\SVN@Date@unexpanded#1#2{%
+  \gdef\SVNDate{\today}%
+  \global\let\SVNTime\SVNempty
+  \global\let\SVNRawDate\SVNempty
+}
+\let\SVN@LastChangedDate@unexpanded\SVN@Date@unexpanded
+\def\SVN@Date@expanded#1#2{%
+  \svn@set\SVNRawDate$#2$%
+  \svn@parse@date$#2$%
+}
+\let\SVN@LastChangedDate@expanded\SVN@Date@expanded
+\def\svn@parse@date$#1-#2-#3 #4:#5:#6 #7${%
+  \gdef\SVNDate{%
+    \begingroup
+      \def\svn@tmp{\PackageError{svn}{\SVNDate should not
+      be used in an \protect\edef}{See the svn.sty documentation for a
+      work around.}}%
+      \day#3 \month#2 \year#1
+      \today
+    \endgroup}%
+  \gdef\SVNTime{#4:#5:#6}%
+}
+\def\SVNdate $#1${\SVN $#1$\date{\SVNDate}}
+\endinput
+%%
+%% End of file `svn.sty'.