Commits

Anonymous committed 094e67a Draft

version 0.3.0

Comments (0)

Files changed (128)

+syntax:regexp
+^build/
+^dist/
+^docs/_build/
+^.*\.svn/
+^\.tox/
+\.coverage
+\.pyc$
+\.orig$
+\.class$
+\.so$
+\.*,cover
+test.cfg
+push.sh
+\.egg$
+\.egg-info$
+coverage.xml
+nosetests.xml
+.*.tar.gz
+0.1.0 (2012-03-06)
+==================
+
+First release.
+
+0.1.1 (2012-03-07)
+==================
+
+Improve api doc from c_*.py modules.
+
+0.1.2 (2012-03-30)
+==================
+
+Added c_wsgi_server.py, a experimental wsgi server based in waitress and ginsfsm
+
+0.3.0 (2012-06-30)
+==================
+
+Refactoring doc, examples, ... all.
+ ArtGins Project Contributor Agreement
+======================================
+
+The submitter agrees by adding his or her name within the section below named
+"Contributors" and submitting the resulting modified document to the
+canonical shared repository location for this software project (whether
+directly, as a user with "direct commit access", or via a "pull request"), he
+or she is signing a contract electronically.  The submitter becomes a
+Contributor after a) he or she signs this document by adding their name
+beneath the "Contributors" section below, and b) the resulting document is
+accepted into the canonical version control repository.
+
+Treatment of Account
+---------------------
+
+Contributor will not allow anyone other than the Contributor to use his or
+her username or source repository login to submit code to a ArtGins Project
+source repository. Should Contributor become aware of any such use,
+Contributor will immediately by notifying ArtGins.
+Notification must be performed by sending an email to
+webmaster@artgins.com.  Until such notice is received, Contributor will be
+presumed to have taken all actions made through Contributor's account. If the
+Contributor has direct commit access, ArtGins will have
+complete control and discretion over capabilities assigned to Contributor's
+account, and may disable Contributor's account for any reason at any time.
+
+Legal Effect of Contribution
+----------------------------
+
+Upon submitting a change or new work to a ArtGins Project source Repository (a
+"Contribution"), you agree to assign, and hereby do assign, a one-half
+interest of all right, title and interest in and to copyright and other
+intellectual property rights with respect to your new and original portions
+of the Contribution to ArtGins. You and ArtGins
+each agree that the other shall be free to exercise any and all exclusive
+rights in and to the Contribution, without accounting to one another,
+including without limitation, the right to license the Contribution to others
+under the Repoze Public License. This agreement shall run with title to the
+Contribution. ArtGins does not convey to you any right, title
+or interest in or to the Program or such portions of the Contribution that
+were taken from the Program. Your transmission of a submission to the ArtGins
+Project source Repository and marks of identification concerning the
+Contribution itself constitute your intent to contribute and your assignment
+of the work in accordance with the provisions of this Agreement.
+
+License Terms
+-------------
+
+Code committed to the ArtGins Project source repository (Committed Code) must
+be governed by the Repoze Public License (http://repoze.org/LICENSE.txt, aka
+"the RPL") or another license acceptable to ArtGins.  Until
+ArtGins declares in writing an acceptable license other than
+the RPL, only the RPL shall be used.  A list of exceptions is detailed within
+the "Licensing Exceptions" section of this document, if one exists.
+
+Representations, Warranty, and Indemnification
+----------------------------------------------
+
+Contributor represents and warrants that the Committed Code does not violate
+the rights of any person or entity, and that the Contributor has legal
+authority to enter into this Agreement and legal authority over Contributed
+Code. Further, Contributor indemnifies ArtGins against
+violations.
+
+Cryptography
+------------
+
+Contributor understands that cryptographic code may be subject to government
+regulations with which ArtGins and/or entities using Committed
+Code must comply. Any code which contains any of the items listed below must
+not be checked-in until ArtGins staff has been notified and has
+approved such contribution in writing.
+
+- Cryptographic capabilities or features
+
+- Calls to cryptographic features
+
+- User interface elements which provide context relating to cryptography
+
+- Code which may, under casual inspection, appear to be cryptographic.
+
+Notices
+-------
+
+Contributor confirms that any notices required will be included in any
+Committed Code.
+
+Licensing Exceptions
+====================
+
+Code committed within the ``docs/`` subdirectory of the GinsFSM source
+control repository and "docstrings" which appear in the documentation
+generated by running "make" within this directory is licensed under the
+Creative Commons Attribution-Noncommercial-Share Alike 3.0 United States
+License (http://creativecommons.org/licenses/by-nc-sa/3.0/us/).
+
+List of Contributors
+====================
+
+The below-signed are contributors to a code repository that is part of the
+project named "GinsFSM".  Each below-signed contributor has read, understand
+and agrees to the terms above in the section within this document entitled
+"ArtGins Project Contributor Agreement" as of the date beside his or her name.
+
+Contributors
+------------
+
+- Ginés Martínez Sánchez, 2012/01/01
+
+Copyright (c) 2012, Ginés Martínez Sánchez.
+Copyright (c) 2012 ArtGins and Contributors.
+(http://www.artgins.com), All Rights Reserved
+
+The compat.py module is copyright from (c) Agendaless Consulting and Contributors (http://www.agendaless.com).
+
+The c_sockt.py module  is inspired in Tornado (ioloop.py) and Python (asyncore.py,asynchat) with copyrights from:
+    - (c) Sam Rushing <rushing@nightmare.com>
+    - (c) Tornado (http://www.tornadoweb.org/)
+    - (c) Facebook (http://www.facebook.com/)
+
+Hacking on GinsFSM
+==================
+
+Here are some guidelines about hacking on GinsFSM.
+
+Using a Development Checkout
+----------------------------
+
+Below is a quick start on creating a development environment using a GinsFSM
+checkout.
+
+TODO
+
+Adding Features
+---------------
+
+In order to add a feature to GinsFSM:
+
+- The feature must be documented in both the API and narrative
+  documentation (in ``docs/``).
+
+- The feature must work fully on the following CPython versions: 2.6,
+  2.7, and 3.2 on both UNIX and Windows.
+
+- The feature must work on the latest version of PyPy.
+
+- The feature must not cause installation or runtime failure on App Engine.
+  If it doesn't cause installation or runtime failure, but doesn't actually
+  *work* on these platforms, that caveat should be spelled out in the
+  documentation.
+
+- The feature must not depend on any particular persistence layer
+  (filesystem, SQL, etc).
+
+- The feature must not add unnecessary dependencies (where
+  "unnecessary" is of course subjective, but new dependencies should
+  be discussed).
+
+The above requirements are relaxed for scaffolding dependencies.  If a
+scaffold has an install-time dependency on something that doesn't work on a
+particular platform, that caveat should be spelled out clearly in *its*
+documentation (within its ``docs/`` directory).
+
+Coding Style
+------------
+
+- PEP8 compliance.  Whitespace rules are relaxed: not necessary to put
+  2 newlines between classes.  But 80-column lines, in particular, are
+  mandatory.
+
+Running Tests
+--------------
+
+- To run tests for GinsFSM on a single Python version, run ``python setup.py
+  test`` against the using the Python interpreter from virtualenv into which
+  you've ``setup.py develop``-ed GinsFSM.
+
+- To run the full set of GinsFSM tests on all platforms, install ``tox``
+  (http://codespeak.net/~hpk/tox/) into a system Python.  The ``tox`` console
+  script will be installed into the scripts location for that Python.  While
+  ``cd``'ed to the GinsFSM checkout root directory (it contains ``tox.ini``),
+  invoke the ``tox`` console script.  This will read the ``tox.ini`` file and
+  execute the tests on multiple Python versions and platforms; while it runs,
+  it creates a virtualenv for each version/platform combination.  For
+  example::
+
+   $ /usr/bin/easy_install tox
+   $ cd ~/hack-on-ginsfsm/ginsfsm
+   $ /usr/bin/tox
+
+Test Coverage
+-------------
+
+- The codebase *must* have 100% test statement coverage after each commit.
+  You can test coverage by installing ``nose`` and ``coverage``
+  into your virtualenv, and running ``setup.py nosetests --with-coverage``.
+
+Documentation Coverage
+----------------------
+
+- If you fix a bug, and the bug requires an API or behavior
+  modification, all documentation in this package which references
+  that API or behavior must change to reflect the bug fix, ideally in
+  the same commit that fixes the bug or adds the feature.
+
+- To build and review docs:
+
+  1. Install ``tests_require`` dependencies from GinsFSM's setup.py into your
+     virtualenv.
+
+  2. From the ``docs`` directory of the GinsFSM checkout run ``make html
+     SPHINXBUILD=/path/to/your/virtualenv/bin/sphinx-build``.
+
+  3.  Open the _build/html/index.html file to see the resulting rendering.
+
+Change Log
+----------
+
+- Feature additions and bugfixes must be added to the ``CHANGES.txt``
+  file in the prevailing style.  Changelog entries should be long and
+  descriptive, not cryptic.  Other developers should be able to know
+  what your changelog entry means.
+GinsFSM is released under terms of The MIT
+License <http://www.opensource.org/licenses/mit-license>
+
+Copyright (c) 2012, Ginés Martínez Sánchez.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+
+Portions of the code marked as "stolen from Pyramid and waitress" are provided
+under the following license:
+  Zope Public License (ZPL) Version 2.1
+  Copyright Zope Foundation and Contributors
+  Copyright (c) 2008-2011 Agendaless Consulting and Contributors.
+
+  Portions (c) Zope Foundation and contributors (http://www.zope.org/).
+
+  Portions (c) Edgewall Software (http://edgewall.org)
+
+  Portions (c) Ian Bicking.
+
+
+Portions of the code marked as "Code inspired in asyncore.py and tornado"
+are provided under the following license:
+
+  Code from tornado ioloop.py:
+
+    Copyright 2009 Facebook
+    Licensed under the Apache License, Version 2.0
+
+  Code from asyncore.py:
+    Copyright 1996 by Sam Rushing
+prune .hg
+exclude push.sh
+GinsFSM
+=======
+
+GinsFSM is a python library to develop systems based in finite-state machines
+(http://en.wikipedia.org/wiki/Finite-state_machine).
+This model is really useful when writing networking and communication
+applications.
+
+The idea is very simple:
+
+    * All objects, called `gobj`, are instances of a derived
+      `ginsfsm.gobj.GObj` class.
+    * The `GObj` has an inside `simple-machine`
+      that defines its behavior.
+    * The communication between `gobj`'s happens via `event`'s.
+
+Thus, the nature of this system is fully asynchronous and event-driven.
+
+The interface is simple and common to all objects; you just have to change the
+name of the event and the data they carry.
+
+Support and Documentation
+-------------------------
+
+See the <http://ginsfsm.org/> to view documentation.
+
+Code available in <https://bitbucket.org/artgins/ginsfsm>
+
+License
+-------
+
+Copyright (c) 2012, Ginés Martínez Sánchez.
+
+GinsFSM is released under terms of The MIT
+License <http://www.opensource.org/licenses/mit-license>
+
+GinsFSM TODO
+============
+
+- Incorporate multiple wsgi applications, as paste.urlmap, but dinamically!
+- Create scaffold templates.

docs/DejaVuSans.ttf

Binary file added.
+# Makefile for Sphinx documentation
+#
+
+# You can set these variables from the command line.
+SPHINXOPTS    =
+SPHINXBUILD   = sphinx-build
+PAPER         =
+BUILDDIR      = _build
+
+# Internal variables.
+PAPEROPT_a4     = -D latex_paper_size=a4
+PAPEROPT_letter = -D latex_paper_size=letter
+ALLSPHINXOPTS   = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
+# the i18n builder cannot share the environment and doctrees with the others
+I18NSPHINXOPTS  = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
+
+.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext
+
+help:
+	@echo "Please use \`make <target>' where <target> is one of"
+	@echo "  html       to make standalone HTML files"
+	@echo "  dirhtml    to make HTML files named index.html in directories"
+	@echo "  singlehtml to make a single large HTML file"
+	@echo "  pickle     to make pickle files"
+	@echo "  json       to make JSON files"
+	@echo "  htmlhelp   to make HTML files and a HTML help project"
+	@echo "  qthelp     to make HTML files and a qthelp project"
+	@echo "  devhelp    to make HTML files and a Devhelp project"
+	@echo "  epub       to make an epub"
+	@echo "  latex      to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
+	@echo "  latexpdf   to make LaTeX files and run them through pdflatex"
+	@echo "  text       to make text files"
+	@echo "  man        to make manual pages"
+	@echo "  texinfo    to make Texinfo files"
+	@echo "  info       to make Texinfo files and run them through makeinfo"
+	@echo "  gettext    to make PO message catalogs"
+	@echo "  changes    to make an overview of all changed/added/deprecated items"
+	@echo "  linkcheck  to check all external links for integrity"
+	@echo "  doctest    to run all doctests embedded in the documentation (if enabled)"
+
+clean:
+	-rm -rf $(BUILDDIR)/*
+
+html:
+	$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
+	@echo $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
+	@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
+
+dirhtml:
+	$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
+	@echo
+	@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
+
+singlehtml:
+	$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
+	@echo
+	@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
+
+pickle:
+	$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
+	@echo
+	@echo "Build finished; now you can process the pickle files."
+
+json:
+	$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
+	@echo
+	@echo "Build finished; now you can process the JSON files."
+
+htmlhelp:
+	$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
+	@echo
+	@echo "Build finished; now you can run HTML Help Workshop with the" \
+	      ".hhp project file in $(BUILDDIR)/htmlhelp."
+
+qthelp:
+	$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
+	@echo
+	@echo "Build finished; now you can run "qcollectiongenerator" with the" \
+	      ".qhcp project file in $(BUILDDIR)/qthelp, like this:"
+	@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/GinsFSM.qhcp"
+	@echo "To view the help file:"
+	@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/GinsFSM.qhc"
+
+devhelp:
+	$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
+	@echo
+	@echo "Build finished."
+	@echo "To view the help file:"
+	@echo "# mkdir -p $$HOME/.local/share/devhelp/GinsFSM"
+	@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/GinsFSM"
+	@echo "# devhelp"
+
+epub:
+	$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
+	@echo
+	@echo "Build finished. The epub file is in $(BUILDDIR)/epub."
+
+latex:
+	$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
+	@echo
+	@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
+	@echo "Run \`make' in that directory to run these through (pdf)latex" \
+	      "(use \`make latexpdf' here to do that automatically)."
+
+latexpdf:
+	$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
+	@echo "Running LaTeX files through pdflatex..."
+	$(MAKE) -C $(BUILDDIR)/latex all-pdf
+	@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
+
+text:
+	$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
+	@echo
+	@echo "Build finished. The text files are in $(BUILDDIR)/text."
+
+man:
+	$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
+	@echo
+	@echo "Build finished. The manual pages are in $(BUILDDIR)/man."
+
+texinfo:
+	$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
+	@echo
+	@echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
+	@echo "Run \`make' in that directory to run these through makeinfo" \
+	      "(use \`make info' here to do that automatically)."
+
+info:
+	$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
+	@echo "Running Texinfo files through makeinfo..."
+	make -C $(BUILDDIR)/texinfo info
+	@echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
+
+gettext:
+	$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
+	@echo
+	@echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
+
+changes:
+	$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
+	@echo
+	@echo "The overview file is in $(BUILDDIR)/changes."
+
+linkcheck:
+	$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
+	@echo
+	@echo "Link check complete; look for any errors in the above output " \
+	      "or in $(BUILDDIR)/linkcheck/output.txt."
+
+doctest:
+	$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
+	@echo "Testing of doctests in the sources finished, look at the " \
+	      "results in $(BUILDDIR)/doctest/output.txt."

docs/_static/CONNEX_FSM.svg

+<?xml version="1.0" encoding="utf-8" ?>
+<svg baseProfile="tiny" height="864" version="1.2" width="743" xmlns="http://www.w3.org/2000/svg" xmlns:ev="http://www.w3.org/2001/xml-events" xmlns:inkspace="http://www.inkscape.org/namespaces/inkscape" xmlns:xlink="http://www.w3.org/1999/xlink"><title /><desc>Graph of a FSM</desc><defs><filter height="1.504" id="filter_blur" inkspace:collect="always" width="1.1575" x="-0.0788" y="-0.252"><feGaussianBlur id="feGaussianBlur3780" in="SourceGraphic" inkspace:collect="always" stdDeviation="4.2" /></filter></defs><g font-family="DejaVu Sans" font-size="14"><rect fill="#f8f8f8" height="564" rx="10" ry="10" stroke="#888a85" stroke-width="2" width="653" x="30" y="150" /><g transform="translate(230,200)"><g transform="translate(0,0)"><rect fill="black" height="80" rx="10" ry="10" stroke="black" stroke-width="1" style="filter:url(#filter_blur);opacity:0.7;fill-opacity:1" width="228" x="0" y="0" /><rect fill="#faf1e8" height="80" rx="10" ry="10" stroke="black" stroke-width="1" width="228" x="0" y="0" /><text x="18" y="21">ST_DISCONNECTED</text><path d="m 0 28 228 0" stroke="black" stroke-width="1" /><text x="18" y="45">ac_enqueue_tx_data</text><line fill="black" stroke="black" stroke-width="1" x1="0" x2="9" y1="40" y2="40" /><circle cx="9" cy="40" fill="black" r="3" stroke="black" stroke-width="1" /><rect fill="black" height="4" stroke="black" stroke-width="1" width="4" x="226" y="40" /><text x="18" y="69">ac_timeout_disconnected</text><line fill="black" stroke="black" stroke-width="1" x1="0" x2="9" y1="64" y2="64" /><circle cx="9" cy="64" fill="black" r="3" stroke="black" stroke-width="1" /><rect fill="black" height="4" stroke="black" stroke-width="1" width="4" x="226" y="64" /></g><g transform="translate(0,120)"><rect fill="black" height="128" rx="10" ry="10" stroke="black" stroke-width="1" style="filter:url(#filter_blur);opacity:0.7;fill-opacity:1" width="228" x="0" y="0" /><rect fill="#faf1e8" height="128" rx="10" ry="10" stroke="black" stroke-width="1" width="228" x="0" y="0" /><text x="18" y="21">ST_WAIT_CONNECTED</text><path d="m 0 28 228 0" stroke="black" stroke-width="1" /><text x="18" y="45">ac_enqueue_tx_data</text><line fill="black" stroke="black" stroke-width="1" x1="0" x2="9" y1="40" y2="40" /><circle cx="9" cy="40" fill="black" r="3" stroke="black" stroke-width="1" /><rect fill="black" height="4" stroke="black" stroke-width="1" width="4" x="226" y="40" /><text x="18" y="69">ac_connected</text><line fill="black" stroke="black" stroke-width="1" x1="0" x2="9" y1="64" y2="64" /><circle cx="9" cy="64" fill="black" r="3" stroke="black" stroke-width="1" /><rect fill="black" height="4" stroke="black" stroke-width="1" width="4" x="226" y="64" /><text x="18" y="93">ac_disconnected</text><line fill="black" stroke="black" stroke-width="1" x1="0" x2="9" y1="88" y2="88" /><circle cx="9" cy="88" fill="black" r="3" stroke="black" stroke-width="1" /><rect fill="black" height="4" stroke="black" stroke-width="1" width="4" x="226" y="88" /><text x="18" y="117">ac_timeout_wait_connected</text><line fill="black" stroke="black" stroke-width="1" x1="0" x2="9" y1="112" y2="112" /><circle cx="9" cy="112" fill="black" r="3" stroke="black" stroke-width="1" /><rect fill="black" height="4" stroke="black" stroke-width="1" width="4" x="226" y="112" /></g><g transform="translate(0,288)"><rect fill="black" height="176" rx="10" ry="10" stroke="black" stroke-width="1" style="filter:url(#filter_blur);opacity:0.7;fill-opacity:1" width="228" x="0" y="0" /><rect fill="#faf1e8" height="176" rx="10" ry="10" stroke="black" stroke-width="1" width="228" x="0" y="0" /><text x="18" y="21">ST_CONNECTED</text><path d="m 0 28 228 0" stroke="black" stroke-width="1" /><text x="18" y="45">ac_drop</text><line fill="black" stroke="black" stroke-width="1" x1="0" x2="9" y1="40" y2="40" /><circle cx="9" cy="40" fill="black" r="3" stroke="black" stroke-width="1" /><rect fill="black" height="4" stroke="black" stroke-width="1" width="4" x="226" y="40" /><text x="18" y="69">ac_tx_data</text><line fill="black" stroke="black" stroke-width="1" x1="0" x2="9" y1="64" y2="64" /><circle cx="9" cy="64" fill="black" r="3" stroke="black" stroke-width="1" /><rect fill="black" height="4" stroke="black" stroke-width="1" width="4" x="226" y="64" /><text x="18" y="93">ac_disconnected</text><line fill="black" stroke="black" stroke-width="1" x1="0" x2="9" y1="88" y2="88" /><circle cx="9" cy="88" fill="black" r="3" stroke="black" stroke-width="1" /><rect fill="black" height="4" stroke="black" stroke-width="1" width="4" x="226" y="88" /><text x="18" y="117">ac_timeout_data</text><line fill="black" stroke="black" stroke-width="1" x1="0" x2="9" y1="112" y2="112" /><circle cx="9" cy="112" fill="black" r="3" stroke="black" stroke-width="1" /><rect fill="black" height="4" stroke="black" stroke-width="1" width="4" x="226" y="112" /><text x="18" y="141">ac_rx_data</text><line fill="black" stroke="black" stroke-width="1" x1="0" x2="9" y1="136" y2="136" /><circle cx="9" cy="136" fill="black" r="3" stroke="black" stroke-width="1" /><rect fill="black" height="4" stroke="black" stroke-width="1" width="4" x="226" y="136" /><text x="18" y="165">ac_transmit_ready</text><line fill="black" stroke="black" stroke-width="1" x1="0" x2="9" y1="160" y2="160" /><circle cx="9" cy="160" fill="black" r="3" stroke="black" stroke-width="1" /><rect fill="black" height="4" stroke="black" stroke-width="1" width="4" x="226" y="160" /></g></g><text font-size="28" x="230" y="30">CONNEX_FSM</text><g fill="none" stroke="#edd400" stroke-width="4"><path d="M 55 130 L 55 508 Q 55 528 75 528 L 228 528" /><path d="m 220 528 4 0 0 -4 4 4 -4 4 0 -4 z" /></g><text transform="rotate(-45,55,130)" x="55" y="126">EV_DROP</text><g fill="none" stroke="#73d216" stroke-width="4"><path d="M 80 130 L 80 220 Q 80 240 100 240 L 228 240" /><path d="m 220 240 4 0 0 -4 4 4 -4 4 0 -4 z" /><path d="M 80 130 L 80 340 Q 80 360 100 360 L 228 360" /><path d="m 220 360 4 0 0 -4 4 4 -4 4 0 -4 z" /><path d="M 80 130 L 80 532 Q 80 552 100 552 L 228 552" /><path d="m 220 552 4 0 0 -4 4 4 -4 4 0 -4 z" /></g><text transform="rotate(-45,80,130)" x="80" y="126">EV_TX_DATA</text><g fill="none" stroke="#ef2929" stroke-width="4"><path d="M 105 734 L 105 668 Q 105 648 125 648 L 228 648" /><path d="m 220 648 4 0 0 -4 4 4 -4 4 0 -4 z" /></g><text transform="rotate(45,105,734)" x="105" y="747">EV_TRANSMIT_READY</text><g fill="none" stroke="#729fcf" stroke-width="4"><path d="M 130 734 L 130 428 Q 130 408 150 408 L 228 408" /><path d="m 220 408 4 0 0 -4 4 4 -4 4 0 -4 z" /><path d="M 130 734 L 130 596 Q 130 576 150 576 L 228 576" /><path d="m 220 576 4 0 0 -4 4 4 -4 4 0 -4 z" /></g><text transform="rotate(45,130,734)" x="130" y="747">EV_DISCONNECTED</text><g fill="none" stroke="#e9b96e" stroke-width="4"><path d="M 155 734 L 155 644 Q 155 624 175 624 L 228 624" /><path d="m 220 624 4 0 0 -4 4 4 -4 4 0 -4 z" /></g><text transform="rotate(45,155,734)" x="155" y="747">EV_RX_DATA</text><g fill="none" stroke="#fcaf3e" stroke-width="4"><path d="M 180 734 L 180 404 Q 180 384 200 384 L 228 384" /><path d="m 220 384 4 0 0 -4 4 4 -4 4 0 -4 z" /></g><text transform="rotate(45,180,734)" x="180" y="747">EV_CONNECTED</text><g fill="none" stroke="#ad7fa8" stroke-width="4"><path d="M 205 734 L 205 284 Q 205 264 225 264 L 228 264" /><path d="m 220 264 4 0 0 -4 4 4 -4 4 0 -4 z" /><path d="M 205 734 L 205 452 Q 205 432 225 432 L 228 432" /><path d="m 220 432 4 0 0 -4 4 4 -4 4 0 -4 z" /><path d="M 205 734 L 205 620 Q 205 600 225 600 L 228 600" /><path d="m 220 600 4 0 0 -4 4 4 -4 4 0 -4 z" /></g><text transform="rotate(45,205,734)" x="205" y="747">EV_TIMEOUT</text><g fill="none" stroke="#ef2929" stroke-width="4"><path d="M 460 650 L 513 650 Q 533 650 533 630 L 533 130" /><path d="m 533 138 0 -4 -4 0 4 -4 4 4 -4 0 z" /></g><text transform="rotate(-45,533,130)" x="535" y="126">EV_TRANSMIT_READY</text><g fill="none" stroke="#729fcf" stroke-width="4"><path d="M 460 410 L 538 410 Q 558 410 558 390 L 558 130" /><path d="m 558 138 0 -4 -4 0 4 -4 4 4 -4 0 z" /><path d="M 460 578 L 538 578 Q 558 578 558 558 L 558 130" /><path d="m 558 138 0 -4 -4 0 4 -4 4 4 -4 0 z" /></g><text transform="rotate(-45,558,130)" x="560" y="126">EV_DISCONNECTED</text><g fill="none" stroke="#e9b96e" stroke-width="4"><path d="M 460 626 L 563 626 Q 583 626 583 606 L 583 130" /><path d="m 583 138 0 -4 -4 0 4 -4 4 4 -4 0 z" /></g><text transform="rotate(-45,583,130)" x="585" y="126">EV_RX_DATA</text><g fill="none" stroke="#fcaf3e" stroke-width="4"><path d="M 460 386 L 588 386 Q 608 386 608 366 L 608 130" /><path d="m 608 138 0 -4 -4 0 4 -4 4 4 -4 0 z" /></g><text transform="rotate(-45,608,130)" x="610" y="126">EV_CONNECTED</text><g fill="none" stroke="#edd400" stroke-width="4"><path d="M 460 530 L 613 530 Q 633 530 633 550 L 633 734" /><path d="m 633 726 0 4 4 0 -4 4 -4 -4 4 0 z" /></g><text transform="rotate(45,633,734)" x="637" y="742">EV_DROP</text><g fill="none" stroke="#73d216" stroke-width="4"><path d="M 460 554 L 638 554 Q 658 554 658 574 L 658 734" /><path d="m 658 726 0 4 4 0 -4 4 -4 -4 4 0 z" /></g><text transform="rotate(45,658,734)" x="662" y="742">EV_TX_DATA</text><g fill="none" stroke="black" stroke-width="1"><path d="M 460 410 L 468 410 Q 478 410 478 400 L 478 223 Q 478 213 468 213 L 458 213" /><path d="m 474 213 -8 0 0 8 -8 -8 8 -8 0 8 z" fill="black" /></g><g fill="none" stroke="black" stroke-width="1"><path d="M 460 434 L 478 434 Q 488 434 488 424 L 488 223 Q 488 213 478 213 L 458 213" /><path d="m 474 213 -8 0 0 8 -8 -8 8 -8 0 8 z" fill="black" /></g><g fill="none" stroke="black" stroke-width="1"><path d="M 460 386 L 488 386 Q 498 386 498 396 L 498 491 Q 498 501 488 501 L 458 501" /><path d="m 474 501 -8 0 0 8 -8 -8 8 -8 0 8 z" fill="black" /></g><g fill="none" stroke="black" stroke-width="1"><path d="M 460 578 L 498 578 Q 508 578 508 568 L 508 223 Q 508 213 498 213 L 458 213" /><path d="m 474 213 -8 0 0 8 -8 -8 8 -8 0 8 z" fill="black" /></g></g></svg>

docs/_static/CONNEX_FSM.svg.png

Added
New image

docs/_static/DejaVuSans.ttf

Binary file added.

docs/_static/TIMER_FSM.svg

+<?xml version="1.0" encoding="utf-8" ?>
+<svg baseProfile="full" height="600" version="1.1" width="600" xmlns="http://www.w3.org/2000/svg" xmlns:ev="http://www.w3.org/2001/xml-events" xmlns:inkspace="http://www.inkscape.org/namespaces/inkscape" xmlns:xlink="http://www.w3.org/1999/xlink"><title /><desc>Graph of a FSM</desc><defs><filter height="1.504" id="filter_blur" inkspace:collect="always" width="1.1575" x="-0.07875" y="-0.252"><feGaussianBlur id="feGaussianBlur3780" in="SourceGraphic" inkspace:collect="always" stdDeviation="4.2" /></filter></defs><g font-family="DejaVu Sans" font-size="14"><g transform="translate(100,100)"><g transform="translate(0,0)"><rect fill="black" height="56" rx="10" ry="10" stroke="black" stroke-width="1" style="filter:url(#filter_blur);opacity:0.7;fill-opacity:1" width="123" x="0" y="0" /><rect fill="#faf1e8" height="56" rx="10" ry="10" stroke="black" stroke-width="1" width="123" x="0" y="0" /><text x="18" y="21">ST_IDLE</text><path d="m 0 28 123 0" stroke="black" stroke-width="1" /><text x="18" y="45">ac_set_timer</text><line fill="black" stroke="black" stroke-width="1" x1="0" x2="9" y1="40" y2="40" /><circle cx="9" cy="40" fill="black" r="3" stroke="black" stroke-width="1" />
+
+<set attributeName="opacity" from="1" to="0.5" begin="mouseover" end="mouseout"/>
+
+
+<rect fill="black" height="4" stroke="black" stroke-width="1" width="4" x="121" y="40" /></g></g></g></svg>

docs/_static/TIMER_FSM.svg.png

Added
New image

docs/_static/latex-note.png

Added
New image

docs/_static/latex-warning.png

Added
New image

docs/_static/layout.png

Added
New image

docs/_static/sample.png

Added
New image

docs/_static/sample.svg

+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="572.44055"
+   height="591.34308"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.48.2 r9819"
+   sodipodi:docname="sample.svg">
+  <defs
+     id="defs4">
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow2Lend"
+       style="overflow:visible">
+      <path
+         id="path3817"
+         style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Mend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow2Mend"
+       style="overflow:visible">
+      <path
+         id="path3823"
+         style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="scale(-0.6,-0.6)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="DotL"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DotL"
+       style="overflow:visible">
+      <path
+         id="path3858"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.8,0,0,0.8,5.92,0.8)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DotM"
+       style="overflow:visible">
+      <path
+         id="path3861"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)"
+         inkscape:connector-curvature="0" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DotM-4"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path3861-0"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker5012"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path5014"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DotM-49"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path3861-8"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DotM-2"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path3861-1"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DotM-0"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path3861-5"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DotM-43"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path3861-3"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker5221"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path5223"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker5225"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path5227"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="marker5229"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path5231"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DotM-8"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path3861-31"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="DotM"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DotM-7"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path3861-9"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.4,0,0,0.4,2.96,0.4)" />
+    </marker>
+    <marker
+       inkscape:stockid="DotL"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DotL-9"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path3858-5"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.8,0,0,0.8,5.92,0.8)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow2Lend-9"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path3817-9"
+         style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
+    </marker>
+    <marker
+       inkscape:stockid="DotL"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="DotL-3"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path3858-4"
+         d="m -2.5,-1 c 0,2.76 -2.24,5 -5,5 -2.76,0 -5,-2.24 -5,-5 0,-2.76 2.24,-5 5,-5 2.76,0 5,2.24 5,5 z"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none;marker-end:none"
+         transform="matrix(0.8,0,0,0.8,5.92,0.8)" />
+    </marker>
+    <marker
+       inkscape:stockid="Arrow2Lend"
+       orient="auto"
+       refY="0"
+       refX="0"
+       id="Arrow2Lend-1"
+       style="overflow:visible">
+      <path
+         inkscape:connector-curvature="0"
+         id="path3817-93"
+         style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
+         d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
+         transform="matrix(-1.1,0,0,-1.1,-1.1,0)" />
+    </marker>
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1.762"
+     inkscape:cx="318.81667"
+     inkscape:cy="469.2786"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer1"
+     showgrid="true"
+     showborder="true"
+     borderlayer="false"
+     inkscape:window-width="1366"
+     inkscape:window-height="685"
+     inkscape:window-x="0"
+     inkscape:window-y="30"
+     inkscape:window-maximized="1"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0">
+    <inkscape:grid
+       type="xygrid"
+       id="grid2985"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true" />
+    <sodipodi:guide
+       orientation="0,1"
+       position="548.94189,508.31819"
+       id="guide12013" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(98.941895,-499.33728)">
+    <text
+       xml:space="preserve"
+       style="font-size:11px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono"
+       x="220.35715"
+       y="80"
+       id="text3769"
+       sodipodi:linespacing="125%"
+       transform="translate(0,552.36215)"><tspan
+         sodipodi:role="line"
+         id="tspan3771"
+         x="220.35715"
+         y="80"></tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:11px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono"
+       x="205.06097"
+       y="115.68746"
+       id="text3785"
+       sodipodi:linespacing="125%"
+       transform="translate(0,552.36215)"><tspan
+         sodipodi:role="line"
+         id="tspan3787"
+         x="205.06097"
+         y="115.68746" /></text>
+    <g
+       id="g5438"
+       transform="translate(-14,0)">
+      <rect
+         y="612.82648"
+         x="169.99998"
+         height="59.535652"
+         width="190"
+         id="rect3755"
+         style="opacity:0.7;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.30916202;stroke-opacity:1" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path3763"
+         d="m 169.99999,629.05148 190.00001,0"
+         style="fill:none;stroke:#000000;stroke-width:1.2541256px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+      <text
+         transform="scale(0.97424461,1.0264363)"
+         sodipodi:linespacing="125%"
+         id="text3773"
+         y="607.30725"
+         x="200.15506"
+         style="font-size:11.29079914px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono"
+         xml:space="preserve"><tspan
+           y="607.30725"
+           x="200.15506"
+           id="tspan3775"
+           sodipodi:role="line">ST_DISCONNECTED</tspan></text>
+      <text
+         transform="scale(0.97424461,1.0264363)"
+         sodipodi:linespacing="125%"
+         id="text3777"
+         y="624.75665"
+         x="193.99644"
+         style="font-size:11.29079914px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono"
+         xml:space="preserve"><tspan
+           y="624.75665"
+           x="193.99644"
+           id="tspan3779"
+           sodipodi:role="line">ac_timeout_disconnected()</tspan></text>
+      <text
+         transform="scale(0.97424461,1.0264363)"
+         sodipodi:linespacing="125%"
+         id="text3781"
+         y="640.28784"
+         x="193.69612"
+         style="font-size:11.29079914px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono"
+         xml:space="preserve"><tspan
+           y="640.28784"
+           x="193.69612"
+           id="tspan3783"
+           sodipodi:role="line">ac_enqueue_tx_data()</tspan></text>
+      <path
+         inkscape:connector-curvature="0"
+         id="path3789"
+         d="m 169.99998,639.16577 10,0"
+         style="fill:none;stroke:#000000;stroke-width:1.02643621px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#DotM)" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path3791"
+         d="m 169.99998,654.96934 10,0"
+         style="fill:none;stroke:#000000;stroke-width:1.02643621px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#DotM)" />
+    </g>
+    <text
+       xml:space="preserve"
+       style="font-size:11px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono"
+       x="179.60512"
+       y="175.08443"
+       id="text5150"
+       sodipodi:linespacing="125%"
+       transform="translate(0,552.36215)"><tspan
+         sodipodi:role="line"
+         id="tspan5152"
+         x="179.60512"
+         y="175.08443"></tspan></text>
+    <g
+       id="g5450"
+       transform="translate(0.49537659,-0.23518372)">
+      <rect
+         y="701.82642"
+         x="155.00002"
+         height="90.535728"
+         width="205"
+         id="rect3755-8"
+         style="opacity:0.7;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.67693007;stroke-opacity:1" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path3763-1"
+         d="m 155.00001,718.05146 204.99999,0"
+         style="fill:none;stroke:#000000;stroke-width:1.30269015px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path3789-1"
+         d="m 155,730.16575 10,0"
+         style="fill:none;stroke:#000000;stroke-width:1.02643621px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#DotM)" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path3791-3"
+         d="m 155,744.36215 10,0"
+         style="fill:none;stroke:#000000;stroke-width:1.02643621px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#DotM)" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path3791-3-4"
+         d="m 155,759.36215 10,0"
+         style="fill:none;stroke:#000000;stroke-width:1.02643621px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#DotM)" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path3791-3-4-9"
+         d="m 155,774.36215 10,0"
+         style="fill:none;stroke:#000000;stroke-width:1.02643621px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#DotM)" />
+      <text
+         sodipodi:linespacing="125%"
+         id="text5154"
+         y="732.36212"
+         x="170"
+         style="font-size:11px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono"
+         xml:space="preserve"><tspan
+           y="732.36212"
+           x="170"
+           id="tspan5156"
+           sodipodi:role="line">ac_connected()</tspan></text>
+      <text
+         sodipodi:linespacing="125%"
+         id="text5158"
+         y="747.36212"
+         x="170"
+         style="font-size:11px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono"
+         xml:space="preserve"><tspan
+           y="747.36212"
+           x="170"
+           id="tspan5160"
+           sodipodi:role="line">ac_disconnected()</tspan></text>
+      <text
+         sodipodi:linespacing="125%"
+         id="text5162"
+         y="762.36212"
+         x="170"
+         style="font-size:11px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono"
+         xml:space="preserve"><tspan
+           y="762.36212"
+           x="170"
+           id="tspan5164"
+           sodipodi:role="line">ac_timeout_wait_connected()</tspan></text>
+      <text
+         sodipodi:linespacing="125%"
+         id="text5166"
+         y="777.36212"
+         x="170"
+         style="font-size:11px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono"
+         xml:space="preserve"><tspan
+           y="777.36212"
+           x="170"
+           id="tspan5168"
+           sodipodi:role="line">ac_enqueue_tx_data()</tspan></text>
+      <text
+         transform="translate(0,552.36215)"
+         sodipodi:linespacing="125%"
+         id="text5313"
+         y="160.23518"
+         x="189.50462"
+         style="font-size:11px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono"
+         xml:space="preserve"><tspan
+           y="160.23518"
+           x="189.50462"
+           id="tspan5315"
+           sodipodi:role="line">ST_WAIT_CONNECTED</tspan></text>
+    </g>
+    <g
+       id="g5468"
+       transform="translate(0,6)">
+      <rect
+         y="816.82642"
+         x="155.00002"
+         height="120.53575"
+         width="205"
+         id="rect3755-8-8"
+         style="opacity:0.7;fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.93491948;stroke-opacity:1" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path3763-1-0"
+         d="m 155.00001,833.05149 204.99999,0"
+         style="fill:none;stroke:#000000;stroke-width:1.30269015px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path3789-1-5"
+         d="m 155,845.16578 10,0"
+         style="fill:none;stroke:#000000;stroke-width:1.02643621px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#DotM)" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path3791-3-7"
+         d="m 155,859.36218 10,0"
+         style="fill:none;stroke:#000000;stroke-width:1.02643621px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#DotM)" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path3791-3-4-0"
+         d="m 155,874.36218 10,0"
+         style="fill:none;stroke:#000000;stroke-width:1.02643621px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#DotM)" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path3791-3-4-9-7"
+         d="m 155,889.36218 10,0"
+         style="fill:none;stroke:#000000;stroke-width:1.02643621px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#DotM)" />
+      <text
+         sodipodi:linespacing="125%"
+         id="text5154-7"
+         y="847.36212"
+         x="170"
+         style="font-size:11px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono"
+         xml:space="preserve"><tspan
+           y="847.36212"
+           x="170"
+           id="tspan5156-7"
+           sodipodi:role="line">ac_disconnected()</tspan></text>
+      <text
+         sodipodi:linespacing="125%"
+         id="text5158-3"
+         y="862.36212"
+         x="170"
+         style="font-size:11px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono"
+         xml:space="preserve"><tspan
+           y="862.36212"
+           x="170"
+           id="tspan5160-9"
+           sodipodi:role="line">ac_drop()</tspan></text>
+      <text
+         sodipodi:linespacing="125%"
+         id="text5162-9"
+         y="877.36212"
+         x="170"
+         style="font-size:11px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono"
+         xml:space="preserve"><tspan
+           y="877.36212"
+           x="170"
+           id="tspan5164-5"
+           sodipodi:role="line">ac_timeout_data()</tspan></text>
+      <text
+         sodipodi:linespacing="125%"
+         id="text5166-2"
+         y="892.36212"
+         x="170"
+         style="font-size:11px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono"
+         xml:space="preserve"><tspan
+           y="892.36212"
+           x="170"
+           id="tspan5168-3"
+           sodipodi:role="line">ac_rx_data()</tspan></text>
+      <text
+         transform="translate(0,552.36215)"
+         sodipodi:linespacing="125%"
+         id="text5317"
+         y="275.14005"
+         x="189.50462"
+         style="font-size:11px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono"
+         xml:space="preserve"><tspan
+           y="275.14005"
+           x="189.50462"
+           id="tspan5319"
+           sodipodi:role="line">ST_CONNECTED</tspan></text>
+      <path
+         inkscape:connector-curvature="0"
+         id="path3791-3-4-9-7-3"
+         d="m 155,904.36215 10,0"
+         style="fill:none;stroke:#000000;stroke-width:1.02643621px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#DotM)" />
+      <text
+         sodipodi:linespacing="125%"
+         id="text5166-2-7"
+         y="907.36212"
+         x="170"
+         style="font-size:11px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono"
+         xml:space="preserve"><tspan
+           y="907.36212"
+           x="170"
+           id="tspan5168-3-4"
+           sodipodi:role="line">ac_tx_data()</tspan></text>
+      <text
+         sodipodi:linespacing="125%"
+         id="text5166-2-7-3"
+         y="922.36212"
+         x="170"
+         style="font-size:11px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono"
+         xml:space="preserve"><tspan
+           y="922.36212"
+           x="170"
+           id="tspan5168-3-4-8"
+           sodipodi:role="line">ac_transmit_ready()</tspan></text>
+      <path
+         inkscape:connector-curvature="0"
+         id="path3791-3-4-9-7-3-6"
+         d="m 155,919.36215 10,0"
+         style="fill:none;stroke:#000000;stroke-width:1.02643621px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#DotM)" />
+    </g>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:4.88108253;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 4,579.36215 467.05811,0"
+       id="path5494"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:4.85009003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 10,981.3622 461.0581,0"
+       id="path5494-7"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.98408383px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#DotL);marker-mid:url(#DotM-7);marker-end:url(#Arrow2Lend)"
+       d="m 135,562.36215 0,92 20,0"
+       id="path5514"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:none;marker-mid:url(#DotM-7);marker-end:url(#Arrow2Lend)"
+       d="m 135,100 0,120 20,0 0,0 0,0"
+       id="path6558"
+       inkscape:connector-curvature="0"
+       transform="translate(0,552.36215)" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.00738013px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend)"
+       d="m 135,772.36215 0,137 20,0"
+       id="path6980"
+       inkscape:connector-curvature="0" />
+    <text
+       xml:space="preserve"
+       style="font-size:11px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono"
+       x="141.05811"
+       y="661.77686"
+       id="text7192"
+       sodipodi:linespacing="125%"
+       transform="matrix(1,-0.74586098,0,1,0,0)"><tspan
+         sodipodi:role="line"
+         id="tspan7194"
+         x="141.05811"
+         y="661.77686">EV_TX_DATA</tspan></text>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.95472515px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#DotL);marker-end:url(#Arrow2Lend)"
+       d="m 115,561.56714 0,300.79501 40,0"
+       id="path7196"
+       inkscape:connector-curvature="0" />
+    <text
+       xml:space="preserve"
+       style="font-size:11px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono"
+       x="116.05811"
+       y="650.57245"
+       id="text7618"
+       sodipodi:linespacing="125%"
+       transform="matrix(1,-0.85306675,0,1,0,0)"><tspan
+         sodipodi:role="line"
+         id="tspan7620"
+         x="116.05811"
+         y="650.57245">EV_DROP</tspan></text>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.83937204px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#DotL);marker-end:url(#Arrow2Lend)"
+       d="m 95,1002.3621 0,-154.99995 60,0"
+       id="path8042"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#DotM-7);marker-end:url(#Arrow2Lend)"
+       d="m 95,295 0,-105 60,0"
+       id="path8044"
+       inkscape:connector-curvature="0"
+       transform="translate(0,552.36215)" />
+    <text
+       xml:space="preserve"
+       style="font-size:11px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono"
+       x="101.05811"
+       y="938.95752"
+       id="text9308"
+       sodipodi:linespacing="125%"
+       transform="matrix(1,0.71849349,0,1,0,0)"><tspan
+         sodipodi:role="line"
+         id="tspan9310"
+         x="101.05811"
+         y="938.95752">EV_DISCONNECTED</tspan></text>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.87886781px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#DotL);marker-end:url(#Arrow2Lend)"
+       d="m 75,1001.5671 0,-274.20495 80,0"
+       id="path9312"
+       inkscape:connector-curvature="0" />
+    <text
+       xml:space="preserve"
+       style="font-size:11px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono"
+       x="81.058105"
+       y="951.02814"
+       id="text9734"
+       sodipodi:linespacing="125%"
+       transform="matrix(1,0.74685903,0,1,0,0)"><tspan
+         sodipodi:role="line"
+         id="tspan9736"
+         x="81.058105"
+         y="951.02814">EV_CONNECTED</tspan></text>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.72182047px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#DotL);marker-end:url(#Arrow2Lend)"
+       d="m 55,1001.5671 0,-104.20495 100,0"
+       id="path9738"
+       inkscape:connector-curvature="0" />
+    <text
+       xml:space="preserve"
+       style="font-size:11px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono"
+       x="61.058105"
+       y="973.02863"
+       id="text10160"
+       sodipodi:linespacing="125%"
+       transform="matrix(1,0.63117757,0,1,0,0)"><tspan
+         sodipodi:role="line"
+         id="tspan10162"
+         x="61.058105"
+         y="973.02863">EV_RX_DATA</tspan></text>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.63333082px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#DotL);marker-end:url(#Arrow2Lend)"
+       d="m 35,1001.5671 0,-74.20495 120,0"
+       id="path10164"
+       inkscape:connector-curvature="0" />
+    <text
+       xml:space="preserve"
+       style="font-size:11px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono"
+       x="31.058105"
+       y="996.06989"
+       id="text10586"
+       sodipodi:linespacing="125%"
+       transform="matrix(1,0.65996425,0,1,0,0)"
+       inkscape:transform-center-x="-15.9683"
+       inkscape:transform-center-y="8.396219"><tspan
+         sodipodi:role="line"
+         id="tspan10588"
+         x="31.058105"
+         y="996.06989">EV_TRANSMIT_READY</tspan></text>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:4.5175395;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 6,582.36215 0,400 0,-8.16326"
+       id="path10590"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:4.5175395;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+       d="m 468,582.36215 0,400 0,-8.16326"
+       id="path10590-0"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:0.93808311px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#DotL);marker-end:url(#Arrow2Lend)"
+       d="m -20,640.36215 176,0"
+       id="path10614"
+       inkscape:connector-curvature="0" />
+    <text
+       xml:space="preserve"
+       style="font-size:11px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:DejaVu Sans Mono;-inkscape-font-specification:DejaVu Sans Mono"
+       x="-100"
+       y="642.36212"
+       id="text11081"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan11083"
+         x="-100"
+         y="642.36212">EV_TIMEOUT</tspan></text>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#DotM-7);marker-end:url(#Arrow2Lend-1)"
+       d="m 360,762.36215 c 120,-80 -10,-140 -10,-140"
+       id="path11135"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#DotM-7)"
+       d="m 360,190 c 40,-60 0,-114 0,-114"
+       id="path11573"
+       inkscape:connector-curvature="0"
+       transform="translate(0,552.36215)"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#DotM-7)"
+       d="M 360,300 C 550,110 358,76 358,76"
+       id="path11793"
+       inkscape:connector-curvature="0"
+       transform="translate(0,552.36215)"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#DotM-7);marker-end:url(#Arrow2Lend-1)"
+       d="m 360,170 c 70,50 0,100 0,100"
+       id="path12015"
+       inkscape:connector-curvature="0"
+       transform="translate(0,552.36215)"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.02691066px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#DotM-7);marker-end:url(#Arrow2Lend-1)"
+       d="m 40,640.36215 0,120 116,0"
+       id="path12453"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1.04364157px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#DotM-7);marker-end:url(#Arrow2Lend-1)"
+       d="m 40.173567,760.36215 0,120 109.826433,0"
+       id="path12891"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>

docs/_static/test.py

+#! /home/gines/env_ginsfsm/bin/python
+
+from ginsfsm.fsmdraw.fsm2image import fsm2image
+#from ginsfsm.c_timer import TIMER_FSM  # , TIMER_GCONFIG
+from ginsfsm.c_connex import CONNEX_FSM  # , TIMER_GCONFIG
+
+
+if __name__ == '__main__':
+    svgfile = 'xxx'
+    fsm2image('./', svgfile, CONNEX_FSM, 'svg',
+              font_name='./DejaVuSans.ttf', font_size=14)

docs/_static/test.svg

+<?xml version="1.0" encoding="utf-8" ?>
+<svg baseProfile="full" height="100%" version="1.1" width="100%" xmlns="http://www.w3.org/2000/svg" xmlns:ev="http://www.w3.org/2001/xml-events" xmlns:xlink="http://www.w3.org/1999/xlink"><defs /><line stroke="rgb(10%,10%,16%)" x1="0" x2="10" y1="0" y2="0" /><text x="0" y="10">Test</text></svg>

docs/_static/xxx.svg

+<?xml version="1.0" encoding="utf-8" ?>
+<svg baseProfile="tiny" height="864" version="1.2" width="793" xmlns="http://www.w3.org/2000/svg" xmlns:ev="http://www.w3.org/2001/xml-events" xmlns:inkspace="http://www.inkscape.org/namespaces/inkscape" xmlns:xlink="http://www.w3.org/1999/xlink"><title /><desc>Graph of a FSM</desc><defs><filter height="1.504" id="filter_blur" inkspace:collect="always" width="1.1575" x="-0.0788" y="-0.252"><feGaussianBlur id="feGaussianBlur3780" in="SourceGraphic" inkspace:collect="always" stdDeviation="4.2" /></filter></defs><g font-family="DejaVu Sans" font-size="14"><rect fill="#f8f8f8" height="564" rx="10" ry="10" stroke="#888a85" stroke-width="2" width="703" x="30" y="150" /><g transform="translate(230,200)"><g transform="translate(0,0)"><rect fill="black" height="80" rx="10" ry="10" stroke="black" stroke-width="1" style="filter:url(#filter_blur);opacity:0.7;fill-opacity:1" width="228" x="0" y="0" /><rect fill="#faf1e8" height="80" rx="10" ry="10" stroke="black" stroke-width="1" width="228" x="0" y="0" /><text x="18" y="21">ST_DISCONNECTED</text><path d="m 0 28 228 0" stroke="black" stroke-width="1" /><text x="18" y="45">ac_enqueue_tx_data</text><line fill="black" stroke="black" stroke-width="1" x1="0" x2="9" y1="40" y2="40" /><circle cx="9" cy="40" fill="black" r="3" stroke="black" stroke-width="1" /><rect fill="black" height="4" stroke="black" stroke-width="1" width="4" x="226" y="40" /><text x="18" y="69">ac_timeout_disconnected</text><line fill="black" stroke="black" stroke-width="1" x1="0" x2="9" y1="64" y2="64" /><circle cx="9" cy="64" fill="black" r="3" stroke="black" stroke-width="1" /><rect fill="black" height="4" stroke="black" stroke-width="1" width="4" x="226" y="64" /></g><g transform="translate(0,120)"><rect fill="black" height="128" rx="10" ry="10" stroke="black" stroke-width="1" style="filter:url(#filter_blur);opacity:0.7;fill-opacity:1" width="228" x="0" y="0" /><rect fill="#faf1e8" height="128" rx="10" ry="10" stroke="black" stroke-width="1" width="228" x="0" y="0" /><text x="18" y="21">ST_WAIT_CONNECTED</text><path d="m 0 28 228 0" stroke="black" stroke-width="1" /><text x="18" y="45">ac_enqueue_tx_data</text><line fill="black" stroke="black" stroke-width="1" x1="0" x2="9" y1="40" y2="40" /><circle cx="9" cy="40" fill="black" r="3" stroke="black" stroke-width="1" /><rect fill="black" height="4" stroke="black" stroke-width="1" width="4" x="226" y="40" /><text x="18" y="69">ac_connected</text><line fill="black" stroke="black" stroke-width="1" x1="0" x2="9" y1="64" y2="64" /><circle cx="9" cy="64" fill="black" r="3" stroke="black" stroke-width="1" /><rect fill="black" height="4" stroke="black" stroke-width="1" width="4" x="226" y="64" /><text x="18" y="93">ac_disconnected</text><line fill="black" stroke="black" stroke-width="1" x1="0" x2="9" y1="88" y2="88" /><circle cx="9" cy="88" fill="black" r="3" stroke="black" stroke-width="1" /><rect fill="black" height="4" stroke="black" stroke-width="1" width="4" x="226" y="88" /><text x="18" y="117">ac_timeout_wait_connected</text><line fill="black" stroke="black" stroke-width="1" x1="0" x2="9" y1="112" y2="112" /><circle cx="9" cy="112" fill="black" r="3" stroke="black" stroke-width="1" /><rect fill="black" height="4" stroke="black" stroke-width="1" width="4" x="226" y="112" /></g><g transform="translate(0,288)"><rect fill="black" height="176" rx="10" ry="10" stroke="black" stroke-width="1" style="filter:url(#filter_blur);opacity:0.7;fill-opacity:1" width="228" x="0" y="0" /><rect fill="#faf1e8" height="176" rx="10" ry="10" stroke="black" stroke-width="1" width="228" x="0" y="0" /><text x="18" y="21">ST_CONNECTED</text><path d="m 0 28 228 0" stroke="black" stroke-width="1" /><text x="18" y="45">ac_drop</text><line fill="black" stroke="black" stroke-width="1" x1="0" x2="9" y1="40" y2="40" /><circle cx="9" cy="40" fill="black" r="3" stroke="black" stroke-width="1" /><rect fill="black" height="4" stroke="black" stroke-width="1" width="4" x="226" y="40" /><text x="18" y="69">ac_tx_data</text><line fill="black" stroke="black" stroke-width="1" x1="0" x2="9" y1="64" y2="64" /><circle cx="9" cy="64" fill="black" r="3" stroke="black" stroke-width="1" /><rect fill="black" height="4" stroke="black" stroke-width="1" width="4" x="226" y="64" /><text x="18" y="93">ac_disconnected</text><line fill="black" stroke="black" stroke-width="1" x1="0" x2="9" y1="88" y2="88" /><circle cx="9" cy="88" fill="black" r="3" stroke="black" stroke-width="1" /><rect fill="black" height="4" stroke="black" stroke-width="1" width="4" x="226" y="88" /><text x="18" y="117">ac_timeout_data</text><line fill="black" stroke="black" stroke-width="1" x1="0" x2="9" y1="112" y2="112" /><circle cx="9" cy="112" fill="black" r="3" stroke="black" stroke-width="1" /><rect fill="black" height="4" stroke="black" stroke-width="1" width="4" x="226" y="112" /><text x="18" y="141">ac_rx_data</text><line fill="black" stroke="black" stroke-width="1" x1="0" x2="9" y1="136" y2="136" /><circle cx="9" cy="136" fill="black" r="3" stroke="black" stroke-width="1" /><rect fill="black" height="4" stroke="black" stroke-width="1" width="4" x="226" y="136" /><text x="18" y="165">ac_transmit_ready</text><line fill="black" stroke="black" stroke-width="1" x1="0" x2="9" y1="160" y2="160" /><circle cx="9" cy="160" fill="black" r="3" stroke="black" stroke-width="1" /><rect fill="black" height="4" stroke="black" stroke-width="1" width="4" x="226" y="160" /></g></g><text font-size="28" x="230" y="30">xxx</text><g fill="none" stroke="#edd400" stroke-width="4"><path d="M 55 130 L 55 508 Q 55 528 75 528 L 228 528" /><path d="m 220 528 4 0 0 -4 4 4 -4 4 0 -4 z" /></g><text transform="rotate(-45,55,130)" x="55" y="126">EV_DROP</text><g fill="none" stroke="#73d216" stroke-width="4"><path d="M 80 130 L 80 220 Q 80 240 100 240 L 228 240" /><path d="m 220 240 4 0 0 -4 4 4 -4 4 0 -4 z" /><path d="M 80 130 L 80 340 Q 80 360 100 360 L 228 360" /><path d="m 220 360 4 0 0 -4 4 4 -4 4 0 -4 z" /><path d="M 80 130 L 80 532 Q 80 552 100 552 L 228 552" /><path d="m 220 552 4 0 0 -4 4 4 -4 4 0 -4 z" /></g><text transform="rotate(-45,80,130)" x="80" y="126">EV_TX_DATA</text><g fill="none" stroke="#ef2929" stroke-width="4"><path d="M 105 734 L 105 668 Q 105 648 125 648 L 228 648" /><path d="m 220 648 4 0 0 -4 4 4 -4 4 0 -4 z" /></g><text transform="rotate(45,105,734)" x="105" y="747">EV_TRANSMIT_READY</text><g fill="none" stroke="#729fcf" stroke-width="4"><path d="M 130 734 L 130 428 Q 130 408 150 408 L 228 408" /><path d="m 220 408 4 0 0 -4 4 4 -4 4 0 -4 z" /><path d="M 130 734 L 130 596 Q 130 576 150 576 L 228 576" /><path d="m 220 576 4 0 0 -4 4 4 -4 4 0 -4 z" /></g><text transform="rotate(45,130,734)" x="130" y="747">EV_DISCONNECTED</text><g fill="none" stroke="#e9b96e" stroke-width="4"><path d="M 155 734 L 155 644 Q 155 624 175 624 L 228 624" /><path d="m 220 624 4 0 0 -4 4 4 -4 4 0 -4 z" /></g><text transform="rotate(45,155,734)" x="155" y="747">EV_RX_DATA</text><g fill="none" stroke="#fcaf3e" stroke-width="4"><path d="M 180 734 L 180 404 Q 180 384 200 384 L 228 384" /><path d="m 220 384 4 0 0 -4 4 4 -4 4 0 -4 z" /></g><text transform="rotate(45,180,734)" x="180" y="747">EV_CONNECTED</text><g fill="none" stroke="#ad7fa8" stroke-width="4"><path d="M 205 734 L 205 284 Q 205 264 225 264 L 228 264" /><path d="m 220 264 4 0 0 -4 4 4 -4 4 0 -4 z" /><path d="M 205 734 L 205 452 Q 205 432 225 432 L 228 432" /><path d="m 220 432 4 0 0 -4 4 4 -4 4 0 -4 z" /><path d="M 205 734 L 205 620 Q 205 600 225 600 L 228 600" /><path d="m 220 600 4 0 0 -4 4 4 -4 4 0 -4 z" /></g><text transform="rotate(45,205,734)" x="205" y="747">EV_TIMEOUT</text><g fill="none" stroke="#ad7fa8" stroke-width="4"><path d="M 460 410 L 438 410 Q 458 410 458 390 L 458 200" /><path d="m 458 208 0 -4 -4 0 4 -4 4 4 -4 0 z" /></g><g fill="none" stroke="#ad7fa8" stroke-width="4"><path d="M 460 434 L 438 434 Q 458 434 458 414 L 458 200" /><path d="m 458 208 0 -4 -4 0 4 -4 4 4 -4 0 z" /></g><g fill="none" stroke="#ad7fa8" stroke-width="4"><path d="M 460 386 L 438 386 Q 458 386 458 366 L 458 488" /><path d="m 458 496 0 -4 -4 0 4 -4 4 4 -4 0 z" /></g><g fill="none" stroke="#ad7fa8" stroke-width="4"><path d="M 460 578 L 438 578 Q 458 578 458 558 L 458 200" /><path d="m 458 208 0 -4 -4 0 4 -4 4 4 -4 0 z" /></g><g fill="none" stroke="#ef2929" stroke-width="4"><path d="M 460 650 L 563 650 Q 583 650 583 630 L 583 130" /><path d="m 583 138 0 -4 -4 0 4 -4 4 4 -4 0 z" /></g><text transform="rotate(-45,583,130)" x="585" y="126">EV_TRANSMIT_READY</text><g fill="none" stroke="#729fcf" stroke-width="4"><path d="M 460 410 L 588 410 Q 608 410 608 390 L 608 130" /><path d="m 608 138 0 -4 -4 0 4 -4 4 4 -4 0 z" /><path d="M 460 578 L 588 578 Q 608 578 608 558 L 608 130" /><path d="m 608 138 0 -4 -4 0 4 -4 4 4 -4 0 z" /></g><text transform="rotate(-45,608,130)" x="610" y="126">EV_DISCONNECTED</text><g fill="none" stroke="#e9b96e" stroke-width="4"><path d="M 460 626 L 613 626 Q 633 626 633 606 L 633 130" /><path d="m 633 138 0 -4 -4 0 4 -4 4 4 -4 0 z" /></g><text transform="rotate(-45,633,130)" x="635" y="126">EV_RX_DATA</text><g fill="none" stroke="#fcaf3e" stroke-width="4"><path d="M 460 386 L 638 386 Q 658 386 658 366 L 658 130" /><path d="m 658 138 0 -4 -4 0 4 -4 4 4 -4 0 z" /></g><text transform="rotate(-45,658,130)" x="660" y="126">EV_CONNECTED</text><g fill="none" stroke="#edd400" stroke-width="4"><path d="M 460 530 L 663 530 Q 683 530 683 550 L 683 734" /><path d="m 683 726 0 4 4 0 -4 4 -4 -4 4 0 z" /></g><text transform="rotate(45,683,734)" x="687" y="742">EV_DROP</text><g fill="none" stroke="#73d216" stroke-width="4"><path d="M 460 554 L 688 554 Q 708 554 708 574 L 708 734" /><path d="m 708 726 0 4 4 0 -4 4 -4 -4 4 0 z" /></g><text transform="rotate(45,708,734)" x="712" y="742">EV_TX_DATA</text></g></svg>

docs/_static/xxx.svg.png

Added
New image

docs/_themes/artgins/layout.html

+{% extends "sphinxdoc/layout.html" %}
+
+{#
+{% block header %}
+
+<div style="background-color: white; text-align: left; padding: 10px 10px 15px 15px">
+<img class="logo" src="{{ pathto('_static/pyramid.png', 1)}}" alt="Logo"/>
+</div>
+{% endblock %}
+#}
+{%- block sidebarsourcelink %}{%- endblock %}

docs/_themes/artgins/static/pyramid.ico

Added
New image

docs/_themes/artgins/static/pyramid.png

Added
New image

docs/_themes/artgins/theme.conf

+[theme]
+inherit = sphinxdoc
+
+[options]
+logo = pyramid.png
+favicon = pyramid.ico
+API Documentation
+=================
+
+Reference material for public API.
+
+Core classes
+------------
+
+.. toctree::
+    :maxdepth: 1
+
+    src/api/gaplic
+    src/api/gobj
+    src/api/smachine
+    src/api/gconfig
+
+Essential GObjs.
+----------------
+
+.. toctree::
+    :maxdepth: 1
+
+    src/api/c_timer
+    src/api/c_sock
+    src/api/c_srv_sock
+    src/api/c_connex
+    src/api/c_wsgi_server
+# -*- coding: utf-8 -*-
+#
+# GinsFSM documentation build configuration file, created by
+# sphinx-quickstart on Sun Oct 23 20:50:35 2011.
+#
+# This file is execfile()d with the current directory set to its containing dir.
+#
+# Note that not all possible configuration values are present in this
+# autogenerated file.
+#
+# All configuration values have a default; values that are commented out
+# serve to show the default.
+
+import sys
+import os
+
+# If extensions (or modules to document with autodoc) are in another directory,
+# add these directories to sys.path here. If the directory is relative to the
+# documentation root, use os.path.abspath to make it absolute, like shown here.
+#sys.path.insert(0, os.path.abspath('..'))
+parent = os.path.dirname(os.path.dirname(__file__))
+sys.path.append(os.path.abspath(parent))
+
+# -- General configuration -----------------------------------------------------
+
+# If your documentation needs a minimal Sphinx version, state it here.
+#needs_sphinx = '1.0'
+
+# Add any Sphinx extension module names here, as strings. They can be extensions
+# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
+extensions = ['sphinx.ext.autodoc', 'sphinx.ext.viewcode', 'ginsfsm.sphinxext']
+
+
+# Add any paths that contain templates here, relative to this directory.
+templates_path = ['_templates']
+
+# The suffix of source filenames.
+source_suffix = '.rst'
+
+# The encoding of source files.
+#source_encoding = 'utf-8-sig'
+
+# The master toctree document.
+master_doc = 'index'
+
+# General information about the project.
+project = u'GinsFSM'
+copyright = u'2012, Ginés Martínez Sánchez alias "ginsmar"'
+
+# The version info for the project you're documenting, acts as replacement for
+# |version| and |release|, also used in various other places throughout the
+# built documents.
+#
+# The short X.Y version.
+from ginsfsm import __version__ as version
+# The full version, including alpha/beta/rc tags.
+release = version
+
+# The language for content autogenerated by Sphinx. Refer to documentation
+# for a list of supported languages.
+#language = None
+
+# There are two options for replacing |today|: either, you set today to some
+# non-false value, then it is used:
+#today = ''
+# Else, today_fmt is used as the format for a strftime call.
+#today_fmt = '%B %d, %Y'
+
+# List of patterns, relative to source directory, that match files and
+# directories to ignore when looking for source files.
+exclude_patterns = ['_build']
+
+# The reST default role (used for this markup: `text`) to use for all documents.
+#default_role = None
+
+# If true, '()' will be appended to :func: etc. cross-reference text.
+#add_function_parentheses = True
+
+# If true, the current module name will be prepended to all description
+# unit titles (such as .. function::).
+#add_module_names = True
+
+# If true, sectionauthor and moduleauthor directives will be shown in the
+# output. They are ignored by default.
+#show_authors = False
+
+# The name of the Pygments (syntax highlighting) style to use.
+pygments_style = 'sphinx'
+
+# A list of ignored prefixes for module index sorting.
+#modindex_common_prefix = []
+
+
+# -- Options for HTML output ---------------------------------------------------
+
+# The theme to use for HTML and HTML Help pages.  See the documentation for
+# a list of builtin themes.
+html_theme = 'artgins'
+
+# Theme options are theme-specific and customize the look and feel of a theme
+# further.  For a list of options available for each theme, see the
+# documentation.
+#html_theme_options = {}
+
+# Add any paths that contain custom themes here, relative to this directory.
+sys.path.append(os.path.abspath('_themes'))
+html_theme_path = ['_themes']
+
+# The name for this set of Sphinx documents.  If None, it defaults to
+# "<project> v<release> documentation".
+#html_title = None
+
+# A shorter title for the navigation bar.  Default is the same as html_title.
+#html_short_title = None
+
+# The name of an image file (relative to this directory) to place at the top
+# of the sidebar.
+#html_logo = None
+
+# The name of an image file (within the static path) to use as favicon of the
+# docs.  This file should be a Windows icon file (.ico) being 16x16 or 32x32
+# pixels large.
+#html_favicon = None
+
+# Add any paths that contain custom static files (such as style sheets) here,
+# relative to this directory. They are copied after the builtin static files,
+# so a file named "default.css" will overwrite the builtin "default.css".
+html_static_path = ['_static']
+
+# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
+# using the given strftime format.
+#html_last_updated_fmt = '%b %d, %Y'
+
+# If true, SmartyPants will be used to convert quotes and dashes to
+# typographically correct entities.
+#html_use_smartypants = True
+
+# Custom sidebar templates, maps document names to template names.
+#html_sidebars = {}
+
+# Additional templates that should be rendered to pages, maps page names to
+# template names.
+#html_additional_pages = {}
+
+# If false, no module index is generated.
+#html_domain_indices = True
+
+# If false, no index is generated.
+#html_use_index = True
+
+# If true, the index is split into individual pages for each letter.
+#html_split_index = False
+
+# If true, links to the reST sources are added to the pages.
+#html_show_sourcelink = True
+
+# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
+#html_show_sphinx = True
+
+# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
+#html_show_copyright = True
+
+# If true, an OpenSearch description file will be output, and all pages will
+# contain a <link> tag referring to it.  The value of this option must be the
+# base URL from which the finished HTML is served.
+#html_use_opensearch = ''
+
+# This is the file name suffix for HTML files (e.g. ".xhtml").
+#html_file_suffix = None
+
+# Output file base name for HTML help builder.
+htmlhelp_basename = 'GinsFSMdoc'
+
+
+# -- Options for LaTeX output --------------------------------------------------
+
+latex_elements = {
+# The paper size ('letterpaper' or 'a4paper').
+#'papersize': 'letterpaper',
+
+# The font size ('10pt', '11pt' or '12pt').
+#'pointsize': '10pt',
+
+# Additional stuff for the LaTeX preamble.
+#'preamble': '',
+}
+
+# Grouping the document tree into LaTeX files. List of tuples
+# (source start file, target name, title, author, documentclass [howto/manual]).
+latex_documents = [
+  ('index', 'GinsFSM.tex', u'GinsFSM Documentation',
+   u'GMS', 'manual'),
+]
+
+# The name of an image file (relative to this directory) to place at the top of
+# the title page.
+#latex_logo = None
+
+# For "manual" documents, if this is true, then toplevel headings are parts,
+# not chapters.
+#latex_use_parts = False
+
+# If true, show page references after internal links.
+#latex_show_pagerefs = False
+
+# If true, show URL addresses after external links.
+#latex_show_urls = False
+
+# Documents to append as an appendix to all manuals.
+#latex_appendices = []
+
+# If false, no module index is generated.
+#latex_domain_indices = True
+
+
+# -- Options for manual page output --------------------------------------------
+
+# One entry per manual page. List of tuples
+# (source start file, name, description, authors, manual section).
+man_pages = [
+    ('index', 'ginsfsm', u'GinsFSM Documentation',
+     [u'GMS'], 1)
+]
+
+# If true, show URL addresses after external links.
+#man_show_urls = False
+
+
+# -- Options for Texinfo output ------------------------------------------------
+
+# Grouping the document tree into Texinfo files. List of tuples
+# (source start file, target name, title, author,
+#  dir menu entry, description, category)
+texinfo_documents = [
+  ('index', 'GinsFSM', u'GinsFSM Documentation', u'GMS',
+   'GinsFSM', 'One line description of project.', 'Miscellaneous'),
+]
+
+# Documents to append as an appendix to all manuals.
+#texinfo_appendices = []
+
+# If false, no module index is generated.
+#texinfo_domain_indices = True
+
+# How to display URL addresses: 'footnote', 'no', or 'inline'.
+#texinfo_show_urls = 'footnote'

docs/examples.rst

+Examples
+========
+
+Several examples.
+
+.. toctree::
+    :maxdepth: 1
+
+    src/examples/ontimer
+    src/examples/ongsock
+    src/examples/ongconnex
+    src/examples/stress_connections
+    src/examples/stress_client_echo
+    src/examples/stress_server_echo
+    src/examples/wsgi_server

docs/ginsfsm-classes.png

Added
New image

docs/glossary.rst

+.. _glossary:
+
+Glossary
+========
+
+.. glossary::
+    :sorted:
+
+    simple-machine
+        The `simple-machine` is the argument to
+        the :class:`ginsfsm.smachine.SMachine` class.
+
+        It's a simple implementation of an Finite State Machines
+        (`FSM <http://en.wikipedia.org/wiki/Finite-state_machine>`_)
+        using a *python dictionary with three keys*.
+
+        This is an example from :mod:`ginsfsm.examples.ontimer`::
+
+            ONTIMER_FSM = {
+                'event_list': ('EV_TIMEOUT',),
+                'state_list': ('ST_STATE',),
+                'machine': {
+                    'ST_STATE':
+                    (
+                        ('EV_TIMEOUT', ac_task, 'ST_STATE'),
+                    ),
+                }
+            }
+
+        See :mod:`ginsfsm.smachine` for more details.
+
+    gconfig-template
+        The `gconfig-template` is the argument to
+        the :class:`ginsfsm.gconfig.GConfig` class.
+
+        It's a *python dictionary*.
+
+        The key is the *parameter name*, and the value is a list describing
+        the parameter:
+
+            ``[type, default value, and description]``
+
+        This is an example from :mod:`ginsfsm.examples.ontimer`::
+
+            ONTIMER_GCONFIG = {  # type, default_value, flag, validate_function, desc
+                'seconds': [int, 2, 0, None, "Seconds to repeat the command."],
+                'verbose': [int, 0, 0, None, "Increase output verbosity."],
+                'command': [str, 'ls', 0, None, "Command to execute."],
+            }
+
+        See :mod:`ginsfsm.gconfig` for more details.
+
+    gobj
+        An instance of :class:`ginsfsm.gobj.GObj` class or derived.
+
+    gaplic
+        An instance of :class:`ginsfsm.gaplic.GAplic` class or derived.
+
+        It's the root, the grandfather,
+
+        the container of all :term:`gobj`'s' running in the same thread or
+        subprocess.
+
+    event
+        It's a :term:`event-name` or any object with a ``event_name`` attribute
+        that feeds a :term:`simple-machine`.
+
+        This is how :term:`gobj` communicate with each other: using *events*.
+
+    event-name
+        String defining the name of an event.
+
+
+    create_gobj
+        Factory function to create :term:`gobj`'s.
+        See :meth:`ginsfsm.gaplic.GAplic.create_gobj`.
+
+    principal
+        Any :term:`gobj` created without parent.
+
+    unnamed-gobj
+        Unnamed :term:`gobj`.
+
+    named-gobj
+        Named :term:`gobj`.
+
+    start_up
+        The pseudo **"__init__"** method of the `GObj` class.
+        Method of :class:`ginsfsm.gobj.GObj` class to be overried.
+
+    machine
+        Value of ``machine`` key of :term:`simple-machine` that is another
+        dictionary describing the machine :mod:`ginsfsm.smachine`.
+
+
+    input-event
+        Events that a :term:`gobj` receive from other :term:`gobj`'s,
+        or send to itself.
+
+    output-event
+        Events that are sent to another :term:`gobj`'s.
+
+    event-filter
+        Function for filtering events being broadcasting.
+
+    event-list
+        List or tuple of all :term:`input-event`'s event names used in
+        the :term:`machine`.
+
+    state-list
+        List of state names of the :term:`machine`. No matter the order,
+        but it is important the first state, because it is the default state
+        when the machine starts.
+
+    action