| @@ -0,0 +1,177 @@ | |||
| # Makefile for Sphinx documentation | |||
| # | |||
| # You can set these variables from the command line. | |||
| SPHINXOPTS = | |||
| SPHINXBUILD = sphinx-build | |||
| PAPER = | |||
| BUILDDIR = _build | |||
| # User-friendly check for sphinx-build | |||
| ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1) | |||
| $(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/) | |||
| endif | |||
| # 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 " latexpdfja to make LaTeX files and run them through platex/dvipdfmx" | |||
| @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 " xml to make Docutils-native XML files" | |||
| @echo " pseudoxml to make pseudoxml-XML files for display purposes" | |||
| @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 | |||
| @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/pyad2usb.qhcp" | |||
| @echo "To view the help file:" | |||
| @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/pyad2usb.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/pyad2usb" | |||
| @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/pyad2usb" | |||
| @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." | |||
| latexpdfja: | |||
| $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex | |||
| @echo "Running LaTeX files through platex and dvipdfmx..." | |||
| $(MAKE) -C $(BUILDDIR)/latex all-pdf-ja | |||
| @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." | |||
| xml: | |||
| $(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml | |||
| @echo | |||
| @echo "Build finished. The XML files are in $(BUILDDIR)/xml." | |||
| pseudoxml: | |||
| $(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml | |||
| @echo | |||
| @echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml." | |||
| @@ -0,0 +1,4 @@ | |||
| # Sphinx build info version 1 | |||
| # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. | |||
| config: 0c889eb1b3df3f34fd7989e7aaada34f | |||
| tags: a205e9ed8462ae86fdd2f73488852ba9 | |||
| @@ -0,0 +1,93 @@ | |||
| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" | |||
| "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> | |||
| <html xmlns="http://www.w3.org/1999/xhtml"> | |||
| <head> | |||
| <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> | |||
| <title>Overview: module code — pyad2usb documentation</title> | |||
| <link rel="stylesheet" href="../_static/default.css" type="text/css" /> | |||
| <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> | |||
| <script type="text/javascript"> | |||
| var DOCUMENTATION_OPTIONS = { | |||
| URL_ROOT: '../', | |||
| VERSION: '', | |||
| COLLAPSE_INDEX: false, | |||
| FILE_SUFFIX: '.html', | |||
| HAS_SOURCE: true | |||
| }; | |||
| </script> | |||
| <script type="text/javascript" src="../_static/jquery.js"></script> | |||
| <script type="text/javascript" src="../_static/underscore.js"></script> | |||
| <script type="text/javascript" src="../_static/doctools.js"></script> | |||
| <link rel="top" title="pyad2usb documentation" href="../index.html" /> | |||
| </head> | |||
| <body> | |||
| <div class="related"> | |||
| <h3>Navigation</h3> | |||
| <ul> | |||
| <li class="right" style="margin-right: 10px"> | |||
| <a href="../genindex.html" title="General Index" | |||
| accesskey="I">index</a></li> | |||
| <li class="right" > | |||
| <a href="../py-modindex.html" title="Python Module Index" | |||
| >modules</a> |</li> | |||
| <li><a href="../index.html">pyad2usb documentation</a> »</li> | |||
| </ul> | |||
| </div> | |||
| <div class="document"> | |||
| <div class="documentwrapper"> | |||
| <div class="bodywrapper"> | |||
| <div class="body"> | |||
| <h1>All modules for which code is available</h1> | |||
| <ul><li><a href="pyad2usb/ad2usb.html">pyad2usb.ad2usb</a></li> | |||
| <li><a href="pyad2usb/devices.html">pyad2usb.devices</a></li> | |||
| <li><a href="pyad2usb/event/event.html">pyad2usb.event.event</a></li> | |||
| <li><a href="pyad2usb/util.html">pyad2usb.util</a></li> | |||
| </ul> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| <div class="sphinxsidebar"> | |||
| <div class="sphinxsidebarwrapper"> | |||
| <div id="searchbox" style="display: none"> | |||
| <h3>Quick search</h3> | |||
| <form class="search" action="../search.html" method="get"> | |||
| <input type="text" name="q" /> | |||
| <input type="submit" value="Go" /> | |||
| <input type="hidden" name="check_keywords" value="yes" /> | |||
| <input type="hidden" name="area" value="default" /> | |||
| </form> | |||
| <p class="searchtip" style="font-size: 90%"> | |||
| Enter search terms or a module, class or function name. | |||
| </p> | |||
| </div> | |||
| <script type="text/javascript">$('#searchbox').show(0);</script> | |||
| </div> | |||
| </div> | |||
| <div class="clearer"></div> | |||
| </div> | |||
| <div class="related"> | |||
| <h3>Navigation</h3> | |||
| <ul> | |||
| <li class="right" style="margin-right: 10px"> | |||
| <a href="../genindex.html" title="General Index" | |||
| >index</a></li> | |||
| <li class="right" > | |||
| <a href="../py-modindex.html" title="Python Module Index" | |||
| >modules</a> |</li> | |||
| <li><a href="../index.html">pyad2usb documentation</a> »</li> | |||
| </ul> | |||
| </div> | |||
| <div class="footer"> | |||
| © Copyright 2013, Author. | |||
| Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2b1. | |||
| </div> | |||
| </body> | |||
| </html> | |||
| @@ -0,0 +1,588 @@ | |||
| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" | |||
| "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> | |||
| <html xmlns="http://www.w3.org/1999/xhtml"> | |||
| <head> | |||
| <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> | |||
| <title>pyad2usb.ad2usb — pyad2usb documentation</title> | |||
| <link rel="stylesheet" href="../../_static/default.css" type="text/css" /> | |||
| <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> | |||
| <script type="text/javascript"> | |||
| var DOCUMENTATION_OPTIONS = { | |||
| URL_ROOT: '../../', | |||
| VERSION: '', | |||
| COLLAPSE_INDEX: false, | |||
| FILE_SUFFIX: '.html', | |||
| HAS_SOURCE: true | |||
| }; | |||
| </script> | |||
| <script type="text/javascript" src="../../_static/jquery.js"></script> | |||
| <script type="text/javascript" src="../../_static/underscore.js"></script> | |||
| <script type="text/javascript" src="../../_static/doctools.js"></script> | |||
| <link rel="top" title="pyad2usb documentation" href="../../index.html" /> | |||
| <link rel="up" title="Module code" href="../index.html" /> | |||
| </head> | |||
| <body> | |||
| <div class="related"> | |||
| <h3>Navigation</h3> | |||
| <ul> | |||
| <li class="right" style="margin-right: 10px"> | |||
| <a href="../../genindex.html" title="General Index" | |||
| accesskey="I">index</a></li> | |||
| <li class="right" > | |||
| <a href="../../py-modindex.html" title="Python Module Index" | |||
| >modules</a> |</li> | |||
| <li><a href="../../index.html">pyad2usb documentation</a> »</li> | |||
| <li><a href="../index.html" accesskey="U">Module code</a> »</li> | |||
| </ul> | |||
| </div> | |||
| <div class="document"> | |||
| <div class="documentwrapper"> | |||
| <div class="bodywrapper"> | |||
| <div class="body"> | |||
| <h1>Source code for pyad2usb.ad2usb</h1><div class="highlight"><pre> | |||
| <span class="sd">"""</span> | |||
| <span class="sd">Provides the full AD2USB class and factory.</span> | |||
| <span class="sd">"""</span> | |||
| <span class="kn">import</span> <span class="nn">time</span> | |||
| <span class="kn">import</span> <span class="nn">threading</span> | |||
| <span class="kn">import</span> <span class="nn">re</span> | |||
| <span class="kn">from</span> <span class="nn">.event</span> <span class="kn">import</span> <span class="n">event</span> | |||
| <span class="kn">from</span> <span class="nn">.</span> <span class="kn">import</span> <span class="n">devices</span> | |||
| <span class="kn">from</span> <span class="nn">.</span> <span class="kn">import</span> <span class="n">util</span> | |||
| <div class="viewcode-block" id="Overseer"><a class="viewcode-back" href="../../pyad2usb.html#pyad2usb.ad2usb.Overseer">[docs]</a><span class="k">class</span> <span class="nc">Overseer</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> Factory for creation of AD2USB devices as well as provide4s attach/detach events."</span> | |||
| <span class="sd"> """</span> | |||
| <span class="c"># Factory events</span> | |||
| <span class="n">on_attached</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">Event</span><span class="p">(</span><span class="s">'Called when an AD2USB device has been detected.'</span><span class="p">)</span> | |||
| <span class="n">on_detached</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">Event</span><span class="p">(</span><span class="s">'Called when an AD2USB device has been removed.'</span><span class="p">)</span> | |||
| <span class="n">__devices</span> <span class="o">=</span> <span class="p">[]</span> | |||
| <span class="nd">@classmethod</span> | |||
| <div class="viewcode-block" id="Overseer.find_all"><a class="viewcode-back" href="../../pyad2usb.html#pyad2usb.ad2usb.Overseer.find_all">[docs]</a> <span class="k">def</span> <span class="nf">find_all</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> Returns all AD2USB devices located on the system.</span> | |||
| <span class="sd"> """</span> | |||
| <span class="n">cls</span><span class="o">.</span><span class="n">__devices</span> <span class="o">=</span> <span class="n">devices</span><span class="o">.</span><span class="n">USBDevice</span><span class="o">.</span><span class="n">find_all</span><span class="p">()</span> | |||
| <span class="k">return</span> <span class="n">cls</span><span class="o">.</span><span class="n">__devices</span> | |||
| </div> | |||
| <span class="nd">@classmethod</span> | |||
| <div class="viewcode-block" id="Overseer.devices"><a class="viewcode-back" href="../../pyad2usb.html#pyad2usb.ad2usb.Overseer.devices">[docs]</a> <span class="k">def</span> <span class="nf">devices</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> Returns a cached list of AD2USB devices located on the system.</span> | |||
| <span class="sd"> """</span> | |||
| <span class="k">return</span> <span class="n">cls</span><span class="o">.</span><span class="n">__devices</span> | |||
| </div> | |||
| <span class="nd">@classmethod</span> | |||
| <div class="viewcode-block" id="Overseer.create"><a class="viewcode-back" href="../../pyad2usb.html#pyad2usb.ad2usb.Overseer.create">[docs]</a> <span class="k">def</span> <span class="nf">create</span><span class="p">(</span><span class="n">cls</span><span class="p">,</span> <span class="n">device</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> Factory method that returns the requested AD2USB device, or the first device.</span> | |||
| <span class="sd"> """</span> | |||
| <span class="n">cls</span><span class="o">.</span><span class="n">find_all</span><span class="p">()</span> | |||
| <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">cls</span><span class="o">.</span><span class="n">__devices</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> | |||
| <span class="k">raise</span> <span class="n">util</span><span class="o">.</span><span class="n">NoDeviceError</span><span class="p">(</span><span class="s">'No AD2USB devices present.'</span><span class="p">)</span> | |||
| <span class="k">if</span> <span class="n">device</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span> | |||
| <span class="n">device</span> <span class="o">=</span> <span class="n">cls</span><span class="o">.</span><span class="n">__devices</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> | |||
| <span class="n">vendor</span><span class="p">,</span> <span class="n">product</span><span class="p">,</span> <span class="n">sernum</span><span class="p">,</span> <span class="n">ifcount</span><span class="p">,</span> <span class="n">description</span> <span class="o">=</span> <span class="n">device</span> | |||
| <span class="n">device</span> <span class="o">=</span> <span class="n">devices</span><span class="o">.</span><span class="n">USBDevice</span><span class="p">(</span><span class="n">serial</span><span class="o">=</span><span class="n">sernum</span><span class="p">,</span> <span class="n">description</span><span class="o">=</span><span class="n">description</span><span class="p">)</span> | |||
| <span class="k">return</span> <span class="n">AD2USB</span><span class="p">(</span><span class="n">device</span><span class="p">)</span> | |||
| </div> | |||
| <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">attached_event</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">detached_event</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> Constructor</span> | |||
| <span class="sd"> """</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_detect_thread</span> <span class="o">=</span> <span class="n">Overseer</span><span class="o">.</span><span class="n">DetectThread</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> | |||
| <span class="k">if</span> <span class="n">attached_event</span><span class="p">:</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">on_attached</span> <span class="o">+=</span> <span class="n">attached_event</span> | |||
| <span class="k">if</span> <span class="n">detached_event</span><span class="p">:</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">on_detached</span> <span class="o">+=</span> <span class="n">detached_event</span> | |||
| <span class="n">Overseer</span><span class="o">.</span><span class="n">find_all</span><span class="p">()</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">start</span><span class="p">()</span> | |||
| <div class="viewcode-block" id="Overseer.close"><a class="viewcode-back" href="../../pyad2usb.html#pyad2usb.ad2usb.Overseer.close">[docs]</a> <span class="k">def</span> <span class="nf">close</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> Clean up and shut down.</span> | |||
| <span class="sd"> """</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">stop</span><span class="p">()</span> | |||
| </div> | |||
| <div class="viewcode-block" id="Overseer.start"><a class="viewcode-back" href="../../pyad2usb.html#pyad2usb.ad2usb.Overseer.start">[docs]</a> <span class="k">def</span> <span class="nf">start</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> Starts the detection thread, if not already running.</span> | |||
| <span class="sd"> """</span> | |||
| <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_detect_thread</span><span class="o">.</span><span class="n">is_alive</span><span class="p">():</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_detect_thread</span><span class="o">.</span><span class="n">start</span><span class="p">()</span> | |||
| </div> | |||
| <div class="viewcode-block" id="Overseer.stop"><a class="viewcode-back" href="../../pyad2usb.html#pyad2usb.ad2usb.Overseer.stop">[docs]</a> <span class="k">def</span> <span class="nf">stop</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> Stops the detection thread.</span> | |||
| <span class="sd"> """</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_detect_thread</span><span class="o">.</span><span class="n">stop</span><span class="p">()</span> | |||
| </div> | |||
| <div class="viewcode-block" id="Overseer.get_device"><a class="viewcode-back" href="../../pyad2usb.html#pyad2usb.ad2usb.Overseer.get_device">[docs]</a> <span class="k">def</span> <span class="nf">get_device</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">device</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> Factory method that returns the requested AD2USB device, or the first device.</span> | |||
| <span class="sd"> """</span> | |||
| <span class="k">return</span> <span class="n">Overseer</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="n">device</span><span class="p">)</span> | |||
| </div> | |||
| <div class="viewcode-block" id="Overseer.DetectThread"><a class="viewcode-back" href="../../pyad2usb.html#pyad2usb.ad2usb.Overseer.DetectThread">[docs]</a> <span class="k">class</span> <span class="nc">DetectThread</span><span class="p">(</span><span class="n">threading</span><span class="o">.</span><span class="n">Thread</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> Thread that handles detection of added/removed devices.</span> | |||
| <span class="sd"> """</span> | |||
| <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">overseer</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> Constructor</span> | |||
| <span class="sd"> """</span> | |||
| <span class="n">threading</span><span class="o">.</span><span class="n">Thread</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_overseer</span> <span class="o">=</span> <span class="n">overseer</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_running</span> <span class="o">=</span> <span class="bp">False</span> | |||
| <div class="viewcode-block" id="Overseer.DetectThread.stop"><a class="viewcode-back" href="../../pyad2usb.html#pyad2usb.ad2usb.Overseer.DetectThread.stop">[docs]</a> <span class="k">def</span> <span class="nf">stop</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> Stops the thread.</span> | |||
| <span class="sd"> """</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_running</span> <span class="o">=</span> <span class="bp">False</span> | |||
| </div> | |||
| <div class="viewcode-block" id="Overseer.DetectThread.run"><a class="viewcode-back" href="../../pyad2usb.html#pyad2usb.ad2usb.Overseer.DetectThread.run">[docs]</a> <span class="k">def</span> <span class="nf">run</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> The actual detection process.</span> | |||
| <span class="sd"> """</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_running</span> <span class="o">=</span> <span class="bp">True</span> | |||
| <span class="n">last_devices</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span> | |||
| <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_running</span><span class="p">:</span> | |||
| <span class="k">try</span><span class="p">:</span> | |||
| <span class="n">Overseer</span><span class="o">.</span><span class="n">find_all</span><span class="p">()</span> | |||
| <span class="n">current_devices</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">Overseer</span><span class="o">.</span><span class="n">devices</span><span class="p">())</span> | |||
| <span class="n">new_devices</span> <span class="o">=</span> <span class="p">[</span><span class="n">d</span> <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">current_devices</span> <span class="k">if</span> <span class="n">d</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">last_devices</span><span class="p">]</span> | |||
| <span class="n">removed_devices</span> <span class="o">=</span> <span class="p">[</span><span class="n">d</span> <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">last_devices</span> <span class="k">if</span> <span class="n">d</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">current_devices</span><span class="p">]</span> | |||
| <span class="n">last_devices</span> <span class="o">=</span> <span class="n">current_devices</span> | |||
| <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">new_devices</span><span class="p">:</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_overseer</span><span class="o">.</span><span class="n">on_attached</span><span class="p">(</span><span class="n">d</span><span class="p">)</span> | |||
| <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">removed_devices</span><span class="p">:</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_overseer</span><span class="o">.</span><span class="n">on_detached</span><span class="p">(</span><span class="n">d</span><span class="p">)</span> | |||
| <span class="k">except</span> <span class="n">util</span><span class="o">.</span><span class="n">CommError</span><span class="p">,</span> <span class="n">err</span><span class="p">:</span> | |||
| <span class="k">pass</span> | |||
| <span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mf">0.25</span><span class="p">)</span> | |||
| </div></div></div> | |||
| <div class="viewcode-block" id="AD2USB"><a class="viewcode-back" href="../../pyad2usb.html#pyad2usb.ad2usb.AD2USB">[docs]</a><span class="k">class</span> <span class="nc">AD2USB</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> High-level wrapper around AD2USB/AD2SERIAL devices.</span> | |||
| <span class="sd"> """</span> | |||
| <span class="c"># High-level Events</span> | |||
| <span class="n">on_status_changed</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">Event</span><span class="p">(</span><span class="s">'Called when the panel status changes.'</span><span class="p">)</span> | |||
| <span class="n">on_power_changed</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">Event</span><span class="p">(</span><span class="s">'Called when panel power switches between AC and DC.'</span><span class="p">)</span> | |||
| <span class="n">on_alarm</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">Event</span><span class="p">(</span><span class="s">'Called when the alarm is triggered.'</span><span class="p">)</span> | |||
| <span class="n">on_bypass</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">Event</span><span class="p">(</span><span class="s">'Called when a zone is bypassed.'</span><span class="p">)</span> | |||
| <span class="n">on_boot</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">Event</span><span class="p">(</span><span class="s">'Called when the device finishes bootings.'</span><span class="p">)</span> | |||
| <span class="n">on_config_received</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">Event</span><span class="p">(</span><span class="s">'Called when the device receives its configuration.'</span><span class="p">)</span> | |||
| <span class="c"># Mid-level Events</span> | |||
| <span class="n">on_message</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">Event</span><span class="p">(</span><span class="s">'Called when a message has been received from the device.'</span><span class="p">)</span> | |||
| <span class="c"># Low-level Events</span> | |||
| <span class="n">on_open</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">Event</span><span class="p">(</span><span class="s">'Called when the device has been opened.'</span><span class="p">)</span> | |||
| <span class="n">on_close</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">Event</span><span class="p">(</span><span class="s">'Called when the device has been closed.'</span><span class="p">)</span> | |||
| <span class="n">on_read</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">Event</span><span class="p">(</span><span class="s">'Called when a line has been read from the device.'</span><span class="p">)</span> | |||
| <span class="n">on_write</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">Event</span><span class="p">(</span><span class="s">'Called when data has been written to the device.'</span><span class="p">)</span> | |||
| <span class="c"># Constants</span> | |||
| <span class="n">F1</span> <span class="o">=</span> <span class="nb">unichr</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="o">+</span> <span class="nb">unichr</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="o">+</span> <span class="nb">unichr</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> | |||
| <span class="n">F2</span> <span class="o">=</span> <span class="nb">unichr</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span> <span class="o">+</span> <span class="nb">unichr</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span> <span class="o">+</span> <span class="nb">unichr</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span> | |||
| <span class="n">F3</span> <span class="o">=</span> <span class="nb">unichr</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span> <span class="o">+</span> <span class="nb">unichr</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span> <span class="o">+</span> <span class="nb">unichr</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span> | |||
| <span class="n">F4</span> <span class="o">=</span> <span class="nb">unichr</span><span class="p">(</span><span class="mi">4</span><span class="p">)</span> <span class="o">+</span> <span class="nb">unichr</span><span class="p">(</span><span class="mi">4</span><span class="p">)</span> <span class="o">+</span> <span class="nb">unichr</span><span class="p">(</span><span class="mi">4</span><span class="p">)</span> | |||
| <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">device</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> Constructor</span> | |||
| <span class="sd"> """</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_device</span> <span class="o">=</span> <span class="n">device</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_power_status</span> <span class="o">=</span> <span class="bp">None</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_alarm_status</span> <span class="o">=</span> <span class="bp">None</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_bypass_status</span> <span class="o">=</span> <span class="bp">None</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_settings</span> <span class="o">=</span> <span class="p">{}</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_address_mask</span> <span class="o">=</span> <span class="mh">0xFF80</span> <span class="c"># TEMP</span> | |||
| <div class="viewcode-block" id="AD2USB.open"><a class="viewcode-back" href="../../pyad2usb.html#pyad2usb.ad2usb.AD2USB.open">[docs]</a> <span class="k">def</span> <span class="nf">open</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">baudrate</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">interface</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">no_reader_thread</span><span class="o">=</span><span class="bp">False</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> Opens the device.</span> | |||
| <span class="sd"> """</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_wire_events</span><span class="p">()</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_device</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="n">baudrate</span><span class="o">=</span><span class="n">baudrate</span><span class="p">,</span> <span class="n">interface</span><span class="o">=</span><span class="n">interface</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="n">index</span><span class="p">,</span> <span class="n">no_reader_thread</span><span class="o">=</span><span class="n">no_reader_thread</span><span class="p">)</span> | |||
| </div> | |||
| <div class="viewcode-block" id="AD2USB.close"><a class="viewcode-back" href="../../pyad2usb.html#pyad2usb.ad2usb.AD2USB.close">[docs]</a> <span class="k">def</span> <span class="nf">close</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> Closes the device.</span> | |||
| <span class="sd"> """</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_device</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_device</span> <span class="o">=</span> <span class="bp">None</span> | |||
| </div> | |||
| <div class="viewcode-block" id="AD2USB.get_config"><a class="viewcode-back" href="../../pyad2usb.html#pyad2usb.ad2usb.AD2USB.get_config">[docs]</a> <span class="k">def</span> <span class="nf">get_config</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> Retrieves the configuration from the device.</span> | |||
| <span class="sd"> """</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_device</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s">"C</span><span class="se">\r</span><span class="s">"</span><span class="p">)</span> | |||
| </div> | |||
| <div class="viewcode-block" id="AD2USB.set_config"><a class="viewcode-back" href="../../pyad2usb.html#pyad2usb.ad2usb.AD2USB.set_config">[docs]</a> <span class="k">def</span> <span class="nf">set_config</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">settings</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> Sets configuration entries on the device.</span> | |||
| <span class="sd"> """</span> | |||
| <span class="k">pass</span> | |||
| </div> | |||
| <div class="viewcode-block" id="AD2USB.reboot"><a class="viewcode-back" href="../../pyad2usb.html#pyad2usb.ad2usb.AD2USB.reboot">[docs]</a> <span class="k">def</span> <span class="nf">reboot</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> Reboots the device.</span> | |||
| <span class="sd"> """</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_device</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s">'='</span><span class="p">)</span> | |||
| </div> | |||
| <span class="nd">@property</span> | |||
| <div class="viewcode-block" id="AD2USB.id"><a class="viewcode-back" href="../../pyad2usb.html#pyad2usb.ad2usb.AD2USB.id">[docs]</a> <span class="k">def</span> <span class="nf">id</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> | |||
| <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_device</span><span class="o">.</span><span class="n">id</span> | |||
| </div> | |||
| <span class="k">def</span> <span class="nf">_wire_events</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> Wires up the internal device events.</span> | |||
| <span class="sd"> """</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_device</span><span class="o">.</span><span class="n">on_open</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_on_open</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_device</span><span class="o">.</span><span class="n">on_close</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_on_close</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_device</span><span class="o">.</span><span class="n">on_read</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_on_read</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_device</span><span class="o">.</span><span class="n">on_write</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_on_write</span> | |||
| <span class="k">def</span> <span class="nf">_handle_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> Parses messages from the panel.</span> | |||
| <span class="sd"> """</span> | |||
| <span class="k">if</span> <span class="n">data</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span> | |||
| <span class="k">return</span> <span class="bp">None</span> | |||
| <span class="n">msg</span> <span class="o">=</span> <span class="bp">None</span> | |||
| <span class="k">if</span> <span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">!=</span> <span class="s">'!'</span><span class="p">:</span> | |||
| <span class="n">msg</span> <span class="o">=</span> <span class="n">Message</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> | |||
| <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_address_mask</span> <span class="o">&</span> <span class="n">msg</span><span class="o">.</span><span class="n">mask</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_update_internal_states</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span> | |||
| <span class="k">else</span><span class="p">:</span> <span class="c"># specialty messages</span> | |||
| <span class="n">header</span> <span class="o">=</span> <span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="mi">4</span><span class="p">]</span> | |||
| <span class="k">if</span> <span class="n">header</span> <span class="o">==</span> <span class="s">'!EXP'</span> <span class="ow">or</span> <span class="n">header</span> <span class="o">==</span> <span class="s">'!REL'</span><span class="p">:</span> | |||
| <span class="n">msg</span> <span class="o">=</span> <span class="n">ExpanderMessage</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> | |||
| <span class="k">elif</span> <span class="n">header</span> <span class="o">==</span> <span class="s">'!RFX'</span><span class="p">:</span> | |||
| <span class="n">msg</span> <span class="o">=</span> <span class="n">RFMessage</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> | |||
| <span class="k">elif</span> <span class="n">header</span> <span class="o">==</span> <span class="s">'!LRR'</span><span class="p">:</span> | |||
| <span class="n">msg</span> <span class="o">=</span> <span class="n">LRRMessage</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> | |||
| <span class="k">elif</span> <span class="n">data</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">'!Ready'</span><span class="p">):</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">on_boot</span><span class="p">()</span> | |||
| <span class="k">elif</span> <span class="n">data</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s">'!CONFIG'</span><span class="p">):</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_handle_config</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> | |||
| <span class="k">return</span> <span class="n">msg</span> | |||
| <span class="k">def</span> <span class="nf">_handle_config</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span> | |||
| <span class="n">_</span><span class="p">,</span> <span class="n">config_string</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">'>'</span><span class="p">)</span> | |||
| <span class="k">for</span> <span class="n">setting</span> <span class="ow">in</span> <span class="n">config_string</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">'&'</span><span class="p">):</span> | |||
| <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="o">=</span> <span class="n">setting</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">'='</span><span class="p">)</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_settings</span><span class="p">[</span><span class="n">k</span><span class="p">]</span> <span class="o">=</span> <span class="n">v</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">on_config_received</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_settings</span><span class="p">)</span> | |||
| <span class="k">def</span> <span class="nf">_update_internal_states</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">):</span> | |||
| <span class="k">if</span> <span class="n">message</span><span class="o">.</span><span class="n">ac_power</span> <span class="o">!=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_power_status</span><span class="p">:</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_power_status</span><span class="p">,</span> <span class="n">old_status</span> <span class="o">=</span> <span class="n">message</span><span class="o">.</span><span class="n">ac_power</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_power_status</span> | |||
| <span class="k">if</span> <span class="n">old_status</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">on_power_changed</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_power_status</span><span class="p">)</span> | |||
| <span class="k">if</span> <span class="n">message</span><span class="o">.</span><span class="n">alarm_sounding</span> <span class="o">!=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_alarm_status</span><span class="p">:</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_alarm_status</span><span class="p">,</span> <span class="n">old_status</span> <span class="o">=</span> <span class="n">message</span><span class="o">.</span><span class="n">alarm_sounding</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_alarm_status</span> | |||
| <span class="k">if</span> <span class="n">old_status</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">on_alarm</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_alarm_status</span><span class="p">)</span> | |||
| <span class="k">if</span> <span class="n">message</span><span class="o">.</span><span class="n">zone_bypassed</span> <span class="o">!=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_bypass_status</span><span class="p">:</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_bypass_status</span><span class="p">,</span> <span class="n">old_status</span> <span class="o">=</span> <span class="n">message</span><span class="o">.</span><span class="n">zone_bypassed</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_bypass_status</span> | |||
| <span class="k">if</span> <span class="n">old_status</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">on_bypass</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_bypass_status</span><span class="p">)</span> | |||
| <span class="k">def</span> <span class="nf">_on_open</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sender</span><span class="p">,</span> <span class="n">args</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> Internal handler for opening the device.</span> | |||
| <span class="sd"> """</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">on_open</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> | |||
| <span class="k">def</span> <span class="nf">_on_close</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sender</span><span class="p">,</span> <span class="n">args</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> Internal handler for closing the device.</span> | |||
| <span class="sd"> """</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">on_close</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> | |||
| <span class="k">def</span> <span class="nf">_on_read</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sender</span><span class="p">,</span> <span class="n">args</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> Internal handler for reading from the device.</span> | |||
| <span class="sd"> """</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">on_read</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> | |||
| <span class="n">msg</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_handle_message</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> | |||
| <span class="k">if</span> <span class="n">msg</span><span class="p">:</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">on_message</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span> | |||
| <span class="k">def</span> <span class="nf">_on_write</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sender</span><span class="p">,</span> <span class="n">args</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> Internal handler for writing to the device.</span> | |||
| <span class="sd"> """</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">on_write</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> | |||
| </div> | |||
| <div class="viewcode-block" id="Message"><a class="viewcode-back" href="../../pyad2usb.html#pyad2usb.ad2usb.Message">[docs]</a><span class="k">class</span> <span class="nc">Message</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> Represents a message from the alarm panel.</span> | |||
| <span class="sd"> """</span> | |||
| <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> Constructor</span> | |||
| <span class="sd"> """</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">ready</span> <span class="o">=</span> <span class="bp">False</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">armed_away</span> <span class="o">=</span> <span class="bp">False</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">armed_home</span> <span class="o">=</span> <span class="bp">False</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">backlight_on</span> <span class="o">=</span> <span class="bp">False</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">programming_mode</span> <span class="o">=</span> <span class="bp">False</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">beeps</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">zone_bypassed</span> <span class="o">=</span> <span class="bp">False</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">ac_power</span> <span class="o">=</span> <span class="bp">False</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">chime_on</span> <span class="o">=</span> <span class="bp">False</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">alarm_event_occurred</span> <span class="o">=</span> <span class="bp">False</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">alarm_sounding</span> <span class="o">=</span> <span class="bp">False</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">numeric_code</span> <span class="o">=</span> <span class="s">""</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">text</span> <span class="o">=</span> <span class="s">""</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">cursor_location</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">data</span> <span class="o">=</span> <span class="s">""</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">mask</span> <span class="o">=</span> <span class="s">""</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">bitfield</span> <span class="o">=</span> <span class="s">""</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">panel_data</span> <span class="o">=</span> <span class="s">""</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_regex</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="s">'("(?:[^"]|"")*"|[^,]*),("(?:[^"]|"")*"|[^,]*),("(?:[^"]|"")*"|[^,]*),("(?:[^"]|"")*"|[^,]*)'</span><span class="p">)</span> | |||
| <span class="k">if</span> <span class="n">data</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_parse_message</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> | |||
| <span class="k">def</span> <span class="nf">_parse_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> Parse the message from the device.</span> | |||
| <span class="sd"> """</span> | |||
| <span class="n">m</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_regex</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> | |||
| <span class="k">if</span> <span class="n">m</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span> | |||
| <span class="k">raise</span> <span class="n">util</span><span class="o">.</span><span class="n">InvalidMessageError</span><span class="p">(</span><span class="s">'Received invalid message: {0}'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">data</span><span class="p">))</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">bitfield</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">numeric_code</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">panel_data</span><span class="p">,</span> <span class="n">alpha</span> <span class="o">=</span> <span class="n">m</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">)</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">mask</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">panel_data</span><span class="p">[</span><span class="mi">3</span><span class="p">:</span><span class="mi">3</span><span class="o">+</span><span class="mi">8</span><span class="p">],</span> <span class="mi">16</span><span class="p">)</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">data</span> <span class="o">=</span> <span class="n">data</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">ready</span> <span class="o">=</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">bitfield</span><span class="p">[</span><span class="mi">1</span><span class="p">:</span><span class="mi">2</span><span class="p">]</span> <span class="o">==</span> <span class="s">"0"</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">armed_away</span> <span class="o">=</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">bitfield</span><span class="p">[</span><span class="mi">2</span><span class="p">:</span><span class="mi">3</span><span class="p">]</span> <span class="o">==</span> <span class="s">"0"</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">armed_home</span> <span class="o">=</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">bitfield</span><span class="p">[</span><span class="mi">3</span><span class="p">:</span><span class="mi">4</span><span class="p">]</span> <span class="o">==</span> <span class="s">"0"</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">backlight_on</span> <span class="o">=</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">bitfield</span><span class="p">[</span><span class="mi">4</span><span class="p">:</span><span class="mi">5</span><span class="p">]</span> <span class="o">==</span> <span class="s">"0"</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">programming_mode</span> <span class="o">=</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">bitfield</span><span class="p">[</span><span class="mi">5</span><span class="p">:</span><span class="mi">6</span><span class="p">]</span> <span class="o">==</span> <span class="s">"0"</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">beeps</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">bitfield</span><span class="p">[</span><span class="mi">6</span><span class="p">:</span><span class="mi">7</span><span class="p">],</span> <span class="mi">16</span><span class="p">)</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">zone_bypassed</span> <span class="o">=</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">bitfield</span><span class="p">[</span><span class="mi">7</span><span class="p">:</span><span class="mi">8</span><span class="p">]</span> <span class="o">==</span> <span class="s">"0"</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">ac_power</span> <span class="o">=</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">bitfield</span><span class="p">[</span><span class="mi">8</span><span class="p">:</span><span class="mi">9</span><span class="p">]</span> <span class="o">==</span> <span class="s">"0"</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">chime_on</span> <span class="o">=</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">bitfield</span><span class="p">[</span><span class="mi">9</span><span class="p">:</span><span class="mi">10</span><span class="p">]</span> <span class="o">==</span> <span class="s">"0"</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">alarm_event_occurred</span> <span class="o">=</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">bitfield</span><span class="p">[</span><span class="mi">10</span><span class="p">:</span><span class="mi">11</span><span class="p">]</span> <span class="o">==</span> <span class="s">"0"</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">alarm_sounding</span> <span class="o">=</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">bitfield</span><span class="p">[</span><span class="mi">11</span><span class="p">:</span><span class="mi">12</span><span class="p">]</span> <span class="o">==</span> <span class="s">"0"</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">text</span> <span class="o">=</span> <span class="n">alpha</span><span class="o">.</span><span class="n">strip</span><span class="p">(</span><span class="s">'"'</span><span class="p">)</span> | |||
| <span class="k">if</span> <span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">panel_data</span><span class="p">[</span><span class="mi">19</span><span class="p">:</span><span class="mi">21</span><span class="p">],</span> <span class="mi">16</span><span class="p">)</span> <span class="o">&</span> <span class="mh">0x01</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">cursor_location</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">bitfield</span><span class="p">[</span><span class="mi">21</span><span class="p">:</span><span class="mi">23</span><span class="p">],</span> <span class="mi">16</span><span class="p">)</span> <span class="c"># Alpha character index that the cursor is on.</span> | |||
| <span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> String conversion operator.</span> | |||
| <span class="sd"> """</span> | |||
| <span class="k">return</span> <span class="s">'msg > {0:0<9} [{1}{2}{3}] -- ({4}) {5}'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">hex</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mask</span><span class="p">),</span> <span class="mi">1</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ready</span> <span class="k">else</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">armed_away</span> <span class="k">else</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">armed_home</span> <span class="k">else</span> <span class="mi">0</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">numeric_code</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">text</span><span class="p">)</span> | |||
| </div> | |||
| <div class="viewcode-block" id="ExpanderMessage"><a class="viewcode-back" href="../../pyad2usb.html#pyad2usb.ad2usb.ExpanderMessage">[docs]</a><span class="k">class</span> <span class="nc">ExpanderMessage</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> Represents a message from a zone or relay expansion module.</span> | |||
| <span class="sd"> """</span> | |||
| <span class="n">ZONE</span> <span class="o">=</span> <span class="mi">0</span> | |||
| <span class="n">RELAY</span> <span class="o">=</span> <span class="mi">1</span> | |||
| <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> Constructor</span> | |||
| <span class="sd"> """</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">type</span> <span class="o">=</span> <span class="bp">None</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">address</span> <span class="o">=</span> <span class="bp">None</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">channel</span> <span class="o">=</span> <span class="bp">None</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">value</span> <span class="o">=</span> <span class="bp">None</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">raw</span> <span class="o">=</span> <span class="bp">None</span> | |||
| <span class="k">if</span> <span class="n">data</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_parse_message</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> | |||
| <span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> String conversion operator.</span> | |||
| <span class="sd"> """</span> | |||
| <span class="n">expander_type</span> <span class="o">=</span> <span class="s">'UNKWN'</span> | |||
| <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">type</span> <span class="o">==</span> <span class="n">ExpanderMessage</span><span class="o">.</span><span class="n">ZONE</span><span class="p">:</span> | |||
| <span class="n">expander_type</span> <span class="o">=</span> <span class="s">'ZONE'</span> | |||
| <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">type</span> <span class="o">==</span> <span class="n">ExpanderMessage</span><span class="o">.</span><span class="n">RELAY</span><span class="p">:</span> | |||
| <span class="n">expander_type</span> <span class="o">=</span> <span class="s">'RELAY'</span> | |||
| <span class="k">return</span> <span class="s">'exp > [{0: <5}] {1}/{2} -- {3}'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">expander_type</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">address</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">channel</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">value</span><span class="p">)</span> | |||
| <span class="k">def</span> <span class="nf">_parse_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> Parse the raw message from the device.</span> | |||
| <span class="sd"> """</span> | |||
| <span class="n">header</span><span class="p">,</span> <span class="n">values</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">':'</span><span class="p">)</span> | |||
| <span class="n">address</span><span class="p">,</span> <span class="n">channel</span><span class="p">,</span> <span class="n">value</span> <span class="o">=</span> <span class="n">values</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">','</span><span class="p">)</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">raw</span> <span class="o">=</span> <span class="n">data</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">address</span> <span class="o">=</span> <span class="n">address</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">channel</span> <span class="o">=</span> <span class="n">channel</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">value</span> <span class="o">=</span> <span class="n">value</span> | |||
| <span class="k">if</span> <span class="n">header</span> <span class="o">==</span> <span class="s">'!EXP'</span><span class="p">:</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">type</span> <span class="o">=</span> <span class="n">ExpanderMessage</span><span class="o">.</span><span class="n">ZONE</span> | |||
| <span class="k">elif</span> <span class="n">header</span> <span class="o">==</span> <span class="s">'!REL'</span><span class="p">:</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">type</span> <span class="o">=</span> <span class="n">ExpanderMessage</span><span class="o">.</span><span class="n">RELAY</span> | |||
| </div> | |||
| <div class="viewcode-block" id="RFMessage"><a class="viewcode-back" href="../../pyad2usb.html#pyad2usb.ad2usb.RFMessage">[docs]</a><span class="k">class</span> <span class="nc">RFMessage</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> Represents a message from an RF receiver.</span> | |||
| <span class="sd"> """</span> | |||
| <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> Constructor</span> | |||
| <span class="sd"> """</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">raw</span> <span class="o">=</span> <span class="bp">None</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">serial_number</span> <span class="o">=</span> <span class="bp">None</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">value</span> <span class="o">=</span> <span class="bp">None</span> | |||
| <span class="k">if</span> <span class="n">data</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_parse_message</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> | |||
| <span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> String conversion operator.</span> | |||
| <span class="sd"> """</span> | |||
| <span class="k">return</span> <span class="s">'rf > {0}: {1}'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">serial_number</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">value</span><span class="p">)</span> | |||
| <span class="k">def</span> <span class="nf">_parse_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> Parses the raw message from the device.</span> | |||
| <span class="sd"> """</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">raw</span> <span class="o">=</span> <span class="n">data</span> | |||
| <span class="n">_</span><span class="p">,</span> <span class="n">values</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">':'</span><span class="p">)</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">serial_number</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">value</span> <span class="o">=</span> <span class="n">values</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">','</span><span class="p">)</span> | |||
| </div> | |||
| <div class="viewcode-block" id="LRRMessage"><a class="viewcode-back" href="../../pyad2usb.html#pyad2usb.ad2usb.LRRMessage">[docs]</a><span class="k">class</span> <span class="nc">LRRMessage</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> Represent a message from a Long Range Radio.</span> | |||
| <span class="sd"> """</span> | |||
| <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> Constructor</span> | |||
| <span class="sd"> """</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">raw</span> <span class="o">=</span> <span class="bp">None</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_event_data</span> <span class="o">=</span> <span class="bp">None</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_partition</span> <span class="o">=</span> <span class="bp">None</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_event_type</span> <span class="o">=</span> <span class="bp">None</span> | |||
| <span class="k">if</span> <span class="n">data</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_parse_message</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> | |||
| <span class="k">def</span> <span class="nf">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> String conversion operator.</span> | |||
| <span class="sd"> """</span> | |||
| <span class="k">return</span> <span class="s">'lrr > {0} @ {1} -- {2}'</span><span class="o">.</span><span class="n">format</span><span class="p">()</span> | |||
| <span class="k">def</span> <span class="nf">_parse_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> Parses the raw message from the device.</span> | |||
| <span class="sd"> """</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">raw</span> <span class="o">=</span> <span class="n">data</span> | |||
| <span class="n">_</span><span class="p">,</span> <span class="n">values</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">':'</span><span class="p">)</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_event_data</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_partition</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_event_type</span> <span class="o">=</span> <span class="n">values</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s">','</span><span class="p">)</span></div> | |||
| </pre></div> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| <div class="sphinxsidebar"> | |||
| <div class="sphinxsidebarwrapper"> | |||
| <div id="searchbox" style="display: none"> | |||
| <h3>Quick search</h3> | |||
| <form class="search" action="../../search.html" method="get"> | |||
| <input type="text" name="q" /> | |||
| <input type="submit" value="Go" /> | |||
| <input type="hidden" name="check_keywords" value="yes" /> | |||
| <input type="hidden" name="area" value="default" /> | |||
| </form> | |||
| <p class="searchtip" style="font-size: 90%"> | |||
| Enter search terms or a module, class or function name. | |||
| </p> | |||
| </div> | |||
| <script type="text/javascript">$('#searchbox').show(0);</script> | |||
| </div> | |||
| </div> | |||
| <div class="clearer"></div> | |||
| </div> | |||
| <div class="related"> | |||
| <h3>Navigation</h3> | |||
| <ul> | |||
| <li class="right" style="margin-right: 10px"> | |||
| <a href="../../genindex.html" title="General Index" | |||
| >index</a></li> | |||
| <li class="right" > | |||
| <a href="../../py-modindex.html" title="Python Module Index" | |||
| >modules</a> |</li> | |||
| <li><a href="../../index.html">pyad2usb documentation</a> »</li> | |||
| <li><a href="../index.html" >Module code</a> »</li> | |||
| </ul> | |||
| </div> | |||
| <div class="footer"> | |||
| © Copyright 2013, Author. | |||
| Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2b1. | |||
| </div> | |||
| </body> | |||
| </html> | |||
| @@ -0,0 +1,652 @@ | |||
| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" | |||
| "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> | |||
| <html xmlns="http://www.w3.org/1999/xhtml"> | |||
| <head> | |||
| <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> | |||
| <title>pyad2usb.devices — pyad2usb documentation</title> | |||
| <link rel="stylesheet" href="../../_static/default.css" type="text/css" /> | |||
| <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> | |||
| <script type="text/javascript"> | |||
| var DOCUMENTATION_OPTIONS = { | |||
| URL_ROOT: '../../', | |||
| VERSION: '', | |||
| COLLAPSE_INDEX: false, | |||
| FILE_SUFFIX: '.html', | |||
| HAS_SOURCE: true | |||
| }; | |||
| </script> | |||
| <script type="text/javascript" src="../../_static/jquery.js"></script> | |||
| <script type="text/javascript" src="../../_static/underscore.js"></script> | |||
| <script type="text/javascript" src="../../_static/doctools.js"></script> | |||
| <link rel="top" title="pyad2usb documentation" href="../../index.html" /> | |||
| <link rel="up" title="Module code" href="../index.html" /> | |||
| </head> | |||
| <body> | |||
| <div class="related"> | |||
| <h3>Navigation</h3> | |||
| <ul> | |||
| <li class="right" style="margin-right: 10px"> | |||
| <a href="../../genindex.html" title="General Index" | |||
| accesskey="I">index</a></li> | |||
| <li class="right" > | |||
| <a href="../../py-modindex.html" title="Python Module Index" | |||
| >modules</a> |</li> | |||
| <li><a href="../../index.html">pyad2usb documentation</a> »</li> | |||
| <li><a href="../index.html" accesskey="U">Module code</a> »</li> | |||
| </ul> | |||
| </div> | |||
| <div class="document"> | |||
| <div class="documentwrapper"> | |||
| <div class="bodywrapper"> | |||
| <div class="body"> | |||
| <h1>Source code for pyad2usb.devices</h1><div class="highlight"><pre> | |||
| <span class="sd">"""</span> | |||
| <span class="sd">Contains different types of devices belonging to the AD2USB family.</span> | |||
| <span class="sd">"""</span> | |||
| <span class="kn">import</span> <span class="nn">usb.core</span> | |||
| <span class="kn">import</span> <span class="nn">usb.util</span> | |||
| <span class="kn">import</span> <span class="nn">time</span> | |||
| <span class="kn">import</span> <span class="nn">threading</span> | |||
| <span class="kn">import</span> <span class="nn">serial</span> | |||
| <span class="kn">import</span> <span class="nn">serial.tools.list_ports</span> | |||
| <span class="kn">import</span> <span class="nn">socket</span> | |||
| <span class="kn">from</span> <span class="nn">pyftdi.pyftdi.ftdi</span> <span class="kn">import</span> <span class="o">*</span> | |||
| <span class="kn">from</span> <span class="nn">pyftdi.pyftdi.usbtools</span> <span class="kn">import</span> <span class="o">*</span> | |||
| <span class="kn">from</span> <span class="nn">.</span> <span class="kn">import</span> <span class="n">util</span> | |||
| <span class="kn">from</span> <span class="nn">.event</span> <span class="kn">import</span> <span class="n">event</span> | |||
| <div class="viewcode-block" id="Device"><a class="viewcode-back" href="../../pyad2usb.html#pyad2usb.devices.Device">[docs]</a><span class="k">class</span> <span class="nc">Device</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> Generic parent device to all AD2USB products.</span> | |||
| <span class="sd"> """</span> | |||
| <span class="c"># Generic device events</span> | |||
| <span class="n">on_open</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">Event</span><span class="p">(</span><span class="s">'Called when the device has been opened'</span><span class="p">)</span> | |||
| <span class="n">on_close</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">Event</span><span class="p">(</span><span class="s">'Called when the device has been closed'</span><span class="p">)</span> | |||
| <span class="n">on_read</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">Event</span><span class="p">(</span><span class="s">'Called when a line has been read from the device'</span><span class="p">)</span> | |||
| <span class="n">on_write</span> <span class="o">=</span> <span class="n">event</span><span class="o">.</span><span class="n">Event</span><span class="p">(</span><span class="s">'Called when data has been written to the device'</span><span class="p">)</span> | |||
| <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_id</span> <span class="o">=</span> <span class="s">''</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_buffer</span> <span class="o">=</span> <span class="s">''</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_interface</span> <span class="o">=</span> <span class="bp">None</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_device</span> <span class="o">=</span> <span class="bp">None</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_running</span> <span class="o">=</span> <span class="bp">False</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_read_thread</span> <span class="o">=</span> <span class="n">Device</span><span class="o">.</span><span class="n">ReadThread</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="c"># NOTE: not sure this is going to work..</span> | |||
| <span class="k">def</span> <span class="nf">__del__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> | |||
| <span class="k">pass</span> | |||
| <span class="nd">@property</span> | |||
| <span class="k">def</span> <span class="nf">id</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> | |||
| <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_id</span> | |||
| <span class="nd">@id.setter</span> | |||
| <div class="viewcode-block" id="Device.id"><a class="viewcode-back" href="../../pyad2usb.html#pyad2usb.devices.Device.id">[docs]</a> <span class="k">def</span> <span class="nf">id</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_id</span> <span class="o">=</span> <span class="n">value</span> | |||
| </div> | |||
| <div class="viewcode-block" id="Device.is_reader_alive"><a class="viewcode-back" href="../../pyad2usb.html#pyad2usb.devices.Device.is_reader_alive">[docs]</a> <span class="k">def</span> <span class="nf">is_reader_alive</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> Indicates whether or not the reader thread is alive.</span> | |||
| <span class="sd"> """</span> | |||
| <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_read_thread</span><span class="o">.</span><span class="n">is_alive</span><span class="p">()</span> | |||
| </div> | |||
| <div class="viewcode-block" id="Device.stop_reader"><a class="viewcode-back" href="../../pyad2usb.html#pyad2usb.devices.Device.stop_reader">[docs]</a> <span class="k">def</span> <span class="nf">stop_reader</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> Stops the reader thread.</span> | |||
| <span class="sd"> """</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_read_thread</span><span class="o">.</span><span class="n">stop</span><span class="p">()</span> | |||
| </div> | |||
| <div class="viewcode-block" id="Device.ReadThread"><a class="viewcode-back" href="../../pyad2usb.html#pyad2usb.devices.Device.ReadThread">[docs]</a> <span class="k">class</span> <span class="nc">ReadThread</span><span class="p">(</span><span class="n">threading</span><span class="o">.</span><span class="n">Thread</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> Reader thread which processes messages from the device.</span> | |||
| <span class="sd"> """</span> | |||
| <span class="n">READ_TIMEOUT</span> <span class="o">=</span> <span class="mi">10</span> | |||
| <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">device</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> Constructor</span> | |||
| <span class="sd"> """</span> | |||
| <span class="n">threading</span><span class="o">.</span><span class="n">Thread</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_device</span> <span class="o">=</span> <span class="n">device</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_running</span> <span class="o">=</span> <span class="bp">False</span> | |||
| <div class="viewcode-block" id="Device.ReadThread.stop"><a class="viewcode-back" href="../../pyad2usb.html#pyad2usb.devices.Device.ReadThread.stop">[docs]</a> <span class="k">def</span> <span class="nf">stop</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> Stops the running thread.</span> | |||
| <span class="sd"> """</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_running</span> <span class="o">=</span> <span class="bp">False</span> | |||
| </div> | |||
| <div class="viewcode-block" id="Device.ReadThread.run"><a class="viewcode-back" href="../../pyad2usb.html#pyad2usb.devices.Device.ReadThread.run">[docs]</a> <span class="k">def</span> <span class="nf">run</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> The actual read process.</span> | |||
| <span class="sd"> """</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_running</span> <span class="o">=</span> <span class="bp">True</span> | |||
| <span class="k">while</span> <span class="bp">self</span><span class="o">.</span><span class="n">_running</span><span class="p">:</span> | |||
| <span class="k">try</span><span class="p">:</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_device</span><span class="o">.</span><span class="n">read_line</span><span class="p">(</span><span class="n">timeout</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">READ_TIMEOUT</span><span class="p">)</span> | |||
| <span class="k">except</span> <span class="n">util</span><span class="o">.</span><span class="n">TimeoutError</span><span class="p">,</span> <span class="n">err</span><span class="p">:</span> | |||
| <span class="k">pass</span> | |||
| <span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mf">0.01</span><span class="p">)</span> | |||
| </div></div></div> | |||
| <div class="viewcode-block" id="USBDevice"><a class="viewcode-back" href="../../pyad2usb.html#pyad2usb.devices.USBDevice">[docs]</a><span class="k">class</span> <span class="nc">USBDevice</span><span class="p">(</span><span class="n">Device</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> AD2USB device exposed with PyFTDI's interface.</span> | |||
| <span class="sd"> """</span> | |||
| <span class="c"># Constants</span> | |||
| <span class="n">FTDI_VENDOR_ID</span> <span class="o">=</span> <span class="mh">0x0403</span> | |||
| <span class="n">FTDI_PRODUCT_ID</span> <span class="o">=</span> <span class="mh">0x6001</span> | |||
| <span class="n">BAUDRATE</span> <span class="o">=</span> <span class="mi">115200</span> | |||
| <span class="nd">@staticmethod</span> | |||
| <div class="viewcode-block" id="USBDevice.find_all"><a class="viewcode-back" href="../../pyad2usb.html#pyad2usb.devices.USBDevice.find_all">[docs]</a> <span class="k">def</span> <span class="nf">find_all</span><span class="p">():</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> Returns all FTDI devices matching our vendor and product IDs.</span> | |||
| <span class="sd"> """</span> | |||
| <span class="n">devices</span> <span class="o">=</span> <span class="p">[]</span> | |||
| <span class="k">try</span><span class="p">:</span> | |||
| <span class="n">devices</span> <span class="o">=</span> <span class="n">Ftdi</span><span class="o">.</span><span class="n">find_all</span><span class="p">([(</span><span class="n">USBDevice</span><span class="o">.</span><span class="n">FTDI_VENDOR_ID</span><span class="p">,</span> <span class="n">USBDevice</span><span class="o">.</span><span class="n">FTDI_PRODUCT_ID</span><span class="p">)],</span> <span class="n">nocache</span><span class="o">=</span><span class="bp">True</span><span class="p">)</span> | |||
| <span class="k">except</span> <span class="p">(</span><span class="n">usb</span><span class="o">.</span><span class="n">core</span><span class="o">.</span><span class="n">USBError</span><span class="p">,</span> <span class="n">FtdiError</span><span class="p">),</span> <span class="n">err</span><span class="p">:</span> | |||
| <span class="k">raise</span> <span class="n">util</span><span class="o">.</span><span class="n">CommError</span><span class="p">(</span><span class="s">'Error enumerating AD2USB devices: {0}'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">err</span><span class="p">)))</span> | |||
| <span class="k">return</span> <span class="n">devices</span> | |||
| </div> | |||
| <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">vid</span><span class="o">=</span><span class="n">FTDI_VENDOR_ID</span><span class="p">,</span> <span class="n">pid</span><span class="o">=</span><span class="n">FTDI_PRODUCT_ID</span><span class="p">,</span> <span class="n">serial</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">description</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">interface</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> Constructor</span> | |||
| <span class="sd"> """</span> | |||
| <span class="n">Device</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_device</span> <span class="o">=</span> <span class="n">Ftdi</span><span class="p">()</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_interface</span> <span class="o">=</span> <span class="n">interface</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_vendor_id</span> <span class="o">=</span> <span class="n">vid</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_product_id</span> <span class="o">=</span> <span class="n">pid</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_serial_number</span> <span class="o">=</span> <span class="n">serial</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_description</span> <span class="o">=</span> <span class="n">description</span> | |||
| <div class="viewcode-block" id="USBDevice.open"><a class="viewcode-back" href="../../pyad2usb.html#pyad2usb.devices.USBDevice.open">[docs]</a> <span class="k">def</span> <span class="nf">open</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">baudrate</span><span class="o">=</span><span class="n">BAUDRATE</span><span class="p">,</span> <span class="n">interface</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">no_reader_thread</span><span class="o">=</span><span class="bp">False</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> Opens the device.</span> | |||
| <span class="sd"> """</span> | |||
| <span class="c"># Set up defaults</span> | |||
| <span class="k">if</span> <span class="n">baudrate</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span> | |||
| <span class="n">baudrate</span> <span class="o">=</span> <span class="n">USBDevice</span><span class="o">.</span><span class="n">BAUDRATE</span> | |||
| <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_interface</span> <span class="ow">is</span> <span class="bp">None</span> <span class="ow">and</span> <span class="n">interface</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_interface</span> <span class="o">=</span> <span class="mi">0</span> | |||
| <span class="k">if</span> <span class="n">interface</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_interface</span> <span class="o">=</span> <span class="n">interface</span> | |||
| <span class="k">if</span> <span class="n">index</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span> | |||
| <span class="n">index</span> <span class="o">=</span> <span class="mi">0</span> | |||
| <span class="c"># Open the device and start up the thread.</span> | |||
| <span class="k">try</span><span class="p">:</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_device</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_vendor_id</span><span class="p">,</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_product_id</span><span class="p">,</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_interface</span><span class="p">,</span> | |||
| <span class="n">index</span><span class="p">,</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_serial_number</span><span class="p">,</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_description</span><span class="p">)</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_device</span><span class="o">.</span><span class="n">set_baudrate</span><span class="p">(</span><span class="n">baudrate</span><span class="p">)</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_id</span> <span class="o">=</span> <span class="s">'USB {0}:{1}'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_device</span><span class="o">.</span><span class="n">usb_dev</span><span class="o">.</span><span class="n">bus</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_device</span><span class="o">.</span><span class="n">usb_dev</span><span class="o">.</span><span class="n">address</span><span class="p">)</span> | |||
| <span class="k">except</span> <span class="p">(</span><span class="n">usb</span><span class="o">.</span><span class="n">core</span><span class="o">.</span><span class="n">USBError</span><span class="p">,</span> <span class="n">FtdiError</span><span class="p">),</span> <span class="n">err</span><span class="p">:</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">on_close</span><span class="p">()</span> | |||
| <span class="k">raise</span> <span class="n">util</span><span class="o">.</span><span class="n">NoDeviceError</span><span class="p">(</span><span class="s">'Error opening AD2USB device: {0}'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">err</span><span class="p">)))</span> | |||
| <span class="k">else</span><span class="p">:</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_running</span> <span class="o">=</span> <span class="bp">True</span> | |||
| <span class="k">if</span> <span class="ow">not</span> <span class="n">no_reader_thread</span><span class="p">:</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_read_thread</span><span class="o">.</span><span class="n">start</span><span class="p">()</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">on_open</span><span class="p">((</span><span class="bp">self</span><span class="o">.</span><span class="n">_serial_number</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_description</span><span class="p">))</span> | |||
| </div> | |||
| <div class="viewcode-block" id="USBDevice.close"><a class="viewcode-back" href="../../pyad2usb.html#pyad2usb.devices.USBDevice.close">[docs]</a> <span class="k">def</span> <span class="nf">close</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> Closes the device.</span> | |||
| <span class="sd"> """</span> | |||
| <span class="k">try</span><span class="p">:</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_running</span> <span class="o">=</span> <span class="bp">False</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_read_thread</span><span class="o">.</span><span class="n">stop</span><span class="p">()</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_device</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> | |||
| <span class="c"># HACK: Probably should fork pyftdi and make this call in .close().</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_device</span><span class="o">.</span><span class="n">usb_dev</span><span class="o">.</span><span class="n">attach_kernel_driver</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_interface</span><span class="p">)</span> | |||
| <span class="k">except</span> <span class="p">(</span><span class="n">FtdiError</span><span class="p">,</span> <span class="n">usb</span><span class="o">.</span><span class="n">core</span><span class="o">.</span><span class="n">USBError</span><span class="p">):</span> | |||
| <span class="k">pass</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">on_close</span><span class="p">()</span> | |||
| </div> | |||
| <div class="viewcode-block" id="USBDevice.write"><a class="viewcode-back" href="../../pyad2usb.html#pyad2usb.devices.USBDevice.write">[docs]</a> <span class="k">def</span> <span class="nf">write</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> Writes data to the device.</span> | |||
| <span class="sd"> """</span> | |||
| <span class="k">try</span><span class="p">:</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_device</span><span class="o">.</span><span class="n">write_data</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">on_write</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> | |||
| <span class="k">except</span> <span class="n">FtdiError</span><span class="p">,</span> <span class="n">err</span><span class="p">:</span> | |||
| <span class="k">raise</span> <span class="n">util</span><span class="o">.</span><span class="n">CommError</span><span class="p">(</span><span class="s">'Error writing to AD2USB device.'</span><span class="p">)</span> | |||
| </div> | |||
| <div class="viewcode-block" id="USBDevice.read"><a class="viewcode-back" href="../../pyad2usb.html#pyad2usb.devices.USBDevice.read">[docs]</a> <span class="k">def</span> <span class="nf">read</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> Reads a single character from the device.</span> | |||
| <span class="sd"> """</span> | |||
| <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_device</span><span class="o">.</span><span class="n">read_data</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> | |||
| </div> | |||
| <div class="viewcode-block" id="USBDevice.read_line"><a class="viewcode-back" href="../../pyad2usb.html#pyad2usb.devices.USBDevice.read_line">[docs]</a> <span class="k">def</span> <span class="nf">read_line</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">timeout</span><span class="o">=</span><span class="mf">0.0</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> Reads a line from the device.</span> | |||
| <span class="sd"> """</span> | |||
| <span class="k">def</span> <span class="nf">timeout_event</span><span class="p">():</span> | |||
| <span class="n">timeout_event</span><span class="o">.</span><span class="n">reading</span> <span class="o">=</span> <span class="bp">False</span> | |||
| <span class="n">timeout_event</span><span class="o">.</span><span class="n">reading</span> <span class="o">=</span> <span class="bp">True</span> | |||
| <span class="n">got_line</span> <span class="o">=</span> <span class="bp">False</span> | |||
| <span class="n">ret</span> <span class="o">=</span> <span class="bp">None</span> | |||
| <span class="n">timer</span> <span class="o">=</span> <span class="bp">None</span> | |||
| <span class="k">if</span> <span class="n">timeout</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span> | |||
| <span class="n">timer</span> <span class="o">=</span> <span class="n">threading</span><span class="o">.</span><span class="n">Timer</span><span class="p">(</span><span class="n">timeout</span><span class="p">,</span> <span class="n">timeout_event</span><span class="p">)</span> | |||
| <span class="n">timer</span><span class="o">.</span><span class="n">start</span><span class="p">()</span> | |||
| <span class="k">try</span><span class="p">:</span> | |||
| <span class="k">while</span> <span class="n">timeout_event</span><span class="o">.</span><span class="n">reading</span><span class="p">:</span> | |||
| <span class="n">buf</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_device</span><span class="o">.</span><span class="n">read_data</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> | |||
| <span class="k">if</span> <span class="n">buf</span> <span class="o">!=</span> <span class="s">''</span><span class="p">:</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_buffer</span> <span class="o">+=</span> <span class="n">buf</span> | |||
| <span class="k">if</span> <span class="n">buf</span> <span class="o">==</span> <span class="s">"</span><span class="se">\n</span><span class="s">"</span><span class="p">:</span> | |||
| <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_buffer</span><span class="p">)</span> <span class="o">></span> <span class="mi">1</span><span class="p">:</span> | |||
| <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_buffer</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span> <span class="o">==</span> <span class="s">"</span><span class="se">\r</span><span class="s">"</span><span class="p">:</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_buffer</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_buffer</span><span class="p">[:</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span> | |||
| <span class="c"># ignore if we just got \r\n with nothing else in the buffer.</span> | |||
| <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_buffer</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">:</span> | |||
| <span class="n">got_line</span> <span class="o">=</span> <span class="bp">True</span> | |||
| <span class="k">break</span> | |||
| <span class="k">else</span><span class="p">:</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_buffer</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_buffer</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> | |||
| <span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mf">0.001</span><span class="p">)</span> | |||
| <span class="k">except</span> <span class="p">(</span><span class="n">usb</span><span class="o">.</span><span class="n">core</span><span class="o">.</span><span class="n">USBError</span><span class="p">,</span> <span class="n">FtdiError</span><span class="p">),</span> <span class="n">err</span><span class="p">:</span> | |||
| <span class="n">timer</span><span class="o">.</span><span class="n">cancel</span><span class="p">()</span> | |||
| <span class="k">raise</span> <span class="n">util</span><span class="o">.</span><span class="n">CommError</span><span class="p">(</span><span class="s">'Error reading from AD2USB device: {0}'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">err</span><span class="p">)))</span> | |||
| <span class="k">else</span><span class="p">:</span> | |||
| <span class="k">if</span> <span class="n">got_line</span><span class="p">:</span> | |||
| <span class="n">ret</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_buffer</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_buffer</span> <span class="o">=</span> <span class="s">''</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">on_read</span><span class="p">(</span><span class="n">ret</span><span class="p">)</span> | |||
| <span class="k">if</span> <span class="n">timer</span><span class="p">:</span> | |||
| <span class="k">if</span> <span class="n">timer</span><span class="o">.</span><span class="n">is_alive</span><span class="p">():</span> | |||
| <span class="n">timer</span><span class="o">.</span><span class="n">cancel</span><span class="p">()</span> | |||
| <span class="k">else</span><span class="p">:</span> | |||
| <span class="k">raise</span> <span class="n">util</span><span class="o">.</span><span class="n">TimeoutError</span><span class="p">(</span><span class="s">'Timeout while waiting for line terminator.'</span><span class="p">)</span> | |||
| <span class="k">return</span> <span class="n">ret</span> | |||
| </div></div> | |||
| <div class="viewcode-block" id="SerialDevice"><a class="viewcode-back" href="../../pyad2usb.html#pyad2usb.devices.SerialDevice">[docs]</a><span class="k">class</span> <span class="nc">SerialDevice</span><span class="p">(</span><span class="n">Device</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> AD2USB or AD2SERIAL device exposed with the pyserial interface.</span> | |||
| <span class="sd"> """</span> | |||
| <span class="c"># Constants</span> | |||
| <span class="n">BAUDRATE</span> <span class="o">=</span> <span class="mi">19200</span> | |||
| <span class="nd">@staticmethod</span> | |||
| <div class="viewcode-block" id="SerialDevice.find_all"><a class="viewcode-back" href="../../pyad2usb.html#pyad2usb.devices.SerialDevice.find_all">[docs]</a> <span class="k">def</span> <span class="nf">find_all</span><span class="p">(</span><span class="n">pattern</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> Returns all serial ports present.</span> | |||
| <span class="sd"> """</span> | |||
| <span class="n">devices</span> <span class="o">=</span> <span class="p">[]</span> | |||
| <span class="k">try</span><span class="p">:</span> | |||
| <span class="k">if</span> <span class="n">pattern</span><span class="p">:</span> | |||
| <span class="n">devices</span> <span class="o">=</span> <span class="n">serial</span><span class="o">.</span><span class="n">tools</span><span class="o">.</span><span class="n">list_ports</span><span class="o">.</span><span class="n">grep</span><span class="p">(</span><span class="n">pattern</span><span class="p">)</span> | |||
| <span class="k">else</span><span class="p">:</span> | |||
| <span class="n">devices</span> <span class="o">=</span> <span class="n">serial</span><span class="o">.</span><span class="n">tools</span><span class="o">.</span><span class="n">list_ports</span><span class="o">.</span><span class="n">comports</span><span class="p">()</span> | |||
| <span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">err</span><span class="p">:</span> | |||
| <span class="k">raise</span> <span class="n">util</span><span class="o">.</span><span class="n">CommError</span><span class="p">(</span><span class="s">'Error enumerating AD2SERIAL devices: {0}'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">err</span><span class="p">)))</span> | |||
| <span class="k">return</span> <span class="n">devices</span> | |||
| </div> | |||
| <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">interface</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> Constructor</span> | |||
| <span class="sd"> """</span> | |||
| <span class="n">Device</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_interface</span> <span class="o">=</span> <span class="n">interface</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_id</span> <span class="o">=</span> <span class="n">interface</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_device</span> <span class="o">=</span> <span class="n">serial</span><span class="o">.</span><span class="n">Serial</span><span class="p">(</span><span class="n">timeout</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">writeTimeout</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span> <span class="c"># Timeout = non-blocking to match pyftdi.</span> | |||
| <div class="viewcode-block" id="SerialDevice.open"><a class="viewcode-back" href="../../pyad2usb.html#pyad2usb.devices.SerialDevice.open">[docs]</a> <span class="k">def</span> <span class="nf">open</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">baudrate</span><span class="o">=</span><span class="n">BAUDRATE</span><span class="p">,</span> <span class="n">interface</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">no_reader_thread</span><span class="o">=</span><span class="bp">False</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> Opens the device.</span> | |||
| <span class="sd"> """</span> | |||
| <span class="c"># Set up the defaults</span> | |||
| <span class="k">if</span> <span class="n">baudrate</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span> | |||
| <span class="n">baudrate</span> <span class="o">=</span> <span class="n">SerialDevice</span><span class="o">.</span><span class="n">BAUDRATE</span> | |||
| <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_interface</span> <span class="ow">is</span> <span class="bp">None</span> <span class="ow">and</span> <span class="n">interface</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span> | |||
| <span class="k">raise</span> <span class="n">util</span><span class="o">.</span><span class="n">NoDeviceError</span><span class="p">(</span><span class="s">'No AD2SERIAL device interface specified.'</span><span class="p">)</span> | |||
| <span class="k">if</span> <span class="n">interface</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_interface</span> <span class="o">=</span> <span class="n">interface</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_device</span><span class="o">.</span><span class="n">port</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_interface</span> | |||
| <span class="c"># Open the device and start up the reader thread.</span> | |||
| <span class="k">try</span><span class="p">:</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_device</span><span class="o">.</span><span class="n">open</span><span class="p">()</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_device</span><span class="o">.</span><span class="n">baudrate</span> <span class="o">=</span> <span class="n">baudrate</span> <span class="c"># NOTE: Setting the baudrate before opening the</span> | |||
| <span class="c"># port caused issues with Moschip 7840/7820</span> | |||
| <span class="c"># USB Serial Driver converter. (mos7840)</span> | |||
| <span class="c">#</span> | |||
| <span class="c"># Moving it to this point seems to resolve</span> | |||
| <span class="c"># all issues with it.</span> | |||
| <span class="k">except</span> <span class="p">(</span><span class="n">serial</span><span class="o">.</span><span class="n">SerialException</span><span class="p">,</span> <span class="ne">ValueError</span><span class="p">),</span> <span class="n">err</span><span class="p">:</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">on_close</span><span class="p">()</span> | |||
| <span class="k">raise</span> <span class="n">util</span><span class="o">.</span><span class="n">NoDeviceError</span><span class="p">(</span><span class="s">'Error opening AD2SERIAL device on port {0}.'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">interface</span><span class="p">))</span> | |||
| <span class="k">else</span><span class="p">:</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_running</span> <span class="o">=</span> <span class="bp">True</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">on_open</span><span class="p">((</span><span class="s">'N/A'</span><span class="p">,</span> <span class="s">"AD2SERIAL"</span><span class="p">))</span> | |||
| <span class="k">if</span> <span class="ow">not</span> <span class="n">no_reader_thread</span><span class="p">:</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_read_thread</span><span class="o">.</span><span class="n">start</span><span class="p">()</span> | |||
| </div> | |||
| <div class="viewcode-block" id="SerialDevice.close"><a class="viewcode-back" href="../../pyad2usb.html#pyad2usb.devices.SerialDevice.close">[docs]</a> <span class="k">def</span> <span class="nf">close</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> Closes the device.</span> | |||
| <span class="sd"> """</span> | |||
| <span class="k">try</span><span class="p">:</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_running</span> <span class="o">=</span> <span class="bp">False</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_read_thread</span><span class="o">.</span><span class="n">stop</span><span class="p">()</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_device</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> | |||
| <span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">err</span><span class="p">:</span> | |||
| <span class="k">pass</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">on_close</span><span class="p">()</span> | |||
| </div> | |||
| <div class="viewcode-block" id="SerialDevice.write"><a class="viewcode-back" href="../../pyad2usb.html#pyad2usb.devices.SerialDevice.write">[docs]</a> <span class="k">def</span> <span class="nf">write</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> Writes data to the device.</span> | |||
| <span class="sd"> """</span> | |||
| <span class="k">try</span><span class="p">:</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_device</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> | |||
| <span class="k">except</span> <span class="n">serial</span><span class="o">.</span><span class="n">SerialTimeoutException</span><span class="p">,</span> <span class="n">err</span><span class="p">:</span> | |||
| <span class="k">pass</span> | |||
| <span class="k">except</span> <span class="n">serial</span><span class="o">.</span><span class="n">SerialException</span><span class="p">,</span> <span class="n">err</span><span class="p">:</span> | |||
| <span class="k">raise</span> <span class="n">util</span><span class="o">.</span><span class="n">CommError</span><span class="p">(</span><span class="s">'Error writing to serial device.'</span><span class="p">)</span> | |||
| <span class="k">else</span><span class="p">:</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">on_write</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> | |||
| </div> | |||
| <div class="viewcode-block" id="SerialDevice.read"><a class="viewcode-back" href="../../pyad2usb.html#pyad2usb.devices.SerialDevice.read">[docs]</a> <span class="k">def</span> <span class="nf">read</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> Reads a single character from the device.</span> | |||
| <span class="sd"> """</span> | |||
| <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_device</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> | |||
| </div> | |||
| <div class="viewcode-block" id="SerialDevice.read_line"><a class="viewcode-back" href="../../pyad2usb.html#pyad2usb.devices.SerialDevice.read_line">[docs]</a> <span class="k">def</span> <span class="nf">read_line</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">timeout</span><span class="o">=</span><span class="mf">0.0</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> Reads a line from the device.</span> | |||
| <span class="sd"> """</span> | |||
| <span class="k">def</span> <span class="nf">timeout_event</span><span class="p">():</span> | |||
| <span class="n">timeout_event</span><span class="o">.</span><span class="n">reading</span> <span class="o">=</span> <span class="bp">False</span> | |||
| <span class="n">timeout_event</span><span class="o">.</span><span class="n">reading</span> <span class="o">=</span> <span class="bp">True</span> | |||
| <span class="n">got_line</span> <span class="o">=</span> <span class="bp">False</span> | |||
| <span class="n">ret</span> <span class="o">=</span> <span class="bp">None</span> | |||
| <span class="n">timer</span> <span class="o">=</span> <span class="bp">None</span> | |||
| <span class="k">if</span> <span class="n">timeout</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span> | |||
| <span class="n">timer</span> <span class="o">=</span> <span class="n">threading</span><span class="o">.</span><span class="n">Timer</span><span class="p">(</span><span class="n">timeout</span><span class="p">,</span> <span class="n">timeout_event</span><span class="p">)</span> | |||
| <span class="n">timer</span><span class="o">.</span><span class="n">start</span><span class="p">()</span> | |||
| <span class="k">try</span><span class="p">:</span> | |||
| <span class="k">while</span> <span class="n">timeout_event</span><span class="o">.</span><span class="n">reading</span><span class="p">:</span> | |||
| <span class="n">buf</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_device</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> | |||
| <span class="k">if</span> <span class="n">buf</span> <span class="o">!=</span> <span class="s">''</span> <span class="ow">and</span> <span class="n">buf</span> <span class="o">!=</span> <span class="s">"</span><span class="se">\xff</span><span class="s">"</span><span class="p">:</span> <span class="c"># AD2SERIAL specifically apparently sends down \xFF on boot.</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_buffer</span> <span class="o">+=</span> <span class="n">buf</span> | |||
| <span class="k">if</span> <span class="n">buf</span> <span class="o">==</span> <span class="s">"</span><span class="se">\n</span><span class="s">"</span><span class="p">:</span> | |||
| <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_buffer</span><span class="p">)</span> <span class="o">></span> <span class="mi">1</span><span class="p">:</span> | |||
| <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_buffer</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span> <span class="o">==</span> <span class="s">"</span><span class="se">\r</span><span class="s">"</span><span class="p">:</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_buffer</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_buffer</span><span class="p">[:</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span> | |||
| <span class="c"># ignore if we just got \r\n with nothing else in the buffer.</span> | |||
| <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_buffer</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">:</span> | |||
| <span class="n">got_line</span> <span class="o">=</span> <span class="bp">True</span> | |||
| <span class="k">break</span> | |||
| <span class="k">else</span><span class="p">:</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_buffer</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_buffer</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> | |||
| <span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mf">0.001</span><span class="p">)</span> | |||
| <span class="k">except</span> <span class="p">(</span><span class="ne">OSError</span><span class="p">,</span> <span class="n">serial</span><span class="o">.</span><span class="n">SerialException</span><span class="p">),</span> <span class="n">err</span><span class="p">:</span> | |||
| <span class="n">timer</span><span class="o">.</span><span class="n">cancel</span><span class="p">()</span> | |||
| <span class="k">raise</span> <span class="n">util</span><span class="o">.</span><span class="n">CommError</span><span class="p">(</span><span class="s">'Error reading from AD2SERIAL device: {0}'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">err</span><span class="p">)))</span> | |||
| <span class="k">else</span><span class="p">:</span> | |||
| <span class="k">if</span> <span class="n">got_line</span><span class="p">:</span> | |||
| <span class="n">ret</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_buffer</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_buffer</span> <span class="o">=</span> <span class="s">''</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">on_read</span><span class="p">(</span><span class="n">ret</span><span class="p">)</span> | |||
| <span class="k">if</span> <span class="n">timer</span><span class="p">:</span> | |||
| <span class="k">if</span> <span class="n">timer</span><span class="o">.</span><span class="n">is_alive</span><span class="p">():</span> | |||
| <span class="n">timer</span><span class="o">.</span><span class="n">cancel</span><span class="p">()</span> | |||
| <span class="k">else</span><span class="p">:</span> | |||
| <span class="k">raise</span> <span class="n">util</span><span class="o">.</span><span class="n">TimeoutError</span><span class="p">(</span><span class="s">'Timeout while waiting for line terminator.'</span><span class="p">)</span> | |||
| <span class="k">return</span> <span class="n">ret</span> | |||
| </div></div> | |||
| <div class="viewcode-block" id="SocketDevice"><a class="viewcode-back" href="../../pyad2usb.html#pyad2usb.devices.SocketDevice">[docs]</a><span class="k">class</span> <span class="nc">SocketDevice</span><span class="p">(</span><span class="n">Device</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> Device that supports communication with an AD2USB that is exposed via ser2sock or another</span> | |||
| <span class="sd"> Serial to IP interface.</span> | |||
| <span class="sd"> """</span> | |||
| <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">interface</span><span class="o">=</span><span class="p">(</span><span class="s">"localhost"</span><span class="p">,</span> <span class="mi">10000</span><span class="p">)):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> Constructor</span> | |||
| <span class="sd"> """</span> | |||
| <span class="n">Device</span><span class="o">.</span><span class="n">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_interface</span> <span class="o">=</span> <span class="n">interface</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_host</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_port</span> <span class="o">=</span> <span class="n">interface</span> | |||
| <div class="viewcode-block" id="SocketDevice.open"><a class="viewcode-back" href="../../pyad2usb.html#pyad2usb.devices.SocketDevice.open">[docs]</a> <span class="k">def</span> <span class="nf">open</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">baudrate</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">interface</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">index</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">no_reader_thread</span><span class="o">=</span><span class="bp">False</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> Opens the device.</span> | |||
| <span class="sd"> """</span> | |||
| <span class="k">if</span> <span class="n">interface</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_interface</span> <span class="o">=</span> <span class="n">interface</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_host</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_port</span> <span class="o">=</span> <span class="n">interface</span> | |||
| <span class="k">try</span><span class="p">:</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_device</span> <span class="o">=</span> <span class="n">socket</span><span class="o">.</span><span class="n">socket</span><span class="p">(</span><span class="n">socket</span><span class="o">.</span><span class="n">AF_INET</span><span class="p">,</span> <span class="n">socket</span><span class="o">.</span><span class="n">SOCK_STREAM</span><span class="p">)</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_device</span><span class="o">.</span><span class="n">connect</span><span class="p">((</span><span class="bp">self</span><span class="o">.</span><span class="n">_host</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_port</span><span class="p">))</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_id</span> <span class="o">=</span> <span class="s">'{0}:{1}'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_host</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_port</span><span class="p">)</span> | |||
| <span class="k">except</span> <span class="n">socket</span><span class="o">.</span><span class="n">error</span><span class="p">,</span> <span class="n">err</span><span class="p">:</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">on_close</span><span class="p">()</span> | |||
| <span class="k">raise</span> <span class="n">util</span><span class="o">.</span><span class="n">NoDeviceError</span><span class="p">(</span><span class="s">'Error opening AD2SOCKET device at {0}:{1}'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_host</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_port</span><span class="p">))</span> | |||
| <span class="k">else</span><span class="p">:</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_running</span> <span class="o">=</span> <span class="bp">True</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">on_open</span><span class="p">((</span><span class="s">'N/A'</span><span class="p">,</span> <span class="s">"AD2SOCKET"</span><span class="p">))</span> | |||
| <span class="k">if</span> <span class="ow">not</span> <span class="n">no_reader_thread</span><span class="p">:</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_read_thread</span><span class="o">.</span><span class="n">start</span><span class="p">()</span> | |||
| </div> | |||
| <div class="viewcode-block" id="SocketDevice.close"><a class="viewcode-back" href="../../pyad2usb.html#pyad2usb.devices.SocketDevice.close">[docs]</a> <span class="k">def</span> <span class="nf">close</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> Closes the device.</span> | |||
| <span class="sd"> """</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_running</span> <span class="o">=</span> <span class="bp">False</span> | |||
| <span class="k">try</span><span class="p">:</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_read_thread</span><span class="o">.</span><span class="n">stop</span><span class="p">()</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_device</span><span class="o">.</span><span class="n">shutdown</span><span class="p">(</span><span class="n">socket</span><span class="o">.</span><span class="n">SHUT_RDWR</span><span class="p">)</span> <span class="c"># Make sure that it closes immediately.</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_device</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> | |||
| <span class="k">except</span><span class="p">:</span> | |||
| <span class="k">pass</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">on_close</span><span class="p">()</span> | |||
| </div> | |||
| <div class="viewcode-block" id="SocketDevice.write"><a class="viewcode-back" href="../../pyad2usb.html#pyad2usb.devices.SocketDevice.write">[docs]</a> <span class="k">def</span> <span class="nf">write</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">data</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> Writes data to the device.</span> | |||
| <span class="sd"> """</span> | |||
| <span class="n">data_sent</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_device</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> | |||
| <span class="k">if</span> <span class="n">data_sent</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> | |||
| <span class="k">raise</span> <span class="n">util</span><span class="o">.</span><span class="n">CommError</span><span class="p">(</span><span class="s">'Error while sending data.'</span><span class="p">)</span> | |||
| <span class="k">else</span><span class="p">:</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">on_write</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> | |||
| <span class="k">return</span> <span class="n">data_sent</span> | |||
| </div> | |||
| <div class="viewcode-block" id="SocketDevice.read"><a class="viewcode-back" href="../../pyad2usb.html#pyad2usb.devices.SocketDevice.read">[docs]</a> <span class="k">def</span> <span class="nf">read</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> Reads a single character from the device.</span> | |||
| <span class="sd"> """</span> | |||
| <span class="k">try</span><span class="p">:</span> | |||
| <span class="n">data</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_device</span><span class="o">.</span><span class="n">recv</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> | |||
| <span class="k">except</span> <span class="n">socket</span><span class="o">.</span><span class="n">error</span><span class="p">,</span> <span class="n">err</span><span class="p">:</span> | |||
| <span class="k">raise</span> <span class="n">util</span><span class="o">.</span><span class="n">CommError</span><span class="p">(</span><span class="s">'Error while reading from device: {0}'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">err</span><span class="p">)))</span> | |||
| <span class="k">return</span> <span class="n">data</span> | |||
| </div> | |||
| <div class="viewcode-block" id="SocketDevice.read_line"><a class="viewcode-back" href="../../pyad2usb.html#pyad2usb.devices.SocketDevice.read_line">[docs]</a> <span class="k">def</span> <span class="nf">read_line</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">timeout</span><span class="o">=</span><span class="mf">0.0</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> Reads a line from the device.</span> | |||
| <span class="sd"> """</span> | |||
| <span class="k">def</span> <span class="nf">timeout_event</span><span class="p">():</span> | |||
| <span class="n">timeout_event</span><span class="o">.</span><span class="n">reading</span> <span class="o">=</span> <span class="bp">False</span> | |||
| <span class="n">timeout_event</span><span class="o">.</span><span class="n">reading</span> <span class="o">=</span> <span class="bp">True</span> | |||
| <span class="n">got_line</span> <span class="o">=</span> <span class="bp">False</span> | |||
| <span class="n">ret</span> <span class="o">=</span> <span class="bp">None</span> | |||
| <span class="n">timer</span> <span class="o">=</span> <span class="bp">None</span> | |||
| <span class="k">if</span> <span class="n">timeout</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span> | |||
| <span class="n">timer</span> <span class="o">=</span> <span class="n">threading</span><span class="o">.</span><span class="n">Timer</span><span class="p">(</span><span class="n">timeout</span><span class="p">,</span> <span class="n">timeout_event</span><span class="p">)</span> | |||
| <span class="n">timer</span><span class="o">.</span><span class="n">start</span><span class="p">()</span> | |||
| <span class="k">try</span><span class="p">:</span> | |||
| <span class="k">while</span> <span class="n">timeout_event</span><span class="o">.</span><span class="n">reading</span><span class="p">:</span> | |||
| <span class="n">buf</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_device</span><span class="o">.</span><span class="n">recv</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> | |||
| <span class="k">if</span> <span class="n">buf</span> <span class="o">!=</span> <span class="s">''</span><span class="p">:</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_buffer</span> <span class="o">+=</span> <span class="n">buf</span> | |||
| <span class="k">if</span> <span class="n">buf</span> <span class="o">==</span> <span class="s">"</span><span class="se">\n</span><span class="s">"</span><span class="p">:</span> | |||
| <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_buffer</span><span class="p">)</span> <span class="o">></span> <span class="mi">1</span><span class="p">:</span> | |||
| <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_buffer</span><span class="p">[</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span> <span class="o">==</span> <span class="s">"</span><span class="se">\r</span><span class="s">"</span><span class="p">:</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_buffer</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_buffer</span><span class="p">[:</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span> | |||
| <span class="c"># ignore if we just got \r\n with nothing else in the buffer.</span> | |||
| <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_buffer</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">:</span> | |||
| <span class="n">got_line</span> <span class="o">=</span> <span class="bp">True</span> | |||
| <span class="k">break</span> | |||
| <span class="k">else</span><span class="p">:</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_buffer</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_buffer</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> | |||
| <span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mf">0.001</span><span class="p">)</span> | |||
| <span class="k">except</span> <span class="n">socket</span><span class="o">.</span><span class="n">error</span><span class="p">,</span> <span class="n">err</span><span class="p">:</span> | |||
| <span class="n">timer</span><span class="o">.</span><span class="n">cancel</span><span class="p">()</span> | |||
| <span class="k">raise</span> <span class="n">util</span><span class="o">.</span><span class="n">CommError</span><span class="p">(</span><span class="s">'Error reading from Socket device: {0}'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">err</span><span class="p">)))</span> | |||
| <span class="k">else</span><span class="p">:</span> | |||
| <span class="k">if</span> <span class="n">got_line</span><span class="p">:</span> | |||
| <span class="n">ret</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_buffer</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_buffer</span> <span class="o">=</span> <span class="s">''</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">on_read</span><span class="p">(</span><span class="n">ret</span><span class="p">)</span> | |||
| <span class="k">if</span> <span class="n">timer</span><span class="p">:</span> | |||
| <span class="k">if</span> <span class="n">timer</span><span class="o">.</span><span class="n">is_alive</span><span class="p">():</span> | |||
| <span class="n">timer</span><span class="o">.</span><span class="n">cancel</span><span class="p">()</span> | |||
| <span class="k">else</span><span class="p">:</span> | |||
| <span class="k">raise</span> <span class="n">util</span><span class="o">.</span><span class="n">TimeoutError</span><span class="p">(</span><span class="s">'Timeout while waiting for line terminator.'</span><span class="p">)</span> | |||
| <span class="k">return</span> <span class="n">ret</span></div></div> | |||
| </pre></div> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| <div class="sphinxsidebar"> | |||
| <div class="sphinxsidebarwrapper"> | |||
| <div id="searchbox" style="display: none"> | |||
| <h3>Quick search</h3> | |||
| <form class="search" action="../../search.html" method="get"> | |||
| <input type="text" name="q" /> | |||
| <input type="submit" value="Go" /> | |||
| <input type="hidden" name="check_keywords" value="yes" /> | |||
| <input type="hidden" name="area" value="default" /> | |||
| </form> | |||
| <p class="searchtip" style="font-size: 90%"> | |||
| Enter search terms or a module, class or function name. | |||
| </p> | |||
| </div> | |||
| <script type="text/javascript">$('#searchbox').show(0);</script> | |||
| </div> | |||
| </div> | |||
| <div class="clearer"></div> | |||
| </div> | |||
| <div class="related"> | |||
| <h3>Navigation</h3> | |||
| <ul> | |||
| <li class="right" style="margin-right: 10px"> | |||
| <a href="../../genindex.html" title="General Index" | |||
| >index</a></li> | |||
| <li class="right" > | |||
| <a href="../../py-modindex.html" title="Python Module Index" | |||
| >modules</a> |</li> | |||
| <li><a href="../../index.html">pyad2usb documentation</a> »</li> | |||
| <li><a href="../index.html" >Module code</a> »</li> | |||
| </ul> | |||
| </div> | |||
| <div class="footer"> | |||
| © Copyright 2013, Author. | |||
| Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2b1. | |||
| </div> | |||
| </body> | |||
| </html> | |||
| @@ -0,0 +1,163 @@ | |||
| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" | |||
| "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> | |||
| <html xmlns="http://www.w3.org/1999/xhtml"> | |||
| <head> | |||
| <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> | |||
| <title>pyad2usb.event.event — pyad2usb documentation</title> | |||
| <link rel="stylesheet" href="../../../_static/default.css" type="text/css" /> | |||
| <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" /> | |||
| <script type="text/javascript"> | |||
| var DOCUMENTATION_OPTIONS = { | |||
| URL_ROOT: '../../../', | |||
| VERSION: '', | |||
| COLLAPSE_INDEX: false, | |||
| FILE_SUFFIX: '.html', | |||
| HAS_SOURCE: true | |||
| }; | |||
| </script> | |||
| <script type="text/javascript" src="../../../_static/jquery.js"></script> | |||
| <script type="text/javascript" src="../../../_static/underscore.js"></script> | |||
| <script type="text/javascript" src="../../../_static/doctools.js"></script> | |||
| <link rel="top" title="pyad2usb documentation" href="../../../index.html" /> | |||
| <link rel="up" title="Module code" href="../../index.html" /> | |||
| </head> | |||
| <body> | |||
| <div class="related"> | |||
| <h3>Navigation</h3> | |||
| <ul> | |||
| <li class="right" style="margin-right: 10px"> | |||
| <a href="../../../genindex.html" title="General Index" | |||
| accesskey="I">index</a></li> | |||
| <li class="right" > | |||
| <a href="../../../py-modindex.html" title="Python Module Index" | |||
| >modules</a> |</li> | |||
| <li><a href="../../../index.html">pyad2usb documentation</a> »</li> | |||
| <li><a href="../../index.html" accesskey="U">Module code</a> »</li> | |||
| </ul> | |||
| </div> | |||
| <div class="document"> | |||
| <div class="documentwrapper"> | |||
| <div class="bodywrapper"> | |||
| <div class="body"> | |||
| <h1>Source code for pyad2usb.event.event</h1><div class="highlight"><pre> | |||
| <span class="c"># event.py (improved)</span> | |||
| <div class="viewcode-block" id="Event"><a class="viewcode-back" href="../../../pyad2usb.event.html#pyad2usb.event.event.Event">[docs]</a><span class="k">class</span> <span class="nc">Event</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> | |||
| <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">doc</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">__doc__</span> <span class="o">=</span> <span class="n">doc</span> | |||
| <span class="k">def</span> <span class="nf">__get__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">obj</span><span class="p">,</span> <span class="n">objtype</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span> | |||
| <span class="k">if</span> <span class="n">obj</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span> | |||
| <span class="k">return</span> <span class="bp">self</span> | |||
| <span class="k">return</span> <span class="n">EventHandler</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">obj</span><span class="p">)</span> | |||
| <span class="k">def</span> <span class="nf">__set__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">obj</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span> | |||
| <span class="k">pass</span> | |||
| </div> | |||
| <div class="viewcode-block" id="EventHandler"><a class="viewcode-back" href="../../../pyad2usb.event.html#pyad2usb.event.event.EventHandler">[docs]</a><span class="k">class</span> <span class="nc">EventHandler</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> | |||
| <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">event</span><span class="p">,</span> <span class="n">obj</span><span class="p">):</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">event</span> <span class="o">=</span> <span class="n">event</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">obj</span> <span class="o">=</span> <span class="n">obj</span> | |||
| <span class="k">def</span> <span class="nf">_getfunctionlist</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> | |||
| <span class="sd">"""(internal use) """</span> | |||
| <span class="k">try</span><span class="p">:</span> | |||
| <span class="n">eventhandler</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">obj</span><span class="o">.</span><span class="n">__eventhandler__</span> | |||
| <span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span> | |||
| <span class="n">eventhandler</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">obj</span><span class="o">.</span><span class="n">__eventhandler__</span> <span class="o">=</span> <span class="p">{}</span> | |||
| <span class="k">return</span> <span class="n">eventhandler</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">event</span><span class="p">,</span> <span class="p">[])</span> | |||
| <div class="viewcode-block" id="EventHandler.add"><a class="viewcode-back" href="../../../pyad2usb.event.html#pyad2usb.event.event.EventHandler.add">[docs]</a> <span class="k">def</span> <span class="nf">add</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">func</span><span class="p">):</span> | |||
| <span class="sd">"""Add new event handler function.</span> | |||
| <span class="sd"> Event handler function must be defined like func(sender, earg).</span> | |||
| <span class="sd"> You can add handler also by using '+=' operator.</span> | |||
| <span class="sd"> """</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_getfunctionlist</span><span class="p">()</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">func</span><span class="p">)</span> | |||
| <span class="k">return</span> <span class="bp">self</span> | |||
| </div> | |||
| <div class="viewcode-block" id="EventHandler.remove"><a class="viewcode-back" href="../../../pyad2usb.event.html#pyad2usb.event.event.EventHandler.remove">[docs]</a> <span class="k">def</span> <span class="nf">remove</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">func</span><span class="p">):</span> | |||
| <span class="sd">"""Remove existing event handler function.</span> | |||
| <span class="sd"> You can remove handler also by using '-=' operator.</span> | |||
| <span class="sd"> """</span> | |||
| <span class="bp">self</span><span class="o">.</span><span class="n">_getfunctionlist</span><span class="p">()</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">func</span><span class="p">)</span> | |||
| <span class="k">return</span> <span class="bp">self</span> | |||
| </div> | |||
| <div class="viewcode-block" id="EventHandler.fire"><a class="viewcode-back" href="../../../pyad2usb.event.html#pyad2usb.event.event.EventHandler.fire">[docs]</a> <span class="k">def</span> <span class="nf">fire</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">earg</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span> | |||
| <span class="sd">"""Fire event and call all handler functions</span> | |||
| <span class="sd"> You can call EventHandler object itself like e(earg) instead of</span> | |||
| <span class="sd"> e.fire(earg).</span> | |||
| <span class="sd"> """</span> | |||
| <span class="k">for</span> <span class="n">func</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_getfunctionlist</span><span class="p">():</span> | |||
| <span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">func</span><span class="p">)</span> <span class="o">==</span> <span class="n">EventHandler</span><span class="p">:</span> | |||
| <span class="n">func</span><span class="o">.</span><span class="n">fire</span><span class="p">(</span><span class="n">earg</span><span class="p">)</span> | |||
| <span class="k">else</span><span class="p">:</span> | |||
| <span class="n">func</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">obj</span><span class="p">,</span> <span class="n">earg</span><span class="p">)</span> | |||
| </div> | |||
| <span class="n">__iadd__</span> <span class="o">=</span> <span class="n">add</span> | |||
| <span class="n">__isub__</span> <span class="o">=</span> <span class="n">remove</span> | |||
| <span class="n">__call__</span> <span class="o">=</span> <span class="n">fire</span></div> | |||
| </pre></div> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| <div class="sphinxsidebar"> | |||
| <div class="sphinxsidebarwrapper"> | |||
| <div id="searchbox" style="display: none"> | |||
| <h3>Quick search</h3> | |||
| <form class="search" action="../../../search.html" method="get"> | |||
| <input type="text" name="q" /> | |||
| <input type="submit" value="Go" /> | |||
| <input type="hidden" name="check_keywords" value="yes" /> | |||
| <input type="hidden" name="area" value="default" /> | |||
| </form> | |||
| <p class="searchtip" style="font-size: 90%"> | |||
| Enter search terms or a module, class or function name. | |||
| </p> | |||
| </div> | |||
| <script type="text/javascript">$('#searchbox').show(0);</script> | |||
| </div> | |||
| </div> | |||
| <div class="clearer"></div> | |||
| </div> | |||
| <div class="related"> | |||
| <h3>Navigation</h3> | |||
| <ul> | |||
| <li class="right" style="margin-right: 10px"> | |||
| <a href="../../../genindex.html" title="General Index" | |||
| >index</a></li> | |||
| <li class="right" > | |||
| <a href="../../../py-modindex.html" title="Python Module Index" | |||
| >modules</a> |</li> | |||
| <li><a href="../../../index.html">pyad2usb documentation</a> »</li> | |||
| <li><a href="../../index.html" >Module code</a> »</li> | |||
| </ul> | |||
| </div> | |||
| <div class="footer"> | |||
| © Copyright 2013, Author. | |||
| Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2b1. | |||
| </div> | |||
| </body> | |||
| </html> | |||
| @@ -0,0 +1,230 @@ | |||
| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" | |||
| "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> | |||
| <html xmlns="http://www.w3.org/1999/xhtml"> | |||
| <head> | |||
| <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> | |||
| <title>pyad2usb.util — pyad2usb documentation</title> | |||
| <link rel="stylesheet" href="../../_static/default.css" type="text/css" /> | |||
| <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> | |||
| <script type="text/javascript"> | |||
| var DOCUMENTATION_OPTIONS = { | |||
| URL_ROOT: '../../', | |||
| VERSION: '', | |||
| COLLAPSE_INDEX: false, | |||
| FILE_SUFFIX: '.html', | |||
| HAS_SOURCE: true | |||
| }; | |||
| </script> | |||
| <script type="text/javascript" src="../../_static/jquery.js"></script> | |||
| <script type="text/javascript" src="../../_static/underscore.js"></script> | |||
| <script type="text/javascript" src="../../_static/doctools.js"></script> | |||
| <link rel="top" title="pyad2usb documentation" href="../../index.html" /> | |||
| <link rel="up" title="Module code" href="../index.html" /> | |||
| </head> | |||
| <body> | |||
| <div class="related"> | |||
| <h3>Navigation</h3> | |||
| <ul> | |||
| <li class="right" style="margin-right: 10px"> | |||
| <a href="../../genindex.html" title="General Index" | |||
| accesskey="I">index</a></li> | |||
| <li class="right" > | |||
| <a href="../../py-modindex.html" title="Python Module Index" | |||
| >modules</a> |</li> | |||
| <li><a href="../../index.html">pyad2usb documentation</a> »</li> | |||
| <li><a href="../index.html" accesskey="U">Module code</a> »</li> | |||
| </ul> | |||
| </div> | |||
| <div class="document"> | |||
| <div class="documentwrapper"> | |||
| <div class="bodywrapper"> | |||
| <div class="body"> | |||
| <h1>Source code for pyad2usb.util</h1><div class="highlight"><pre> | |||
| <span class="sd">"""</span> | |||
| <span class="sd">Provides utility classes for the AD2USB devices.</span> | |||
| <span class="sd">"""</span> | |||
| <span class="kn">import</span> <span class="nn">ad2usb</span> | |||
| <span class="kn">import</span> <span class="nn">time</span> | |||
| <span class="kn">import</span> <span class="nn">traceback</span> | |||
| <span class="kn">import</span> <span class="nn">threading</span> | |||
| <div class="viewcode-block" id="NoDeviceError"><a class="viewcode-back" href="../../pyad2usb.html#pyad2usb.util.NoDeviceError">[docs]</a><span class="k">class</span> <span class="nc">NoDeviceError</span><span class="p">(</span><span class="ne">Exception</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> No devices found.</span> | |||
| <span class="sd"> """</span> | |||
| <span class="k">pass</span> | |||
| </div> | |||
| <div class="viewcode-block" id="CommError"><a class="viewcode-back" href="../../pyad2usb.html#pyad2usb.util.CommError">[docs]</a><span class="k">class</span> <span class="nc">CommError</span><span class="p">(</span><span class="ne">Exception</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> There was an error communicating with the device.</span> | |||
| <span class="sd"> """</span> | |||
| <span class="k">pass</span> | |||
| </div> | |||
| <div class="viewcode-block" id="TimeoutError"><a class="viewcode-back" href="../../pyad2usb.html#pyad2usb.util.TimeoutError">[docs]</a><span class="k">class</span> <span class="nc">TimeoutError</span><span class="p">(</span><span class="ne">Exception</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> There was a timeout while trying to communicate with the device.</span> | |||
| <span class="sd"> """</span> | |||
| <span class="k">pass</span> | |||
| </div> | |||
| <div class="viewcode-block" id="InvalidMessageError"><a class="viewcode-back" href="../../pyad2usb.html#pyad2usb.util.InvalidMessageError">[docs]</a><span class="k">class</span> <span class="nc">InvalidMessageError</span><span class="p">(</span><span class="ne">Exception</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> The format of the panel message was invalid.</span> | |||
| <span class="sd"> """</span> | |||
| <span class="k">pass</span> | |||
| </div> | |||
| <div class="viewcode-block" id="Firmware"><a class="viewcode-back" href="../../pyad2usb.html#pyad2usb.util.Firmware">[docs]</a><span class="k">class</span> <span class="nc">Firmware</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> Represents firmware for the AD2USB/AD2SERIAL devices.</span> | |||
| <span class="sd"> """</span> | |||
| <span class="c"># Constants</span> | |||
| <span class="n">STAGE_START</span> <span class="o">=</span> <span class="mi">0</span> | |||
| <span class="n">STAGE_WAITING</span> <span class="o">=</span> <span class="mi">1</span> | |||
| <span class="n">STAGE_BOOT</span> <span class="o">=</span> <span class="mi">2</span> | |||
| <span class="n">STAGE_LOAD</span> <span class="o">=</span> <span class="mi">3</span> | |||
| <span class="n">STAGE_UPLOADING</span> <span class="o">=</span> <span class="mi">4</span> | |||
| <span class="n">STAGE_DONE</span> <span class="o">=</span> <span class="mi">5</span> | |||
| <span class="nd">@staticmethod</span> | |||
| <div class="viewcode-block" id="Firmware.upload"><a class="viewcode-back" href="../../pyad2usb.html#pyad2usb.util.Firmware.upload">[docs]</a> <span class="k">def</span> <span class="nf">upload</span><span class="p">(</span><span class="n">dev</span><span class="p">,</span> <span class="n">filename</span><span class="p">,</span> <span class="n">progress_callback</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> Uploads firmware to an AD2USB/AD2SERIAL device.</span> | |||
| <span class="sd"> """</span> | |||
| <span class="k">def</span> <span class="nf">do_upload</span><span class="p">():</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> Perform the actual firmware upload to the device.</span> | |||
| <span class="sd"> """</span> | |||
| <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">filename</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span> | |||
| <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">f</span><span class="p">:</span> | |||
| <span class="n">line</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">rstrip</span><span class="p">()</span> | |||
| <span class="k">if</span> <span class="n">line</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s">':'</span><span class="p">:</span> | |||
| <span class="n">dev</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">line</span> <span class="o">+</span> <span class="s">"</span><span class="se">\r</span><span class="s">"</span><span class="p">)</span> | |||
| <span class="n">res</span> <span class="o">=</span> <span class="n">dev</span><span class="o">.</span><span class="n">read_line</span><span class="p">(</span><span class="n">timeout</span><span class="o">=</span><span class="mf">10.0</span><span class="p">)</span> | |||
| <span class="k">if</span> <span class="n">progress_callback</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span> | |||
| <span class="n">progress_callback</span><span class="p">(</span><span class="n">Firmware</span><span class="o">.</span><span class="n">STAGE_UPLOADING</span><span class="p">)</span> | |||
| <span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mf">0.05</span><span class="p">)</span> | |||
| <span class="k">def</span> <span class="nf">read_until</span><span class="p">(</span><span class="n">pattern</span><span class="p">,</span> <span class="n">timeout</span><span class="o">=</span><span class="mf">0.0</span><span class="p">):</span> | |||
| <span class="sd">"""</span> | |||
| <span class="sd"> Read characters until a specific pattern is found or the timeout is hit.</span> | |||
| <span class="sd"> """</span> | |||
| <span class="k">def</span> <span class="nf">timeout_event</span><span class="p">():</span> | |||
| <span class="n">timeout_event</span><span class="o">.</span><span class="n">reading</span> <span class="o">=</span> <span class="bp">False</span> | |||
| <span class="n">timeout_event</span><span class="o">.</span><span class="n">reading</span> <span class="o">=</span> <span class="bp">True</span> | |||
| <span class="n">timer</span> <span class="o">=</span> <span class="bp">None</span> | |||
| <span class="k">if</span> <span class="n">timeout</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span> | |||
| <span class="n">timer</span> <span class="o">=</span> <span class="n">threading</span><span class="o">.</span><span class="n">Timer</span><span class="p">(</span><span class="n">timeout</span><span class="p">,</span> <span class="n">timeout_event</span><span class="p">)</span> | |||
| <span class="n">timer</span><span class="o">.</span><span class="n">start</span><span class="p">()</span> | |||
| <span class="n">buf</span> <span class="o">=</span> <span class="s">''</span> | |||
| <span class="n">position</span> <span class="o">=</span> <span class="mi">0</span> | |||
| <span class="k">while</span> <span class="n">timeout_event</span><span class="o">.</span><span class="n">reading</span><span class="p">:</span> | |||
| <span class="k">try</span><span class="p">:</span> | |||
| <span class="n">char</span> <span class="o">=</span> <span class="n">dev</span><span class="o">.</span><span class="n">read</span><span class="p">()</span> | |||
| <span class="k">if</span> <span class="n">char</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span> <span class="ow">and</span> <span class="n">char</span> <span class="o">!=</span> <span class="s">''</span><span class="p">:</span> | |||
| <span class="k">if</span> <span class="n">char</span> <span class="o">==</span> <span class="n">pattern</span><span class="p">[</span><span class="n">position</span><span class="p">]:</span> | |||
| <span class="n">position</span> <span class="o">=</span> <span class="n">position</span> <span class="o">+</span> <span class="mi">1</span> | |||
| <span class="k">if</span> <span class="n">position</span> <span class="o">==</span> <span class="nb">len</span><span class="p">(</span><span class="n">pattern</span><span class="p">):</span> | |||
| <span class="k">break</span> | |||
| <span class="k">else</span><span class="p">:</span> | |||
| <span class="n">position</span> <span class="o">=</span> <span class="mi">0</span> | |||
| <span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">err</span><span class="p">:</span> | |||
| <span class="k">pass</span> | |||
| <span class="k">if</span> <span class="n">timer</span><span class="p">:</span> | |||
| <span class="k">if</span> <span class="n">timer</span><span class="o">.</span><span class="n">is_alive</span><span class="p">():</span> | |||
| <span class="n">timer</span><span class="o">.</span><span class="n">cancel</span><span class="p">()</span> | |||
| <span class="k">else</span><span class="p">:</span> | |||
| <span class="k">raise</span> <span class="n">TimeoutError</span><span class="p">(</span><span class="s">'Timeout while waiting for line terminator.'</span><span class="p">)</span> | |||
| <span class="k">def</span> <span class="nf">stage_callback</span><span class="p">(</span><span class="n">stage</span><span class="p">):</span> | |||
| <span class="k">if</span> <span class="n">progress_callback</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">None</span><span class="p">:</span> | |||
| <span class="n">progress_callback</span><span class="p">(</span><span class="n">stage</span><span class="p">)</span> | |||
| <span class="k">if</span> <span class="n">dev</span> <span class="ow">is</span> <span class="bp">None</span><span class="p">:</span> | |||
| <span class="k">raise</span> <span class="n">NoDeviceError</span><span class="p">(</span><span class="s">'No device specified for firmware upload.'</span><span class="p">)</span> | |||
| <span class="n">stage_callback</span><span class="p">(</span><span class="n">Firmware</span><span class="o">.</span><span class="n">STAGE_START</span><span class="p">)</span> | |||
| <span class="k">if</span> <span class="n">dev</span><span class="o">.</span><span class="n">is_reader_alive</span><span class="p">():</span> | |||
| <span class="c"># Close the reader thread and wait for it to die, otherwise</span> | |||
| <span class="c"># it interferes with our reading.</span> | |||
| <span class="n">dev</span><span class="o">.</span><span class="n">stop_reader</span><span class="p">()</span> | |||
| <span class="k">while</span> <span class="n">dev</span><span class="o">.</span><span class="n">_read_thread</span><span class="o">.</span><span class="n">is_alive</span><span class="p">():</span> | |||
| <span class="n">stage_callback</span><span class="p">(</span><span class="n">Firmware</span><span class="o">.</span><span class="n">STAGE_WAITING</span><span class="p">)</span> | |||
| <span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> | |||
| <span class="c"># Reboot the device and wait for the boot loader.</span> | |||
| <span class="n">stage_callback</span><span class="p">(</span><span class="n">Firmware</span><span class="o">.</span><span class="n">STAGE_BOOT</span><span class="p">)</span> | |||
| <span class="n">dev</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s">"="</span><span class="p">)</span> | |||
| <span class="n">read_until</span><span class="p">(</span><span class="s">'!boot'</span><span class="p">,</span> <span class="n">timeout</span><span class="o">=</span><span class="mf">15.0</span><span class="p">)</span> | |||
| <span class="c"># Get ourselves into the boot loader and wait for indication</span> | |||
| <span class="c"># that it's ready for the firmware upload.</span> | |||
| <span class="n">stage_callback</span><span class="p">(</span><span class="n">Firmware</span><span class="o">.</span><span class="n">STAGE_LOAD</span><span class="p">)</span> | |||
| <span class="n">dev</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s">"="</span><span class="p">)</span> | |||
| <span class="n">read_until</span><span class="p">(</span><span class="s">'!load'</span><span class="p">,</span> <span class="n">timeout</span><span class="o">=</span><span class="mf">15.0</span><span class="p">)</span> | |||
| <span class="c"># And finally do the upload.</span> | |||
| <span class="n">do_upload</span><span class="p">()</span> | |||
| <span class="n">stage_callback</span><span class="p">(</span><span class="n">Firmware</span><span class="o">.</span><span class="n">STAGE_DONE</span><span class="p">)</span></div></div> | |||
| </pre></div> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| <div class="sphinxsidebar"> | |||
| <div class="sphinxsidebarwrapper"> | |||
| <div id="searchbox" style="display: none"> | |||
| <h3>Quick search</h3> | |||
| <form class="search" action="../../search.html" method="get"> | |||
| <input type="text" name="q" /> | |||
| <input type="submit" value="Go" /> | |||
| <input type="hidden" name="check_keywords" value="yes" /> | |||
| <input type="hidden" name="area" value="default" /> | |||
| </form> | |||
| <p class="searchtip" style="font-size: 90%"> | |||
| Enter search terms or a module, class or function name. | |||
| </p> | |||
| </div> | |||
| <script type="text/javascript">$('#searchbox').show(0);</script> | |||
| </div> | |||
| </div> | |||
| <div class="clearer"></div> | |||
| </div> | |||
| <div class="related"> | |||
| <h3>Navigation</h3> | |||
| <ul> | |||
| <li class="right" style="margin-right: 10px"> | |||
| <a href="../../genindex.html" title="General Index" | |||
| >index</a></li> | |||
| <li class="right" > | |||
| <a href="../../py-modindex.html" title="Python Module Index" | |||
| >modules</a> |</li> | |||
| <li><a href="../../index.html">pyad2usb documentation</a> »</li> | |||
| <li><a href="../index.html" >Module code</a> »</li> | |||
| </ul> | |||
| </div> | |||
| <div class="footer"> | |||
| © Copyright 2013, Author. | |||
| Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2b1. | |||
| </div> | |||
| </body> | |||
| </html> | |||
| @@ -0,0 +1,23 @@ | |||
| .. pyad2usb documentation master file, created by | |||
| sphinx-quickstart on Sat Jun 8 14:38:46 2013. | |||
| You can adapt this file completely to your liking, but it should at least | |||
| contain the root `toctree` directive. | |||
| Welcome to pyad2usb's documentation! | |||
| ==================================== | |||
| Contents: | |||
| .. toctree:: | |||
| :maxdepth: 4 | |||
| pyad2usb | |||
| Indices and tables | |||
| ================== | |||
| * :ref:`genindex` | |||
| * :ref:`modindex` | |||
| * :ref:`search` | |||
| @@ -0,0 +1,7 @@ | |||
| pyad2usb | |||
| ======== | |||
| .. toctree:: | |||
| :maxdepth: 4 | |||
| pyad2usb | |||
| @@ -0,0 +1,19 @@ | |||
| event Package | |||
| ============= | |||
| :mod:`event` Package | |||
| -------------------- | |||
| .. automodule:: pyad2usb.event | |||
| :members: | |||
| :undoc-members: | |||
| :show-inheritance: | |||
| :mod:`event` Module | |||
| ------------------- | |||
| .. automodule:: pyad2usb.event.event | |||
| :members: | |||
| :undoc-members: | |||
| :show-inheritance: | |||
| @@ -0,0 +1,42 @@ | |||
| pyad2usb Package | |||
| ================ | |||
| :mod:`pyad2usb` Package | |||
| ----------------------- | |||
| .. automodule:: pyad2usb.__init__ | |||
| :members: | |||
| :undoc-members: | |||
| :show-inheritance: | |||
| :mod:`ad2usb` Module | |||
| -------------------- | |||
| .. automodule:: pyad2usb.ad2usb | |||
| :members: | |||
| :undoc-members: | |||
| :show-inheritance: | |||
| :mod:`devices` Module | |||
| --------------------- | |||
| .. automodule:: pyad2usb.devices | |||
| :members: | |||
| :undoc-members: | |||
| :show-inheritance: | |||
| :mod:`util` Module | |||
| ------------------ | |||
| .. automodule:: pyad2usb.util | |||
| :members: | |||
| :undoc-members: | |||
| :show-inheritance: | |||
| Subpackages | |||
| ----------- | |||
| .. toctree:: | |||
| pyad2usb.event | |||
| @@ -0,0 +1,540 @@ | |||
| /* | |||
| * basic.css | |||
| * ~~~~~~~~~ | |||
| * | |||
| * Sphinx stylesheet -- basic theme. | |||
| * | |||
| * :copyright: Copyright 2007-2013 by the Sphinx team, see AUTHORS. | |||
| * :license: BSD, see LICENSE for details. | |||
| * | |||
| */ | |||
| /* -- main layout ----------------------------------------------------------- */ | |||
| div.clearer { | |||
| clear: both; | |||
| } | |||
| /* -- relbar ---------------------------------------------------------------- */ | |||
| div.related { | |||
| width: 100%; | |||
| font-size: 90%; | |||
| } | |||
| div.related h3 { | |||
| display: none; | |||
| } | |||
| div.related ul { | |||
| margin: 0; | |||
| padding: 0 0 0 10px; | |||
| list-style: none; | |||
| } | |||
| div.related li { | |||
| display: inline; | |||
| } | |||
| div.related li.right { | |||
| float: right; | |||
| margin-right: 5px; | |||
| } | |||
| /* -- sidebar --------------------------------------------------------------- */ | |||
| div.sphinxsidebarwrapper { | |||
| padding: 10px 5px 0 10px; | |||
| } | |||
| div.sphinxsidebar { | |||
| float: left; | |||
| width: 230px; | |||
| margin-left: -100%; | |||
| font-size: 90%; | |||
| } | |||
| div.sphinxsidebar ul { | |||
| list-style: none; | |||
| } | |||
| div.sphinxsidebar ul ul, | |||
| div.sphinxsidebar ul.want-points { | |||
| margin-left: 20px; | |||
| list-style: square; | |||
| } | |||
| div.sphinxsidebar ul ul { | |||
| margin-top: 0; | |||
| margin-bottom: 0; | |||
| } | |||
| div.sphinxsidebar form { | |||
| margin-top: 10px; | |||
| } | |||
| div.sphinxsidebar input { | |||
| border: 1px solid #98dbcc; | |||
| font-family: sans-serif; | |||
| font-size: 1em; | |||
| } | |||
| div.sphinxsidebar #searchbox input[type="text"] { | |||
| width: 170px; | |||
| } | |||
| div.sphinxsidebar #searchbox input[type="submit"] { | |||
| width: 30px; | |||
| } | |||
| img { | |||
| border: 0; | |||
| } | |||
| /* -- search page ----------------------------------------------------------- */ | |||
| ul.search { | |||
| margin: 10px 0 0 20px; | |||
| padding: 0; | |||
| } | |||
| ul.search li { | |||
| padding: 5px 0 5px 20px; | |||
| background-image: url(file.png); | |||
| background-repeat: no-repeat; | |||
| background-position: 0 7px; | |||
| } | |||
| ul.search li a { | |||
| font-weight: bold; | |||
| } | |||
| ul.search li div.context { | |||
| color: #888; | |||
| margin: 2px 0 0 30px; | |||
| text-align: left; | |||
| } | |||
| ul.keywordmatches li.goodmatch a { | |||
| font-weight: bold; | |||
| } | |||
| /* -- index page ------------------------------------------------------------ */ | |||
| table.contentstable { | |||
| width: 90%; | |||
| } | |||
| table.contentstable p.biglink { | |||
| line-height: 150%; | |||
| } | |||
| a.biglink { | |||
| font-size: 1.3em; | |||
| } | |||
| span.linkdescr { | |||
| font-style: italic; | |||
| padding-top: 5px; | |||
| font-size: 90%; | |||
| } | |||
| /* -- general index --------------------------------------------------------- */ | |||
| table.indextable { | |||
| width: 100%; | |||
| } | |||
| table.indextable td { | |||
| text-align: left; | |||
| vertical-align: top; | |||
| } | |||
| table.indextable dl, table.indextable dd { | |||
| margin-top: 0; | |||
| margin-bottom: 0; | |||
| } | |||
| table.indextable tr.pcap { | |||
| height: 10px; | |||
| } | |||
| table.indextable tr.cap { | |||
| margin-top: 10px; | |||
| background-color: #f2f2f2; | |||
| } | |||
| img.toggler { | |||
| margin-right: 3px; | |||
| margin-top: 3px; | |||
| cursor: pointer; | |||
| } | |||
| div.modindex-jumpbox { | |||
| border-top: 1px solid #ddd; | |||
| border-bottom: 1px solid #ddd; | |||
| margin: 1em 0 1em 0; | |||
| padding: 0.4em; | |||
| } | |||
| div.genindex-jumpbox { | |||
| border-top: 1px solid #ddd; | |||
| border-bottom: 1px solid #ddd; | |||
| margin: 1em 0 1em 0; | |||
| padding: 0.4em; | |||
| } | |||
| /* -- general body styles --------------------------------------------------- */ | |||
| a.headerlink { | |||
| visibility: hidden; | |||
| } | |||
| h1:hover > a.headerlink, | |||
| h2:hover > a.headerlink, | |||
| h3:hover > a.headerlink, | |||
| h4:hover > a.headerlink, | |||
| h5:hover > a.headerlink, | |||
| h6:hover > a.headerlink, | |||
| dt:hover > a.headerlink { | |||
| visibility: visible; | |||
| } | |||
| div.body p.caption { | |||
| text-align: inherit; | |||
| } | |||
| div.body td { | |||
| text-align: left; | |||
| } | |||
| .field-list ul { | |||
| padding-left: 1em; | |||
| } | |||
| .first { | |||
| margin-top: 0 !important; | |||
| } | |||
| p.rubric { | |||
| margin-top: 30px; | |||
| font-weight: bold; | |||
| } | |||
| img.align-left, .figure.align-left, object.align-left { | |||
| clear: left; | |||
| float: left; | |||
| margin-right: 1em; | |||
| } | |||
| img.align-right, .figure.align-right, object.align-right { | |||
| clear: right; | |||
| float: right; | |||
| margin-left: 1em; | |||
| } | |||
| img.align-center, .figure.align-center, object.align-center { | |||
| display: block; | |||
| margin-left: auto; | |||
| margin-right: auto; | |||
| } | |||
| .align-left { | |||
| text-align: left; | |||
| } | |||
| .align-center { | |||
| text-align: center; | |||
| } | |||
| .align-right { | |||
| text-align: right; | |||
| } | |||
| /* -- sidebars -------------------------------------------------------------- */ | |||
| div.sidebar { | |||
| margin: 0 0 0.5em 1em; | |||
| border: 1px solid #ddb; | |||
| padding: 7px 7px 0 7px; | |||
| background-color: #ffe; | |||
| width: 40%; | |||
| float: right; | |||
| } | |||
| p.sidebar-title { | |||
| font-weight: bold; | |||
| } | |||
| /* -- topics ---------------------------------------------------------------- */ | |||
| div.topic { | |||
| border: 1px solid #ccc; | |||
| padding: 7px 7px 0 7px; | |||
| margin: 10px 0 10px 0; | |||
| } | |||
| p.topic-title { | |||
| font-size: 1.1em; | |||
| font-weight: bold; | |||
| margin-top: 10px; | |||
| } | |||
| /* -- admonitions ----------------------------------------------------------- */ | |||
| div.admonition { | |||
| margin-top: 10px; | |||
| margin-bottom: 10px; | |||
| padding: 7px; | |||
| } | |||
| div.admonition dt { | |||
| font-weight: bold; | |||
| } | |||
| div.admonition dl { | |||
| margin-bottom: 0; | |||
| } | |||
| p.admonition-title { | |||
| margin: 0px 10px 5px 0px; | |||
| font-weight: bold; | |||
| } | |||
| div.body p.centered { | |||
| text-align: center; | |||
| margin-top: 25px; | |||
| } | |||
| /* -- tables ---------------------------------------------------------------- */ | |||
| table.docutils { | |||
| border: 0; | |||
| border-collapse: collapse; | |||
| } | |||
| table.docutils td, table.docutils th { | |||
| padding: 1px 8px 1px 5px; | |||
| border-top: 0; | |||
| border-left: 0; | |||
| border-right: 0; | |||
| border-bottom: 1px solid #aaa; | |||
| } | |||
| table.field-list td, table.field-list th { | |||
| border: 0 !important; | |||
| } | |||
| table.footnote td, table.footnote th { | |||
| border: 0 !important; | |||
| } | |||
| th { | |||
| text-align: left; | |||
| padding-right: 5px; | |||
| } | |||
| table.citation { | |||
| border-left: solid 1px gray; | |||
| margin-left: 1px; | |||
| } | |||
| table.citation td { | |||
| border-bottom: none; | |||
| } | |||
| /* -- other body styles ----------------------------------------------------- */ | |||
| ol.arabic { | |||
| list-style: decimal; | |||
| } | |||
| ol.loweralpha { | |||
| list-style: lower-alpha; | |||
| } | |||
| ol.upperalpha { | |||
| list-style: upper-alpha; | |||
| } | |||
| ol.lowerroman { | |||
| list-style: lower-roman; | |||
| } | |||
| ol.upperroman { | |||
| list-style: upper-roman; | |||
| } | |||
| dl { | |||
| margin-bottom: 15px; | |||
| } | |||
| dd p { | |||
| margin-top: 0px; | |||
| } | |||
| dd ul, dd table { | |||
| margin-bottom: 10px; | |||
| } | |||
| dd { | |||
| margin-top: 3px; | |||
| margin-bottom: 10px; | |||
| margin-left: 30px; | |||
| } | |||
| dt:target, .highlighted { | |||
| background-color: #fbe54e; | |||
| } | |||
| dl.glossary dt { | |||
| font-weight: bold; | |||
| font-size: 1.1em; | |||
| } | |||
| .field-list ul { | |||
| margin: 0; | |||
| padding-left: 1em; | |||
| } | |||
| .field-list p { | |||
| margin: 0; | |||
| } | |||
| .refcount { | |||
| color: #060; | |||
| } | |||
| .optional { | |||
| font-size: 1.3em; | |||
| } | |||
| .versionmodified { | |||
| font-style: italic; | |||
| } | |||
| .system-message { | |||
| background-color: #fda; | |||
| padding: 5px; | |||
| border: 3px solid red; | |||
| } | |||
| .footnote:target { | |||
| background-color: #ffa; | |||
| } | |||
| .line-block { | |||
| display: block; | |||
| margin-top: 1em; | |||
| margin-bottom: 1em; | |||
| } | |||
| .line-block .line-block { | |||
| margin-top: 0; | |||
| margin-bottom: 0; | |||
| margin-left: 1.5em; | |||
| } | |||
| .guilabel, .menuselection { | |||
| font-family: sans-serif; | |||
| } | |||
| .accelerator { | |||
| text-decoration: underline; | |||
| } | |||
| .classifier { | |||
| font-style: oblique; | |||
| } | |||
| abbr, acronym { | |||
| border-bottom: dotted 1px; | |||
| cursor: help; | |||
| } | |||
| /* -- code displays --------------------------------------------------------- */ | |||
| pre { | |||
| overflow: auto; | |||
| overflow-y: hidden; /* fixes display issues on Chrome browsers */ | |||
| } | |||
| td.linenos pre { | |||
| padding: 5px 0px; | |||
| border: 0; | |||
| background-color: transparent; | |||
| color: #aaa; | |||
| } | |||
| table.highlighttable { | |||
| margin-left: 0.5em; | |||
| } | |||
| table.highlighttable td { | |||
| padding: 0 0.5em 0 0.5em; | |||
| } | |||
| tt.descname { | |||
| background-color: transparent; | |||
| font-weight: bold; | |||
| font-size: 1.2em; | |||
| } | |||
| tt.descclassname { | |||
| background-color: transparent; | |||
| } | |||
| tt.xref, a tt { | |||
| background-color: transparent; | |||
| font-weight: bold; | |||
| } | |||
| h1 tt, h2 tt, h3 tt, h4 tt, h5 tt, h6 tt { | |||
| background-color: transparent; | |||
| } | |||
| .viewcode-link { | |||
| float: right; | |||
| } | |||
| .viewcode-back { | |||
| float: right; | |||
| font-family: sans-serif; | |||
| } | |||
| div.viewcode-block:target { | |||
| margin: -1px -10px; | |||
| padding: 0 10px; | |||
| } | |||
| /* -- math display ---------------------------------------------------------- */ | |||
| img.math { | |||
| vertical-align: middle; | |||
| } | |||
| div.body div.math p { | |||
| text-align: center; | |||
| } | |||
| span.eqno { | |||
| float: right; | |||
| } | |||
| /* -- printout stylesheet --------------------------------------------------- */ | |||
| @media print { | |||
| div.document, | |||
| div.documentwrapper, | |||
| div.bodywrapper { | |||
| margin: 0 !important; | |||
| width: 100%; | |||
| } | |||
| div.sphinxsidebar, | |||
| div.related, | |||
| div.footer, | |||
| #top-link { | |||
| display: none; | |||
| } | |||
| } | |||
| @@ -0,0 +1,256 @@ | |||
| /* | |||
| * default.css_t | |||
| * ~~~~~~~~~~~~~ | |||
| * | |||
| * Sphinx stylesheet -- default theme. | |||
| * | |||
| * :copyright: Copyright 2007-2013 by the Sphinx team, see AUTHORS. | |||
| * :license: BSD, see LICENSE for details. | |||
| * | |||
| */ | |||
| @import url("basic.css"); | |||
| /* -- page layout ----------------------------------------------------------- */ | |||
| body { | |||
| font-family: sans-serif; | |||
| font-size: 100%; | |||
| background-color: #11303d; | |||
| color: #000; | |||
| margin: 0; | |||
| padding: 0; | |||
| } | |||
| div.document { | |||
| background-color: #1c4e63; | |||
| } | |||
| div.documentwrapper { | |||
| float: left; | |||
| width: 100%; | |||
| } | |||
| div.bodywrapper { | |||
| margin: 0 0 0 230px; | |||
| } | |||
| div.body { | |||
| background-color: #ffffff; | |||
| color: #000000; | |||
| padding: 0 20px 30px 20px; | |||
| } | |||
| div.footer { | |||
| color: #ffffff; | |||
| width: 100%; | |||
| padding: 9px 0 9px 0; | |||
| text-align: center; | |||
| font-size: 75%; | |||
| } | |||
| div.footer a { | |||
| color: #ffffff; | |||
| text-decoration: underline; | |||
| } | |||
| div.related { | |||
| background-color: #133f52; | |||
| line-height: 30px; | |||
| color: #ffffff; | |||
| } | |||
| div.related a { | |||
| color: #ffffff; | |||
| } | |||
| div.sphinxsidebar { | |||
| } | |||
| div.sphinxsidebar h3 { | |||
| font-family: 'Trebuchet MS', sans-serif; | |||
| color: #ffffff; | |||
| font-size: 1.4em; | |||
| font-weight: normal; | |||
| margin: 0; | |||
| padding: 0; | |||
| } | |||
| div.sphinxsidebar h3 a { | |||
| color: #ffffff; | |||
| } | |||
| div.sphinxsidebar h4 { | |||
| font-family: 'Trebuchet MS', sans-serif; | |||
| color: #ffffff; | |||
| font-size: 1.3em; | |||
| font-weight: normal; | |||
| margin: 5px 0 0 0; | |||
| padding: 0; | |||
| } | |||
| div.sphinxsidebar p { | |||
| color: #ffffff; | |||
| } | |||
| div.sphinxsidebar p.topless { | |||
| margin: 5px 10px 10px 10px; | |||
| } | |||
| div.sphinxsidebar ul { | |||
| margin: 10px; | |||
| padding: 0; | |||
| color: #ffffff; | |||
| } | |||
| div.sphinxsidebar a { | |||
| color: #98dbcc; | |||
| } | |||
| div.sphinxsidebar input { | |||
| border: 1px solid #98dbcc; | |||
| font-family: sans-serif; | |||
| font-size: 1em; | |||
| } | |||
| /* -- hyperlink styles ------------------------------------------------------ */ | |||
| a { | |||
| color: #355f7c; | |||
| text-decoration: none; | |||
| } | |||
| a:visited { | |||
| color: #355f7c; | |||
| text-decoration: none; | |||
| } | |||
| a:hover { | |||
| text-decoration: underline; | |||
| } | |||
| /* -- body styles ----------------------------------------------------------- */ | |||
| div.body h1, | |||
| div.body h2, | |||
| div.body h3, | |||
| div.body h4, | |||
| div.body h5, | |||
| div.body h6 { | |||
| font-family: 'Trebuchet MS', sans-serif; | |||
| background-color: #f2f2f2; | |||
| font-weight: normal; | |||
| color: #20435c; | |||
| border-bottom: 1px solid #ccc; | |||
| margin: 20px -20px 10px -20px; | |||
| padding: 3px 0 3px 10px; | |||
| } | |||
| div.body h1 { margin-top: 0; font-size: 200%; } | |||
| div.body h2 { font-size: 160%; } | |||
| div.body h3 { font-size: 140%; } | |||
| div.body h4 { font-size: 120%; } | |||
| div.body h5 { font-size: 110%; } | |||
| div.body h6 { font-size: 100%; } | |||
| a.headerlink { | |||
| color: #c60f0f; | |||
| font-size: 0.8em; | |||
| padding: 0 4px 0 4px; | |||
| text-decoration: none; | |||
| } | |||
| a.headerlink:hover { | |||
| background-color: #c60f0f; | |||
| color: white; | |||
| } | |||
| div.body p, div.body dd, div.body li { | |||
| text-align: justify; | |||
| line-height: 130%; | |||
| } | |||
| div.admonition p.admonition-title + p { | |||
| display: inline; | |||
| } | |||
| div.admonition p { | |||
| margin-bottom: 5px; | |||
| } | |||
| div.admonition pre { | |||
| margin-bottom: 5px; | |||
| } | |||
| div.admonition ul, div.admonition ol { | |||
| margin-bottom: 5px; | |||
| } | |||
| div.note { | |||
| background-color: #eee; | |||
| border: 1px solid #ccc; | |||
| } | |||
| div.seealso { | |||
| background-color: #ffc; | |||
| border: 1px solid #ff6; | |||
| } | |||
| div.topic { | |||
| background-color: #eee; | |||
| } | |||
| div.warning { | |||
| background-color: #ffe4e4; | |||
| border: 1px solid #f66; | |||
| } | |||
| p.admonition-title { | |||
| display: inline; | |||
| } | |||
| p.admonition-title:after { | |||
| content: ":"; | |||
| } | |||
| pre { | |||
| padding: 5px; | |||
| background-color: #eeffcc; | |||
| color: #333333; | |||
| line-height: 120%; | |||
| border: 1px solid #ac9; | |||
| border-left: none; | |||
| border-right: none; | |||
| } | |||
| tt { | |||
| background-color: #ecf0f3; | |||
| padding: 0 1px 0 1px; | |||
| font-size: 0.95em; | |||
| } | |||
| th { | |||
| background-color: #ede; | |||
| } | |||
| .warning tt { | |||
| background: #efc2c2; | |||
| } | |||
| .note tt { | |||
| background: #d6d6d6; | |||
| } | |||
| .viewcode-back { | |||
| font-family: sans-serif; | |||
| } | |||
| div.viewcode-block:target { | |||
| background-color: #f4debf; | |||
| border-top: 1px solid #ac9; | |||
| border-bottom: 1px solid #ac9; | |||
| } | |||
| @@ -0,0 +1,235 @@ | |||
| /* | |||
| * doctools.js | |||
| * ~~~~~~~~~~~ | |||
| * | |||
| * Sphinx JavaScript utilities for all documentation. | |||
| * | |||
| * :copyright: Copyright 2007-2013 by the Sphinx team, see AUTHORS. | |||
| * :license: BSD, see LICENSE for details. | |||
| * | |||
| */ | |||
| /** | |||
| * select a different prefix for underscore | |||
| */ | |||
| $u = _.noConflict(); | |||
| /** | |||
| * make the code below compatible with browsers without | |||
| * an installed firebug like debugger | |||
| if (!window.console || !console.firebug) { | |||
| var names = ["log", "debug", "info", "warn", "error", "assert", "dir", | |||
| "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", | |||
| "profile", "profileEnd"]; | |||
| window.console = {}; | |||
| for (var i = 0; i < names.length; ++i) | |||
| window.console[names[i]] = function() {}; | |||
| } | |||
| */ | |||
| /** | |||
| * small helper function to urldecode strings | |||
| */ | |||
| jQuery.urldecode = function(x) { | |||
| return decodeURIComponent(x).replace(/\+/g, ' '); | |||
| }; | |||
| /** | |||
| * small helper function to urlencode strings | |||
| */ | |||
| jQuery.urlencode = encodeURIComponent; | |||
| /** | |||
| * This function returns the parsed url parameters of the | |||
| * current request. Multiple values per key are supported, | |||
| * it will always return arrays of strings for the value parts. | |||
| */ | |||
| jQuery.getQueryParameters = function(s) { | |||
| if (typeof s == 'undefined') | |||
| s = document.location.search; | |||
| var parts = s.substr(s.indexOf('?') + 1).split('&'); | |||
| var result = {}; | |||
| for (var i = 0; i < parts.length; i++) { | |||
| var tmp = parts[i].split('=', 2); | |||
| var key = jQuery.urldecode(tmp[0]); | |||
| var value = jQuery.urldecode(tmp[1]); | |||
| if (key in result) | |||
| result[key].push(value); | |||
| else | |||
| result[key] = [value]; | |||
| } | |||
| return result; | |||
| }; | |||
| /** | |||
| * highlight a given string on a jquery object by wrapping it in | |||
| * span elements with the given class name. | |||
| */ | |||
| jQuery.fn.highlightText = function(text, className) { | |||
| function highlight(node) { | |||
| if (node.nodeType == 3) { | |||
| var val = node.nodeValue; | |||
| var pos = val.toLowerCase().indexOf(text); | |||
| if (pos >= 0 && !jQuery(node.parentNode).hasClass(className)) { | |||
| var span = document.createElement("span"); | |||
| span.className = className; | |||
| span.appendChild(document.createTextNode(val.substr(pos, text.length))); | |||
| node.parentNode.insertBefore(span, node.parentNode.insertBefore( | |||
| document.createTextNode(val.substr(pos + text.length)), | |||
| node.nextSibling)); | |||
| node.nodeValue = val.substr(0, pos); | |||
| } | |||
| } | |||
| else if (!jQuery(node).is("button, select, textarea")) { | |||
| jQuery.each(node.childNodes, function() { | |||
| highlight(this); | |||
| }); | |||
| } | |||
| } | |||
| return this.each(function() { | |||
| highlight(this); | |||
| }); | |||
| }; | |||
| /** | |||
| * Small JavaScript module for the documentation. | |||
| */ | |||
| var Documentation = { | |||
| init : function() { | |||
| this.fixFirefoxAnchorBug(); | |||
| this.highlightSearchWords(); | |||
| this.initIndexTable(); | |||
| }, | |||
| /** | |||
| * i18n support | |||
| */ | |||
| TRANSLATIONS : {}, | |||
| PLURAL_EXPR : function(n) { return n == 1 ? 0 : 1; }, | |||
| LOCALE : 'unknown', | |||
| // gettext and ngettext don't access this so that the functions | |||
| // can safely bound to a different name (_ = Documentation.gettext) | |||
| gettext : function(string) { | |||
| var translated = Documentation.TRANSLATIONS[string]; | |||
| if (typeof translated == 'undefined') | |||
| return string; | |||
| return (typeof translated == 'string') ? translated : translated[0]; | |||
| }, | |||
| ngettext : function(singular, plural, n) { | |||
| var translated = Documentation.TRANSLATIONS[singular]; | |||
| if (typeof translated == 'undefined') | |||
| return (n == 1) ? singular : plural; | |||
| return translated[Documentation.PLURALEXPR(n)]; | |||
| }, | |||
| addTranslations : function(catalog) { | |||
| for (var key in catalog.messages) | |||
| this.TRANSLATIONS[key] = catalog.messages[key]; | |||
| this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')'); | |||
| this.LOCALE = catalog.locale; | |||
| }, | |||
| /** | |||
| * add context elements like header anchor links | |||
| */ | |||
| addContextElements : function() { | |||
| $('div[id] > :header:first').each(function() { | |||
| $('<a class="headerlink">\u00B6</a>'). | |||
| attr('href', '#' + this.id). | |||
| attr('title', _('Permalink to this headline')). | |||
| appendTo(this); | |||
| }); | |||
| $('dt[id]').each(function() { | |||
| $('<a class="headerlink">\u00B6</a>'). | |||
| attr('href', '#' + this.id). | |||
| attr('title', _('Permalink to this definition')). | |||
| appendTo(this); | |||
| }); | |||
| }, | |||
| /** | |||
| * workaround a firefox stupidity | |||
| */ | |||
| fixFirefoxAnchorBug : function() { | |||
| if (document.location.hash && $.browser.mozilla) | |||
| window.setTimeout(function() { | |||
| document.location.href += ''; | |||
| }, 10); | |||
| }, | |||
| /** | |||
| * highlight the search words provided in the url in the text | |||
| */ | |||
| highlightSearchWords : function() { | |||
| var params = $.getQueryParameters(); | |||
| var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : []; | |||
| if (terms.length) { | |||
| var body = $('div.body'); | |||
| window.setTimeout(function() { | |||
| $.each(terms, function() { | |||
| body.highlightText(this.toLowerCase(), 'highlighted'); | |||
| }); | |||
| }, 10); | |||
| $('<p class="highlight-link"><a href="javascript:Documentation.' + | |||
| 'hideSearchWords()">' + _('Hide Search Matches') + '</a></p>') | |||
| .appendTo($('#searchbox')); | |||
| } | |||
| }, | |||
| /** | |||
| * init the domain index toggle buttons | |||
| */ | |||
| initIndexTable : function() { | |||
| var togglers = $('img.toggler').click(function() { | |||
| var src = $(this).attr('src'); | |||
| var idnum = $(this).attr('id').substr(7); | |||
| $('tr.cg-' + idnum).toggle(); | |||
| if (src.substr(-9) == 'minus.png') | |||
| $(this).attr('src', src.substr(0, src.length-9) + 'plus.png'); | |||
| else | |||
| $(this).attr('src', src.substr(0, src.length-8) + 'minus.png'); | |||
| }).css('display', ''); | |||
| if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) { | |||
| togglers.click(); | |||
| } | |||
| }, | |||
| /** | |||
| * helper function to hide the search marks again | |||
| */ | |||
| hideSearchWords : function() { | |||
| $('#searchbox .highlight-link').fadeOut(300); | |||
| $('span.highlighted').removeClass('highlighted'); | |||
| }, | |||
| /** | |||
| * make the url absolute | |||
| */ | |||
| makeURL : function(relativeURL) { | |||
| return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL; | |||
| }, | |||
| /** | |||
| * get the current relative url | |||
| */ | |||
| getCurrentURL : function() { | |||
| var path = document.location.pathname; | |||
| var parts = path.split(/\//); | |||
| $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() { | |||
| if (this == '..') | |||
| parts.pop(); | |||
| }); | |||
| var url = parts.join('/'); | |||
| return path.substring(url.lastIndexOf('/') + 1, path.length - 1); | |||
| } | |||
| }; | |||
| // quick alias for translations | |||
| _ = Documentation.gettext; | |||
| $(document).ready(function() { | |||
| Documentation.init(); | |||
| }); | |||
| @@ -0,0 +1,62 @@ | |||
| .highlight .hll { background-color: #ffffcc } | |||
| .highlight { background: #eeffcc; } | |||
| .highlight .c { color: #408090; font-style: italic } /* Comment */ | |||
| .highlight .err { border: 1px solid #FF0000 } /* Error */ | |||
| .highlight .k { color: #007020; font-weight: bold } /* Keyword */ | |||
| .highlight .o { color: #666666 } /* Operator */ | |||
| .highlight .cm { color: #408090; font-style: italic } /* Comment.Multiline */ | |||
| .highlight .cp { color: #007020 } /* Comment.Preproc */ | |||
| .highlight .c1 { color: #408090; font-style: italic } /* Comment.Single */ | |||
| .highlight .cs { color: #408090; background-color: #fff0f0 } /* Comment.Special */ | |||
| .highlight .gd { color: #A00000 } /* Generic.Deleted */ | |||
| .highlight .ge { font-style: italic } /* Generic.Emph */ | |||
| .highlight .gr { color: #FF0000 } /* Generic.Error */ | |||
| .highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ | |||
| .highlight .gi { color: #00A000 } /* Generic.Inserted */ | |||
| .highlight .go { color: #333333 } /* Generic.Output */ | |||
| .highlight .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */ | |||
| .highlight .gs { font-weight: bold } /* Generic.Strong */ | |||
| .highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ | |||
| .highlight .gt { color: #0044DD } /* Generic.Traceback */ | |||
| .highlight .kc { color: #007020; font-weight: bold } /* Keyword.Constant */ | |||
| .highlight .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */ | |||
| .highlight .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */ | |||
| .highlight .kp { color: #007020 } /* Keyword.Pseudo */ | |||
| .highlight .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */ | |||
| .highlight .kt { color: #902000 } /* Keyword.Type */ | |||
| .highlight .m { color: #208050 } /* Literal.Number */ | |||
| .highlight .s { color: #4070a0 } /* Literal.String */ | |||
| .highlight .na { color: #4070a0 } /* Name.Attribute */ | |||
| .highlight .nb { color: #007020 } /* Name.Builtin */ | |||
| .highlight .nc { color: #0e84b5; font-weight: bold } /* Name.Class */ | |||
| .highlight .no { color: #60add5 } /* Name.Constant */ | |||
| .highlight .nd { color: #555555; font-weight: bold } /* Name.Decorator */ | |||
| .highlight .ni { color: #d55537; font-weight: bold } /* Name.Entity */ | |||
| .highlight .ne { color: #007020 } /* Name.Exception */ | |||
| .highlight .nf { color: #06287e } /* Name.Function */ | |||
| .highlight .nl { color: #002070; font-weight: bold } /* Name.Label */ | |||
| .highlight .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */ | |||
| .highlight .nt { color: #062873; font-weight: bold } /* Name.Tag */ | |||
| .highlight .nv { color: #bb60d5 } /* Name.Variable */ | |||
| .highlight .ow { color: #007020; font-weight: bold } /* Operator.Word */ | |||
| .highlight .w { color: #bbbbbb } /* Text.Whitespace */ | |||
| .highlight .mf { color: #208050 } /* Literal.Number.Float */ | |||
| .highlight .mh { color: #208050 } /* Literal.Number.Hex */ | |||
| .highlight .mi { color: #208050 } /* Literal.Number.Integer */ | |||
| .highlight .mo { color: #208050 } /* Literal.Number.Oct */ | |||
| .highlight .sb { color: #4070a0 } /* Literal.String.Backtick */ | |||
| .highlight .sc { color: #4070a0 } /* Literal.String.Char */ | |||
| .highlight .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */ | |||
| .highlight .s2 { color: #4070a0 } /* Literal.String.Double */ | |||
| .highlight .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */ | |||
| .highlight .sh { color: #4070a0 } /* Literal.String.Heredoc */ | |||
| .highlight .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */ | |||
| .highlight .sx { color: #c65d09 } /* Literal.String.Other */ | |||
| .highlight .sr { color: #235388 } /* Literal.String.Regex */ | |||
| .highlight .s1 { color: #4070a0 } /* Literal.String.Single */ | |||
| .highlight .ss { color: #517918 } /* Literal.String.Symbol */ | |||
| .highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */ | |||
| .highlight .vc { color: #bb60d5 } /* Name.Variable.Class */ | |||
| .highlight .vg { color: #bb60d5 } /* Name.Variable.Global */ | |||
| .highlight .vi { color: #bb60d5 } /* Name.Variable.Instance */ | |||
| .highlight .il { color: #208050 } /* Literal.Number.Integer.Long */ | |||
| @@ -0,0 +1,622 @@ | |||
| /* | |||
| * searchtools.js_t | |||
| * ~~~~~~~~~~~~~~~~ | |||
| * | |||
| * Sphinx JavaScript utilties for the full-text search. | |||
| * | |||
| * :copyright: Copyright 2007-2013 by the Sphinx team, see AUTHORS. | |||
| * :license: BSD, see LICENSE for details. | |||
| * | |||
| */ | |||
| /** | |||
| * Porter Stemmer | |||
| */ | |||
| var Stemmer = function() { | |||
| var step2list = { | |||
| ational: 'ate', | |||
| tional: 'tion', | |||
| enci: 'ence', | |||
| anci: 'ance', | |||
| izer: 'ize', | |||
| bli: 'ble', | |||
| alli: 'al', | |||
| entli: 'ent', | |||
| eli: 'e', | |||
| ousli: 'ous', | |||
| ization: 'ize', | |||
| ation: 'ate', | |||
| ator: 'ate', | |||
| alism: 'al', | |||
| iveness: 'ive', | |||
| fulness: 'ful', | |||
| ousness: 'ous', | |||
| aliti: 'al', | |||
| iviti: 'ive', | |||
| biliti: 'ble', | |||
| logi: 'log' | |||
| }; | |||
| var step3list = { | |||
| icate: 'ic', | |||
| ative: '', | |||
| alize: 'al', | |||
| iciti: 'ic', | |||
| ical: 'ic', | |||
| ful: '', | |||
| ness: '' | |||
| }; | |||
| var c = "[^aeiou]"; // consonant | |||
| var v = "[aeiouy]"; // vowel | |||
| var C = c + "[^aeiouy]*"; // consonant sequence | |||
| var V = v + "[aeiou]*"; // vowel sequence | |||
| var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0 | |||
| var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1 | |||
| var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1 | |||
| var s_v = "^(" + C + ")?" + v; // vowel in stem | |||
| this.stemWord = function (w) { | |||
| var stem; | |||
| var suffix; | |||
| var firstch; | |||
| var origword = w; | |||
| if (w.length < 3) | |||
| return w; | |||
| var re; | |||
| var re2; | |||
| var re3; | |||
| var re4; | |||
| firstch = w.substr(0,1); | |||
| if (firstch == "y") | |||
| w = firstch.toUpperCase() + w.substr(1); | |||
| // Step 1a | |||
| re = /^(.+?)(ss|i)es$/; | |||
| re2 = /^(.+?)([^s])s$/; | |||
| if (re.test(w)) | |||
| w = w.replace(re,"$1$2"); | |||
| else if (re2.test(w)) | |||
| w = w.replace(re2,"$1$2"); | |||
| // Step 1b | |||
| re = /^(.+?)eed$/; | |||
| re2 = /^(.+?)(ed|ing)$/; | |||
| if (re.test(w)) { | |||
| var fp = re.exec(w); | |||
| re = new RegExp(mgr0); | |||
| if (re.test(fp[1])) { | |||
| re = /.$/; | |||
| w = w.replace(re,""); | |||
| } | |||
| } | |||
| else if (re2.test(w)) { | |||
| var fp = re2.exec(w); | |||
| stem = fp[1]; | |||
| re2 = new RegExp(s_v); | |||
| if (re2.test(stem)) { | |||
| w = stem; | |||
| re2 = /(at|bl|iz)$/; | |||
| re3 = new RegExp("([^aeiouylsz])\\1$"); | |||
| re4 = new RegExp("^" + C + v + "[^aeiouwxy]$"); | |||
| if (re2.test(w)) | |||
| w = w + "e"; | |||
| else if (re3.test(w)) { | |||
| re = /.$/; | |||
| w = w.replace(re,""); | |||
| } | |||
| else if (re4.test(w)) | |||
| w = w + "e"; | |||
| } | |||
| } | |||
| // Step 1c | |||
| re = /^(.+?)y$/; | |||
| if (re.test(w)) { | |||
| var fp = re.exec(w); | |||
| stem = fp[1]; | |||
| re = new RegExp(s_v); | |||
| if (re.test(stem)) | |||
| w = stem + "i"; | |||
| } | |||
| // Step 2 | |||
| re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/; | |||
| if (re.test(w)) { | |||
| var fp = re.exec(w); | |||
| stem = fp[1]; | |||
| suffix = fp[2]; | |||
| re = new RegExp(mgr0); | |||
| if (re.test(stem)) | |||
| w = stem + step2list[suffix]; | |||
| } | |||
| // Step 3 | |||
| re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/; | |||
| if (re.test(w)) { | |||
| var fp = re.exec(w); | |||
| stem = fp[1]; | |||
| suffix = fp[2]; | |||
| re = new RegExp(mgr0); | |||
| if (re.test(stem)) | |||
| w = stem + step3list[suffix]; | |||
| } | |||
| // Step 4 | |||
| re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/; | |||
| re2 = /^(.+?)(s|t)(ion)$/; | |||
| if (re.test(w)) { | |||
| var fp = re.exec(w); | |||
| stem = fp[1]; | |||
| re = new RegExp(mgr1); | |||
| if (re.test(stem)) | |||
| w = stem; | |||
| } | |||
| else if (re2.test(w)) { | |||
| var fp = re2.exec(w); | |||
| stem = fp[1] + fp[2]; | |||
| re2 = new RegExp(mgr1); | |||
| if (re2.test(stem)) | |||
| w = stem; | |||
| } | |||
| // Step 5 | |||
| re = /^(.+?)e$/; | |||
| if (re.test(w)) { | |||
| var fp = re.exec(w); | |||
| stem = fp[1]; | |||
| re = new RegExp(mgr1); | |||
| re2 = new RegExp(meq1); | |||
| re3 = new RegExp("^" + C + v + "[^aeiouwxy]$"); | |||
| if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) | |||
| w = stem; | |||
| } | |||
| re = /ll$/; | |||
| re2 = new RegExp(mgr1); | |||
| if (re.test(w) && re2.test(w)) { | |||
| re = /.$/; | |||
| w = w.replace(re,""); | |||
| } | |||
| // and turn initial Y back to y | |||
| if (firstch == "y") | |||
| w = firstch.toLowerCase() + w.substr(1); | |||
| return w; | |||
| } | |||
| } | |||
| /** | |||
| * Simple result scoring code. | |||
| */ | |||
| var Scorer = { | |||
| // Implement the following function to further tweak the score for each result | |||
| // The function takes a result array [filename, title, anchor, descr, score] | |||
| // and returns the new score. | |||
| /* | |||
| score: function(result) { | |||
| return result[4]; | |||
| }, | |||
| */ | |||
| // query matches the full name of an object | |||
| objNameMatch: 11, | |||
| // or matches in the last dotted part of the object name | |||
| objPartialMatch: 6, | |||
| // Additive scores depending on the priority of the object | |||
| objPrio: {0: 15, // used to be importantResults | |||
| 1: 5, // used to be objectResults | |||
| 2: -5}, // used to be unimportantResults | |||
| // Used when the priority is not in the mapping. | |||
| objPrioDefault: 0, | |||
| // query found in title | |||
| title: 15, | |||
| // query found in terms | |||
| term: 5 | |||
| }; | |||
| /** | |||
| * Search Module | |||
| */ | |||
| var Search = { | |||
| _index : null, | |||
| _queued_query : null, | |||
| _pulse_status : -1, | |||
| init : function() { | |||
| var params = $.getQueryParameters(); | |||
| if (params.q) { | |||
| var query = params.q[0]; | |||
| $('input[name="q"]')[0].value = query; | |||
| this.performSearch(query); | |||
| } | |||
| }, | |||
| loadIndex : function(url) { | |||
| $.ajax({type: "GET", url: url, data: null, | |||
| dataType: "script", cache: true, | |||
| complete: function(jqxhr, textstatus) { | |||
| if (textstatus != "success") { | |||
| document.getElementById("searchindexloader").src = url; | |||
| } | |||
| }}); | |||
| }, | |||
| setIndex : function(index) { | |||
| var q; | |||
| this._index = index; | |||
| if ((q = this._queued_query) !== null) { | |||
| this._queued_query = null; | |||
| Search.query(q); | |||
| } | |||
| }, | |||
| hasIndex : function() { | |||
| return this._index !== null; | |||
| }, | |||
| deferQuery : function(query) { | |||
| this._queued_query = query; | |||
| }, | |||
| stopPulse : function() { | |||
| this._pulse_status = 0; | |||
| }, | |||
| startPulse : function() { | |||
| if (this._pulse_status >= 0) | |||
| return; | |||
| function pulse() { | |||
| var i; | |||
| Search._pulse_status = (Search._pulse_status + 1) % 4; | |||
| var dotString = ''; | |||
| for (i = 0; i < Search._pulse_status; i++) | |||
| dotString += '.'; | |||
| Search.dots.text(dotString); | |||
| if (Search._pulse_status > -1) | |||
| window.setTimeout(pulse, 500); | |||
| } | |||
| pulse(); | |||
| }, | |||
| /** | |||
| * perform a search for something (or wait until index is loaded) | |||
| */ | |||
| performSearch : function(query) { | |||
| // create the required interface elements | |||
| this.out = $('#search-results'); | |||
| this.title = $('<h2>' + _('Searching') + '</h2>').appendTo(this.out); | |||
| this.dots = $('<span></span>').appendTo(this.title); | |||
| this.status = $('<p style="display: none"></p>').appendTo(this.out); | |||
| this.output = $('<ul class="search"/>').appendTo(this.out); | |||
| $('#search-progress').text(_('Preparing search...')); | |||
| this.startPulse(); | |||
| // index already loaded, the browser was quick! | |||
| if (this.hasIndex()) | |||
| this.query(query); | |||
| else | |||
| this.deferQuery(query); | |||
| }, | |||
| /** | |||
| * execute search (requires search index to be loaded) | |||
| */ | |||
| query : function(query) { | |||
| var i; | |||
| var stopwords = ["a","and","are","as","at","be","but","by","for","if","in","into","is","it","near","no","not","of","on","or","such","that","the","their","then","there","these","they","this","to","was","will","with"]; | |||
| // stem the searchterms and add them to the correct list | |||
| var stemmer = new Stemmer(); | |||
| var searchterms = []; | |||
| var excluded = []; | |||
| var hlterms = []; | |||
| var tmp = query.split(/\s+/); | |||
| var objectterms = []; | |||
| for (i = 0; i < tmp.length; i++) { | |||
| if (tmp[i] !== "") { | |||
| objectterms.push(tmp[i].toLowerCase()); | |||
| } | |||
| if ($u.indexOf(stopwords, tmp[i]) != -1 || tmp[i].match(/^\d+$/) || | |||
| tmp[i] === "") { | |||
| // skip this "word" | |||
| continue; | |||
| } | |||
| // stem the word | |||
| var word = stemmer.stemWord(tmp[i]).toLowerCase(); | |||
| var toAppend; | |||
| // select the correct list | |||
| if (word[0] == '-') { | |||
| toAppend = excluded; | |||
| word = word.substr(1); | |||
| } | |||
| else { | |||
| toAppend = searchterms; | |||
| hlterms.push(tmp[i].toLowerCase()); | |||
| } | |||
| // only add if not already in the list | |||
| if (!$u.contains(toAppend, word)) | |||
| toAppend.push(word); | |||
| } | |||
| var highlightstring = '?highlight=' + $.urlencode(hlterms.join(" ")); | |||
| // console.debug('SEARCH: searching for:'); | |||
| // console.info('required: ', searchterms); | |||
| // console.info('excluded: ', excluded); | |||
| // prepare search | |||
| var terms = this._index.terms; | |||
| var titleterms = this._index.titleterms; | |||
| // array of [filename, title, anchor, descr, score] | |||
| var results = []; | |||
| $('#search-progress').empty(); | |||
| // lookup as object | |||
| for (i = 0; i < objectterms.length; i++) { | |||
| var others = [].concat(objectterms.slice(0, i), | |||
| objectterms.slice(i+1, objectterms.length)); | |||
| results = results.concat(this.performObjectSearch(objectterms[i], others)); | |||
| } | |||
| // lookup as search terms in fulltext | |||
| results = results.concat(this.performTermsSearch(searchterms, excluded, terms, Scorer.term)) | |||
| .concat(this.performTermsSearch(searchterms, excluded, titleterms, Scorer.title)); | |||
| // let the scorer override scores with a custom scoring function | |||
| if (Scorer.score) { | |||
| for (i = 0; i < results.length; i++) | |||
| results[i][4] = Scorer.score(results[i]); | |||
| } | |||
| // now sort the results by score (in opposite order of appearance, since the | |||
| // display function below uses pop() to retrieve items) and then | |||
| // alphabetically | |||
| results.sort(function(a, b) { | |||
| var left = a[4]; | |||
| var right = b[4]; | |||
| if (left > right) { | |||
| return 1; | |||
| } else if (left < right) { | |||
| return -1; | |||
| } else { | |||
| // same score: sort alphabetically | |||
| left = a[1].toLowerCase(); | |||
| right = b[1].toLowerCase(); | |||
| return (left > right) ? -1 : ((left < right) ? 1 : 0); | |||
| } | |||
| }); | |||
| // for debugging | |||
| //Search.lastresults = results.slice(); // a copy | |||
| //console.info('search results:', Search.lastresults); | |||
| // print the results | |||
| var resultCount = results.length; | |||
| function displayNextItem() { | |||
| // results left, load the summary and display it | |||
| if (results.length) { | |||
| var item = results.pop(); | |||
| var listItem = $('<li style="display:none"></li>'); | |||
| if (DOCUMENTATION_OPTIONS.FILE_SUFFIX === '') { | |||
| // dirhtml builder | |||
| var dirname = item[0] + '/'; | |||
| if (dirname.match(/\/index\/$/)) { | |||
| dirname = dirname.substring(0, dirname.length-6); | |||
| } else if (dirname == 'index/') { | |||
| dirname = ''; | |||
| } | |||
| listItem.append($('<a/>').attr('href', | |||
| DOCUMENTATION_OPTIONS.URL_ROOT + dirname + | |||
| highlightstring + item[2]).html(item[1])); | |||
| } else { | |||
| // normal html builders | |||
| listItem.append($('<a/>').attr('href', | |||
| item[0] + DOCUMENTATION_OPTIONS.FILE_SUFFIX + | |||
| highlightstring + item[2]).html(item[1])); | |||
| } | |||
| if (item[3]) { | |||
| listItem.append($('<span> (' + item[3] + ')</span>')); | |||
| Search.output.append(listItem); | |||
| listItem.slideDown(5, function() { | |||
| displayNextItem(); | |||
| }); | |||
| } else if (DOCUMENTATION_OPTIONS.HAS_SOURCE) { | |||
| $.ajax({url: DOCUMENTATION_OPTIONS.URL_ROOT + '_sources/' + item[0] + '.txt', | |||
| dataType: "text", | |||
| complete: function(jqxhr, textstatus) { | |||
| var data = jqxhr.responseText; | |||
| if (data !== '') { | |||
| listItem.append(Search.makeSearchSummary(data, searchterms, hlterms)); | |||
| } | |||
| Search.output.append(listItem); | |||
| listItem.slideDown(5, function() { | |||
| displayNextItem(); | |||
| }); | |||
| }}); | |||
| } else { | |||
| // no source available, just display title | |||
| Search.output.append(listItem); | |||
| listItem.slideDown(5, function() { | |||
| displayNextItem(); | |||
| }); | |||
| } | |||
| } | |||
| // search finished, update title and status message | |||
| else { | |||
| Search.stopPulse(); | |||
| Search.title.text(_('Search Results')); | |||
| if (!resultCount) | |||
| Search.status.text(_('Your search did not match any documents. Please make sure that all words are spelled correctly and that you\'ve selected enough categories.')); | |||
| else | |||
| Search.status.text(_('Search finished, found %s page(s) matching the search query.').replace('%s', resultCount)); | |||
| Search.status.fadeIn(500); | |||
| } | |||
| } | |||
| displayNextItem(); | |||
| }, | |||
| /** | |||
| * search for object names | |||
| */ | |||
| performObjectSearch : function(object, otherterms) { | |||
| var filenames = this._index.filenames; | |||
| var objects = this._index.objects; | |||
| var objnames = this._index.objnames; | |||
| var titles = this._index.titles; | |||
| var i; | |||
| var results = []; | |||
| for (var prefix in objects) { | |||
| for (var name in objects[prefix]) { | |||
| var fullname = (prefix ? prefix + '.' : '') + name; | |||
| if (fullname.toLowerCase().indexOf(object) > -1) { | |||
| var score = 0; | |||
| var parts = fullname.split('.'); | |||
| // check for different match types: exact matches of full name or | |||
| // "last name" (i.e. last dotted part) | |||
| if (fullname == object || parts[parts.length - 1] == object) { | |||
| score += Scorer.objNameMatch; | |||
| // matches in last name | |||
| } else if (parts[parts.length - 1].indexOf(object) > -1) { | |||
| score += Scorer.objPartialMatch; | |||
| } | |||
| var match = objects[prefix][name]; | |||
| var objname = objnames[match[1]][2]; | |||
| var title = titles[match[0]]; | |||
| // If more than one term searched for, we require other words to be | |||
| // found in the name/title/description | |||
| if (otherterms.length > 0) { | |||
| var haystack = (prefix + ' ' + name + ' ' + | |||
| objname + ' ' + title).toLowerCase(); | |||
| var allfound = true; | |||
| for (i = 0; i < otherterms.length; i++) { | |||
| if (haystack.indexOf(otherterms[i]) == -1) { | |||
| allfound = false; | |||
| break; | |||
| } | |||
| } | |||
| if (!allfound) { | |||
| continue; | |||
| } | |||
| } | |||
| var descr = objname + _(', in ') + title; | |||
| var anchor = match[3]; | |||
| if (anchor === '') | |||
| anchor = fullname; | |||
| else if (anchor == '-') | |||
| anchor = objnames[match[1]][1] + '-' + fullname; | |||
| // add custom score for some objects according to scorer | |||
| if (Scorer.objPrio.hasOwnProperty(match[2])) { | |||
| score += Scorer.objPrio[match[2]]; | |||
| } else { | |||
| score += Scorer.objPrioDefault; | |||
| } | |||
| results.push([filenames[match[0]], fullname, '#'+anchor, descr, score]); | |||
| } | |||
| } | |||
| } | |||
| return results; | |||
| }, | |||
| /** | |||
| * search for full-text terms in the index | |||
| */ | |||
| performTermsSearch : function(searchterms, excluded, terms, score) { | |||
| var filenames = this._index.filenames; | |||
| var titles = this._index.titles; | |||
| var i, j, file, files; | |||
| var fileMap = {}; | |||
| var results = []; | |||
| // perform the search on the required terms | |||
| for (i = 0; i < searchterms.length; i++) { | |||
| var word = searchterms[i]; | |||
| // no match but word was a required one | |||
| if (!(files = terms[word])) | |||
| break; | |||
| if (files.length === undefined) { | |||
| files = [files]; | |||
| } | |||
| // create the mapping | |||
| for (j = 0; j < files.length; j++) { | |||
| file = files[j]; | |||
| if (file in fileMap) | |||
| fileMap[file].push(word); | |||
| else | |||
| fileMap[file] = [word]; | |||
| } | |||
| } | |||
| // now check if the files don't contain excluded terms | |||
| for (file in fileMap) { | |||
| var valid = true; | |||
| // check if all requirements are matched | |||
| if (fileMap[file].length != searchterms.length) | |||
| continue; | |||
| // ensure that none of the excluded terms is in the search result | |||
| for (i = 0; i < excluded.length; i++) { | |||
| if (terms[excluded[i]] == file || | |||
| $u.contains(terms[excluded[i]] || [], file)) { | |||
| valid = false; | |||
| break; | |||
| } | |||
| } | |||
| // if we have still a valid result we can add it to the result list | |||
| if (valid) { | |||
| results.push([filenames[file], titles[file], '', null, score]); | |||
| } | |||
| } | |||
| return results; | |||
| }, | |||
| /** | |||
| * helper function to return a node containing the | |||
| * search summary for a given text. keywords is a list | |||
| * of stemmed words, hlwords is the list of normal, unstemmed | |||
| * words. the first one is used to find the occurance, the | |||
| * latter for highlighting it. | |||
| */ | |||
| makeSearchSummary : function(text, keywords, hlwords) { | |||
| var textLower = text.toLowerCase(); | |||
| var start = 0; | |||
| $.each(keywords, function() { | |||
| var i = textLower.indexOf(this.toLowerCase()); | |||
| if (i > -1) | |||
| start = i; | |||
| }); | |||
| start = Math.max(start - 120, 0); | |||
| var excerpt = ((start > 0) ? '...' : '') + | |||
| $.trim(text.substr(start, 240)) + | |||
| ((start + 240 - text.length) ? '...' : ''); | |||
| var rv = $('<div class="context"></div>').text(excerpt); | |||
| $.each(hlwords, function() { | |||
| rv = rv.highlightText(this, 'highlighted'); | |||
| }); | |||
| return rv; | |||
| } | |||
| }; | |||
| $(document).ready(function() { | |||
| Search.init(); | |||
| }); | |||
| @@ -0,0 +1,159 @@ | |||
| /* | |||
| * sidebar.js | |||
| * ~~~~~~~~~~ | |||
| * | |||
| * This script makes the Sphinx sidebar collapsible. | |||
| * | |||
| * .sphinxsidebar contains .sphinxsidebarwrapper. This script adds | |||
| * in .sphixsidebar, after .sphinxsidebarwrapper, the #sidebarbutton | |||
| * used to collapse and expand the sidebar. | |||
| * | |||
| * When the sidebar is collapsed the .sphinxsidebarwrapper is hidden | |||
| * and the width of the sidebar and the margin-left of the document | |||
| * are decreased. When the sidebar is expanded the opposite happens. | |||
| * This script saves a per-browser/per-session cookie used to | |||
| * remember the position of the sidebar among the pages. | |||
| * Once the browser is closed the cookie is deleted and the position | |||
| * reset to the default (expanded). | |||
| * | |||
| * :copyright: Copyright 2007-2013 by the Sphinx team, see AUTHORS. | |||
| * :license: BSD, see LICENSE for details. | |||
| * | |||
| */ | |||
| $(function() { | |||
| // global elements used by the functions. | |||
| // the 'sidebarbutton' element is defined as global after its | |||
| // creation, in the add_sidebar_button function | |||
| var bodywrapper = $('.bodywrapper'); | |||
| var sidebar = $('.sphinxsidebar'); | |||
| var sidebarwrapper = $('.sphinxsidebarwrapper'); | |||
| // for some reason, the document has no sidebar; do not run into errors | |||
| if (!sidebar.length) return; | |||
| // original margin-left of the bodywrapper and width of the sidebar | |||
| // with the sidebar expanded | |||
| var bw_margin_expanded = bodywrapper.css('margin-left'); | |||
| var ssb_width_expanded = sidebar.width(); | |||
| // margin-left of the bodywrapper and width of the sidebar | |||
| // with the sidebar collapsed | |||
| var bw_margin_collapsed = '.8em'; | |||
| var ssb_width_collapsed = '.8em'; | |||
| // colors used by the current theme | |||
| var dark_color = $('.related').css('background-color'); | |||
| var light_color = $('.document').css('background-color'); | |||
| function sidebar_is_collapsed() { | |||
| return sidebarwrapper.is(':not(:visible)'); | |||
| } | |||
| function toggle_sidebar() { | |||
| if (sidebar_is_collapsed()) | |||
| expand_sidebar(); | |||
| else | |||
| collapse_sidebar(); | |||
| } | |||
| function collapse_sidebar() { | |||
| sidebarwrapper.hide(); | |||
| sidebar.css('width', ssb_width_collapsed); | |||
| bodywrapper.css('margin-left', bw_margin_collapsed); | |||
| sidebarbutton.css({ | |||
| 'margin-left': '0', | |||
| 'height': bodywrapper.height() | |||
| }); | |||
| sidebarbutton.find('span').text('»'); | |||
| sidebarbutton.attr('title', _('Expand sidebar')); | |||
| document.cookie = 'sidebar=collapsed'; | |||
| } | |||
| function expand_sidebar() { | |||
| bodywrapper.css('margin-left', bw_margin_expanded); | |||
| sidebar.css('width', ssb_width_expanded); | |||
| sidebarwrapper.show(); | |||
| sidebarbutton.css({ | |||
| 'margin-left': ssb_width_expanded-12, | |||
| 'height': bodywrapper.height() | |||
| }); | |||
| sidebarbutton.find('span').text('«'); | |||
| sidebarbutton.attr('title', _('Collapse sidebar')); | |||
| document.cookie = 'sidebar=expanded'; | |||
| } | |||
| function add_sidebar_button() { | |||
| sidebarwrapper.css({ | |||
| 'float': 'left', | |||
| 'margin-right': '0', | |||
| 'width': ssb_width_expanded - 28 | |||
| }); | |||
| // create the button | |||
| sidebar.append( | |||
| '<div id="sidebarbutton"><span>«</span></div>' | |||
| ); | |||
| var sidebarbutton = $('#sidebarbutton'); | |||
| light_color = sidebarbutton.css('background-color'); | |||
| // find the height of the viewport to center the '<<' in the page | |||
| var viewport_height; | |||
| if (window.innerHeight) | |||
| viewport_height = window.innerHeight; | |||
| else | |||
| viewport_height = $(window).height(); | |||
| sidebarbutton.find('span').css({ | |||
| 'display': 'block', | |||
| 'margin-top': (viewport_height - sidebar.position().top - 20) / 2 | |||
| }); | |||
| sidebarbutton.click(toggle_sidebar); | |||
| sidebarbutton.attr('title', _('Collapse sidebar')); | |||
| sidebarbutton.css({ | |||
| 'color': '#FFFFFF', | |||
| 'border-left': '1px solid ' + dark_color, | |||
| 'font-size': '1.2em', | |||
| 'cursor': 'pointer', | |||
| 'height': bodywrapper.height(), | |||
| 'padding-top': '1px', | |||
| 'margin-left': ssb_width_expanded - 12 | |||
| }); | |||
| sidebarbutton.hover( | |||
| function () { | |||
| $(this).css('background-color', dark_color); | |||
| }, | |||
| function () { | |||
| $(this).css('background-color', light_color); | |||
| } | |||
| ); | |||
| } | |||
| function set_position_from_cookie() { | |||
| if (!document.cookie) | |||
| return; | |||
| var items = document.cookie.split(';'); | |||
| for(var k=0; k<items.length; k++) { | |||
| var key_val = items[k].split('='); | |||
| var key = key_val[0]; | |||
| if (key == 'sidebar') { | |||
| var value = key_val[1]; | |||
| if ((value == 'collapsed') && (!sidebar_is_collapsed())) | |||
| collapse_sidebar(); | |||
| else if ((value == 'expanded') && (sidebar_is_collapsed())) | |||
| expand_sidebar(); | |||
| } | |||
| } | |||
| } | |||
| add_sidebar_button(); | |||
| var sidebarbutton = $('#sidebarbutton'); | |||
| set_position_from_cookie(); | |||
| }); | |||
| @@ -0,0 +1,31 @@ | |||
| // Underscore.js 1.3.1 | |||
| // (c) 2009-2012 Jeremy Ashkenas, DocumentCloud Inc. | |||
| // Underscore is freely distributable under the MIT license. | |||
| // Portions of Underscore are inspired or borrowed from Prototype, | |||
| // Oliver Steele's Functional, and John Resig's Micro-Templating. | |||
| // For all details and documentation: | |||
| // http://documentcloud.github.com/underscore | |||
| (function(){function q(a,c,d){if(a===c)return a!==0||1/a==1/c;if(a==null||c==null)return a===c;if(a._chain)a=a._wrapped;if(c._chain)c=c._wrapped;if(a.isEqual&&b.isFunction(a.isEqual))return a.isEqual(c);if(c.isEqual&&b.isFunction(c.isEqual))return c.isEqual(a);var e=l.call(a);if(e!=l.call(c))return false;switch(e){case "[object String]":return a==String(c);case "[object Number]":return a!=+a?c!=+c:a==0?1/a==1/c:a==+c;case "[object Date]":case "[object Boolean]":return+a==+c;case "[object RegExp]":return a.source== | |||
| c.source&&a.global==c.global&&a.multiline==c.multiline&&a.ignoreCase==c.ignoreCase}if(typeof a!="object"||typeof c!="object")return false;for(var f=d.length;f--;)if(d[f]==a)return true;d.push(a);var f=0,g=true;if(e=="[object Array]"){if(f=a.length,g=f==c.length)for(;f--;)if(!(g=f in a==f in c&&q(a[f],c[f],d)))break}else{if("constructor"in a!="constructor"in c||a.constructor!=c.constructor)return false;for(var h in a)if(b.has(a,h)&&(f++,!(g=b.has(c,h)&&q(a[h],c[h],d))))break;if(g){for(h in c)if(b.has(c, | |||
| h)&&!f--)break;g=!f}}d.pop();return g}var r=this,G=r._,n={},k=Array.prototype,o=Object.prototype,i=k.slice,H=k.unshift,l=o.toString,I=o.hasOwnProperty,w=k.forEach,x=k.map,y=k.reduce,z=k.reduceRight,A=k.filter,B=k.every,C=k.some,p=k.indexOf,D=k.lastIndexOf,o=Array.isArray,J=Object.keys,s=Function.prototype.bind,b=function(a){return new m(a)};if(typeof exports!=="undefined"){if(typeof module!=="undefined"&&module.exports)exports=module.exports=b;exports._=b}else r._=b;b.VERSION="1.3.1";var j=b.each= | |||
| b.forEach=function(a,c,d){if(a!=null)if(w&&a.forEach===w)a.forEach(c,d);else if(a.length===+a.length)for(var e=0,f=a.length;e<f;e++){if(e in a&&c.call(d,a[e],e,a)===n)break}else for(e in a)if(b.has(a,e)&&c.call(d,a[e],e,a)===n)break};b.map=b.collect=function(a,c,b){var e=[];if(a==null)return e;if(x&&a.map===x)return a.map(c,b);j(a,function(a,g,h){e[e.length]=c.call(b,a,g,h)});if(a.length===+a.length)e.length=a.length;return e};b.reduce=b.foldl=b.inject=function(a,c,d,e){var f=arguments.length>2;a== | |||
| null&&(a=[]);if(y&&a.reduce===y)return e&&(c=b.bind(c,e)),f?a.reduce(c,d):a.reduce(c);j(a,function(a,b,i){f?d=c.call(e,d,a,b,i):(d=a,f=true)});if(!f)throw new TypeError("Reduce of empty array with no initial value");return d};b.reduceRight=b.foldr=function(a,c,d,e){var f=arguments.length>2;a==null&&(a=[]);if(z&&a.reduceRight===z)return e&&(c=b.bind(c,e)),f?a.reduceRight(c,d):a.reduceRight(c);var g=b.toArray(a).reverse();e&&!f&&(c=b.bind(c,e));return f?b.reduce(g,c,d,e):b.reduce(g,c)};b.find=b.detect= | |||
| function(a,c,b){var e;E(a,function(a,g,h){if(c.call(b,a,g,h))return e=a,true});return e};b.filter=b.select=function(a,c,b){var e=[];if(a==null)return e;if(A&&a.filter===A)return a.filter(c,b);j(a,function(a,g,h){c.call(b,a,g,h)&&(e[e.length]=a)});return e};b.reject=function(a,c,b){var e=[];if(a==null)return e;j(a,function(a,g,h){c.call(b,a,g,h)||(e[e.length]=a)});return e};b.every=b.all=function(a,c,b){var e=true;if(a==null)return e;if(B&&a.every===B)return a.every(c,b);j(a,function(a,g,h){if(!(e= | |||
| e&&c.call(b,a,g,h)))return n});return e};var E=b.some=b.any=function(a,c,d){c||(c=b.identity);var e=false;if(a==null)return e;if(C&&a.some===C)return a.some(c,d);j(a,function(a,b,h){if(e||(e=c.call(d,a,b,h)))return n});return!!e};b.include=b.contains=function(a,c){var b=false;if(a==null)return b;return p&&a.indexOf===p?a.indexOf(c)!=-1:b=E(a,function(a){return a===c})};b.invoke=function(a,c){var d=i.call(arguments,2);return b.map(a,function(a){return(b.isFunction(c)?c||a:a[c]).apply(a,d)})};b.pluck= | |||
| function(a,c){return b.map(a,function(a){return a[c]})};b.max=function(a,c,d){if(!c&&b.isArray(a))return Math.max.apply(Math,a);if(!c&&b.isEmpty(a))return-Infinity;var e={computed:-Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;b>=e.computed&&(e={value:a,computed:b})});return e.value};b.min=function(a,c,d){if(!c&&b.isArray(a))return Math.min.apply(Math,a);if(!c&&b.isEmpty(a))return Infinity;var e={computed:Infinity};j(a,function(a,b,h){b=c?c.call(d,a,b,h):a;b<e.computed&&(e={value:a,computed:b})}); | |||
| return e.value};b.shuffle=function(a){var b=[],d;j(a,function(a,f){f==0?b[0]=a:(d=Math.floor(Math.random()*(f+1)),b[f]=b[d],b[d]=a)});return b};b.sortBy=function(a,c,d){return b.pluck(b.map(a,function(a,b,g){return{value:a,criteria:c.call(d,a,b,g)}}).sort(function(a,b){var c=a.criteria,d=b.criteria;return c<d?-1:c>d?1:0}),"value")};b.groupBy=function(a,c){var d={},e=b.isFunction(c)?c:function(a){return a[c]};j(a,function(a,b){var c=e(a,b);(d[c]||(d[c]=[])).push(a)});return d};b.sortedIndex=function(a, | |||
| c,d){d||(d=b.identity);for(var e=0,f=a.length;e<f;){var g=e+f>>1;d(a[g])<d(c)?e=g+1:f=g}return e};b.toArray=function(a){return!a?[]:a.toArray?a.toArray():b.isArray(a)?i.call(a):b.isArguments(a)?i.call(a):b.values(a)};b.size=function(a){return b.toArray(a).length};b.first=b.head=function(a,b,d){return b!=null&&!d?i.call(a,0,b):a[0]};b.initial=function(a,b,d){return i.call(a,0,a.length-(b==null||d?1:b))};b.last=function(a,b,d){return b!=null&&!d?i.call(a,Math.max(a.length-b,0)):a[a.length-1]};b.rest= | |||
| b.tail=function(a,b,d){return i.call(a,b==null||d?1:b)};b.compact=function(a){return b.filter(a,function(a){return!!a})};b.flatten=function(a,c){return b.reduce(a,function(a,e){if(b.isArray(e))return a.concat(c?e:b.flatten(e));a[a.length]=e;return a},[])};b.without=function(a){return b.difference(a,i.call(arguments,1))};b.uniq=b.unique=function(a,c,d){var d=d?b.map(a,d):a,e=[];b.reduce(d,function(d,g,h){if(0==h||(c===true?b.last(d)!=g:!b.include(d,g)))d[d.length]=g,e[e.length]=a[h];return d},[]); | |||
| return e};b.union=function(){return b.uniq(b.flatten(arguments,true))};b.intersection=b.intersect=function(a){var c=i.call(arguments,1);return b.filter(b.uniq(a),function(a){return b.every(c,function(c){return b.indexOf(c,a)>=0})})};b.difference=function(a){var c=b.flatten(i.call(arguments,1));return b.filter(a,function(a){return!b.include(c,a)})};b.zip=function(){for(var a=i.call(arguments),c=b.max(b.pluck(a,"length")),d=Array(c),e=0;e<c;e++)d[e]=b.pluck(a,""+e);return d};b.indexOf=function(a,c, | |||
| d){if(a==null)return-1;var e;if(d)return d=b.sortedIndex(a,c),a[d]===c?d:-1;if(p&&a.indexOf===p)return a.indexOf(c);for(d=0,e=a.length;d<e;d++)if(d in a&&a[d]===c)return d;return-1};b.lastIndexOf=function(a,b){if(a==null)return-1;if(D&&a.lastIndexOf===D)return a.lastIndexOf(b);for(var d=a.length;d--;)if(d in a&&a[d]===b)return d;return-1};b.range=function(a,b,d){arguments.length<=1&&(b=a||0,a=0);for(var d=arguments[2]||1,e=Math.max(Math.ceil((b-a)/d),0),f=0,g=Array(e);f<e;)g[f++]=a,a+=d;return g}; | |||
| var F=function(){};b.bind=function(a,c){var d,e;if(a.bind===s&&s)return s.apply(a,i.call(arguments,1));if(!b.isFunction(a))throw new TypeError;e=i.call(arguments,2);return d=function(){if(!(this instanceof d))return a.apply(c,e.concat(i.call(arguments)));F.prototype=a.prototype;var b=new F,g=a.apply(b,e.concat(i.call(arguments)));return Object(g)===g?g:b}};b.bindAll=function(a){var c=i.call(arguments,1);c.length==0&&(c=b.functions(a));j(c,function(c){a[c]=b.bind(a[c],a)});return a};b.memoize=function(a, | |||
| c){var d={};c||(c=b.identity);return function(){var e=c.apply(this,arguments);return b.has(d,e)?d[e]:d[e]=a.apply(this,arguments)}};b.delay=function(a,b){var d=i.call(arguments,2);return setTimeout(function(){return a.apply(a,d)},b)};b.defer=function(a){return b.delay.apply(b,[a,1].concat(i.call(arguments,1)))};b.throttle=function(a,c){var d,e,f,g,h,i=b.debounce(function(){h=g=false},c);return function(){d=this;e=arguments;var b;f||(f=setTimeout(function(){f=null;h&&a.apply(d,e);i()},c));g?h=true: | |||
| a.apply(d,e);i();g=true}};b.debounce=function(a,b){var d;return function(){var e=this,f=arguments;clearTimeout(d);d=setTimeout(function(){d=null;a.apply(e,f)},b)}};b.once=function(a){var b=false,d;return function(){if(b)return d;b=true;return d=a.apply(this,arguments)}};b.wrap=function(a,b){return function(){var d=[a].concat(i.call(arguments,0));return b.apply(this,d)}};b.compose=function(){var a=arguments;return function(){for(var b=arguments,d=a.length-1;d>=0;d--)b=[a[d].apply(this,b)];return b[0]}}; | |||
| b.after=function(a,b){return a<=0?b():function(){if(--a<1)return b.apply(this,arguments)}};b.keys=J||function(a){if(a!==Object(a))throw new TypeError("Invalid object");var c=[],d;for(d in a)b.has(a,d)&&(c[c.length]=d);return c};b.values=function(a){return b.map(a,b.identity)};b.functions=b.methods=function(a){var c=[],d;for(d in a)b.isFunction(a[d])&&c.push(d);return c.sort()};b.extend=function(a){j(i.call(arguments,1),function(b){for(var d in b)a[d]=b[d]});return a};b.defaults=function(a){j(i.call(arguments, | |||
| 1),function(b){for(var d in b)a[d]==null&&(a[d]=b[d])});return a};b.clone=function(a){return!b.isObject(a)?a:b.isArray(a)?a.slice():b.extend({},a)};b.tap=function(a,b){b(a);return a};b.isEqual=function(a,b){return q(a,b,[])};b.isEmpty=function(a){if(b.isArray(a)||b.isString(a))return a.length===0;for(var c in a)if(b.has(a,c))return false;return true};b.isElement=function(a){return!!(a&&a.nodeType==1)};b.isArray=o||function(a){return l.call(a)=="[object Array]"};b.isObject=function(a){return a===Object(a)}; | |||
| b.isArguments=function(a){return l.call(a)=="[object Arguments]"};if(!b.isArguments(arguments))b.isArguments=function(a){return!(!a||!b.has(a,"callee"))};b.isFunction=function(a){return l.call(a)=="[object Function]"};b.isString=function(a){return l.call(a)=="[object String]"};b.isNumber=function(a){return l.call(a)=="[object Number]"};b.isNaN=function(a){return a!==a};b.isBoolean=function(a){return a===true||a===false||l.call(a)=="[object Boolean]"};b.isDate=function(a){return l.call(a)=="[object Date]"}; | |||
| b.isRegExp=function(a){return l.call(a)=="[object RegExp]"};b.isNull=function(a){return a===null};b.isUndefined=function(a){return a===void 0};b.has=function(a,b){return I.call(a,b)};b.noConflict=function(){r._=G;return this};b.identity=function(a){return a};b.times=function(a,b,d){for(var e=0;e<a;e++)b.call(d,e)};b.escape=function(a){return(""+a).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'").replace(/\//g,"/")};b.mixin=function(a){j(b.functions(a), | |||
| function(c){K(c,b[c]=a[c])})};var L=0;b.uniqueId=function(a){var b=L++;return a?a+b:b};b.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var t=/.^/,u=function(a){return a.replace(/\\\\/g,"\\").replace(/\\'/g,"'")};b.template=function(a,c){var d=b.templateSettings,d="var __p=[],print=function(){__p.push.apply(__p,arguments);};with(obj||{}){__p.push('"+a.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(d.escape||t,function(a,b){return"',_.escape("+ | |||
| u(b)+"),'"}).replace(d.interpolate||t,function(a,b){return"',"+u(b)+",'"}).replace(d.evaluate||t,function(a,b){return"');"+u(b).replace(/[\r\n\t]/g," ")+";__p.push('"}).replace(/\r/g,"\\r").replace(/\n/g,"\\n").replace(/\t/g,"\\t")+"');}return __p.join('');",e=new Function("obj","_",d);return c?e(c,b):function(a){return e.call(this,a,b)}};b.chain=function(a){return b(a).chain()};var m=function(a){this._wrapped=a};b.prototype=m.prototype;var v=function(a,c){return c?b(a).chain():a},K=function(a,c){m.prototype[a]= | |||
| function(){var a=i.call(arguments);H.call(a,this._wrapped);return v(c.apply(b,a),this._chain)}};b.mixin(b);j("pop,push,reverse,shift,sort,splice,unshift".split(","),function(a){var b=k[a];m.prototype[a]=function(){var d=this._wrapped;b.apply(d,arguments);var e=d.length;(a=="shift"||a=="splice")&&e===0&&delete d[0];return v(d,this._chain)}});j(["concat","join","slice"],function(a){var b=k[a];m.prototype[a]=function(){return v(b.apply(this._wrapped,arguments),this._chain)}});m.prototype.chain=function(){this._chain= | |||
| true;return this};m.prototype.value=function(){return this._wrapped}}).call(this); | |||
| @@ -0,0 +1,808 @@ | |||
| /* | |||
| * websupport.js | |||
| * ~~~~~~~~~~~~~ | |||
| * | |||
| * sphinx.websupport utilties for all documentation. | |||
| * | |||
| * :copyright: Copyright 2007-2013 by the Sphinx team, see AUTHORS. | |||
| * :license: BSD, see LICENSE for details. | |||
| * | |||
| */ | |||
| (function($) { | |||
| $.fn.autogrow = function() { | |||
| return this.each(function() { | |||
| var textarea = this; | |||
| $.fn.autogrow.resize(textarea); | |||
| $(textarea) | |||
| .focus(function() { | |||
| textarea.interval = setInterval(function() { | |||
| $.fn.autogrow.resize(textarea); | |||
| }, 500); | |||
| }) | |||
| .blur(function() { | |||
| clearInterval(textarea.interval); | |||
| }); | |||
| }); | |||
| }; | |||
| $.fn.autogrow.resize = function(textarea) { | |||
| var lineHeight = parseInt($(textarea).css('line-height'), 10); | |||
| var lines = textarea.value.split('\n'); | |||
| var columns = textarea.cols; | |||
| var lineCount = 0; | |||
| $.each(lines, function() { | |||
| lineCount += Math.ceil(this.length / columns) || 1; | |||
| }); | |||
| var height = lineHeight * (lineCount + 1); | |||
| $(textarea).css('height', height); | |||
| }; | |||
| })(jQuery); | |||
| (function($) { | |||
| var comp, by; | |||
| function init() { | |||
| initEvents(); | |||
| initComparator(); | |||
| } | |||
| function initEvents() { | |||
| $('a.comment-close').live("click", function(event) { | |||
| event.preventDefault(); | |||
| hide($(this).attr('id').substring(2)); | |||
| }); | |||
| $('a.vote').live("click", function(event) { | |||
| event.preventDefault(); | |||
| handleVote($(this)); | |||
| }); | |||
| $('a.reply').live("click", function(event) { | |||
| event.preventDefault(); | |||
| openReply($(this).attr('id').substring(2)); | |||
| }); | |||
| $('a.close-reply').live("click", function(event) { | |||
| event.preventDefault(); | |||
| closeReply($(this).attr('id').substring(2)); | |||
| }); | |||
| $('a.sort-option').live("click", function(event) { | |||
| event.preventDefault(); | |||
| handleReSort($(this)); | |||
| }); | |||
| $('a.show-proposal').live("click", function(event) { | |||
| event.preventDefault(); | |||
| showProposal($(this).attr('id').substring(2)); | |||
| }); | |||
| $('a.hide-proposal').live("click", function(event) { | |||
| event.preventDefault(); | |||
| hideProposal($(this).attr('id').substring(2)); | |||
| }); | |||
| $('a.show-propose-change').live("click", function(event) { | |||
| event.preventDefault(); | |||
| showProposeChange($(this).attr('id').substring(2)); | |||
| }); | |||
| $('a.hide-propose-change').live("click", function(event) { | |||
| event.preventDefault(); | |||
| hideProposeChange($(this).attr('id').substring(2)); | |||
| }); | |||
| $('a.accept-comment').live("click", function(event) { | |||
| event.preventDefault(); | |||
| acceptComment($(this).attr('id').substring(2)); | |||
| }); | |||
| $('a.delete-comment').live("click", function(event) { | |||
| event.preventDefault(); | |||
| deleteComment($(this).attr('id').substring(2)); | |||
| }); | |||
| $('a.comment-markup').live("click", function(event) { | |||
| event.preventDefault(); | |||
| toggleCommentMarkupBox($(this).attr('id').substring(2)); | |||
| }); | |||
| } | |||
| /** | |||
| * Set comp, which is a comparator function used for sorting and | |||
| * inserting comments into the list. | |||
| */ | |||
| function setComparator() { | |||
| // If the first three letters are "asc", sort in ascending order | |||
| // and remove the prefix. | |||
| if (by.substring(0,3) == 'asc') { | |||
| var i = by.substring(3); | |||
| comp = function(a, b) { return a[i] - b[i]; }; | |||
| } else { | |||
| // Otherwise sort in descending order. | |||
| comp = function(a, b) { return b[by] - a[by]; }; | |||
| } | |||
| // Reset link styles and format the selected sort option. | |||
| $('a.sel').attr('href', '#').removeClass('sel'); | |||
| $('a.by' + by).removeAttr('href').addClass('sel'); | |||
| } | |||
| /** | |||
| * Create a comp function. If the user has preferences stored in | |||
| * the sortBy cookie, use those, otherwise use the default. | |||
| */ | |||
| function initComparator() { | |||
| by = 'rating'; // Default to sort by rating. | |||
| // If the sortBy cookie is set, use that instead. | |||
| if (document.cookie.length > 0) { | |||
| var start = document.cookie.indexOf('sortBy='); | |||
| if (start != -1) { | |||
| start = start + 7; | |||
| var end = document.cookie.indexOf(";", start); | |||
| if (end == -1) { | |||
| end = document.cookie.length; | |||
| by = unescape(document.cookie.substring(start, end)); | |||
| } | |||
| } | |||
| } | |||
| setComparator(); | |||
| } | |||
| /** | |||
| * Show a comment div. | |||
| */ | |||
| function show(id) { | |||
| $('#ao' + id).hide(); | |||
| $('#ah' + id).show(); | |||
| var context = $.extend({id: id}, opts); | |||
| var popup = $(renderTemplate(popupTemplate, context)).hide(); | |||
| popup.find('textarea[name="proposal"]').hide(); | |||
| popup.find('a.by' + by).addClass('sel'); | |||
| var form = popup.find('#cf' + id); | |||
| form.submit(function(event) { | |||
| event.preventDefault(); | |||
| addComment(form); | |||
| }); | |||
| $('#s' + id).after(popup); | |||
| popup.slideDown('fast', function() { | |||
| getComments(id); | |||
| }); | |||
| } | |||
| /** | |||
| * Hide a comment div. | |||
| */ | |||
| function hide(id) { | |||
| $('#ah' + id).hide(); | |||
| $('#ao' + id).show(); | |||
| var div = $('#sc' + id); | |||
| div.slideUp('fast', function() { | |||
| div.remove(); | |||
| }); | |||
| } | |||
| /** | |||
| * Perform an ajax request to get comments for a node | |||
| * and insert the comments into the comments tree. | |||
| */ | |||
| function getComments(id) { | |||
| $.ajax({ | |||
| type: 'GET', | |||
| url: opts.getCommentsURL, | |||
| data: {node: id}, | |||
| success: function(data, textStatus, request) { | |||
| var ul = $('#cl' + id); | |||
| var speed = 100; | |||
| $('#cf' + id) | |||
| .find('textarea[name="proposal"]') | |||
| .data('source', data.source); | |||
| if (data.comments.length === 0) { | |||
| ul.html('<li>No comments yet.</li>'); | |||
| ul.data('empty', true); | |||
| } else { | |||
| // If there are comments, sort them and put them in the list. | |||
| var comments = sortComments(data.comments); | |||
| speed = data.comments.length * 100; | |||
| appendComments(comments, ul); | |||
| ul.data('empty', false); | |||
| } | |||
| $('#cn' + id).slideUp(speed + 200); | |||
| ul.slideDown(speed); | |||
| }, | |||
| error: function(request, textStatus, error) { | |||
| showError('Oops, there was a problem retrieving the comments.'); | |||
| }, | |||
| dataType: 'json' | |||
| }); | |||
| } | |||
| /** | |||
| * Add a comment via ajax and insert the comment into the comment tree. | |||
| */ | |||
| function addComment(form) { | |||
| var node_id = form.find('input[name="node"]').val(); | |||
| var parent_id = form.find('input[name="parent"]').val(); | |||
| var text = form.find('textarea[name="comment"]').val(); | |||
| var proposal = form.find('textarea[name="proposal"]').val(); | |||
| if (text == '') { | |||
| showError('Please enter a comment.'); | |||
| return; | |||
| } | |||
| // Disable the form that is being submitted. | |||
| form.find('textarea,input').attr('disabled', 'disabled'); | |||
| // Send the comment to the server. | |||
| $.ajax({ | |||
| type: "POST", | |||
| url: opts.addCommentURL, | |||
| dataType: 'json', | |||
| data: { | |||
| node: node_id, | |||
| parent: parent_id, | |||
| text: text, | |||
| proposal: proposal | |||
| }, | |||
| success: function(data, textStatus, error) { | |||
| // Reset the form. | |||
| if (node_id) { | |||
| hideProposeChange(node_id); | |||
| } | |||
| form.find('textarea') | |||
| .val('') | |||
| .add(form.find('input')) | |||
| .removeAttr('disabled'); | |||
| var ul = $('#cl' + (node_id || parent_id)); | |||
| if (ul.data('empty')) { | |||
| $(ul).empty(); | |||
| ul.data('empty', false); | |||
| } | |||
| insertComment(data.comment); | |||
| var ao = $('#ao' + node_id); | |||
| ao.find('img').attr({'src': opts.commentBrightImage}); | |||
| if (node_id) { | |||
| // if this was a "root" comment, remove the commenting box | |||
| // (the user can get it back by reopening the comment popup) | |||
| $('#ca' + node_id).slideUp(); | |||
| } | |||
| }, | |||
| error: function(request, textStatus, error) { | |||
| form.find('textarea,input').removeAttr('disabled'); | |||
| showError('Oops, there was a problem adding the comment.'); | |||
| } | |||
| }); | |||
| } | |||
| /** | |||
| * Recursively append comments to the main comment list and children | |||
| * lists, creating the comment tree. | |||
| */ | |||
| function appendComments(comments, ul) { | |||
| $.each(comments, function() { | |||
| var div = createCommentDiv(this); | |||
| ul.append($(document.createElement('li')).html(div)); | |||
| appendComments(this.children, div.find('ul.comment-children')); | |||
| // To avoid stagnating data, don't store the comments children in data. | |||
| this.children = null; | |||
| div.data('comment', this); | |||
| }); | |||
| } | |||
| /** | |||
| * After adding a new comment, it must be inserted in the correct | |||
| * location in the comment tree. | |||
| */ | |||
| function insertComment(comment) { | |||
| var div = createCommentDiv(comment); | |||
| // To avoid stagnating data, don't store the comments children in data. | |||
| comment.children = null; | |||
| div.data('comment', comment); | |||
| var ul = $('#cl' + (comment.node || comment.parent)); | |||
| var siblings = getChildren(ul); | |||
| var li = $(document.createElement('li')); | |||
| li.hide(); | |||
| // Determine where in the parents children list to insert this comment. | |||
| for(i=0; i < siblings.length; i++) { | |||
| if (comp(comment, siblings[i]) <= 0) { | |||
| $('#cd' + siblings[i].id) | |||
| .parent() | |||
| .before(li.html(div)); | |||
| li.slideDown('fast'); | |||
| return; | |||
| } | |||
| } | |||
| // If we get here, this comment rates lower than all the others, | |||
| // or it is the only comment in the list. | |||
| ul.append(li.html(div)); | |||
| li.slideDown('fast'); | |||
| } | |||
| function acceptComment(id) { | |||
| $.ajax({ | |||
| type: 'POST', | |||
| url: opts.acceptCommentURL, | |||
| data: {id: id}, | |||
| success: function(data, textStatus, request) { | |||
| $('#cm' + id).fadeOut('fast'); | |||
| $('#cd' + id).removeClass('moderate'); | |||
| }, | |||
| error: function(request, textStatus, error) { | |||
| showError('Oops, there was a problem accepting the comment.'); | |||
| } | |||
| }); | |||
| } | |||
| function deleteComment(id) { | |||
| $.ajax({ | |||
| type: 'POST', | |||
| url: opts.deleteCommentURL, | |||
| data: {id: id}, | |||
| success: function(data, textStatus, request) { | |||
| var div = $('#cd' + id); | |||
| if (data == 'delete') { | |||
| // Moderator mode: remove the comment and all children immediately | |||
| div.slideUp('fast', function() { | |||
| div.remove(); | |||
| }); | |||
| return; | |||
| } | |||
| // User mode: only mark the comment as deleted | |||
| div | |||
| .find('span.user-id:first') | |||
| .text('[deleted]').end() | |||
| .find('div.comment-text:first') | |||
| .text('[deleted]').end() | |||
| .find('#cm' + id + ', #dc' + id + ', #ac' + id + ', #rc' + id + | |||
| ', #sp' + id + ', #hp' + id + ', #cr' + id + ', #rl' + id) | |||
| .remove(); | |||
| var comment = div.data('comment'); | |||
| comment.username = '[deleted]'; | |||
| comment.text = '[deleted]'; | |||
| div.data('comment', comment); | |||
| }, | |||
| error: function(request, textStatus, error) { | |||
| showError('Oops, there was a problem deleting the comment.'); | |||
| } | |||
| }); | |||
| } | |||
| function showProposal(id) { | |||
| $('#sp' + id).hide(); | |||
| $('#hp' + id).show(); | |||
| $('#pr' + id).slideDown('fast'); | |||
| } | |||
| function hideProposal(id) { | |||
| $('#hp' + id).hide(); | |||
| $('#sp' + id).show(); | |||
| $('#pr' + id).slideUp('fast'); | |||
| } | |||
| function showProposeChange(id) { | |||
| $('#pc' + id).hide(); | |||
| $('#hc' + id).show(); | |||
| var textarea = $('#pt' + id); | |||
| textarea.val(textarea.data('source')); | |||
| $.fn.autogrow.resize(textarea[0]); | |||
| textarea.slideDown('fast'); | |||
| } | |||
| function hideProposeChange(id) { | |||
| $('#hc' + id).hide(); | |||
| $('#pc' + id).show(); | |||
| var textarea = $('#pt' + id); | |||
| textarea.val('').removeAttr('disabled'); | |||
| textarea.slideUp('fast'); | |||
| } | |||
| function toggleCommentMarkupBox(id) { | |||
| $('#mb' + id).toggle(); | |||
| } | |||
| /** Handle when the user clicks on a sort by link. */ | |||
| function handleReSort(link) { | |||
| var classes = link.attr('class').split(/\s+/); | |||
| for (var i=0; i<classes.length; i++) { | |||
| if (classes[i] != 'sort-option') { | |||
| by = classes[i].substring(2); | |||
| } | |||
| } | |||
| setComparator(); | |||
| // Save/update the sortBy cookie. | |||
| var expiration = new Date(); | |||
| expiration.setDate(expiration.getDate() + 365); | |||
| document.cookie= 'sortBy=' + escape(by) + | |||
| ';expires=' + expiration.toUTCString(); | |||
| $('ul.comment-ul').each(function(index, ul) { | |||
| var comments = getChildren($(ul), true); | |||
| comments = sortComments(comments); | |||
| appendComments(comments, $(ul).empty()); | |||
| }); | |||
| } | |||
| /** | |||
| * Function to process a vote when a user clicks an arrow. | |||
| */ | |||
| function handleVote(link) { | |||
| if (!opts.voting) { | |||
| showError("You'll need to login to vote."); | |||
| return; | |||
| } | |||
| var id = link.attr('id'); | |||
| if (!id) { | |||
| // Didn't click on one of the voting arrows. | |||
| return; | |||
| } | |||
| // If it is an unvote, the new vote value is 0, | |||
| // Otherwise it's 1 for an upvote, or -1 for a downvote. | |||
| var value = 0; | |||
| if (id.charAt(1) != 'u') { | |||
| value = id.charAt(0) == 'u' ? 1 : -1; | |||
| } | |||
| // The data to be sent to the server. | |||
| var d = { | |||
| comment_id: id.substring(2), | |||
| value: value | |||
| }; | |||
| // Swap the vote and unvote links. | |||
| link.hide(); | |||
| $('#' + id.charAt(0) + (id.charAt(1) == 'u' ? 'v' : 'u') + d.comment_id) | |||
| .show(); | |||
| // The div the comment is displayed in. | |||
| var div = $('div#cd' + d.comment_id); | |||
| var data = div.data('comment'); | |||
| // If this is not an unvote, and the other vote arrow has | |||
| // already been pressed, unpress it. | |||
| if ((d.value !== 0) && (data.vote === d.value * -1)) { | |||
| $('#' + (d.value == 1 ? 'd' : 'u') + 'u' + d.comment_id).hide(); | |||
| $('#' + (d.value == 1 ? 'd' : 'u') + 'v' + d.comment_id).show(); | |||
| } | |||
| // Update the comments rating in the local data. | |||
| data.rating += (data.vote === 0) ? d.value : (d.value - data.vote); | |||
| data.vote = d.value; | |||
| div.data('comment', data); | |||
| // Change the rating text. | |||
| div.find('.rating:first') | |||
| .text(data.rating + ' point' + (data.rating == 1 ? '' : 's')); | |||
| // Send the vote information to the server. | |||
| $.ajax({ | |||
| type: "POST", | |||
| url: opts.processVoteURL, | |||
| data: d, | |||
| error: function(request, textStatus, error) { | |||
| showError('Oops, there was a problem casting that vote.'); | |||
| } | |||
| }); | |||
| } | |||
| /** | |||
| * Open a reply form used to reply to an existing comment. | |||
| */ | |||
| function openReply(id) { | |||
| // Swap out the reply link for the hide link | |||
| $('#rl' + id).hide(); | |||
| $('#cr' + id).show(); | |||
| // Add the reply li to the children ul. | |||
| var div = $(renderTemplate(replyTemplate, {id: id})).hide(); | |||
| $('#cl' + id) | |||
| .prepend(div) | |||
| // Setup the submit handler for the reply form. | |||
| .find('#rf' + id) | |||
| .submit(function(event) { | |||
| event.preventDefault(); | |||
| addComment($('#rf' + id)); | |||
| closeReply(id); | |||
| }) | |||
| .find('input[type=button]') | |||
| .click(function() { | |||
| closeReply(id); | |||
| }); | |||
| div.slideDown('fast', function() { | |||
| $('#rf' + id).find('textarea').focus(); | |||
| }); | |||
| } | |||
| /** | |||
| * Close the reply form opened with openReply. | |||
| */ | |||
| function closeReply(id) { | |||
| // Remove the reply div from the DOM. | |||
| $('#rd' + id).slideUp('fast', function() { | |||
| $(this).remove(); | |||
| }); | |||
| // Swap out the hide link for the reply link | |||
| $('#cr' + id).hide(); | |||
| $('#rl' + id).show(); | |||
| } | |||
| /** | |||
| * Recursively sort a tree of comments using the comp comparator. | |||
| */ | |||
| function sortComments(comments) { | |||
| comments.sort(comp); | |||
| $.each(comments, function() { | |||
| this.children = sortComments(this.children); | |||
| }); | |||
| return comments; | |||
| } | |||
| /** | |||
| * Get the children comments from a ul. If recursive is true, | |||
| * recursively include childrens' children. | |||
| */ | |||
| function getChildren(ul, recursive) { | |||
| var children = []; | |||
| ul.children().children("[id^='cd']") | |||
| .each(function() { | |||
| var comment = $(this).data('comment'); | |||
| if (recursive) | |||
| comment.children = getChildren($(this).find('#cl' + comment.id), true); | |||
| children.push(comment); | |||
| }); | |||
| return children; | |||
| } | |||
| /** Create a div to display a comment in. */ | |||
| function createCommentDiv(comment) { | |||
| if (!comment.displayed && !opts.moderator) { | |||
| return $('<div class="moderate">Thank you! Your comment will show up ' | |||
| + 'once it is has been approved by a moderator.</div>'); | |||
| } | |||
| // Prettify the comment rating. | |||
| comment.pretty_rating = comment.rating + ' point' + | |||
| (comment.rating == 1 ? '' : 's'); | |||
| // Make a class (for displaying not yet moderated comments differently) | |||
| comment.css_class = comment.displayed ? '' : ' moderate'; | |||
| // Create a div for this comment. | |||
| var context = $.extend({}, opts, comment); | |||
| var div = $(renderTemplate(commentTemplate, context)); | |||
| // If the user has voted on this comment, highlight the correct arrow. | |||
| if (comment.vote) { | |||
| var direction = (comment.vote == 1) ? 'u' : 'd'; | |||
| div.find('#' + direction + 'v' + comment.id).hide(); | |||
| div.find('#' + direction + 'u' + comment.id).show(); | |||
| } | |||
| if (opts.moderator || comment.text != '[deleted]') { | |||
| div.find('a.reply').show(); | |||
| if (comment.proposal_diff) | |||
| div.find('#sp' + comment.id).show(); | |||
| if (opts.moderator && !comment.displayed) | |||
| div.find('#cm' + comment.id).show(); | |||
| if (opts.moderator || (opts.username == comment.username)) | |||
| div.find('#dc' + comment.id).show(); | |||
| } | |||
| return div; | |||
| } | |||
| /** | |||
| * A simple template renderer. Placeholders such as <%id%> are replaced | |||
| * by context['id'] with items being escaped. Placeholders such as <#id#> | |||
| * are not escaped. | |||
| */ | |||
| function renderTemplate(template, context) { | |||
| var esc = $(document.createElement('div')); | |||
| function handle(ph, escape) { | |||
| var cur = context; | |||
| $.each(ph.split('.'), function() { | |||
| cur = cur[this]; | |||
| }); | |||
| return escape ? esc.text(cur || "").html() : cur; | |||
| } | |||
| return template.replace(/<([%#])([\w\.]*)\1>/g, function() { | |||
| return handle(arguments[2], arguments[1] == '%' ? true : false); | |||
| }); | |||
| } | |||
| /** Flash an error message briefly. */ | |||
| function showError(message) { | |||
| $(document.createElement('div')).attr({'class': 'popup-error'}) | |||
| .append($(document.createElement('div')) | |||
| .attr({'class': 'error-message'}).text(message)) | |||
| .appendTo('body') | |||
| .fadeIn("slow") | |||
| .delay(2000) | |||
| .fadeOut("slow"); | |||
| } | |||
| /** Add a link the user uses to open the comments popup. */ | |||
| $.fn.comment = function() { | |||
| return this.each(function() { | |||
| var id = $(this).attr('id').substring(1); | |||
| var count = COMMENT_METADATA[id]; | |||
| var title = count + ' comment' + (count == 1 ? '' : 's'); | |||
| var image = count > 0 ? opts.commentBrightImage : opts.commentImage; | |||
| var addcls = count == 0 ? ' nocomment' : ''; | |||
| $(this) | |||
| .append( | |||
| $(document.createElement('a')).attr({ | |||
| href: '#', | |||
| 'class': 'sphinx-comment-open' + addcls, | |||
| id: 'ao' + id | |||
| }) | |||
| .append($(document.createElement('img')).attr({ | |||
| src: image, | |||
| alt: 'comment', | |||
| title: title | |||
| })) | |||
| .click(function(event) { | |||
| event.preventDefault(); | |||
| show($(this).attr('id').substring(2)); | |||
| }) | |||
| ) | |||
| .append( | |||
| $(document.createElement('a')).attr({ | |||
| href: '#', | |||
| 'class': 'sphinx-comment-close hidden', | |||
| id: 'ah' + id | |||
| }) | |||
| .append($(document.createElement('img')).attr({ | |||
| src: opts.closeCommentImage, | |||
| alt: 'close', | |||
| title: 'close' | |||
| })) | |||
| .click(function(event) { | |||
| event.preventDefault(); | |||
| hide($(this).attr('id').substring(2)); | |||
| }) | |||
| ); | |||
| }); | |||
| }; | |||
| var opts = { | |||
| processVoteURL: '/_process_vote', | |||
| addCommentURL: '/_add_comment', | |||
| getCommentsURL: '/_get_comments', | |||
| acceptCommentURL: '/_accept_comment', | |||
| deleteCommentURL: '/_delete_comment', | |||
| commentImage: '/static/_static/comment.png', | |||
| closeCommentImage: '/static/_static/comment-close.png', | |||
| loadingImage: '/static/_static/ajax-loader.gif', | |||
| commentBrightImage: '/static/_static/comment-bright.png', | |||
| upArrow: '/static/_static/up.png', | |||
| downArrow: '/static/_static/down.png', | |||
| upArrowPressed: '/static/_static/up-pressed.png', | |||
| downArrowPressed: '/static/_static/down-pressed.png', | |||
| voting: false, | |||
| moderator: false | |||
| }; | |||
| if (typeof COMMENT_OPTIONS != "undefined") { | |||
| opts = jQuery.extend(opts, COMMENT_OPTIONS); | |||
| } | |||
| var popupTemplate = '\ | |||
| <div class="sphinx-comments" id="sc<%id%>">\ | |||
| <p class="sort-options">\ | |||
| Sort by:\ | |||
| <a href="#" class="sort-option byrating">best rated</a>\ | |||
| <a href="#" class="sort-option byascage">newest</a>\ | |||
| <a href="#" class="sort-option byage">oldest</a>\ | |||
| </p>\ | |||
| <div class="comment-header">Comments</div>\ | |||
| <div class="comment-loading" id="cn<%id%>">\ | |||
| loading comments... <img src="<%loadingImage%>" alt="" /></div>\ | |||
| <ul id="cl<%id%>" class="comment-ul"></ul>\ | |||
| <div id="ca<%id%>">\ | |||
| <p class="add-a-comment">Add a comment\ | |||
| (<a href="#" class="comment-markup" id="ab<%id%>">markup</a>):</p>\ | |||
| <div class="comment-markup-box" id="mb<%id%>">\ | |||
| reStructured text markup: <i>*emph*</i>, <b>**strong**</b>, \ | |||
| <tt>``code``</tt>, \ | |||
| code blocks: <tt>::</tt> and an indented block after blank line</div>\ | |||
| <form method="post" id="cf<%id%>" class="comment-form" action="">\ | |||
| <textarea name="comment" cols="80"></textarea>\ | |||
| <p class="propose-button">\ | |||
| <a href="#" id="pc<%id%>" class="show-propose-change">\ | |||
| Propose a change ▹\ | |||
| </a>\ | |||
| <a href="#" id="hc<%id%>" class="hide-propose-change">\ | |||
| Propose a change ▿\ | |||
| </a>\ | |||
| </p>\ | |||
| <textarea name="proposal" id="pt<%id%>" cols="80"\ | |||
| spellcheck="false"></textarea>\ | |||
| <input type="submit" value="Add comment" />\ | |||
| <input type="hidden" name="node" value="<%id%>" />\ | |||
| <input type="hidden" name="parent" value="" />\ | |||
| </form>\ | |||
| </div>\ | |||
| </div>'; | |||
| var commentTemplate = '\ | |||
| <div id="cd<%id%>" class="sphinx-comment<%css_class%>">\ | |||
| <div class="vote">\ | |||
| <div class="arrow">\ | |||
| <a href="#" id="uv<%id%>" class="vote" title="vote up">\ | |||
| <img src="<%upArrow%>" />\ | |||
| </a>\ | |||
| <a href="#" id="uu<%id%>" class="un vote" title="vote up">\ | |||
| <img src="<%upArrowPressed%>" />\ | |||
| </a>\ | |||
| </div>\ | |||
| <div class="arrow">\ | |||
| <a href="#" id="dv<%id%>" class="vote" title="vote down">\ | |||
| <img src="<%downArrow%>" id="da<%id%>" />\ | |||
| </a>\ | |||
| <a href="#" id="du<%id%>" class="un vote" title="vote down">\ | |||
| <img src="<%downArrowPressed%>" />\ | |||
| </a>\ | |||
| </div>\ | |||
| </div>\ | |||
| <div class="comment-content">\ | |||
| <p class="tagline comment">\ | |||
| <span class="user-id"><%username%></span>\ | |||
| <span class="rating"><%pretty_rating%></span>\ | |||
| <span class="delta"><%time.delta%></span>\ | |||
| </p>\ | |||
| <div class="comment-text comment"><#text#></div>\ | |||
| <p class="comment-opts comment">\ | |||
| <a href="#" class="reply hidden" id="rl<%id%>">reply ▹</a>\ | |||
| <a href="#" class="close-reply" id="cr<%id%>">reply ▿</a>\ | |||
| <a href="#" id="sp<%id%>" class="show-proposal">proposal ▹</a>\ | |||
| <a href="#" id="hp<%id%>" class="hide-proposal">proposal ▿</a>\ | |||
| <a href="#" id="dc<%id%>" class="delete-comment hidden">delete</a>\ | |||
| <span id="cm<%id%>" class="moderation hidden">\ | |||
| <a href="#" id="ac<%id%>" class="accept-comment">accept</a>\ | |||
| </span>\ | |||
| </p>\ | |||
| <pre class="proposal" id="pr<%id%>">\ | |||
| <#proposal_diff#>\ | |||
| </pre>\ | |||
| <ul class="comment-children" id="cl<%id%>"></ul>\ | |||
| </div>\ | |||
| <div class="clearleft"></div>\ | |||
| </div>\ | |||
| </div>'; | |||
| var replyTemplate = '\ | |||
| <li>\ | |||
| <div class="reply-div" id="rd<%id%>">\ | |||
| <form id="rf<%id%>">\ | |||
| <textarea name="comment" cols="80"></textarea>\ | |||
| <input type="submit" value="Add reply" />\ | |||
| <input type="button" value="Cancel" />\ | |||
| <input type="hidden" name="parent" value="<%id%>" />\ | |||
| <input type="hidden" name="node" value="" />\ | |||
| </form>\ | |||
| </div>\ | |||
| </li>'; | |||
| $(document).ready(function() { | |||
| init(); | |||
| }); | |||
| })(jQuery); | |||
| $(document).ready(function() { | |||
| // add comment anchors for all paragraphs that are commentable | |||
| $('.sphinx-has-comment').comment(); | |||
| // highlight search words in search results | |||
| $("div.context").each(function() { | |||
| var params = $.getQueryParameters(); | |||
| var terms = (params.q) ? params.q[0].split(/\s+/) : []; | |||
| var result = $(this); | |||
| $.each(terms, function() { | |||
| result.highlightText(this.toLowerCase(), 'highlighted'); | |||
| }); | |||
| }); | |||
| // directly open comment window if requested | |||
| var anchor = document.location.hash; | |||
| if (anchor.substring(0, 9) == '#comment-') { | |||
| $('#ao' + anchor.substring(9)).click(); | |||
| document.location.hash = '#s' + anchor.substring(9); | |||
| } | |||
| }); | |||
| @@ -0,0 +1,683 @@ | |||
| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" | |||
| "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> | |||
| <html xmlns="http://www.w3.org/1999/xhtml"> | |||
| <head> | |||
| <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> | |||
| <title>Index — pyad2usb documentation</title> | |||
| <link rel="stylesheet" href="_static/default.css" type="text/css" /> | |||
| <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> | |||
| <script type="text/javascript"> | |||
| var DOCUMENTATION_OPTIONS = { | |||
| URL_ROOT: './', | |||
| VERSION: '', | |||
| COLLAPSE_INDEX: false, | |||
| FILE_SUFFIX: '.html', | |||
| HAS_SOURCE: true | |||
| }; | |||
| </script> | |||
| <script type="text/javascript" src="_static/jquery.js"></script> | |||
| <script type="text/javascript" src="_static/underscore.js"></script> | |||
| <script type="text/javascript" src="_static/doctools.js"></script> | |||
| <link rel="top" title="pyad2usb documentation" href="index.html" /> | |||
| </head> | |||
| <body> | |||
| <div class="related"> | |||
| <h3>Navigation</h3> | |||
| <ul> | |||
| <li class="right" style="margin-right: 10px"> | |||
| <a href="#" title="General Index" | |||
| accesskey="I">index</a></li> | |||
| <li class="right" > | |||
| <a href="py-modindex.html" title="Python Module Index" | |||
| >modules</a> |</li> | |||
| <li><a href="index.html">pyad2usb documentation</a> »</li> | |||
| </ul> | |||
| </div> | |||
| <div class="document"> | |||
| <div class="documentwrapper"> | |||
| <div class="bodywrapper"> | |||
| <div class="body"> | |||
| <h1 id="index">Index</h1> | |||
| <div class="genindex-jumpbox"> | |||
| <a href="#A"><strong>A</strong></a> | |||
| | <a href="#B"><strong>B</strong></a> | |||
| | <a href="#C"><strong>C</strong></a> | |||
| | <a href="#D"><strong>D</strong></a> | |||
| | <a href="#E"><strong>E</strong></a> | |||
| | <a href="#F"><strong>F</strong></a> | |||
| | <a href="#G"><strong>G</strong></a> | |||
| | <a href="#I"><strong>I</strong></a> | |||
| | <a href="#L"><strong>L</strong></a> | |||
| | <a href="#M"><strong>M</strong></a> | |||
| | <a href="#N"><strong>N</strong></a> | |||
| | <a href="#O"><strong>O</strong></a> | |||
| | <a href="#P"><strong>P</strong></a> | |||
| | <a href="#R"><strong>R</strong></a> | |||
| | <a href="#S"><strong>S</strong></a> | |||
| | <a href="#T"><strong>T</strong></a> | |||
| | <a href="#U"><strong>U</strong></a> | |||
| | <a href="#W"><strong>W</strong></a> | |||
| | <a href="#Z"><strong>Z</strong></a> | |||
| </div> | |||
| <h2 id="A">A</h2> | |||
| <table style="width: 100%" class="indextable genindextable"><tr> | |||
| <td style="width: 33%" valign="top"><dl> | |||
| <dt><a href="pyad2usb.html#pyad2usb.ad2usb.AD2USB">AD2USB (class in pyad2usb.ad2usb)</a> | |||
| </dt> | |||
| </dl></td> | |||
| <td style="width: 33%" valign="top"><dl> | |||
| <dt><a href="pyad2usb.event.html#pyad2usb.event.event.EventHandler.add">add() (pyad2usb.event.event.EventHandler method)</a> | |||
| </dt> | |||
| </dl></td> | |||
| </tr></table> | |||
| <h2 id="B">B</h2> | |||
| <table style="width: 100%" class="indextable genindextable"><tr> | |||
| <td style="width: 33%" valign="top"><dl> | |||
| <dt><a href="pyad2usb.html#pyad2usb.devices.SerialDevice.BAUDRATE">BAUDRATE (pyad2usb.devices.SerialDevice attribute)</a> | |||
| </dt> | |||
| <dd><dl> | |||
| <dt><a href="pyad2usb.html#pyad2usb.devices.USBDevice.BAUDRATE">(pyad2usb.devices.USBDevice attribute)</a> | |||
| </dt> | |||
| </dl></dd> | |||
| </dl></td> | |||
| </tr></table> | |||
| <h2 id="C">C</h2> | |||
| <table style="width: 100%" class="indextable genindextable"><tr> | |||
| <td style="width: 33%" valign="top"><dl> | |||
| <dt><a href="pyad2usb.html#pyad2usb.ad2usb.AD2USB.close">close() (pyad2usb.ad2usb.AD2USB method)</a> | |||
| </dt> | |||
| <dd><dl> | |||
| <dt><a href="pyad2usb.html#pyad2usb.ad2usb.Overseer.close">(pyad2usb.ad2usb.Overseer method)</a> | |||
| </dt> | |||
| <dt><a href="pyad2usb.html#pyad2usb.devices.SerialDevice.close">(pyad2usb.devices.SerialDevice method)</a> | |||
| </dt> | |||
| <dt><a href="pyad2usb.html#pyad2usb.devices.SocketDevice.close">(pyad2usb.devices.SocketDevice method)</a> | |||
| </dt> | |||
| <dt><a href="pyad2usb.html#pyad2usb.devices.USBDevice.close">(pyad2usb.devices.USBDevice method)</a> | |||
| </dt> | |||
| </dl></dd> | |||
| <dt><a href="pyad2usb.html#pyad2usb.util.CommError">CommError</a> | |||
| </dt> | |||
| </dl></td> | |||
| <td style="width: 33%" valign="top"><dl> | |||
| <dt><a href="pyad2usb.html#pyad2usb.ad2usb.Overseer.create">create() (pyad2usb.ad2usb.Overseer class method)</a> | |||
| </dt> | |||
| </dl></td> | |||
| </tr></table> | |||
| <h2 id="D">D</h2> | |||
| <table style="width: 100%" class="indextable genindextable"><tr> | |||
| <td style="width: 33%" valign="top"><dl> | |||
| <dt><a href="pyad2usb.html#pyad2usb.devices.Device">Device (class in pyad2usb.devices)</a> | |||
| </dt> | |||
| <dt><a href="pyad2usb.html#pyad2usb.devices.Device.ReadThread">Device.ReadThread (class in pyad2usb.devices)</a> | |||
| </dt> | |||
| </dl></td> | |||
| <td style="width: 33%" valign="top"><dl> | |||
| <dt><a href="pyad2usb.html#pyad2usb.ad2usb.Overseer.devices">devices() (pyad2usb.ad2usb.Overseer class method)</a> | |||
| </dt> | |||
| </dl></td> | |||
| </tr></table> | |||
| <h2 id="E">E</h2> | |||
| <table style="width: 100%" class="indextable genindextable"><tr> | |||
| <td style="width: 33%" valign="top"><dl> | |||
| <dt><a href="pyad2usb.event.html#pyad2usb.event.event.Event">Event (class in pyad2usb.event.event)</a> | |||
| </dt> | |||
| <dt><a href="pyad2usb.event.html#pyad2usb.event.event.EventHandler">EventHandler (class in pyad2usb.event.event)</a> | |||
| </dt> | |||
| </dl></td> | |||
| <td style="width: 33%" valign="top"><dl> | |||
| <dt><a href="pyad2usb.html#pyad2usb.ad2usb.ExpanderMessage">ExpanderMessage (class in pyad2usb.ad2usb)</a> | |||
| </dt> | |||
| </dl></td> | |||
| </tr></table> | |||
| <h2 id="F">F</h2> | |||
| <table style="width: 100%" class="indextable genindextable"><tr> | |||
| <td style="width: 33%" valign="top"><dl> | |||
| <dt><a href="pyad2usb.html#pyad2usb.ad2usb.AD2USB.F1">F1 (pyad2usb.ad2usb.AD2USB attribute)</a> | |||
| </dt> | |||
| <dt><a href="pyad2usb.html#pyad2usb.ad2usb.AD2USB.F2">F2 (pyad2usb.ad2usb.AD2USB attribute)</a> | |||
| </dt> | |||
| <dt><a href="pyad2usb.html#pyad2usb.ad2usb.AD2USB.F3">F3 (pyad2usb.ad2usb.AD2USB attribute)</a> | |||
| </dt> | |||
| <dt><a href="pyad2usb.html#pyad2usb.ad2usb.AD2USB.F4">F4 (pyad2usb.ad2usb.AD2USB attribute)</a> | |||
| </dt> | |||
| <dt><a href="pyad2usb.html#pyad2usb.ad2usb.Overseer.find_all">find_all() (pyad2usb.ad2usb.Overseer class method)</a> | |||
| </dt> | |||
| <dd><dl> | |||
| <dt><a href="pyad2usb.html#pyad2usb.devices.SerialDevice.find_all">(pyad2usb.devices.SerialDevice static method)</a> | |||
| </dt> | |||
| <dt><a href="pyad2usb.html#pyad2usb.devices.USBDevice.find_all">(pyad2usb.devices.USBDevice static method)</a> | |||
| </dt> | |||
| </dl></dd> | |||
| </dl></td> | |||
| <td style="width: 33%" valign="top"><dl> | |||
| <dt><a href="pyad2usb.event.html#pyad2usb.event.event.EventHandler.fire">fire() (pyad2usb.event.event.EventHandler method)</a> | |||
| </dt> | |||
| <dt><a href="pyad2usb.html#pyad2usb.util.Firmware">Firmware (class in pyad2usb.util)</a> | |||
| </dt> | |||
| <dt><a href="pyad2usb.html#pyad2usb.devices.USBDevice.FTDI_PRODUCT_ID">FTDI_PRODUCT_ID (pyad2usb.devices.USBDevice attribute)</a> | |||
| </dt> | |||
| <dt><a href="pyad2usb.html#pyad2usb.devices.USBDevice.FTDI_VENDOR_ID">FTDI_VENDOR_ID (pyad2usb.devices.USBDevice attribute)</a> | |||
| </dt> | |||
| </dl></td> | |||
| </tr></table> | |||
| <h2 id="G">G</h2> | |||
| <table style="width: 100%" class="indextable genindextable"><tr> | |||
| <td style="width: 33%" valign="top"><dl> | |||
| <dt><a href="pyad2usb.html#pyad2usb.ad2usb.AD2USB.get_config">get_config() (pyad2usb.ad2usb.AD2USB method)</a> | |||
| </dt> | |||
| </dl></td> | |||
| <td style="width: 33%" valign="top"><dl> | |||
| <dt><a href="pyad2usb.html#pyad2usb.ad2usb.Overseer.get_device">get_device() (pyad2usb.ad2usb.Overseer method)</a> | |||
| </dt> | |||
| </dl></td> | |||
| </tr></table> | |||
| <h2 id="I">I</h2> | |||
| <table style="width: 100%" class="indextable genindextable"><tr> | |||
| <td style="width: 33%" valign="top"><dl> | |||
| <dt><a href="pyad2usb.html#pyad2usb.ad2usb.AD2USB.id">id (pyad2usb.ad2usb.AD2USB attribute)</a> | |||
| </dt> | |||
| <dd><dl> | |||
| <dt><a href="pyad2usb.html#pyad2usb.devices.Device.id">(pyad2usb.devices.Device attribute)</a> | |||
| </dt> | |||
| </dl></dd> | |||
| <dt><a href="pyad2usb.html#pyad2usb.util.InvalidMessageError">InvalidMessageError</a> | |||
| </dt> | |||
| </dl></td> | |||
| <td style="width: 33%" valign="top"><dl> | |||
| <dt><a href="pyad2usb.html#pyad2usb.devices.Device.is_reader_alive">is_reader_alive() (pyad2usb.devices.Device method)</a> | |||
| </dt> | |||
| </dl></td> | |||
| </tr></table> | |||
| <h2 id="L">L</h2> | |||
| <table style="width: 100%" class="indextable genindextable"><tr> | |||
| <td style="width: 33%" valign="top"><dl> | |||
| <dt><a href="pyad2usb.html#pyad2usb.ad2usb.LRRMessage">LRRMessage (class in pyad2usb.ad2usb)</a> | |||
| </dt> | |||
| </dl></td> | |||
| </tr></table> | |||
| <h2 id="M">M</h2> | |||
| <table style="width: 100%" class="indextable genindextable"><tr> | |||
| <td style="width: 33%" valign="top"><dl> | |||
| <dt><a href="pyad2usb.html#pyad2usb.ad2usb.Message">Message (class in pyad2usb.ad2usb)</a> | |||
| </dt> | |||
| </dl></td> | |||
| </tr></table> | |||
| <h2 id="N">N</h2> | |||
| <table style="width: 100%" class="indextable genindextable"><tr> | |||
| <td style="width: 33%" valign="top"><dl> | |||
| <dt><a href="pyad2usb.html#pyad2usb.util.NoDeviceError">NoDeviceError</a> | |||
| </dt> | |||
| </dl></td> | |||
| </tr></table> | |||
| <h2 id="O">O</h2> | |||
| <table style="width: 100%" class="indextable genindextable"><tr> | |||
| <td style="width: 33%" valign="top"><dl> | |||
| <dt><a href="pyad2usb.html#pyad2usb.ad2usb.AD2USB.on_alarm">on_alarm (pyad2usb.ad2usb.AD2USB attribute)</a> | |||
| </dt> | |||
| <dt><a href="pyad2usb.html#pyad2usb.ad2usb.Overseer.on_attached">on_attached (pyad2usb.ad2usb.Overseer attribute)</a> | |||
| </dt> | |||
| <dt><a href="pyad2usb.html#pyad2usb.ad2usb.AD2USB.on_boot">on_boot (pyad2usb.ad2usb.AD2USB attribute)</a> | |||
| </dt> | |||
| <dt><a href="pyad2usb.html#pyad2usb.ad2usb.AD2USB.on_bypass">on_bypass (pyad2usb.ad2usb.AD2USB attribute)</a> | |||
| </dt> | |||
| <dt><a href="pyad2usb.html#pyad2usb.ad2usb.AD2USB.on_close">on_close (pyad2usb.ad2usb.AD2USB attribute)</a> | |||
| </dt> | |||
| <dd><dl> | |||
| <dt><a href="pyad2usb.html#pyad2usb.devices.Device.on_close">(pyad2usb.devices.Device attribute)</a> | |||
| </dt> | |||
| </dl></dd> | |||
| <dt><a href="pyad2usb.html#pyad2usb.ad2usb.AD2USB.on_config_received">on_config_received (pyad2usb.ad2usb.AD2USB attribute)</a> | |||
| </dt> | |||
| <dt><a href="pyad2usb.html#pyad2usb.ad2usb.Overseer.on_detached">on_detached (pyad2usb.ad2usb.Overseer attribute)</a> | |||
| </dt> | |||
| <dt><a href="pyad2usb.html#pyad2usb.ad2usb.AD2USB.on_message">on_message (pyad2usb.ad2usb.AD2USB attribute)</a> | |||
| </dt> | |||
| </dl></td> | |||
| <td style="width: 33%" valign="top"><dl> | |||
| <dt><a href="pyad2usb.html#pyad2usb.ad2usb.AD2USB.on_open">on_open (pyad2usb.ad2usb.AD2USB attribute)</a> | |||
| </dt> | |||
| <dd><dl> | |||
| <dt><a href="pyad2usb.html#pyad2usb.devices.Device.on_open">(pyad2usb.devices.Device attribute)</a> | |||
| </dt> | |||
| </dl></dd> | |||
| <dt><a href="pyad2usb.html#pyad2usb.ad2usb.AD2USB.on_power_changed">on_power_changed (pyad2usb.ad2usb.AD2USB attribute)</a> | |||
| </dt> | |||
| <dt><a href="pyad2usb.html#pyad2usb.ad2usb.AD2USB.on_read">on_read (pyad2usb.ad2usb.AD2USB attribute)</a> | |||
| </dt> | |||
| <dd><dl> | |||
| <dt><a href="pyad2usb.html#pyad2usb.devices.Device.on_read">(pyad2usb.devices.Device attribute)</a> | |||
| </dt> | |||
| </dl></dd> | |||
| <dt><a href="pyad2usb.html#pyad2usb.ad2usb.AD2USB.on_status_changed">on_status_changed (pyad2usb.ad2usb.AD2USB attribute)</a> | |||
| </dt> | |||
| <dt><a href="pyad2usb.html#pyad2usb.ad2usb.AD2USB.on_write">on_write (pyad2usb.ad2usb.AD2USB attribute)</a> | |||
| </dt> | |||
| <dd><dl> | |||
| <dt><a href="pyad2usb.html#pyad2usb.devices.Device.on_write">(pyad2usb.devices.Device attribute)</a> | |||
| </dt> | |||
| </dl></dd> | |||
| <dt><a href="pyad2usb.html#pyad2usb.ad2usb.AD2USB.open">open() (pyad2usb.ad2usb.AD2USB method)</a> | |||
| </dt> | |||
| <dd><dl> | |||
| <dt><a href="pyad2usb.html#pyad2usb.devices.SerialDevice.open">(pyad2usb.devices.SerialDevice method)</a> | |||
| </dt> | |||
| <dt><a href="pyad2usb.html#pyad2usb.devices.SocketDevice.open">(pyad2usb.devices.SocketDevice method)</a> | |||
| </dt> | |||
| <dt><a href="pyad2usb.html#pyad2usb.devices.USBDevice.open">(pyad2usb.devices.USBDevice method)</a> | |||
| </dt> | |||
| </dl></dd> | |||
| <dt><a href="pyad2usb.html#pyad2usb.ad2usb.Overseer">Overseer (class in pyad2usb.ad2usb)</a> | |||
| </dt> | |||
| <dt><a href="pyad2usb.html#pyad2usb.ad2usb.Overseer.DetectThread">Overseer.DetectThread (class in pyad2usb.ad2usb)</a> | |||
| </dt> | |||
| </dl></td> | |||
| </tr></table> | |||
| <h2 id="P">P</h2> | |||
| <table style="width: 100%" class="indextable genindextable"><tr> | |||
| <td style="width: 33%" valign="top"><dl> | |||
| <dt><a href="pyad2usb.html#module-pyad2usb.__init__">pyad2usb.__init__ (module)</a> | |||
| </dt> | |||
| <dt><a href="pyad2usb.html#module-pyad2usb.ad2usb">pyad2usb.ad2usb (module)</a> | |||
| </dt> | |||
| <dt><a href="pyad2usb.html#module-pyad2usb.devices">pyad2usb.devices (module)</a> | |||
| </dt> | |||
| </dl></td> | |||
| <td style="width: 33%" valign="top"><dl> | |||
| <dt><a href="pyad2usb.event.html#module-pyad2usb.event">pyad2usb.event (module)</a> | |||
| </dt> | |||
| <dt><a href="pyad2usb.event.html#module-pyad2usb.event.event">pyad2usb.event.event (module)</a> | |||
| </dt> | |||
| <dt><a href="pyad2usb.html#module-pyad2usb.util">pyad2usb.util (module)</a> | |||
| </dt> | |||
| </dl></td> | |||
| </tr></table> | |||
| <h2 id="R">R</h2> | |||
| <table style="width: 100%" class="indextable genindextable"><tr> | |||
| <td style="width: 33%" valign="top"><dl> | |||
| <dt><a href="pyad2usb.html#pyad2usb.devices.SerialDevice.read">read() (pyad2usb.devices.SerialDevice method)</a> | |||
| </dt> | |||
| <dd><dl> | |||
| <dt><a href="pyad2usb.html#pyad2usb.devices.SocketDevice.read">(pyad2usb.devices.SocketDevice method)</a> | |||
| </dt> | |||
| <dt><a href="pyad2usb.html#pyad2usb.devices.USBDevice.read">(pyad2usb.devices.USBDevice method)</a> | |||
| </dt> | |||
| </dl></dd> | |||
| <dt><a href="pyad2usb.html#pyad2usb.devices.SerialDevice.read_line">read_line() (pyad2usb.devices.SerialDevice method)</a> | |||
| </dt> | |||
| <dd><dl> | |||
| <dt><a href="pyad2usb.html#pyad2usb.devices.SocketDevice.read_line">(pyad2usb.devices.SocketDevice method)</a> | |||
| </dt> | |||
| <dt><a href="pyad2usb.html#pyad2usb.devices.USBDevice.read_line">(pyad2usb.devices.USBDevice method)</a> | |||
| </dt> | |||
| </dl></dd> | |||
| <dt><a href="pyad2usb.html#pyad2usb.devices.Device.ReadThread.READ_TIMEOUT">READ_TIMEOUT (pyad2usb.devices.Device.ReadThread attribute)</a> | |||
| </dt> | |||
| <dt><a href="pyad2usb.html#pyad2usb.ad2usb.AD2USB.reboot">reboot() (pyad2usb.ad2usb.AD2USB method)</a> | |||
| </dt> | |||
| </dl></td> | |||
| <td style="width: 33%" valign="top"><dl> | |||
| <dt><a href="pyad2usb.html#pyad2usb.ad2usb.ExpanderMessage.RELAY">RELAY (pyad2usb.ad2usb.ExpanderMessage attribute)</a> | |||
| </dt> | |||
| <dt><a href="pyad2usb.event.html#pyad2usb.event.event.EventHandler.remove">remove() (pyad2usb.event.event.EventHandler method)</a> | |||
| </dt> | |||
| <dt><a href="pyad2usb.html#pyad2usb.ad2usb.RFMessage">RFMessage (class in pyad2usb.ad2usb)</a> | |||
| </dt> | |||
| <dt><a href="pyad2usb.html#pyad2usb.ad2usb.Overseer.DetectThread.run">run() (pyad2usb.ad2usb.Overseer.DetectThread method)</a> | |||
| </dt> | |||
| <dd><dl> | |||
| <dt><a href="pyad2usb.html#pyad2usb.devices.Device.ReadThread.run">(pyad2usb.devices.Device.ReadThread method)</a> | |||
| </dt> | |||
| </dl></dd> | |||
| </dl></td> | |||
| </tr></table> | |||
| <h2 id="S">S</h2> | |||
| <table style="width: 100%" class="indextable genindextable"><tr> | |||
| <td style="width: 33%" valign="top"><dl> | |||
| <dt><a href="pyad2usb.html#pyad2usb.devices.SerialDevice">SerialDevice (class in pyad2usb.devices)</a> | |||
| </dt> | |||
| <dt><a href="pyad2usb.html#pyad2usb.ad2usb.AD2USB.set_config">set_config() (pyad2usb.ad2usb.AD2USB method)</a> | |||
| </dt> | |||
| <dt><a href="pyad2usb.html#pyad2usb.devices.SocketDevice">SocketDevice (class in pyad2usb.devices)</a> | |||
| </dt> | |||
| <dt><a href="pyad2usb.html#pyad2usb.util.Firmware.STAGE_BOOT">STAGE_BOOT (pyad2usb.util.Firmware attribute)</a> | |||
| </dt> | |||
| <dt><a href="pyad2usb.html#pyad2usb.util.Firmware.STAGE_DONE">STAGE_DONE (pyad2usb.util.Firmware attribute)</a> | |||
| </dt> | |||
| <dt><a href="pyad2usb.html#pyad2usb.util.Firmware.STAGE_LOAD">STAGE_LOAD (pyad2usb.util.Firmware attribute)</a> | |||
| </dt> | |||
| </dl></td> | |||
| <td style="width: 33%" valign="top"><dl> | |||
| <dt><a href="pyad2usb.html#pyad2usb.util.Firmware.STAGE_START">STAGE_START (pyad2usb.util.Firmware attribute)</a> | |||
| </dt> | |||
| <dt><a href="pyad2usb.html#pyad2usb.util.Firmware.STAGE_UPLOADING">STAGE_UPLOADING (pyad2usb.util.Firmware attribute)</a> | |||
| </dt> | |||
| <dt><a href="pyad2usb.html#pyad2usb.util.Firmware.STAGE_WAITING">STAGE_WAITING (pyad2usb.util.Firmware attribute)</a> | |||
| </dt> | |||
| <dt><a href="pyad2usb.html#pyad2usb.ad2usb.Overseer.start">start() (pyad2usb.ad2usb.Overseer method)</a> | |||
| </dt> | |||
| <dt><a href="pyad2usb.html#pyad2usb.ad2usb.Overseer.stop">stop() (pyad2usb.ad2usb.Overseer method)</a> | |||
| </dt> | |||
| <dd><dl> | |||
| <dt><a href="pyad2usb.html#pyad2usb.ad2usb.Overseer.DetectThread.stop">(pyad2usb.ad2usb.Overseer.DetectThread method)</a> | |||
| </dt> | |||
| <dt><a href="pyad2usb.html#pyad2usb.devices.Device.ReadThread.stop">(pyad2usb.devices.Device.ReadThread method)</a> | |||
| </dt> | |||
| </dl></dd> | |||
| <dt><a href="pyad2usb.html#pyad2usb.devices.Device.stop_reader">stop_reader() (pyad2usb.devices.Device method)</a> | |||
| </dt> | |||
| </dl></td> | |||
| </tr></table> | |||
| <h2 id="T">T</h2> | |||
| <table style="width: 100%" class="indextable genindextable"><tr> | |||
| <td style="width: 33%" valign="top"><dl> | |||
| <dt><a href="pyad2usb.html#pyad2usb.util.TimeoutError">TimeoutError</a> | |||
| </dt> | |||
| </dl></td> | |||
| </tr></table> | |||
| <h2 id="U">U</h2> | |||
| <table style="width: 100%" class="indextable genindextable"><tr> | |||
| <td style="width: 33%" valign="top"><dl> | |||
| <dt><a href="pyad2usb.html#pyad2usb.util.Firmware.upload">upload() (pyad2usb.util.Firmware static method)</a> | |||
| </dt> | |||
| </dl></td> | |||
| <td style="width: 33%" valign="top"><dl> | |||
| <dt><a href="pyad2usb.html#pyad2usb.devices.USBDevice">USBDevice (class in pyad2usb.devices)</a> | |||
| </dt> | |||
| </dl></td> | |||
| </tr></table> | |||
| <h2 id="W">W</h2> | |||
| <table style="width: 100%" class="indextable genindextable"><tr> | |||
| <td style="width: 33%" valign="top"><dl> | |||
| <dt><a href="pyad2usb.html#pyad2usb.devices.SerialDevice.write">write() (pyad2usb.devices.SerialDevice method)</a> | |||
| </dt> | |||
| <dd><dl> | |||
| <dt><a href="pyad2usb.html#pyad2usb.devices.SocketDevice.write">(pyad2usb.devices.SocketDevice method)</a> | |||
| </dt> | |||
| <dt><a href="pyad2usb.html#pyad2usb.devices.USBDevice.write">(pyad2usb.devices.USBDevice method)</a> | |||
| </dt> | |||
| </dl></dd> | |||
| </dl></td> | |||
| </tr></table> | |||
| <h2 id="Z">Z</h2> | |||
| <table style="width: 100%" class="indextable genindextable"><tr> | |||
| <td style="width: 33%" valign="top"><dl> | |||
| <dt><a href="pyad2usb.html#pyad2usb.ad2usb.ExpanderMessage.ZONE">ZONE (pyad2usb.ad2usb.ExpanderMessage attribute)</a> | |||
| </dt> | |||
| </dl></td> | |||
| </tr></table> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| <div class="sphinxsidebar"> | |||
| <div class="sphinxsidebarwrapper"> | |||
| <div id="searchbox" style="display: none"> | |||
| <h3>Quick search</h3> | |||
| <form class="search" action="search.html" method="get"> | |||
| <input type="text" name="q" /> | |||
| <input type="submit" value="Go" /> | |||
| <input type="hidden" name="check_keywords" value="yes" /> | |||
| <input type="hidden" name="area" value="default" /> | |||
| </form> | |||
| <p class="searchtip" style="font-size: 90%"> | |||
| Enter search terms or a module, class or function name. | |||
| </p> | |||
| </div> | |||
| <script type="text/javascript">$('#searchbox').show(0);</script> | |||
| </div> | |||
| </div> | |||
| <div class="clearer"></div> | |||
| </div> | |||
| <div class="related"> | |||
| <h3>Navigation</h3> | |||
| <ul> | |||
| <li class="right" style="margin-right: 10px"> | |||
| <a href="#" title="General Index" | |||
| >index</a></li> | |||
| <li class="right" > | |||
| <a href="py-modindex.html" title="Python Module Index" | |||
| >modules</a> |</li> | |||
| <li><a href="index.html">pyad2usb documentation</a> »</li> | |||
| </ul> | |||
| </div> | |||
| <div class="footer"> | |||
| © Copyright 2013, Author. | |||
| Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2b1. | |||
| </div> | |||
| </body> | |||
| </html> | |||
| @@ -0,0 +1,142 @@ | |||
| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" | |||
| "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> | |||
| <html xmlns="http://www.w3.org/1999/xhtml"> | |||
| <head> | |||
| <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> | |||
| <title>Welcome to pyad2usb’s documentation! — pyad2usb documentation</title> | |||
| <link rel="stylesheet" href="_static/default.css" type="text/css" /> | |||
| <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> | |||
| <script type="text/javascript"> | |||
| var DOCUMENTATION_OPTIONS = { | |||
| URL_ROOT: './', | |||
| VERSION: '', | |||
| COLLAPSE_INDEX: false, | |||
| FILE_SUFFIX: '.html', | |||
| HAS_SOURCE: true | |||
| }; | |||
| </script> | |||
| <script type="text/javascript" src="_static/jquery.js"></script> | |||
| <script type="text/javascript" src="_static/underscore.js"></script> | |||
| <script type="text/javascript" src="_static/doctools.js"></script> | |||
| <link rel="top" title="pyad2usb documentation" href="#" /> | |||
| <link rel="next" title="pyad2usb Package" href="pyad2usb.html" /> | |||
| </head> | |||
| <body> | |||
| <div class="related"> | |||
| <h3>Navigation</h3> | |||
| <ul> | |||
| <li class="right" style="margin-right: 10px"> | |||
| <a href="genindex.html" title="General Index" | |||
| accesskey="I">index</a></li> | |||
| <li class="right" > | |||
| <a href="py-modindex.html" title="Python Module Index" | |||
| >modules</a> |</li> | |||
| <li class="right" > | |||
| <a href="pyad2usb.html" title="pyad2usb Package" | |||
| accesskey="N">next</a> |</li> | |||
| <li><a href="#">pyad2usb documentation</a> »</li> | |||
| </ul> | |||
| </div> | |||
| <div class="document"> | |||
| <div class="documentwrapper"> | |||
| <div class="bodywrapper"> | |||
| <div class="body"> | |||
| <div class="section" id="welcome-to-pyad2usb-s-documentation"> | |||
| <h1>Welcome to pyad2usb’s documentation!<a class="headerlink" href="#welcome-to-pyad2usb-s-documentation" title="Permalink to this headline">¶</a></h1> | |||
| <p>Contents:</p> | |||
| <div class="toctree-wrapper compound"> | |||
| <ul> | |||
| <li class="toctree-l1"><a class="reference internal" href="pyad2usb.html">pyad2usb Package</a><ul> | |||
| <li class="toctree-l2"><a class="reference internal" href="pyad2usb.html#id1"><tt class="docutils literal"><span class="pre">pyad2usb</span></tt> Package</a></li> | |||
| <li class="toctree-l2"><a class="reference internal" href="pyad2usb.html#module-pyad2usb.ad2usb"><tt class="docutils literal"><span class="pre">ad2usb</span></tt> Module</a></li> | |||
| <li class="toctree-l2"><a class="reference internal" href="pyad2usb.html#module-pyad2usb.devices"><tt class="docutils literal"><span class="pre">devices</span></tt> Module</a></li> | |||
| <li class="toctree-l2"><a class="reference internal" href="pyad2usb.html#module-pyad2usb.util"><tt class="docutils literal"><span class="pre">util</span></tt> Module</a></li> | |||
| <li class="toctree-l2"><a class="reference internal" href="pyad2usb.html#subpackages">Subpackages</a><ul> | |||
| <li class="toctree-l3"><a class="reference internal" href="pyad2usb.event.html">event Package</a><ul> | |||
| <li class="toctree-l4"><a class="reference internal" href="pyad2usb.event.html#id1"><tt class="docutils literal"><span class="pre">event</span></tt> Package</a></li> | |||
| <li class="toctree-l4"><a class="reference internal" href="pyad2usb.event.html#module-pyad2usb.event.event"><tt class="docutils literal"><span class="pre">event</span></tt> Module</a></li> | |||
| </ul> | |||
| </li> | |||
| </ul> | |||
| </li> | |||
| </ul> | |||
| </li> | |||
| </ul> | |||
| </div> | |||
| </div> | |||
| <div class="section" id="indices-and-tables"> | |||
| <h1>Indices and tables<a class="headerlink" href="#indices-and-tables" title="Permalink to this headline">¶</a></h1> | |||
| <ul class="simple"> | |||
| <li><a class="reference internal" href="genindex.html"><em>Index</em></a></li> | |||
| <li><a class="reference internal" href="py-modindex.html"><em>Module Index</em></a></li> | |||
| <li><a class="reference internal" href="search.html"><em>Search Page</em></a></li> | |||
| </ul> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| <div class="sphinxsidebar"> | |||
| <div class="sphinxsidebarwrapper"> | |||
| <h3><a href="#">Table Of Contents</a></h3> | |||
| <ul> | |||
| <li><a class="reference internal" href="#">Welcome to pyad2usb’s documentation!</a><ul> | |||
| </ul> | |||
| </li> | |||
| <li><a class="reference internal" href="#indices-and-tables">Indices and tables</a></li> | |||
| </ul> | |||
| <h4>Next topic</h4> | |||
| <p class="topless"><a href="pyad2usb.html" | |||
| title="next chapter">pyad2usb Package</a></p> | |||
| <h3>This Page</h3> | |||
| <ul class="this-page-menu"> | |||
| <li><a href="_sources/index.txt" | |||
| rel="nofollow">Show Source</a></li> | |||
| </ul> | |||
| <div id="searchbox" style="display: none"> | |||
| <h3>Quick search</h3> | |||
| <form class="search" action="search.html" method="get"> | |||
| <input type="text" name="q" /> | |||
| <input type="submit" value="Go" /> | |||
| <input type="hidden" name="check_keywords" value="yes" /> | |||
| <input type="hidden" name="area" value="default" /> | |||
| </form> | |||
| <p class="searchtip" style="font-size: 90%"> | |||
| Enter search terms or a module, class or function name. | |||
| </p> | |||
| </div> | |||
| <script type="text/javascript">$('#searchbox').show(0);</script> | |||
| </div> | |||
| </div> | |||
| <div class="clearer"></div> | |||
| </div> | |||
| <div class="related"> | |||
| <h3>Navigation</h3> | |||
| <ul> | |||
| <li class="right" style="margin-right: 10px"> | |||
| <a href="genindex.html" title="General Index" | |||
| >index</a></li> | |||
| <li class="right" > | |||
| <a href="py-modindex.html" title="Python Module Index" | |||
| >modules</a> |</li> | |||
| <li class="right" > | |||
| <a href="pyad2usb.html" title="pyad2usb Package" | |||
| >next</a> |</li> | |||
| <li><a href="#">pyad2usb documentation</a> »</li> | |||
| </ul> | |||
| </div> | |||
| <div class="footer"> | |||
| © Copyright 2013, Author. | |||
| Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2b1. | |||
| </div> | |||
| </body> | |||
| </html> | |||
| @@ -0,0 +1,115 @@ | |||
| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" | |||
| "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> | |||
| <html xmlns="http://www.w3.org/1999/xhtml"> | |||
| <head> | |||
| <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> | |||
| <title>pyad2usb — pyad2usb documentation</title> | |||
| <link rel="stylesheet" href="_static/default.css" type="text/css" /> | |||
| <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> | |||
| <script type="text/javascript"> | |||
| var DOCUMENTATION_OPTIONS = { | |||
| URL_ROOT: './', | |||
| VERSION: '', | |||
| COLLAPSE_INDEX: false, | |||
| FILE_SUFFIX: '.html', | |||
| HAS_SOURCE: true | |||
| }; | |||
| </script> | |||
| <script type="text/javascript" src="_static/jquery.js"></script> | |||
| <script type="text/javascript" src="_static/underscore.js"></script> | |||
| <script type="text/javascript" src="_static/doctools.js"></script> | |||
| <link rel="top" title="pyad2usb documentation" href="index.html" /> | |||
| </head> | |||
| <body> | |||
| <div class="related"> | |||
| <h3>Navigation</h3> | |||
| <ul> | |||
| <li class="right" style="margin-right: 10px"> | |||
| <a href="genindex.html" title="General Index" | |||
| accesskey="I">index</a></li> | |||
| <li class="right" > | |||
| <a href="py-modindex.html" title="Python Module Index" | |||
| >modules</a> |</li> | |||
| <li><a href="index.html">pyad2usb documentation</a> »</li> | |||
| </ul> | |||
| </div> | |||
| <div class="document"> | |||
| <div class="documentwrapper"> | |||
| <div class="bodywrapper"> | |||
| <div class="body"> | |||
| <div class="section" id="pyad2usb"> | |||
| <h1>pyad2usb<a class="headerlink" href="#pyad2usb" title="Permalink to this headline">¶</a></h1> | |||
| <div class="toctree-wrapper compound"> | |||
| <ul> | |||
| <li class="toctree-l1"><a class="reference internal" href="pyad2usb.html">pyad2usb Package</a><ul> | |||
| <li class="toctree-l2"><a class="reference internal" href="pyad2usb.html#id1"><tt class="docutils literal"><span class="pre">pyad2usb</span></tt> Package</a></li> | |||
| <li class="toctree-l2"><a class="reference internal" href="pyad2usb.html#module-pyad2usb.ad2usb"><tt class="docutils literal"><span class="pre">ad2usb</span></tt> Module</a></li> | |||
| <li class="toctree-l2"><a class="reference internal" href="pyad2usb.html#module-pyad2usb.devices"><tt class="docutils literal"><span class="pre">devices</span></tt> Module</a></li> | |||
| <li class="toctree-l2"><a class="reference internal" href="pyad2usb.html#module-pyad2usb.util"><tt class="docutils literal"><span class="pre">util</span></tt> Module</a></li> | |||
| <li class="toctree-l2"><a class="reference internal" href="pyad2usb.html#subpackages">Subpackages</a><ul> | |||
| <li class="toctree-l3"><a class="reference internal" href="pyad2usb.event.html">event Package</a><ul> | |||
| <li class="toctree-l4"><a class="reference internal" href="pyad2usb.event.html#id1"><tt class="docutils literal"><span class="pre">event</span></tt> Package</a></li> | |||
| <li class="toctree-l4"><a class="reference internal" href="pyad2usb.event.html#module-pyad2usb.event.event"><tt class="docutils literal"><span class="pre">event</span></tt> Module</a></li> | |||
| </ul> | |||
| </li> | |||
| </ul> | |||
| </li> | |||
| </ul> | |||
| </li> | |||
| </ul> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| <div class="sphinxsidebar"> | |||
| <div class="sphinxsidebarwrapper"> | |||
| <h3>This Page</h3> | |||
| <ul class="this-page-menu"> | |||
| <li><a href="_sources/modules.txt" | |||
| rel="nofollow">Show Source</a></li> | |||
| </ul> | |||
| <div id="searchbox" style="display: none"> | |||
| <h3>Quick search</h3> | |||
| <form class="search" action="search.html" method="get"> | |||
| <input type="text" name="q" /> | |||
| <input type="submit" value="Go" /> | |||
| <input type="hidden" name="check_keywords" value="yes" /> | |||
| <input type="hidden" name="area" value="default" /> | |||
| </form> | |||
| <p class="searchtip" style="font-size: 90%"> | |||
| Enter search terms or a module, class or function name. | |||
| </p> | |||
| </div> | |||
| <script type="text/javascript">$('#searchbox').show(0);</script> | |||
| </div> | |||
| </div> | |||
| <div class="clearer"></div> | |||
| </div> | |||
| <div class="related"> | |||
| <h3>Navigation</h3> | |||
| <ul> | |||
| <li class="right" style="margin-right: 10px"> | |||
| <a href="genindex.html" title="General Index" | |||
| >index</a></li> | |||
| <li class="right" > | |||
| <a href="py-modindex.html" title="Python Module Index" | |||
| >modules</a> |</li> | |||
| <li><a href="index.html">pyad2usb documentation</a> »</li> | |||
| </ul> | |||
| </div> | |||
| <div class="footer"> | |||
| © Copyright 2013, Author. | |||
| Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2b1. | |||
| </div> | |||
| </body> | |||
| </html> | |||
| @@ -0,0 +1,139 @@ | |||
| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" | |||
| "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> | |||
| <html xmlns="http://www.w3.org/1999/xhtml"> | |||
| <head> | |||
| <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> | |||
| <title>Python Module Index — pyad2usb documentation</title> | |||
| <link rel="stylesheet" href="_static/default.css" type="text/css" /> | |||
| <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> | |||
| <script type="text/javascript"> | |||
| var DOCUMENTATION_OPTIONS = { | |||
| URL_ROOT: './', | |||
| VERSION: '', | |||
| COLLAPSE_INDEX: false, | |||
| FILE_SUFFIX: '.html', | |||
| HAS_SOURCE: true | |||
| }; | |||
| </script> | |||
| <script type="text/javascript" src="_static/jquery.js"></script> | |||
| <script type="text/javascript" src="_static/underscore.js"></script> | |||
| <script type="text/javascript" src="_static/doctools.js"></script> | |||
| <link rel="top" title="pyad2usb documentation" href="index.html" /> | |||
| </head> | |||
| <body> | |||
| <div class="related"> | |||
| <h3>Navigation</h3> | |||
| <ul> | |||
| <li class="right" style="margin-right: 10px"> | |||
| <a href="genindex.html" title="General Index" | |||
| accesskey="I">index</a></li> | |||
| <li class="right" > | |||
| <a href="#" title="Python Module Index" | |||
| >modules</a> |</li> | |||
| <li><a href="index.html">pyad2usb documentation</a> »</li> | |||
| </ul> | |||
| </div> | |||
| <div class="document"> | |||
| <div class="documentwrapper"> | |||
| <div class="bodywrapper"> | |||
| <div class="body"> | |||
| <h1>Python Module Index</h1> | |||
| <div class="modindex-jumpbox"> | |||
| <a href="#cap-p"><strong>p</strong></a> | |||
| </div> | |||
| <table class="indextable modindextable" cellspacing="0" cellpadding="2"> | |||
| <tr class="pcap"><td></td><td> </td><td></td></tr> | |||
| <tr class="cap" id="cap-p"><td></td><td> | |||
| <strong>p</strong></td><td></td></tr> | |||
| <tr> | |||
| <td><img src="_static/minus.png" class="toggler" | |||
| id="toggle-1" style="display: none" alt="-" /></td> | |||
| <td> | |||
| <tt class="xref">pyad2usb</tt></td><td> | |||
| <em></em></td></tr> | |||
| <tr class="cg-1"> | |||
| <td></td> | |||
| <td> | |||
| <a href="pyad2usb.html#module-pyad2usb.__init__"><tt class="xref">pyad2usb.__init__</tt></a></td><td> | |||
| <em></em></td></tr> | |||
| <tr class="cg-1"> | |||
| <td></td> | |||
| <td> | |||
| <a href="pyad2usb.html#module-pyad2usb.ad2usb"><tt class="xref">pyad2usb.ad2usb</tt></a></td><td> | |||
| <em></em></td></tr> | |||
| <tr class="cg-1"> | |||
| <td></td> | |||
| <td> | |||
| <a href="pyad2usb.html#module-pyad2usb.devices"><tt class="xref">pyad2usb.devices</tt></a></td><td> | |||
| <em></em></td></tr> | |||
| <tr class="cg-1"> | |||
| <td></td> | |||
| <td> | |||
| <a href="pyad2usb.event.html#module-pyad2usb.event"><tt class="xref">pyad2usb.event</tt></a></td><td> | |||
| <em></em></td></tr> | |||
| <tr class="cg-1"> | |||
| <td></td> | |||
| <td> | |||
| <a href="pyad2usb.event.html#module-pyad2usb.event.event"><tt class="xref">pyad2usb.event.event</tt></a></td><td> | |||
| <em></em></td></tr> | |||
| <tr class="cg-1"> | |||
| <td></td> | |||
| <td> | |||
| <a href="pyad2usb.html#module-pyad2usb.util"><tt class="xref">pyad2usb.util</tt></a></td><td> | |||
| <em></em></td></tr> | |||
| </table> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| <div class="sphinxsidebar"> | |||
| <div class="sphinxsidebarwrapper"> | |||
| <div id="searchbox" style="display: none"> | |||
| <h3>Quick search</h3> | |||
| <form class="search" action="search.html" method="get"> | |||
| <input type="text" name="q" /> | |||
| <input type="submit" value="Go" /> | |||
| <input type="hidden" name="check_keywords" value="yes" /> | |||
| <input type="hidden" name="area" value="default" /> | |||
| </form> | |||
| <p class="searchtip" style="font-size: 90%"> | |||
| Enter search terms or a module, class or function name. | |||
| </p> | |||
| </div> | |||
| <script type="text/javascript">$('#searchbox').show(0);</script> | |||
| </div> | |||
| </div> | |||
| <div class="clearer"></div> | |||
| </div> | |||
| <div class="related"> | |||
| <h3>Navigation</h3> | |||
| <ul> | |||
| <li class="right" style="margin-right: 10px"> | |||
| <a href="genindex.html" title="General Index" | |||
| >index</a></li> | |||
| <li class="right" > | |||
| <a href="#" title="Python Module Index" | |||
| >modules</a> |</li> | |||
| <li><a href="index.html">pyad2usb documentation</a> »</li> | |||
| </ul> | |||
| </div> | |||
| <div class="footer"> | |||
| © Copyright 2013, Author. | |||
| Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2b1. | |||
| </div> | |||
| </body> | |||
| </html> | |||
| @@ -0,0 +1,159 @@ | |||
| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" | |||
| "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> | |||
| <html xmlns="http://www.w3.org/1999/xhtml"> | |||
| <head> | |||
| <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> | |||
| <title>event Package — pyad2usb documentation</title> | |||
| <link rel="stylesheet" href="_static/default.css" type="text/css" /> | |||
| <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> | |||
| <script type="text/javascript"> | |||
| var DOCUMENTATION_OPTIONS = { | |||
| URL_ROOT: './', | |||
| VERSION: '', | |||
| COLLAPSE_INDEX: false, | |||
| FILE_SUFFIX: '.html', | |||
| HAS_SOURCE: true | |||
| }; | |||
| </script> | |||
| <script type="text/javascript" src="_static/jquery.js"></script> | |||
| <script type="text/javascript" src="_static/underscore.js"></script> | |||
| <script type="text/javascript" src="_static/doctools.js"></script> | |||
| <link rel="top" title="pyad2usb documentation" href="index.html" /> | |||
| <link rel="up" title="pyad2usb Package" href="pyad2usb.html" /> | |||
| <link rel="prev" title="pyad2usb Package" href="pyad2usb.html" /> | |||
| </head> | |||
| <body> | |||
| <div class="related"> | |||
| <h3>Navigation</h3> | |||
| <ul> | |||
| <li class="right" style="margin-right: 10px"> | |||
| <a href="genindex.html" title="General Index" | |||
| accesskey="I">index</a></li> | |||
| <li class="right" > | |||
| <a href="py-modindex.html" title="Python Module Index" | |||
| >modules</a> |</li> | |||
| <li class="right" > | |||
| <a href="pyad2usb.html" title="pyad2usb Package" | |||
| accesskey="P">previous</a> |</li> | |||
| <li><a href="index.html">pyad2usb documentation</a> »</li> | |||
| <li><a href="pyad2usb.html" accesskey="U">pyad2usb Package</a> »</li> | |||
| </ul> | |||
| </div> | |||
| <div class="document"> | |||
| <div class="documentwrapper"> | |||
| <div class="bodywrapper"> | |||
| <div class="body"> | |||
| <div class="section" id="event-package"> | |||
| <h1>event Package<a class="headerlink" href="#event-package" title="Permalink to this headline">¶</a></h1> | |||
| <div class="section" id="id1"> | |||
| <h2><tt class="xref py py-mod docutils literal"><span class="pre">event</span></tt> Package<a class="headerlink" href="#id1" title="Permalink to this headline">¶</a></h2> | |||
| <span class="target" id="module-pyad2usb.event"></span></div> | |||
| <div class="section" id="module-pyad2usb.event.event"> | |||
| <span id="event-module"></span><h2><tt class="xref py py-mod docutils literal"><span class="pre">event</span></tt> Module<a class="headerlink" href="#module-pyad2usb.event.event" title="Permalink to this headline">¶</a></h2> | |||
| <dl class="class"> | |||
| <dt id="pyad2usb.event.event.Event"> | |||
| <em class="property">class </em><tt class="descclassname">pyad2usb.event.event.</tt><tt class="descname">Event</tt><big>(</big><em>doc=None</em><big>)</big><a class="reference internal" href="_modules/pyad2usb/event/event.html#Event"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pyad2usb.event.event.Event" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>Bases: <tt class="xref py py-class docutils literal"><span class="pre">object</span></tt></p> | |||
| </dd></dl> | |||
| <dl class="class"> | |||
| <dt id="pyad2usb.event.event.EventHandler"> | |||
| <em class="property">class </em><tt class="descclassname">pyad2usb.event.event.</tt><tt class="descname">EventHandler</tt><big>(</big><em>event</em>, <em>obj</em><big>)</big><a class="reference internal" href="_modules/pyad2usb/event/event.html#EventHandler"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pyad2usb.event.event.EventHandler" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>Bases: <tt class="xref py py-class docutils literal"><span class="pre">object</span></tt></p> | |||
| <dl class="method"> | |||
| <dt id="pyad2usb.event.event.EventHandler.add"> | |||
| <tt class="descname">add</tt><big>(</big><em>func</em><big>)</big><a class="reference internal" href="_modules/pyad2usb/event/event.html#EventHandler.add"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pyad2usb.event.event.EventHandler.add" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>Add new event handler function.</p> | |||
| <p>Event handler function must be defined like func(sender, earg). | |||
| You can add handler also by using ‘+=’ operator.</p> | |||
| </dd></dl> | |||
| <dl class="method"> | |||
| <dt id="pyad2usb.event.event.EventHandler.fire"> | |||
| <tt class="descname">fire</tt><big>(</big><em>earg=None</em><big>)</big><a class="reference internal" href="_modules/pyad2usb/event/event.html#EventHandler.fire"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pyad2usb.event.event.EventHandler.fire" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>Fire event and call all handler functions</p> | |||
| <p>You can call EventHandler object itself like e(earg) instead of | |||
| e.fire(earg).</p> | |||
| </dd></dl> | |||
| <dl class="method"> | |||
| <dt id="pyad2usb.event.event.EventHandler.remove"> | |||
| <tt class="descname">remove</tt><big>(</big><em>func</em><big>)</big><a class="reference internal" href="_modules/pyad2usb/event/event.html#EventHandler.remove"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pyad2usb.event.event.EventHandler.remove" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>Remove existing event handler function.</p> | |||
| <p>You can remove handler also by using ‘-=’ operator.</p> | |||
| </dd></dl> | |||
| </dd></dl> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| <div class="sphinxsidebar"> | |||
| <div class="sphinxsidebarwrapper"> | |||
| <h3><a href="index.html">Table Of Contents</a></h3> | |||
| <ul> | |||
| <li><a class="reference internal" href="#">event Package</a><ul> | |||
| <li><a class="reference internal" href="#id1"><tt class="docutils literal"><span class="pre">event</span></tt> Package</a></li> | |||
| <li><a class="reference internal" href="#module-pyad2usb.event.event"><tt class="docutils literal"><span class="pre">event</span></tt> Module</a></li> | |||
| </ul> | |||
| </li> | |||
| </ul> | |||
| <h4>Previous topic</h4> | |||
| <p class="topless"><a href="pyad2usb.html" | |||
| title="previous chapter">pyad2usb Package</a></p> | |||
| <h3>This Page</h3> | |||
| <ul class="this-page-menu"> | |||
| <li><a href="_sources/pyad2usb.event.txt" | |||
| rel="nofollow">Show Source</a></li> | |||
| </ul> | |||
| <div id="searchbox" style="display: none"> | |||
| <h3>Quick search</h3> | |||
| <form class="search" action="search.html" method="get"> | |||
| <input type="text" name="q" /> | |||
| <input type="submit" value="Go" /> | |||
| <input type="hidden" name="check_keywords" value="yes" /> | |||
| <input type="hidden" name="area" value="default" /> | |||
| </form> | |||
| <p class="searchtip" style="font-size: 90%"> | |||
| Enter search terms or a module, class or function name. | |||
| </p> | |||
| </div> | |||
| <script type="text/javascript">$('#searchbox').show(0);</script> | |||
| </div> | |||
| </div> | |||
| <div class="clearer"></div> | |||
| </div> | |||
| <div class="related"> | |||
| <h3>Navigation</h3> | |||
| <ul> | |||
| <li class="right" style="margin-right: 10px"> | |||
| <a href="genindex.html" title="General Index" | |||
| >index</a></li> | |||
| <li class="right" > | |||
| <a href="py-modindex.html" title="Python Module Index" | |||
| >modules</a> |</li> | |||
| <li class="right" > | |||
| <a href="pyad2usb.html" title="pyad2usb Package" | |||
| >previous</a> |</li> | |||
| <li><a href="index.html">pyad2usb documentation</a> »</li> | |||
| <li><a href="pyad2usb.html" >pyad2usb Package</a> »</li> | |||
| </ul> | |||
| </div> | |||
| <div class="footer"> | |||
| © Copyright 2013, Author. | |||
| Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2b1. | |||
| </div> | |||
| </body> | |||
| </html> | |||
| @@ -0,0 +1,691 @@ | |||
| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" | |||
| "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> | |||
| <html xmlns="http://www.w3.org/1999/xhtml"> | |||
| <head> | |||
| <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> | |||
| <title>pyad2usb Package — pyad2usb documentation</title> | |||
| <link rel="stylesheet" href="_static/default.css" type="text/css" /> | |||
| <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> | |||
| <script type="text/javascript"> | |||
| var DOCUMENTATION_OPTIONS = { | |||
| URL_ROOT: './', | |||
| VERSION: '', | |||
| COLLAPSE_INDEX: false, | |||
| FILE_SUFFIX: '.html', | |||
| HAS_SOURCE: true | |||
| }; | |||
| </script> | |||
| <script type="text/javascript" src="_static/jquery.js"></script> | |||
| <script type="text/javascript" src="_static/underscore.js"></script> | |||
| <script type="text/javascript" src="_static/doctools.js"></script> | |||
| <link rel="top" title="pyad2usb documentation" href="index.html" /> | |||
| <link rel="next" title="event Package" href="pyad2usb.event.html" /> | |||
| <link rel="prev" title="Welcome to pyad2usb’s documentation!" href="index.html" /> | |||
| </head> | |||
| <body> | |||
| <div class="related"> | |||
| <h3>Navigation</h3> | |||
| <ul> | |||
| <li class="right" style="margin-right: 10px"> | |||
| <a href="genindex.html" title="General Index" | |||
| accesskey="I">index</a></li> | |||
| <li class="right" > | |||
| <a href="py-modindex.html" title="Python Module Index" | |||
| >modules</a> |</li> | |||
| <li class="right" > | |||
| <a href="pyad2usb.event.html" title="event Package" | |||
| accesskey="N">next</a> |</li> | |||
| <li class="right" > | |||
| <a href="index.html" title="Welcome to pyad2usb’s documentation!" | |||
| accesskey="P">previous</a> |</li> | |||
| <li><a href="index.html">pyad2usb documentation</a> »</li> | |||
| </ul> | |||
| </div> | |||
| <div class="document"> | |||
| <div class="documentwrapper"> | |||
| <div class="bodywrapper"> | |||
| <div class="body"> | |||
| <div class="section" id="pyad2usb-package"> | |||
| <h1>pyad2usb Package<a class="headerlink" href="#pyad2usb-package" title="Permalink to this headline">¶</a></h1> | |||
| <div class="section" id="id1"> | |||
| <h2><tt class="xref py py-mod docutils literal"><span class="pre">pyad2usb</span></tt> Package<a class="headerlink" href="#id1" title="Permalink to this headline">¶</a></h2> | |||
| <span class="target" id="module-pyad2usb.__init__"></span><p>The PyAD2USB module.</p> | |||
| </div> | |||
| <div class="section" id="module-pyad2usb.ad2usb"> | |||
| <span id="ad2usb-module"></span><h2><tt class="xref py py-mod docutils literal"><span class="pre">ad2usb</span></tt> Module<a class="headerlink" href="#module-pyad2usb.ad2usb" title="Permalink to this headline">¶</a></h2> | |||
| <p>Provides the full AD2USB class and factory.</p> | |||
| <dl class="class"> | |||
| <dt id="pyad2usb.ad2usb.AD2USB"> | |||
| <em class="property">class </em><tt class="descclassname">pyad2usb.ad2usb.</tt><tt class="descname">AD2USB</tt><big>(</big><em>device</em><big>)</big><a class="reference internal" href="_modules/pyad2usb/ad2usb.html#AD2USB"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pyad2usb.ad2usb.AD2USB" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>Bases: <tt class="xref py py-class docutils literal"><span class="pre">object</span></tt></p> | |||
| <p>High-level wrapper around AD2USB/AD2SERIAL devices.</p> | |||
| <dl class="attribute"> | |||
| <dt id="pyad2usb.ad2usb.AD2USB.F1"> | |||
| <tt class="descname">F1</tt><em class="property"> = u'\x01\x01\x01'</em><a class="headerlink" href="#pyad2usb.ad2usb.AD2USB.F1" title="Permalink to this definition">¶</a></dt> | |||
| <dd></dd></dl> | |||
| <dl class="attribute"> | |||
| <dt id="pyad2usb.ad2usb.AD2USB.F2"> | |||
| <tt class="descname">F2</tt><em class="property"> = u'\x02\x02\x02'</em><a class="headerlink" href="#pyad2usb.ad2usb.AD2USB.F2" title="Permalink to this definition">¶</a></dt> | |||
| <dd></dd></dl> | |||
| <dl class="attribute"> | |||
| <dt id="pyad2usb.ad2usb.AD2USB.F3"> | |||
| <tt class="descname">F3</tt><em class="property"> = u'\x03\x03\x03'</em><a class="headerlink" href="#pyad2usb.ad2usb.AD2USB.F3" title="Permalink to this definition">¶</a></dt> | |||
| <dd></dd></dl> | |||
| <dl class="attribute"> | |||
| <dt id="pyad2usb.ad2usb.AD2USB.F4"> | |||
| <tt class="descname">F4</tt><em class="property"> = u'\x04\x04\x04'</em><a class="headerlink" href="#pyad2usb.ad2usb.AD2USB.F4" title="Permalink to this definition">¶</a></dt> | |||
| <dd></dd></dl> | |||
| <dl class="method"> | |||
| <dt id="pyad2usb.ad2usb.AD2USB.close"> | |||
| <tt class="descname">close</tt><big>(</big><big>)</big><a class="reference internal" href="_modules/pyad2usb/ad2usb.html#AD2USB.close"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pyad2usb.ad2usb.AD2USB.close" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>Closes the device.</p> | |||
| </dd></dl> | |||
| <dl class="method"> | |||
| <dt id="pyad2usb.ad2usb.AD2USB.get_config"> | |||
| <tt class="descname">get_config</tt><big>(</big><big>)</big><a class="reference internal" href="_modules/pyad2usb/ad2usb.html#AD2USB.get_config"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pyad2usb.ad2usb.AD2USB.get_config" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>Retrieves the configuration from the device.</p> | |||
| </dd></dl> | |||
| <dl class="attribute"> | |||
| <dt id="pyad2usb.ad2usb.AD2USB.id"> | |||
| <tt class="descname">id</tt><a class="reference internal" href="_modules/pyad2usb/ad2usb.html#AD2USB.id"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pyad2usb.ad2usb.AD2USB.id" title="Permalink to this definition">¶</a></dt> | |||
| <dd></dd></dl> | |||
| <dl class="attribute"> | |||
| <dt id="pyad2usb.ad2usb.AD2USB.on_alarm"> | |||
| <tt class="descname">on_alarm</tt><a class="headerlink" href="#pyad2usb.ad2usb.AD2USB.on_alarm" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>Called when the alarm is triggered.</p> | |||
| </dd></dl> | |||
| <dl class="attribute"> | |||
| <dt id="pyad2usb.ad2usb.AD2USB.on_boot"> | |||
| <tt class="descname">on_boot</tt><a class="headerlink" href="#pyad2usb.ad2usb.AD2USB.on_boot" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>Called when the device finishes bootings.</p> | |||
| </dd></dl> | |||
| <dl class="attribute"> | |||
| <dt id="pyad2usb.ad2usb.AD2USB.on_bypass"> | |||
| <tt class="descname">on_bypass</tt><a class="headerlink" href="#pyad2usb.ad2usb.AD2USB.on_bypass" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>Called when a zone is bypassed.</p> | |||
| </dd></dl> | |||
| <dl class="attribute"> | |||
| <dt id="pyad2usb.ad2usb.AD2USB.on_close"> | |||
| <tt class="descname">on_close</tt><a class="headerlink" href="#pyad2usb.ad2usb.AD2USB.on_close" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>Called when the device has been closed.</p> | |||
| </dd></dl> | |||
| <dl class="attribute"> | |||
| <dt id="pyad2usb.ad2usb.AD2USB.on_config_received"> | |||
| <tt class="descname">on_config_received</tt><a class="headerlink" href="#pyad2usb.ad2usb.AD2USB.on_config_received" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>Called when the device receives its configuration.</p> | |||
| </dd></dl> | |||
| <dl class="attribute"> | |||
| <dt id="pyad2usb.ad2usb.AD2USB.on_message"> | |||
| <tt class="descname">on_message</tt><a class="headerlink" href="#pyad2usb.ad2usb.AD2USB.on_message" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>Called when a message has been received from the device.</p> | |||
| </dd></dl> | |||
| <dl class="attribute"> | |||
| <dt id="pyad2usb.ad2usb.AD2USB.on_open"> | |||
| <tt class="descname">on_open</tt><a class="headerlink" href="#pyad2usb.ad2usb.AD2USB.on_open" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>Called when the device has been opened.</p> | |||
| </dd></dl> | |||
| <dl class="attribute"> | |||
| <dt id="pyad2usb.ad2usb.AD2USB.on_power_changed"> | |||
| <tt class="descname">on_power_changed</tt><a class="headerlink" href="#pyad2usb.ad2usb.AD2USB.on_power_changed" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>Called when panel power switches between AC and DC.</p> | |||
| </dd></dl> | |||
| <dl class="attribute"> | |||
| <dt id="pyad2usb.ad2usb.AD2USB.on_read"> | |||
| <tt class="descname">on_read</tt><a class="headerlink" href="#pyad2usb.ad2usb.AD2USB.on_read" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>Called when a line has been read from the device.</p> | |||
| </dd></dl> | |||
| <dl class="attribute"> | |||
| <dt id="pyad2usb.ad2usb.AD2USB.on_status_changed"> | |||
| <tt class="descname">on_status_changed</tt><a class="headerlink" href="#pyad2usb.ad2usb.AD2USB.on_status_changed" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>Called when the panel status changes.</p> | |||
| </dd></dl> | |||
| <dl class="attribute"> | |||
| <dt id="pyad2usb.ad2usb.AD2USB.on_write"> | |||
| <tt class="descname">on_write</tt><a class="headerlink" href="#pyad2usb.ad2usb.AD2USB.on_write" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>Called when data has been written to the device.</p> | |||
| </dd></dl> | |||
| <dl class="method"> | |||
| <dt id="pyad2usb.ad2usb.AD2USB.open"> | |||
| <tt class="descname">open</tt><big>(</big><em>baudrate=None</em>, <em>interface=None</em>, <em>index=None</em>, <em>no_reader_thread=False</em><big>)</big><a class="reference internal" href="_modules/pyad2usb/ad2usb.html#AD2USB.open"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pyad2usb.ad2usb.AD2USB.open" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>Opens the device.</p> | |||
| </dd></dl> | |||
| <dl class="method"> | |||
| <dt id="pyad2usb.ad2usb.AD2USB.reboot"> | |||
| <tt class="descname">reboot</tt><big>(</big><big>)</big><a class="reference internal" href="_modules/pyad2usb/ad2usb.html#AD2USB.reboot"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pyad2usb.ad2usb.AD2USB.reboot" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>Reboots the device.</p> | |||
| </dd></dl> | |||
| <dl class="method"> | |||
| <dt id="pyad2usb.ad2usb.AD2USB.set_config"> | |||
| <tt class="descname">set_config</tt><big>(</big><em>settings</em><big>)</big><a class="reference internal" href="_modules/pyad2usb/ad2usb.html#AD2USB.set_config"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pyad2usb.ad2usb.AD2USB.set_config" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>Sets configuration entries on the device.</p> | |||
| </dd></dl> | |||
| </dd></dl> | |||
| <dl class="class"> | |||
| <dt id="pyad2usb.ad2usb.ExpanderMessage"> | |||
| <em class="property">class </em><tt class="descclassname">pyad2usb.ad2usb.</tt><tt class="descname">ExpanderMessage</tt><big>(</big><em>data=None</em><big>)</big><a class="reference internal" href="_modules/pyad2usb/ad2usb.html#ExpanderMessage"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pyad2usb.ad2usb.ExpanderMessage" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>Bases: <tt class="xref py py-class docutils literal"><span class="pre">object</span></tt></p> | |||
| <p>Represents a message from a zone or relay expansion module.</p> | |||
| <dl class="attribute"> | |||
| <dt id="pyad2usb.ad2usb.ExpanderMessage.RELAY"> | |||
| <tt class="descname">RELAY</tt><em class="property"> = 1</em><a class="headerlink" href="#pyad2usb.ad2usb.ExpanderMessage.RELAY" title="Permalink to this definition">¶</a></dt> | |||
| <dd></dd></dl> | |||
| <dl class="attribute"> | |||
| <dt id="pyad2usb.ad2usb.ExpanderMessage.ZONE"> | |||
| <tt class="descname">ZONE</tt><em class="property"> = 0</em><a class="headerlink" href="#pyad2usb.ad2usb.ExpanderMessage.ZONE" title="Permalink to this definition">¶</a></dt> | |||
| <dd></dd></dl> | |||
| </dd></dl> | |||
| <dl class="class"> | |||
| <dt id="pyad2usb.ad2usb.LRRMessage"> | |||
| <em class="property">class </em><tt class="descclassname">pyad2usb.ad2usb.</tt><tt class="descname">LRRMessage</tt><big>(</big><em>data=None</em><big>)</big><a class="reference internal" href="_modules/pyad2usb/ad2usb.html#LRRMessage"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pyad2usb.ad2usb.LRRMessage" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>Bases: <tt class="xref py py-class docutils literal"><span class="pre">object</span></tt></p> | |||
| <p>Represent a message from a Long Range Radio.</p> | |||
| </dd></dl> | |||
| <dl class="class"> | |||
| <dt id="pyad2usb.ad2usb.Message"> | |||
| <em class="property">class </em><tt class="descclassname">pyad2usb.ad2usb.</tt><tt class="descname">Message</tt><big>(</big><em>data=None</em><big>)</big><a class="reference internal" href="_modules/pyad2usb/ad2usb.html#Message"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pyad2usb.ad2usb.Message" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>Bases: <tt class="xref py py-class docutils literal"><span class="pre">object</span></tt></p> | |||
| <p>Represents a message from the alarm panel.</p> | |||
| </dd></dl> | |||
| <dl class="class"> | |||
| <dt id="pyad2usb.ad2usb.Overseer"> | |||
| <em class="property">class </em><tt class="descclassname">pyad2usb.ad2usb.</tt><tt class="descname">Overseer</tt><big>(</big><em>attached_event=None</em>, <em>detached_event=None</em><big>)</big><a class="reference internal" href="_modules/pyad2usb/ad2usb.html#Overseer"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pyad2usb.ad2usb.Overseer" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>Bases: <tt class="xref py py-class docutils literal"><span class="pre">object</span></tt></p> | |||
| <p>Factory for creation of AD2USB devices as well as provide4s attach/detach events.”</p> | |||
| <dl class="class"> | |||
| <dt id="pyad2usb.ad2usb.Overseer.DetectThread"> | |||
| <em class="property">class </em><tt class="descname">DetectThread</tt><big>(</big><em>overseer</em><big>)</big><a class="reference internal" href="_modules/pyad2usb/ad2usb.html#Overseer.DetectThread"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pyad2usb.ad2usb.Overseer.DetectThread" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>Bases: <tt class="xref py py-class docutils literal"><span class="pre">threading.Thread</span></tt></p> | |||
| <p>Thread that handles detection of added/removed devices.</p> | |||
| <dl class="method"> | |||
| <dt id="pyad2usb.ad2usb.Overseer.DetectThread.run"> | |||
| <tt class="descname">run</tt><big>(</big><big>)</big><a class="reference internal" href="_modules/pyad2usb/ad2usb.html#Overseer.DetectThread.run"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pyad2usb.ad2usb.Overseer.DetectThread.run" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>The actual detection process.</p> | |||
| </dd></dl> | |||
| <dl class="method"> | |||
| <dt id="pyad2usb.ad2usb.Overseer.DetectThread.stop"> | |||
| <tt class="descname">stop</tt><big>(</big><big>)</big><a class="reference internal" href="_modules/pyad2usb/ad2usb.html#Overseer.DetectThread.stop"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pyad2usb.ad2usb.Overseer.DetectThread.stop" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>Stops the thread.</p> | |||
| </dd></dl> | |||
| </dd></dl> | |||
| <dl class="method"> | |||
| <dt id="pyad2usb.ad2usb.Overseer.close"> | |||
| <tt class="descclassname">Overseer.</tt><tt class="descname">close</tt><big>(</big><big>)</big><a class="reference internal" href="_modules/pyad2usb/ad2usb.html#Overseer.close"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pyad2usb.ad2usb.Overseer.close" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>Clean up and shut down.</p> | |||
| </dd></dl> | |||
| <dl class="classmethod"> | |||
| <dt id="pyad2usb.ad2usb.Overseer.create"> | |||
| <em class="property">classmethod </em><tt class="descclassname">Overseer.</tt><tt class="descname">create</tt><big>(</big><em>device=None</em><big>)</big><a class="reference internal" href="_modules/pyad2usb/ad2usb.html#Overseer.create"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pyad2usb.ad2usb.Overseer.create" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>Factory method that returns the requested AD2USB device, or the first device.</p> | |||
| </dd></dl> | |||
| <dl class="classmethod"> | |||
| <dt id="pyad2usb.ad2usb.Overseer.devices"> | |||
| <em class="property">classmethod </em><tt class="descclassname">Overseer.</tt><tt class="descname">devices</tt><big>(</big><big>)</big><a class="reference internal" href="_modules/pyad2usb/ad2usb.html#Overseer.devices"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pyad2usb.ad2usb.Overseer.devices" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>Returns a cached list of AD2USB devices located on the system.</p> | |||
| </dd></dl> | |||
| <dl class="classmethod"> | |||
| <dt id="pyad2usb.ad2usb.Overseer.find_all"> | |||
| <em class="property">classmethod </em><tt class="descclassname">Overseer.</tt><tt class="descname">find_all</tt><big>(</big><big>)</big><a class="reference internal" href="_modules/pyad2usb/ad2usb.html#Overseer.find_all"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pyad2usb.ad2usb.Overseer.find_all" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>Returns all AD2USB devices located on the system.</p> | |||
| </dd></dl> | |||
| <dl class="method"> | |||
| <dt id="pyad2usb.ad2usb.Overseer.get_device"> | |||
| <tt class="descclassname">Overseer.</tt><tt class="descname">get_device</tt><big>(</big><em>device=None</em><big>)</big><a class="reference internal" href="_modules/pyad2usb/ad2usb.html#Overseer.get_device"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pyad2usb.ad2usb.Overseer.get_device" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>Factory method that returns the requested AD2USB device, or the first device.</p> | |||
| </dd></dl> | |||
| <dl class="attribute"> | |||
| <dt id="pyad2usb.ad2usb.Overseer.on_attached"> | |||
| <tt class="descclassname">Overseer.</tt><tt class="descname">on_attached</tt><a class="headerlink" href="#pyad2usb.ad2usb.Overseer.on_attached" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>Called when an AD2USB device has been detected.</p> | |||
| </dd></dl> | |||
| <dl class="attribute"> | |||
| <dt id="pyad2usb.ad2usb.Overseer.on_detached"> | |||
| <tt class="descclassname">Overseer.</tt><tt class="descname">on_detached</tt><a class="headerlink" href="#pyad2usb.ad2usb.Overseer.on_detached" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>Called when an AD2USB device has been removed.</p> | |||
| </dd></dl> | |||
| <dl class="method"> | |||
| <dt id="pyad2usb.ad2usb.Overseer.start"> | |||
| <tt class="descclassname">Overseer.</tt><tt class="descname">start</tt><big>(</big><big>)</big><a class="reference internal" href="_modules/pyad2usb/ad2usb.html#Overseer.start"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pyad2usb.ad2usb.Overseer.start" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>Starts the detection thread, if not already running.</p> | |||
| </dd></dl> | |||
| <dl class="method"> | |||
| <dt id="pyad2usb.ad2usb.Overseer.stop"> | |||
| <tt class="descclassname">Overseer.</tt><tt class="descname">stop</tt><big>(</big><big>)</big><a class="reference internal" href="_modules/pyad2usb/ad2usb.html#Overseer.stop"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pyad2usb.ad2usb.Overseer.stop" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>Stops the detection thread.</p> | |||
| </dd></dl> | |||
| </dd></dl> | |||
| <dl class="class"> | |||
| <dt id="pyad2usb.ad2usb.RFMessage"> | |||
| <em class="property">class </em><tt class="descclassname">pyad2usb.ad2usb.</tt><tt class="descname">RFMessage</tt><big>(</big><em>data=None</em><big>)</big><a class="reference internal" href="_modules/pyad2usb/ad2usb.html#RFMessage"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pyad2usb.ad2usb.RFMessage" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>Bases: <tt class="xref py py-class docutils literal"><span class="pre">object</span></tt></p> | |||
| <p>Represents a message from an RF receiver.</p> | |||
| </dd></dl> | |||
| </div> | |||
| <div class="section" id="module-pyad2usb.devices"> | |||
| <span id="devices-module"></span><h2><tt class="xref py py-mod docutils literal"><span class="pre">devices</span></tt> Module<a class="headerlink" href="#module-pyad2usb.devices" title="Permalink to this headline">¶</a></h2> | |||
| <p>Contains different types of devices belonging to the AD2USB family.</p> | |||
| <dl class="class"> | |||
| <dt id="pyad2usb.devices.Device"> | |||
| <em class="property">class </em><tt class="descclassname">pyad2usb.devices.</tt><tt class="descname">Device</tt><a class="reference internal" href="_modules/pyad2usb/devices.html#Device"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pyad2usb.devices.Device" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>Bases: <tt class="xref py py-class docutils literal"><span class="pre">object</span></tt></p> | |||
| <p>Generic parent device to all AD2USB products.</p> | |||
| <dl class="class"> | |||
| <dt id="pyad2usb.devices.Device.ReadThread"> | |||
| <em class="property">class </em><tt class="descname">ReadThread</tt><big>(</big><em>device</em><big>)</big><a class="reference internal" href="_modules/pyad2usb/devices.html#Device.ReadThread"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pyad2usb.devices.Device.ReadThread" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>Bases: <tt class="xref py py-class docutils literal"><span class="pre">threading.Thread</span></tt></p> | |||
| <p>Reader thread which processes messages from the device.</p> | |||
| <dl class="attribute"> | |||
| <dt id="pyad2usb.devices.Device.ReadThread.READ_TIMEOUT"> | |||
| <tt class="descname">READ_TIMEOUT</tt><em class="property"> = 10</em><a class="headerlink" href="#pyad2usb.devices.Device.ReadThread.READ_TIMEOUT" title="Permalink to this definition">¶</a></dt> | |||
| <dd></dd></dl> | |||
| <dl class="method"> | |||
| <dt id="pyad2usb.devices.Device.ReadThread.run"> | |||
| <tt class="descname">run</tt><big>(</big><big>)</big><a class="reference internal" href="_modules/pyad2usb/devices.html#Device.ReadThread.run"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pyad2usb.devices.Device.ReadThread.run" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>The actual read process.</p> | |||
| </dd></dl> | |||
| <dl class="method"> | |||
| <dt id="pyad2usb.devices.Device.ReadThread.stop"> | |||
| <tt class="descname">stop</tt><big>(</big><big>)</big><a class="reference internal" href="_modules/pyad2usb/devices.html#Device.ReadThread.stop"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pyad2usb.devices.Device.ReadThread.stop" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>Stops the running thread.</p> | |||
| </dd></dl> | |||
| </dd></dl> | |||
| <dl class="attribute"> | |||
| <dt id="pyad2usb.devices.Device.id"> | |||
| <tt class="descclassname">Device.</tt><tt class="descname">id</tt><a class="reference internal" href="_modules/pyad2usb/devices.html#Device.id"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pyad2usb.devices.Device.id" title="Permalink to this definition">¶</a></dt> | |||
| <dd></dd></dl> | |||
| <dl class="method"> | |||
| <dt id="pyad2usb.devices.Device.is_reader_alive"> | |||
| <tt class="descclassname">Device.</tt><tt class="descname">is_reader_alive</tt><big>(</big><big>)</big><a class="reference internal" href="_modules/pyad2usb/devices.html#Device.is_reader_alive"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pyad2usb.devices.Device.is_reader_alive" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>Indicates whether or not the reader thread is alive.</p> | |||
| </dd></dl> | |||
| <dl class="attribute"> | |||
| <dt id="pyad2usb.devices.Device.on_close"> | |||
| <tt class="descclassname">Device.</tt><tt class="descname">on_close</tt><a class="headerlink" href="#pyad2usb.devices.Device.on_close" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>Called when the device has been closed</p> | |||
| </dd></dl> | |||
| <dl class="attribute"> | |||
| <dt id="pyad2usb.devices.Device.on_open"> | |||
| <tt class="descclassname">Device.</tt><tt class="descname">on_open</tt><a class="headerlink" href="#pyad2usb.devices.Device.on_open" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>Called when the device has been opened</p> | |||
| </dd></dl> | |||
| <dl class="attribute"> | |||
| <dt id="pyad2usb.devices.Device.on_read"> | |||
| <tt class="descclassname">Device.</tt><tt class="descname">on_read</tt><a class="headerlink" href="#pyad2usb.devices.Device.on_read" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>Called when a line has been read from the device</p> | |||
| </dd></dl> | |||
| <dl class="attribute"> | |||
| <dt id="pyad2usb.devices.Device.on_write"> | |||
| <tt class="descclassname">Device.</tt><tt class="descname">on_write</tt><a class="headerlink" href="#pyad2usb.devices.Device.on_write" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>Called when data has been written to the device</p> | |||
| </dd></dl> | |||
| <dl class="method"> | |||
| <dt id="pyad2usb.devices.Device.stop_reader"> | |||
| <tt class="descclassname">Device.</tt><tt class="descname">stop_reader</tt><big>(</big><big>)</big><a class="reference internal" href="_modules/pyad2usb/devices.html#Device.stop_reader"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pyad2usb.devices.Device.stop_reader" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>Stops the reader thread.</p> | |||
| </dd></dl> | |||
| </dd></dl> | |||
| <dl class="class"> | |||
| <dt id="pyad2usb.devices.SerialDevice"> | |||
| <em class="property">class </em><tt class="descclassname">pyad2usb.devices.</tt><tt class="descname">SerialDevice</tt><big>(</big><em>interface=None</em><big>)</big><a class="reference internal" href="_modules/pyad2usb/devices.html#SerialDevice"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pyad2usb.devices.SerialDevice" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>Bases: <a class="reference internal" href="#pyad2usb.devices.Device" title="pyad2usb.devices.Device"><tt class="xref py py-class docutils literal"><span class="pre">pyad2usb.devices.Device</span></tt></a></p> | |||
| <p>AD2USB or AD2SERIAL device exposed with the pyserial interface.</p> | |||
| <dl class="attribute"> | |||
| <dt id="pyad2usb.devices.SerialDevice.BAUDRATE"> | |||
| <tt class="descname">BAUDRATE</tt><em class="property"> = 19200</em><a class="headerlink" href="#pyad2usb.devices.SerialDevice.BAUDRATE" title="Permalink to this definition">¶</a></dt> | |||
| <dd></dd></dl> | |||
| <dl class="method"> | |||
| <dt id="pyad2usb.devices.SerialDevice.close"> | |||
| <tt class="descname">close</tt><big>(</big><big>)</big><a class="reference internal" href="_modules/pyad2usb/devices.html#SerialDevice.close"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pyad2usb.devices.SerialDevice.close" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>Closes the device.</p> | |||
| </dd></dl> | |||
| <dl class="staticmethod"> | |||
| <dt id="pyad2usb.devices.SerialDevice.find_all"> | |||
| <em class="property">static </em><tt class="descname">find_all</tt><big>(</big><em>pattern=None</em><big>)</big><a class="reference internal" href="_modules/pyad2usb/devices.html#SerialDevice.find_all"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pyad2usb.devices.SerialDevice.find_all" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>Returns all serial ports present.</p> | |||
| </dd></dl> | |||
| <dl class="method"> | |||
| <dt id="pyad2usb.devices.SerialDevice.open"> | |||
| <tt class="descname">open</tt><big>(</big><em>baudrate=19200</em>, <em>interface=None</em>, <em>index=None</em>, <em>no_reader_thread=False</em><big>)</big><a class="reference internal" href="_modules/pyad2usb/devices.html#SerialDevice.open"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pyad2usb.devices.SerialDevice.open" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>Opens the device.</p> | |||
| </dd></dl> | |||
| <dl class="method"> | |||
| <dt id="pyad2usb.devices.SerialDevice.read"> | |||
| <tt class="descname">read</tt><big>(</big><big>)</big><a class="reference internal" href="_modules/pyad2usb/devices.html#SerialDevice.read"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pyad2usb.devices.SerialDevice.read" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>Reads a single character from the device.</p> | |||
| </dd></dl> | |||
| <dl class="method"> | |||
| <dt id="pyad2usb.devices.SerialDevice.read_line"> | |||
| <tt class="descname">read_line</tt><big>(</big><em>timeout=0.0</em><big>)</big><a class="reference internal" href="_modules/pyad2usb/devices.html#SerialDevice.read_line"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pyad2usb.devices.SerialDevice.read_line" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>Reads a line from the device.</p> | |||
| </dd></dl> | |||
| <dl class="method"> | |||
| <dt id="pyad2usb.devices.SerialDevice.write"> | |||
| <tt class="descname">write</tt><big>(</big><em>data</em><big>)</big><a class="reference internal" href="_modules/pyad2usb/devices.html#SerialDevice.write"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pyad2usb.devices.SerialDevice.write" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>Writes data to the device.</p> | |||
| </dd></dl> | |||
| </dd></dl> | |||
| <dl class="class"> | |||
| <dt id="pyad2usb.devices.SocketDevice"> | |||
| <em class="property">class </em><tt class="descclassname">pyad2usb.devices.</tt><tt class="descname">SocketDevice</tt><big>(</big><em>interface=('localhost'</em>, <em>10000)</em><big>)</big><a class="reference internal" href="_modules/pyad2usb/devices.html#SocketDevice"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pyad2usb.devices.SocketDevice" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>Bases: <a class="reference internal" href="#pyad2usb.devices.Device" title="pyad2usb.devices.Device"><tt class="xref py py-class docutils literal"><span class="pre">pyad2usb.devices.Device</span></tt></a></p> | |||
| <p>Device that supports communication with an AD2USB that is exposed via ser2sock or another | |||
| Serial to IP interface.</p> | |||
| <dl class="method"> | |||
| <dt id="pyad2usb.devices.SocketDevice.close"> | |||
| <tt class="descname">close</tt><big>(</big><big>)</big><a class="reference internal" href="_modules/pyad2usb/devices.html#SocketDevice.close"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pyad2usb.devices.SocketDevice.close" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>Closes the device.</p> | |||
| </dd></dl> | |||
| <dl class="method"> | |||
| <dt id="pyad2usb.devices.SocketDevice.open"> | |||
| <tt class="descname">open</tt><big>(</big><em>baudrate=None</em>, <em>interface=None</em>, <em>index=0</em>, <em>no_reader_thread=False</em><big>)</big><a class="reference internal" href="_modules/pyad2usb/devices.html#SocketDevice.open"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pyad2usb.devices.SocketDevice.open" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>Opens the device.</p> | |||
| </dd></dl> | |||
| <dl class="method"> | |||
| <dt id="pyad2usb.devices.SocketDevice.read"> | |||
| <tt class="descname">read</tt><big>(</big><big>)</big><a class="reference internal" href="_modules/pyad2usb/devices.html#SocketDevice.read"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pyad2usb.devices.SocketDevice.read" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>Reads a single character from the device.</p> | |||
| </dd></dl> | |||
| <dl class="method"> | |||
| <dt id="pyad2usb.devices.SocketDevice.read_line"> | |||
| <tt class="descname">read_line</tt><big>(</big><em>timeout=0.0</em><big>)</big><a class="reference internal" href="_modules/pyad2usb/devices.html#SocketDevice.read_line"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pyad2usb.devices.SocketDevice.read_line" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>Reads a line from the device.</p> | |||
| </dd></dl> | |||
| <dl class="method"> | |||
| <dt id="pyad2usb.devices.SocketDevice.write"> | |||
| <tt class="descname">write</tt><big>(</big><em>data</em><big>)</big><a class="reference internal" href="_modules/pyad2usb/devices.html#SocketDevice.write"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pyad2usb.devices.SocketDevice.write" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>Writes data to the device.</p> | |||
| </dd></dl> | |||
| </dd></dl> | |||
| <dl class="class"> | |||
| <dt id="pyad2usb.devices.USBDevice"> | |||
| <em class="property">class </em><tt class="descclassname">pyad2usb.devices.</tt><tt class="descname">USBDevice</tt><big>(</big><em>vid=1027</em>, <em>pid=24577</em>, <em>serial=None</em>, <em>description=None</em>, <em>interface=0</em><big>)</big><a class="reference internal" href="_modules/pyad2usb/devices.html#USBDevice"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pyad2usb.devices.USBDevice" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>Bases: <a class="reference internal" href="#pyad2usb.devices.Device" title="pyad2usb.devices.Device"><tt class="xref py py-class docutils literal"><span class="pre">pyad2usb.devices.Device</span></tt></a></p> | |||
| <p>AD2USB device exposed with PyFTDI’s interface.</p> | |||
| <dl class="attribute"> | |||
| <dt id="pyad2usb.devices.USBDevice.BAUDRATE"> | |||
| <tt class="descname">BAUDRATE</tt><em class="property"> = 115200</em><a class="headerlink" href="#pyad2usb.devices.USBDevice.BAUDRATE" title="Permalink to this definition">¶</a></dt> | |||
| <dd></dd></dl> | |||
| <dl class="attribute"> | |||
| <dt id="pyad2usb.devices.USBDevice.FTDI_PRODUCT_ID"> | |||
| <tt class="descname">FTDI_PRODUCT_ID</tt><em class="property"> = 24577</em><a class="headerlink" href="#pyad2usb.devices.USBDevice.FTDI_PRODUCT_ID" title="Permalink to this definition">¶</a></dt> | |||
| <dd></dd></dl> | |||
| <dl class="attribute"> | |||
| <dt id="pyad2usb.devices.USBDevice.FTDI_VENDOR_ID"> | |||
| <tt class="descname">FTDI_VENDOR_ID</tt><em class="property"> = 1027</em><a class="headerlink" href="#pyad2usb.devices.USBDevice.FTDI_VENDOR_ID" title="Permalink to this definition">¶</a></dt> | |||
| <dd></dd></dl> | |||
| <dl class="method"> | |||
| <dt id="pyad2usb.devices.USBDevice.close"> | |||
| <tt class="descname">close</tt><big>(</big><big>)</big><a class="reference internal" href="_modules/pyad2usb/devices.html#USBDevice.close"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pyad2usb.devices.USBDevice.close" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>Closes the device.</p> | |||
| </dd></dl> | |||
| <dl class="staticmethod"> | |||
| <dt id="pyad2usb.devices.USBDevice.find_all"> | |||
| <em class="property">static </em><tt class="descname">find_all</tt><big>(</big><big>)</big><a class="reference internal" href="_modules/pyad2usb/devices.html#USBDevice.find_all"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pyad2usb.devices.USBDevice.find_all" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>Returns all FTDI devices matching our vendor and product IDs.</p> | |||
| </dd></dl> | |||
| <dl class="method"> | |||
| <dt id="pyad2usb.devices.USBDevice.open"> | |||
| <tt class="descname">open</tt><big>(</big><em>baudrate=115200</em>, <em>interface=None</em>, <em>index=0</em>, <em>no_reader_thread=False</em><big>)</big><a class="reference internal" href="_modules/pyad2usb/devices.html#USBDevice.open"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pyad2usb.devices.USBDevice.open" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>Opens the device.</p> | |||
| </dd></dl> | |||
| <dl class="method"> | |||
| <dt id="pyad2usb.devices.USBDevice.read"> | |||
| <tt class="descname">read</tt><big>(</big><big>)</big><a class="reference internal" href="_modules/pyad2usb/devices.html#USBDevice.read"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pyad2usb.devices.USBDevice.read" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>Reads a single character from the device.</p> | |||
| </dd></dl> | |||
| <dl class="method"> | |||
| <dt id="pyad2usb.devices.USBDevice.read_line"> | |||
| <tt class="descname">read_line</tt><big>(</big><em>timeout=0.0</em><big>)</big><a class="reference internal" href="_modules/pyad2usb/devices.html#USBDevice.read_line"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pyad2usb.devices.USBDevice.read_line" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>Reads a line from the device.</p> | |||
| </dd></dl> | |||
| <dl class="method"> | |||
| <dt id="pyad2usb.devices.USBDevice.write"> | |||
| <tt class="descname">write</tt><big>(</big><em>data</em><big>)</big><a class="reference internal" href="_modules/pyad2usb/devices.html#USBDevice.write"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pyad2usb.devices.USBDevice.write" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>Writes data to the device.</p> | |||
| </dd></dl> | |||
| </dd></dl> | |||
| </div> | |||
| <div class="section" id="module-pyad2usb.util"> | |||
| <span id="util-module"></span><h2><tt class="xref py py-mod docutils literal"><span class="pre">util</span></tt> Module<a class="headerlink" href="#module-pyad2usb.util" title="Permalink to this headline">¶</a></h2> | |||
| <p>Provides utility classes for the AD2USB devices.</p> | |||
| <dl class="exception"> | |||
| <dt id="pyad2usb.util.CommError"> | |||
| <em class="property">exception </em><tt class="descclassname">pyad2usb.util.</tt><tt class="descname">CommError</tt><a class="reference internal" href="_modules/pyad2usb/util.html#CommError"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pyad2usb.util.CommError" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>Bases: <tt class="xref py py-class docutils literal"><span class="pre">exceptions.Exception</span></tt></p> | |||
| <p>There was an error communicating with the device.</p> | |||
| </dd></dl> | |||
| <dl class="class"> | |||
| <dt id="pyad2usb.util.Firmware"> | |||
| <em class="property">class </em><tt class="descclassname">pyad2usb.util.</tt><tt class="descname">Firmware</tt><a class="reference internal" href="_modules/pyad2usb/util.html#Firmware"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pyad2usb.util.Firmware" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>Bases: <tt class="xref py py-class docutils literal"><span class="pre">object</span></tt></p> | |||
| <p>Represents firmware for the AD2USB/AD2SERIAL devices.</p> | |||
| <dl class="attribute"> | |||
| <dt id="pyad2usb.util.Firmware.STAGE_BOOT"> | |||
| <tt class="descname">STAGE_BOOT</tt><em class="property"> = 2</em><a class="headerlink" href="#pyad2usb.util.Firmware.STAGE_BOOT" title="Permalink to this definition">¶</a></dt> | |||
| <dd></dd></dl> | |||
| <dl class="attribute"> | |||
| <dt id="pyad2usb.util.Firmware.STAGE_DONE"> | |||
| <tt class="descname">STAGE_DONE</tt><em class="property"> = 5</em><a class="headerlink" href="#pyad2usb.util.Firmware.STAGE_DONE" title="Permalink to this definition">¶</a></dt> | |||
| <dd></dd></dl> | |||
| <dl class="attribute"> | |||
| <dt id="pyad2usb.util.Firmware.STAGE_LOAD"> | |||
| <tt class="descname">STAGE_LOAD</tt><em class="property"> = 3</em><a class="headerlink" href="#pyad2usb.util.Firmware.STAGE_LOAD" title="Permalink to this definition">¶</a></dt> | |||
| <dd></dd></dl> | |||
| <dl class="attribute"> | |||
| <dt id="pyad2usb.util.Firmware.STAGE_START"> | |||
| <tt class="descname">STAGE_START</tt><em class="property"> = 0</em><a class="headerlink" href="#pyad2usb.util.Firmware.STAGE_START" title="Permalink to this definition">¶</a></dt> | |||
| <dd></dd></dl> | |||
| <dl class="attribute"> | |||
| <dt id="pyad2usb.util.Firmware.STAGE_UPLOADING"> | |||
| <tt class="descname">STAGE_UPLOADING</tt><em class="property"> = 4</em><a class="headerlink" href="#pyad2usb.util.Firmware.STAGE_UPLOADING" title="Permalink to this definition">¶</a></dt> | |||
| <dd></dd></dl> | |||
| <dl class="attribute"> | |||
| <dt id="pyad2usb.util.Firmware.STAGE_WAITING"> | |||
| <tt class="descname">STAGE_WAITING</tt><em class="property"> = 1</em><a class="headerlink" href="#pyad2usb.util.Firmware.STAGE_WAITING" title="Permalink to this definition">¶</a></dt> | |||
| <dd></dd></dl> | |||
| <dl class="staticmethod"> | |||
| <dt id="pyad2usb.util.Firmware.upload"> | |||
| <em class="property">static </em><tt class="descname">upload</tt><big>(</big><em>dev</em>, <em>filename</em>, <em>progress_callback=None</em><big>)</big><a class="reference internal" href="_modules/pyad2usb/util.html#Firmware.upload"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pyad2usb.util.Firmware.upload" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>Uploads firmware to an AD2USB/AD2SERIAL device.</p> | |||
| </dd></dl> | |||
| </dd></dl> | |||
| <dl class="exception"> | |||
| <dt id="pyad2usb.util.InvalidMessageError"> | |||
| <em class="property">exception </em><tt class="descclassname">pyad2usb.util.</tt><tt class="descname">InvalidMessageError</tt><a class="reference internal" href="_modules/pyad2usb/util.html#InvalidMessageError"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pyad2usb.util.InvalidMessageError" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>Bases: <tt class="xref py py-class docutils literal"><span class="pre">exceptions.Exception</span></tt></p> | |||
| <p>The format of the panel message was invalid.</p> | |||
| </dd></dl> | |||
| <dl class="exception"> | |||
| <dt id="pyad2usb.util.NoDeviceError"> | |||
| <em class="property">exception </em><tt class="descclassname">pyad2usb.util.</tt><tt class="descname">NoDeviceError</tt><a class="reference internal" href="_modules/pyad2usb/util.html#NoDeviceError"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pyad2usb.util.NoDeviceError" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>Bases: <tt class="xref py py-class docutils literal"><span class="pre">exceptions.Exception</span></tt></p> | |||
| <p>No devices found.</p> | |||
| </dd></dl> | |||
| <dl class="exception"> | |||
| <dt id="pyad2usb.util.TimeoutError"> | |||
| <em class="property">exception </em><tt class="descclassname">pyad2usb.util.</tt><tt class="descname">TimeoutError</tt><a class="reference internal" href="_modules/pyad2usb/util.html#TimeoutError"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pyad2usb.util.TimeoutError" title="Permalink to this definition">¶</a></dt> | |||
| <dd><p>Bases: <tt class="xref py py-class docutils literal"><span class="pre">exceptions.Exception</span></tt></p> | |||
| <p>There was a timeout while trying to communicate with the device.</p> | |||
| </dd></dl> | |||
| </div> | |||
| <div class="section" id="subpackages"> | |||
| <h2>Subpackages<a class="headerlink" href="#subpackages" title="Permalink to this headline">¶</a></h2> | |||
| <div class="toctree-wrapper compound"> | |||
| <ul> | |||
| <li class="toctree-l1"><a class="reference internal" href="pyad2usb.event.html">event Package</a><ul> | |||
| <li class="toctree-l2"><a class="reference internal" href="pyad2usb.event.html#id1"><tt class="docutils literal"><span class="pre">event</span></tt> Package</a></li> | |||
| <li class="toctree-l2"><a class="reference internal" href="pyad2usb.event.html#module-pyad2usb.event.event"><tt class="docutils literal"><span class="pre">event</span></tt> Module</a></li> | |||
| </ul> | |||
| </li> | |||
| </ul> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| <div class="sphinxsidebar"> | |||
| <div class="sphinxsidebarwrapper"> | |||
| <h3><a href="index.html">Table Of Contents</a></h3> | |||
| <ul> | |||
| <li><a class="reference internal" href="#">pyad2usb Package</a><ul> | |||
| <li><a class="reference internal" href="#id1"><tt class="docutils literal"><span class="pre">pyad2usb</span></tt> Package</a></li> | |||
| <li><a class="reference internal" href="#module-pyad2usb.ad2usb"><tt class="docutils literal"><span class="pre">ad2usb</span></tt> Module</a></li> | |||
| <li><a class="reference internal" href="#module-pyad2usb.devices"><tt class="docutils literal"><span class="pre">devices</span></tt> Module</a></li> | |||
| <li><a class="reference internal" href="#module-pyad2usb.util"><tt class="docutils literal"><span class="pre">util</span></tt> Module</a></li> | |||
| <li><a class="reference internal" href="#subpackages">Subpackages</a><ul> | |||
| </ul> | |||
| </li> | |||
| </ul> | |||
| </li> | |||
| </ul> | |||
| <h4>Previous topic</h4> | |||
| <p class="topless"><a href="index.html" | |||
| title="previous chapter">Welcome to pyad2usb’s documentation!</a></p> | |||
| <h4>Next topic</h4> | |||
| <p class="topless"><a href="pyad2usb.event.html" | |||
| title="next chapter">event Package</a></p> | |||
| <h3>This Page</h3> | |||
| <ul class="this-page-menu"> | |||
| <li><a href="_sources/pyad2usb.txt" | |||
| rel="nofollow">Show Source</a></li> | |||
| </ul> | |||
| <div id="searchbox" style="display: none"> | |||
| <h3>Quick search</h3> | |||
| <form class="search" action="search.html" method="get"> | |||
| <input type="text" name="q" /> | |||
| <input type="submit" value="Go" /> | |||
| <input type="hidden" name="check_keywords" value="yes" /> | |||
| <input type="hidden" name="area" value="default" /> | |||
| </form> | |||
| <p class="searchtip" style="font-size: 90%"> | |||
| Enter search terms or a module, class or function name. | |||
| </p> | |||
| </div> | |||
| <script type="text/javascript">$('#searchbox').show(0);</script> | |||
| </div> | |||
| </div> | |||
| <div class="clearer"></div> | |||
| </div> | |||
| <div class="related"> | |||
| <h3>Navigation</h3> | |||
| <ul> | |||
| <li class="right" style="margin-right: 10px"> | |||
| <a href="genindex.html" title="General Index" | |||
| >index</a></li> | |||
| <li class="right" > | |||
| <a href="py-modindex.html" title="Python Module Index" | |||
| >modules</a> |</li> | |||
| <li class="right" > | |||
| <a href="pyad2usb.event.html" title="event Package" | |||
| >next</a> |</li> | |||
| <li class="right" > | |||
| <a href="index.html" title="Welcome to pyad2usb’s documentation!" | |||
| >previous</a> |</li> | |||
| <li><a href="index.html">pyad2usb documentation</a> »</li> | |||
| </ul> | |||
| </div> | |||
| <div class="footer"> | |||
| © Copyright 2013, Author. | |||
| Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2b1. | |||
| </div> | |||
| </body> | |||
| </html> | |||
| @@ -0,0 +1,105 @@ | |||
| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" | |||
| "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> | |||
| <html xmlns="http://www.w3.org/1999/xhtml"> | |||
| <head> | |||
| <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> | |||
| <title>Search — pyad2usb documentation</title> | |||
| <link rel="stylesheet" href="_static/default.css" type="text/css" /> | |||
| <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> | |||
| <script type="text/javascript"> | |||
| var DOCUMENTATION_OPTIONS = { | |||
| URL_ROOT: './', | |||
| VERSION: '', | |||
| COLLAPSE_INDEX: false, | |||
| FILE_SUFFIX: '.html', | |||
| HAS_SOURCE: true | |||
| }; | |||
| </script> | |||
| <script type="text/javascript" src="_static/jquery.js"></script> | |||
| <script type="text/javascript" src="_static/underscore.js"></script> | |||
| <script type="text/javascript" src="_static/doctools.js"></script> | |||
| <script type="text/javascript" src="_static/searchtools.js"></script> | |||
| <link rel="top" title="pyad2usb documentation" href="index.html" /> | |||
| <script type="text/javascript"> | |||
| jQuery(function() { Search.loadIndex("searchindex.js"); }); | |||
| </script> | |||
| <script type="text/javascript" id="searchindexloader"></script> | |||
| </head> | |||
| <body> | |||
| <div class="related"> | |||
| <h3>Navigation</h3> | |||
| <ul> | |||
| <li class="right" style="margin-right: 10px"> | |||
| <a href="genindex.html" title="General Index" | |||
| accesskey="I">index</a></li> | |||
| <li class="right" > | |||
| <a href="py-modindex.html" title="Python Module Index" | |||
| >modules</a> |</li> | |||
| <li><a href="index.html">pyad2usb documentation</a> »</li> | |||
| </ul> | |||
| </div> | |||
| <div class="document"> | |||
| <div class="documentwrapper"> | |||
| <div class="bodywrapper"> | |||
| <div class="body"> | |||
| <h1 id="search-documentation">Search</h1> | |||
| <div id="fallback" class="admonition warning"> | |||
| <script type="text/javascript">$('#fallback').hide();</script> | |||
| <p> | |||
| Please activate JavaScript to enable the search | |||
| functionality. | |||
| </p> | |||
| </div> | |||
| <p> | |||
| From here you can search these documents. Enter your search | |||
| words into the box below and click "search". Note that the search | |||
| function will automatically search for all of the words. Pages | |||
| containing fewer words won't appear in the result list. | |||
| </p> | |||
| <form action="" method="get"> | |||
| <input type="text" name="q" value="" /> | |||
| <input type="submit" value="search" /> | |||
| <span id="search-progress" style="padding-left: 10px"></span> | |||
| </form> | |||
| <div id="search-results"> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| <div class="sphinxsidebar"> | |||
| <div class="sphinxsidebarwrapper"> | |||
| </div> | |||
| </div> | |||
| <div class="clearer"></div> | |||
| </div> | |||
| <div class="related"> | |||
| <h3>Navigation</h3> | |||
| <ul> | |||
| <li class="right" style="margin-right: 10px"> | |||
| <a href="genindex.html" title="General Index" | |||
| >index</a></li> | |||
| <li class="right" > | |||
| <a href="py-modindex.html" title="Python Module Index" | |||
| >modules</a> |</li> | |||
| <li><a href="index.html">pyad2usb documentation</a> »</li> | |||
| </ul> | |||
| </div> | |||
| <div class="footer"> | |||
| © Copyright 2013, Author. | |||
| Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2b1. | |||
| </div> | |||
| </body> | |||
| </html> | |||
| @@ -0,0 +1,306 @@ | |||
| # -*- coding: utf-8 -*- | |||
| # | |||
| # pyad2usb documentation build configuration file, created by | |||
| # sphinx-quickstart on Sat Jun 8 14:38:46 2013. | |||
| # | |||
| # 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, 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('..')) | |||
| # -- 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'] | |||
| # 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'pyad2usb' | |||
| copyright = u'2013, Author' | |||
| # 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. | |||
| version = '' | |||
| # The full version, including alpha/beta/rc tags. | |||
| release = '' | |||
| # 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 = [] | |||
| # If true, keep warnings as "system message" paragraphs in the built documents. | |||
| #keep_warnings = False | |||
| # -- 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 = 'default' | |||
| # 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. | |||
| #html_theme_path = [] | |||
| # 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 = 'pyad2usbdoc' | |||
| # -- 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', 'pyad2usb.tex', u'pyad2usb Documentation', | |||
| u'Author', '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', 'pyad2usb', u'pyad2usb Documentation', | |||
| [u'Author'], 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', 'pyad2usb', u'pyad2usb Documentation', | |||
| u'Author', 'pyad2usb', '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' | |||
| # If true, do not generate a @detailmenu in the "Top" node's menu. | |||
| #texinfo_no_detailmenu = False | |||
| # -- Options for Epub output --------------------------------------------------- | |||
| # Bibliographic Dublin Core info. | |||
| epub_title = u'pyad2usb' | |||
| epub_author = u'Author' | |||
| epub_publisher = u'Author' | |||
| epub_copyright = u'2013, Author' | |||
| # The language of the text. It defaults to the language option | |||
| # or en if the language is not set. | |||
| #epub_language = '' | |||
| # The scheme of the identifier. Typical schemes are ISBN or URL. | |||
| #epub_scheme = '' | |||
| # The unique identifier of the text. This can be a ISBN number | |||
| # or the project homepage. | |||
| #epub_identifier = '' | |||
| # A unique identification for the text. | |||
| #epub_uid = '' | |||
| # A tuple containing the cover image and cover page html template filenames. | |||
| #epub_cover = () | |||
| # A sequence of (type, uri, title) tuples for the guide element of content.opf. | |||
| #epub_guide = () | |||
| # HTML files that should be inserted before the pages created by sphinx. | |||
| # The format is a list of tuples containing the path and title. | |||
| #epub_pre_files = [] | |||
| # HTML files shat should be inserted after the pages created by sphinx. | |||
| # The format is a list of tuples containing the path and title. | |||
| #epub_post_files = [] | |||
| # A list of files that should not be packed into the epub file. | |||
| #epub_exclude_files = [] | |||
| # The depth of the table of contents in toc.ncx. | |||
| #epub_tocdepth = 3 | |||
| # Allow duplicate toc entries. | |||
| #epub_tocdup = True | |||
| # Fix unsupported image types using the PIL. | |||
| #epub_fix_images = False | |||
| # Scale large images. | |||
| #epub_max_image_width = 0 | |||
| # If 'no', URL addresses will not be shown. | |||
| #epub_show_urls = 'inline' | |||
| # If false, no index is generated. | |||
| #epub_use_index = True | |||
| @@ -0,0 +1,23 @@ | |||
| .. pyad2usb documentation master file, created by | |||
| sphinx-quickstart on Sat Jun 8 14:38:46 2013. | |||
| You can adapt this file completely to your liking, but it should at least | |||
| contain the root `toctree` directive. | |||
| Welcome to pyad2usb's documentation! | |||
| ==================================== | |||
| Contents: | |||
| .. toctree:: | |||
| :maxdepth: 4 | |||
| pyad2usb | |||
| Indices and tables | |||
| ================== | |||
| * :ref:`genindex` | |||
| * :ref:`modindex` | |||
| * :ref:`search` | |||
| @@ -0,0 +1,242 @@ | |||
| @ECHO OFF | |||
| REM Command file for Sphinx documentation | |||
| if "%SPHINXBUILD%" == "" ( | |||
| set SPHINXBUILD=sphinx-build | |||
| ) | |||
| set BUILDDIR=_build | |||
| set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% . | |||
| set I18NSPHINXOPTS=%SPHINXOPTS% . | |||
| if NOT "%PAPER%" == "" ( | |||
| set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS% | |||
| set I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS% | |||
| ) | |||
| if "%1" == "" goto help | |||
| if "%1" == "help" ( | |||
| :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. text to make text files | |||
| echo. man to make manual pages | |||
| echo. texinfo to make Texinfo files | |||
| echo. gettext to make PO message catalogs | |||
| echo. changes to make an overview over all changed/added/deprecated items | |||
| echo. xml to make Docutils-native XML files | |||
| echo. pseudoxml to make pseudoxml-XML files for display purposes | |||
| echo. linkcheck to check all external links for integrity | |||
| echo. doctest to run all doctests embedded in the documentation if enabled | |||
| goto end | |||
| ) | |||
| if "%1" == "clean" ( | |||
| for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i | |||
| del /q /s %BUILDDIR%\* | |||
| goto end | |||
| ) | |||
| %SPHINXBUILD% 2> nul | |||
| if errorlevel 9009 ( | |||
| echo. | |||
| echo.The 'sphinx-build' command was not found. Make sure you have Sphinx | |||
| echo.installed, then set the SPHINXBUILD environment variable to point | |||
| echo.to the full path of the 'sphinx-build' executable. Alternatively you | |||
| echo.may add the Sphinx directory to PATH. | |||
| echo. | |||
| echo.If you don't have Sphinx installed, grab it from | |||
| echo.http://sphinx-doc.org/ | |||
| exit /b 1 | |||
| ) | |||
| if "%1" == "html" ( | |||
| %SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html | |||
| if errorlevel 1 exit /b 1 | |||
| echo. | |||
| echo.Build finished. The HTML pages are in %BUILDDIR%/html. | |||
| goto end | |||
| ) | |||
| if "%1" == "dirhtml" ( | |||
| %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml | |||
| if errorlevel 1 exit /b 1 | |||
| echo. | |||
| echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml. | |||
| goto end | |||
| ) | |||
| if "%1" == "singlehtml" ( | |||
| %SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml | |||
| if errorlevel 1 exit /b 1 | |||
| echo. | |||
| echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml. | |||
| goto end | |||
| ) | |||
| if "%1" == "pickle" ( | |||
| %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle | |||
| if errorlevel 1 exit /b 1 | |||
| echo. | |||
| echo.Build finished; now you can process the pickle files. | |||
| goto end | |||
| ) | |||
| if "%1" == "json" ( | |||
| %SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json | |||
| if errorlevel 1 exit /b 1 | |||
| echo. | |||
| echo.Build finished; now you can process the JSON files. | |||
| goto end | |||
| ) | |||
| if "%1" == "htmlhelp" ( | |||
| %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp | |||
| if errorlevel 1 exit /b 1 | |||
| echo. | |||
| echo.Build finished; now you can run HTML Help Workshop with the ^ | |||
| .hhp project file in %BUILDDIR%/htmlhelp. | |||
| goto end | |||
| ) | |||
| if "%1" == "qthelp" ( | |||
| %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp | |||
| if errorlevel 1 exit /b 1 | |||
| echo. | |||
| echo.Build finished; now you can run "qcollectiongenerator" with the ^ | |||
| .qhcp project file in %BUILDDIR%/qthelp, like this: | |||
| echo.^> qcollectiongenerator %BUILDDIR%\qthelp\pyad2usb.qhcp | |||
| echo.To view the help file: | |||
| echo.^> assistant -collectionFile %BUILDDIR%\qthelp\pyad2usb.ghc | |||
| goto end | |||
| ) | |||
| if "%1" == "devhelp" ( | |||
| %SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp | |||
| if errorlevel 1 exit /b 1 | |||
| echo. | |||
| echo.Build finished. | |||
| goto end | |||
| ) | |||
| if "%1" == "epub" ( | |||
| %SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub | |||
| if errorlevel 1 exit /b 1 | |||
| echo. | |||
| echo.Build finished. The epub file is in %BUILDDIR%/epub. | |||
| goto end | |||
| ) | |||
| if "%1" == "latex" ( | |||
| %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex | |||
| if errorlevel 1 exit /b 1 | |||
| echo. | |||
| echo.Build finished; the LaTeX files are in %BUILDDIR%/latex. | |||
| goto end | |||
| ) | |||
| if "%1" == "latexpdf" ( | |||
| %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex | |||
| cd %BUILDDIR%/latex | |||
| make all-pdf | |||
| cd %BUILDDIR%/.. | |||
| echo. | |||
| echo.Build finished; the PDF files are in %BUILDDIR%/latex. | |||
| goto end | |||
| ) | |||
| if "%1" == "latexpdfja" ( | |||
| %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex | |||
| cd %BUILDDIR%/latex | |||
| make all-pdf-ja | |||
| cd %BUILDDIR%/.. | |||
| echo. | |||
| echo.Build finished; the PDF files are in %BUILDDIR%/latex. | |||
| goto end | |||
| ) | |||
| if "%1" == "text" ( | |||
| %SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text | |||
| if errorlevel 1 exit /b 1 | |||
| echo. | |||
| echo.Build finished. The text files are in %BUILDDIR%/text. | |||
| goto end | |||
| ) | |||
| if "%1" == "man" ( | |||
| %SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man | |||
| if errorlevel 1 exit /b 1 | |||
| echo. | |||
| echo.Build finished. The manual pages are in %BUILDDIR%/man. | |||
| goto end | |||
| ) | |||
| if "%1" == "texinfo" ( | |||
| %SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo | |||
| if errorlevel 1 exit /b 1 | |||
| echo. | |||
| echo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo. | |||
| goto end | |||
| ) | |||
| if "%1" == "gettext" ( | |||
| %SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale | |||
| if errorlevel 1 exit /b 1 | |||
| echo. | |||
| echo.Build finished. The message catalogs are in %BUILDDIR%/locale. | |||
| goto end | |||
| ) | |||
| if "%1" == "changes" ( | |||
| %SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes | |||
| if errorlevel 1 exit /b 1 | |||
| echo. | |||
| echo.The overview file is in %BUILDDIR%/changes. | |||
| goto end | |||
| ) | |||
| if "%1" == "linkcheck" ( | |||
| %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck | |||
| if errorlevel 1 exit /b 1 | |||
| echo. | |||
| echo.Link check complete; look for any errors in the above output ^ | |||
| or in %BUILDDIR%/linkcheck/output.txt. | |||
| goto end | |||
| ) | |||
| if "%1" == "doctest" ( | |||
| %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest | |||
| if errorlevel 1 exit /b 1 | |||
| echo. | |||
| echo.Testing of doctests in the sources finished, look at the ^ | |||
| results in %BUILDDIR%/doctest/output.txt. | |||
| goto end | |||
| ) | |||
| if "%1" == "xml" ( | |||
| %SPHINXBUILD% -b xml %ALLSPHINXOPTS% %BUILDDIR%/xml | |||
| if errorlevel 1 exit /b 1 | |||
| echo. | |||
| echo.Build finished. The XML files are in %BUILDDIR%/xml. | |||
| goto end | |||
| ) | |||
| if "%1" == "pseudoxml" ( | |||
| %SPHINXBUILD% -b pseudoxml %ALLSPHINXOPTS% %BUILDDIR%/pseudoxml | |||
| if errorlevel 1 exit /b 1 | |||
| echo. | |||
| echo.Build finished. The pseudo-XML files are in %BUILDDIR%/pseudoxml. | |||
| goto end | |||
| ) | |||
| :end | |||
| @@ -0,0 +1,7 @@ | |||
| pyad2usb | |||
| ======== | |||
| .. toctree:: | |||
| :maxdepth: 4 | |||
| pyad2usb | |||
| @@ -0,0 +1,19 @@ | |||
| event Package | |||
| ============= | |||
| :mod:`event` Package | |||
| -------------------- | |||
| .. automodule:: pyad2usb.event | |||
| :members: | |||
| :undoc-members: | |||
| :show-inheritance: | |||
| :mod:`event` Module | |||
| ------------------- | |||
| .. automodule:: pyad2usb.event.event | |||
| :members: | |||
| :undoc-members: | |||
| :show-inheritance: | |||
| @@ -0,0 +1,42 @@ | |||
| pyad2usb Package | |||
| ================ | |||
| :mod:`pyad2usb` Package | |||
| ----------------------- | |||
| .. automodule:: pyad2usb.__init__ | |||
| :members: | |||
| :undoc-members: | |||
| :show-inheritance: | |||
| :mod:`ad2usb` Module | |||
| -------------------- | |||
| .. automodule:: pyad2usb.ad2usb | |||
| :members: | |||
| :undoc-members: | |||
| :show-inheritance: | |||
| :mod:`devices` Module | |||
| --------------------- | |||
| .. automodule:: pyad2usb.devices | |||
| :members: | |||
| :undoc-members: | |||
| :show-inheritance: | |||
| :mod:`util` Module | |||
| ------------------ | |||
| .. automodule:: pyad2usb.util | |||
| :members: | |||
| :undoc-members: | |||
| :show-inheritance: | |||
| Subpackages | |||
| ----------- | |||
| .. toctree:: | |||
| pyad2usb.event | |||