Browse Source

Updated API docs.

pyserial_fix
Scott Petersen 11 years ago
parent
commit
df6b9d2448
31 changed files with 1896 additions and 2845 deletions
  1. BIN
      docs/_build/doctrees/alarmdecoder.doctree
  2. BIN
      docs/_build/doctrees/alarmdecoder.event.doctree
  3. BIN
      docs/_build/doctrees/environment.pickle
  4. BIN
      docs/_build/doctrees/index.doctree
  5. BIN
      docs/_build/doctrees/modules.doctree
  6. BIN
      docs/_build/doctrees/pyad2.doctree
  7. BIN
      docs/_build/doctrees/pyad2.event.doctree
  8. +1
    -1
      docs/_build/html/.buildinfo
  9. +235
    -75
      docs/_build/html/_modules/alarmdecoder/devices.html
  10. +18
    -17
      docs/_build/html/_modules/alarmdecoder/event/event.html
  11. +106
    -63
      docs/_build/html/_modules/alarmdecoder/messages.html
  12. +16
    -17
      docs/_build/html/_modules/alarmdecoder/util.html
  13. +16
    -12
      docs/_build/html/_modules/alarmdecoder/zonetracking.html
  14. +10
    -11
      docs/_build/html/_modules/index.html
  15. +0
    -671
      docs/_build/html/_modules/pyad2/ad2.html
  16. +0
    -0
      docs/_build/html/_sources/alarmdecoder.event.txt
  17. +0
    -0
      docs/_build/html/_sources/alarmdecoder.txt
  18. +3
    -3
      docs/_build/html/_sources/index.txt
  19. +3
    -3
      docs/_build/html/_sources/modules.txt
  20. +30
    -30
      docs/_build/html/alarmdecoder.event.html
  21. +1225
    -0
      docs/_build/html/alarmdecoder.html
  22. +158
    -341
      docs/_build/html/genindex.html
  23. +24
    -24
      docs/_build/html/index.html
  24. +18
    -18
      docs/_build/html/modules.html
  25. BIN
      docs/_build/html/objects.inv
  26. +16
    -21
      docs/_build/html/py-modindex.html
  27. +0
    -1521
      docs/_build/html/pyad2.html
  28. +5
    -5
      docs/_build/html/search.html
  29. +1
    -1
      docs/_build/html/searchindex.js
  30. +2
    -2
      docs/alarmdecoder.event.rst
  31. +9
    -9
      docs/alarmdecoder.rst

BIN
docs/_build/doctrees/alarmdecoder.doctree View File


BIN
docs/_build/doctrees/alarmdecoder.event.doctree View File


BIN
docs/_build/doctrees/environment.pickle View File


BIN
docs/_build/doctrees/index.doctree View File


BIN
docs/_build/doctrees/modules.doctree View File


BIN
docs/_build/doctrees/pyad2.doctree View File


BIN
docs/_build/doctrees/pyad2.event.doctree View File


+ 1
- 1
docs/_build/html/.buildinfo View File

@@ -1,4 +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: bfabfef1f3b1f181eaa7d666d13e81ec
config: 7e4354096f7282bd97dc9d3ef3f60c52
tags: a205e9ed8462ae86fdd2f73488852ba9

docs/_build/html/_modules/pyad2/devices.html → docs/_build/html/_modules/alarmdecoder/devices.html View File

@@ -6,7 +6,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>pyad2.devices &mdash; pyad2 documentation</title>
<title>alarmdecoder.devices &mdash; alarmdecoder documentation</title>
<link rel="stylesheet" href="../../_static/default.css" type="text/css" />
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
@@ -23,7 +23,7 @@
<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="pyad2 documentation" href="../../index.html" />
<link rel="top" title="alarmdecoder documentation" href="../../index.html" />
<link rel="up" title="Module code" href="../index.html" />
</head>
<body>
@@ -36,7 +36,7 @@
<li class="right" >
<a href="../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../index.html">pyad2 documentation</a> &raquo;</li>
<li><a href="../../index.html">alarmdecoder documentation</a> &raquo;</li>
<li><a href="../index.html" accesskey="U">Module code</a> &raquo;</li>
</ul>
</div>
@@ -46,9 +46,9 @@
<div class="bodywrapper">
<div class="body">
<h1>Source code for pyad2.devices</h1><div class="highlight"><pre>
<h1>Source code for alarmdecoder.devices</h1><div class="highlight"><pre>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd">Contains different types of devices belonging to the AD2 family.</span>
<span class="sd">Contains different types of devices belonging to the Alarm Decoder (AD2) family.</span>

<span class="sd">.. moduleauthor:: Scott Petersen &lt;scott@nutech.com&gt;</span>
<span class="sd">&quot;&quot;&quot;</span>
@@ -65,9 +65,9 @@
<span class="kn">from</span> <span class="nn">.util</span> <span class="kn">import</span> <span class="n">CommError</span><span class="p">,</span> <span class="n">TimeoutError</span><span class="p">,</span> <span class="n">NoDeviceError</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="../../pyad2.html#pyad2.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>
<div class="viewcode-block" id="Device"><a class="viewcode-back" href="../../alarmdecoder.html#alarmdecoder.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">&quot;&quot;&quot;</span>
<span class="sd"> Generic parent device to all AD2 products.</span>
<span class="sd"> Generic parent device to all Alarm Decoder (AD2) products.</span>
<span class="sd"> &quot;&quot;&quot;</span>

<span class="c"># Generic device events</span>
@@ -86,6 +86,20 @@
<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="k">def</span> <span class="nf">__enter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Support for context manager __enter__.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span>

<span class="k">def</span> <span class="nf">__exit__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">type</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">traceback</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Support for context manager __exit__.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>

<span class="k">return</span> <span class="bp">False</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="sd">&quot;&quot;&quot;</span>
@@ -96,7 +110,7 @@
<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="../../pyad2.html#pyad2.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>
<div class="viewcode-block" id="Device.id"><a class="viewcode-back" href="../../alarmdecoder.html#alarmdecoder.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="sd">&quot;&quot;&quot;</span>
<span class="sd"> Sets the device ID.</span>

@@ -105,7 +119,7 @@
<span class="sd"> &quot;&quot;&quot;</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="../../pyad2.html#pyad2.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>
<div class="viewcode-block" id="Device.is_reader_alive"><a class="viewcode-back" href="../../alarmdecoder.html#alarmdecoder.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">&quot;&quot;&quot;</span>
<span class="sd"> Indicates whether or not the reader thread is alive.</span>

@@ -113,13 +127,13 @@
<span class="sd"> &quot;&quot;&quot;</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="../../pyad2.html#pyad2.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>
<div class="viewcode-block" id="Device.stop_reader"><a class="viewcode-back" href="../../alarmdecoder.html#alarmdecoder.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">&quot;&quot;&quot;</span>
<span class="sd"> Stops the reader thread.</span>
<span class="sd"> &quot;&quot;&quot;</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.close"><a class="viewcode-back" href="../../pyad2.html#pyad2.devices.Device.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>
<div class="viewcode-block" id="Device.close"><a class="viewcode-back" href="../../alarmdecoder.html#alarmdecoder.devices.Device.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">&quot;&quot;&quot;</span>
<span class="sd"> Closes the device.</span>
<span class="sd"> &quot;&quot;&quot;</span>
@@ -133,7 +147,7 @@

<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="Device.ReadThread"><a class="viewcode-back" href="../../pyad2.html#pyad2.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>
<div class="viewcode-block" id="Device.ReadThread"><a class="viewcode-back" href="../../alarmdecoder.html#alarmdecoder.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">&quot;&quot;&quot;</span>
<span class="sd"> Reader thread which processes messages from the device.</span>
<span class="sd"> &quot;&quot;&quot;</span>
@@ -152,13 +166,13 @@
<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="../../pyad2.html#pyad2.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>
<div class="viewcode-block" id="Device.ReadThread.stop"><a class="viewcode-back" href="../../alarmdecoder.html#alarmdecoder.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">&quot;&quot;&quot;</span>
<span class="sd"> Stops the running thread.</span>
<span class="sd"> &quot;&quot;&quot;</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="../../pyad2.html#pyad2.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>
<div class="viewcode-block" id="Device.ReadThread.run"><a class="viewcode-back" href="../../alarmdecoder.html#alarmdecoder.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">&quot;&quot;&quot;</span>
<span class="sd"> The actual read process.</span>
<span class="sd"> &quot;&quot;&quot;</span>
@@ -178,7 +192,7 @@

<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="../../pyad2.html#pyad2.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>
<div class="viewcode-block" id="USBDevice"><a class="viewcode-back" href="../../alarmdecoder.html#alarmdecoder.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">&quot;&quot;&quot;</span>
<span class="sd"> AD2USB device exposed with PyFTDI&#39;s interface.</span>
<span class="sd"> &quot;&quot;&quot;</span>
@@ -191,23 +205,84 @@
<span class="n">BAUDRATE</span> <span class="o">=</span> <span class="mi">115200</span>
<span class="sd">&quot;&quot;&quot;Default baudrate for AD2USB devices.&quot;&quot;&quot;</span>

<span class="nd">@staticmethod</span>
<div class="viewcode-block" id="USBDevice.find_all"><a class="viewcode-back" href="../../pyad2.html#pyad2.devices.USBDevice.find_all">[docs]</a> <span class="k">def</span> <span class="nf">find_all</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="USBDevice.find_all"><a class="viewcode-back" href="../../alarmdecoder.html#alarmdecoder.devices.USBDevice.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="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="sd">&quot;&quot;&quot;</span>
<span class="sd"> Returns all FTDI devices matching our vendor and product IDs.</span>

