# HG changeset patch # User Florian Pose # Date 1159199613 0 # Node ID 7920ca086e5c2f4cc44eb2ec6b384d56a0109cc8 # Parent 5526520f323f6c3cb26dec8c4df33b21c8db894e Moved doc into trunk diff -r 5526520f323f -r 7920ca086e5c doc/Makefile --- /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 *~ + +#------------------------------------------------------------------------------ diff -r 5526520f323f -r 7920ca086e5c doc/ethercat_doc.tex --- /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 Query master . + -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} + +%------------------------------------------------------------------------------ diff -r 5526520f323f -r 7920ca086e5c doc/images/ethercat.eps --- /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^KFRqh`K-7=li; +%:e-HXu+DNkbLg8r#iDY4[XCpb.E5d7.O`8EDU,e3&n(:g'KWha7,DKVBT%P7X:Ln+F(#3YQ%-+l%YT+,3uRtrFOK[5C\hs8Gi>$+FNoi=cti&I/MnlGs&T4U1.MaR#6]5f7P./OXfABQL*eLs)G+fE +%:NhR+1B-KD]rbXAHlga^<8TRh0+:'mJKL9k+TbW6uMB6*=LMdFpY"e<5BX9k+Tj]5F9;:3(3BUVD09Lfsa*N\NV,8$6\kHYOc1R7G9DZD.@W%&q!4.\@[Cj9Vnk8)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;@oW1,]#[PWY;0%sFIue7-8%tc>*)r]qm_\;ZtGgJ9hO724NKue[WJoPomG5j[NBOT-deU&`^%`rp&9UV:)OL"mXkr%^j217e"[BWu7=O4m9KRkd)tZ1OJ9l^:tj2q7FFe?N'r&B]`$S[c"sg3;Ir4#1r`n9q!HaOD$.[u3Nk1A1U#2heO\;jTgg;3e2NMuXHO +%:g6&A0%m;J.%K5qV8SQWQ#+#8KNXo0'0%UUP3elG#;;eZ@MI%8g]`1N0@4DmCp8<%SHa7)8ph)4?t:LNBN#%;7i0kF,"d`nXA/P>?>t9fM&Nmi=/[Y^BeR?.MuobR5W#TPfZVgnk64F`H@iTe*,OZA@8BTVfH;H +%: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:1U6C?f>9A#Z3me,:<>NKfi\RC812@W8TVdM1;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$)/tpGW,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:IU9&G0g.Y-jqf\da:UjaG*C-6nB-A2In<2\NHR%aAd9/.CFNMV.ttBT;d"K;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:$]pkD4*$_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$hNb3V27H!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/0N3MAG1Duk.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;!@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!!'`,@!!!!!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 diff -r 5526520f323f -r 7920ca086e5c doc/images/ethercat.pdf Binary file doc/images/ethercat.pdf has changed diff -r 5526520f323f -r 7920ca086e5c doc/images/fmmus.eps --- /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 diff -r 5526520f323f -r 7920ca086e5c doc/images/fmmus.fig --- /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 diff -r 5526520f323f -r 7920ca086e5c doc/images/fmmus.pdf Binary file doc/images/fmmus.pdf has changed diff -r 5526520f323f -r 7920ca086e5c doc/images/fsm-change.eps --- /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 diff -r 5526520f323f -r 7920ca086e5c doc/images/fsm-change.fig --- /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 diff -r 5526520f323f -r 7920ca086e5c doc/images/fsm-change.pdf Binary file doc/images/fsm-change.pdf has changed diff -r 5526520f323f -r 7920ca086e5c doc/images/fsm-coedown.eps --- /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 diff -r 5526520f323f -r 7920ca086e5c doc/images/fsm-coedown.fig --- /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 diff -r 5526520f323f -r 7920ca086e5c doc/images/fsm-coedown.pdf Binary file doc/images/fsm-coedown.pdf has changed diff -r 5526520f323f -r 7920ca086e5c doc/images/fsm-eoe.eps --- /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 diff -r 5526520f323f -r 7920ca086e5c doc/images/fsm-eoe.fig --- /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 diff -r 5526520f323f -r 7920ca086e5c doc/images/fsm-eoe.pdf Binary file doc/images/fsm-eoe.pdf has changed diff -r 5526520f323f -r 7920ca086e5c doc/images/fsm-idle.eps --- /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 diff -r 5526520f323f -r 7920ca086e5c doc/images/fsm-idle.fig --- /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 diff -r 5526520f323f -r 7920ca086e5c doc/images/fsm-idle.pdf Binary file doc/images/fsm-idle.pdf has changed diff -r 5526520f323f -r 7920ca086e5c doc/images/fsm-op.eps --- /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 diff -r 5526520f323f -r 7920ca086e5c doc/images/fsm-op.fig --- /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 diff -r 5526520f323f -r 7920ca086e5c doc/images/fsm-op.pdf Binary file doc/images/fsm-op.pdf has changed diff -r 5526520f323f -r 7920ca086e5c doc/images/fsm-sii.eps --- /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 diff -r 5526520f323f -r 7920ca086e5c doc/images/fsm-sii.fig --- /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 diff -r 5526520f323f -r 7920ca086e5c doc/images/fsm-sii.pdf Binary file doc/images/fsm-sii.pdf has changed diff -r 5526520f323f -r 7920ca086e5c doc/images/fsm-slaveconf.eps --- /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 diff -r 5526520f323f -r 7920ca086e5c doc/images/fsm-slaveconf.fig --- /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 diff -r 5526520f323f -r 7920ca086e5c doc/images/fsm-slaveconf.pdf Binary file doc/images/fsm-slaveconf.pdf has changed diff -r 5526520f323f -r 7920ca086e5c doc/images/fsm-slavescan.eps --- /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 diff -r 5526520f323f -r 7920ca086e5c doc/images/fsm-slavescan.fig --- /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 diff -r 5526520f323f -r 7920ca086e5c doc/images/fsm-slavescan.pdf Binary file doc/images/fsm-slavescan.pdf has changed diff -r 5526520f323f -r 7920ca086e5c doc/images/ighsign.eps --- /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 diff -r 5526520f323f -r 7920ca086e5c doc/images/ighsign.pdf Binary file doc/images/ighsign.pdf has changed diff -r 5526520f323f -r 7920ca086e5c doc/images/interrupt.eps --- /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 diff -r 5526520f323f -r 7920ca086e5c doc/images/interrupt.fig --- /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 diff -r 5526520f323f -r 7920ca086e5c doc/images/interrupt.pdf Binary file doc/images/interrupt.pdf has changed diff -r 5526520f323f -r 7920ca086e5c doc/images/master-locks.eps --- /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 diff -r 5526520f323f -r 7920ca086e5c doc/images/master-locks.fig --- /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 diff -r 5526520f323f -r 7920ca086e5c doc/images/master-locks.pdf Binary file doc/images/master-locks.pdf has changed diff -r 5526520f323f -r 7920ca086e5c doc/images/masterarch.eps --- /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 diff -r 5526520f323f -r 7920ca086e5c doc/images/masterarch.fig --- /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 diff -r 5526520f323f -r 7920ca086e5c doc/images/masterarch.pdf Binary file doc/images/masterarch.pdf has changed diff -r 5526520f323f -r 7920ca086e5c doc/images/masters.eps --- /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 diff -r 5526520f323f -r 7920ca086e5c doc/images/masters.fig --- /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 diff -r 5526520f323f -r 7920ca086e5c doc/images/masters.pdf Binary file doc/images/masters.pdf has changed diff -r 5526520f323f -r 7920ca086e5c doc/images/modes.eps --- /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 diff -r 5526520f323f -r 7920ca086e5c doc/images/modes.fig --- /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 diff -r 5526520f323f -r 7920ca086e5c doc/images/modes.pdf Binary file doc/images/modes.pdf has changed diff -r 5526520f323f -r 7920ca086e5c doc/images/statetrans.eps --- /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 diff -r 5526520f323f -r 7920ca086e5c doc/images/statetrans.fig --- /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 diff -r 5526520f323f -r 7920ca086e5c doc/images/statetrans.pdf Binary file doc/images/statetrans.pdf has changed diff -r 5526520f323f -r 7920ca086e5c doc/images/uml-all.eps --- /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 diff -r 5526520f323f -r 7920ca086e5c doc/images/uml-all.fig --- /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 diff -r 5526520f323f -r 7920ca086e5c doc/images/uml-all.pdf Binary file doc/images/uml-all.pdf has changed diff -r 5526520f323f -r 7920ca086e5c doc/images/uml-datagram.eps --- /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 diff -r 5526520f323f -r 7920ca086e5c doc/images/uml-datagram.fig --- /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 diff -r 5526520f323f -r 7920ca086e5c doc/images/uml-datagram.pdf Binary file doc/images/uml-datagram.pdf has changed diff -r 5526520f323f -r 7920ca086e5c doc/images/uml-debug.eps --- /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 diff -r 5526520f323f -r 7920ca086e5c doc/images/uml-debug.fig --- /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 diff -r 5526520f323f -r 7920ca086e5c doc/images/uml-debug.pdf --- /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 +<> +stream +xmOO0 сdi.'M[6iBȇ> +/Contents 5 0 R +>> +endobj +3 0 obj +<< /Type /Pages /Kids [ +4 0 R +] /Count 1 +>> +endobj +1 0 obj +<> +endobj +7 0 obj +<>endobj +9 0 obj +<> +endobj +10 0 obj +<> +endobj +8 0 obj +<> +endobj +2 0 obj +<>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 diff -r 5526520f323f -r 7920ca086e5c doc/images/uml-device.eps --- /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 diff -r 5526520f323f -r 7920ca086e5c doc/images/uml-device.fig --- /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 diff -r 5526520f323f -r 7920ca086e5c doc/images/uml-device.pdf Binary file doc/images/uml-device.pdf has changed diff -r 5526520f323f -r 7920ca086e5c doc/images/uml-domain.eps --- /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 diff -r 5526520f323f -r 7920ca086e5c doc/images/uml-domain.fig --- /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 diff -r 5526520f323f -r 7920ca086e5c doc/images/uml-domain.pdf Binary file doc/images/uml-domain.pdf has changed diff -r 5526520f323f -r 7920ca086e5c doc/images/uml-eoe.eps --- /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 diff -r 5526520f323f -r 7920ca086e5c doc/images/uml-eoe.fig --- /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 diff -r 5526520f323f -r 7920ca086e5c doc/images/uml-eoe.pdf Binary file doc/images/uml-eoe.pdf has changed diff -r 5526520f323f -r 7920ca086e5c doc/images/uml-fsm.eps --- /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 diff -r 5526520f323f -r 7920ca086e5c doc/images/uml-fsm.fig --- /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 diff -r 5526520f323f -r 7920ca086e5c doc/images/uml-fsm.pdf Binary file doc/images/uml-fsm.pdf has changed diff -r 5526520f323f -r 7920ca086e5c doc/images/uml-master.eps --- /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 diff -r 5526520f323f -r 7920ca086e5c doc/images/uml-master.fig --- /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 diff -r 5526520f323f -r 7920ca086e5c doc/images/uml-master.pdf Binary file doc/images/uml-master.pdf has changed diff -r 5526520f323f -r 7920ca086e5c doc/images/uml-slave.eps --- /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 diff -r 5526520f323f -r 7920ca086e5c doc/images/uml-slave.fig --- /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 diff -r 5526520f323f -r 7920ca086e5c doc/images/uml-slave.pdf --- /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 +<> +stream +xVMo6WgD}8v +.Zmnw/2A/(3<*s&8h׀ t 00Iq%4KfHQeĞHB du $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/x c|?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 +<> +/Contents 5 0 R +>> +endobj +3 0 obj +<< /Type /Pages /Kids [ +4 0 R +] /Count 1 +>> +endobj +1 0 obj +<> +endobj +7 0 obj +<>endobj +9 0 obj +<> +endobj +10 0 obj +<> +endobj +8 0 obj +<> +endobj +11 0 obj +<> +endobj +2 0 obj +<>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 diff -r 5526520f323f -r 7920ca086e5c doc/svn.sty --- /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 +%% +%% 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'.