@@ -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 | |||||