<span class="sd"> :returns: list of devices</span>
<span class="sd"> :raises: CommError</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">devices</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">cls</span><span class="o">.</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="n">cls</span><span class="o">.</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">vid</span><span class="p">,</span> <span class="n">pid</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">CommError</span><span class="p">(</span><span class="s">&#39;Error enumerating AD2USB devices: {0}&#39;</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="n">err</span><span class="p">)</span>

<span class="k">return</span> <span class="n">devices</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="USBDevice.devices"><a class="viewcode-back" href="../../alarmdecoder.html#alarmdecoder.devices.USBDevice.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">&quot;&quot;&quot;</span>
<span class="sd"> Returns a cached list of AD2USB devices located on the system.</span>

<span class="sd"> :returns: cached list of devices found.</span>
<span class="sd"> &quot;&quot;&quot;</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="USBDevice.find"><a class="viewcode-back" href="../../alarmdecoder.html#alarmdecoder.devices.USBDevice.find">[docs]</a> <span class="k">def</span> <span class="nf">find</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">&quot;&quot;&quot;</span>
<span class="sd"> Factory method that returns the requested USBDevice device, or the first device.</span>

<span class="sd"> :param device: Tuple describing the USB device to open, as returned by find_all().</span>
<span class="sd"> :type device: tuple</span>

<span class="sd"> :returns: USBDevice object utilizing the specified device.</span>
<span class="sd"> :raises: NoDeviceError</span>
<span class="sd"> &quot;&quot;&quot;</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">NoDeviceError</span><span class="p">(</span><span class="s">&#39;No AD2USB devices present.&#39;</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="k">return</span> <span class="n">USBDevice</span><span class="p">(</span><span class="n">interface</span><span class="o">=</span><span class="n">sernum</span><span class="p">)</span>
</div>
<span class="nd">@classmethod</span>
<div class="viewcode-block" id="USBDevice.start_detection"><a class="viewcode-back" href="../../alarmdecoder.html#alarmdecoder.devices.USBDevice.start_detection">[docs]</a> <span class="k">def</span> <span class="nf">start_detection</span><span class="p">(</span><span class="n">cls</span><span class="p">,</span> <span class="n">on_attached</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">on_detached</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Starts the device detection thread.</span>

<span class="sd"> :param on_attached: function to be called when a device is attached.</span>
<span class="sd"> :type on_attached: function</span>
<span class="sd"> :param on_detached: function to be called when a device is detached.</span>
<span class="sd"> :type on_detached: function</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">cls</span><span class="o">.</span><span class="n">__detect_thread</span> <span class="o">=</span> <span class="n">USBDevice</span><span class="o">.</span><span class="n">DetectThread</span><span class="p">(</span><span class="n">on_attached</span><span class="p">,</span> <span class="n">on_detached</span><span class="p">)</span>

<span class="n">cls</span><span class="o">.</span><span class="n">find_all</span><span class="p">()</span>

<span class="n">cls</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>
<span class="nd">@classmethod</span>
<div class="viewcode-block" id="USBDevice.stop_detection"><a class="viewcode-back" href="../../alarmdecoder.html#alarmdecoder.devices.USBDevice.stop_detection">[docs]</a> <span class="k">def</span> <span class="nf">stop_detection</span><span class="p">(</span><span class="n">cls</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Stops the device detection thread.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">cls</span><span class="o">.</span><span class="n">__detect_thread</span><span class="o">.</span><span class="n">stop</span><span class="p">()</span>

<span class="k">except</span><span class="p">:</span>
<span class="k">pass</span>
</div>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">interface</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
@@ -216,18 +291,21 @@

<span class="sd"> :returns: the interface used to connect to the device.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</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">_endpoint</span><span class="p">)</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_interface</span>

<span class="nd">@interface.setter</span>
<div class="viewcode-block" id="USBDevice.interface"><a class="viewcode-back" href="../../pyad2.html#pyad2.devices.USBDevice.interface">[docs]</a> <span class="k">def</span> <span class="nf">interface</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<div class="viewcode-block" id="USBDevice.interface"><a class="viewcode-back" href="../../alarmdecoder.html#alarmdecoder.devices.USBDevice.interface">[docs]</a> <span class="k">def</span> <span class="nf">interface</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="sd">&quot;&quot;&quot;</span>
<span class="sd"> Sets the interface used to connect to the device.</span>

<span class="sd"> :param value: Tuple containing the serial number and endpoint number to use.</span>
<span class="sd"> :type value: tuple</span>
<span class="sd"> :param value: May specify either the serial number or the device index.</span>
<span class="sd"> :type value: str or int</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_serial_number</span> <span class="o">=</span> <span class="n">value</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_endpoint</span> <span class="o">=</span> <span class="n">value</span><span class="p">[</span><span class="mi">1</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">value</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="nb">int</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_device_number</span> <span class="o">=</span> <span class="n">value</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_serial_number</span> <span class="o">=</span> <span class="n">value</span>
</div>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">serial_number</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
@@ -240,7 +318,7 @@
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_serial_number</span>

<span class="nd">@serial_number.setter</span>
<div class="viewcode-block" id="USBDevice.serial_number"><a class="viewcode-back" href="../../pyad2.html#pyad2.devices.USBDevice.serial_number">[docs]</a> <span class="k">def</span> <span class="nf">serial_number</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<div class="viewcode-block" id="USBDevice.serial_number"><a class="viewcode-back" href="../../alarmdecoder.html#alarmdecoder.devices.USBDevice.serial_number">[docs]</a> <span class="k">def</span> <span class="nf">serial_number</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="sd">&quot;&quot;&quot;</span>
<span class="sd"> Sets the serial number of the device.</span>

@@ -259,7 +337,7 @@
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_description</span>

<span class="nd">@description.setter</span>
<div class="viewcode-block" id="USBDevice.description"><a class="viewcode-back" href="../../pyad2.html#pyad2.devices.USBDevice.description">[docs]</a> <span class="k">def</span> <span class="nf">description</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<div class="viewcode-block" id="USBDevice.description"><a class="viewcode-back" href="../../alarmdecoder.html#alarmdecoder.devices.USBDevice.description">[docs]</a> <span class="k">def</span> <span class="nf">description</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="sd">&quot;&quot;&quot;</span>
<span class="sd"> Sets the description of the device.</span>

@@ -268,24 +346,26 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_description</span> <span class="o">=</span> <span class="n">value</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="p">(</span><span class="bp">None</span><span class="p">,</span> <span class="mi">0</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">interface</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Constructor</span>

<span class="sd"> :param interface: Tuple containing the device number and endpoint number to use.</span>
<span class="sd"> :type interface: tuple</span>
<span class="sd"> :param interface: May specify either the serial number or the device index.</span>
<span class="sd"> :type interface: str or int</span>
<span class="sd"> &quot;&quot;&quot;</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">_serial_number</span> <span class="o">=</span> <span class="n">interface</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_endpoint</span> <span class="o">=</span> <span class="n">interface</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>

<span class="bp">self</span><span class="o">.</span><span class="n">_device_number</span> <span class="o">=</span> <span class="mi">0</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">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">USBDevice</span><span class="o">.</span><span class="n">FTDI_VENDOR_ID</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_product_id</span> <span class="o">=</span> <span class="n">USBDevice</span><span class="o">.</span><span class="n">FTDI_PRODUCT_ID</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_device_number</span> <span class="o">=</span> <span class="bp">None</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_endpoint</span> <span class="o">=</span> <span class="mi">0</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_description</span> <span class="o">=</span> <span class="bp">None</span>

<div class="viewcode-block" id="USBDevice.open"><a class="viewcode-back" href="../../pyad2.html#pyad2.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">no_reader_thread</span><span class="o">=</span><span class="bp">False</span><span class="p">):</span>
<div class="viewcode-block" id="USBDevice.open"><a class="viewcode-back" href="../../alarmdecoder.html#alarmdecoder.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">no_reader_thread</span><span class="o">=</span><span class="bp">False</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Opens the device.</span>

@@ -311,32 +391,37 @@

<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">&#39;USB {0}:{1}&#39;</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">if</span> <span class="ow">not</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">_serial_number</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_serial_number</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="bp">self</span><span class="o">.</span><span class="n">_serial_number</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">NoDeviceError</span><span class="p">(</span><span class="s">&#39;Error opening device: {0}&#39;</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="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="bp">self</span><span class="o">.</span><span class="n">on_open</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>

<span class="bp">self</span><span class="o">.</span><span class="n">on_open</span><span class="p">()</span>
<span class="k">return</span> <span class="bp">self</span>
</div>
<div class="viewcode-block" id="USBDevice.close"><a class="viewcode-back" href="../../pyad2.html#pyad2.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>
<div class="viewcode-block" id="USBDevice.close"><a class="viewcode-back" href="../../alarmdecoder.html#alarmdecoder.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">&quot;&quot;&quot;</span>
<span class="sd"> Closes the device.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">try</span><span class="p">:</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="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">_device_number</span><span class="p">)</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="p">)</span>

<span class="k">except</span><span class="p">:</span>
<span class="k">pass</span>
</div>
<div class="viewcode-block" id="USBDevice.write"><a class="viewcode-back" href="../../pyad2.html#pyad2.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>
<div class="viewcode-block" id="USBDevice.write"><a class="viewcode-back" href="../../alarmdecoder.html#alarmdecoder.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">&quot;&quot;&quot;</span>
<span class="sd"> Writes data to the device.</span>

@@ -348,12 +433,12 @@
<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="bp">self</span><span class="o">.</span><span class="n">on_write</span><span class="p">(</span><span class="n">data</span><span class="o">=</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">CommError</span><span class="p">(</span><span class="s">&#39;Error writing to device: {0}&#39;</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="n">err</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="USBDevice.read"><a class="viewcode-back" href="../../pyad2.html#pyad2.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>
<div class="viewcode-block" id="USBDevice.read"><a class="viewcode-back" href="../../alarmdecoder.html#alarmdecoder.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">&quot;&quot;&quot;</span>
<span class="sd"> Reads a single character from the device.</span>

@@ -370,7 +455,7 @@

<span class="k">return</span> <span class="n">ret</span>
</div>
<div class="viewcode-block" id="USBDevice.read_line"><a class="viewcode-back" href="../../pyad2.html#pyad2.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="n">purge_buffer</span><span class="o">=</span><span class="bp">False</span><span class="p">):</span>
<div class="viewcode-block" id="USBDevice.read_line"><a class="viewcode-back" href="../../alarmdecoder.html#alarmdecoder.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="n">purge_buffer</span><span class="o">=</span><span class="bp">False</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Reads a line from the device.</span>

@@ -429,7 +514,7 @@
<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">&#39;&#39;</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="bp">self</span><span class="o">.</span><span class="n">on_read</span><span class="p">(</span><span class="n">data</span><span class="o">=</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>
@@ -438,9 +523,76 @@
<span class="k">raise</span> <span class="n">TimeoutError</span><span class="p">(</span><span class="s">&#39;Timeout while waiting for line terminator.&#39;</span><span class="p">)</span>

<span class="k">return</span> <span class="n">ret</span>
</div>
<span class="k">def</span> <span class="nf">_get_serial_number</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Retrieves the FTDI device serial number.</span>

</div></div>
<div class="viewcode-block" id="SerialDevice"><a class="viewcode-back" href="../../pyad2.html#pyad2.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"> :returns: string containing the device serial number.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">usb</span><span class="o">.</span><span class="n">util</span><span class="o">.</span><span class="n">get_string</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="p">,</span> <span class="mi">64</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">iSerialNumber</span><span class="p">)</span>

<div class="viewcode-block" id="USBDevice.DetectThread"><a class="viewcode-back" href="../../alarmdecoder.html#alarmdecoder.devices.USBDevice.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">&quot;&quot;&quot;</span>
<span class="sd"> Thread that handles detection of added/removed devices.</span>
<span class="sd"> &quot;&quot;&quot;</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">&#39;Called when an AD2USB device has been detected.&#39;</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">&#39;Called when an AD2USB device has been removed.&#39;</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">on_attached</span><span class="o">=</span><span class="bp">None</span><span class="p">,</span> <span class="n">on_detached</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Constructor</span>

<span class="sd"> :param on_attached: Function to call when a device is attached.</span>
<span class="sd"> :type on_attached: function</span>
<span class="sd"> :param on_detached: Function to call when a device is detached.</span>
<span class="sd"> :type on_detached: function</span>
<span class="sd"> &quot;&quot;&quot;</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="k">if</span> <span class="n">on_attached</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">on_attached</span>

<span class="k">if</span> <span class="n">on_detached</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">on_detached</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="USBDevice.DetectThread.stop"><a class="viewcode-back" href="../../alarmdecoder.html#alarmdecoder.devices.USBDevice.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">&quot;&quot;&quot;</span>
<span class="sd"> Stops the thread.</span>
<span class="sd"> &quot;&quot;&quot;</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="USBDevice.DetectThread.run"><a class="viewcode-back" href="../../alarmdecoder.html#alarmdecoder.devices.USBDevice.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">&quot;&quot;&quot;</span>
<span class="sd"> The actual detection process.</span>
<span class="sd"> &quot;&quot;&quot;</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">current_devices</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">USBDevice</span><span class="o">.</span><span class="n">find_all</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">on_attached</span><span class="p">(</span><span class="n">device</span><span class="o">=</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">on_detached</span><span class="p">(</span><span class="n">device</span><span class="o">=</span><span class="n">d</span><span class="p">)</span>

<span class="k">except</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="SerialDevice"><a class="viewcode-back" href="../../alarmdecoder.html#alarmdecoder.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">&quot;&quot;&quot;</span>
<span class="sd"> AD2USB or AD2SERIAL device exposed with the pyserial interface.</span>
<span class="sd"> &quot;&quot;&quot;</span>
@@ -450,7 +602,7 @@
<span class="sd">&quot;&quot;&quot;Default baudrate for Serial devices.&quot;&quot;&quot;</span>

<span class="nd">@staticmethod</span>
<div class="viewcode-block" id="SerialDevice.find_all"><a class="viewcode-back" href="../../pyad2.html#pyad2.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>
<div class="viewcode-block" id="SerialDevice.find_all"><a class="viewcode-back" href="../../alarmdecoder.html#alarmdecoder.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">&quot;&quot;&quot;</span>
<span class="sd"> Returns all serial ports present.</span>

@@ -483,7 +635,7 @@
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_port</span>

<span class="nd">@interface.setter</span>
<div class="viewcode-block" id="SerialDevice.interface"><a class="viewcode-back" href="../../pyad2.html#pyad2.devices.SerialDevice.interface">[docs]</a> <span class="k">def</span> <span class="nf">interface</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<div class="viewcode-block" id="SerialDevice.interface"><a class="viewcode-back" href="../../alarmdecoder.html#alarmdecoder.devices.SerialDevice.interface">[docs]</a> <span class="k">def</span> <span class="nf">interface</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="sd">&quot;&quot;&quot;</span>
<span class="sd"> Sets the interface used to connect to the device.</span>

@@ -505,7 +657,7 @@
<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="../../pyad2.html#pyad2.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">no_reader_thread</span><span class="o">=</span><span class="bp">False</span><span class="p">):</span>
<div class="viewcode-block" id="SerialDevice.open"><a class="viewcode-back" href="../../alarmdecoder.html#alarmdecoder.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">no_reader_thread</span><span class="o">=</span><span class="bp">False</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Opens the device.</span>

@@ -544,8 +696,10 @@

<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="k">return</span> <span class="bp">self</span>
</div>
<div class="viewcode-block" id="SerialDevice.close"><a class="viewcode-back" href="../../pyad2.html#pyad2.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>
<div class="viewcode-block" id="SerialDevice.close"><a class="viewcode-back" href="../../alarmdecoder.html#alarmdecoder.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">&quot;&quot;&quot;</span>
<span class="sd"> Closes the device.</span>
<span class="sd"> &quot;&quot;&quot;</span>
@@ -555,7 +709,7 @@
<span class="k">except</span><span class="p">:</span>
<span class="k">pass</span>
</div>
<div class="viewcode-block" id="SerialDevice.write"><a class="viewcode-back" href="../../pyad2.html#pyad2.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>
<div class="viewcode-block" id="SerialDevice.write"><a class="viewcode-back" href="../../alarmdecoder.html#alarmdecoder.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">&quot;&quot;&quot;</span>
<span class="sd"> Writes data to the device.</span>

@@ -574,9 +728,9 @@
<span class="k">raise</span> <span class="n">CommError</span><span class="p">(</span><span class="s">&#39;Error writing to device.&#39;</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">on_write</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="o">=</span><span class="n">data</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="SerialDevice.read"><a class="viewcode-back" href="../../pyad2.html#pyad2.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>
<div class="viewcode-block" id="SerialDevice.read"><a class="viewcode-back" href="../../alarmdecoder.html#alarmdecoder.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">&quot;&quot;&quot;</span>
<span class="sd"> Reads a single character from the device.</span>

@@ -593,7 +747,7 @@

<span class="k">return</span> <span class="n">ret</span>
</div>
<div class="viewcode-block" id="SerialDevice.read_line"><a class="viewcode-back" href="../../pyad2.html#pyad2.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="n">purge_buffer</span><span class="o">=</span><span class="bp">False</span><span class="p">):</span>
<div class="viewcode-block" id="SerialDevice.read_line"><a class="viewcode-back" href="../../alarmdecoder.html#alarmdecoder.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="n">purge_buffer</span><span class="o">=</span><span class="bp">False</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Reads a line from the device.</span>

@@ -648,7 +802,7 @@
<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">&#39;&#39;</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="bp">self</span><span class="o">.</span><span class="n">on_read</span><span class="p">(</span><span class="n">data</span><span class="o">=</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>
@@ -658,10 +812,10 @@

<span class="k">return</span> <span class="n">ret</span>
</div></div>
<div class="viewcode-block" id="SocketDevice"><a class="viewcode-back" href="../../pyad2.html#pyad2.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>
<div class="viewcode-block" id="SocketDevice"><a class="viewcode-back" href="../../alarmdecoder.html#alarmdecoder.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">&quot;&quot;&quot;</span>
<span class="sd"> Device that supports communication with an AD2 that is exposed via ser2sock or another</span>
<span class="sd"> Serial to IP interface.</span>
<span class="sd"> Device that supports communication with an Alarm Decoder (AD2) that is</span>
<span class="sd"> exposed via ser2sock or another Serial to IP interface.</span>
<span class="sd"> &quot;&quot;&quot;</span>

<span class="nd">@property</span>
@@ -674,11 +828,11 @@
<span class="k">return</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="nd">@interface.setter</span>
<div class="viewcode-block" id="SocketDevice.interface"><a class="viewcode-back" href="../../pyad2.html#pyad2.devices.SocketDevice.interface">[docs]</a> <span class="k">def</span> <span class="nf">interface</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<div class="viewcode-block" id="SocketDevice.interface"><a class="viewcode-back" href="../../alarmdecoder.html#alarmdecoder.devices.SocketDevice.interface">[docs]</a> <span class="k">def</span> <span class="nf">interface</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="sd">&quot;&quot;&quot;</span>
<span class="sd"> Sets the interface used to connect to the device.</span>

<span class="sd"> :param value: Tuple containing the device number and endpoint number to use.</span>
<span class="sd"> :param value: Tuple containing the host and port to use.</span>
<span class="sd"> :type value: tuple</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_host</span> <span class="o">=</span> <span class="n">value</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
@@ -694,7 +848,7 @@
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_use_ssl</span>

<span class="nd">@ssl.setter</span>
<div class="viewcode-block" id="SocketDevice.ssl"><a class="viewcode-back" href="../../pyad2.html#pyad2.devices.SocketDevice.ssl">[docs]</a> <span class="k">def</span> <span class="nf">ssl</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<div class="viewcode-block" id="SocketDevice.ssl"><a class="viewcode-back" href="../../alarmdecoder.html#alarmdecoder.devices.SocketDevice.ssl">[docs]</a> <span class="k">def</span> <span class="nf">ssl</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="sd">&quot;&quot;&quot;</span>
<span class="sd"> Sets whether or not SSL communication is in use.</span>

@@ -713,7 +867,7 @@
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ssl_certificate</span>

<span class="nd">@ssl_certificate.setter</span>
<div class="viewcode-block" id="SocketDevice.ssl_certificate"><a class="viewcode-back" href="../../pyad2.html#pyad2.devices.SocketDevice.ssl_certificate">[docs]</a> <span class="k">def</span> <span class="nf">ssl_certificate</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<div class="viewcode-block" id="SocketDevice.ssl_certificate"><a class="viewcode-back" href="../../alarmdecoder.html#alarmdecoder.devices.SocketDevice.ssl_certificate">[docs]</a> <span class="k">def</span> <span class="nf">ssl_certificate</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="sd">&quot;&quot;&quot;</span>
<span class="sd"> Sets the SSL client certificate to use for authentication.</span>

@@ -732,7 +886,7 @@
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ssl_key</span>

<span class="nd">@ssl_key.setter</span>
<div class="viewcode-block" id="SocketDevice.ssl_key"><a class="viewcode-back" href="../../pyad2.html#pyad2.devices.SocketDevice.ssl_key">[docs]</a> <span class="k">def</span> <span class="nf">ssl_key</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<div class="viewcode-block" id="SocketDevice.ssl_key"><a class="viewcode-back" href="../../alarmdecoder.html#alarmdecoder.devices.SocketDevice.ssl_key">[docs]</a> <span class="k">def</span> <span class="nf">ssl_key</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="sd">&quot;&quot;&quot;</span>
<span class="sd"> Sets the SSL client certificate key to use for authentication.</span>

@@ -751,7 +905,7 @@
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_ssl_ca</span>

<span class="nd">@ssl_ca.setter</span>
<div class="viewcode-block" id="SocketDevice.ssl_ca"><a class="viewcode-back" href="../../pyad2.html#pyad2.devices.SocketDevice.ssl_ca">[docs]</a> <span class="k">def</span> <span class="nf">ssl_ca</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<div class="viewcode-block" id="SocketDevice.ssl_ca"><a class="viewcode-back" href="../../alarmdecoder.html#alarmdecoder.devices.SocketDevice.ssl_ca">[docs]</a> <span class="k">def</span> <span class="nf">ssl_ca</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="sd">&quot;&quot;&quot;</span>
<span class="sd"> Sets the SSL Certificate Authority certificate used for authentication.</span>

@@ -775,7 +929,7 @@
<span class="bp">self</span><span class="o">.</span><span class="n">_ssl_key</span> <span class="o">=</span> <span class="bp">None</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_ssl_ca</span> <span class="o">=</span> <span class="bp">None</span>

<div class="viewcode-block" id="SocketDevice.open"><a class="viewcode-back" href="../../pyad2.html#pyad2.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">no_reader_thread</span><span class="o">=</span><span class="bp">False</span><span class="p">):</span>
<div class="viewcode-block" id="SocketDevice.open"><a class="viewcode-back" href="../../alarmdecoder.html#alarmdecoder.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">no_reader_thread</span><span class="o">=</span><span class="bp">False</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Opens the device.</span>

@@ -795,6 +949,9 @@

<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="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_use_ssl</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">do_handshake</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">&#39;{0}:{1}&#39;</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>
@@ -802,19 +959,22 @@

<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="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="k">return</span> <span class="bp">self</span>
</div>
<div class="viewcode-block" id="SocketDevice.close"><a class="viewcode-back" href="../../pyad2.html#pyad2.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>
<div class="viewcode-block" id="SocketDevice.close"><a class="viewcode-back" href="../../alarmdecoder.html#alarmdecoder.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">&quot;&quot;&quot;</span>
<span class="sd"> Closes the device.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">try</span><span class="p">:</span>
<span class="c"># TODO: Find a way to speed up this shutdown.</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ssl</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="k">else</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>

@@ -823,7 +983,7 @@
<span class="k">except</span> <span class="ne">Exception</span><span class="p">,</span> <span class="n">ex</span><span class="p">:</span>
<span class="k">pass</span>
</div>
<div class="viewcode-block" id="SocketDevice.write"><a class="viewcode-back" href="../../pyad2.html#pyad2.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>
<div class="viewcode-block" id="SocketDevice.write"><a class="viewcode-back" href="../../alarmdecoder.html#alarmdecoder.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">&quot;&quot;&quot;</span>
<span class="sd"> Writes data to the device.</span>

@@ -841,14 +1001,14 @@
<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">CommError</span><span class="p">(</span><span class="s">&#39;Error writing to device.&#39;</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="bp">self</span><span class="o">.</span><span class="n">on_write</span><span class="p">(</span><span class="n">data</span><span class="o">=</span><span class="n">data</span><span class="p">)</span>

<span class="k">except</span> <span class="p">(</span><span class="n">SSL</span><span class="o">.</span><span class="n">Error</span><span class="p">,</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">CommError</span><span class="p">(</span><span class="s">&#39;Error writing to device.&#39;</span><span class="p">,</span> <span class="n">err</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="../../pyad2.html#pyad2.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>
<div class="viewcode-block" id="SocketDevice.read"><a class="viewcode-back" href="../../alarmdecoder.html#alarmdecoder.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">&quot;&quot;&quot;</span>
<span class="sd"> Reads a single character from the device.</span>

@@ -865,7 +1025,7 @@

<span class="k">return</span> <span class="n">data</span>
</div>
<div class="viewcode-block" id="SocketDevice.read_line"><a class="viewcode-back" href="../../pyad2.html#pyad2.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="n">purge_buffer</span><span class="o">=</span><span class="bp">False</span><span class="p">):</span>
<div class="viewcode-block" id="SocketDevice.read_line"><a class="viewcode-back" href="../../alarmdecoder.html#alarmdecoder.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="n">purge_buffer</span><span class="o">=</span><span class="bp">False</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Reads a line from the device.</span>

@@ -924,7 +1084,7 @@
<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">&#39;&#39;</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="bp">self</span><span class="o">.</span><span class="n">on_read</span><span class="p">(</span><span class="n">data</span><span class="o">=</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>
@@ -996,12 +1156,12 @@
<li class="right" >
<a href="../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../index.html">pyad2 documentation</a> &raquo;</li>
<li><a href="../../index.html">alarmdecoder documentation</a> &raquo;</li>
<li><a href="../index.html" >Module code</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2013, Author.
&copy; Copyright 2013, Nu Tech Software Solutions, Inc..
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2b1.
</div>
</body>

docs/_build/html/_modules/pyad2/event/event.html → docs/_build/html/_modules/alarmdecoder/event/event.html View File

@@ -6,7 +6,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>pyad2.event.event &mdash; pyad2 documentation</title>
<title>alarmdecoder.event.event &mdash; alarmdecoder documentation</title>
<link rel="stylesheet" href="../../../_static/default.css" type="text/css" />
<link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" />
@@ -23,7 +23,7 @@
<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="pyad2 documentation" href="../../../index.html" />
<link rel="top" title="alarmdecoder documentation" href="../../../index.html" />
<link rel="up" title="Module code" href="../../index.html" />
</head>
<body>
@@ -36,7 +36,7 @@
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">pyad2 documentation</a> &raquo;</li>
<li><a href="../../../index.html">alarmdecoder documentation</a> &raquo;</li>
<li><a href="../../index.html" accesskey="U">Module code</a> &raquo;</li>
</ul>
</div>
@@ -46,18 +46,19 @@
<div class="bodywrapper">
<div class="body">
<h1>Source code for pyad2.event.event</h1><div class="highlight"><pre>
<h1>Source code for alarmdecoder.event.event</h1><div class="highlight"><pre>
<span class="c"># event.py (improved)</span>
<span class="c">#</span>

<span class="c"># Based on pyevent originally found at http://www.emptypage.jp/notes/pyevent.en.html</span>
<span class="c"># </span>
<span class="c">#</span>
<span class="c"># License: https://creativecommons.org/licenses/by/2.1/jp/deed.en</span>
<span class="c">#</span>
<span class="c"># Changes:</span>
<span class="c"># Added type check in fire()</span>
<span class="c"># * Added type check in fire()</span>
<span class="c"># * Removed earg from fire() and added support for args/kwargs.</span>

<div class="viewcode-block" id="Event"><a class="viewcode-back" href="../../../pyad2.event.html#pyad2.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>
<div class="viewcode-block" id="Event"><a class="viewcode-back" href="../../../alarmdecoder.event.html#alarmdecoder.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>
@@ -71,7 +72,7 @@
<span class="k">pass</span>

</div>
<div class="viewcode-block" id="EventHandler"><a class="viewcode-back" href="../../../pyad2.event.html#pyad2.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>
<div class="viewcode-block" id="EventHandler"><a class="viewcode-back" href="../../../alarmdecoder.event.html#alarmdecoder.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>

@@ -88,7 +89,7 @@
<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="../../../pyad2.event.html#pyad2.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>
<div class="viewcode-block" id="EventHandler.add"><a class="viewcode-back" href="../../../alarmdecoder.event.html#alarmdecoder.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">&quot;&quot;&quot;Add new event handler function.</span>

@@ -99,7 +100,7 @@
<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="../../../pyad2.event.html#pyad2.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>
<div class="viewcode-block" id="EventHandler.remove"><a class="viewcode-back" href="../../../alarmdecoder.event.html#alarmdecoder.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">&quot;&quot;&quot;Remove existing event handler function.</span>

@@ -109,19 +110,19 @@
<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="../../../pyad2.event.html#pyad2.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>
<div class="viewcode-block" id="EventHandler.fire"><a class="viewcode-back" href="../../../alarmdecoder.event.html#alarmdecoder.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="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>

<span class="sd">&quot;&quot;&quot;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"> You can call EventHandler object itself like e(*args, **kwargs) instead of</span>
<span class="sd"> e.fire(*args, **kwargs).</span>
<span class="sd"> &quot;&quot;&quot;</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="n">func</span><span class="o">.</span><span class="n">fire</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</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>
<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="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</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>
@@ -159,12 +160,12 @@
<li class="right" >
<a href="../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../../index.html">pyad2 documentation</a> &raquo;</li>
<li><a href="../../../index.html">alarmdecoder documentation</a> &raquo;</li>
<li><a href="../../index.html" >Module code</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2013, Author.
&copy; Copyright 2013, Nu Tech Software Solutions, Inc..
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2b1.
</div>
</body>

docs/_build/html/_modules/pyad2/messages.html → docs/_build/html/_modules/alarmdecoder/messages.html View File

@@ -6,7 +6,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>pyad2.messages &mdash; pyad2 documentation</title>
<title>alarmdecoder.messages &mdash; alarmdecoder documentation</title>
<link rel="stylesheet" href="../../_static/default.css" type="text/css" />
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
@@ -23,7 +23,7 @@
<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="pyad2 documentation" href="../../index.html" />
<link rel="top" title="alarmdecoder documentation" href="../../index.html" />
<link rel="up" title="Module code" href="../index.html" />
</head>
<body>
@@ -36,7 +36,7 @@
<li class="right" >
<a href="../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../index.html">pyad2 documentation</a> &raquo;</li>
<li><a href="../../index.html">alarmdecoder documentation</a> &raquo;</li>
<li><a href="../index.html" accesskey="U">Module code</a> &raquo;</li>
</ul>
</div>
@@ -46,9 +46,10 @@
<div class="bodywrapper">
<div class="body">
<h1>Source code for pyad2.messages</h1><div class="highlight"><pre>
<h1>Source code for alarmdecoder.messages</h1><div class="highlight"><pre>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd">Message representations received from the panel through the AD2 devices.</span>
<span class="sd">Message representations received from the panel through the Alarm Decoder (AD2)</span>
<span class="sd">devices.</span>

<span class="sd">.. moduleauthor:: Scott Petersen &lt;scott@nutech.com&gt;</span>
<span class="sd">&quot;&quot;&quot;</span>
@@ -57,15 +58,19 @@

<span class="kn">from</span> <span class="nn">.util</span> <span class="kn">import</span> <span class="n">InvalidMessageError</span>

<div class="viewcode-block" id="BaseMessage"><a class="viewcode-back" href="../../pyad2.html#pyad2.messages.BaseMessage">[docs]</a><span class="k">class</span> <span class="nc">BaseMessage</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<div class="viewcode-block" id="BaseMessage"><a class="viewcode-back" href="../../alarmdecoder.html#alarmdecoder.messages.BaseMessage">[docs]</a><span class="k">class</span> <span class="nc">BaseMessage</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Base class for messages.</span>
<span class="sd"> &quot;&quot;&quot;</span>

<span class="n">raw</span> <span class="o">=</span> <span class="bp">None</span>
<span class="sd">&quot;&quot;&quot;The raw message text&quot;&quot;&quot;</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="sd">&quot;&quot;&quot;</span>
<span class="sd"> Constructor</span>
<span class="sd"> &quot;&quot;&quot;</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">pass</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">&quot;&quot;&quot;</span>
@@ -73,11 +78,56 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">raw</span>
</div>
<div class="viewcode-block" id="Message"><a class="viewcode-back" href="../../pyad2.html#pyad2.messages.Message">[docs]</a><span class="k">class</span> <span class="nc">Message</span><span class="p">(</span><span class="n">BaseMessage</span><span class="p">):</span>
<div class="viewcode-block" id="Message"><a class="viewcode-back" href="../../alarmdecoder.html#alarmdecoder.messages.Message">[docs]</a><span class="k">class</span> <span class="nc">Message</span><span class="p">(</span><span class="n">BaseMessage</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Represents a message from the alarm panel.</span>
<span class="sd"> &quot;&quot;&quot;</span>

<span class="n">ready</span> <span class="o">=</span> <span class="bp">False</span>
<span class="sd">&quot;&quot;&quot;Indicates whether or not the panel is in a ready state&quot;&quot;&quot;</span>
<span class="n">armed_away</span> <span class="o">=</span> <span class="bp">False</span>
<span class="sd">&quot;&quot;&quot;Indicates whether or not the panel is armed away&quot;&quot;&quot;</span>
<span class="n">armed_home</span> <span class="o">=</span> <span class="bp">False</span>
<span class="sd">&quot;&quot;&quot;Indicates whether or not the panel is armed home&quot;&quot;&quot;</span>
<span class="n">backlight_on</span> <span class="o">=</span> <span class="bp">False</span>
<span class="sd">&quot;&quot;&quot;Indicates whether or not the keypad backlight is on&quot;&quot;&quot;</span>
<span class="n">programming_mode</span> <span class="o">=</span> <span class="bp">False</span>
<span class="sd">&quot;&quot;&quot;Indicates whether or not we&#39;re in programming mode&quot;&quot;&quot;</span>
<span class="n">beeps</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span>
<span class="sd">&quot;&quot;&quot;Number of beeps associated with a message&quot;&quot;&quot;</span>
<span class="n">zone_bypassed</span> <span class="o">=</span> <span class="bp">False</span>
<span class="sd">&quot;&quot;&quot;Indicates whether or not a zone is bypassed&quot;&quot;&quot;</span>
<span class="n">ac_power</span> <span class="o">=</span> <span class="bp">False</span>
<span class="sd">&quot;&quot;&quot;Indicates whether or not the panel is on AC power&quot;&quot;&quot;</span>
<span class="n">chime_on</span> <span class="o">=</span> <span class="bp">False</span>
<span class="sd">&quot;&quot;&quot;Indicates whether or not the chime is enabled&quot;&quot;&quot;</span>
<span class="n">alarm_event_occurred</span> <span class="o">=</span> <span class="bp">False</span>
<span class="sd">&quot;&quot;&quot;Indicates whether or not an alarm event has occurred&quot;&quot;&quot;</span>
<span class="n">alarm_sounding</span> <span class="o">=</span> <span class="bp">False</span>
<span class="sd">&quot;&quot;&quot;Indicates whether or not an alarm is sounding&quot;&quot;&quot;</span>
<span class="n">battery_low</span> <span class="o">=</span> <span class="bp">False</span>
<span class="sd">&quot;&quot;&quot;Indicates whether or not there is a low battery&quot;&quot;&quot;</span>
<span class="n">entry_delay_off</span> <span class="o">=</span> <span class="bp">False</span>
<span class="sd">&quot;&quot;&quot;Indicates whether or not the entry delay is enabled&quot;&quot;&quot;</span>
<span class="n">fire_alarm</span> <span class="o">=</span> <span class="bp">False</span>
<span class="sd">&quot;&quot;&quot;Indicates whether or not a fire alarm is sounding&quot;&quot;&quot;</span>
<span class="n">check_zone</span> <span class="o">=</span> <span class="bp">False</span>
<span class="sd">&quot;&quot;&quot;Indicates whether or not there are zones that require attention.&quot;&quot;&quot;</span>
<span class="n">perimeter_only</span> <span class="o">=</span> <span class="bp">False</span>
<span class="sd">&quot;&quot;&quot;Indicates whether or not the perimeter is armed&quot;&quot;&quot;</span>
<span class="n">numeric_code</span> <span class="o">=</span> <span class="bp">None</span>
<span class="sd">&quot;&quot;&quot;The numeric code associated with the message&quot;&quot;&quot;</span>
<span class="n">text</span> <span class="o">=</span> <span class="bp">None</span>
<span class="sd">&quot;&quot;&quot;The human-readable text to be displayed on the panel LCD&quot;&quot;&quot;</span>
<span class="n">cursor_location</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span>
<span class="sd">&quot;&quot;&quot;Current cursor location on the keypad&quot;&quot;&quot;</span>
<span class="n">mask</span> <span class="o">=</span> <span class="bp">None</span>
<span class="sd">&quot;&quot;&quot;Address mask this message is intended for&quot;&quot;&quot;</span>
<span class="n">bitfield</span> <span class="o">=</span> <span class="bp">None</span>
<span class="sd">&quot;&quot;&quot;The bitfield associated with this message&quot;&quot;&quot;</span>
<span class="n">panel_data</span> <span class="o">=</span> <span class="bp">None</span>
<span class="sd">&quot;&quot;&quot;The panel data field associated with this message&quot;&quot;&quot;</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">&quot;&quot;&quot;</span>
<span class="sd"> Constructor</span>
@@ -85,35 +135,19 @@
<span class="sd"> :param data: Message data to parse.</span>
<span class="sd"> :type data: str</span>
<span class="sd"> &quot;&quot;&quot;</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">battery_low</span> <span class="o">=</span> <span class="bp">False</span>
<span class="bp">self</span><span class="o">.</span><span class="n">entry_delay_off</span> <span class="o">=</span> <span class="bp">False</span>
<span class="bp">self</span><span class="o">.</span><span class="n">fire_alarm</span> <span class="o">=</span> <span class="bp">False</span>
<span class="bp">self</span><span class="o">.</span><span class="n">check_zone</span> <span class="o">=</span> <span class="bp">False</span>
<span class="bp">self</span><span class="o">.</span><span class="n">perimeter_only</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">&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">text</span> <span class="o">=</span> <span class="s">&quot;&quot;</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">&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">mask</span> <span class="o">=</span> <span class="s">&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">bitfield</span> <span class="o">=</span> <span class="s">&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">panel_data</span> <span class="o">=</span> <span class="s">&quot;&quot;</span>
<span class="n">BaseMessage</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">_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">&#39;(&quot;(?:[^&quot;]|&quot;&quot;)*&quot;|[^,]*),(&quot;(?:[^&quot;]|&quot;&quot;)*&quot;|[^,]*),(&quot;(?:[^&quot;]|&quot;&quot;)*&quot;|[^,]*),(&quot;(?:[^&quot;]|&quot;&quot;)*&quot;|[^,]*)&#39;</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">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> String conversion operator.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">raw</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">&quot;&quot;&quot;</span>
<span class="sd"> Parse the message from the device.</span>
@@ -155,14 +189,8 @@

<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">&amp;</span> <span class="mh">0x01</span> <span class="o">&gt;</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">&quot;&quot;&quot;</span>
<span class="sd"> String conversion operator.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">raw</span>
</div>
<div class="viewcode-block" id="ExpanderMessage"><a class="viewcode-back" href="../../pyad2.html#pyad2.messages.ExpanderMessage">[docs]</a><span class="k">class</span> <span class="nc">ExpanderMessage</span><span class="p">(</span><span class="n">BaseMessage</span><span class="p">):</span>
<div class="viewcode-block" id="ExpanderMessage"><a class="viewcode-back" href="../../alarmdecoder.html#alarmdecoder.messages.ExpanderMessage">[docs]</a><span class="k">class</span> <span class="nc">ExpanderMessage</span><span class="p">(</span><span class="n">BaseMessage</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Represents a message from a zone or relay expansion module.</span>
<span class="sd"> &quot;&quot;&quot;</span>
@@ -172,6 +200,16 @@
<span class="n">RELAY</span> <span class="o">=</span> <span class="mi">1</span>
<span class="sd">&quot;&quot;&quot;Flag indicating that the expander message relates to a Relay Expander.&quot;&quot;&quot;</span>


<span class="nb">type</span> <span class="o">=</span> <span class="bp">None</span>
<span class="sd">&quot;&quot;&quot;Expander message type: ExpanderMessage.ZONE or ExpanderMessage.RELAY&quot;&quot;&quot;</span>
<span class="n">address</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span>
<span class="sd">&quot;&quot;&quot;Address of expander&quot;&quot;&quot;</span>
<span class="n">channel</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span>
<span class="sd">&quot;&quot;&quot;Channel on the expander&quot;&quot;&quot;</span>
<span class="n">value</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span>
<span class="sd">&quot;&quot;&quot;Value associated with the message&quot;&quot;&quot;</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">&quot;&quot;&quot;</span>
<span class="sd"> Constructor</span>
@@ -179,11 +217,7 @@
<span class="sd"> :param data: The message data to parse.</span>
<span class="sd"> :type data: str</span>
<span class="sd"> &quot;&quot;&quot;</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="n">BaseMessage</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="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>
@@ -220,11 +254,22 @@
<span class="k">else</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">InvalidMessageError</span><span class="p">(</span><span class="s">&#39;Unknown expander message header: {0}&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">data</span><span class="p">))</span>
</div>
<div class="viewcode-block" id="RFMessage"><a class="viewcode-back" href="../../pyad2.html#pyad2.messages.RFMessage">[docs]</a><span class="k">class</span> <span class="nc">RFMessage</span><span class="p">(</span><span class="n">BaseMessage</span><span class="p">):</span>
<div class="viewcode-block" id="RFMessage"><a class="viewcode-back" href="../../alarmdecoder.html#alarmdecoder.messages.RFMessage">[docs]</a><span class="k">class</span> <span class="nc">RFMessage</span><span class="p">(</span><span class="n">BaseMessage</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Represents a message from an RF receiver.</span>
<span class="sd"> &quot;&quot;&quot;</span>

<span class="n">serial_number</span> <span class="o">=</span> <span class="bp">None</span>
<span class="sd">&quot;&quot;&quot;Serial number of the RF device&quot;&quot;&quot;</span>
<span class="n">value</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span>
<span class="sd">&quot;&quot;&quot;Value associated with this message&quot;&quot;&quot;</span>
<span class="n">battery</span> <span class="o">=</span> <span class="bp">False</span>
<span class="sd">&quot;&quot;&quot;Battery low indication&quot;&quot;&quot;</span>
<span class="n">supervision</span> <span class="o">=</span> <span class="bp">False</span>
<span class="sd">&quot;&quot;&quot;Supervision required indication&quot;&quot;&quot;</span>
<span class="n">loop</span> <span class="o">=</span> <span class="p">[</span><span class="bp">False</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">4</span><span class="p">)]</span>
<span class="sd">&quot;&quot;&quot;Loop indicators&quot;&quot;&quot;</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">&quot;&quot;&quot;</span>
<span class="sd"> Constructor</span>
@@ -232,12 +277,7 @@
<span class="sd"> :param data: The message data to parse</span>
<span class="sd"> :type data: str</span>
<span class="sd"> &quot;&quot;&quot;</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="bp">self</span><span class="o">.</span><span class="n">battery</span> <span class="o">=</span> <span class="bp">None</span>
<span class="bp">self</span><span class="o">.</span><span class="n">supervision</span> <span class="o">=</span> <span class="bp">None</span>
<span class="bp">self</span><span class="o">.</span><span class="n">loop</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">BaseMessage</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="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>
@@ -262,26 +302,32 @@
<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">&#39;,&#39;</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="nb">int</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="mi">16</span><span class="p">)</span>

<span class="n">is_bit_set</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">b</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">value</span> <span class="o">&amp;</span> <span class="p">(</span><span class="mi">1</span> <span class="o">&lt;&lt;</span> <span class="n">b</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span>
<span class="n">is_bit_set</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">b</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">value</span> <span class="o">&amp;</span> <span class="p">(</span><span class="mi">1</span> <span class="o">&lt;&lt;</span> <span class="p">(</span><span class="n">b</span> <span class="o">-</span> <span class="mi">1</span><span class="p">))</span> <span class="o">&gt;</span> <span class="mi">0</span>

<span class="c"># Bit 1 = unknown</span>
<span class="bp">self</span><span class="o">.</span><span class="n">battery</span> <span class="o">=</span> <span class="n">is_bit_set</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">supervision</span> <span class="o">=</span> <span class="n">is_bit_set</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span>
<span class="c"># Bit 8 = unknown</span>
<span class="bp">self</span><span class="o">.</span><span class="n">loop</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="n">is_bit_set</span><span class="p">(</span><span class="mi">5</span><span class="p">)</span>
<span class="c"># Bit 4 = unknown</span>
<span class="bp">self</span><span class="o">.</span><span class="n">loop</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">=</span> <span class="n">is_bit_set</span><span class="p">(</span><span class="mi">5</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">loop</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">is_bit_set</span><span class="p">(</span><span class="mi">6</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">loop</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">=</span> <span class="n">is_bit_set</span><span class="p">(</span><span class="mi">7</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">loop</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span> <span class="o">=</span> <span class="n">is_bit_set</span><span class="p">(</span><span class="mi">8</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">loop</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span> <span class="o">=</span> <span class="n">is_bit_set</span><span class="p">(</span><span class="mi">7</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">loop</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="n">is_bit_set</span><span class="p">(</span><span class="mi">8</span><span class="p">)</span>

<span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">InvalidMessageError</span><span class="p">(</span><span class="s">&#39;Received invalid message: {0}&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">data</span><span class="p">))</span>

</div>
<div class="viewcode-block" id="LRRMessage"><a class="viewcode-back" href="../../pyad2.html#pyad2.messages.LRRMessage">[docs]</a><span class="k">class</span> <span class="nc">LRRMessage</span><span class="p">(</span><span class="n">BaseMessage</span><span class="p">):</span>
<div class="viewcode-block" id="LRRMessage"><a class="viewcode-back" href="../../alarmdecoder.html#alarmdecoder.messages.LRRMessage">[docs]</a><span class="k">class</span> <span class="nc">LRRMessage</span><span class="p">(</span><span class="n">BaseMessage</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Represent a message from a Long Range Radio.</span>
<span class="sd"> &quot;&quot;&quot;</span>

<span class="n">event_data</span> <span class="o">=</span> <span class="bp">None</span>
<span class="sd">&quot;&quot;&quot;Data associated with the LRR message. Usually user ID or zone.&quot;&quot;&quot;</span>
<span class="n">partition</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span>
<span class="sd">&quot;&quot;&quot;The partition that this message applies to&quot;&quot;&quot;</span>
<span class="n">event_type</span> <span class="o">=</span> <span class="bp">None</span>
<span class="sd">&quot;&quot;&quot;The type of the event that occurred&quot;&quot;&quot;</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">&quot;&quot;&quot;</span>
<span class="sd"> Constructor</span>
@@ -289,10 +335,7 @@
<span class="sd"> :param data: The message data to parse.</span>
<span class="sd"> :type data: str</span>
<span class="sd"> &quot;&quot;&quot;</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="n">BaseMessage</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="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>
@@ -351,12 +394,12 @@
<li class="right" >
<a href="../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../index.html">pyad2 documentation</a> &raquo;</li>
<li><a href="../../index.html">alarmdecoder documentation</a> &raquo;</li>
<li><a href="../index.html" >Module code</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2013, Author.
&copy; Copyright 2013, Nu Tech Software Solutions, Inc..
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2b1.
</div>
</body>

docs/_build/html/_modules/pyad2/util.html → docs/_build/html/_modules/alarmdecoder/util.html View File

@@ -6,7 +6,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>pyad2.util &mdash; pyad2 documentation</title>
<title>alarmdecoder.util &mdash; alarmdecoder documentation</title>
<link rel="stylesheet" href="../../_static/default.css" type="text/css" />
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
@@ -23,7 +23,7 @@
<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="pyad2 documentation" href="../../index.html" />
<link rel="top" title="alarmdecoder documentation" href="../../index.html" />
<link rel="up" title="Module code" href="../index.html" />
</head>
<body>
@@ -36,7 +36,7 @@
<li class="right" >
<a href="../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../index.html">pyad2 documentation</a> &raquo;</li>
<li><a href="../../index.html">alarmdecoder documentation</a> &raquo;</li>
<li><a href="../index.html" accesskey="U">Module code</a> &raquo;</li>
</ul>
</div>
@@ -46,44 +46,43 @@
<div class="bodywrapper">
<div class="body">
<h1>Source code for pyad2.util</h1><div class="highlight"><pre>
<h1>Source code for alarmdecoder.util</h1><div class="highlight"><pre>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd">Provides utility classes for the AD2 devices.</span>
<span class="sd">Provides utility classes for the Alarm Decoder (AD2) devices.</span>

<span class="sd">.. moduleauthor:: Scott Petersen &lt;scott@nutech.com&gt;</span>
<span class="sd">&quot;&quot;&quot;</span>

<span class="kn">import</span> <span class="nn">ad2</span>
<span class="kn">import</span> <span class="nn">time</span>
<span class="kn">import</span> <span class="nn">threading</span>

<div class="viewcode-block" id="NoDeviceError"><a class="viewcode-back" href="../../pyad2.html#pyad2.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>
<div class="viewcode-block" id="NoDeviceError"><a class="viewcode-back" href="../../alarmdecoder.html#alarmdecoder.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">&quot;&quot;&quot;</span>
<span class="sd"> No devices found.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">pass</span>
</div>
<div class="viewcode-block" id="CommError"><a class="viewcode-back" href="../../pyad2.html#pyad2.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>
<div class="viewcode-block" id="CommError"><a class="viewcode-back" href="../../alarmdecoder.html#alarmdecoder.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">&quot;&quot;&quot;</span>
<span class="sd"> There was an error communicating with the device.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">pass</span>
</div>
<div class="viewcode-block" id="TimeoutError"><a class="viewcode-back" href="../../pyad2.html#pyad2.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>
<div class="viewcode-block" id="TimeoutError"><a class="viewcode-back" href="../../alarmdecoder.html#alarmdecoder.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">&quot;&quot;&quot;</span>
<span class="sd"> There was a timeout while trying to communicate with the device.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">pass</span>
</div>
<div class="viewcode-block" id="InvalidMessageError"><a class="viewcode-back" href="../../pyad2.html#pyad2.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>
<div class="viewcode-block" id="InvalidMessageError"><a class="viewcode-back" href="../../alarmdecoder.html#alarmdecoder.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">&quot;&quot;&quot;</span>
<span class="sd"> The format of the panel message was invalid.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">pass</span>
</div>
<div class="viewcode-block" id="Firmware"><a class="viewcode-back" href="../../pyad2.html#pyad2.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>
<div class="viewcode-block" id="Firmware"><a class="viewcode-back" href="../../alarmdecoder.html#alarmdecoder.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">&quot;&quot;&quot;</span>
<span class="sd"> Represents firmware for the AD2 devices.</span>
<span class="sd"> Represents firmware for the Alarm Decoder devices.</span>
<span class="sd"> &quot;&quot;&quot;</span>

<span class="c"># Constants</span>
@@ -95,16 +94,16 @@
<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="../../pyad2.html#pyad2.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>
<div class="viewcode-block" id="Firmware.upload"><a class="viewcode-back" href="../../alarmdecoder.html#alarmdecoder.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">&quot;&quot;&quot;</span>
<span class="sd"> Uploads firmware to an AD2 device.</span>
<span class="sd"> Uploads firmware to an Alarm Decoder device.</span>

<span class="sd"> :param filename: The firmware filename</span>
<span class="sd"> :type filename: str</span>
<span class="sd"> :param progress_callback: Callback function used to report progress.</span>
<span class="sd"> :type progress_callback: function</span>

<span class="sd"> :raises: util.NoDeviceError, util.TimeoutError</span>
<span class="sd"> :raises: NoDeviceError, TimeoutError</span>
<span class="sd"> &quot;&quot;&quot;</span>

<span class="k">def</span> <span class="nf">do_upload</span><span class="p">():</span>
@@ -228,12 +227,12 @@
<li class="right" >
<a href="../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../index.html">pyad2 documentation</a> &raquo;</li>
<li><a href="../../index.html">alarmdecoder documentation</a> &raquo;</li>
<li><a href="../index.html" >Module code</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2013, Author.
&copy; Copyright 2013, Nu Tech Software Solutions, Inc..
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2b1.
</div>
</body>

docs/_build/html/_modules/pyad2/zonetracking.html → docs/_build/html/_modules/alarmdecoder/zonetracking.html View File

@@ -6,7 +6,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>pyad2.zonetracking &mdash; pyad2 documentation</title>
<title>alarmdecoder.zonetracking &mdash; alarmdecoder documentation</title>
<link rel="stylesheet" href="../../_static/default.css" type="text/css" />
<link rel="stylesheet" href="../../_static/pygments.css" type="text/css" />
@@ -23,7 +23,7 @@
<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="pyad2 documentation" href="../../index.html" />
<link rel="top" title="alarmdecoder documentation" href="../../index.html" />
<link rel="up" title="Module code" href="../index.html" />
</head>
<body>
@@ -36,7 +36,7 @@
<li class="right" >
<a href="../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../index.html">pyad2 documentation</a> &raquo;</li>
<li><a href="../../index.html">alarmdecoder documentation</a> &raquo;</li>
<li><a href="../index.html" accesskey="U">Module code</a> &raquo;</li>
</ul>
</div>
@@ -46,9 +46,9 @@
<div class="bodywrapper">
<div class="body">
<h1>Source code for pyad2.zonetracking</h1><div class="highlight"><pre>
<h1>Source code for alarmdecoder.zonetracking</h1><div class="highlight"><pre>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd">Provides zone tracking functionality for the AD2 device family.</span>
<span class="sd">Provides zone tracking functionality for the Alarm Decoder (AD2) device family.</span>

<span class="sd">.. moduleauthor:: Scott Petersen &lt;scott@nutech.com&gt;</span>
<span class="sd">&quot;&quot;&quot;</span>
@@ -59,7 +59,7 @@
<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">.messages</span> <span class="kn">import</span> <span class="n">ExpanderMessage</span>

<div class="viewcode-block" id="Zone"><a class="viewcode-back" href="../../pyad2.html#pyad2.zonetracking.Zone">[docs]</a><span class="k">class</span> <span class="nc">Zone</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<div class="viewcode-block" id="Zone"><a class="viewcode-back" href="../../alarmdecoder.html#alarmdecoder.zonetracking.Zone">[docs]</a><span class="k">class</span> <span class="nc">Zone</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Representation of a panel zone.</span>
<span class="sd"> &quot;&quot;&quot;</span>
@@ -101,7 +101,7 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="s">&#39;Zone({0}, {1}, ts {2})&#39;</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">zone</span><span class="p">,</span> <span class="n">Zone</span><span class="o">.</span><span class="n">STATUS</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">status</span><span class="p">],</span> <span class="bp">self</span><span class="o">.</span><span class="n">timestamp</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="Zonetracker"><a class="viewcode-back" href="../../pyad2.html#pyad2.zonetracking.Zonetracker">[docs]</a><span class="k">class</span> <span class="nc">Zonetracker</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<div class="viewcode-block" id="Zonetracker"><a class="viewcode-back" href="../../alarmdecoder.html#alarmdecoder.zonetracking.Zonetracker">[docs]</a><span class="k">class</span> <span class="nc">Zonetracker</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Handles tracking of zone and their statuses.</span>
<span class="sd"> &quot;&quot;&quot;</span>
@@ -120,7 +120,7 @@
<span class="bp">self</span><span class="o">.</span><span class="n">_zones_faulted</span> <span class="o">=</span> <span class="p">[]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_last_zone_fault</span> <span class="o">=</span> <span class="mi">0</span>

<div class="viewcode-block" id="Zonetracker.update"><a class="viewcode-back" href="../../pyad2.html#pyad2.zonetracking.Zonetracker.update">[docs]</a> <span class="k">def</span> <span class="nf">update</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">):</span>
<div class="viewcode-block" id="Zonetracker.update"><a class="viewcode-back" href="../../alarmdecoder.html#alarmdecoder.zonetracking.Zonetracker.update">[docs]</a> <span class="k">def</span> <span class="nf">update</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="sd">&quot;&quot;&quot;</span>
<span class="sd"> Update zone statuses based on the current message.</span>

@@ -148,6 +148,10 @@

<span class="k">else</span><span class="p">:</span>
<span class="c"># Panel is ready, restore all zones.</span>
<span class="c">#</span>
<span class="c"># NOTE: This will need to be updated to support panels with multiple partitions.</span>
<span class="c"># In it&#39;s current state a ready on partition #1 will end up clearing all zones, even</span>
<span class="c"># if they exist elsewhere and it shouldn&#39;t.</span>
<span class="k">if</span> <span class="n">message</span><span class="o">.</span><span class="n">ready</span><span class="p">:</span>
<span class="k">for</span> <span class="n">z</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_zones_faulted</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_update_zone</span><span class="p">(</span><span class="n">z</span><span class="p">,</span> <span class="n">Zone</span><span class="o">.</span><span class="n">CLEAR</span><span class="p">)</span>
@@ -283,7 +287,7 @@
<span class="bp">self</span><span class="o">.</span><span class="n">_zones</span><span class="p">[</span><span class="n">zone</span><span class="p">]</span> <span class="o">=</span> <span class="n">Zone</span><span class="p">(</span><span class="n">zone</span><span class="o">=</span><span class="n">zone</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="n">name</span><span class="p">,</span> <span class="n">status</span><span class="o">=</span><span class="n">status</span><span class="p">)</span>

<span class="k">if</span> <span class="n">status</span> <span class="o">!=</span> <span class="n">Zone</span><span class="o">.</span><span class="n">CLEAR</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">on_fault</span><span class="p">(</span><span class="n">zone</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">on_fault</span><span class="p">(</span><span class="n">zone</span><span class="o">=</span><span class="n">zone</span><span class="p">)</span>

<span class="k">def</span> <span class="nf">_update_zone</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">zone</span><span class="p">,</span> <span class="n">status</span><span class="o">=</span><span class="bp">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
@@ -308,7 +312,7 @@
<span class="k">if</span> <span class="n">zone</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_zones_faulted</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_zones_faulted</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">zone</span><span class="p">)</span>

<span class="bp">self</span><span class="o">.</span><span class="n">on_restore</span><span class="p">(</span><span class="n">zone</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">on_restore</span><span class="p">(</span><span class="n">zone</span><span class="o">=</span><span class="n">zone</span><span class="p">)</span>

<span class="k">def</span> <span class="nf">_zone_expired</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">zone</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
@@ -372,12 +376,12 @@
<li class="right" >
<a href="../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../../index.html">pyad2 documentation</a> &raquo;</li>
<li><a href="../../index.html">alarmdecoder documentation</a> &raquo;</li>
<li><a href="../index.html" >Module code</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2013, Author.
&copy; Copyright 2013, Nu Tech Software Solutions, Inc..
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2b1.
</div>
</body>

+ 10
- 11
docs/_build/html/_modules/index.html View File

@@ -6,7 +6,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Overview: module code &mdash; pyad2 documentation</title>
<title>Overview: module code &mdash; alarmdecoder documentation</title>
<link rel="stylesheet" href="../_static/default.css" type="text/css" />
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
@@ -23,7 +23,7 @@
<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="pyad2 documentation" href="../index.html" />
<link rel="top" title="alarmdecoder documentation" href="../index.html" />
</head>
<body>
<div class="related">
@@ -35,7 +35,7 @@
<li class="right" >
<a href="../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../index.html">pyad2 documentation</a> &raquo;</li>
<li><a href="../index.html">alarmdecoder documentation</a> &raquo;</li>
</ul>
</div>

@@ -45,12 +45,11 @@
<div class="body">
<h1>All modules for which code is available</h1>
<ul><li><a href="pyad2/ad2.html">pyad2.ad2</a></li>
<li><a href="pyad2/devices.html">pyad2.devices</a></li>
<li><a href="pyad2/event/event.html">pyad2.event.event</a></li>
<li><a href="pyad2/messages.html">pyad2.messages</a></li>
<li><a href="pyad2/util.html">pyad2.util</a></li>
<li><a href="pyad2/zonetracking.html">pyad2.zonetracking</a></li>
<ul><li><a href="alarmdecoder/devices.html">alarmdecoder.devices</a></li>
<li><a href="alarmdecoder/event/event.html">alarmdecoder.event.event</a></li>
<li><a href="alarmdecoder/messages.html">alarmdecoder.messages</a></li>
<li><a href="alarmdecoder/util.html">alarmdecoder.util</a></li>
<li><a href="alarmdecoder/zonetracking.html">alarmdecoder.zonetracking</a></li>
</ul>

</div>
@@ -84,11 +83,11 @@
<li class="right" >
<a href="../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="../index.html">pyad2 documentation</a> &raquo;</li>
<li><a href="../index.html">alarmdecoder documentation</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2013, Author.
&copy; Copyright 2013, Nu Tech Software Solutions, Inc..
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2b1.
</div>
</body>

+ 0
- 671
docs/_build/html/_modules/pyad2/ad2.html View File

@@ -1,671 +0,0 @@
<!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>pyad2.ad2 &mdash; pyad2 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="pyad2 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">pyad2 documentation</a> &raquo;</li>
<li><a href="../index.html" accesskey="U">Module code</a> &raquo;</li>
</ul>
</div>

<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<h1>Source code for pyad2.ad2</h1><div class="highlight"><pre>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd">Provides the full AD2 class and factory.</span>

<span class="sd">.. moduleauthor:: Scott Petersen &lt;scott@nutech.com&gt;</span>
<span class="sd">&quot;&quot;&quot;</span>

<span class="kn">import</span> <span class="nn">time</span>
<span class="kn">import</span> <span class="nn">threading</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">.devices</span> <span class="kn">import</span> <span class="n">USBDevice</span>
<span class="kn">from</span> <span class="nn">.util</span> <span class="kn">import</span> <span class="n">CommError</span><span class="p">,</span> <span class="n">NoDeviceError</span>
<span class="kn">from</span> <span class="nn">.messages</span> <span class="kn">import</span> <span class="n">Message</span><span class="p">,</span> <span class="n">ExpanderMessage</span><span class="p">,</span> <span class="n">RFMessage</span><span class="p">,</span> <span class="n">LRRMessage</span>
<span class="kn">from</span> <span class="nn">.zonetracking</span> <span class="kn">import</span> <span class="n">Zonetracker</span>

<div class="viewcode-block" id="AD2Factory"><a class="viewcode-back" href="../../pyad2.html#pyad2.ad2.AD2Factory">[docs]</a><span class="k">class</span> <span class="nc">AD2Factory</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Factory for creation of AD2USB devices as well as provides attach/detach events.&quot;</span>
<span class="sd"> &quot;&quot;&quot;</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">&#39;Called when an AD2USB device has been detected.&#39;</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">&#39;Called when an AD2USB device has been removed.&#39;</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="AD2Factory.find_all"><a class="viewcode-back" href="../../pyad2.html#pyad2.ad2.AD2Factory.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">&quot;&quot;&quot;</span>
<span class="sd"> Returns all AD2USB devices located on the system.</span>

<span class="sd"> :returns: list of devices found</span>
<span class="sd"> :raises: CommError</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">cls</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="AD2Factory.devices"><a class="viewcode-back" href="../../pyad2.html#pyad2.ad2.AD2Factory.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">&quot;&quot;&quot;</span>
<span class="sd"> Returns a cached list of AD2USB devices located on the system.</span>

<span class="sd"> :returns: cached list of devices found.</span>
<span class="sd"> &quot;&quot;&quot;</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="AD2Factory.create"><a class="viewcode-back" href="../../pyad2.html#pyad2.ad2.AD2Factory.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">&quot;&quot;&quot;</span>
<span class="sd"> Factory method that returns the requested AD2USB device, or the first device.</span>

<span class="sd"> :param device: Tuple describing the USB device to open, as returned by find_all().</span>
<span class="sd"> :type device: tuple</span>

<span class="sd"> :returns: AD2USB object utilizing the specified device.</span>
<span class="sd"> :raises: NoDeviceError</span>
<span class="sd"> &quot;&quot;&quot;</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">NoDeviceError</span><span class="p">(</span><span class="s">&#39;No AD2USB devices present.&#39;</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">USBDevice</span><span class="p">((</span><span class="n">sernum</span><span class="p">,</span> <span class="n">ifcount</span> <span class="o">-</span> <span class="mi">1</span><span class="p">))</span>

<span class="k">return</span> <span class="n">AD2</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">&quot;&quot;&quot;</span>
<span class="sd"> Constructor</span>

<span class="sd"> :param attached_event: Event to trigger when a device is attached.</span>
<span class="sd"> :type attached_event: function</span>
<span class="sd"> :param detached_event: Event to trigger when a device is detached.</span>
<span class="sd"> :type detached_event: function</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_detect_thread</span> <span class="o">=</span> <span class="n">AD2Factory</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">AD2Factory</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="AD2Factory.close"><a class="viewcode-back" href="../../pyad2.html#pyad2.ad2.AD2Factory.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">&quot;&quot;&quot;</span>
<span class="sd"> Clean up and shut down.</span>
<span class="sd"> &quot;&quot;&quot;</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="AD2Factory.start"><a class="viewcode-back" href="../../pyad2.html#pyad2.ad2.AD2Factory.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">&quot;&quot;&quot;</span>
<span class="sd"> Starts the detection thread, if not already running.</span>
<span class="sd"> &quot;&quot;&quot;</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="AD2Factory.stop"><a class="viewcode-back" href="../../pyad2.html#pyad2.ad2.AD2Factory.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">&quot;&quot;&quot;</span>
<span class="sd"> Stops the detection thread.</span>
<span class="sd"> &quot;&quot;&quot;</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="AD2Factory.get_device"><a class="viewcode-back" href="../../pyad2.html#pyad2.ad2.AD2Factory.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">&quot;&quot;&quot;</span>
<span class="sd"> Factory method that returns the requested AD2USB device, or the first device.</span>

<span class="sd"> :param device: Tuple describing the USB device to open, as returned by find_all().</span>
<span class="sd"> :type device: tuple</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">AD2Factory</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="AD2Factory.DetectThread"><a class="viewcode-back" href="../../pyad2.html#pyad2.ad2.AD2Factory.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">&quot;&quot;&quot;</span>
<span class="sd"> Thread that handles detection of added/removed devices.</span>
<span class="sd"> &quot;&quot;&quot;</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">factory</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Constructor</span>

<span class="sd"> :param factory: AD2Factory object to use with the thread.</span>
<span class="sd"> :type factory: AD2Factory</span>
<span class="sd"> &quot;&quot;&quot;</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">_factory</span> <span class="o">=</span> <span class="n">factory</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="AD2Factory.DetectThread.stop"><a class="viewcode-back" href="../../pyad2.html#pyad2.ad2.AD2Factory.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">&quot;&quot;&quot;</span>
<span class="sd"> Stops the thread.</span>
<span class="sd"> &quot;&quot;&quot;</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="AD2Factory.DetectThread.run"><a class="viewcode-back" href="../../pyad2.html#pyad2.ad2.AD2Factory.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">&quot;&quot;&quot;</span>
<span class="sd"> The actual detection process.</span>
<span class="sd"> &quot;&quot;&quot;</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">AD2Factory</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">AD2Factory</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">_factory</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">_factory</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">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="AD2"><a class="viewcode-back" href="../../pyad2.html#pyad2.ad2.AD2">[docs]</a><span class="k">class</span> <span class="nc">AD2</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> High-level wrapper around AD2 devices.</span>
<span class="sd"> &quot;&quot;&quot;</span>

<span class="c"># High-level Events</span>
<span class="n">on_arm</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">&#39;Called when the panel is armed.&#39;</span><span class="p">)</span>
<span class="n">on_disarm</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">&#39;Called when the panel is disarmed.&#39;</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">&#39;Called when panel power switches between AC and DC.&#39;</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">&#39;Called when the alarm is triggered.&#39;</span><span class="p">)</span>
<span class="n">on_fire</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">&#39;Called when a fire is detected.&#39;</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">&#39;Called when a zone is bypassed.&#39;</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">&#39;Called when the device finishes bootings.&#39;</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">&#39;Called when the device receives its configuration.&#39;</span><span class="p">)</span>
<span class="n">on_zone_fault</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">&#39;Called when the device detects a zone fault.&#39;</span><span class="p">)</span>
<span class="n">on_zone_restore</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">&#39;Called when the device detects that a fault is restored.&#39;</span><span class="p">)</span>
<span class="n">on_low_battery</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">&#39;Called when the device detects a low battery.&#39;</span><span class="p">)</span>
<span class="n">on_panic</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">&#39;Called when the device detects a panic.&#39;</span><span class="p">)</span>
<span class="n">on_relay_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">&#39;Called when a relay is opened or closed on an expander board.&#39;</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">&#39;Called when a message has been received from the device.&#39;</span><span class="p">)</span>
<span class="n">on_lrr_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">&#39;Called when an LRR message is received.&#39;</span><span class="p">)</span>
<span class="n">on_rfx_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">&#39;Called when an RFX message is received.&#39;</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">&#39;Called when the device has been opened.&#39;</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">&#39;Called when the device has been closed.&#39;</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">&#39;Called when a line has been read from the device.&#39;</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">&#39;Called when data has been written to the device.&#39;</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="sd">&quot;&quot;&quot;Represents panel function key #1&quot;&quot;&quot;</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="sd">&quot;&quot;&quot;Represents panel function key #2&quot;&quot;&quot;</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="sd">&quot;&quot;&quot;Represents panel function key #3&quot;&quot;&quot;</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="sd">&quot;&quot;&quot;Represents panel function key #4&quot;&quot;&quot;</span>

<span class="n">BATTERY_TIMEOUT</span> <span class="o">=</span> <span class="mi">30</span>
<span class="sd">&quot;&quot;&quot;Timeout before the battery status reverts.&quot;&quot;&quot;</span>
<span class="n">FIRE_TIMEOUT</span> <span class="o">=</span> <span class="mi">30</span>
<span class="sd">&quot;&quot;&quot;Timeout before the fire status reverts.&quot;&quot;&quot;</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">&quot;&quot;&quot;</span>
<span class="sd"> Constructor</span>

<span class="sd"> :param device: The low-level device used for this AD2 interface.</span>
<span class="sd"> :type device: Device</span>
<span class="sd"> &quot;&quot;&quot;</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">_zonetracker</span> <span class="o">=</span> <span class="n">Zonetracker</span><span class="p">()</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">_armed_status</span> <span class="o">=</span> <span class="bp">None</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_fire_status</span> <span class="o">=</span> <span class="p">(</span><span class="bp">False</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_battery_status</span> <span class="o">=</span> <span class="p">(</span><span class="bp">False</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_panic_status</span> <span class="o">=</span> <span class="bp">None</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_relay_status</span> <span class="o">=</span> <span class="p">{}</span>

<span class="bp">self</span><span class="o">.</span><span class="n">address</span> <span class="o">=</span> <span class="mi">18</span>
<span class="bp">self</span><span class="o">.</span><span class="n">configbits</span> <span class="o">=</span> <span class="mh">0xFF00</span>
<span class="bp">self</span><span class="o">.</span><span class="n">address_mask</span> <span class="o">=</span> <span class="mh">0x00000000</span>
<span class="bp">self</span><span class="o">.</span><span class="n">emulate_zone</span> <span class="o">=</span> <span class="p">[</span><span class="bp">False</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">5</span><span class="p">)]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">emulate_relay</span> <span class="o">=</span> <span class="p">[</span><span class="bp">False</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="nb">range</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">emulate_lrr</span> <span class="o">=</span> <span class="bp">False</span>
<span class="bp">self</span><span class="o">.</span><span class="n">deduplicate</span> <span class="o">=</span> <span class="bp">False</span>

<span class="nd">@property</span>
<div class="viewcode-block" id="AD2.id"><a class="viewcode-back" href="../../pyad2.html#pyad2.ad2.AD2.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="sd">&quot;&quot;&quot;</span>
<span class="sd"> The ID of the AD2 device.</span>

<span class="sd"> :returns: The identification string for the device.</span>
<span class="sd"> &quot;&quot;&quot;</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>
<div class="viewcode-block" id="AD2.open"><a class="viewcode-back" href="../../pyad2.html#pyad2.ad2.AD2.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">no_reader_thread</span><span class="o">=</span><span class="bp">False</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Opens the device.</span>

<span class="sd"> :param baudrate: The baudrate used for the device.</span>
<span class="sd"> :type baudrate: int</span>
<span class="sd"> :param interface: The interface used for the device.</span>
<span class="sd"> :type interface: varies depends on device type.. FIXME</span>
<span class="sd"> :param index: Interface index.. can probably remove. FIXME</span>
<span class="sd"> :type index: int</span>
<span class="sd"> :param no_reader_thread: Specifies whether or not the automatic reader thread should be started or not</span>
<span class="sd"> :type no_reader_thread: bool</span>
<span class="sd"> &quot;&quot;&quot;</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">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="AD2.close"><a class="viewcode-back" href="../../pyad2.html#pyad2.ad2.AD2.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">&quot;&quot;&quot;</span>
<span class="sd"> Closes the device.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_device</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">del</span> <span class="bp">self</span><span class="o">.</span><span class="n">_device</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="AD2.send"><a class="viewcode-back" href="../../pyad2.html#pyad2.ad2.AD2.send">[docs]</a> <span class="k">def</span> <span class="nf">send</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="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_device</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>
</div>
<div class="viewcode-block" id="AD2.get_config"><a class="viewcode-back" href="../../pyad2.html#pyad2.ad2.AD2.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">&quot;&quot;&quot;</span>
<span class="sd"> Retrieves the configuration from the device.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="s">&quot;C</span><span class="se">\r</span><span class="s">&quot;</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="AD2.save_config"><a class="viewcode-back" href="../../pyad2.html#pyad2.ad2.AD2.save_config">[docs]</a> <span class="k">def</span> <span class="nf">save_config</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Sets configuration entries on the device.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">config_string</span> <span class="o">=</span> <span class="s">&#39;&#39;</span>

<span class="c"># HACK: Both of these methods are ugly.. but I can&#39;t think of an elegant way of doing it.</span>

<span class="c">#config_string += &#39;ADDRESS={0}&amp;&#39;.format(self.address)</span>
<span class="c">#config_string += &#39;CONFIGBITS={0:x}&amp;&#39;.format(self.configbits)</span>
<span class="c">#config_string += &#39;MASK={0:x}&amp;&#39;.format(self.address_mask)</span>
<span class="c">#config_string += &#39;EXP={0}&amp;&#39;.format(&#39;&#39;.join([&#39;Y&#39; if z else &#39;N&#39; for z in self.emulate_zone]))</span>
<span class="c">#config_string += &#39;REL={0}&amp;&#39;.format(&#39;&#39;.join([&#39;Y&#39; if r else &#39;N&#39; for r in self.emulate_relay]))</span>
<span class="c">#config_string += &#39;LRR={0}&amp;&#39;.format(&#39;Y&#39; if self.emulate_lrr else &#39;N&#39;)</span>
<span class="c">#config_string += &#39;DEDUPLICATE={0}&#39;.format(&#39;Y&#39; if self.deduplicate else &#39;N&#39;)</span>

<span class="n">config_entries</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">config_entries</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="s">&#39;ADDRESS&#39;</span><span class="p">,</span> <span class="s">&#39;{0}&#39;</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">address</span><span class="p">)))</span>
<span class="n">config_entries</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="s">&#39;CONFIGBITS&#39;</span><span class="p">,</span> <span class="s">&#39;{0:x}&#39;</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">configbits</span><span class="p">)))</span>
<span class="n">config_entries</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="s">&#39;MASK&#39;</span><span class="p">,</span> <span class="s">&#39;{0:x}&#39;</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">address_mask</span><span class="p">)))</span>
<span class="n">config_entries</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="s">&#39;EXP&#39;</span><span class="p">,</span> <span class="s">&#39;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="s">&#39;Y&#39;</span> <span class="k">if</span> <span class="n">z</span> <span class="k">else</span> <span class="s">&#39;N&#39;</span> <span class="k">for</span> <span class="n">z</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">emulate_zone</span><span class="p">])))</span>
<span class="n">config_entries</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="s">&#39;REL&#39;</span><span class="p">,</span> <span class="s">&#39;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="s">&#39;Y&#39;</span> <span class="k">if</span> <span class="n">r</span> <span class="k">else</span> <span class="s">&#39;N&#39;</span> <span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">emulate_relay</span><span class="p">])))</span>
<span class="n">config_entries</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="s">&#39;LRR&#39;</span><span class="p">,</span> <span class="s">&#39;Y&#39;</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">emulate_lrr</span> <span class="k">else</span> <span class="s">&#39;N&#39;</span><span class="p">))</span>
<span class="n">config_entries</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="s">&#39;DEDUPLICATE&#39;</span><span class="p">,</span> <span class="s">&#39;Y&#39;</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">deduplicate</span> <span class="k">else</span> <span class="s">&#39;N&#39;</span><span class="p">))</span>

<span class="n">config_string</span> <span class="o">=</span> <span class="s">&#39;&amp;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="s">&#39;=&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">t</span><span class="p">)</span> <span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">config_entries</span><span class="p">])</span>

<span class="bp">self</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="s">&quot;C{0}</span><span class="se">\r</span><span class="s">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">config_string</span><span class="p">))</span>
</div>
<div class="viewcode-block" id="AD2.reboot"><a class="viewcode-back" href="../../pyad2.html#pyad2.ad2.AD2.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">&quot;&quot;&quot;</span>
<span class="sd"> Reboots the device.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="s">&#39;=&#39;</span><span class="p">)</span>
</div>
<div class="viewcode-block" id="AD2.fault_zone"><a class="viewcode-back" href="../../pyad2.html#pyad2.ad2.AD2.fault_zone">[docs]</a> <span class="k">def</span> <span class="nf">fault_zone</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">zone</span><span class="p">,</span> <span class="n">simulate_wire_problem</span><span class="o">=</span><span class="bp">False</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Faults a zone if we are emulating a zone expander.</span>

<span class="sd"> :param zone: The zone to fault.</span>
<span class="sd"> :type zone: int</span>
<span class="sd"> :param simulate_wire_problem: Whether or not to simulate a wire fault.</span>
<span class="sd"> :type simulate_wire_problem: bool</span>
<span class="sd"> &quot;&quot;&quot;</span>

<span class="c"># Allow ourselves to also be passed an address/channel combination</span>
<span class="c"># for zone expanders.</span>
<span class="c">#</span>
<span class="c"># Format (expander index, channel)</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">zone</span><span class="p">,</span> <span class="nb">tuple</span><span class="p">):</span>
<span class="n">zone</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_zonetracker</span><span class="o">.</span><span class="n">_expander_to_zone</span><span class="p">(</span><span class="o">*</span><span class="n">zone</span><span class="p">)</span>

<span class="n">status</span> <span class="o">=</span> <span class="mi">2</span> <span class="k">if</span> <span class="n">simulate_wire_problem</span> <span class="k">else</span> <span class="mi">1</span>

<span class="bp">self</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="s">&quot;L{0:02}{1}</span><span class="se">\r</span><span class="s">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">zone</span><span class="p">,</span> <span class="n">status</span><span class="p">))</span>
</div>
<div class="viewcode-block" id="AD2.clear_zone"><a class="viewcode-back" href="../../pyad2.html#pyad2.ad2.AD2.clear_zone">[docs]</a> <span class="k">def</span> <span class="nf">clear_zone</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">zone</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Clears a zone if we are emulating a zone expander.</span>

<span class="sd"> :param zone: The zone to clear.</span>
<span class="sd"> :type zone: int</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="s">&quot;L{0:02}0</span><span class="se">\r</span><span class="s">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">zone</span><span class="p">))</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">&quot;&quot;&quot;</span>
<span class="sd"> Wires up the internal device events.</span>
<span class="sd"> &quot;&quot;&quot;</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="bp">self</span><span class="o">.</span><span class="n">_zonetracker</span><span class="o">.</span><span class="n">on_fault</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_on_zone_fault</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_zonetracker</span><span class="o">.</span><span class="n">on_restore</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_on_zone_restore</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">&quot;&quot;&quot;</span>
<span class="sd"> Parses messages from the panel.</span>

<span class="sd"> :param data: Panel data to parse.</span>
<span class="sd"> :type data: str</span>

<span class="sd"> :returns: An object representing the message.</span>
<span class="sd"> &quot;&quot;&quot;</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">raise</span> <span class="n">InvalidMessageError</span><span class="p">()</span>

<span class="n">msg</span> <span class="o">=</span> <span class="bp">None</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="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">!=</span> <span class="s">&#39;!&#39;</span> <span class="ow">or</span> <span class="n">header</span> <span class="o">==</span> <span class="s">&#39;!KPE&#39;</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">&amp;</span> <span class="n">msg</span><span class="o">.</span><span class="n">mask</span> <span class="o">&gt;</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">elif</span> <span class="n">header</span> <span class="o">==</span> <span class="s">&#39;!EXP&#39;</span> <span class="ow">or</span> <span class="n">header</span> <span class="o">==</span> <span class="s">&#39;!REL&#39;</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="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">elif</span> <span class="n">header</span> <span class="o">==</span> <span class="s">&#39;!RFX&#39;</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_rfx</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">&#39;!LRR&#39;</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_lrr</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">&#39;!Ready&#39;</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">&#39;!CONFIG&#39;</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_rfx</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">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="bp">self</span><span class="o">.</span><span class="n">on_rfx_message</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>

<span class="k">return</span> <span class="n">msg</span>

<span class="k">def</span> <span class="nf">_handle_lrr</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">&quot;&quot;&quot;</span>
<span class="sd"> Handle Long Range Radio messages.</span>

<span class="sd"> :param data: LRR message to parse.</span>
<span class="sd"> :type data: str</span>

<span class="sd"> :returns: An object representing the LRR message.</span>
<span class="sd"> &quot;&quot;&quot;</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">if</span> <span class="n">msg</span><span class="o">.</span><span class="n">event_type</span> <span class="o">==</span> <span class="s">&#39;ALARM_PANIC&#39;</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_panic_status</span> <span class="o">=</span> <span class="bp">True</span>
<span class="bp">self</span><span class="o">.</span><span class="n">on_panic</span><span class="p">(</span><span class="bp">True</span><span class="p">)</span>

<span class="k">elif</span> <span class="n">msg</span><span class="o">.</span><span class="n">event_type</span> <span class="o">==</span> <span class="s">&#39;CANCEL&#39;</span><span class="p">:</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_panic_status</span> <span class="o">==</span> <span class="bp">True</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_panic_status</span> <span class="o">=</span> <span class="bp">False</span>
<span class="bp">self</span><span class="o">.</span><span class="n">on_panic</span><span class="p">(</span><span class="bp">False</span><span class="p">)</span>

<span class="bp">self</span><span class="o">.</span><span class="n">on_lrr_message</span><span class="p">(</span><span class="n">msg</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="sd">&quot;&quot;&quot;</span>
<span class="sd"> Handles received configuration data.</span>

<span class="sd"> :param data: Configuration string to parse.</span>
<span class="sd"> :type data: str</span>
<span class="sd"> &quot;&quot;&quot;</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">&#39;&gt;&#39;</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">&#39;&amp;&#39;</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">&#39;=&#39;</span><span class="p">)</span>

<span class="k">if</span> <span class="n">k</span> <span class="o">==</span> <span class="s">&#39;ADDRESS&#39;</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">address</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">k</span> <span class="o">==</span> <span class="s">&#39;CONFIGBITS&#39;</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">configbits</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">v</span><span class="p">,</span> <span class="mi">16</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">k</span> <span class="o">==</span> <span class="s">&#39;MASK&#39;</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="nb">int</span><span class="p">(</span><span class="n">v</span><span class="p">,</span> <span class="mi">16</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">k</span> <span class="o">==</span> <span class="s">&#39;EXP&#39;</span><span class="p">:</span>
<span class="k">for</span> <span class="n">z</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">5</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">emulate_zone</span><span class="p">[</span><span class="n">z</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="n">v</span><span class="p">[</span><span class="n">z</span><span class="p">]</span> <span class="o">==</span> <span class="s">&#39;Y&#39;</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">k</span> <span class="o">==</span> <span class="s">&#39;REL&#39;</span><span class="p">:</span>
<span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="nb">range</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">emulate_relay</span><span class="p">[</span><span class="n">r</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="n">v</span><span class="p">[</span><span class="n">r</span><span class="p">]</span> <span class="o">==</span> <span class="s">&#39;Y&#39;</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">k</span> <span class="o">==</span> <span class="s">&#39;LRR&#39;</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">emulate_lrr</span> <span class="o">=</span> <span class="p">(</span><span class="n">v</span> <span class="o">==</span> <span class="s">&#39;Y&#39;</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">k</span> <span class="o">==</span> <span class="s">&#39;DEDUPLICATE&#39;</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">deduplicate</span> <span class="o">=</span> <span class="p">(</span><span class="n">v</span> <span class="o">==</span> <span class="s">&#39;Y&#39;</span><span class="p">)</span>

<span class="bp">self</span><span class="o">.</span><span class="n">on_config_received</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="sd">&quot;&quot;&quot;</span>
<span class="sd"> Updates internal device states.</span>

<span class="sd"> :param message: Message to update internal states with.</span>
<span class="sd"> :type message: Message, ExpanderMessage, LRRMessage, or RFMessage</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">message</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">if</span> <span class="p">(</span><span class="n">message</span><span class="o">.</span><span class="n">armed_away</span> <span class="o">|</span> <span class="n">message</span><span class="o">.</span><span class="n">armed_home</span><span class="p">)</span> <span class="o">!=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_armed_status</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_armed_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">armed_away</span> <span class="o">|</span> <span class="n">message</span><span class="o">.</span><span class="n">armed_home</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_armed_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="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_armed_status</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">on_arm</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_disarm</span><span class="p">()</span>

<span class="k">if</span> <span class="n">message</span><span class="o">.</span><span class="n">battery_low</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">_battery_status</span><span class="p">[</span><span class="mi">0</span><span class="p">]:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_battery_status</span> <span class="o">=</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_battery_status</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">())</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">if</span> <span class="n">message</span><span class="o">.</span><span class="n">battery_low</span> <span class="o">==</span> <span class="bp">True</span> <span class="ow">or</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span> <span class="o">&gt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">_battery_status</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="n">AD2</span><span class="o">.</span><span class="n">BATTERY_TIMEOUT</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_battery_status</span> <span class="o">=</span> <span class="p">(</span><span class="n">message</span><span class="o">.</span><span class="n">battery_low</span><span class="p">,</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">())</span>
<span class="bp">self</span><span class="o">.</span><span class="n">on_low_battery</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_battery_status</span><span class="p">)</span>

<span class="k">if</span> <span class="n">message</span><span class="o">.</span><span class="n">fire_alarm</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">_fire_status</span><span class="p">[</span><span class="mi">0</span><span class="p">]:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_fire_status</span> <span class="o">=</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_fire_status</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">())</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">if</span> <span class="n">message</span><span class="o">.</span><span class="n">fire_alarm</span> <span class="o">==</span> <span class="bp">True</span> <span class="ow">or</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span> <span class="o">&gt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">_fire_status</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="n">AD2</span><span class="o">.</span><span class="n">FIRE_TIMEOUT</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_fire_status</span> <span class="o">=</span> <span class="p">(</span><span class="n">message</span><span class="o">.</span><span class="n">fire_alarm</span><span class="p">,</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">())</span>
<span class="bp">self</span><span class="o">.</span><span class="n">on_fire</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_fire_status</span><span class="p">)</span>

<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">message</span><span class="p">,</span> <span class="n">ExpanderMessage</span><span class="p">):</span>
<span class="k">if</span> <span class="n">message</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="bp">self</span><span class="o">.</span><span class="n">_relay_status</span><span class="p">[(</span><span class="n">message</span><span class="o">.</span><span class="n">address</span><span class="p">,</span> <span class="n">message</span><span class="o">.</span><span class="n">channel</span><span class="p">)]</span> <span class="o">=</span> <span class="n">message</span><span class="o">.</span><span class="n">value</span>

<span class="bp">self</span><span class="o">.</span><span class="n">on_relay_changed</span><span class="p">(</span><span class="n">message</span><span class="p">)</span>

<span class="bp">self</span><span class="o">.</span><span class="n">_update_zone_tracker</span><span class="p">(</span><span class="n">message</span><span class="p">)</span>

<span class="k">def</span> <span class="nf">_update_zone_tracker</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="sd">&quot;&quot;&quot;</span>
<span class="sd"> Trigger an update of the zonetracker.</span>

<span class="sd"> :param message: The message to update the zonetracker with.</span>
<span class="sd"> :type message: Message, ExpanderMessage, LRRMessage, or RFMessage</span>
<span class="sd"> &quot;&quot;&quot;</span>

<span class="c"># Retrieve a list of faults.</span>
<span class="c"># NOTE: This only happens on first boot or after exiting programming mode.</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">message</span><span class="p">,</span> <span class="n">Message</span><span class="p">):</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">message</span><span class="o">.</span><span class="n">ready</span> <span class="ow">and</span> <span class="s">&quot;Hit * for faults&quot;</span> <span class="ow">in</span> <span class="n">message</span><span class="o">.</span><span class="n">text</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="s">&#39;*&#39;</span><span class="p">)</span>
<span class="k">return</span>

<span class="bp">self</span><span class="o">.</span><span class="n">_zonetracker</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">message</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">&quot;&quot;&quot;</span>
<span class="sd"> Internal handler for opening the device.</span>
<span class="sd"> &quot;&quot;&quot;</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">&quot;&quot;&quot;</span>
<span class="sd"> Internal handler for closing the device.</span>
<span class="sd"> &quot;&quot;&quot;</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">&quot;&quot;&quot;</span>
<span class="sd"> Internal handler for reading from the device.</span>
<span class="sd"> &quot;&quot;&quot;</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">&quot;&quot;&quot;</span>
<span class="sd"> Internal handler for writing to the device.</span>
<span class="sd"> &quot;&quot;&quot;</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>

<span class="k">def</span> <span class="nf">_on_zone_fault</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">&quot;&quot;&quot;</span>
<span class="sd"> Internal handler for zone faults.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">on_zone_fault</span><span class="p">(</span><span class="n">args</span><span class="p">)</span>

<span class="k">def</span> <span class="nf">_on_zone_restore</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">&quot;&quot;&quot;</span>
<span class="sd"> Internal handler for zone restoration.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">on_zone_restore</span><span class="p">(</span><span class="n">args</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">pyad2 documentation</a> &raquo;</li>
<li><a href="../index.html" >Module code</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2013, Author.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2b1.
</div>
</body>
</html>

docs/pyad2.event.rst → docs/_build/html/_sources/alarmdecoder.event.txt View File


docs/pyad2.rst → docs/_build/html/_sources/alarmdecoder.txt View File


+ 3
- 3
docs/_build/html/_sources/index.txt View File

@@ -1,9 +1,9 @@
.. pyad2 documentation master file, created by
.. alarmdecoder 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 pyad2's documentation!
Welcome to alarmdecoder's documentation!
====================================

Contents:
@@ -11,7 +11,7 @@ Contents:
.. toctree::
:maxdepth: 4

pyad2
alarmdecoder


Indices and tables


+ 3
- 3
docs/_build/html/_sources/modules.txt View File

@@ -1,7 +1,7 @@
pyad2
========
alarmdecoder
============

.. toctree::
:maxdepth: 4

pyad2
alarmdecoder

docs/_build/html/pyad2.event.html → docs/_build/html/alarmdecoder.event.html View File

@@ -6,7 +6,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>event Package &mdash; pyad2 documentation</title>
<title>event Package &mdash; alarmdecoder documentation</title>
<link rel="stylesheet" href="_static/default.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -23,9 +23,9 @@
<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="pyad2 documentation" href="index.html" />
<link rel="up" title="pyad2 Package" href="pyad2.html" />
<link rel="prev" title="pyad2 Package" href="pyad2.html" />
<link rel="top" title="alarmdecoder documentation" href="index.html" />
<link rel="up" title="alarmdecoder Package" href="alarmdecoder.html" />
<link rel="prev" title="alarmdecoder Package" href="alarmdecoder.html" />
</head>
<body>
<div class="related">
@@ -38,10 +38,10 @@
<a href="py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="right" >
<a href="pyad2.html" title="pyad2 Package"
<a href="alarmdecoder.html" title="alarmdecoder Package"
accesskey="P">previous</a> |</li>
<li><a href="index.html">pyad2 documentation</a> &raquo;</li>
<li><a href="pyad2.html" accesskey="U">pyad2 Package</a> &raquo;</li>
<li><a href="index.html">alarmdecoder documentation</a> &raquo;</li>
<li><a href="alarmdecoder.html" accesskey="U">alarmdecoder Package</a> &raquo;</li>
</ul>
</div>

@@ -54,40 +54,40 @@
<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-pyad2.event"></span></div>
<div class="section" id="module-pyad2.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-pyad2.event.event" title="Permalink to this headline">¶</a></h2>
<span class="target" id="module-alarmdecoder.event"></span></div>
<div class="section" id="module-alarmdecoder.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-alarmdecoder.event.event" title="Permalink to this headline">¶</a></h2>
<dl class="class">
<dt id="pyad2.event.event.Event">
<em class="property">class </em><tt class="descclassname">pyad2.event.event.</tt><tt class="descname">Event</tt><big>(</big><em>doc=None</em><big>)</big><a class="reference internal" href="_modules/pyad2/event/event.html#Event"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pyad2.event.event.Event" title="Permalink to this definition">¶</a></dt>
<dt id="alarmdecoder.event.event.Event">
<em class="property">class </em><tt class="descclassname">alarmdecoder.event.event.</tt><tt class="descname">Event</tt><big>(</big><em>doc=None</em><big>)</big><a class="reference internal" href="_modules/alarmdecoder/event/event.html#Event"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#alarmdecoder.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="pyad2.event.event.EventHandler">
<em class="property">class </em><tt class="descclassname">pyad2.event.event.</tt><tt class="descname">EventHandler</tt><big>(</big><em>event</em>, <em>obj</em><big>)</big><a class="reference internal" href="_modules/pyad2/event/event.html#EventHandler"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pyad2.event.event.EventHandler" title="Permalink to this definition">¶</a></dt>
<dt id="alarmdecoder.event.event.EventHandler">
<em class="property">class </em><tt class="descclassname">alarmdecoder.event.event.</tt><tt class="descname">EventHandler</tt><big>(</big><em>event</em>, <em>obj</em><big>)</big><a class="reference internal" href="_modules/alarmdecoder/event/event.html#EventHandler"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#alarmdecoder.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="pyad2.event.event.EventHandler.add">
<tt class="descname">add</tt><big>(</big><em>func</em><big>)</big><a class="reference internal" href="_modules/pyad2/event/event.html#EventHandler.add"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pyad2.event.event.EventHandler.add" title="Permalink to this definition">¶</a></dt>
<dt id="alarmdecoder.event.event.EventHandler.add">
<tt class="descname">add</tt><big>(</big><em>func</em><big>)</big><a class="reference internal" href="_modules/alarmdecoder/event/event.html#EventHandler.add"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#alarmdecoder.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 &#8216;+=&#8217; operator.</p>
</dd></dl>

<dl class="method">
<dt id="pyad2.event.event.EventHandler.remove">
<tt class="descname">remove</tt><big>(</big><em>func</em><big>)</big><a class="reference internal" href="_modules/pyad2/event/event.html#EventHandler.remove"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pyad2.event.event.EventHandler.remove" title="Permalink to this definition">¶</a></dt>
<dt id="alarmdecoder.event.event.EventHandler.remove">
<tt class="descname">remove</tt><big>(</big><em>func</em><big>)</big><a class="reference internal" href="_modules/alarmdecoder/event/event.html#EventHandler.remove"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#alarmdecoder.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 &#8216;-=&#8217; operator.</p>
</dd></dl>

<dl class="method">
<dt id="pyad2.event.event.EventHandler.fire">
<tt class="descname">fire</tt><big>(</big><em>earg=None</em><big>)</big><a class="reference internal" href="_modules/pyad2/event/event.html#EventHandler.fire"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#pyad2.event.event.EventHandler.fire" title="Permalink to this definition">¶</a></dt>
<dt id="alarmdecoder.event.event.EventHandler.fire">
<tt class="descname">fire</tt><big>(</big><em>*args</em>, <em>**kwargs</em><big>)</big><a class="reference internal" href="_modules/alarmdecoder/event/event.html#EventHandler.fire"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#alarmdecoder.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>
<p>You can call EventHandler object itself like e(<a href="#id2"><span class="problematic" id="id3">*</span></a>args, <a href="#id4"><span class="problematic" id="id5">**</span></a>kwargs) instead of
e.fire(<a href="#id6"><span class="problematic" id="id7">*</span></a>args, <a href="#id8"><span class="problematic" id="id9">**</span></a>kwargs).</p>
</dd></dl>

</dd></dl>
@@ -105,17 +105,17 @@ e.fire(earg).</p>
<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-pyad2.event.event"><tt class="docutils literal"><span class="pre">event</span></tt> Module</a></li>
<li><a class="reference internal" href="#module-alarmdecoder.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="pyad2.html"
title="previous chapter">pyad2 Package</a></p>
<p class="topless"><a href="alarmdecoder.html"
title="previous chapter">alarmdecoder Package</a></p>
<h3>This Page</h3>
<ul class="this-page-menu">
<li><a href="_sources/pyad2.event.txt"
<li><a href="_sources/alarmdecoder.event.txt"
rel="nofollow">Show Source</a></li>
</ul>
<div id="searchbox" style="display: none">
@@ -145,14 +145,14 @@ e.fire(earg).</p>
<a href="py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="right" >
<a href="pyad2.html" title="pyad2 Package"
<a href="alarmdecoder.html" title="alarmdecoder Package"
>previous</a> |</li>
<li><a href="index.html">pyad2 documentation</a> &raquo;</li>
<li><a href="pyad2.html" >pyad2 Package</a> &raquo;</li>
<li><a href="index.html">alarmdecoder documentation</a> &raquo;</li>
<li><a href="alarmdecoder.html" >alarmdecoder Package</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2013, Author.
&copy; Copyright 2013, Nu Tech Software Solutions, Inc..
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2b1.
</div>
</body>

+ 1225
- 0
docs/_build/html/alarmdecoder.html
File diff suppressed because it is too large
View File


+ 158
- 341
docs/_build/html/genindex.html
File diff suppressed because it is too large
View File


+ 24
- 24
docs/_build/html/index.html View File

@@ -6,7 +6,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Welcome to pyad2’s documentation! &mdash; pyad2 documentation</title>
<title>Welcome to alarmdecoder’s documentation! &mdash; alarmdecoder documentation</title>
<link rel="stylesheet" href="_static/default.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -23,8 +23,8 @@
<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="pyad2 documentation" href="#" />
<link rel="next" title="pyad2 Package" href="pyad2.html" />
<link rel="top" title="alarmdecoder documentation" href="#" />
<link rel="next" title="alarmdecoder Package" href="alarmdecoder.html" />
</head>
<body>
<div class="related">
@@ -37,9 +37,9 @@
<a href="py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="right" >
<a href="pyad2.html" title="pyad2 Package"
<a href="alarmdecoder.html" title="alarmdecoder Package"
accesskey="N">next</a> |</li>
<li><a href="#">pyad2 documentation</a> &raquo;</li>
<li><a href="#">alarmdecoder documentation</a> &raquo;</li>
</ul>
</div>

@@ -48,22 +48,22 @@
<div class="bodywrapper">
<div class="body">
<div class="section" id="welcome-to-pyad2-s-documentation">
<h1>Welcome to pyad2&#8217;s documentation!<a class="headerlink" href="#welcome-to-pyad2-s-documentation" title="Permalink to this headline">¶</a></h1>
<div class="section" id="welcome-to-alarmdecoder-s-documentation">
<h1>Welcome to alarmdecoder&#8217;s documentation!<a class="headerlink" href="#welcome-to-alarmdecoder-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="pyad2.html">pyad2 Package</a><ul>
<li class="toctree-l2"><a class="reference internal" href="pyad2.html#module-pyad2.ad2"><tt class="docutils literal"><span class="pre">ad2</span></tt> Module</a></li>
<li class="toctree-l2"><a class="reference internal" href="pyad2.html#module-pyad2.devices"><tt class="docutils literal"><span class="pre">devices</span></tt> Module</a></li>
<li class="toctree-l2"><a class="reference internal" href="pyad2.html#module-pyad2.util"><tt class="docutils literal"><span class="pre">util</span></tt> Module</a></li>
<li class="toctree-l2"><a class="reference internal" href="pyad2.html#module-pyad2.zonetracking"><tt class="docutils literal"><span class="pre">zonetracking</span></tt> Module</a></li>
<li class="toctree-l2"><a class="reference internal" href="pyad2.html#module-pyad2.panels"><tt class="docutils literal"><span class="pre">panels</span></tt> Module</a></li>
<li class="toctree-l2"><a class="reference internal" href="pyad2.html#module-pyad2.messages"><tt class="docutils literal"><span class="pre">messages</span></tt> Module</a></li>
<li class="toctree-l2"><a class="reference internal" href="pyad2.html#subpackages">Subpackages</a><ul>
<li class="toctree-l3"><a class="reference internal" href="pyad2.event.html">event Package</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pyad2.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="pyad2.event.html#module-pyad2.event.event"><tt class="docutils literal"><span class="pre">event</span></tt> Module</a></li>
<li class="toctree-l1"><a class="reference internal" href="alarmdecoder.html">alarmdecoder Package</a><ul>
<li class="toctree-l2"><a class="reference internal" href="alarmdecoder.html#alarmdecoder-module"><tt class="docutils literal"><span class="pre">alarmdecoder</span></tt> Module</a></li>
<li class="toctree-l2"><a class="reference internal" href="alarmdecoder.html#module-alarmdecoder.devices"><tt class="docutils literal"><span class="pre">devices</span></tt> Module</a></li>
<li class="toctree-l2"><a class="reference internal" href="alarmdecoder.html#module-alarmdecoder.util"><tt class="docutils literal"><span class="pre">util</span></tt> Module</a></li>
<li class="toctree-l2"><a class="reference internal" href="alarmdecoder.html#module-alarmdecoder.zonetracking"><tt class="docutils literal"><span class="pre">zonetracking</span></tt> Module</a></li>
<li class="toctree-l2"><a class="reference internal" href="alarmdecoder.html#module-alarmdecoder.panels"><tt class="docutils literal"><span class="pre">panels</span></tt> Module</a></li>
<li class="toctree-l2"><a class="reference internal" href="alarmdecoder.html#module-alarmdecoder.messages"><tt class="docutils literal"><span class="pre">messages</span></tt> Module</a></li>
<li class="toctree-l2"><a class="reference internal" href="alarmdecoder.html#subpackages">Subpackages</a><ul>
<li class="toctree-l3"><a class="reference internal" href="alarmdecoder.event.html">event Package</a><ul>
<li class="toctree-l4"><a class="reference internal" href="alarmdecoder.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="alarmdecoder.event.html#module-alarmdecoder.event.event"><tt class="docutils literal"><span class="pre">event</span></tt> Module</a></li>
</ul>
</li>
</ul>
@@ -90,15 +90,15 @@
<div class="sphinxsidebarwrapper">
<h3><a href="#">Table Of Contents</a></h3>
<ul>
<li><a class="reference internal" href="#">Welcome to pyad2&#8217;s documentation!</a><ul>
<li><a class="reference internal" href="#">Welcome to alarmdecoder&#8217;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="pyad2.html"
title="next chapter">pyad2 Package</a></p>
<p class="topless"><a href="alarmdecoder.html"
title="next chapter">alarmdecoder Package</a></p>
<h3>This Page</h3>
<ul class="this-page-menu">
<li><a href="_sources/index.txt"
@@ -131,13 +131,13 @@
<a href="py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="right" >
<a href="pyad2.html" title="pyad2 Package"
<a href="alarmdecoder.html" title="alarmdecoder Package"
>next</a> |</li>
<li><a href="#">pyad2 documentation</a> &raquo;</li>
<li><a href="#">alarmdecoder documentation</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2013, Author.
&copy; Copyright 2013, Nu Tech Software Solutions, Inc..
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2b1.
</div>
</body>

+ 18
- 18
docs/_build/html/modules.html View File

@@ -6,7 +6,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>pyad2 &mdash; pyad2 documentation</title>
<title>alarmdecoder &mdash; alarmdecoder documentation</title>
<link rel="stylesheet" href="_static/default.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -23,7 +23,7 @@
<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="pyad2 documentation" href="index.html" />
<link rel="top" title="alarmdecoder documentation" href="index.html" />
</head>
<body>
<div class="related">
@@ -35,7 +35,7 @@
<li class="right" >
<a href="py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="index.html">pyad2 documentation</a> &raquo;</li>
<li><a href="index.html">alarmdecoder documentation</a> &raquo;</li>
</ul>
</div>

@@ -44,21 +44,21 @@
<div class="bodywrapper">
<div class="body">
<div class="section" id="pyad2">
<h1>pyad2<a class="headerlink" href="#pyad2" title="Permalink to this headline">¶</a></h1>
<div class="section" id="alarmdecoder">
<h1>alarmdecoder<a class="headerlink" href="#alarmdecoder" title="Permalink to this headline">¶</a></h1>
<div class="toctree-wrapper compound">
<ul>
<li class="toctree-l1"><a class="reference internal" href="pyad2.html">pyad2 Package</a><ul>
<li class="toctree-l2"><a class="reference internal" href="pyad2.html#module-pyad2.ad2"><tt class="docutils literal"><span class="pre">ad2</span></tt> Module</a></li>
<li class="toctree-l2"><a class="reference internal" href="pyad2.html#module-pyad2.devices"><tt class="docutils literal"><span class="pre">devices</span></tt> Module</a></li>
<li class="toctree-l2"><a class="reference internal" href="pyad2.html#module-pyad2.util"><tt class="docutils literal"><span class="pre">util</span></tt> Module</a></li>
<li class="toctree-l2"><a class="reference internal" href="pyad2.html#module-pyad2.zonetracking"><tt class="docutils literal"><span class="pre">zonetracking</span></tt> Module</a></li>
<li class="toctree-l2"><a class="reference internal" href="pyad2.html#module-pyad2.panels"><tt class="docutils literal"><span class="pre">panels</span></tt> Module</a></li>
<li class="toctree-l2"><a class="reference internal" href="pyad2.html#module-pyad2.messages"><tt class="docutils literal"><span class="pre">messages</span></tt> Module</a></li>
<li class="toctree-l2"><a class="reference internal" href="pyad2.html#subpackages">Subpackages</a><ul>
<li class="toctree-l3"><a class="reference internal" href="pyad2.event.html">event Package</a><ul>
<li class="toctree-l4"><a class="reference internal" href="pyad2.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="pyad2.event.html#module-pyad2.event.event"><tt class="docutils literal"><span class="pre">event</span></tt> Module</a></li>
<li class="toctree-l1"><a class="reference internal" href="alarmdecoder.html">alarmdecoder Package</a><ul>
<li class="toctree-l2"><a class="reference internal" href="alarmdecoder.html#alarmdecoder-module"><tt class="docutils literal"><span class="pre">alarmdecoder</span></tt> Module</a></li>
<li class="toctree-l2"><a class="reference internal" href="alarmdecoder.html#module-alarmdecoder.devices"><tt class="docutils literal"><span class="pre">devices</span></tt> Module</a></li>
<li class="toctree-l2"><a class="reference internal" href="alarmdecoder.html#module-alarmdecoder.util"><tt class="docutils literal"><span class="pre">util</span></tt> Module</a></li>
<li class="toctree-l2"><a class="reference internal" href="alarmdecoder.html#module-alarmdecoder.zonetracking"><tt class="docutils literal"><span class="pre">zonetracking</span></tt> Module</a></li>
<li class="toctree-l2"><a class="reference internal" href="alarmdecoder.html#module-alarmdecoder.panels"><tt class="docutils literal"><span class="pre">panels</span></tt> Module</a></li>
<li class="toctree-l2"><a class="reference internal" href="alarmdecoder.html#module-alarmdecoder.messages"><tt class="docutils literal"><span class="pre">messages</span></tt> Module</a></li>
<li class="toctree-l2"><a class="reference internal" href="alarmdecoder.html#subpackages">Subpackages</a><ul>
<li class="toctree-l3"><a class="reference internal" href="alarmdecoder.event.html">event Package</a><ul>
<li class="toctree-l4"><a class="reference internal" href="alarmdecoder.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="alarmdecoder.event.html#module-alarmdecoder.event.event"><tt class="docutils literal"><span class="pre">event</span></tt> Module</a></li>
</ul>
</li>
</ul>
@@ -106,11 +106,11 @@
<li class="right" >
<a href="py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="index.html">pyad2 documentation</a> &raquo;</li>
<li><a href="index.html">alarmdecoder documentation</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2013, Author.
&copy; Copyright 2013, Nu Tech Software Solutions, Inc..
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2b1.
</div>
</body>

BIN
docs/_build/html/objects.inv View File


+ 16
- 21
docs/_build/html/py-modindex.html View File

@@ -6,7 +6,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Python Module Index &mdash; pyad2 documentation</title>
<title>Python Module Index &mdash; alarmdecoder documentation</title>
<link rel="stylesheet" href="_static/default.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -23,7 +23,7 @@
<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="pyad2 documentation" href="index.html" />
<link rel="top" title="alarmdecoder documentation" href="index.html" />


@@ -38,7 +38,7 @@
<li class="right" >
<a href="#" title="Python Module Index"
>modules</a> |</li>
<li><a href="index.html">pyad2 documentation</a> &raquo;</li>
<li><a href="index.html">alarmdecoder documentation</a> &raquo;</li>
</ul>
</div>

@@ -51,58 +51,53 @@
<h1>Python Module Index</h1>

<div class="modindex-jumpbox">
<a href="#cap-p"><strong>p</strong></a>
<a href="#cap-a"><strong>a</strong></a>
</div>

<table class="indextable modindextable" cellspacing="0" cellpadding="2">
<tr class="pcap"><td></td><td>&nbsp;</td><td></td></tr>
<tr class="cap" id="cap-p"><td></td><td>
<strong>p</strong></td><td></td></tr>
<tr class="cap" id="cap-a"><td></td><td>
<strong>a</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">pyad2</tt></td><td>
<tt class="xref">alarmdecoder</tt></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&nbsp;&nbsp;&nbsp;
<a href="pyad2.html#module-pyad2.ad2"><tt class="xref">pyad2.ad2</tt></a></td><td>
<a href="alarmdecoder.html#module-alarmdecoder.devices"><tt class="xref">alarmdecoder.devices</tt></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&nbsp;&nbsp;&nbsp;
<a href="pyad2.html#module-pyad2.devices"><tt class="xref">pyad2.devices</tt></a></td><td>
<a href="alarmdecoder.event.html#module-alarmdecoder.event"><tt class="xref">alarmdecoder.event</tt></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&nbsp;&nbsp;&nbsp;
<a href="pyad2.event.html#module-pyad2.event"><tt class="xref">pyad2.event</tt></a></td><td>
<a href="alarmdecoder.event.html#module-alarmdecoder.event.event"><tt class="xref">alarmdecoder.event.event</tt></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&nbsp;&nbsp;&nbsp;
<a href="pyad2.event.html#module-pyad2.event.event"><tt class="xref">pyad2.event.event</tt></a></td><td>
<a href="alarmdecoder.html#module-alarmdecoder.messages"><tt class="xref">alarmdecoder.messages</tt></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&nbsp;&nbsp;&nbsp;
<a href="pyad2.html#module-pyad2.messages"><tt class="xref">pyad2.messages</tt></a></td><td>
<a href="alarmdecoder.html#module-alarmdecoder.panels"><tt class="xref">alarmdecoder.panels</tt></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&nbsp;&nbsp;&nbsp;
<a href="pyad2.html#module-pyad2.panels"><tt class="xref">pyad2.panels</tt></a></td><td>
<a href="alarmdecoder.html#module-alarmdecoder.util"><tt class="xref">alarmdecoder.util</tt></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&nbsp;&nbsp;&nbsp;
<a href="pyad2.html#module-pyad2.util"><tt class="xref">pyad2.util</tt></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
<td></td>
<td>&nbsp;&nbsp;&nbsp;
<a href="pyad2.html#module-pyad2.zonetracking"><tt class="xref">pyad2.zonetracking</tt></a></td><td>
<a href="alarmdecoder.html#module-alarmdecoder.zonetracking"><tt class="xref">alarmdecoder.zonetracking</tt></a></td><td>
<em></em></td></tr>
</table>

@@ -138,11 +133,11 @@
<li class="right" >
<a href="#" title="Python Module Index"
>modules</a> |</li>
<li><a href="index.html">pyad2 documentation</a> &raquo;</li>
<li><a href="index.html">alarmdecoder documentation</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2013, Author.
&copy; Copyright 2013, Nu Tech Software Solutions, Inc..
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2b1.
</div>
</body>

+ 0
- 1521
docs/_build/html/pyad2.html
File diff suppressed because it is too large
View File


+ 5
- 5
docs/_build/html/search.html View File

@@ -6,7 +6,7 @@
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Search &mdash; pyad2 documentation</title>
<title>Search &mdash; alarmdecoder documentation</title>
<link rel="stylesheet" href="_static/default.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
@@ -24,7 +24,7 @@
<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="pyad2 documentation" href="index.html" />
<link rel="top" title="alarmdecoder documentation" href="index.html" />
<script type="text/javascript">
jQuery(function() { Search.loadIndex("searchindex.js"); });
</script>
@@ -43,7 +43,7 @@
<li class="right" >
<a href="py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="index.html">pyad2 documentation</a> &raquo;</li>
<li><a href="index.html">alarmdecoder documentation</a> &raquo;</li>
</ul>
</div>

@@ -94,11 +94,11 @@
<li class="right" >
<a href="py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li><a href="index.html">pyad2 documentation</a> &raquo;</li>
<li><a href="index.html">alarmdecoder documentation</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2013, Author.
&copy; Copyright 2013, Nu Tech Software Solutions, Inc..
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2b1.
</div>
</body>

+ 1
- 1
docs/_build/html/searchindex.js
File diff suppressed because it is too large
View File


docs/_build/html/_sources/pyad2.event.txt → docs/alarmdecoder.event.rst View File

@@ -4,7 +4,7 @@ event Package
:mod:`event` Package
--------------------

.. automodule:: pyad2.event
.. automodule:: alarmdecoder.event
:members:
:undoc-members:
:show-inheritance:
@@ -12,7 +12,7 @@ event Package
:mod:`event` Module
-------------------

.. automodule:: pyad2.event.event
.. automodule:: alarmdecoder.event.event
:members:
:undoc-members:
:show-inheritance:

docs/_build/html/_sources/pyad2.txt → docs/alarmdecoder.rst View File

@@ -1,10 +1,10 @@
pyad2 Package
alarmdecoder Package
================

:mod:`ad2` Module
:mod:`alarmdecoder` Module
--------------------

.. automodule:: pyad2.ad2
.. automodule:: alarmdecoder.alarmdecoder
:members:
:undoc-members:
:show-inheritance:
@@ -12,7 +12,7 @@ pyad2 Package
:mod:`devices` Module
---------------------

.. automodule:: pyad2.devices
.. automodule:: alarmdecoder.devices
:members:
:undoc-members:
:show-inheritance:
@@ -20,7 +20,7 @@ pyad2 Package
:mod:`util` Module
------------------

.. automodule:: pyad2.util
.. automodule:: alarmdecoder.util
:members:
:undoc-members:
:show-inheritance:
@@ -28,7 +28,7 @@ pyad2 Package
:mod:`zonetracking` Module
--------------------------

.. automodule:: pyad2.zonetracking
.. automodule:: alarmdecoder.zonetracking
:members:
:undoc-members:
:show-inheritance:
@@ -36,7 +36,7 @@ pyad2 Package
:mod:`panels` Module
--------------------

.. automodule:: pyad2.panels
.. automodule:: alarmdecoder.panels
:members:
:undoc-members:
:show-inheritance:
@@ -44,7 +44,7 @@ pyad2 Package
:mod:`messages` Module
----------------------

.. automodule:: pyad2.messages
.. automodule:: alarmdecoder.messages
:members:
:undoc-members:
:show-inheritance:
@@ -54,5 +54,5 @@ Subpackages

.. toctree::

pyad2.event
alarmdecoder.event


Loading…
Cancel
Save