<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://wiki.openlighting.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=66.92.11.32</id>
		<title>wiki.openlighting.org - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="https://wiki.openlighting.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=66.92.11.32"/>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php/Special:Contributions/66.92.11.32"/>
		<updated>2026-07-04T08:33:06Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.29.1</generator>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OLA_on_Linux&amp;diff=4188</id>
		<title>OLA on Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=OLA_on_Linux&amp;diff=4188"/>
				<updated>2012-05-15T04:30:16Z</updated>
		
		<summary type="html">&lt;p&gt;66.92.11.32: /* Debian / Ubuntu */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This describes how to get [[OLA]] working on a Linux system either from the git repo or by using a [http://code.google.com/p/linux-lighting/downloads/list released tarball].&lt;br /&gt;
&lt;br /&gt;
=Install dependencies =&lt;br /&gt;
&lt;br /&gt;
You need a couple of libraries installed for everything to work correctly. Some of these are available as packages in distros but others need to be downloaded and built manually.&lt;br /&gt;
&lt;br /&gt;
First you'll need at least the following:&lt;br /&gt;
* cppunit&lt;br /&gt;
* uuid or ossp uuid&lt;br /&gt;
* pkg-config&lt;br /&gt;
* curses&lt;br /&gt;
* lex (or flex)&lt;br /&gt;
* yacc (or bison)&lt;br /&gt;
* the protocol buffers library   [http://code.google.com/p/protobuf/ http://code.google.com/p/protobuf/] (version 2.3.0 or later)&lt;br /&gt;
* microhttpd  [ftp://ftp.gnu.org/gnu/libmicrohttpd/ ftp://ftp.gnu.org/gnu/libmicrohttpd/] (if you want the web UI). You need version &amp;gt;= 0.4.0 of microhttpd&lt;br /&gt;
&lt;br /&gt;
If you're building from git you'll also need the following:&lt;br /&gt;
&lt;br /&gt;
* libtool&lt;br /&gt;
* automake&lt;br /&gt;
* autoconf&lt;br /&gt;
&lt;br /&gt;
== Debian / Ubuntu ==&lt;br /&gt;
&lt;br /&gt;
Debian/Ubuntu users can install them with apt:&lt;br /&gt;
&lt;br /&gt;
  sudo apt-get install libcppunit-dev libcppunit-1.12-1 uuid-dev pkg-config libncurses5-dev libtool autoconf automake  g++ libmicrohttpd-dev libmicrohttpd5 protobuf-c-compiler libprotobuf-lite7 python-protobuf libprotobuf-dev zlib1g-dev bison flex&lt;br /&gt;
&lt;br /&gt;
Note: More recent distributions may offer libprotobuf-lite7 instead of libprotobuf-lite6, which is an acceptable substitution.&lt;br /&gt;
&lt;br /&gt;
If you're using Ubuntu 11.04 or later you can just use the command above. The versions of libprotobuf in earlier versions of Ubuntu are too old, so you'll need to install them by hand.&lt;br /&gt;
&lt;br /&gt;
== Other Distributions ==&lt;br /&gt;
&lt;br /&gt;
Install using your package manager, or build everything by hand&lt;br /&gt;
&lt;br /&gt;
If you installed things by hand (rather than using your package manager), you need to run ldconfig as root to pick up the new libraries&lt;br /&gt;
&lt;br /&gt;
  sudo  ldconfig&lt;br /&gt;
&lt;br /&gt;
=Checkout or Download an Archive=&lt;br /&gt;
&lt;br /&gt;
You can either download a tarball, or pull the latest version from the git repo&lt;br /&gt;
&lt;br /&gt;
== Tarball ==&lt;br /&gt;
&lt;br /&gt;
Download the most recent tarball from http://code.google.com/p/linux-lighting/downloads/list&lt;br /&gt;
Extract using&lt;br /&gt;
&lt;br /&gt;
  tar -zxf ola-0.X.Y.tar.gz&lt;br /&gt;
&lt;br /&gt;
== Git ==&lt;br /&gt;
&lt;br /&gt;
If you don't have '''git''' yet, you'll need to install it with your distro's package manager. On Debian / Ubuntu run:&lt;br /&gt;
&lt;br /&gt;
  apt-get install git&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Check out the git repo with the following command:&lt;br /&gt;
&lt;br /&gt;
  git clone https://code.google.com/p/linux-lighting/ ola&lt;br /&gt;
&lt;br /&gt;
{{ MacOLABuild }}&lt;br /&gt;
&lt;br /&gt;
Finally run ldconfig so you can use the new libraries.&lt;br /&gt;
&lt;br /&gt;
  sudo ldconfig&lt;br /&gt;
&lt;br /&gt;
=Device drivers=&lt;br /&gt;
Note that, for some devices, it is necessary to install drivers for OLA to work with them. For example, the [[Open DMX USB]] device needs an additional kernel module that could be built using the instuctions on [[LLA_and_Q_Light_Controller_Ubuntu_Tutorial]]. For other devices, refer to the corresponding device page on this wiki.&lt;br /&gt;
&lt;br /&gt;
=Known Issues=&lt;br /&gt;
&lt;br /&gt;
If you get an error like the following:&lt;br /&gt;
&lt;br /&gt;
 /bin/sh ./libtool --tag=CC   --mode=compile gcc -DHAVE_CONFIG_H -I.   -I/opt/local/var/macports/software/protobuf-cpp/2.0.3_0/opt/local/include/  -g -O2 -c -o ltdl.lo ltdl.c&lt;br /&gt;
 ./libtool: line 464: CDPATH: command not found&lt;br /&gt;
 /Users/simonn/lighting/lla/libltdl/libtool: line 464: CDPATH: command not found&lt;br /&gt;
 /Users/simonn/lighting/lla/libltdl/libtool: line 1142: func_opt_split: command not found&lt;br /&gt;
 libtool: Version mismatch error.  This is libtool 2.2.6, but the&lt;br /&gt;
 libtool: definition of this LT_INIT comes from an older release.&lt;br /&gt;
 libtool: You should recreate aclocal.m4 with macros from libtool 2.2.6&lt;br /&gt;
 libtool: and run autoconf again.&lt;br /&gt;
&lt;br /&gt;
Your system uses a different version of libtool. Run:&lt;br /&gt;
&lt;br /&gt;
  libtoolize --ltdl -c -f&lt;br /&gt;
&lt;br /&gt;
and then start from the autoreconf step again.&lt;br /&gt;
&lt;br /&gt;
If you should get the following error try to fix it with one of [http://groups.google.com/group/open-lighting/msg/72060f6327d30df6 two available solutions]:&lt;br /&gt;
&lt;br /&gt;
 Rpc.pb.cc: In copy constructor 'ola::rpc::RpcMessage::RpcMessage(const ola::rpc::RpcMessage&amp;amp;)': &lt;br /&gt;
 Rpc.pb.cc:143: error: base class 'class google::protobuf::Message' should be explicitly initialized in the copy constructor &lt;br /&gt;
&lt;br /&gt;
You should be able to prevent this by [http://groups.google.com/group/open-lighting/msg/c6d86d03dd74ed5b editing &amp;lt;code&amp;gt;./src/Makefile.am&amp;lt;/code&amp;gt;], removing &amp;lt;code&amp;gt;-Werror&amp;lt;/code&amp;gt; and then start from the autoreconfig step again.&lt;/div&gt;</summary>
		<author><name>66.92.11.32</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OLA_DMX_Trigger&amp;diff=4037</id>
		<title>OLA DMX Trigger</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=OLA_DMX_Trigger&amp;diff=4037"/>
				<updated>2011-12-26T19:16:36Z</updated>
		
		<summary type="html">&lt;p&gt;66.92.11.32: /* Usage */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ola_trigger executes programs based on the values of DMX512 data. This allows a lighting console to trigger events on a computer, like playing music samples, advancing slides in presentations etc. . ola_trigger supports variable assignment, which offers a flexible way to control the behavior of the programs with the DMX512 data.&lt;br /&gt;
&lt;br /&gt;
= Config File Syntax =&lt;br /&gt;
&lt;br /&gt;
The config file defines the mapping of slot values to actions. Each line is a directive and directives are either ''action definitions'' or ''variable assignment''. The order of directives within the config file doesn't matter - actions are triggered in the order of their slot numbers.&lt;br /&gt;
&lt;br /&gt;
Any characters between a '#' and the end of the line are comments and are ignored.&lt;br /&gt;
&lt;br /&gt;
== Action Definitions  ==&lt;br /&gt;
&lt;br /&gt;
Action definitions are specified one per line, in the following form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Slot Number]   [Slot Values]   [Action]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The columns must be separated by whitespace.&lt;br /&gt;
&lt;br /&gt;
=== Slot Number ===&lt;br /&gt;
&lt;br /&gt;
The first column, slot number, specifies the DMX512 slot the action is valid for. Slot numbers range from 0 to 511. Slot numbers may be offset by using the --offset option (see the Usage section below). &lt;br /&gt;
&lt;br /&gt;
=== Slot Values ===&lt;br /&gt;
&lt;br /&gt;
The second column controls which DMX512 values trigger the action.  Slot values range from 0 to 255. Multiple values are separated by commas. Ranges can be specified with a hyphen. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1,2,3,4   # Values 1 through to 4&lt;br /&gt;
1-4,10-14 # Values 1 to 4 and 10 to 14 (inclusive)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The % character the is default match. It triggers for all values that don't have an explicit action configured&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0-100  # Values 0 to 100&lt;br /&gt;
%      # Triggers for everything else (101 - 255)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Actions are only triggered when the value changes. In the example above, if the value of slot 0 in the previous frame was 10, and a frame with slot 0 @ 10 arrived, the action will not be triggered. If a frame with slot 0 @ 5 arrives, the action will trigger again. &lt;br /&gt;
&lt;br /&gt;
=== Actions ===&lt;br /&gt;
&lt;br /&gt;
The third column specifies the action to run. Actions can be either variable assignments or commands.&lt;br /&gt;
&lt;br /&gt;
==== Variable Assignment ====&lt;br /&gt;
&lt;br /&gt;
Variables can be assigned values which can then be used in later commands. Variable assignments are in the form&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
variable=value&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The value must be quoted if it contains whitespace:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
variable=&amp;quot;a quoted value&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Commands ====&lt;br /&gt;
&lt;br /&gt;
Commands are enclosed in back ticks (`). Command arguments are separated by whitespace, quotes can be used with arguments that contain whitespace.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
`echo hello world`  # Execute the '''echo''' command with two arguments [hello, world]&lt;br /&gt;
`echo &amp;quot;hello world&amp;quot;` # Execute the '''echo''' command with single argument &amp;quot;hello world&amp;quot;.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Variables are specified with ${ }. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
`echo ${foo}` # Run echo with the value of the foo variable.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Variables can be nested, which means you can do things like&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# if i=1 and count_1=foo&lt;br /&gt;
`echo ${count_${i}}`   # runs echo foo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Full Action Definition Example ===&lt;br /&gt;
&lt;br /&gt;
Putting everything together, the following will run `echo hello world` whenever the value of the first DMX slot changes to 0, 5 or 10.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0    0,5,10    `echo hello world`&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Variables ==&lt;br /&gt;
&lt;br /&gt;
Variables can be assigned default values using the same syntax as variable assignment actions:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# set the default value of foo&lt;br /&gt;
foo=bar&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Special Variables ===&lt;br /&gt;
&lt;br /&gt;
The variables ${slot_offset} and ${slot_value} are available for use within commands. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0    %   `echo &amp;quot;Slot ${slot_offset} is at ${slot_value}&amp;quot;`&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should always use ${slot_offset} rather than hard coding slot numbers within command definitions, since the slot number may change with the --offset option.&lt;br /&gt;
&lt;br /&gt;
= Usage =&lt;br /&gt;
&lt;br /&gt;
Before running ola_trigger, make sure that olad is running and the universe has been configured with a DMX512 source. The config file is provided on the command line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ola_trigger example.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Some useful options include:&lt;br /&gt;
; -l, --log-level &amp;lt;level&amp;gt;&lt;br /&gt;
: This change the logging level, valid values are 0 (minimum logging) to 4 (full logs). At log level 3 (INFO) and above, all actions (variable assignments and commands) will be logged.  &lt;br /&gt;
;-o, --offset &amp;lt;slot_offset&amp;gt;&lt;br /&gt;
: This applies an offset to the configured slots. For example if the config file contains definitions for slots 0 and 1, if ola_trigger is run with -o 10 it will watch for values on slots 10 and 11. Defaults to 0.&lt;br /&gt;
; -u, --universe &amp;lt;universe&amp;gt;&lt;br /&gt;
: Specifies the universe to use. Defaults to 1.&lt;br /&gt;
&lt;br /&gt;
= Sample Configs =&lt;br /&gt;
&lt;br /&gt;
Sample configs are provided in the [http://code.google.com/p/linux-lighting/source/browse/#git%2Ftools%2Fola_trigger%2Fcontrib tools/ola_trigger/contrib] directory.&lt;br /&gt;
&lt;br /&gt;
A full example config is provided in the tools/ola_trigger directory. If you have configs that may be useful to others please submit them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Example DMX Trigger Config File                                                                                                                                                               &lt;br /&gt;
&lt;br /&gt;
# Variable definitions&lt;br /&gt;
###############################################################################&lt;br /&gt;
# The default value of slot 2, this won't ever be used, since the variable is&lt;br /&gt;
# only used with slot 3, which implies we already got data for slot 2.&lt;br /&gt;
slot_2_value = &amp;quot;nan&amp;quot;  # nan isn't special in any way&lt;br /&gt;
&lt;br /&gt;
# Triggers&lt;br /&gt;
###############################################################################&lt;br /&gt;
# Slot    Trigger Values   Action&lt;br /&gt;
&lt;br /&gt;
# Slot 0 prints the current value of slot 0&lt;br /&gt;
0         %                `echo &amp;quot;Slot ${slot_offset} is at ${slot_value}&amp;quot;`&lt;br /&gt;
&lt;br /&gt;
# Slot 1 runs a different command line tools&lt;br /&gt;
1         1                `ls`&lt;br /&gt;
1         2                `ps aux`&lt;br /&gt;
1         3                `who`&lt;br /&gt;
&lt;br /&gt;
# Slot 2 sets a variable&lt;br /&gt;
2         %                slot_2_value=&amp;quot;${slot_value}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Slot 3 prints the value of slot2 if slot3 is greater than 50%&lt;br /&gt;
3         128-255          `echo &amp;quot;Previous slot is ${slot_2_value}&amp;quot;`&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>66.92.11.32</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OLA_DMX_Trigger&amp;diff=4036</id>
		<title>OLA DMX Trigger</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=OLA_DMX_Trigger&amp;diff=4036"/>
				<updated>2011-12-25T22:34:45Z</updated>
		
		<summary type="html">&lt;p&gt;66.92.11.32: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ola_trigger executes programs based on the values of DMX512 data. This allows a lighting console to trigger events on a computer, like playing music samples, advancing slides in presentations etc. . ola_trigger supports variable assignment, which offers a flexible way to control the behavior of the programs with the DMX512 data.&lt;br /&gt;
&lt;br /&gt;
= Config File Syntax =&lt;br /&gt;
&lt;br /&gt;
The config file defines the mapping of slot values to actions. Each line is a directive and directives are either ''action definitions'' or ''variable assignment''. The order of directives within the config file doesn't matter - actions are triggered in the order of their slot numbers.&lt;br /&gt;
&lt;br /&gt;
Any characters between a '#' and the end of the line are comments and are ignored.&lt;br /&gt;
&lt;br /&gt;
== Action Definitions  ==&lt;br /&gt;
&lt;br /&gt;
Action definitions are specified one per line, in the following form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Slot Number]   [Slot Values]   [Action]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The columns must be separated by whitespace.&lt;br /&gt;
&lt;br /&gt;
=== Slot Number ===&lt;br /&gt;
&lt;br /&gt;
The first column, slot number, specifies the DMX512 slot the action is valid for. Slot numbers range from 0 to 511. Slot numbers may be offset by using the --offset option (see the Usage section below). &lt;br /&gt;
&lt;br /&gt;
=== Slot Values ===&lt;br /&gt;
&lt;br /&gt;
The second column controls which DMX512 values trigger the action.  Slot values range from 0 to 255. Multiple values are separated by commas. Ranges can be specified with a hyphen. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1,2,3,4   # Values 1 through to 4&lt;br /&gt;
1-4,10-14 # Values 1 to 4 and 10 to 14 (inclusive)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The % character the is default match. It triggers for all values that don't have an explicit action configured&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0-100  # Values 0 to 100&lt;br /&gt;
%      # Triggers for everything else (101 - 255)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Actions are only triggered when the value changes. In the example above, if the value of slot 0 in the previous frame was 10, and a frame with slot 0 @ 10 arrived, the action will not be triggered. If a frame with slot 0 @ 5 arrives, the action will trigger again. &lt;br /&gt;
&lt;br /&gt;
=== Actions ===&lt;br /&gt;
&lt;br /&gt;
The third column specifies the action to run. Actions can be either variable assignments or commands.&lt;br /&gt;
&lt;br /&gt;
==== Variable Assignment ====&lt;br /&gt;
&lt;br /&gt;
Variables can be assigned values which can then be used in later commands. Variable assignments are in the form&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
variable=value&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The value must be quoted if it contains whitespace:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
variable=&amp;quot;a quoted value&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Commands ====&lt;br /&gt;
&lt;br /&gt;
Commands are enclosed in back ticks (`). Command arguments are separated by whitespace, quotes can be used with arguments that contain whitespace.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
`echo hello world`  # Execute the '''echo''' command with two arguments [hello, world]&lt;br /&gt;
`echo &amp;quot;hello world&amp;quot;` # Execute the '''echo''' command with single argument &amp;quot;hello world&amp;quot;.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Variables are specified with ${ }. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
`echo ${foo}` # Run echo with the value of the foo variable.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Variables can be nested, which means you can do things like&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# if i=1 and count_1=foo&lt;br /&gt;
`echo ${count_${i}}`   # runs echo foo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Full Action Definition Example ===&lt;br /&gt;
&lt;br /&gt;
Putting everything together, the following will run `echo hello world` whenever the value of the first DMX slot changes to 0, 5 or 10.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0    0,5,10    `echo hello world`&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Variables ==&lt;br /&gt;
&lt;br /&gt;
Variables can be assigned default values using the same syntax as variable assignment actions:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# set the default value of foo&lt;br /&gt;
foo=bar&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Special Variables ===&lt;br /&gt;
&lt;br /&gt;
The variables ${slot_offset} and ${slot_value} are available for use within commands. For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0    %   `echo &amp;quot;Slot ${slot_offset} is at ${slot_value}&amp;quot;`&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should always use ${slot_offset} rather than hard coding slot numbers within command definitions, since the slot number may change with the --offset option.&lt;br /&gt;
&lt;br /&gt;
= Usage =&lt;br /&gt;
&lt;br /&gt;
Before running ola_trigger, make sure that olad is running and the universe has been configured with a DMX512 source. The config file is provided on the command line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ola_trigger example.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Some useful options include:&lt;br /&gt;
; -l, --log-level &amp;lt;level&amp;gt;&lt;br /&gt;
: This change the logging level, valid values are 0 (minimum logging) to 4 (full logs).&lt;br /&gt;
;-o, --offset &amp;lt;slot_offset&amp;gt;&lt;br /&gt;
: This applies an offset to the configured slots. For example if the config file contains definitions for slots 0 and 1, if ola_trigger is run with -o 10 it will watch for values on slots 10 and 11. Defaults to 0.&lt;br /&gt;
; -u, --universe &amp;lt;universe&amp;gt;&lt;br /&gt;
: Specifies the universe to use. Defaults to 1.&lt;br /&gt;
&lt;br /&gt;
= Sample Configs =&lt;br /&gt;
&lt;br /&gt;
Sample configs are provided in the [http://code.google.com/p/linux-lighting/source/browse/#git%2Ftools%2Fola_trigger%2Fcontrib tools/ola_trigger/contrib] directory.&lt;br /&gt;
&lt;br /&gt;
A full example config is provided in the tools/ola_trigger directory. If you have configs that may be useful to others please submit them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Example DMX Trigger Config File                                                                                                                                                               &lt;br /&gt;
&lt;br /&gt;
# Variable definitions&lt;br /&gt;
###############################################################################&lt;br /&gt;
# The default value of slot 2, this won't ever be used, since the variable is&lt;br /&gt;
# only used with slot 3, which implies we already got data for slot 2.&lt;br /&gt;
slot_2_value = &amp;quot;nan&amp;quot;  # nan isn't special in any way&lt;br /&gt;
&lt;br /&gt;
# Triggers&lt;br /&gt;
###############################################################################&lt;br /&gt;
# Slot    Trigger Values   Action&lt;br /&gt;
&lt;br /&gt;
# Slot 0 prints the current value of slot 0&lt;br /&gt;
0         %                `echo &amp;quot;Slot ${slot_offset} is at ${slot_value}&amp;quot;`&lt;br /&gt;
&lt;br /&gt;
# Slot 1 runs a different command line tools&lt;br /&gt;
1         1                `ls`&lt;br /&gt;
1         2                `ps aux`&lt;br /&gt;
1         3                `who`&lt;br /&gt;
&lt;br /&gt;
# Slot 2 sets a variable&lt;br /&gt;
2         %                slot_2_value=&amp;quot;${slot_value}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Slot 3 prints the value of slot2 if slot3 is greater than 50%&lt;br /&gt;
3         128-255          `echo &amp;quot;Previous slot is ${slot_2_value}&amp;quot;`&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>66.92.11.32</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OLA_DMX_Trigger&amp;diff=4030</id>
		<title>OLA DMX Trigger</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=OLA_DMX_Trigger&amp;diff=4030"/>
				<updated>2011-12-24T17:12:46Z</updated>
		
		<summary type="html">&lt;p&gt;66.92.11.32: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ola_trigger executes programs based on the values of DMX512 data. This allows a lighting console to trigger events like music samples, power point presentations etc.  ola_trigger supports variable assignment, which offers a flexible way to control the behavior of the programs with DMX.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Usage =&lt;br /&gt;
&lt;br /&gt;
Before running ola_trigger, make sure that olad is running and the universe has been configured with a DMX512 source. ola_trigger reads a config file, which contains the mappings of DMX slot values to actions. The config file is provided on the command line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ola_trigger example.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Some useful options include:&lt;br /&gt;
; -l, --log-level &amp;lt;level&amp;gt;&lt;br /&gt;
: This change the logging level, valid values are 0 (minimum logging) to 4 (full logs).&lt;br /&gt;
;-o, --offset &amp;lt;slot_offset&amp;gt;&lt;br /&gt;
: This applies an offset to the configured slots. For example if the config file contains definitions for slots 0 and 1, if ola_trigger is run with -o 10 it will watch for values on slots 10 and 11. Defaults to 0.&lt;br /&gt;
; -u, --universe &amp;lt;universe&amp;gt;&lt;br /&gt;
: Specifies the universe to use. Defaults to 1.&lt;br /&gt;
&lt;br /&gt;
= Config File Syntax =&lt;br /&gt;
&lt;br /&gt;
The config file defines which commands are to be run. Each line is a directive The config file contains '''action definitions''' and '''default variable assignment'''. &lt;br /&gt;
&lt;br /&gt;
== Action Definitions  ==&lt;br /&gt;
&lt;br /&gt;
Action definitions are specified one per line, in the following form:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Slot Offset]    [Slot Values]   [Action]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The columns must be separated by whitespace.&lt;br /&gt;
&lt;br /&gt;
=== Slot Offset ===&lt;br /&gt;
&lt;br /&gt;
The first column, Slot Offset, specifies the slot the action is valid for. Slot offsets range from 0 to 511.&lt;br /&gt;
&lt;br /&gt;
=== Slot Values ===&lt;br /&gt;
&lt;br /&gt;
The second column controls which slot values trigger the action.  Slot values range from 0 to 255.&lt;br /&gt;
&lt;br /&gt;
Values are separated by commas. Ranges can be specified with a hyphen. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
1,2,3,4   # Trigger on values 1 through to 4&lt;br /&gt;
1-4,10-14 # Trigger on values 1 to 4 and 10 to 14 (inclusive)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The % character the is default match. It triggers for all values that don't have an explicit action configured&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0-100  # Values 0 to 100&lt;br /&gt;
%         # Triggers for everything else (101 - 255)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Actions are only executed when the value changes. In the example above, if the value of slot 0 in the previous frame was 10, and a frame with slot 0 @ 10 arrived, the action will not be triggered. If a frame with slot 0 @ 5 arrives, the action will execute again. &lt;br /&gt;
&lt;br /&gt;
=== Command Execution ===&lt;br /&gt;
&lt;br /&gt;
The third column specifies the action to run. Actions can be either variable assignments or commands.&lt;br /&gt;
&lt;br /&gt;
==== Variable Assignment ====&lt;br /&gt;
&lt;br /&gt;
Variables can be assigned values, and can be used in commands. Variable assignments are in the form&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
variable=value&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The value can be quoted.&lt;br /&gt;
&lt;br /&gt;
==== Commands ====&lt;br /&gt;
&lt;br /&gt;
Commands are enclosed in back ticks (`). Command arguments are separated by whitespace, quotes can be used to group arguments.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
`echo hello world`  # Execute the '''echo''' command with two arguments [hello, world]&lt;br /&gt;
`echo &amp;quot;hello world&amp;quot;` # Execute the '''echo''' command with single argument &amp;quot;hello world&amp;quot;.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Variables are specified with ${ }. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
`echo ${foo}` # Run echo with the value of the foo variable.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Variables can be nested, which means you can do things like&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# if i=1 and count_1=foo&lt;br /&gt;
`echo ${count_${i}}`   # runs echo foo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&lt;br /&gt;
As an example, the following will run `echo hello world` whenever the value of the first DMX slot changes to 0, 5 or 10.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0    0,5,10    `echo hello world`&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Variables ==&lt;br /&gt;
&lt;br /&gt;
Rather than executing a command, an action can set a variable&lt;br /&gt;
&lt;br /&gt;
=== Special Variables ===&lt;br /&gt;
&lt;br /&gt;
The variables ${slot_offset} and ${slot_value}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Comments == &lt;br /&gt;
&lt;br /&gt;
The # character comments out the rest of the text until the end of the line. This can be used at any location.&lt;br /&gt;
&lt;br /&gt;
= Example =&lt;br /&gt;
&lt;br /&gt;
A full example config is provided in the tools/ola_trigger directory.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Example DMX Trigger Config File                                                                                                                                                               &lt;br /&gt;
&lt;br /&gt;
# Variable definitions&lt;br /&gt;
###############################################################################&lt;br /&gt;
# The default value of slot 2, this won't ever be used, since the variable is&lt;br /&gt;
# only used with slot 3, which implies we already got data for slot 2.&lt;br /&gt;
slot_2_value = &amp;quot;nan&amp;quot;  # nan isn't special in any way&lt;br /&gt;
&lt;br /&gt;
# Triggers&lt;br /&gt;
###############################################################################&lt;br /&gt;
# Slot    Trigger Values   Action&lt;br /&gt;
&lt;br /&gt;
# Slot 0 prints the current value of slot 0&lt;br /&gt;
0         %                `echo &amp;quot;Slot ${slot_offset} is at ${slot_value}&amp;quot;`&lt;br /&gt;
&lt;br /&gt;
# Slot 1 runs a different command line tools&lt;br /&gt;
1         1                `ls`&lt;br /&gt;
1         2                `ps aux`&lt;br /&gt;
1         3                `who`&lt;br /&gt;
&lt;br /&gt;
# Slot 2 sets a variable&lt;br /&gt;
2         %                slot_2_value=&amp;quot;${slot_value}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Slot 3 prints the value of slot3 if slot3 is greater than 50%&lt;br /&gt;
3         128-255          `echo &amp;quot;Slot 2 is ${slot_2_value}&amp;quot;`&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>66.92.11.32</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=Open_Lighting_Architecture&amp;diff=3971</id>
		<title>Open Lighting Architecture</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=Open_Lighting_Architecture&amp;diff=3971"/>
				<updated>2011-10-21T15:28:25Z</updated>
		
		<summary type="html">&lt;p&gt;66.92.11.32: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Ola.png|right]]&lt;br /&gt;
Link: http://code.google.com/p/linux-lighting/ &amp;lt;br&amp;gt;&lt;br /&gt;
{{Features|free=yes|tx=yes|rx=yes|linux=yes|osx=yes|http=yes|rdm=yes}}&lt;br /&gt;
[[Image:Ola-download.png |right|link=http://code.google.com/p/linux-lighting/downloads/list]]&lt;br /&gt;
[[Image:Llad_home.png| thumb |200px|right|Universe Settings]]&lt;br /&gt;
[[Image:Ola-rdm.png|thumb|200px|right|RDM Devices Page]]&lt;br /&gt;
[[Image:OLA_patching.png|thumb|200px|right|Drag &amp;amp; Drop RDM Patching]]&lt;br /&gt;
[[Image:Ola-mobile.png|thumb|200px|right|Mobile UI]]&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
The Open Lighting Architecture (OLA) is part of the [[Open Lighting Project]] and provides applications with a mechanism to send and receive [[DMX512]] &amp;amp; [[RDM]] commands using hardware devices and DMX over IP protocols. This enables [[:Category:Controllers | software lighting controllers]] to communicate with hardware either via Ethernet or traditional DMX512 networks.&lt;br /&gt;
&lt;br /&gt;
OLA can also convert DMX512 data sent using DMX over IP protocols from one format to another, allowing devices from different manufacturers to interact with one another. For example a [[Strand_Lighting|Strand]] Lighting Console using ShowNet can send DMX512 to an [[Enttec]] [[DmxEtherGate MKII|EtherGate]]. When combined with a physical DMX interface such as the [[DMX USB Pro]], OLA can send and receive data from wired DMX512 networks.&lt;br /&gt;
&lt;br /&gt;
==Main Features ==&lt;br /&gt;
&lt;br /&gt;
* Supports a variety of DMX over IP Protocols and a dozen different USB DMX devices.&lt;br /&gt;
* Priority based merging of different sources.&lt;br /&gt;
* Built in web based configuration including:&lt;br /&gt;
** [[RDM]] controller&lt;br /&gt;
** Drag and drop RDM patching with an automatic patcher&lt;br /&gt;
** Custom UI for mobile devices (iPhone, Android)&lt;br /&gt;
* Command line tools which enable scripting of configuration and RDM commands.&lt;br /&gt;
* Python, C++, Objective-C++ APIs for developers to build their own applications.&lt;br /&gt;
* Runs on Mac OS X (ppc, i386, x86_64) &amp;amp; Linux ( i386, x86-64, arm).&lt;br /&gt;
* Source code is open and available at no cost.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A port to Windows is feasible if someone wants to add the necessary platform-dependent code. For now it can be run on Windows using VMWare (see [[OLA on Windows with VMWare]])&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Questions&amp;lt;/b&amp;gt;: See the [http://groups.google.com/group/open-lighting mailing list]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Bugs&amp;lt;/b&amp;gt;: Check the [http://code.google.com/p/linux-lighting/issues/list bug tracker]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Contribute&amp;lt;/b&amp;gt;: Looking to help? Visit the [[OLA Contributors]] page. The page also lists people and companies who have supported OLA. Please support them in return!&lt;br /&gt;
&lt;br /&gt;
==Supported Protocols==&lt;br /&gt;
&lt;br /&gt;
{| border=1 cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
! '''Protocol'''!! Linux !! '''Mac OS X''' &lt;br /&gt;
|-&lt;br /&gt;
|| [[:Category:ArtNet|ArtNet, ArtNet 2, ArtNet 3]]   || [[Image:Green-tick.png|center]] [[Image:Rdm.gif|center]] || [[Image:Green-tick.png|center]]  &lt;br /&gt;
[[Image:Rdm.gif|center]] &lt;br /&gt;
|-&lt;br /&gt;
|| [[E1.31]] / [[ACN]] || [[Image:Green-tick.png|center]]  || [[Image:Green-tick.png|center]] &lt;br /&gt;
|-&lt;br /&gt;
|| [[:Category:ESP Net|ESP Net]] || [[Image:Green-tick.png|center]]  || [[Image:Green-tick.png|center]] &lt;br /&gt;
|-&lt;br /&gt;
|| [[:Category:Pathport|Pathport]]  || [[Image:Green-tick.png|center]]  || [[Image:Green-tick.png|center]] &lt;br /&gt;
|-&lt;br /&gt;
|| [[:Category:Sandnet|Sandnet]] || [[Image:Green-tick.png|center]]  || [[Image:Green-tick.png|center]] &lt;br /&gt;
|-&lt;br /&gt;
|| [[:Category:ShowNet|ShowNet]] || [[Image:Green-tick.png|center]]  || [[Image:Green-tick.png|center]] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Supported Devices==&lt;br /&gt;
&lt;br /&gt;
{| border=1 cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
! '''Device'''!! Linux !! '''Mac OS X''' &lt;br /&gt;
|-&lt;br /&gt;
||  [[Anyma uDMX]] || [[Image:Trans.gif|center]] || [[Image:Trans.gif|center]] &lt;br /&gt;
|-&lt;br /&gt;
|| [[Arduino RGB Mixer]] || [[Image:Green-tick.png|center]] [[Image:Rdm.gif|center]]  || [[Image:Green-tick.png|center]] [[Image:Rdm.gif|center]] &lt;br /&gt;
|-&lt;br /&gt;
|| [[DMX 4 Linux]] || [[Image:Trans.gif|center]]  || &lt;br /&gt;
|-&lt;br /&gt;
|| [[DMX USB Pro]] || [[Image:Trans.gif|center]] [[Image:Recv.gif|center]] || [[Image:Trans.gif|center]] [[Image:Recv.gif|center]] &lt;br /&gt;
|-&lt;br /&gt;
|| [[DMX-TRI]] || [[Image:Trans.gif|center]] || [[Image:Trans.gif|center]] &lt;br /&gt;
|-&lt;br /&gt;
|| [[DMXking USB DMX512-A]] || [[Image:Trans.gif|center]] [[Image:Recv.gif|center]] || [[Image:Trans.gif|center]] [[Image:Recv.gif|center]] &lt;br /&gt;
|-&lt;br /&gt;
|| [[DMXter4 RDM]] / [[MiniDMXter]] || [[Image:Rdm.gif|center]] || [[Image:Rdm.gif|center]] &lt;br /&gt;
|-&lt;br /&gt;
|| [[Eurolite USB DMX512 PRO]] || [[Image:Trans.gif|center]] || [[Image:Trans.gif|center]] &lt;br /&gt;
|-&lt;br /&gt;
|| [[Open DMX USB]] || [[Image:Trans.gif|center]]  || &lt;br /&gt;
|-&lt;br /&gt;
|| [[Packetheads USB_DMX Dongle]] ||  [[Image:Green-tick.png|center]]  ||  [[Image:Green-tick.png|center]]  &lt;br /&gt;
|-&lt;br /&gt;
|| [[RDM USB Pro]] || [[Image:Trans.gif|center]]  [[Image:Recv.gif|center]]  || [[Image:Trans.gif|center]]  [[Image:Recv.gif|center]] &lt;br /&gt;
|-&lt;br /&gt;
|| [[RDM-TRI]] || [[Image:Trans.gif|center]] [[Image:Rdm.gif|center]] || [[Image:Trans.gif|center]] [[Image:Rdm.gif|center]]&lt;br /&gt;
|-&lt;br /&gt;
|| [[Robe Universal Interface]] || [[Image:Trans.gif|center]] [[Image:Rdm.gif|center]] || [[Image:Trans.gif|center]] [[Image:Rdm.gif|center]]&lt;br /&gt;
|-&lt;br /&gt;
|| [[RUNIT WTX]] || [[Image:Trans.gif|center]] [[Image:Rdm.gif|center]] || [[Image:Trans.gif|center]] [[Image:Rdm.gif|center]]&lt;br /&gt;
|-&lt;br /&gt;
|| [[StageProfi]] || [[Image:Trans.gif|center]]  || [[Image:Trans.gif|center]] (Ethernet version only)&lt;br /&gt;
|-&lt;br /&gt;
|| [http://machosehead.wordpress.com/2010/06/12/udmx_asp/ uDMX_asp] || [[Image:Trans.gif|center]]  || [[Image:Trans.gif|center]] &lt;br /&gt;
|-&lt;br /&gt;
|| [[USBDMX2]] || [[Image:Trans.gif|center]]  || [[Image:Trans.gif|center]] &lt;br /&gt;
|-&lt;br /&gt;
|| [[Velleman K8062]] || [[Image:Trans.gif|center]]  || [[Image:Trans.gif|center]] &lt;br /&gt;
|-&lt;br /&gt;
|| [[Velleman_K8062_Upgrade|VX8062]] || [[Image:Trans.gif|center]]  || [[Image:Trans.gif|center]] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Getting Started==&lt;br /&gt;
&lt;br /&gt;
Start here if you've never used OLA before and read these in order.&lt;br /&gt;
* [[Download OLA]]&lt;br /&gt;
* [[OLA on OS X]] or [[OLA on Linux]] or [[OLA on Windows with VMWare]] - How to install OLA.&lt;br /&gt;
* [[Using OLA]] - A basic introduction&lt;br /&gt;
* [[OLA Command Line Tools]] - Documentation for the tools in ola-examples&lt;br /&gt;
* [[OLA Device Specific Configuration]]&lt;br /&gt;
* [[OLA Tips &amp;amp; Tricks]]&lt;br /&gt;
* [[RDM with OLA]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Tutorials&amp;lt;/b&amp;gt;&lt;br /&gt;
* [[OlaOutput Max External]] - Setup OlaOutput on Mac OS X to send DMX messages from Max/MSP/Jitter&lt;br /&gt;
* [[OLAGuruPlug]] - Running OLA on a [http://www.globalscaletechnologies.com/c-4-guruplugs.aspx GuruPlug]&lt;br /&gt;
* [[OlaLED]] - control RGB LED via http&lt;br /&gt;
* [[OLA RDM Responder Testing]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Advanced Topics:&amp;lt;/b&amp;gt;&lt;br /&gt;
* [[OLA Merging Algorithms]]&lt;br /&gt;
* [[OLA DiffServ support]] (QOS settings)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Developer Documentation:&amp;lt;/b&amp;gt;&lt;br /&gt;
* [[OLA developer info]] - about the source code and structure&lt;br /&gt;
* [[OLA Client API]] - the C++ API&lt;br /&gt;
* [[OLA Python API]] - easy DMX programming&lt;br /&gt;
* [[Build OLA Mac Packages]] - notes for building the .dmg images&lt;br /&gt;
* [[Building OLA for Windows]] - Notes on Windows support (in progress)&lt;br /&gt;
* [[Using OLA with Xcode]] - on a Mac, in Objective-C++&lt;br /&gt;
* [[Writing RDM Responder Tests]]&lt;br /&gt;
* [[Port Throttling]] &lt;br /&gt;
* [[OLA Performance Stats]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Tutorials&amp;lt;/b&amp;gt;, these refer to the previous release but parts of them are still relevant.&lt;br /&gt;
* [[LLA Sandnet Tutorial]] - Setup Horizon using Sandnet and LLA&lt;br /&gt;
* [[LLA and Q Light Controller Ubuntu Tutorial]] - Setup LLA on Ubuntu/Debian-type distro with QLC&lt;br /&gt;
* [[LLA and Q Light Controller OSX Tutorial]] - Setup LLA on Mac OS X with QLC&lt;br /&gt;
&lt;br /&gt;
[[Category:ArtNet]]&lt;br /&gt;
[[Category:ESP Net]]&lt;br /&gt;
[[Category:E1.31]]&lt;br /&gt;
[[Category:Sandnet]]&lt;br /&gt;
[[Category:ShowNet]]&lt;br /&gt;
[[Category:Utilities]]&lt;br /&gt;
[[Category:Pathport]]&lt;/div&gt;</summary>
		<author><name>66.92.11.32</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=RDM_Discovery&amp;diff=3967</id>
		<title>RDM Discovery</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=RDM_Discovery&amp;diff=3967"/>
				<updated>2011-10-21T04:42:10Z</updated>
		
		<summary type="html">&lt;p&gt;66.92.11.32: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This documents various scenarios that should be considered when writing software that performs RDM Discovery. Unlike [[DMX]], [[RDM]] is bi-directional, which means bugs in devices / responders can cause controller to crash or go in to an infinite loop. &lt;br /&gt;
&lt;br /&gt;
This page is not a substitute for the E1.20 standard, which takes precedence over all information presented here. It simply presents situations which designers of controllers should consider when writing their software.&lt;br /&gt;
&lt;br /&gt;
== Process Overview ==&lt;br /&gt;
&lt;br /&gt;
Each responder has a unique identifier (UID) which consists of a 2 byte ESTA manufacturer ID, and a  4 byte device ID. Like a MAC address, no two responders should  have the same UID. The 'all devices' UID (ffff:ffffffff) is a broadcast address, to which all devices will listen but not necessarily take action or respond.&lt;br /&gt;
&lt;br /&gt;
There are three RDM messages used during the discovery process, all use the DISCOVERY_COMMAND Command Class.&lt;br /&gt;
&lt;br /&gt;
* DISC_UNIQUE_BRANCH, which takes two parameters, a lower and an upper UID. Any responders within this range (inclusive) must respond.&lt;br /&gt;
* DISC_MUTE&lt;br /&gt;
* DISC_UN_MUTE&lt;br /&gt;
&lt;br /&gt;
There are many different ways to implement the discovery process, one (simplified) method is described below:&lt;br /&gt;
&lt;br /&gt;
# Send a DISC_UNMUTE to the ALL DEVICES UID&lt;br /&gt;
# Send a DISC_MUTE to any previously discovered devices, if they don't respond after multiple attempts remove them from the UID list.&lt;br /&gt;
# Send a DISC_UNIQUE_BRANCH with a range of (0000:00000000, ffff:ffffffff). One of three things may happen&lt;br /&gt;
#* No response, which generally means there are no further responders to be muted&lt;br /&gt;
#* A single response with a valid checksum. In this case the controller should attempt to mute the responder (DISC_MUTE) and if that succeeds, add the responder to the list of UIDs.&lt;br /&gt;
#* A collision, in which case a controller should divide the range in two (0000:7fff:ffffffff), (8000:00000000, ffff:ffffffff) and proceed from step 3.&lt;br /&gt;
&lt;br /&gt;
If everything goes well, eventually all devices will be muted, and sending a DISC_UNIQUE_BRANCH with a range of (0000:00000000, ffff:ffffffff) will result in no responses.&lt;br /&gt;
&lt;br /&gt;
== Failure Modes ==&lt;br /&gt;
&lt;br /&gt;
=== Responders that reply outside their range ===&lt;br /&gt;
&lt;br /&gt;
Responders may have bugs in the UID inequality code, causing them to reply to DISC_UNIQUE_BRANCH which don't cover their UID.  One example may be a responder that replies when just the Manufacturer ID part of the UID matches. Depending on the type of bug, discovery can sometimes proceed in these cases and usually all other devices are found and muted first before the bad responder is located.&lt;br /&gt;
&lt;br /&gt;
The worst case is a responder that replies to every DISC_UNIQUE_BRANCH request, which usually prevents discovery of any other responders.&lt;br /&gt;
&lt;br /&gt;
=== Responders that don't reply when within range ===&lt;br /&gt;
&lt;br /&gt;
The opposite of the case above is where a responder fails to respond to a DISC_UNIQUE_BRANCH request for a range which it is part of. A common example of this is the off-by-one case, where a responder doesn't reply if it's at the endpoints of the range. This can cause responders to 'disappear' which happens when a range that previously caused a collision, produces no responses when split in two.&lt;br /&gt;
&lt;br /&gt;
Without proper detection, this can cause controllers to loop indefinitely as they try to locate the missing responders.&lt;br /&gt;
&lt;br /&gt;
=== Responders that don't reply to Mute ===&lt;br /&gt;
&lt;br /&gt;
Some responders may not reply to the MUTE_DEVICE message. This case must be differentiated from the case where the MUTE_DEVICE message is corrupted or lost so the responder never replies. The pseudo-code in the [[E1.20]] standard attempts to mute each device up to 10 times before continuing. &lt;br /&gt;
&lt;br /&gt;
=== Responders that don't mute ===&lt;br /&gt;
&lt;br /&gt;
Not to be confused with the scenario above, some responders may acknowledge the mute request but continue to respond to discovery requests. If there is only one responder that behaves this way controllers should be able to succeed, &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Proxied Devices ===&lt;br /&gt;
&lt;br /&gt;
The [[E1.20]] states that a proxy shall not provide more than one DISC_UNIQUE_BRANCH response at once. This means that once the proxy has been located and muted, controllers must continue to &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Example Implementation ==&lt;br /&gt;
&lt;br /&gt;
The implementation of the RDM discovery algorithm as used in the [[Open Lighting Architecture]] can be seen [http://code.google.com/p/linux-lighting/source/browse/common/rdm/DiscoveryAgent.cpp here] . The tests which cover the cases above are in [http://code.google.com/p/linux-lighting/source/browse/common/rdm/DiscoveryAgentTest.cpp DiscoveryAgentTest.cpp]&lt;br /&gt;
&lt;br /&gt;
[[Category:Articles]]&lt;/div&gt;</summary>
		<author><name>66.92.11.32</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=Pipe_vs_Unix_Socket_Performance&amp;diff=3915</id>
		<title>Pipe vs Unix Socket Performance</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=Pipe_vs_Unix_Socket_Performance&amp;diff=3915"/>
				<updated>2011-08-14T18:38:39Z</updated>
		
		<summary type="html">&lt;p&gt;66.92.11.32: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here are some numbers on pipe() vs socketpair() performance. The sample program used either pipe() or socketpair() to create a set of file descriptors. The main thread sent 512MB of data through the fds and then closed the sending side. A receiving thread read all the data until EOF and then exited.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Mac OS X 10.6.8 ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Pipes&lt;br /&gt;
real    0m8.501s&lt;br /&gt;
user    0m5.751s&lt;br /&gt;
sys     0m4.185s&lt;br /&gt;
&lt;br /&gt;
real    0m8.462s&lt;br /&gt;
user    0m5.721s&lt;br /&gt;
sys     0m4.078s&lt;br /&gt;
&lt;br /&gt;
Unix Sockets&lt;br /&gt;
real    0m9.782s&lt;br /&gt;
user    0m6.329s&lt;br /&gt;
sys     0m7.301s&lt;br /&gt;
&lt;br /&gt;
real    0m9.992s&lt;br /&gt;
user    0m6.360s&lt;br /&gt;
sys     0m7.417s&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Linux 2.6.26-2-amd64 == &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Pipes&lt;br /&gt;
real    0m8.376s&lt;br /&gt;
user    0m5.376s&lt;br /&gt;
sys     0m2.952s&lt;br /&gt;
&lt;br /&gt;
real    0m8.319s&lt;br /&gt;
user    0m5.184s&lt;br /&gt;
sys     0m3.096s&lt;br /&gt;
&lt;br /&gt;
Unix Sockets&lt;br /&gt;
real    0m9.469s&lt;br /&gt;
user    0m5.840s&lt;br /&gt;
sys     0m3.480s&lt;br /&gt;
&lt;br /&gt;
real    0m9.364s&lt;br /&gt;
user    0m5.500s&lt;br /&gt;
sys     0m3.792s&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Linux 2.6.32 armv5tel ==&lt;br /&gt;
&lt;br /&gt;
This benchmark only sent 51 MB of data.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Pipes&lt;br /&gt;
real    0m11.083s&lt;br /&gt;
user    0m8.560s&lt;br /&gt;
sys     0m2.480s&lt;br /&gt;
&lt;br /&gt;
real    0m12.079s&lt;br /&gt;
user    0m9.070s&lt;br /&gt;
sys     0m2.250s&lt;br /&gt;
&lt;br /&gt;
Unix Sockets&lt;br /&gt;
real    0m12.882s&lt;br /&gt;
user    0m9.920s&lt;br /&gt;
sys     0m2.930s&lt;br /&gt;
&lt;br /&gt;
real    0m11.944s&lt;br /&gt;
user    0m8.650s&lt;br /&gt;
sys     0m3.030s&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Linux 2.6.18 VM ==&lt;br /&gt;
&lt;br /&gt;
This benchmark only sent 51 MB of data because it was running in a VM.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Pipes&lt;br /&gt;
real	0m9.359s&lt;br /&gt;
user	0m2.377s&lt;br /&gt;
sys	0m1.603s&lt;br /&gt;
&lt;br /&gt;
real	0m11.233s&lt;br /&gt;
user	0m2.253s&lt;br /&gt;
sys	0m2.345s&lt;br /&gt;
&lt;br /&gt;
Unix Sockets&lt;br /&gt;
real	0m10.903s&lt;br /&gt;
user	0m2.178s&lt;br /&gt;
sys	0m2.380s&lt;br /&gt;
&lt;br /&gt;
real	0m11.053s&lt;br /&gt;
user	0m2.280s&lt;br /&gt;
sys	0m2.422s&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>66.92.11.32</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=Talk:OLA_Device_Specific_Configuration&amp;diff=3886</id>
		<title>Talk:OLA Device Specific Configuration</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=Talk:OLA_Device_Specific_Configuration&amp;diff=3886"/>
				<updated>2011-07-04T22:09:04Z</updated>
		
		<summary type="html">&lt;p&gt;66.92.11.32: Blanked the page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>66.92.11.32</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=Open_SLP_Notes&amp;diff=3854</id>
		<title>Open SLP Notes</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=Open_SLP_Notes&amp;diff=3854"/>
				<updated>2011-06-26T17:10:30Z</updated>
		
		<summary type="html">&lt;p&gt;66.92.11.32: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The last stable release of Open SLP was 1.2.1 in 2006. This page has my notes from getting this version working on a number of systems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Registrations timing out too early ===&lt;br /&gt;
&lt;br /&gt;
slpd ages the registration database every 15 seconds (#define SLPD_AGE_INTERVAL 15) rather than tracking per registration timeouts. This means that your entry can timeout up to 15 seconds before it was supposed to.&lt;br /&gt;
&lt;br /&gt;
Besides fixing the slpd code, the only way around this is to re-register less than 15 seconds before the expiry interval. For this reason I recommend the absolute minimum SLP lifetime used is 30s.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Interface Selection on Mac OS X ===&lt;br /&gt;
&lt;br /&gt;
On Mac, slpd relies on reverse dns for the machine's hostname returning an IP (stupid I know but that's how it is). Without reverse DNS the startup log will look like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Sun Jun 19 16:59:45 2011&lt;br /&gt;
SLPD daemon started&lt;br /&gt;
****************************************&lt;br /&gt;
Command line = slpd&lt;br /&gt;
Using configuration file = /opt/local/etc/slp.conf&lt;br /&gt;
Using registration file = /opt/local/etc/slp.reg&lt;br /&gt;
Listening on loopback...&lt;br /&gt;
Multicast socket on 127.0.0.1 ready&lt;br /&gt;
Unicast socket on 127.0.0.1 ready&lt;br /&gt;
Agent Interfaces = 127.0.0.1&lt;br /&gt;
Agent URL = service:service-agent://127.0.0.1&lt;br /&gt;
Startup complete entering main run loop ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you don't have working reverse DNS for you domain, you can edit your /etc/hosts file. First get the full hostname &amp;amp; local address of the interface you want to use:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ hostname &lt;br /&gt;
simonn-macbookpro.local&lt;br /&gt;
$ ifconfig  en1 | grep &amp;quot;inet &amp;quot; | awk '{print $2}'&lt;br /&gt;
192.168.1.204&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Then add a line like the following to  /etc/hosts&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
192.168.1.204 simonn-macbookpro.local&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now SLP recognizes the interface correctly:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sun Jun 19 17:03:42 2011&lt;br /&gt;
SLPD daemon started&lt;br /&gt;
****************************************&lt;br /&gt;
Command line = slpd&lt;br /&gt;
Using configuration file = /opt/local/etc/slp.conf&lt;br /&gt;
Using registration file = /opt/local/etc/slp.reg&lt;br /&gt;
Listening on loopback...&lt;br /&gt;
Listening on 192.168.1.204 ...&lt;br /&gt;
Multicast socket on 192.168.1.204 ready&lt;br /&gt;
Unicast socket on 192.168.1.204 ready&lt;br /&gt;
Agent Interfaces = 192.168.1.204&lt;br /&gt;
Agent URL = service:service-agent://192.168.1.204&lt;br /&gt;
Startup complete entering main run loop ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Denial of Service against libslp ===&lt;br /&gt;
&lt;br /&gt;
libslp has code like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if(FD_ISSET(sockets-&amp;gt;sock[i],&amp;amp;readfds)) {   &lt;br /&gt;
  /* Peek at the first 16 bytes of the header */&lt;br /&gt;
  bytesread = recvfrom(sockets-&amp;gt;sock[i],&lt;br /&gt;
                                    peek,&lt;br /&gt;
                                    16,&lt;br /&gt;
                                    MSG_PEEK,&lt;br /&gt;
                                    (struct sockaddr *)peeraddr,&lt;br /&gt;
                                    &amp;amp;peeraddrlen);&lt;br /&gt;
  printf(&amp;quot;  read %d bytes\n&amp;quot;, bytesread);&lt;br /&gt;
  if(bytesread == 16 || ...) {&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Which means if you send a UDP packet less than 16 bytes, libslp spins in a loop trying to receive the rest of the data.&lt;/div&gt;</summary>
		<author><name>66.92.11.32</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=Open_SLP_Notes&amp;diff=3834</id>
		<title>Open SLP Notes</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=Open_SLP_Notes&amp;diff=3834"/>
				<updated>2011-06-20T03:43:06Z</updated>
		
		<summary type="html">&lt;p&gt;66.92.11.32: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The last stable release of Open SLP was 1.2.1 in 2006. This page has my notes from getting this version working on a number of systems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Registrations timing out too early ===&lt;br /&gt;
&lt;br /&gt;
slpd ages the registration database every 15 seconds (#define SLPD_AGE_INTERVAL 15) rather than tracking per registration timeouts. This means that your entry can timeout up to 15 seconds before it was supposed to.&lt;br /&gt;
&lt;br /&gt;
Besides fixing the slpd code, the only way around this is to re-register less than 15 seconds before the expiry interval. For this reason I recommend the absolute minimum SLP lifetime used is 30s.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Interface Selection on Mac OS X ===&lt;br /&gt;
&lt;br /&gt;
On Mac, slpd relies on reverse dns for the machine's hostname returning an IP (stupid I know but that's how it is). Without reverse DNS the startup log will look like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Sun Jun 19 16:59:45 2011&lt;br /&gt;
SLPD daemon started&lt;br /&gt;
****************************************&lt;br /&gt;
Command line = slpd&lt;br /&gt;
Using configuration file = /opt/local/etc/slp.conf&lt;br /&gt;
Using registration file = /opt/local/etc/slp.reg&lt;br /&gt;
Listening on loopback...&lt;br /&gt;
Multicast socket on 127.0.0.1 ready&lt;br /&gt;
Unicast socket on 127.0.0.1 ready&lt;br /&gt;
Agent Interfaces = 127.0.0.1&lt;br /&gt;
Agent URL = service:service-agent://127.0.0.1&lt;br /&gt;
Startup complete entering main run loop ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you don't have working reverse DNS for you domain, you can edit your /etc/hosts file. First get the full hostname &amp;amp; local address of the interface you want to use:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ hostname &lt;br /&gt;
simonn-macbookpro.local&lt;br /&gt;
$ ifconfig  en1 | grep &amp;quot;inet &amp;quot; | awk '{print $2}'&lt;br /&gt;
192.168.1.204&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Then add a line like the following to  /etc/hosts&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
192.168.1.204 simonn-macbookpro.local&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now SLP recognizes the interface correctly:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sun Jun 19 17:03:42 2011&lt;br /&gt;
SLPD daemon started&lt;br /&gt;
****************************************&lt;br /&gt;
Command line = slpd&lt;br /&gt;
Using configuration file = /opt/local/etc/slp.conf&lt;br /&gt;
Using registration file = /opt/local/etc/slp.reg&lt;br /&gt;
Listening on loopback...&lt;br /&gt;
Listening on 192.168.1.204 ...&lt;br /&gt;
Multicast socket on 192.168.1.204 ready&lt;br /&gt;
Unicast socket on 192.168.1.204 ready&lt;br /&gt;
Agent Interfaces = 192.168.1.204&lt;br /&gt;
Agent URL = service:service-agent://192.168.1.204&lt;br /&gt;
Startup complete entering main run loop ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>66.92.11.32</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=Open_SLP_Notes&amp;diff=3830</id>
		<title>Open SLP Notes</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=Open_SLP_Notes&amp;diff=3830"/>
				<updated>2011-06-20T00:04:02Z</updated>
		
		<summary type="html">&lt;p&gt;66.92.11.32: Created page with &amp;quot;A stable release of Open SLP last occurred in 2006. This page has a    === Interface Selection on Mac OS X ===  On Mac, slpd relies on reverse dns for the machine's hostname retu…&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A stable release of Open SLP last occurred in 2006. This page has a &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Interface Selection on Mac OS X ===&lt;br /&gt;
&lt;br /&gt;
On Mac, slpd relies on reverse dns for the machine's hostname returning an IP (stupid I know but that's how it is). Without reverse DNS the startup log will look like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Sun Jun 19 16:59:45 2011&lt;br /&gt;
SLPD daemon started&lt;br /&gt;
****************************************&lt;br /&gt;
Command line = slpd&lt;br /&gt;
Using configuration file = /opt/local/etc/slp.conf&lt;br /&gt;
Using registration file = /opt/local/etc/slp.reg&lt;br /&gt;
Listening on loopback...&lt;br /&gt;
Multicast socket on 127.0.0.1 ready&lt;br /&gt;
Unicast socket on 127.0.0.1 ready&lt;br /&gt;
Agent Interfaces = 127.0.0.1&lt;br /&gt;
Agent URL = service:service-agent://127.0.0.1&lt;br /&gt;
Startup complete entering main run loop ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you don't have working reverse DNS for you domain, you can edit your /etc/hosts file. First get the full hostname &amp;amp; local address of the interface you want to use:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ hostname &lt;br /&gt;
simonn-macbookpro.local&lt;br /&gt;
$ ifconfig  en1 | grep &amp;quot;inet &amp;quot; | awk '{print $2}'&lt;br /&gt;
192.168.1.204&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Then add a line like the following to  /etc/hosts&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
192.168.1.204 simonn-macbookpro.local&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now SLP recognizes the interface correctly:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sun Jun 19 17:03:42 2011&lt;br /&gt;
SLPD daemon started&lt;br /&gt;
****************************************&lt;br /&gt;
Command line = slpd&lt;br /&gt;
Using configuration file = /opt/local/etc/slp.conf&lt;br /&gt;
Using registration file = /opt/local/etc/slp.reg&lt;br /&gt;
Listening on loopback...&lt;br /&gt;
Listening on 192.168.1.204 ...&lt;br /&gt;
Multicast socket on 192.168.1.204 ready&lt;br /&gt;
Unicast socket on 192.168.1.204 ready&lt;br /&gt;
Agent Interfaces = 192.168.1.204&lt;br /&gt;
Agent URL = service:service-agent://192.168.1.204&lt;br /&gt;
Startup complete entering main run loop ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>66.92.11.32</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=Building_OLA_for_Windows&amp;diff=3765</id>
		<title>Building OLA for Windows</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=Building_OLA_for_Windows&amp;diff=3765"/>
				<updated>2011-05-08T23:37:52Z</updated>
		
		<summary type="html">&lt;p&gt;66.92.11.32: /* Current TODO */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This describes how to get OLA compiled for windows, it's a work in progress so it's unlikely to work as is. This tutorial uses gcc as the compiler, other compilers have not been tested.&lt;br /&gt;
&lt;br /&gt;
== Install Mingw, msys &amp;amp; build tools ==&lt;br /&gt;
&lt;br /&gt;
Together MinGW &amp;amp; msys provide a unix-style shell environment &amp;amp; compiler suite for windows. Read the instructions at the [http://www.mingw.org/ MinGW] site for more info. MinGW now provides an installer to get most of the system up and running quickly. [http://sourceforge.net/projects/mingw/files/Automated%20MinGW%20Installer/mingw-get-inst/ Download] the installer and make sure you select &amp;quot;C++ Compiler&amp;quot;. &amp;quot;MSYS Basic System&amp;quot; &amp;amp; &amp;quot;MinGW Developer Toolkit&amp;quot; when prompted.&lt;br /&gt;
&lt;br /&gt;
Once the installer has completed, open the msys shell (under Programs &amp;gt; MinGW) and install some additional packages:&lt;br /&gt;
&lt;br /&gt;
 $ mingw-get.exe install msys-automake msys-autoconf libtool&lt;br /&gt;
&lt;br /&gt;
== Install Git ==&lt;br /&gt;
&lt;br /&gt;
Git is used to checkout (and commit) the ola sources.  See http://code.google.com/p/msysgit/, be sure to select &amp;quot;checkout as is, commit unix style&amp;quot; during the install otherwise you'll get autoconf errors.&lt;br /&gt;
&lt;br /&gt;
Add the following line to your .bashrc file so that git can be used within msys:&lt;br /&gt;
&lt;br /&gt;
 PATH=&amp;quot;$PATH:/c/Program Files/Git/bin&amp;quot;&lt;br /&gt;
 alias git=git.exe&lt;br /&gt;
&lt;br /&gt;
== Install Dependencies ==&lt;br /&gt;
&lt;br /&gt;
For each of these it should be as simple as downloading the package, placing it in C:\MinGW\msys\1.0\home\USER , un-taring the package and running ./configure  , make &amp;amp; make install.&lt;br /&gt;
&lt;br /&gt;
* http://code.google.com/p/protobuf/ . Note you need to install the .tar.gz as the zip just contains protoc (we need the libraries as well)&lt;br /&gt;
* http://www.ossp.org/pkg/lib/uuid/&lt;br /&gt;
* http://sourceforge.net/projects/cppunit/files/&lt;br /&gt;
* http://plibc.sourceforge.net/  (required for microhttpd)&lt;br /&gt;
* ftp://ftp.gnu.org/gnu/libmicrohttpd/   (skip this for now - it's not building yet)&lt;br /&gt;
&lt;br /&gt;
== Install pkg-config ==&lt;br /&gt;
&lt;br /&gt;
This is a bit of a pain - see [http://www.mingw.org/wiki/FAQ MinGW FAQ] . The packages can be found [http://www.gtk.org/download-windows.html here].  The easiest is to download the latest &amp;quot;All-in-one bundles&amp;quot; and extract it to C:\MinGW\msys\1.0  .&lt;br /&gt;
&lt;br /&gt;
You also need to add&lt;br /&gt;
&lt;br /&gt;
  export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig&lt;br /&gt;
  CPPFLAGS=&amp;quot;-I/usr/local/include&amp;quot;&lt;br /&gt;
  LDFLAGS=&amp;quot;-L/usr/local/lib&amp;quot;&lt;br /&gt;
&lt;br /&gt;
to your .bashrc file.&lt;br /&gt;
&lt;br /&gt;
== Build OLA ==&lt;br /&gt;
&lt;br /&gt;
* Do a git checkout of OLA&lt;br /&gt;
&lt;br /&gt;
  $ git.exe clone http://git.openlighting.org/ola/&lt;br /&gt;
&lt;br /&gt;
* Run ./configure&lt;br /&gt;
  $ ./configure&lt;br /&gt;
&lt;br /&gt;
* Build&lt;br /&gt;
  $ make&lt;br /&gt;
&lt;br /&gt;
== Current State / TODO ==&lt;br /&gt;
&lt;br /&gt;
* Everything in common/ now builds under win32&lt;br /&gt;
* The USB Pro plugin needs a way to find devices, obviously /dev doesn't exist&lt;br /&gt;
* The DMX USB requires libusb win32. Not sure what the status of this is&lt;br /&gt;
&lt;br /&gt;
== Problems ==&lt;/div&gt;</summary>
		<author><name>66.92.11.32</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=Building_OLA_for_Windows&amp;diff=3756</id>
		<title>Building OLA for Windows</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=Building_OLA_for_Windows&amp;diff=3756"/>
				<updated>2011-05-07T18:41:18Z</updated>
		
		<summary type="html">&lt;p&gt;66.92.11.32: /* Install Dependencies */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This describes how to get OLA compiled for windows, it's a work in progress so it's unlikely to work as is. This tutorial uses gcc as the compiler, other compilers have not been tested.&lt;br /&gt;
&lt;br /&gt;
== Install Mingw, msys &amp;amp; build tools ==&lt;br /&gt;
&lt;br /&gt;
Together MinGW &amp;amp; msys provide a unix-style shell environment &amp;amp; compiler suite for windows. Read the instructions at the [http://www.mingw.org/ MinGW] site for more info. MinGW now provides an installer to get most of the system up and running quickly. [http://sourceforge.net/projects/mingw/files/Automated%20MinGW%20Installer/mingw-get-inst/ Download] the installer and make sure you select &amp;quot;C++ Compiler&amp;quot;. &amp;quot;MSYS Basic System&amp;quot; &amp;amp; &amp;quot;MinGW Developer Toolkit&amp;quot; when prompted.&lt;br /&gt;
&lt;br /&gt;
Once the installer has completed, open the msys shell (under Programs &amp;gt; MinGW) and install some additional packages:&lt;br /&gt;
&lt;br /&gt;
 $ mingw-get.exe install msys-automake msys-autoconf libtool&lt;br /&gt;
&lt;br /&gt;
== Install Git ==&lt;br /&gt;
&lt;br /&gt;
Git is used to checkout (and commit) the ola sources.  See http://code.google.com/p/msysgit/, be sure to select &amp;quot;checkout as is, commit unix style&amp;quot; during the install otherwise you'll get autoconf errors.&lt;br /&gt;
&lt;br /&gt;
Add the following line to your .bashrc file so that git can be used within msys:&lt;br /&gt;
&lt;br /&gt;
 PATH=&amp;quot;$PATH:/c/Program Files/Git/bin&amp;quot;&lt;br /&gt;
 alias git=git.exe&lt;br /&gt;
&lt;br /&gt;
== Install Dependencies ==&lt;br /&gt;
&lt;br /&gt;
For each of these it should be as simple as downloading the package, placing it in C:\MinGW\msys\1.0\home\USER , un-taring the package and running ./configure  , make &amp;amp; make install.&lt;br /&gt;
&lt;br /&gt;
* http://code.google.com/p/protobuf/ . Note you need to install the .tar.gz as the zip just contains protoc (we need the libraries as well)&lt;br /&gt;
* http://www.ossp.org/pkg/lib/uuid/&lt;br /&gt;
* http://sourceforge.net/projects/cppunit/files/&lt;br /&gt;
* http://plibc.sourceforge.net/  (required for microhttpd)&lt;br /&gt;
* ftp://ftp.gnu.org/gnu/libmicrohttpd/   (skip this for now - it's not building yet)&lt;br /&gt;
&lt;br /&gt;
== Install pkg-config ==&lt;br /&gt;
&lt;br /&gt;
This is a bit of a pain - see [http://www.mingw.org/wiki/FAQ MinGW FAQ] . The packages can be found [http://www.gtk.org/download-windows.html here].  The easiest is to download the latest &amp;quot;All-in-one bundles&amp;quot; and extract it to C:\MinGW\msys\1.0  .&lt;br /&gt;
&lt;br /&gt;
You also need to add&lt;br /&gt;
&lt;br /&gt;
  export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig&lt;br /&gt;
  CPPFLAGS=&amp;quot;-I/usr/local/include&amp;quot;&lt;br /&gt;
  LDFLAGS=&amp;quot;-L/usr/local/lib&amp;quot;&lt;br /&gt;
&lt;br /&gt;
to your .bashrc file.&lt;br /&gt;
&lt;br /&gt;
== Build OLA ==&lt;br /&gt;
&lt;br /&gt;
* Do a git checkout of OLA&lt;br /&gt;
&lt;br /&gt;
  $ git.exe clone http://git.openlighting.org/ola/&lt;br /&gt;
&lt;br /&gt;
* Run ./configure&lt;br /&gt;
  $ ./configure&lt;br /&gt;
&lt;br /&gt;
* Build&lt;br /&gt;
  $ make&lt;br /&gt;
&lt;br /&gt;
== Current TODO ==&lt;br /&gt;
&lt;br /&gt;
* Fix the Socket &amp;amp; SelectServer classes or replace them with whatever makes sense on windows&lt;br /&gt;
* The USB Pro plugin needs a way to find devices, obviously /dev doesn't exist&lt;br /&gt;
* The DMX USB requires libusb win32. Not sure what the status of this is&lt;br /&gt;
&lt;br /&gt;
== Problems ==&lt;/div&gt;</summary>
		<author><name>66.92.11.32</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=Building_OLA_for_Windows&amp;diff=3742</id>
		<title>Building OLA for Windows</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=Building_OLA_for_Windows&amp;diff=3742"/>
				<updated>2011-04-30T16:56:18Z</updated>
		
		<summary type="html">&lt;p&gt;66.92.11.32: /* Install Git */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This describes how to get OLA compiled for windows, it's a work in progress so it's unlikely to work as is. This tutorial uses gcc as the compiler, other compilers have not been tested.&lt;br /&gt;
&lt;br /&gt;
== Install Mingw, msys &amp;amp; build tools ==&lt;br /&gt;
&lt;br /&gt;
Together MinGW &amp;amp; msys provide a unix-style shell environment &amp;amp; compiler suite for windows. Read the instructions at the [http://www.mingw.org/ MinGW] site for more info. MinGW now provides an installer to get most of the system up and running quickly. [http://sourceforge.net/projects/mingw/files/Automated%20MinGW%20Installer/mingw-get-inst/ Download] the installer and make sure you select &amp;quot;C++ Compiler&amp;quot;. &amp;quot;MSYS Basic System&amp;quot; &amp;amp; &amp;quot;MinGW Developer Toolkit&amp;quot; when prompted.&lt;br /&gt;
&lt;br /&gt;
Once the installer has completed, open the msys shell (under Programs &amp;gt; MinGW) and install some additional packages:&lt;br /&gt;
&lt;br /&gt;
 $ mingw-get.exe install msys-automake msys-autoconf libtool&lt;br /&gt;
&lt;br /&gt;
== Install Git ==&lt;br /&gt;
&lt;br /&gt;
Git is used to checkout (and commit) the ola sources.  See http://code.google.com/p/msysgit/, be sure to select &amp;quot;checkout as is, commit unix style&amp;quot; during the install otherwise you'll get autoconf errors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Add the following line to your .bashrc file so that git can be used within msys:&lt;br /&gt;
&lt;br /&gt;
PATH=&amp;quot;$PATH:/c/Program Files/Git/bin&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Install Dependencies ==&lt;br /&gt;
&lt;br /&gt;
For each of these it should be as simple as downloading the package, placing it in C:\MinGW\msys\1.0\home\USER , un-taring the package and running ./configure  , make &amp;amp; make install.&lt;br /&gt;
&lt;br /&gt;
* http://code.google.com/p/protobuf/ . Note you need to install the .tar.gz as the zip just contains protoc (we need the libraries as well)&lt;br /&gt;
* http://www.ossp.org/pkg/lib/uuid/ , be sure to run configure with  ./configure --prefix=/mingw --includedir /mingw/include/ossp&lt;br /&gt;
* http://sourceforge.net/projects/cppunit/files/&lt;br /&gt;
* ftp://ftp.gnu.org/gnu/libmicrohttpd/&lt;br /&gt;
&lt;br /&gt;
== Build OLA ==&lt;br /&gt;
&lt;br /&gt;
* Do a git checkout of OLA&lt;br /&gt;
&lt;br /&gt;
  $ git.exe clone http://git.openlighting.org/ola/&lt;br /&gt;
&lt;br /&gt;
* Run ./configure&lt;br /&gt;
  $ ./configure&lt;br /&gt;
&lt;br /&gt;
* Build&lt;br /&gt;
  $ make&lt;br /&gt;
&lt;br /&gt;
== Current TODO ==&lt;br /&gt;
&lt;br /&gt;
* Fix the Socket &amp;amp; SelectServer classes or replace them with whatever makes sense on windows&lt;br /&gt;
* The USB Pro plugin needs a way to find devices, obviously /dev doesn't exist&lt;br /&gt;
* The DMX USB requires libusb win32. Not sure what the status of this is&lt;br /&gt;
&lt;br /&gt;
== Problems ==&lt;/div&gt;</summary>
		<author><name>66.92.11.32</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=Build_OLA_Mac_Packages&amp;diff=3731</id>
		<title>Build OLA Mac Packages</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=Build_OLA_Mac_Packages&amp;diff=3731"/>
				<updated>2011-04-25T04:03:48Z</updated>
		
		<summary type="html">&lt;p&gt;66.92.11.32: /* protobuf */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;These are my notes on building universal binary packages for mac.&lt;br /&gt;
&lt;br /&gt;
==Directory setup==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# extracted tarballs&lt;br /&gt;
~/mac-packaging/build/libartnet-1.1.0&lt;br /&gt;
~/mac-packaging/build/libmicrohttpd-0.4.2&lt;br /&gt;
~/mac-packaging/build/protobuf-2.2.0&lt;br /&gt;
~/mac-packaging/build/ctemplate-&lt;br /&gt;
~/mac-packaging/build/libusb-1.0.6&lt;br /&gt;
# install desintations&lt;br /&gt;
~/mac-packaging/non-flat-packages/libartnet&lt;br /&gt;
~/mac-packaging/non-flat-packages/libmicrohttpd&lt;br /&gt;
~/mac-packaging/non-flat-packages/protobuf&lt;br /&gt;
~/mac-packaging/non-flat-packages/ctemplate&lt;br /&gt;
~/mac-packaging/non-flat-packages/libusb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Building OLA Dependancies ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== libusb ===&lt;br /&gt;
&lt;br /&gt;
In ~/mac-packaging/build/libusb-1.0.6:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./configure  --disable-dependency-tracking&lt;br /&gt;
make CFLAGS=&amp;quot;-arch ppc -arch i386 -arch x86_64&amp;quot;   LDFLAGS=&amp;quot; -arch ppc -arch i386 -arch x86_64&amp;quot;&lt;br /&gt;
DESTDIR=/Users/simonn/lighting/mac-packaging/non-flat-packages/libusb/ make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== libmicrohttpd ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./configure  --disable-dependency-tracking --with-libgcrypt-prefix=/tmp/foo&lt;br /&gt;
make CFLAGS=&amp;quot;-arch ppc -arch i386&amp;quot; CPPFLAGS=&amp;quot;-arch ppc -arch i386 -arch x86_64&amp;quot;  LDFLAGS=&amp;quot; -arch ppc -arch i386 -arch x86_64&amp;quot;&lt;br /&gt;
DESTDIR=/Users/simonn/lighting/mac-packaging/non-flat-packages/microhttpd/ make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== protobuf ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./configure  --disable-dependency-tracking&lt;br /&gt;
make CFLAGS=&amp;quot;-arch ppc -arch i386 -arch x86_64&amp;quot; CPPFLAGS=&amp;quot;-arch ppc -arch i386 -arch x86_64&amp;quot;  LDFLAGS=&amp;quot; -arch ppc -arch i386 -arch x86_64&amp;quot;&lt;br /&gt;
DESTDIR=/Users/simonn/lighting/mac-packaging/non-flat-packages/protobuf/ make install&lt;br /&gt;
./configure --disable-dependency-tracking&lt;br /&gt;
sudo make install&lt;br /&gt;
cd python&lt;br /&gt;
python setup.py  install --root ~/lighting/mac-packaging/non-flat-packages/protobuf --prefix /usr/local/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The second make install is required so that ola-examples builds. I'm sure there is a way around this but I can't figure it out...&lt;br /&gt;
&lt;br /&gt;
=== Cleanup ===&lt;br /&gt;
&lt;br /&gt;
In ~/lighting/mac-packaging/non-flat-packages, run&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
find ./ -name &amp;quot;.DS_Store&amp;quot; -exec rm {} \;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Creating Dependancy Packages ==&lt;br /&gt;
&lt;br /&gt;
Using PackageMaker, create a distribution package for each of the dependancies. Remember to fix the permissions and set Package Location to 'Same Level'. Build the package and save it in ~/lighting/mac-packaging/non-flat-packages&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
~/lighting/mac-packaging/non-flat-packages should now look something like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
libusb 1.0.8.mpkg&lt;br /&gt;
libusb 1.0.8.pkg&lt;br /&gt;
microhttpd 0.4.2.mpkg &lt;br /&gt;
microhttpd.pkg  &lt;br /&gt;
protobuf 2.2.0.mpkg &lt;br /&gt;
protobuf 2.2.0.pkg  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Building ola &amp;amp; ola-examples ==&lt;br /&gt;
&lt;br /&gt;
Unpack the ola tarball, then run&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./configure --disable-dependency-tracking&lt;br /&gt;
make  CPPFLAGS=&amp;quot;-arch ppc -arch i386 -arch x86_64 -mmacosx-version-min=10.5&amp;quot;  LDFLAGS=&amp;quot; -arch ppc -arch i386 -arch x86_64&amp;quot;&lt;br /&gt;
make check&lt;br /&gt;
sudo make install &lt;br /&gt;
DESTDIR=/Users/simonn/lighting/mac-packaging/ola  make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Again, The first make install is required so that ola-examples builds. I'm sure there is a way around this but I can't figure it out...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Unpack the ola-examples tarball and run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./configure --disable-dependency-tracking &lt;br /&gt;
make  CPPFLAGS=&amp;quot;-arch ppc -arch i386 -arch x86_64 -mmacosx-version-min=10.5&amp;quot;  LDFLAGS=&amp;quot; -arch ppc -arch i386 -arch x86_64&amp;quot;&lt;br /&gt;
DESTDIR=/Users/simonn/lighting/mac-packaging/ola-examples make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Clean up the .DS_Store and static libs in ola &amp;amp; ola-tools&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
find ./ -name &amp;quot;*.DS_Store&amp;quot; -exec rm {} \;&lt;br /&gt;
find ./ -name &amp;quot;*.a&amp;quot; -exec rm {} \;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Create the main package &amp;amp; build ==&lt;br /&gt;
&lt;br /&gt;
Add the 4 dependancies, ola &amp;amp; ola-tools&lt;/div&gt;</summary>
		<author><name>66.92.11.32</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=Open_Lighting_PIDs&amp;diff=3710</id>
		<title>Open Lighting PIDs</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=Open_Lighting_PIDs&amp;diff=3710"/>
				<updated>2011-04-16T20:42:51Z</updated>
		
		<summary type="html">&lt;p&gt;66.92.11.32: Created page with &amp;quot;This page documents RDM PIDs used by the open lighting project.  0x8000  This sets the serial number of the device. The serial number is combined with the ESTA ID to create t…&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page documents [[RDM]] PIDs used by the open lighting project.&lt;br /&gt;
&lt;br /&gt;
0x8000&lt;br /&gt;
&lt;br /&gt;
This sets the serial number of the device. The serial number is combined with the ESTA ID to create the UID.&lt;/div&gt;</summary>
		<author><name>66.92.11.32</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=Running_the_tests&amp;diff=3672</id>
		<title>Running the tests</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=Running_the_tests&amp;diff=3672"/>
				<updated>2011-03-02T16:32:19Z</updated>
		
		<summary type="html">&lt;p&gt;66.92.11.32: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This describes how to run the [[OLA RDM Responder Testing | RDM Responder Tests]]. Before starting you may want to read the [[Responder Testing FAQ]].&lt;br /&gt;
&lt;br /&gt;
== Install OLA ==&lt;br /&gt;
&lt;br /&gt;
Follow one of [[OLA on OS X]] or [[OLA on Linux]] or [[OLA on Windows with VMWare]] to install [[OLA]]. If you want the biggest benefit from the tests you should use the version in the git repo as tests are added regularly.&lt;br /&gt;
&lt;br /&gt;
== Setup the Test Rig ==&lt;br /&gt;
&lt;br /&gt;
The following controller devices are supported:&lt;br /&gt;
* [[RDM-TRI]]&lt;br /&gt;
*  [[DMXter4 RDM]] / [[MiniDMXter]]&lt;br /&gt;
&lt;br /&gt;
Connect the device under test to the controller device and start ''olad''. Patch the output port on the controller device to a universe (UNIVERSE_NUMBER). Then run ''ola_rdm_discover'', you should see the responder's UID appear:&lt;br /&gt;
&lt;br /&gt;
  $ ola_rdm_discover -u UNIVERSE_NUMBER&lt;br /&gt;
  00a1:00010003&lt;br /&gt;
  7a70:ffffff00&lt;br /&gt;
&lt;br /&gt;
== Running the Tests ==&lt;br /&gt;
&lt;br /&gt;
The tests are written in Python and run using ''ola_rdm_test.py''.  Below is the output from a typical test run:&lt;br /&gt;
&lt;br /&gt;
  $ ./ola_rdm_test.py --universe 1  00a1:00010003&lt;br /&gt;
  Starting tests, universe 3, UID 00a1:00010003&lt;br /&gt;
  SetManufacturerLabel: Passed&lt;br /&gt;
  SetSoftwareVersionLabel: Passed&lt;br /&gt;
  GetManufacturerLabel: Passed&lt;br /&gt;
  GetSoftwareVersionLabelWithData: Failed&lt;br /&gt;
  ...&lt;br /&gt;
  ------------- Warnings --------------&lt;br /&gt;
  ------------ By Category ------------&lt;br /&gt;
    Product Information:  7 /  7   100%&lt;br /&gt;
        RDM Information:  1 /  1   100%&lt;br /&gt;
     Core Functionality:  2 /  2   100%&lt;br /&gt;
       Error Conditions: 10 / 16   62%&lt;br /&gt;
           DMX512 Setup:  3 /  3   100%&lt;br /&gt;
  -------------------------------------&lt;br /&gt;
  29 / 30 tests run, 23 passed, 6 failed, 0 broken&lt;br /&gt;
&lt;br /&gt;
== Useful Options ==&lt;br /&gt;
&lt;br /&gt;
''ola_rdm_test.py'' has some options which can assist in debugging failures. For a full list of options run with -h&lt;br /&gt;
&lt;br /&gt;
; -d, --debug&lt;br /&gt;
: Show all debugging output, including actual &amp;amp; expected responses.&lt;br /&gt;
; -l, --log&lt;br /&gt;
: Log the output of the tests to a file. The UID and timestamp is appended to the filename&lt;br /&gt;
; -t Test1,Test2  , --tests=Test1,Test2&lt;br /&gt;
: Only run a subset of the Tests. Only the tests listed (and their dependencies) will be run.&lt;/div&gt;</summary>
		<author><name>66.92.11.32</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=Running_the_tests&amp;diff=3671</id>
		<title>Running the tests</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=Running_the_tests&amp;diff=3671"/>
				<updated>2011-03-02T16:31:12Z</updated>
		
		<summary type="html">&lt;p&gt;66.92.11.32: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This describes how to run the [[OLA RDM Responder Testing | RDM Responder Tests]]. Before starting you may want to read the [[Responder Testing FAQ]].&lt;br /&gt;
&lt;br /&gt;
== Install OLA ==&lt;br /&gt;
&lt;br /&gt;
Follow one of [[OLA on OS X]] or [[OLA on Linux]] or [[OLA on Windows with VMWare]] to install [[OLA]]&lt;br /&gt;
&lt;br /&gt;
== Setup the Test Rig ==&lt;br /&gt;
&lt;br /&gt;
The following controller devices are supported:&lt;br /&gt;
* [[RDM-TRI]]&lt;br /&gt;
*  [[DMXter4 RDM]] / [[MiniDMXter]]&lt;br /&gt;
&lt;br /&gt;
Connect the device under test to the controller device and start ''olad''. Patch the output port on the controller device to a universe (UNIVERSE_NUMBER). Then run ''ola_rdm_discover'', you should see the responder's UID appear:&lt;br /&gt;
&lt;br /&gt;
  $ ola_rdm_discover -u UNIVERSE_NUMBER&lt;br /&gt;
  00a1:00010003&lt;br /&gt;
  7a70:ffffff00&lt;br /&gt;
&lt;br /&gt;
== Running the Tests ==&lt;br /&gt;
&lt;br /&gt;
The tests are written in Python and run using ''ola_rdm_test.py''.  Below is the output from a typical test run:&lt;br /&gt;
&lt;br /&gt;
  $ ./ola_rdm_test.py --universe 1  00a1:00010003&lt;br /&gt;
  Starting tests, universe 3, UID 00a1:00010003&lt;br /&gt;
  SetManufacturerLabel: Passed&lt;br /&gt;
  SetSoftwareVersionLabel: Passed&lt;br /&gt;
  GetManufacturerLabel: Passed&lt;br /&gt;
  GetSoftwareVersionLabelWithData: Failed&lt;br /&gt;
  ...&lt;br /&gt;
  ------------- Warnings --------------&lt;br /&gt;
  ------------ By Category ------------&lt;br /&gt;
    Product Information:  7 /  7   100%&lt;br /&gt;
        RDM Information:  1 /  1   100%&lt;br /&gt;
     Core Functionality:  2 /  2   100%&lt;br /&gt;
       Error Conditions: 10 / 16   62%&lt;br /&gt;
           DMX512 Setup:  3 /  3   100%&lt;br /&gt;
  -------------------------------------&lt;br /&gt;
  29 / 30 tests run, 23 passed, 6 failed, 0 broken&lt;br /&gt;
&lt;br /&gt;
== Useful Options ==&lt;br /&gt;
&lt;br /&gt;
''ola_rdm_test.py'' has some options which can assist in debugging failures. For a full list of options run with -h&lt;br /&gt;
&lt;br /&gt;
; -d, --debug&lt;br /&gt;
: Show all debugging output, including actual &amp;amp; expected responses.&lt;br /&gt;
; -l, --log&lt;br /&gt;
: Log the output of the tests to a file. The UID and timestamp is appended to the filename&lt;br /&gt;
; -t Test1,Test2  , --tests=Test1,Test2&lt;br /&gt;
: Only run a subset of the Tests. Only the tests listed (and their dependencies) will be run.&lt;/div&gt;</summary>
		<author><name>66.92.11.32</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=Responder_Testing_FAQ&amp;diff=3663</id>
		<title>Responder Testing FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=Responder_Testing_FAQ&amp;diff=3663"/>
				<updated>2011-02-12T20:40:23Z</updated>
		
		<summary type="html">&lt;p&gt;66.92.11.32: /* I disagree with the output of a test / I disagree with the interpretation of the standard */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== General Information ==&lt;br /&gt;
&lt;br /&gt;
==== Is this a E1.20 Compliance Test? ====&lt;br /&gt;
&lt;br /&gt;
No. There is no known industry standard compliance tests for [[E1.20]]. Developing these sort of tests is expensive and the industry is reasonably small.&lt;br /&gt;
&lt;br /&gt;
==== How is this related to PLASA and the PLASA Standards Group ? ====&lt;br /&gt;
&lt;br /&gt;
Although some of the test developers sit on the PLASA Control Protocols Working Group and/or various Task Groups, this effort is in no way affiliated with PLASA.&lt;br /&gt;
&lt;br /&gt;
== Testing Devices ==&lt;br /&gt;
&lt;br /&gt;
==== Can I run the tests myself? ====&lt;br /&gt;
&lt;br /&gt;
Yes. You need one of the [[#Which RDM controllers are supported?| supported controllers]] and a system on which to run [[OLA]].&lt;br /&gt;
&lt;br /&gt;
==== Can I send my equipment somewhere to have it tested? ====&lt;br /&gt;
&lt;br /&gt;
Yes. You can send RDM responders to us (located in California) and we'll run the tests and send you the output.  You'll either need to organize return postage, or agree to leave the hardware with us. If you provide us with a way to upgrade firmware on your devices we'll test new firmware versions for you.&lt;br /&gt;
&lt;br /&gt;
==== I'll only send RDM responders if you pay a deposit, sign an NDA etc. ====&lt;br /&gt;
&lt;br /&gt;
Sorry, this is a best effort volunteer service. We don't have the financial or legal resources to get into this. &lt;br /&gt;
&lt;br /&gt;
==== Can someone work with me to debug my responder? ====&lt;br /&gt;
&lt;br /&gt;
We'll do the best we can to explain the expected behavior and why tests fail.  We don't provide consulting services but can recommend freelance RDM developers.&lt;br /&gt;
&lt;br /&gt;
==== Can I pay someone to perform testing for me? ====&lt;br /&gt;
&lt;br /&gt;
Not at the moment. We may provide this service in the future.&lt;br /&gt;
&lt;br /&gt;
== Technical Questions ==&lt;br /&gt;
&lt;br /&gt;
==== Which RDM controllers are supported? ====&lt;br /&gt;
&lt;br /&gt;
Currently the following controller devices are supported:&lt;br /&gt;
* [[RDM-TRI]]&lt;br /&gt;
* [[DMXter4 RDM]] / [[MiniDMXter]]&lt;br /&gt;
&lt;br /&gt;
==== I make RDM Controllers and I'd like to have my device supported ====&lt;br /&gt;
&lt;br /&gt;
The fastest way is to write the code yourself. Failing that, if you provide the hardware we can work on supporting it.&lt;br /&gt;
&lt;br /&gt;
==== Why isn't signal timing checked? ====&lt;br /&gt;
&lt;br /&gt;
Simply because the developers haven't had time to add this. The amount of information on signal timing is limited by what the RDM controller interfaces provide to the host PC. For now we recommend adding a inline RDM sniffer and using that to check for timing problems.&lt;br /&gt;
&lt;br /&gt;
==== I disagree with the output of a test / I disagree with the interpretation of the standard ====&lt;br /&gt;
&lt;br /&gt;
Where the [[E1.20]] standard is ambiguous, the test output reflects the consensus reached by well respected engineers within the industry. If you think one of the test cases is wrong please start a discussion on the [http://www.rdmprotocol.org/ RDM Protocol Forums].&lt;/div&gt;</summary>
		<author><name>66.92.11.32</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=Writing_RDM_Responder_Tests&amp;diff=3650</id>
		<title>Writing RDM Responder Tests</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=Writing_RDM_Responder_Tests&amp;diff=3650"/>
				<updated>2011-02-01T16:57:25Z</updated>
		
		<summary type="html">&lt;p&gt;66.92.11.32: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page describes how to author new RDM Responder tests. Read [[OLA RDM Responder Testing]] for information on running the tests and some general information about the testing framework.&lt;br /&gt;
&lt;br /&gt;
== Basic Test Structure ==&lt;br /&gt;
&lt;br /&gt;
The tests are defined in tools/rdm/TestDefinitions.py . Each test subclasses the ResponderTest class and provides the Test() method which is used to send the RDM request.&lt;br /&gt;
&lt;br /&gt;
=== Dependencies ===&lt;br /&gt;
&lt;br /&gt;
Tests can have dependencies, which enables the conditional running of tests if conditions match. Dependencies are defined in the DEPS variable&lt;br /&gt;
&lt;br /&gt;
=== Categories ===&lt;br /&gt;
&lt;br /&gt;
Each test belongs to a category (defined in tools/rdm/ResponderTest.py). Categories follow those in the RDM Categories/Parameter ID Defines table in the E1.20 document but there are some extra categories for specific behavior like TestCategory.ERROR_CONDITIONS and TestCategory.SUB_DEVICES . The category a test belongs to is defined in the CATEGORY variable.&lt;br /&gt;
&lt;br /&gt;
=== PID ===&lt;br /&gt;
&lt;br /&gt;
The PID variable defined which PID this test will exercise (tests can exercise multiple PIDs but that's more complicated). The PID variable should be set to a string that exists in the PidStore data file.&lt;br /&gt;
&lt;br /&gt;
== Example 1 == &lt;br /&gt;
&lt;br /&gt;
This shows a test which checks that a GET request for PID ''DMX Start Address'' behaves correctly.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class GetStartAddress(ResponderTest):&lt;br /&gt;
  &amp;quot;&amp;quot;&amp;quot;GET the DMX start address.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
  CATEGORY = TestCategory.DMX_SETUP&lt;br /&gt;
  PID = 'dmx_start_address'&lt;br /&gt;
  DEPS = [GetDeviceInfo] &lt;br /&gt;
  &lt;br /&gt;
  def Test(self):   &lt;br /&gt;
    result = ExpectedResult.NackResponse(self.pid.value,&lt;br /&gt;
                                         RDMNack.NR_UNKNOWN_PID)&lt;br /&gt;
    if self.Deps(GetDeviceInfo).GetField('dmx_footprint') &amp;gt; 0:                                                                                                              &lt;br /&gt;
      result = ExpectedResult.AckResponse(self.pid.value, ['dmx_address'])&lt;br /&gt;
    self.AddExpectedResults(result)&lt;br /&gt;
    self.SendGet(PidStore.ROOT_DEVICE, self.pid)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Things to note:&lt;br /&gt;
* The GetStartAddress test depends on the GetDeviceInfo test to ensure that the device reports a dmx footprint &amp;gt; 0. This is because devices with a footprint of 0 are not required to implement the DMX Start Address PID.&lt;br /&gt;
&lt;br /&gt;
== Advanced Functionality ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Warnings === &lt;br /&gt;
&lt;br /&gt;
Warnings can be recorded when we detect behavior which while not serious enough to cause a failure should still be correctly handled. Warnings are printed in the summary section of the test output. To record a warning use the AddWarning() method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if footprint &amp;gt; MAX_DMX_ADDRESS:&lt;br /&gt;
  self.AddWarning('DMX Footprint of %d, was more than 512' % footprint) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Advisory Messages ===&lt;br /&gt;
&lt;br /&gt;
Advisory messages are similar to warnings but they indicate issues that are not covered by the standard but are likely to cause problems i.e a sensor temperature out side of the stated scale range.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if sensor.value &amp;gt; sensor.max:&lt;br /&gt;
  self.AddAdvisory('Sensor value %d greater than max range %d' % (sensor.value, sensor.max)) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Skipping Tests ===&lt;br /&gt;
&lt;br /&gt;
A test may not want to run if certain conditions aren't satisfied. Calling SetNotRun() means that a test will be marked as skipped. For example, we only want to run the GetParamDescription test if we find manufacturer specific PIDS:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  def Test(self):&lt;br /&gt;
    self.params = self.Deps(GetSupportedParameters).manufacturer_parameters[:]&lt;br /&gt;
    if len(self.params) == 0:&lt;br /&gt;
      self.SetNotRun(' No manufacturer params found')&lt;br /&gt;
      self.Stop()&lt;br /&gt;
      return&lt;br /&gt;
&lt;br /&gt;
   # test continues here&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Verification Methods ===&lt;br /&gt;
&lt;br /&gt;
Sometimes it's not enough to check the presences of fields, or use simple equality matching. The VerifyResult() method is passed the full RDM response and can be used to implement complex inter-field checking.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def VerifyResult(self, unused_status, fields):                                                                                                                            &lt;br /&gt;
  &amp;quot;&amp;quot;&amp;quot;Check the footprint, personalities &amp;amp; sub devices.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
  footprint = fields['dmx_footprint']   if footprint &amp;gt; MAX_DMX_ADDRESS:&lt;br /&gt;
    self.AddWarning('DMX Footprint of %d, was more than 512' % footprint)&lt;br /&gt;
  if footprint &amp;gt; 0:&lt;br /&gt;
    personality_count = fields['personality_count']&lt;br /&gt;
    current_personality = fields['current_personality']&lt;br /&gt;
    if personality_count == 0:&lt;br /&gt;
      self.AddWarning('DMX Footprint non 0, but no personalities listed')&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Mixins ==&lt;br /&gt;
&lt;br /&gt;
Mixins are classes which abstract away common functionality to make it easier to author tests. Mixins are defined in tools/rdm/TestMixins.py.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class GetDeviceLabel(TestMixins.GetLabelMixin, ResponderTest):&lt;br /&gt;
  &amp;quot;&amp;quot;&amp;quot;GET the device label.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
  CATEGORY = TestCategory.PRODUCT_INFORMATION&lt;br /&gt;
  PID = 'device_label'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This test didn't need any code at all. We simply inherit from the GetLabelMixin, which provides it's own Test() method. Remember when using Mixins to inherit from ResponderTest last, otherwise the Test() method in ResponderTest will be used and the test will be marked as BROKEN.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The ''IsSupportedMixin'' allows for easy testing based on whether support for the parameter has been declared. From the mixin code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
class IsSupportedMixin(object):                                                                                                                                             &lt;br /&gt;
  &amp;quot;&amp;quot;&amp;quot;A Mixin that changes the result if the pid isn't in the supported list.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
  DEPS = [GetSupportedParameters]&lt;br /&gt;
&lt;br /&gt;
  def PidSupported(self):&lt;br /&gt;
    return self.Deps(GetSupportedParameters).SupportsPid(self.pid)&lt;br /&gt;
&lt;br /&gt;
  def AddIfSupported(self, result):&lt;br /&gt;
    if not self.PidSupported():&lt;br /&gt;
      result = ExpectedResult.NackResponse(self.pid.value,&lt;br /&gt;
                                           RDMNack.NR_UNKNOWN_PID)&lt;br /&gt;
    self.AddExpectedResults(result)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tests can use this like so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
class GetFactoryDefaults(IsSupportedMixin, ResponderTest):&lt;br /&gt;
  &amp;quot;&amp;quot;&amp;quot;GET the factory defaults pid.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
  CATEGORY = TestCategory.PRODUCT_INFORMATION&lt;br /&gt;
  PID = 'factory_defaults'&lt;br /&gt;
&lt;br /&gt;
  def Test(self):&lt;br /&gt;
    self.AddIfSupported(&lt;br /&gt;
      ExpectedResult.AckResponse(self.pid.value, ['using_defaults']))&lt;br /&gt;
    self.SendGet(PidStore.ROOT_DEVICE, self.pid)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This test will send a GET request for the ''factory_defaults'' pid. If this pid was listed in the supported parameters the test will expect a ACK response. If this pid wasn't listed, a NR_UNKNOWN_PID will be expected.&lt;br /&gt;
&lt;br /&gt;
== Guidelines ==&lt;br /&gt;
 &lt;br /&gt;
* Avoid the use of multiple expected responses. With good use of test dependencies, a test should know what to expect before we send the request.&lt;br /&gt;
* Always include a doc string. These are used in the debugging output to describe the test&lt;br /&gt;
* Try to keep the number of dependencies for each test to a minimum. Additional dependencies increase the chance the test won't be run because a dependency failed.&lt;br /&gt;
* Use the IsSupportedMixin where ever possible.&lt;/div&gt;</summary>
		<author><name>66.92.11.32</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=Responder_Testing_FAQ&amp;diff=3632</id>
		<title>Responder Testing FAQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=Responder_Testing_FAQ&amp;diff=3632"/>
				<updated>2011-01-31T03:44:47Z</updated>
		
		<summary type="html">&lt;p&gt;66.92.11.32: Created page with &amp;quot;== General Information ==  ==== Is this a E1.20 Compliance Test? ====  No. There is no known industry standard compliance tests for E1.20. Developing these sort of tests is e…&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== General Information ==&lt;br /&gt;
&lt;br /&gt;
==== Is this a E1.20 Compliance Test? ====&lt;br /&gt;
&lt;br /&gt;
No. There is no known industry standard compliance tests for [[E1.20]]. Developing these sort of tests is expensive and the industry is reasonably small.&lt;br /&gt;
&lt;br /&gt;
==== How is this related to PLASA and the PLASA Standards Group ? ====&lt;br /&gt;
&lt;br /&gt;
Although some of the test developers sit on the PLASA Control Protocols Working Group and/or various Task Groups, this effort is in no way affiliated with PLASA.&lt;br /&gt;
&lt;br /&gt;
== Testing Devices ==&lt;br /&gt;
&lt;br /&gt;
==== Can I run the tests myself? ====&lt;br /&gt;
&lt;br /&gt;
Yes. You need one of the [[#Which RDM controllers are supported?| supported controllers]] and a system on which to run [[OLA]].&lt;br /&gt;
&lt;br /&gt;
==== Can I send my equipment somewhere to have it tested? ====&lt;br /&gt;
&lt;br /&gt;
Yes. You can send RDM responders to us (located in California) and we'll run the tests and send you the output.  You'll either need to organize return postage, or agree to leave the hardware with us. If you provide us with a way to upgrade firmware on your devices we'll test new firmware versions for you.&lt;br /&gt;
&lt;br /&gt;
==== I'll only send RDM responders if you pay a deposit, sign an NDA etc. ====&lt;br /&gt;
&lt;br /&gt;
Sorry, this is a best effort volunteer service. We don't have the financial or legal resources to get into this. &lt;br /&gt;
&lt;br /&gt;
==== Can someone work with me to debug my responder? ====&lt;br /&gt;
&lt;br /&gt;
We'll do the best we can to explain the expected behavior and why tests fail.  We don't provide consulting services but can recommend freelance RDM developers.&lt;br /&gt;
&lt;br /&gt;
==== Can I pay someone to perform testing for me? ====&lt;br /&gt;
&lt;br /&gt;
Not at the moment. We may provide this service in the future.&lt;br /&gt;
&lt;br /&gt;
== Technical Questions ==&lt;br /&gt;
&lt;br /&gt;
==== Which RDM controllers are supported? ====&lt;br /&gt;
&lt;br /&gt;
Currently the following controller devices are supported:&lt;br /&gt;
* [[RDM-TRI]]&lt;br /&gt;
* [[DMXter4 RDM]] / [[MiniDMXter]]&lt;br /&gt;
&lt;br /&gt;
==== I make RDM Controllers and I'd like to have my device supported ====&lt;br /&gt;
&lt;br /&gt;
The fastest way is to write the code yourself. Failing that, if you provide the hardware we can work on supporting it.&lt;br /&gt;
&lt;br /&gt;
==== Why isn't signal timing checked? ====&lt;br /&gt;
&lt;br /&gt;
Simply because the developers haven't had time to add this. The amount of information on signal timing is limited by what the RDM controller interfaces provide to the host PC. For now we recommend adding a inline RDM sniffer and using that to check for timing problems.&lt;br /&gt;
&lt;br /&gt;
==== I disagree with the output of a test / I disagree with the interpretation of the standard ====&lt;br /&gt;
&lt;br /&gt;
Where the [[E1.20]] standard is ambiguous, the    . If you think one of the test cases is wrong start a discussion on the [[http://www.rdmprotocol.org/ RDM Protocol Forums]].&lt;/div&gt;</summary>
		<author><name>66.92.11.32</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=Open_Lighting_Architecture&amp;diff=3615</id>
		<title>Open Lighting Architecture</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=Open_Lighting_Architecture&amp;diff=3615"/>
				<updated>2011-01-31T02:00:17Z</updated>
		
		<summary type="html">&lt;p&gt;66.92.11.32: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Ola.png|right]]&lt;br /&gt;
Link: http://code.google.com/p/linux-lighting/ &amp;lt;br&amp;gt;&lt;br /&gt;
{{Features|free=yes|tx=yes|rx=yes|linux=yes|osx=yes|http=yes|rdm=yes}}&lt;br /&gt;
[[Image:Ola-download.png |right|link=http://code.google.com/p/linux-lighting/downloads/list]]&lt;br /&gt;
[[Image:Llad_home.png| thumb |200px|right|Universe Settings]]&lt;br /&gt;
[[Image:Ola-rdm.png|thumb|200px|right|RDM Devices Page]]&lt;br /&gt;
[[Image:OLA_patching.png|thumb|200px|right|Drag &amp;amp; Drop RDM Patching]]&lt;br /&gt;
[[Image:Ola-mobile.png|thumb|200px|right|Mobile UI]]&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;br /&gt;
The Open Lighting Architecture (OLA) is part of the [[Open Lighting Project]] and provides applications with a mechanism to send and receive [[DMX512]] &amp;amp; [[RDM]] commands using hardware devices and DMX over IP protocols. This enables [[:Category:Controllers | software controllers]] to communicate with hardware either via Ethernet or over traditional DMX512 networks.&lt;br /&gt;
&lt;br /&gt;
OLA can also convert DMX512 data sent using DMX over IP protocols from one format to another, allowing devices from different manufacturers to interact with one another. For example a [[Strand_Lighting|Strand]] Lighting Console using ShowNet can send DMX512 to an [[Enttec]] [[DmxEtherGate MKII|EtherGate]]. When combined with a physical DMX interface such as the [[DMX USB Pro]], OLA can send and receive data from wired DMX512 networks.&lt;br /&gt;
&lt;br /&gt;
==Main Features ==&lt;br /&gt;
&lt;br /&gt;
* Supports a variety of DMX over IP Protocols and a dozen different USB DMX devices.&lt;br /&gt;
* Priority based merging of different sources.&lt;br /&gt;
* Built in web based configuration including:&lt;br /&gt;
** [[RDM]] controller&lt;br /&gt;
** Drag and drop RDM patching with an automatic patcher&lt;br /&gt;
** Custom UI for mobile devices (iPhone, Android)&lt;br /&gt;
* Command line tools which enable scripting of configuration and RDM commands.&lt;br /&gt;
* Python, C++, Objective-C++ APIs for developers to build their own applications.&lt;br /&gt;
* Runs on Mac OS X (ppc, i386, x86_64) &amp;amp; Linux ( i386, x86-64, arm).&lt;br /&gt;
* Source code is open and available at no cost.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A port to Windows is feasible if someone wants to add the necessary platform-dependent code. For now it can be run on Windows using VMWare (see [[OLA on Windows with VMWare]])&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Questions&amp;lt;/b&amp;gt;: See the [http://groups.google.com/group/open-lighting mailing list]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Bugs&amp;lt;/b&amp;gt;: Check the [http://code.google.com/p/linux-lighting/issues/list bug tracker]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Contribute&amp;lt;/b&amp;gt;: Looking to help? Visit the [[OLA Contributors]] page. The page also lists people and companies who have supported OLA. Please support them in return!&lt;br /&gt;
&lt;br /&gt;
==Supported Protocols==&lt;br /&gt;
&lt;br /&gt;
{| border=1 cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
! '''Protocol'''!! Linux !! '''Mac OS X''' &lt;br /&gt;
|-&lt;br /&gt;
|| [[:Category:ArtNet|ArtNet]]   || [[Image:Green-tick.png|center]] [[Image:Rdm.gif|center]] || [[Image:Green-tick.png|center]]  &lt;br /&gt;
[[Image:Rdm.gif|center]] &lt;br /&gt;
|-&lt;br /&gt;
|| [[E1.31]] / [[ACN]] || [[Image:Green-tick.png|center]]  || [[Image:Green-tick.png|center]] &lt;br /&gt;
|-&lt;br /&gt;
|| [[:Category:ESP Net|ESP Net]] || [[Image:Green-tick.png|center]]  || [[Image:Green-tick.png|center]] &lt;br /&gt;
|-&lt;br /&gt;
|| [[:Category:Pathport|Pathport]]  || [[Image:Green-tick.png|center]]  || [[Image:Green-tick.png|center]] &lt;br /&gt;
|-&lt;br /&gt;
|| [[:Category:Sandnet|Sandnet]] || [[Image:Green-tick.png|center]]  || [[Image:Green-tick.png|center]] &lt;br /&gt;
|-&lt;br /&gt;
|| [[:Category:ShowNet|ShowNet]] || [[Image:Green-tick.png|center]]  || [[Image:Green-tick.png|center]] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Supported Devices==&lt;br /&gt;
&lt;br /&gt;
{| border=1 cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
! '''Device'''!! Linux !! '''Mac OS X''' &lt;br /&gt;
|-&lt;br /&gt;
||  [[Anyma uDMX]] || [[Image:Trans.gif|center]] || [[Image:Trans.gif|center]] &lt;br /&gt;
|-&lt;br /&gt;
|| [[Arduino RGB Mixer]] || [[Image:Green-tick.png|center]]  || [[Image:Green-tick.png|center]] &lt;br /&gt;
|-&lt;br /&gt;
|| [[DMX 4 Linux]] || [[Image:Trans.gif|center]]  || &lt;br /&gt;
|-&lt;br /&gt;
|| [[DMX USB Pro]] || [[Image:Trans.gif|center]] [[Image:Recv.gif|center]] || [[Image:Trans.gif|center]] [[Image:Recv.gif|center]] &lt;br /&gt;
|-&lt;br /&gt;
|| [[DMX-TRI]] || [[Image:Trans.gif|center]] || [[Image:Trans.gif|center]] &lt;br /&gt;
|-&lt;br /&gt;
|| [[DMXking USB DMX512-A]] || [[Image:Trans.gif|center]] [[Image:Recv.gif|center]] || [[Image:Trans.gif|center]] [[Image:Recv.gif|center]] &lt;br /&gt;
|-&lt;br /&gt;
|| [[DMXter4 RDM]] / [[MiniDMXter]] || [[Image:Rdm.gif|center]] || [[Image:Rdm.gif|center]] &lt;br /&gt;
|-&lt;br /&gt;
|| [[Open DMX USB]] || [[Image:Trans.gif|center]]  || &lt;br /&gt;
|-&lt;br /&gt;
|| [[Packetheads USB_DMX Dongle]] ||  [[Image:Green-tick.png|center]]  ||  [[Image:Green-tick.png|center]]  &lt;br /&gt;
|-&lt;br /&gt;
|| [[RDM-TRI]] || [[Image:Trans.gif|center]] [[Image:Rdm.gif|center]] || [[Image:Trans.gif|center]] [[Image:Rdm.gif|center]]&lt;br /&gt;
|-&lt;br /&gt;
|| [[StageProfi]] || [[Image:Trans.gif|center]]  || [[Image:Trans.gif|center]] (Ethernet version only)&lt;br /&gt;
|-&lt;br /&gt;
|| [http://machosehead.wordpress.com/2010/06/12/udmx_asp/ uDMX_asp] || [[Image:Trans.gif|center]]  || [[Image:Trans.gif|center]] &lt;br /&gt;
|-&lt;br /&gt;
|| [[USBDMX2]] || [[Image:Trans.gif|center]]  || [[Image:Trans.gif|center]] &lt;br /&gt;
|-&lt;br /&gt;
|| [[Velleman K8062]] || [[Image:Trans.gif|center]]  || [[Image:Trans.gif|center]] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Getting Started==&lt;br /&gt;
&lt;br /&gt;
Start here if you've never used OLA before and read these in order.&lt;br /&gt;
* [[Download OLA]]&lt;br /&gt;
* [[OLA on OS X]] or [[OLA on Linux]] or [[OLA on Windows with VMWare]] - How to install OLA.&lt;br /&gt;
* [[Using OLA]] - A basic introduction&lt;br /&gt;
* [[OLA Command Line Tools]] - Documentation for the tools in ola-examples&lt;br /&gt;
* [[OLA Device Specific Configuration]]&lt;br /&gt;
* [[OLA Tips &amp;amp; Tricks]]&lt;br /&gt;
* [[RDM with OLA]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Tutorials&amp;lt;/b&amp;gt;&lt;br /&gt;
* [[OlaOutput Max External]] - Setup OlaOutput on Mac OS X to send DMX messages from Max/MSP/Jitter&lt;br /&gt;
* [[OLAGuruPlug]] - Running OLA on a [http://www.globalscaletechnologies.com/c-4-guruplugs.aspx GuruPlug]&lt;br /&gt;
* [[OlaLED]] - control RGB LED via http&lt;br /&gt;
* [[OLA RDM Responder Testing]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Advanced Topics:&amp;lt;/b&amp;gt;&lt;br /&gt;
* [[OLA Merging Algorithms]]&lt;br /&gt;
* [[OLA DiffServ support]] (QOS settings)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Developer Documentation:&amp;lt;/b&amp;gt;&lt;br /&gt;
* [[OLA developer info]] - about the source code and structure&lt;br /&gt;
* [[OLA Client API]] - the C++ API&lt;br /&gt;
* [[OLA Python API]] - easy DMX programming&lt;br /&gt;
* [[Build OLA Mac Packages]] - notes for building the .dmg images&lt;br /&gt;
* [[Building OLA for Windows]] - Notes on Windows support (in progress)&lt;br /&gt;
* [[Using OLA with Xcode]] - on a Mac, in Objective-C++&lt;br /&gt;
* [[Writing RDM Responder Tests]]&lt;br /&gt;
* [[Port Throttling]] &lt;br /&gt;
* [[OLA Performance Stats]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Tutorials&amp;lt;/b&amp;gt;, these refer to the previous release but parts of them are still relevant.&lt;br /&gt;
* [[LLA Sandnet Tutorial]] - Setup Horizon using Sandnet and LLA&lt;br /&gt;
* [[LLA and Q Light Controller Ubuntu Tutorial]] - Setup LLA on Ubuntu/Debian-type distro with QLC&lt;br /&gt;
* [[LLA and Q Light Controller OSX Tutorial]] - Setup LLA on Mac OS X with QLC&lt;br /&gt;
&lt;br /&gt;
[[Category:ArtNet]]&lt;br /&gt;
[[Category:ESP Net]]&lt;br /&gt;
[[Category:E1.31]]&lt;br /&gt;
[[Category:Sandnet]]&lt;br /&gt;
[[Category:ShowNet]]&lt;br /&gt;
[[Category:Utilities]]&lt;br /&gt;
[[Category:Pathport]]&lt;/div&gt;</summary>
		<author><name>66.92.11.32</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OLA_on_Windows_with_VMWare&amp;diff=3584</id>
		<title>OLA on Windows with VMWare</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=OLA_on_Windows_with_VMWare&amp;diff=3584"/>
				<updated>2011-01-29T21:30:58Z</updated>
		
		<summary type="html">&lt;p&gt;66.92.11.32: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Setting up the Linux System ==&lt;br /&gt;
&lt;br /&gt;
This is based on these [http://www.howtogeek.com/howto/11287/how-to-run-ubuntu-in-windows-7-with-vmware-player/  excellent instructions]. The instructions are for Windows 7, but work fine on XP as well.&lt;br /&gt;
&lt;br /&gt;
=== Download &amp;amp; Install VMWare Player ===&lt;br /&gt;
&lt;br /&gt;
Download the free [http://www.vmware.com/download/player/ VMWare Player]. You'll need to complete the survey and provide an email address. Install this on your windows machine. Reboot.&lt;br /&gt;
&lt;br /&gt;
=== Download a Linux Distribution ===&lt;br /&gt;
&lt;br /&gt;
I recommend Ubuntu. It's fairly easy to use and stays up to date. Get the latest version from [http://www.ubuntu.com/desktop/get-ubuntu/download here]. Once this is done you should have an .iso file which will be around 600MB.&lt;br /&gt;
&lt;br /&gt;
=== Setup a New Virtual Machine ===&lt;br /&gt;
&lt;br /&gt;
Open VMWare Player, select &amp;quot;Create New Virtual Machine&amp;quot;. Choose &amp;quot;Installer Disk Image&amp;quot; and point to the Linux .iso file you downloaded.&lt;br /&gt;
&lt;br /&gt;
On the next screen setup a username &amp;amp; password. You can then control where the VM image is stored and the size of the image. The defaults are fine.&lt;br /&gt;
&lt;br /&gt;
Click Finish to setup the Linux image. Installation of Ubuntu then begins.&lt;br /&gt;
&lt;br /&gt;
You'll be asked if you want to install VMWare tool for Linux. Say yes and the download will continue along with the install. This stage can take quite a while.&lt;/div&gt;</summary>
		<author><name>66.92.11.32</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=Writing_RDM_Responder_Tests&amp;diff=3579</id>
		<title>Writing RDM Responder Tests</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=Writing_RDM_Responder_Tests&amp;diff=3579"/>
				<updated>2011-01-21T03:01:45Z</updated>
		
		<summary type="html">&lt;p&gt;66.92.11.32: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page describes how to author new RDM Responder tests. Read [[OLA RDM Responder Testing]] for information on running the tests and some general information about the testing framework.&lt;br /&gt;
&lt;br /&gt;
== Basic Test Structure ==&lt;br /&gt;
&lt;br /&gt;
The tests are defined in tools/rdm/TestDefinitions.py . Each test subclasses the ResponderTest class and provides the Test() method which is used to send the RDM request.&lt;br /&gt;
&lt;br /&gt;
=== Dependencies ===&lt;br /&gt;
&lt;br /&gt;
Tests can have dependencies, which enables the conditional running of tests if conditions match. Dependencies are defined in the DEPS variable&lt;br /&gt;
&lt;br /&gt;
=== Categories ===&lt;br /&gt;
&lt;br /&gt;
Each test belongs to a category (defined in tools/rdm/ResponderTest.py). Categories follow those in the RDM Categories/Parameter ID Defines table in the E1.20 document but there are some extra categories for specific behavior like TestCategory.ERROR_CONDITIONS and TestCategory.SUB_DEVICES . The category a test belongs to is defined in the CATEGORY variable.&lt;br /&gt;
&lt;br /&gt;
=== PID ===&lt;br /&gt;
&lt;br /&gt;
The PID variable defined which PID this test will exercise (tests can exercise multiple PIDs but that's more complicated). The PID variable should be set to a string that exists in the PidStore data file.&lt;br /&gt;
&lt;br /&gt;
== Example 1 == &lt;br /&gt;
&lt;br /&gt;
This shows a test which checks that a GET request for PID ''DMX Start Address'' behaves correctly.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class GetStartAddress(ResponderTest):&lt;br /&gt;
  &amp;quot;&amp;quot;&amp;quot;GET the DMX start address.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
  CATEGORY = TestCategory.DMX_SETUP&lt;br /&gt;
  PID = 'dmx_start_address'&lt;br /&gt;
  DEPS = [GetDeviceInfo] &lt;br /&gt;
  &lt;br /&gt;
  def Test(self):   &lt;br /&gt;
    result = ExpectedResult.NackResponse(self.pid.value,&lt;br /&gt;
                                         RDMNack.NR_UNKNOWN_PID)&lt;br /&gt;
    if self.Deps(GetDeviceInfo).GetField('dmx_footprint') &amp;gt; 0:                                                                                                              &lt;br /&gt;
      result = ExpectedResult.AckResponse(self.pid.value, ['dmx_address'])&lt;br /&gt;
    self.AddExpectedResults(result)&lt;br /&gt;
    self.SendGet(PidStore.ROOT_DEVICE, self.pid)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Things to note:&lt;br /&gt;
* The GetStartAddress test depends on the GetDeviceInfo test to ensure that the device reports a dmx footprint &amp;gt; 0. This is because devices with a footprint of 0 are not required to implement the DMX Start Address PID.&lt;br /&gt;
&lt;br /&gt;
== Advanced Functionality ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Warnings === &lt;br /&gt;
&lt;br /&gt;
Warnings can be recorded when we detect behavior which while not serious enough to cause a failure should still be correctly handled. Warnings are printed in the summary section of the test output. To record a warning use the AddWarning() method:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if footprint &amp;gt; MAX_DMX_ADDRESS:&lt;br /&gt;
  self.AddWarning('DMX Footprint of %d, was more than 512' % footprint) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Advisory Messages ===&lt;br /&gt;
&lt;br /&gt;
Advisory messages are similar to warnings but they indicate issues that are not covered by the standard but are likley to cause problems i.e a sensor temperature out side of the stated scale range.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if sensor.value &amp;gt; sensor.max:&lt;br /&gt;
  self.AddAdvisory('Sensor value %d greater than max range %d' % (sensor.value, sensor.max)) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pre Conditions ===&lt;br /&gt;
&lt;br /&gt;
A test may not want to run if certain conditions aren't satisfied. The PreCondition() method allows a test to prevent itself from running. For example, we only want to run the GetParamDescription test if we find manufacturer specific PIDS:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 def PreCondition(self):                                                                                                                                                   &lt;br /&gt;
  params = self.Deps(GetSupportedParameters).supported_parameters&lt;br /&gt;
  self.params = [p for p in params if p &amp;gt;= 0x8000 and p &amp;lt; 0xffe0]&lt;br /&gt;
  return len(self.params) &amp;gt; 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Verification Methods ===&lt;br /&gt;
&lt;br /&gt;
Sometimes it's not enough to check the presences of fields, or use simple equality matching. The VerifyResult() method is passed the full RDM response and can be used to implement complex inter-field checking.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def VerifyResult(self, unused_status, fields):                                                                                                                            &lt;br /&gt;
  &amp;quot;&amp;quot;&amp;quot;Check the footprint, personalities &amp;amp; sub devices.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
  footprint = fields['dmx_footprint']   if footprint &amp;gt; MAX_DMX_ADDRESS:&lt;br /&gt;
    self.AddWarning('DMX Footprint of %d, was more than 512' % footprint)&lt;br /&gt;
  if footprint &amp;gt; 0:&lt;br /&gt;
    personality_count = fields['personality_count']&lt;br /&gt;
    current_personality = fields['current_personality']&lt;br /&gt;
    if personality_count == 0:&lt;br /&gt;
      self.AddWarning('DMX Footprint non 0, but no personalities listed')&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Mixins ==&lt;br /&gt;
&lt;br /&gt;
Mixins are classes which abstract away common functionality to make it easier to author tests. Mixins are defined in tools/rdm/TestMixins.py.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class GetDeviceLabel(TestMixins.GetLabelMixin, ResponderTest):&lt;br /&gt;
  &amp;quot;&amp;quot;&amp;quot;GET the device label.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
  CATEGORY = TestCategory.PRODUCT_INFORMATION&lt;br /&gt;
  PID = 'device_label'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This test didn't need any code at all. We simply inherit from the GetLabelMixin, which provides it's own Test() method. Remember when using Mixins to inherit from ResponderTest last, otherwise the Test() method in ResponderTest will be used and the test will be marked as BROKEN.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The ''IsSupportedMixin'' allows for easy testing based on whether support for the parameter has been declared. From the mixin code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
class IsSupportedMixin(object):                                                                                                                                             &lt;br /&gt;
  &amp;quot;&amp;quot;&amp;quot;A Mixin that changes the result if the pid isn't in the supported list.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
  DEPS = [GetSupportedParameters]&lt;br /&gt;
&lt;br /&gt;
  def PidSupported(self):&lt;br /&gt;
    return self.Deps(GetSupportedParameters).SupportsPid(self.pid)&lt;br /&gt;
&lt;br /&gt;
  def AddIfSupported(self, result):&lt;br /&gt;
    if not self.PidSupported():&lt;br /&gt;
      result = ExpectedResult.NackResponse(self.pid.value,&lt;br /&gt;
                                           RDMNack.NR_UNKNOWN_PID)&lt;br /&gt;
    self.AddExpectedResults(result)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tests can use this like so:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
class GetFactoryDefaults(IsSupportedMixin, ResponderTest):&lt;br /&gt;
  &amp;quot;&amp;quot;&amp;quot;GET the factory defaults pid.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
  CATEGORY = TestCategory.PRODUCT_INFORMATION&lt;br /&gt;
  PID = 'factory_defaults'&lt;br /&gt;
&lt;br /&gt;
  def Test(self):&lt;br /&gt;
    self.AddIfSupported(&lt;br /&gt;
      ExpectedResult.AckResponse(self.pid.value, ['using_defaults']))&lt;br /&gt;
    self.SendGet(PidStore.ROOT_DEVICE, self.pid)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This test will send a GET request for the ''factory_defaults'' pid. If this pid was listed in the supported parameters the test will expect a ACK response. If this pid wasn't listed, a NR_UNKNOWN_PID will be expected.&lt;br /&gt;
&lt;br /&gt;
== Guidelines ==&lt;br /&gt;
 &lt;br /&gt;
* Avoid the use of multiple expected responses. With good use of test dependencies, a test should know what to expect before we send the request.&lt;br /&gt;
* Always include a doc string. These are used in the debugging output to describe the test&lt;br /&gt;
* Try to keep the number of dependencies for each test to a minimum. Additional dependencies increase the chance the test won't be run because a dependency failed.&lt;br /&gt;
* Use the IsSupportedMixin where ever possible.&lt;/div&gt;</summary>
		<author><name>66.92.11.32</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OLA_on_Linux&amp;diff=3575</id>
		<title>OLA on Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=OLA_on_Linux&amp;diff=3575"/>
				<updated>2011-01-13T05:27:56Z</updated>
		
		<summary type="html">&lt;p&gt;66.92.11.32: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This describes how to get [[OLA]] working on a Linux system either from the git repo or by using a [http://code.google.com/p/linux-lighting/downloads/list released tarball].&lt;br /&gt;
&lt;br /&gt;
=Checkout or Download an Archive=&lt;br /&gt;
&lt;br /&gt;
Either download a tarball from the releases page, or check out the git repo with the following command:&lt;br /&gt;
&lt;br /&gt;
  git clone http://git.opendmx.net/ola&lt;br /&gt;
&lt;br /&gt;
If you don't have '''git''' yet, you'll need to install it with your distro's package manager.&lt;br /&gt;
&lt;br /&gt;
=Install libraries=&lt;br /&gt;
&lt;br /&gt;
You need a couple of libraries installed for everything to work correctly. Some of these are available as packages in distros but others need to be downloaded and built manually.&lt;br /&gt;
&lt;br /&gt;
First up you'll need the following:&lt;br /&gt;
* cppunit&lt;br /&gt;
* uuid or ossp uuid&lt;br /&gt;
* pkg-config&lt;br /&gt;
* curses&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Debian/Ubuntu users can install them with apt:&lt;br /&gt;
&lt;br /&gt;
  apt-get install libcppunit-dev libcppunit-1.12-1 uuid-dev pkg-config libncurses5-dev&lt;br /&gt;
&lt;br /&gt;
If you're building from git you'll also need the following:&lt;br /&gt;
&lt;br /&gt;
* libtool&lt;br /&gt;
* automake&lt;br /&gt;
* autoconf&lt;br /&gt;
&lt;br /&gt;
  apt-get install libtool autoconf automake&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Next, you need '''Protocol Buffers'''  [http://code.google.com/p/protobuf/ http://code.google.com/p/protobuf/] version 3.2.0 or above from Google (BSD license). Most likely, you'll need to download and build them yourself.&lt;br /&gt;
&lt;br /&gt;
Debian (and Ubuntu) users can, in some cases, use the following packages (not yet in stable):&lt;br /&gt;
libprotobuf2 (libprotobuf3), libprotobuf-dev, protobuf-compiler&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finally, if you want to use the built in webserver, you'll need '''microhttpd'''. Note: you'll need version &amp;gt;= 0.4.0 of microhttpd else you will get errors:&lt;br /&gt;
  &lt;br /&gt;
* [ftp://ftp.gnu.org/gnu/libmicrohttpd/ ftp://ftp.gnu.org/gnu/libmicrohttpd/]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Once everything is installed, run ldconfig as root to pick up the new libraries&lt;br /&gt;
&lt;br /&gt;
  sudo  ldconfig&lt;br /&gt;
&lt;br /&gt;
=Configure=&lt;br /&gt;
&lt;br /&gt;
If you checked out the sources from git, you'll need to run&lt;br /&gt;
&lt;br /&gt;
  autoreconf -i&lt;br /&gt;
&lt;br /&gt;
After that run&lt;br /&gt;
&lt;br /&gt;
  ./configure&lt;br /&gt;
&lt;br /&gt;
=Building &amp;amp; Testing=&lt;br /&gt;
&lt;br /&gt;
Build&lt;br /&gt;
  make&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you get an error like the following:&lt;br /&gt;
&lt;br /&gt;
 /bin/sh ./libtool --tag=CC   --mode=compile gcc -DHAVE_CONFIG_H -I.   -I/opt/local/var/macports/software/protobuf-cpp/2.0.3_0/opt/local/include/  -g -O2 -c -o ltdl.lo ltdl.c&lt;br /&gt;
 ./libtool: line 464: CDPATH: command not found&lt;br /&gt;
 /Users/simonn/lighting/lla/libltdl/libtool: line 464: CDPATH: command not found&lt;br /&gt;
 /Users/simonn/lighting/lla/libltdl/libtool: line 1142: func_opt_split: command not found&lt;br /&gt;
 libtool: Version mismatch error.  This is libtool 2.2.6, but the&lt;br /&gt;
 libtool: definition of this LT_INIT comes from an older release.&lt;br /&gt;
 libtool: You should recreate aclocal.m4 with macros from libtool 2.2.6&lt;br /&gt;
 libtool: and run autoconf again.&lt;br /&gt;
&lt;br /&gt;
Your system uses a different version of libtool. Run:&lt;br /&gt;
&lt;br /&gt;
  libtoolize --ltdl -c -f&lt;br /&gt;
&lt;br /&gt;
and then start from the autoreconf step again.&lt;br /&gt;
&lt;br /&gt;
Run the tests&lt;br /&gt;
  make check&lt;br /&gt;
&lt;br /&gt;
And install OLA&lt;br /&gt;
  sudo make install&lt;br /&gt;
  sudo ldconfig&lt;br /&gt;
&lt;br /&gt;
=Install ola-examples=&lt;br /&gt;
&lt;br /&gt;
The [[OLA Command Line Tools]] come separately. Again either download a tarball or checkout from the git repo:&lt;br /&gt;
&lt;br /&gt;
  git clone http://www.nomis52.net/git/lla-examples&lt;br /&gt;
&lt;br /&gt;
The steps are similar to building the main package.&lt;br /&gt;
&lt;br /&gt;
   autoreconf -i   # if you used the git repo&lt;br /&gt;
   ./configure&lt;br /&gt;
   make&lt;br /&gt;
   sudo make install&lt;br /&gt;
&lt;br /&gt;
Note in order for ola_dmxmonitor and ola_dmxconsole to build you *must* have curses installed.&lt;/div&gt;</summary>
		<author><name>66.92.11.32</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=USB_Protocol_Extensions&amp;diff=3529</id>
		<title>USB Protocol Extensions</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=USB_Protocol_Extensions&amp;diff=3529"/>
				<updated>2010-11-15T04:32:15Z</updated>
		
		<summary type="html">&lt;p&gt;66.92.11.32: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This documents the additional message types added to the [[Enttec]] [[DMX USB Pro]] protocol to support multiple device types. As the number of devices supporting the protocol grows, it becomes difficult for software like [[OLA]] to differentiate the device types. The ''Device Manufacturer'' &amp;amp; ''Device Name'' messages allow the host software to determine the device and know which set of messages it supports.&lt;br /&gt;
&lt;br /&gt;
== Other Solutions ==&lt;br /&gt;
&lt;br /&gt;
=== USB Serial Number ===&lt;br /&gt;
&lt;br /&gt;
Enttec USB Pro devices have only started programming the serial numbers recently (&amp;gt;2008?).&lt;br /&gt;
When using the standard USB Serial drivers on Mac &amp;amp; Linux, the host application doesn't have access to the serial numbers. This would require us to write our own USB drivers using libusb to expose this information.&lt;br /&gt;
&lt;br /&gt;
=== Use the User Addressable EEPROM ===&lt;br /&gt;
&lt;br /&gt;
Some devices don't support the ''Set Widget Parameters'' message so this isn't an option. Also it suffers from the bootstrapping issue, we need to know what device it is before we can write the information about what device it is...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Device Manufacturer, Label = 77, no data ==&lt;br /&gt;
&lt;br /&gt;
This message requests the device manufacturer information from the widget. The response is of the form:&lt;br /&gt;
&lt;br /&gt;
{| border=1&lt;br /&gt;
! '''Size in Bytes'''!! Description &lt;br /&gt;
|-&lt;br /&gt;
|| 2   || [[ESTA]] ID, Least significant byte first&lt;br /&gt;
|-&lt;br /&gt;
|| 32 || Up to 32 bytes containing the manufacturer name. Not null terminated.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Device Name, Label = 78, no data ==&lt;br /&gt;
&lt;br /&gt;
This message requests the device name information from the widget. The response is of the form:&lt;br /&gt;
&lt;br /&gt;
{| border=1&lt;br /&gt;
! '''Size in Bytes'''!! Description &lt;br /&gt;
|-&lt;br /&gt;
|| 2   || Device Type ID, Manufacturer assigned. Least significant byte first.&lt;br /&gt;
|-&lt;br /&gt;
|| 32 || Up to 32 bytes containing the device type. Not null terminated.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Devices Supporting these Message Types ==&lt;br /&gt;
&lt;br /&gt;
* [[Arduino RGB Mixer]] , ESTA ID: 0x7a70, Device ID: 0x1&lt;br /&gt;
* [[Packetheads USB_DMX Dongle]] , ESTA ID: 0x7a70, Device ID: 0x2&lt;br /&gt;
* [[DMX-TRI]], ESTA ID: 0x6864, Device ID 0x0: 0x1&lt;br /&gt;
* [[RDM-TRI]], ESTA ID: 0x6864, Device ID 0x0: 0x2&lt;br /&gt;
* [[DMXking  USB DMX512-A]], ESTA ID: 0x6A6B, Device ID: 0x0&lt;br /&gt;
* [[DMXter4_RDM]], ESTA ID: 0x4744, Device ID: 0x4D44&lt;br /&gt;
* [[MiniDMXter]], ESTA ID: 0x4744, Device ID: 0x494D&lt;br /&gt;
&lt;br /&gt;
== External References ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.enttec.com/docs/dmx_usb_pro_api_spec.pdf DMX Pro API]&lt;br /&gt;
* [http://www.esta.org/tsp/working_groups/CP/mfctrIDs.php ESTA IDs]&lt;/div&gt;</summary>
		<author><name>66.92.11.32</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=USB_Protocol_Extensions&amp;diff=3528</id>
		<title>USB Protocol Extensions</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=USB_Protocol_Extensions&amp;diff=3528"/>
				<updated>2010-11-14T03:44:40Z</updated>
		
		<summary type="html">&lt;p&gt;66.92.11.32: /* Devices Supporting these Message Types */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This documents the additional message types added to the [[Enttec]] [[DMX USB Pro]] protocol to support multiple device types. As the number of devices supporting the protocol grows, it becomes difficult for software like [[OLA]] to differentiate the device types. The ''Device Manufacturer'' &amp;amp; ''Device Name'' messages allow the host software to determine the device and know which set of messages it supports.&lt;br /&gt;
&lt;br /&gt;
== Other Solutions ==&lt;br /&gt;
&lt;br /&gt;
=== USB Serial Number ===&lt;br /&gt;
&lt;br /&gt;
Enttec USB Pro devices have only started programming the serial numbers recently (&amp;gt;2008?).&lt;br /&gt;
When using the standard USB Serial drivers on Mac &amp;amp; Linux, the host application doesn't have access to the serial numbers. This would require us to write our own USB drivers using libusb to expose this information.&lt;br /&gt;
&lt;br /&gt;
=== Use the User Addressable EEPROM ===&lt;br /&gt;
&lt;br /&gt;
Some devices don't support the ''Set Widget Parameters'' message so this isn't an option. Also it suffers from the bootstrapping issue, we need to know what device it is before we can write the information about what device it is...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Device Manufacturer, Label = 77, no data ==&lt;br /&gt;
&lt;br /&gt;
This message requests the device manufacturer information from the widget. The response is of the form:&lt;br /&gt;
&lt;br /&gt;
{| border=1&lt;br /&gt;
! '''Size in Bytes'''!! Description &lt;br /&gt;
|-&lt;br /&gt;
|| 2   || [[ESTA]] ID, Least significant byte first&lt;br /&gt;
|-&lt;br /&gt;
|| 32 || Up to 32 bytes containing the manufacturer name. Not null terminated.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Device Name, Label = 78, no data ==&lt;br /&gt;
&lt;br /&gt;
This message requests the device name information from the widget. The response is of the form:&lt;br /&gt;
&lt;br /&gt;
{| border=1&lt;br /&gt;
! '''Size in Bytes'''!! Description &lt;br /&gt;
|-&lt;br /&gt;
|| 2   || Device Type ID, Manufacturer assigned. Least significant byte first.&lt;br /&gt;
|-&lt;br /&gt;
|| 32 || Up to 32 bytes containing the device type. Not null terminated.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Devices Supporting these Message Types ==&lt;br /&gt;
&lt;br /&gt;
* [[Arduino RGB Mixer]] , ESTA ID: 0x7a70, Device ID: 0x1&lt;br /&gt;
* [[Packetheads USB_DMX Dongle]] , ESTA ID: 0x7a70, Device ID: 0x2&lt;br /&gt;
* [[DMX-TRI]], ESTA ID: 0x6864, Device ID 0x0: 0x1&lt;br /&gt;
* [[RDM-TRI]], ESTA ID: 0x6864, Device ID 0x0: 0x2&lt;br /&gt;
* [[DMXking  USB DMX512-A]], ESTA ID: 0x6A6B, Device ID: 0x0&lt;br /&gt;
&lt;br /&gt;
== External References ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.enttec.com/docs/dmx_usb_pro_api_spec.pdf DMX Pro API]&lt;br /&gt;
* [http://www.esta.org/tsp/working_groups/CP/mfctrIDs.php ESTA IDs]&lt;/div&gt;</summary>
		<author><name>66.92.11.32</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=Build_OLA_Mac_Packages&amp;diff=3493</id>
		<title>Build OLA Mac Packages</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=Build_OLA_Mac_Packages&amp;diff=3493"/>
				<updated>2010-10-31T21:19:14Z</updated>
		
		<summary type="html">&lt;p&gt;66.92.11.32: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;These are my notes on building universal binary packages for mac.&lt;br /&gt;
&lt;br /&gt;
==Directory setup==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# extracted tarballs&lt;br /&gt;
~/mac-packaging/build/libartnet-1.1.0&lt;br /&gt;
~/mac-packaging/build/libmicrohttpd-0.4.2&lt;br /&gt;
~/mac-packaging/build/protobuf-2.2.0&lt;br /&gt;
~/mac-packaging/build/ctemplate-&lt;br /&gt;
~/mac-packaging/build/libusb-1.0.6&lt;br /&gt;
# install desintations&lt;br /&gt;
~/mac-packaging/non-flat-packages/libartnet&lt;br /&gt;
~/mac-packaging/non-flat-packages/libmicrohttpd&lt;br /&gt;
~/mac-packaging/non-flat-packages/protobuf&lt;br /&gt;
~/mac-packaging/non-flat-packages/ctemplate&lt;br /&gt;
~/mac-packaging/non-flat-packages/libusb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Building OLA Dependancies ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== libusb ===&lt;br /&gt;
&lt;br /&gt;
In ~/mac-packaging/build/libusb-1.0.6:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./configure  --disable-dependency-tracking&lt;br /&gt;
make CFLAGS=&amp;quot;-arch ppc -arch i386 -arch x86_64&amp;quot;   LDFLAGS=&amp;quot; -arch ppc -arch i386 -arch x86_64&amp;quot;&lt;br /&gt;
DESTDIR=/Users/simonn/lighting/mac-packaging/non-flat-packages/libusb/ make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== libmicrohttpd ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./configure  --disable-dependency-tracking --with-libgcrypt-prefix=/tmp/foo&lt;br /&gt;
make CFLAGS=&amp;quot;-arch ppc -arch i386&amp;quot; CPPFLAGS=&amp;quot;-arch ppc -arch i386 -arch x86_64&amp;quot;  LDFLAGS=&amp;quot; -arch ppc -arch i386 -arch x86_64&amp;quot;&lt;br /&gt;
DESTDIR=/Users/simonn/lighting/mac-packaging/non-flat-packages/microhttpd/ make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== protobuf ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./configure  --disable-dependency-tracking&lt;br /&gt;
make CFLAGS=&amp;quot;-arch ppc -arch i386 -arch x86_64&amp;quot; CPPFLAGS=&amp;quot;-arch ppc -arch i386 -arch x86_64&amp;quot;  LDFLAGS=&amp;quot; -arch ppc -arch i386 -arch x86_64&amp;quot;&lt;br /&gt;
DESTDIR=/Users/simonn/lighting/mac-packaging/non-flat-packages/protobuf/ make install&lt;br /&gt;
./configure --disable-dependency-tracking&lt;br /&gt;
sudo make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The second make install is required so that ola-examples builds. I'm sure there is a way around this but I can't figure it out...&lt;br /&gt;
&lt;br /&gt;
=== Cleanup ===&lt;br /&gt;
&lt;br /&gt;
In ~/lighting/mac-packaging/non-flat-packages, run&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
find ./ -name &amp;quot;.DS_Store&amp;quot; -exec rm {} \;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Creating Dependancy Packages ==&lt;br /&gt;
&lt;br /&gt;
Using PackageMaker, create a distribution package for each of the dependancies. Remember to fix the permissions and set Package Location to 'Same Level'. Build the package and save it in ~/lighting/mac-packaging/non-flat-packages&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
~/lighting/mac-packaging/non-flat-packages should now look something like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
libusb 1.0.8.mpkg&lt;br /&gt;
libusb 1.0.8.pkg&lt;br /&gt;
microhttpd 0.4.2.mpkg &lt;br /&gt;
microhttpd.pkg  &lt;br /&gt;
protobuf 2.2.0.mpkg &lt;br /&gt;
protobuf 2.2.0.pkg  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Building ola &amp;amp; ola-examples ==&lt;br /&gt;
&lt;br /&gt;
Unpack the ola tarball, then run&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./configure --disable-dependency-tracking&lt;br /&gt;
make  CPPFLAGS=&amp;quot;-arch ppc -arch i386 -arch x86_64&amp;quot;  LDFLAGS=&amp;quot; -arch ppc -arch i386 -arch x86_64&amp;quot;&lt;br /&gt;
make check&lt;br /&gt;
sudo make install &lt;br /&gt;
DESTDIR=/Users/simonn/lighting/mac-packaging/ola  make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Again, The first make install is required so that ola-examples builds. I'm sure there is a way around this but I can't figure it out...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Unpack the ola-examples tarball and run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./configure --disable-dependency-tracking &lt;br /&gt;
make  CPPFLAGS=&amp;quot;-arch ppc -arch i386 -arch x86_64&amp;quot;  LDFLAGS=&amp;quot; -arch ppc -arch i386 -arch x86_64&amp;quot;&lt;br /&gt;
DESTDIR=/Users/simonn/lighting/mac-packaging/ola-examples make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Clean up the .DS_Store files in ola &amp;amp; ola-tools&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
find ./ -name &amp;quot;*.DS_Store&amp;quot; -exec rm {} \;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Create the main package &amp;amp; build ==&lt;br /&gt;
&lt;br /&gt;
Add the 4 dependancies, ola &amp;amp; ola-tools&lt;/div&gt;</summary>
		<author><name>66.92.11.32</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=Build_OLA_Mac_Packages&amp;diff=3492</id>
		<title>Build OLA Mac Packages</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=Build_OLA_Mac_Packages&amp;diff=3492"/>
				<updated>2010-10-31T21:02:31Z</updated>
		
		<summary type="html">&lt;p&gt;66.92.11.32: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;These are my notes on building universal binary packages for mac.&lt;br /&gt;
&lt;br /&gt;
==Directory setup==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# extracted tarballs&lt;br /&gt;
~/mac-packaging/build/libartnet-1.1.0&lt;br /&gt;
~/mac-packaging/build/libmicrohttpd-0.4.2&lt;br /&gt;
~/mac-packaging/build/protobuf-2.2.0&lt;br /&gt;
~/mac-packaging/build/ctemplate-&lt;br /&gt;
~/mac-packaging/build/libusb-1.0.6&lt;br /&gt;
# install desintations&lt;br /&gt;
~/mac-packaging/non-flat-packages/libartnet&lt;br /&gt;
~/mac-packaging/non-flat-packages/libmicrohttpd&lt;br /&gt;
~/mac-packaging/non-flat-packages/protobuf&lt;br /&gt;
~/mac-packaging/non-flat-packages/ctemplate&lt;br /&gt;
~/mac-packaging/non-flat-packages/libusb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Building OLA Dependancies ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== libusb ===&lt;br /&gt;
&lt;br /&gt;
In ~/mac-packaging/build/libusb-1.0.6:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./configure  --disable-dependency-tracking&lt;br /&gt;
make CFLAGS=&amp;quot;-arch ppc -arch i386 -arch x86_64&amp;quot;   LDFLAGS=&amp;quot; -arch ppc -arch i386 -arch x86_64&amp;quot;&lt;br /&gt;
DESTDIR=/Users/simonn/lighting/mac-packaging/non-flat-packages/libusb/ make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== libmicrohttpd ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./configure  --disable-dependency-tracking --with-libgcrypt-prefix=/tmp/foo&lt;br /&gt;
make CFLAGS=&amp;quot;-arch ppc -arch i386&amp;quot; CPPFLAGS=&amp;quot;-arch ppc -arch i386 -arch x86_64&amp;quot;  LDFLAGS=&amp;quot; -arch ppc -arch i386 -arch x86_64&amp;quot;&lt;br /&gt;
DESTDIR=/Users/simonn/lighting/mac-packaging/non-flat-packages/microhttpd/ make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== protobuf ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./configure  --disable-dependency-tracking&lt;br /&gt;
make CFLAGS=&amp;quot;-arch ppc -arch i386 -arch x86_64&amp;quot; CPPFLAGS=&amp;quot;-arch ppc -arch i386 -arch x86_64&amp;quot;  LDFLAGS=&amp;quot; -arch ppc -arch i386 -arch x86_64&amp;quot;&lt;br /&gt;
DESTDIR=/Users/simonn/lighting/mac-packaging/non-flat-packages/protobuf/ make install&lt;br /&gt;
./configure --disable-dependency-tracking&lt;br /&gt;
sudo make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The second make install is required so that ola-examples builds. I'm sure there is a way around this but I can't figure it out...&lt;br /&gt;
&lt;br /&gt;
=== Cleanup ===&lt;br /&gt;
&lt;br /&gt;
In ~/lighting/mac-packaging/non-flat-packages, run&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
find ./ -name &amp;quot;.DS_Store&amp;quot; -exec rm {} \;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Creating Dependancy Packages ==&lt;br /&gt;
&lt;br /&gt;
Using PackageMaker, create a distribution package for each of the dependancies. Remember to fix the permissions and set Package Location to 'Same Level'. Build the package and save it in ~/lighting/mac-packaging/non-flat-packages&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
~/lighting/mac-packaging/non-flat-packages should now look something like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
microhttpd 0.4.2.mpkg &lt;br /&gt;
microhttpd.pkg  &lt;br /&gt;
protobuf 2.2.0.mpkg &lt;br /&gt;
protobuf 2.2.0.pkg  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Building ola &amp;amp; ola-examples ==&lt;br /&gt;
&lt;br /&gt;
Unpack the ola tarball, then run&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./configure --disable-dependency-tracking&lt;br /&gt;
make  CPPFLAGS=&amp;quot;-arch ppc -arch i386 -arch x86_64&amp;quot;  LDFLAGS=&amp;quot; -arch ppc -arch i386 -arch x86_64&amp;quot;&lt;br /&gt;
make check&lt;br /&gt;
sudo make install &lt;br /&gt;
DESTDIR=/Users/simonn/lighting/mac-packaging/ola  make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Again, The first make install is required so that ola-examples builds. I'm sure there is a way around this but I can't figure it out...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Unpack the ola-examples tarball and run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./configure --disable-dependency-tracking &lt;br /&gt;
make  CPPFLAGS=&amp;quot;-arch ppc -arch i386 -arch x86_64&amp;quot;  LDFLAGS=&amp;quot; -arch ppc -arch i386 -arch x86_64&amp;quot;&lt;br /&gt;
DESTDIR=/Users/simonn/lighting/mac-packaging/ola-examples make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Clean up the .DS_Store files in ola &amp;amp; ola-tools&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
find ./ -name &amp;quot;*.DS_Store&amp;quot; -exec rm {} \;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Create the main package &amp;amp; build ==&lt;br /&gt;
&lt;br /&gt;
Add the 4 dependancies, ola &amp;amp; ola-tools&lt;/div&gt;</summary>
		<author><name>66.92.11.32</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=Build_OLA_Mac_Packages&amp;diff=3491</id>
		<title>Build OLA Mac Packages</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=Build_OLA_Mac_Packages&amp;diff=3491"/>
				<updated>2010-10-31T20:59:56Z</updated>
		
		<summary type="html">&lt;p&gt;66.92.11.32: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;These are my notes on building universal binary packages for mac.&lt;br /&gt;
&lt;br /&gt;
==Directory setup==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# extracted tarballs&lt;br /&gt;
~/mac-packaging/build/libartnet-1.1.0&lt;br /&gt;
~/mac-packaging/build/libmicrohttpd-0.4.2&lt;br /&gt;
~/mac-packaging/build/protobuf-2.2.0&lt;br /&gt;
~/mac-packaging/build/ctemplate-&lt;br /&gt;
~/mac-packaging/build/libusb-1.0.6&lt;br /&gt;
# install desintations&lt;br /&gt;
~/mac-packaging/non-flat-packages/libartnet&lt;br /&gt;
~/mac-packaging/non-flat-packages/libmicrohttpd&lt;br /&gt;
~/mac-packaging/non-flat-packages/protobuf&lt;br /&gt;
~/mac-packaging/non-flat-packages/ctemplate&lt;br /&gt;
~/mac-packaging/non-flat-packages/libusb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Building OLA Dependancies ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== libusb ===&lt;br /&gt;
&lt;br /&gt;
In ~/mac-packaging/build/libusb-1.0.6:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/configure  --disable-dependency-tracking&lt;br /&gt;
make CFLAGS=&amp;quot;-arch ppc -arch i386 -arch x86_64&amp;quot;   LDFLAGS=&amp;quot; -arch ppc -arch i386 -arch x86_64&amp;quot;&lt;br /&gt;
DESTDIR=/Users/simonn/lighting/mac-packaging/non-flat-packages/libusb/ make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== libmicrohttpd ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./configure  --disable-dependency-tracking --with-libgcrypt-prefix=/tmp/foo&lt;br /&gt;
make CFLAGS=&amp;quot;-arch ppc -arch i386&amp;quot; CPPFLAGS=&amp;quot;-arch ppc -arch i386 -arch x86_64&amp;quot;  LDFLAGS=&amp;quot; -arch ppc -arch i386 -arch x86_64&amp;quot;&lt;br /&gt;
DESTDIR=/Users/simonn/lighting/mac-packaging/non-flat-packages/microhttpd/ make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== protobuf ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./configure  --disable-dependency-tracking&lt;br /&gt;
make CFLAGS=&amp;quot;-arch ppc -arch i386 -arch x86_64&amp;quot; CPPFLAGS=&amp;quot;-arch ppc -arch i386 -arch x86_64&amp;quot;  LDFLAGS=&amp;quot; -arch ppc -arch i386 -arch x86_64&amp;quot;&lt;br /&gt;
DESTDIR=/Users/simonn/lighting/mac-packaging/non-flat-packages/protobuf/ make install&lt;br /&gt;
./configure --disable-dependency-tracking&lt;br /&gt;
sudo make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The second make install is required so that ola-examples builds. I'm sure there is a way around this but I can't figure it out...&lt;br /&gt;
&lt;br /&gt;
=== Cleanup ===&lt;br /&gt;
&lt;br /&gt;
In ~/lighting/mac-packaging/non-flat-packages, run&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
find ./ -name &amp;quot;.DS_Store&amp;quot; -exec rm {} \;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Creating Dependancy Packages ==&lt;br /&gt;
&lt;br /&gt;
Using PackageMaker, create a distribution package for each of the dependancies. Remember to fix the permissions and set Package Location to 'Same Level'. Build the package and save it in ~/lighting/mac-packaging/non-flat-packages&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
~/lighting/mac-packaging/non-flat-packages should now look something like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
microhttpd 0.4.2.mpkg &lt;br /&gt;
microhttpd.pkg  &lt;br /&gt;
protobuf 2.2.0.mpkg &lt;br /&gt;
protobuf 2.2.0.pkg  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Building ola &amp;amp; ola-examples ==&lt;br /&gt;
&lt;br /&gt;
Unpack the ola tarball, then run&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./configure --disable-dependency-tracking&lt;br /&gt;
make  CPPFLAGS=&amp;quot;-arch ppc -arch i386 -arch x86_64&amp;quot;  LDFLAGS=&amp;quot; -arch ppc -arch i386 -arch x86_64&amp;quot;&lt;br /&gt;
make check&lt;br /&gt;
sudo make install &lt;br /&gt;
DESTDIR=/Users/simonn/lighting/mac-packaging/ola  make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Again, The first make install is required so that ola-examples builds. I'm sure there is a way around this but I can't figure it out...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Unpack the ola-examples tarball and run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./configure --disable-dependency-tracking &lt;br /&gt;
make  CPPFLAGS=&amp;quot;-arch ppc -arch i386 -arch x86_64&amp;quot;  LDFLAGS=&amp;quot; -arch ppc -arch i386 -arch x86_64&amp;quot;&lt;br /&gt;
DESTDIR=/Users/simonn/lighting/mac-packaging/ola-examples make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Clean up the .DS_Store files in ola &amp;amp; ola-tools&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
find ./ -name &amp;quot;*.DS_Store&amp;quot; -exec rm {} \;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Create the main package &amp;amp; build ==&lt;br /&gt;
&lt;br /&gt;
Add the 4 dependancies, ola &amp;amp; ola-tools&lt;/div&gt;</summary>
		<author><name>66.92.11.32</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OLA_Device_Specific_Configuration&amp;diff=3490</id>
		<title>OLA Device Specific Configuration</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=OLA_Device_Specific_Configuration&amp;diff=3490"/>
				<updated>2010-10-31T20:45:48Z</updated>
		
		<summary type="html">&lt;p&gt;66.92.11.32: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Anyma ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
You need a [http://www.reactivated.net/writing_udev_rules.html udev rule] like this in /etc/udev/rules.d/10-local.rules&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# udev rules file for the anyma dmx device&lt;br /&gt;
SUBSYSTEM==&amp;quot;usb|usb_device&amp;quot;, ACTION==&amp;quot;add&amp;quot;, ATTRS{idVendor}==&amp;quot;16c0&amp;quot;, ATTRS{idProduct}==&amp;quot;05dc&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==ArtNet ==&lt;br /&gt;
&lt;br /&gt;
If you've having problems sending ArtNet data is may be because your receivers don't support ArtNet II and/or send ArtPollReply messages. You can force OLA to always broadcast data by changing ~/.ola/ola-artnet.conf to contain:&lt;br /&gt;
&lt;br /&gt;
  always_broadcast = true&lt;br /&gt;
&lt;br /&gt;
==StageProfi==&lt;br /&gt;
&lt;br /&gt;
This comes in two flavors, a USB model and an Ethernet/IP model.&lt;br /&gt;
&lt;br /&gt;
  device = /dev/ttyUSB0&lt;br /&gt;
  device = 192.168.1.250&lt;br /&gt;
&lt;br /&gt;
==USB Pro==&lt;br /&gt;
&lt;br /&gt;
===Mac===&lt;br /&gt;
&lt;br /&gt;
Make sure you install the drives: http://www.ftdichip.com/Drivers/VCP.htm&lt;br /&gt;
&lt;br /&gt;
After a restart run:&lt;br /&gt;
&lt;br /&gt;
  ls /dev/cu.usbserial-*&lt;br /&gt;
&lt;br /&gt;
Make sure your ~/.ola/ola-usbpro.conf file matches the path above: &lt;br /&gt;
&lt;br /&gt;
  device_dir = /dev&lt;br /&gt;
  device_prefix = ttyUSB&lt;br /&gt;
  device_prefix = cu.usbserial-&lt;br /&gt;
&lt;br /&gt;
i.e. Look for devices at /dev/ttyUSB*  , /dev/cu.usbserial-*&lt;br /&gt;
&lt;br /&gt;
OLA also comes with a tool to update the firmware on a USB Pro:&lt;br /&gt;
&lt;br /&gt;
  ./tools/usbpro_firmware -d /dev/cu.usbserial-0000101D -f &amp;lt;firmware_file&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==USBDMX2==&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
You need a [http://www.reactivated.net/writing_udev_rules.html udev rule] like this in /etc/udev/rules.d/10-local.rules&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# udev rules file for the usbdmx2 dmx device&lt;br /&gt;
SUBSYSTEM==&amp;quot;usb|usb_device&amp;quot;, ACTION==&amp;quot;add&amp;quot;, ATTRS{idVendor}==&amp;quot;0962&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There is an issue where the device isn't detected correctly the first time. You may need to restart OLA once the DMX Transmit led comes on.&lt;br /&gt;
&lt;br /&gt;
===Mac===&lt;br /&gt;
&lt;br /&gt;
There is an issue where the device isn't detected correctly the first time. You may need to restart OLA once the DMX Transmit led comes on.&lt;br /&gt;
&lt;br /&gt;
==Velleman VM166 / K8062==&lt;br /&gt;
&lt;br /&gt;
===Mac===&lt;br /&gt;
&lt;br /&gt;
If you're installed from source you'll need the codeless KEXT which is available [http://code.google.com/p/linux-lighting/downloads/detail?name=libdmxusbshield.dmg| here]. If you installed OLA from the mac binary package this is already included.&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
You need a [http://www.reactivated.net/writing_udev_rules.html udev rule] like this in /etc/udev/rules.d/10-local.rules&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# udev rules file for the velleman dmx device&lt;br /&gt;
SUBSYSTEM==&amp;quot;usb|usb_device&amp;quot;, ACTION==&amp;quot;add&amp;quot;, ATTRS{idVendor}==&amp;quot;10cf&amp;quot;, ATTRS{idProduct}==&amp;quot;8062&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then make sure the user olad runs as is a member of plugdev.&lt;/div&gt;</summary>
		<author><name>66.92.11.32</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=KiNET&amp;diff=3489</id>
		<title>KiNET</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=KiNET&amp;diff=3489"/>
				<updated>2010-10-31T00:26:20Z</updated>
		
		<summary type="html">&lt;p&gt;66.92.11.32: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;KiNet is the protocol used by Color Kinetics to control LED fixtures. It uses UDP on port 6038. Fixtures can be configured with the [http://www.colorkinetics.com/support/addressing/ Quick Play Pro] tool.&lt;br /&gt;
&lt;br /&gt;
==Protocol Spec==&lt;br /&gt;
&lt;br /&gt;
http://webcache.googleusercontent.com/search?q=cache:RnG2kf5JOAYJ:www.directionless.org/color-kinetics/Ethernet+KiNet+port+6038&amp;amp;cd=2&amp;amp;hl=en&amp;amp;ct=clnk&amp;amp;gl=us&lt;br /&gt;
&lt;br /&gt;
http://www.cycling74.com/forums/topic.php?id=22163&lt;br /&gt;
&lt;br /&gt;
 #  my $strange_ck_header = join(&amp;quot;&amp;quot;, &lt;br /&gt;
 #                               '0401dc4a',     # magic, L &lt;br /&gt;
 #                               '0100',         # ver, H&lt;br /&gt;
 #                               '0101',         # type, H&lt;br /&gt;
 #                               '00000000',     # seq, L&lt;br /&gt;
 #                               '00',           # port, B&lt;br /&gt;
 #                               '00',           # padding, x&lt;br /&gt;
 #                               '0000',         # flags, H&lt;br /&gt;
 #                               'ffffffff',     # timerVal V, L&lt;br /&gt;
 #                               '00',           # uni, B&lt;br /&gt;
 #                              );&lt;br /&gt;
&lt;br /&gt;
Followed by 512 bytes of DMX data.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Definitions]]&lt;/div&gt;</summary>
		<author><name>66.92.11.32</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=ArtNet,_RDM_and_Packet_Interleaving&amp;diff=3458</id>
		<title>ArtNet, RDM and Packet Interleaving</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=ArtNet,_RDM_and_Packet_Interleaving&amp;diff=3458"/>
				<updated>2010-09-06T22:57:02Z</updated>
		
		<summary type="html">&lt;p&gt;66.92.11.32: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== RDM over Artnet ==&lt;br /&gt;
&lt;br /&gt;
[[ArtNet]] nodes behave as pass-through devices for non-discovery [[RDM]] data. The normal sequence of RDM commands looks like this:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:ArtNetRDMSequence.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== The Potential Problem ==&lt;br /&gt;
&lt;br /&gt;
The problem occurs when the RDM device responds with an ACK_OVERFLOW message. From the standard:&lt;br /&gt;
&lt;br /&gt;
''To receive the remaining data, the controller should continue to send GET_COMMANDS for the same PID. The responder shall send subsequent blocks of data with a response type of RESPONSE_TYPE_ACK_OVERFLOW until the remaining data can fit in a single message. The responder shall set the response type to RESPONSE_TYPE_ACK on the final response message in the sequence, to indicate completion of the data transfer. ''&lt;br /&gt;
&lt;br /&gt;
Assuming that PID A causes an ACK_OVERFLOW, the sequence now looks like this:&lt;br /&gt;
&lt;br /&gt;
[[Image:ArtNetRDMOverflowSequence.png|center]]&lt;br /&gt;
&lt;br /&gt;
But the standard also states:&lt;br /&gt;
&lt;br /&gt;
''The responder shall abort a partial transfer of overflow data for a PID when receiving a command for a different PID before the overflow data transfer is complete. A subsequent command for the  overflow PID will result in a new data transfer starting at the beginning of the data set.''&lt;br /&gt;
&lt;br /&gt;
So any RDM packet interleaved between the two ''GET PID A' commands in the above example will cause the transfer to abort.&lt;br /&gt;
&lt;br /&gt;
[[Image:ArtNetRDMOverflowResetSequence.png|center]]&lt;br /&gt;
&lt;br /&gt;
'''Note''': The [http://www.goddarddesign.com/rdm_lab_pack.html Labpack] has a bug where it will not abort the transfer so this continues to work. This is present in version 0x20009&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Possible Solutions ==&lt;br /&gt;
&lt;br /&gt;
There are two cases i) the single controller case ii) the multi-controller case. Nothing in the existing protocol can solve the latter, so it's out of scope for the rest of the discussion.&lt;br /&gt;
&lt;br /&gt;
=== Send a single RDM command at once ===&lt;br /&gt;
&lt;br /&gt;
This is obviously the most reliable but has the drawback of requiring a full round trip between the controller and responder for each message. Testing with a [[Net-Lynx]] showed an average response time of 7ms as seen on the controller when the RTT was 1.3ms. This solution also has the desirable property of not over-running the ArtNet node's buffers. Obviously the controller needs a timeout to detect dropped packets and either re-transmit or move on to the next packet.&lt;br /&gt;
&lt;br /&gt;
=== Send multiple packets at once without waiting for a response ===&lt;br /&gt;
&lt;br /&gt;
This appears to be what [[DMX Workshop]] does and has the potential to break ACK_OVERFLOW sequences.&lt;br /&gt;
&lt;br /&gt;
=== Send multiple packets at once and back off when an ACK_OVERFLOW is received ===&lt;br /&gt;
&lt;br /&gt;
Similar to the above, this sends multiple packets at once but stops sending other packets when an ACK_OVERFLOW is received until the sequence completes (or a timeout occurs). This reduces the chance of an aborted transfer, but doesn't eliminate it. &lt;br /&gt;
&lt;br /&gt;
=== Send multiple packets at once, serialize commands expected to generate ACK_OVERFLOWS and back off when an ACK_OVERFLOW is received ===&lt;br /&gt;
&lt;br /&gt;
Of the PIDs described in E1.20, the following have the potential to generate an ACK_OVERFLOW:&lt;br /&gt;
&lt;br /&gt;
* PROXIED_DEVICES&lt;br /&gt;
* STATUS_MESSAGES - but this uses it's own queuing mechanism&lt;br /&gt;
* SUPPORTED_PARAMETERS&lt;br /&gt;
* LANGUAGE_CAPABILITIES&lt;br /&gt;
* SLOT_INFO&lt;br /&gt;
* DEFAULT_SLOT_VALUE&lt;br /&gt;
&lt;br /&gt;
When the Controller sends any of these PIDs it can wait to see if an ACK_OVERFLOW occurs before sending any other RDM commands. Of course this doesn't solve the problem for manufacturer specific PIDs, instead it relies on the back off mechanism above.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.artisticlicence.com/WebSiteMaster/User%20Guides/art-net.pdf ArtNet Protocol Specification]&lt;br /&gt;
* [http://www.esta.org/tsp/documents/published_docs.php E1.20 RDM Specification]&lt;/div&gt;</summary>
		<author><name>66.92.11.32</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=ArtNet,_RDM_and_Packet_Interleaving&amp;diff=3457</id>
		<title>ArtNet, RDM and Packet Interleaving</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=ArtNet,_RDM_and_Packet_Interleaving&amp;diff=3457"/>
				<updated>2010-09-06T20:44:44Z</updated>
		
		<summary type="html">&lt;p&gt;66.92.11.32: /* Send a single RDM command at once */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== RDM over Artnet ==&lt;br /&gt;
&lt;br /&gt;
[[ArtNet]] nodes behave as pass-through devices for non-discovery [[RDM]] data. The normal sequence of RDM commands looks like this:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:ArtNetRDMSequence.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== The Potential Problem ==&lt;br /&gt;
&lt;br /&gt;
The problem occurs when the RDM device responds with an ACK_OVERFLOW message. From the standard:&lt;br /&gt;
&lt;br /&gt;
''To receive the remaining data, the controller should continue to send GET_COMMANDS for the same PID. The responder shall send subsequent blocks of data with a response type of RESPONSE_TYPE_ACK_OVERFLOW until the remaining data can fit in a single message. The responder shall set the response type to RESPONSE_TYPE_ACK on the final response message in the sequence, to indicate completion of the data transfer. ''&lt;br /&gt;
&lt;br /&gt;
Assuming that PID A causes an ACK_OVERFLOW, the sequence now looks like this:&lt;br /&gt;
&lt;br /&gt;
[[Image:ArtNetRDMOverflowSequence.png|center]]&lt;br /&gt;
&lt;br /&gt;
But the standard also states:&lt;br /&gt;
&lt;br /&gt;
''The responder shall abort a partial transfer of overflow data for a PID when receiving a command for a different PID before the overflow data transfer is complete. A subsequent command for the  overflow PID will result in a new data transfer starting at the beginning of the data set.''&lt;br /&gt;
&lt;br /&gt;
So any RDM packet interleaved between the two ''GET PID A' commands in the above example will cause the transfer to abort.&lt;br /&gt;
&lt;br /&gt;
[[Image:ArtNetRDMOverflowResetSequence.png|center]]&lt;br /&gt;
&lt;br /&gt;
'''Note''': The [http://www.goddarddesign.com/rdm_lab_pack.html Labpack] has a bug where it will not abort the transfer so this continues to work. This is present in version 0x20009&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Possible Solutions ==&lt;br /&gt;
&lt;br /&gt;
There are two cases i) the single controller case ii) the multi-controller case. Nothing in the existing protocol can solve the latter, so it's out of scope for the rest of the discussion.&lt;br /&gt;
&lt;br /&gt;
=== Send a single RDM command at once ===&lt;br /&gt;
&lt;br /&gt;
This is obviously the most reliable but has the drawback of requiring a full round trip between the controller and responder for each message. Testing with a [[Net-Lynx]] showed an average response time of 7ms as seen on the controller when the RTT was 1.3ms. This solution also has the desirable property of not over-running the ArtNet node's buffers. Obviously the controller needs a timeout to detect dropped packets and either re-transmit or move on to the next packet.&lt;br /&gt;
&lt;br /&gt;
=== Send multiple packets at once without waiting for a response ===&lt;br /&gt;
&lt;br /&gt;
This appears to be what [[DMX Workshop]] does and has the potential to break ack_overflow sequences.&lt;br /&gt;
&lt;br /&gt;
=== Send multiple packets at once and back off when an ACK_OVERFLOW is received ===&lt;br /&gt;
&lt;br /&gt;
Similar to the above, this sends multiple packets at once but stops sending other packets when an ACK_OVERFLOW is received until the sequence completes (or a timeout occurs). This reduces the chance of an aborted transfer, but doesn't eliminate it. &lt;br /&gt;
&lt;br /&gt;
=== Send multiple packets at once, serialize commands expected to generate ACK_OVERFLOWS and back off when an ACK_OVERFLOW is received ===&lt;br /&gt;
&lt;br /&gt;
Of the PIDs described in E1.20, the following have the potential to generate an ACK_OVERFLOW:&lt;br /&gt;
&lt;br /&gt;
* PROXIED_DEVICES&lt;br /&gt;
* STATUS_MESSAGES&lt;br /&gt;
* SUPPORTED_PARAMETERS&lt;br /&gt;
* LANGUAGE_CAPABILITIES&lt;br /&gt;
* SLOT_INFO&lt;br /&gt;
* DEFAULT_SLOT_VALUE&lt;br /&gt;
&lt;br /&gt;
When the Controller sends any of these PIDs it can wait to see if an ACK_OVERFLOW occurs before sending any other RDM commands. Of course this doesn't solve the problem for manufacturer specific PIDs, instead it relies on the back off mechanism above.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.artisticlicence.com/WebSiteMaster/User%20Guides/art-net.pdf ArtNet Protocol Specification]&lt;br /&gt;
* [http://www.esta.org/tsp/documents/published_docs.php E1.20 RDM Specification]&lt;/div&gt;</summary>
		<author><name>66.92.11.32</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=ArtNet,_RDM_and_Packet_Interleaving&amp;diff=3456</id>
		<title>ArtNet, RDM and Packet Interleaving</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=ArtNet,_RDM_and_Packet_Interleaving&amp;diff=3456"/>
				<updated>2010-09-06T18:55:49Z</updated>
		
		<summary type="html">&lt;p&gt;66.92.11.32: /* Possible Solutions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== RDM over Artnet ==&lt;br /&gt;
&lt;br /&gt;
[[ArtNet]] nodes behave as pass-through devices for non-discovery [[RDM]] data. The normal sequence of RDM commands looks like this:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:ArtNetRDMSequence.png|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== The Potential Problem ==&lt;br /&gt;
&lt;br /&gt;
The problem occurs when the RDM device responds with an ACK_OVERFLOW message. From the standard:&lt;br /&gt;
&lt;br /&gt;
''To receive the remaining data, the controller should continue to send GET_COMMANDS for the same PID. The responder shall send subsequent blocks of data with a response type of RESPONSE_TYPE_ACK_OVERFLOW until the remaining data can fit in a single message. The responder shall set the response type to RESPONSE_TYPE_ACK on the final response message in the sequence, to indicate completion of the data transfer. ''&lt;br /&gt;
&lt;br /&gt;
Assuming that PID A causes an ACK_OVERFLOW, the sequence now looks like this:&lt;br /&gt;
&lt;br /&gt;
[[Image:ArtNetRDMOverflowSequence.png|center]]&lt;br /&gt;
&lt;br /&gt;
But the standard also states:&lt;br /&gt;
&lt;br /&gt;
''The responder shall abort a partial transfer of overflow data for a PID when receiving a command for a different PID before the overflow data transfer is complete. A subsequent command for the  overflow PID will result in a new data transfer starting at the beginning of the data set.''&lt;br /&gt;
&lt;br /&gt;
So any RDM packet interleaved between the two ''GET PID A' commands in the above example will cause the transfer to abort.&lt;br /&gt;
&lt;br /&gt;
[[Image:ArtNetRDMOverflowResetSequence.png|center]]&lt;br /&gt;
&lt;br /&gt;
'''Note''': The [http://www.goddarddesign.com/rdm_lab_pack.html Labpack] has a bug where it will not abort the transfer so this continues to work. This is present in version 0x20009&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Possible Solutions ==&lt;br /&gt;
&lt;br /&gt;
There are two cases i) the single controller case ii) the multi-controller case. Nothing in the existing protocol can solve the latter, so it's out of scope for the rest of the discussion.&lt;br /&gt;
&lt;br /&gt;
=== Send a single RDM command at once ===&lt;br /&gt;
&lt;br /&gt;
This is obviously the most reliable but has the drawback of requiring a full round trip between the controller and responder for each message. Testing with a [[Net-Lynx]] showed an average response time of 7ms as seen on the controller when the RTT was 1.3ms. This solution also has the desirable property of not over-running the ArtNet node's buffers.&lt;br /&gt;
&lt;br /&gt;
=== Send multiple packets at once without waiting for a response ===&lt;br /&gt;
&lt;br /&gt;
This appears to be what [[DMX Workshop]] does and has the potential to break ack_overflow sequences.&lt;br /&gt;
&lt;br /&gt;
=== Send multiple packets at once and back off when an ACK_OVERFLOW is received ===&lt;br /&gt;
&lt;br /&gt;
Similar to the above, this sends multiple packets at once but stops sending other packets when an ACK_OVERFLOW is received until the sequence completes (or a timeout occurs). This reduces the chance of an aborted transfer, but doesn't eliminate it. &lt;br /&gt;
&lt;br /&gt;
=== Send multiple packets at once, serialize commands expected to generate ACK_OVERFLOWS and back off when an ACK_OVERFLOW is received ===&lt;br /&gt;
&lt;br /&gt;
Of the PIDs described in E1.20, the following have the potential to generate an ACK_OVERFLOW:&lt;br /&gt;
&lt;br /&gt;
* PROXIED_DEVICES&lt;br /&gt;
* STATUS_MESSAGES&lt;br /&gt;
* SUPPORTED_PARAMETERS&lt;br /&gt;
* LANGUAGE_CAPABILITIES&lt;br /&gt;
* SLOT_INFO&lt;br /&gt;
* DEFAULT_SLOT_VALUE&lt;br /&gt;
&lt;br /&gt;
When the Controller sends any of these PIDs it can wait to see if an ACK_OVERFLOW occurs before sending any other RDM commands. Of course this doesn't solve the problem for manufacturer specific PIDs, instead it relies on the back off mechanism above.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.artisticlicence.com/WebSiteMaster/User%20Guides/art-net.pdf ArtNet Protocol Specification]&lt;br /&gt;
* [http://www.esta.org/tsp/documents/published_docs.php E1.20 RDM Specification]&lt;/div&gt;</summary>
		<author><name>66.92.11.32</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=RDM_with_OLA&amp;diff=3448</id>
		<title>RDM with OLA</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=RDM_with_OLA&amp;diff=3448"/>
				<updated>2010-09-06T16:38:06Z</updated>
		
		<summary type="html">&lt;p&gt;66.92.11.32: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[RDM]] devices can be configured through the web interface (only partially complete) or from the command line. Even if you don't have any RDM devices you can still experiment using the fake RDM device created by the Dummy Plugin.&lt;br /&gt;
&lt;br /&gt;
To follow these examples, patch the Dummy Port to universe 1.&lt;br /&gt;
&lt;br /&gt;
== Device Discovery  ==&lt;br /&gt;
&lt;br /&gt;
Each RDM device has a unique ID (UID) made up of a two byte manufacturer ID and a four byte device ID. The ''ola_rdm_discovery'' tool displays the UIDs found for each universe.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ola_rdm_discover  -u 1&lt;br /&gt;
7a70:ffffff00&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A single device should be found with a manufacturer ID of 7a70 (Open Lighting) and a device ID of ffffff00 (the dummy device).&lt;br /&gt;
&lt;br /&gt;
Passing the -f option will force the discovery algorithm to be run for the particular universe. This won't produce any output unless an error occurs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ola_rdm_discover  -u 1 -f&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Device Configuration ==&lt;br /&gt;
&lt;br /&gt;
Now that a device has been found, we can query it to find the parameters it supports. Each parameter is assigned a two byte identifier known as a PID. The  ''ola_rdm_get'' and ''ola_rdm_set'' commands are used to read / write the values of parameters.  The first thing to do is to view a list of all known parameters:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ola_rdm_get  --list_pids&lt;br /&gt;
boot_software_version_id&lt;br /&gt;
boot_software_version_label&lt;br /&gt;
capture_preset&lt;br /&gt;
clear_status_id&lt;br /&gt;
comms_status&lt;br /&gt;
default_slot_value&lt;br /&gt;
device_hours&lt;br /&gt;
device_info&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This doesn't query the RDM device at all, it simply lists out the names of standard parameters. To see which particular parameters a device supports use:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ola_rdm_get  --universe 1 --uid 7a70:ffffff00 supported_parameters&lt;br /&gt;
Supported Parameters&lt;br /&gt;
  0x50 (supported_parameters)&lt;br /&gt;
  0x60 (device_info)&lt;br /&gt;
  0x80 (device_model_description)&lt;br /&gt;
  0x81 (manufacturer_label)&lt;br /&gt;
  0x82 (device_label)&lt;br /&gt;
  0xc0 (software_version_label)&lt;br /&gt;
  0xf0 (dmx_start_address)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
One of the most useful parameters is device_info:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ola_rdm_get  --universe 1 --uid 7a70:ffffff00 device_info&lt;br /&gt;
Device Info&lt;br /&gt;
RDM Protocol Version: 1.0&lt;br /&gt;
Device Model: 0x1&lt;br /&gt;
Product Category: other&lt;br /&gt;
Software Version: 0x1&lt;br /&gt;
DMX Footprint: 10&lt;br /&gt;
DMX Personality: 1 / 1&lt;br /&gt;
DMX Start Address: 1&lt;br /&gt;
# of Subdevices: 0&lt;br /&gt;
Sensor Count: 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here we see some general information about the device including the DMX start address and the # of DMX channels used (DMX Footprint). We can also get the DMX start address by using the dmx_start_address parameter directly:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ola_rdm_get  --universe 1 --uid 7a70:ffffff00 dmx_start_address &lt;br /&gt;
DMX Start Address: 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To set the start address, the  ''ola_rdm_set'' program is used:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ola_rdm_set  --universe 1 --uid 7a70:ffffff00 dmx_start_address  10&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No output is displayed unless the request failed. Now we can check that the set worked:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ola_rdm_get  --universe 1 --uid 7a70:ffffff00 dmx_start_address &lt;br /&gt;
DMX Start Address: 10&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finally, the full list of options for ''ola_rdm_get'' and ''ola_rdm_set'' can be found by running with --help:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  -d, --sub_device &amp;lt;device&amp;gt; target a particular sub device (default is 0)&lt;br /&gt;
  -h, --help                               display this help message and exit.&lt;br /&gt;
  -l, --list_pids                         display a list of pids&lt;br /&gt;
  -u, --universe &amp;lt;universe&amp;gt;  universe number.&lt;br /&gt;
  --uid &amp;lt;uid&amp;gt;                            the UID of the device to control.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RDM With ArtNet ==&lt;br /&gt;
&lt;br /&gt;
If you have a copy of DMXWorkshop, you can experiment with RDM over ArtNet by patching an ArtNet Input Port to the same universe as the Dummy Plugin. You can then discover the Dummy Device using DMXWorkshop and configure it's start address over the LAN.&lt;br /&gt;
&lt;br /&gt;
Note that the design of the RDM-over-ArtNet protocol has a significant limitation, see [[ArtNet, RDM and Packet Interleaving]]&lt;br /&gt;
&lt;br /&gt;
== Useful Tricks ==&lt;br /&gt;
&lt;br /&gt;
If you're using bash, it's worthwhile to set up tab completion of PIDs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ complete -W &amp;quot;$(ola_rdm_get -l | xargs)&amp;quot; ola_rdm_get&lt;br /&gt;
$ complete -W &amp;quot;$(ola_rdm_get -l | xargs)&amp;quot; ola_rdm_set&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>66.92.11.32</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=Open_Lighting_Architecture&amp;diff=3447</id>
		<title>Open Lighting Architecture</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=Open_Lighting_Architecture&amp;diff=3447"/>
				<updated>2010-09-05T18:00:05Z</updated>
		
		<summary type="html">&lt;p&gt;66.92.11.32: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Ola.png|right]]&lt;br /&gt;
Link: http://code.google.com/p/linux-lighting/ &amp;lt;br&amp;gt;&lt;br /&gt;
{{Features|free=yes|tx=yes|rx=yes|linux=yes|osx=yes|http=yes|rdm=yes}}&lt;br /&gt;
[[Image:Llad_home.png|300px|right]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Open Lighting Architecture (OLA) is an open source framework which provides applications with a mechanism to send and receive [[DMX512]] &amp;amp; [[RDM]] commands using hardware devices and DMX over IP protocols. It enables [[:Category:Controllers | software controllers]] to communicate with hardware either via Ethernet or over traditional DMX512 networks.&lt;br /&gt;
&lt;br /&gt;
OLA can also convert DMX512 data sent using DMX over IP protocols from one format to another, allowing devices from different manufacturers to interact with one another. For example a [[Strand_Lighting|Strand]] Lighting Console using ShowNet can send DMX512 to an [[Enttec]] [[DmxEtherGate MKII|EtherGate]]). When combined with a physical DMX interface such as the [[DMX USB Pro]], OLA can send and receive data from wired DMX512 networks.&lt;br /&gt;
&lt;br /&gt;
OLA runs on both Mac OS X and Linux on a number of architectures. A port to Windows is feasible if someone wants to add the necessary platform-dependent code.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Contribute&amp;lt;/b&amp;gt;: Looking to help? Visit the [[OLA Contributors]] page. The page also lists people and companies who have supported OLA. Please support them in return!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Bugs&amp;lt;/b&amp;gt;: Check the [http://code.google.com/p/linux-lighting/issues/list bug tracker]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Questions&amp;lt;/b&amp;gt;: See the [http://groups.google.com/group/open-lighting mailing list]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Supported Protocols:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| border=1 cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
! '''Protocol'''!! Linux !! '''Mac OS X''' &lt;br /&gt;
|-&lt;br /&gt;
|| [[:Category:ArtNet|ArtNet]]   || [[Image:Green-tick.png|center]] [[Image:Rdm.gif|center]] || [[Image:Green-tick.png|center]]  [[Image:Rdm.gif|center]] &lt;br /&gt;
|-&lt;br /&gt;
|| [[E1.31]] / [[ACN]] || [[Image:Green-tick.png|center]]  || [[Image:Green-tick.png|center]] &lt;br /&gt;
|-&lt;br /&gt;
|| [[:Category:ESP Net|ESP Net]] || [[Image:Green-tick.png|center]]  || [[Image:Green-tick.png|center]] &lt;br /&gt;
|-&lt;br /&gt;
|| [[:Category:Pathport|Pathport]]  || [[Image:Green-tick.png|center]]  || [[Image:Green-tick.png|center]] &lt;br /&gt;
|-&lt;br /&gt;
|| [[:Category:Sandnet|Sandnet]] || [[Image:Green-tick.png|center]]  || [[Image:Green-tick.png|center]] &lt;br /&gt;
|-&lt;br /&gt;
|| [[:Category:ShowNet|ShowNet]] || [[Image:Green-tick.png|center]]  || [[Image:Green-tick.png|center]] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Supported Devices:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| border=1 cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
! '''Device'''!! Linux !! '''Mac OS X''' &lt;br /&gt;
|-&lt;br /&gt;
||  [[Anyma uDMX]] || [[Image:Trans.gif|center]] || [[Image:Trans.gif|center]] &lt;br /&gt;
|-&lt;br /&gt;
|| [[Arduino RGB Mixer]] || [[Image:Green-tick.png|center]]  || [[Image:Green-tick.png|center]] &lt;br /&gt;
|-&lt;br /&gt;
|| [[DMX 4 Linux]] || [[Image:Trans.gif|center]]  || &lt;br /&gt;
|-&lt;br /&gt;
|| [[DMX USB Pro]] || [[Image:Trans.gif|center]] [[Image:Recv.gif|center]] || [[Image:Trans.gif|center]] [[Image:Recv.gif|center]] &lt;br /&gt;
|-&lt;br /&gt;
|| [[DMX-TRI]] || [[Image:Trans.gif|center]] || [[Image:Trans.gif|center]] &lt;br /&gt;
|-&lt;br /&gt;
|| [[DMXking USB DMX512-A]] || [[Image:Trans.gif|center]] [[Image:Recv.gif|center]] || [[Image:Trans.gif|center]] [[Image:Recv.gif|center]] &lt;br /&gt;
|-&lt;br /&gt;
|| [[Open DMX USB]] || [[Image:Trans.gif|center]]  || &lt;br /&gt;
|-&lt;br /&gt;
|| [[Packetheads USB_DMX Dongle]] ||  [[Image:Green-tick.png|center]]  ||  [[Image:Green-tick.png|center]]  &lt;br /&gt;
|-&lt;br /&gt;
|| [[RDM-TRI]] || [[Image:Trans.gif|center]] [[Image:Rdm.gif|center]] || [[Image:Trans.gif|center]] [[Image:Rdm.gif|center]]&lt;br /&gt;
|-&lt;br /&gt;
|| [[StageProfi]] || [[Image:Trans.gif|center]]  || [[Image:Trans.gif|center]] (Ethernet version only)&lt;br /&gt;
|-&lt;br /&gt;
|| [http://machosehead.wordpress.com/2010/06/12/udmx_asp/ uDMX_asp] || [[Image:Trans.gif|center]]  || [[Image:Trans.gif|center]] &lt;br /&gt;
|-&lt;br /&gt;
|| [[USBDMX2]] || [[Image:Trans.gif|center]]  || [[Image:Trans.gif|center]] &lt;br /&gt;
|-&lt;br /&gt;
|| [[Velleman K8062]] || [[Image:Trans.gif|center]]  || [[Image:Trans.gif|center]] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Getting Started&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Start here if you've never used OLA before and read these in order.&lt;br /&gt;
* [[Download OLA]]&lt;br /&gt;
* [[OLA on OS X]] or [[OLA on Linux]] - How to install OLA.&lt;br /&gt;
* [[Using OLA]] - A basic introduction&lt;br /&gt;
* [[OLA Command Line Tools]] - Documentation for the tools in ola-examples&lt;br /&gt;
* [[OLA Device Specific Configuration]]&lt;br /&gt;
* [[OLA Tips &amp;amp; Tricks]]&lt;br /&gt;
* [[RDM with OLA]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Tutorials&amp;lt;/b&amp;gt;&lt;br /&gt;
* [[OlaOutput Max External]] - Setup OlaOutput on Mac OS X to send DMX messages from Max/MSP/Jitter&lt;br /&gt;
* [[OLAGuruPlug]] - Running OLA on a [http://www.globalscaletechnologies.com/c-4-guruplugs.aspx GuruPlug]&lt;br /&gt;
* [[OlaLED]] - control RGB LED via http&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Advanced Topics:&amp;lt;/b&amp;gt;&lt;br /&gt;
* [[OLA Merging Algorithms]]&lt;br /&gt;
* [[OLA DiffServ support]] (QOS settings)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Developer Documentation:&amp;lt;/b&amp;gt;&lt;br /&gt;
* [[OLA developer info]] - about the source code and structure&lt;br /&gt;
* [[OLA Client API]] - the C++ API&lt;br /&gt;
* [[OLA Python API]] - easy DMX programming&lt;br /&gt;
* [[Build OLA Mac Packages]] - notes for building the .dmg images&lt;br /&gt;
* [[Building OLA for Windows]] - Notes on Windows support (in progress)&lt;br /&gt;
* [[Using OLA with Xcode]] - on a Mac, in Objective-C++&lt;br /&gt;
* [[Port Throttling]] &lt;br /&gt;
* [[OLA Performance Stats]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Tutorials&amp;lt;/b&amp;gt;, these refer to the previous release but parts of them are still relevant.&lt;br /&gt;
* [[LLA Sandnet Tutorial]] - Setup Horizon using Sandnet and LLA&lt;br /&gt;
* [[LLA and Q Light Controller Ubuntu Tutorial]] - Setup LLA on Ubuntu/Debian-type distro with QLC&lt;br /&gt;
* [[LLA and Q Light Controller OSX Tutorial]] - Setup LLA on Mac OS X with QLC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Deprecated Documentation&amp;lt;/b&amp;gt;&lt;br /&gt;
* [[OLA 0.3]] - Release Notes&lt;br /&gt;
&lt;br /&gt;
[[Category:ArtNet]]&lt;br /&gt;
[[Category:ESP Net]]&lt;br /&gt;
[[Category:E1.31]]&lt;br /&gt;
[[Category:Sandnet]]&lt;br /&gt;
[[Category:ShowNet]]&lt;br /&gt;
[[Category:Utilities]]&lt;br /&gt;
[[Category:Pathport]]&lt;/div&gt;</summary>
		<author><name>66.92.11.32</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OLA_on_Linux&amp;diff=3440</id>
		<title>OLA on Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=OLA_on_Linux&amp;diff=3440"/>
				<updated>2010-08-14T23:42:18Z</updated>
		
		<summary type="html">&lt;p&gt;66.92.11.32: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This describes how to get [[OLA]] working on a Linux system either from the git repo or by using a [http://code.google.com/p/linux-lighting/downloads/list released tarball].&lt;br /&gt;
&lt;br /&gt;
=Checkout or Download an Archive=&lt;br /&gt;
&lt;br /&gt;
Either download a tarball from the releases page, or check out the git repo with the following command:&lt;br /&gt;
&lt;br /&gt;
  git clone http://www.nomis52.net/git/lla&lt;br /&gt;
&lt;br /&gt;
If you don't have '''git''' yet, you'll need to install it with your distro's package manager.&lt;br /&gt;
&lt;br /&gt;
=Install libraries=&lt;br /&gt;
&lt;br /&gt;
You need a couple of libraries installed for everything to work correctly. Some of these are available as packages in distros but others need to be downloaded and built manually.&lt;br /&gt;
&lt;br /&gt;
First up you'll need the following:&lt;br /&gt;
* cppunit&lt;br /&gt;
* uuid or ossp uuid&lt;br /&gt;
* pkg-config&lt;br /&gt;
* curses&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Debian/Ubuntu users can install them with apt:&lt;br /&gt;
&lt;br /&gt;
  apt-get install libcppunit-dev libcppunit-1.12-1 uuid-dev pkg-config libncurses5-dev&lt;br /&gt;
&lt;br /&gt;
If you're building from git you'll also need the following:&lt;br /&gt;
&lt;br /&gt;
* libtool&lt;br /&gt;
* automake&lt;br /&gt;
* autoconf&lt;br /&gt;
&lt;br /&gt;
  apt-get install libtool autoconf automake&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Next, you need '''Protocol Buffers'''  [http://code.google.com/p/protobuf/ http://code.google.com/p/protobuf/] version 2.1.0 or above from Google (BSD license). Most likely, you'll need to download and build them yourself.&lt;br /&gt;
&lt;br /&gt;
Debian (and Ubuntu) users can, in some cases, use the following packages (not yet in stable):&lt;br /&gt;
libprotobuf2 (libprotobuf3), libprotobuf-dev, protobuf-compiler&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finally, if you want to use the built in webserver, you'll need '''microhttpd''' and '''ctemplate'''. Note: you'll need version &amp;gt;= 0.4.0 of microhttpd else you will get errors:&lt;br /&gt;
  &lt;br /&gt;
* [ftp://ftp.gnu.org/gnu/libmicrohttpd/ ftp://ftp.gnu.org/gnu/libmicrohttpd/]&lt;br /&gt;
* [http://code.google.com/p/google-ctemplate/ http://code.google.com/p/google-ctemplate/]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Once everything is installed, run ldconfig as root to pick up the new libraries&lt;br /&gt;
&lt;br /&gt;
  sudo  ldconfig&lt;br /&gt;
&lt;br /&gt;
=Configure=&lt;br /&gt;
&lt;br /&gt;
If you checked out the sources from git, you'll need to run&lt;br /&gt;
&lt;br /&gt;
  autoreconf -i&lt;br /&gt;
&lt;br /&gt;
After that run&lt;br /&gt;
&lt;br /&gt;
  ./configure&lt;br /&gt;
&lt;br /&gt;
=Building &amp;amp; Testing=&lt;br /&gt;
&lt;br /&gt;
Build&lt;br /&gt;
  make&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you get an error like the following:&lt;br /&gt;
&lt;br /&gt;
 /bin/sh ./libtool --tag=CC   --mode=compile gcc -DHAVE_CONFIG_H -I.   -I/opt/local/var/macports/software/protobuf-cpp/2.0.3_0/opt/local/include/  -g -O2 -c -o ltdl.lo ltdl.c&lt;br /&gt;
 ./libtool: line 464: CDPATH: command not found&lt;br /&gt;
 /Users/simonn/lighting/lla/libltdl/libtool: line 464: CDPATH: command not found&lt;br /&gt;
 /Users/simonn/lighting/lla/libltdl/libtool: line 1142: func_opt_split: command not found&lt;br /&gt;
 libtool: Version mismatch error.  This is libtool 2.2.6, but the&lt;br /&gt;
 libtool: definition of this LT_INIT comes from an older release.&lt;br /&gt;
 libtool: You should recreate aclocal.m4 with macros from libtool 2.2.6&lt;br /&gt;
 libtool: and run autoconf again.&lt;br /&gt;
&lt;br /&gt;
Your system uses a different version of libtool. Run:&lt;br /&gt;
&lt;br /&gt;
  libtoolize --ltdl -c -f&lt;br /&gt;
&lt;br /&gt;
and then start from the autoreconf step again.&lt;br /&gt;
&lt;br /&gt;
Run the tests&lt;br /&gt;
  make check&lt;br /&gt;
&lt;br /&gt;
And install OLA&lt;br /&gt;
  sudo make install&lt;br /&gt;
  sudo ldconfig&lt;br /&gt;
&lt;br /&gt;
=Install ola-examples=&lt;br /&gt;
&lt;br /&gt;
The [[OLA Command Line Tools]] come separately. Again either download a tarball or checkout from the git repo:&lt;br /&gt;
&lt;br /&gt;
  git clone http://www.nomis52.net/git/lla-examples&lt;br /&gt;
&lt;br /&gt;
The steps are similar to building the main package.&lt;br /&gt;
&lt;br /&gt;
   autoreconf -i   # if you used the git repo&lt;br /&gt;
   ./configure&lt;br /&gt;
   make&lt;br /&gt;
   sudo make install&lt;br /&gt;
&lt;br /&gt;
Note in order for ola_dmxmonitor and ola_dmxconsole to build you *must* have curses installed.&lt;/div&gt;</summary>
		<author><name>66.92.11.32</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=Template:News&amp;diff=3438</id>
		<title>Template:News</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=Template:News&amp;diff=3438"/>
				<updated>2010-08-08T02:56:27Z</updated>
		
		<summary type="html">&lt;p&gt;66.92.11.32: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right; margin:8px; width:50%; border:1px solid #0000ff&amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| bgcolor=&amp;quot;#A7C1F2&amp;quot; align=&amp;quot;center&amp;quot; | '''Lighting News'''&lt;br /&gt;
|- &lt;br /&gt;
| {{NewsHeading}} '''OLA 0.8.0 released, now with RDM''' 7/8/10&lt;br /&gt;
|-	&lt;br /&gt;
|  [[OLA]] 0.8.0 is the first release to support [[RDM]]. The instructions at [[RDM with OLA]] explain how to get started with RDM, even if you don't own any RDM devices.&lt;br /&gt;
|- &lt;br /&gt;
| {{NewsHeading}} '''OLA now running on the GuruPlug''' 21/5/10&lt;br /&gt;
|-	&lt;br /&gt;
|  [[OLA]] 0.7.4 has been released, and ARM packages for the GuruPlug are now [[OLAGuruPlug|available]]. OLA now supports 9 USB to DMX devices.&lt;br /&gt;
|- &lt;br /&gt;
| {{NewsHeading}} '''OLA for Max/MSP Released''' 13/4/10&lt;br /&gt;
|-	&lt;br /&gt;
|  [http://code.google.com/p/olaoutput/ OlaOutput] allows [http://cycling74.com/products/maxmspjitter/ Max] to communicate with [[OLA]]. See the [[OlaOutput Max External]] tutorial on how to set this up.&lt;br /&gt;
|-&lt;br /&gt;
| {{NewsHeading}} '''Arduino RGB USB Device''' 7/2/10&lt;br /&gt;
|-	&lt;br /&gt;
|  The [[Arduino RGB Mixer]] is a simple &amp;amp; inexpensive way to control RGB LED strips using USB.&lt;br /&gt;
|-&lt;br /&gt;
| {{NewsHeading}} '''Open Lighting Architecture 0.5.0 Released''' 21/11/09&lt;br /&gt;
|-	&lt;br /&gt;
|  [[OLA]] 0.5.0 has been released. It now supports SandNet and automatic USB Pro detection.&lt;br /&gt;
|- &lt;br /&gt;
| {{NewsHeading}} '''Open Lighting Architecture 0.4.0 Released''' 18/10/09&lt;br /&gt;
|-	&lt;br /&gt;
|  [[OLA]] 0.4.0 now supports Streaming DMX over ACN known as [[E1.31]]. &lt;br /&gt;
|- &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>66.92.11.32</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=RDM_with_OLA&amp;diff=3437</id>
		<title>RDM with OLA</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=RDM_with_OLA&amp;diff=3437"/>
				<updated>2010-08-08T02:50:16Z</updated>
		
		<summary type="html">&lt;p&gt;66.92.11.32: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[RDM]] devices can be configured through the web interface (only partially complete) or from the command line. Even if you don't have any RDM devices you can still experiment using the fake RDM device created by the Dummy Plugin.&lt;br /&gt;
&lt;br /&gt;
To follow these examples, patch the Dummy Port to universe 1.&lt;br /&gt;
&lt;br /&gt;
== Device Discovery  ==&lt;br /&gt;
&lt;br /&gt;
Each RDM device has a unique ID (UID) made up of a two byte manufacturer ID and a four byte device ID. The ''ola_rdm_discovery'' tool displays the UIDs found for each universe.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ola_rdm_discover  -u 1&lt;br /&gt;
7a70:ffffff00&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A single device should be found with a manufacturer ID of 7a70 (Open Lighting) and a device ID of ffffff00 (the dummy device).&lt;br /&gt;
&lt;br /&gt;
Passing the -f option will force the discovery algorithm to be run for the particular universe. This won't produce any output unless an error occurs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ola_rdm_discover  -u 1 -f&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Device Configuration ==&lt;br /&gt;
&lt;br /&gt;
Now that a device has been found, we can query it to find the parameters it supports. Each parameter is assigned a two byte identifier known as a PID. The  ''ola_rdm_get'' and ''ola_rdm_set'' commands are used to read / write the values of parameters.  The first thing to do is to view a list of all known parameters:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ola_rdm_get  --list_pids&lt;br /&gt;
boot_software_version_id&lt;br /&gt;
boot_software_version_label&lt;br /&gt;
capture_preset&lt;br /&gt;
clear_status_id&lt;br /&gt;
comms_status&lt;br /&gt;
default_slot_value&lt;br /&gt;
device_hours&lt;br /&gt;
device_info&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This doesn't query the RDM device at all, it simply lists out the names of standard parameters. To see which particular parameters a device supports use:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ola_rdm_get  --universe 1 --uid 7a70:ffffff00 supported_parameters&lt;br /&gt;
Supported Parameters&lt;br /&gt;
  0x50 (supported_parameters)&lt;br /&gt;
  0x60 (device_info)&lt;br /&gt;
  0x80 (device_model_description)&lt;br /&gt;
  0x81 (manufacturer_label)&lt;br /&gt;
  0x82 (device_label)&lt;br /&gt;
  0xc0 (software_version_label)&lt;br /&gt;
  0xf0 (dmx_start_address)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
One of the most useful parameters is device_info:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ola_rdm_get  --universe 1 --uid 7a70:ffffff00 device_info&lt;br /&gt;
Device Info&lt;br /&gt;
RDM Protocol Version: 1.0&lt;br /&gt;
Device Model: 0x1&lt;br /&gt;
Product Category: other&lt;br /&gt;
Software Version: 0x1&lt;br /&gt;
DMX Footprint: 10&lt;br /&gt;
DMX Personality: 1 / 1&lt;br /&gt;
DMX Start Address: 1&lt;br /&gt;
# of Subdevices: 0&lt;br /&gt;
Sensor Count: 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here we see some general information about the device including the DMX start address and the # of DMX channels used (DMX Footprint). We can also get the DMX start address by using the dmx_start_address parameter directly:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ola_rdm_get  --universe 1 --uid 7a70:ffffff00 dmx_start_address &lt;br /&gt;
DMX Start Address: 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To set the start address, the  ''ola_rdm_set'' program is used:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ola_rdm_set  --universe 1 --uid 7a70:ffffff00 dmx_start_address  10&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No output is displayed unless the request failed. Now we can check that the set worked:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ola_rdm_get  --universe 1 --uid 7a70:ffffff00 dmx_start_address &lt;br /&gt;
DMX Start Address: 10&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finally, the full list of options for ''ola_rdm_get'' and ''ola_rdm_set'' can be found by running with --help:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  -d, --sub_device &amp;lt;device&amp;gt; target a particular sub device (default is 0)&lt;br /&gt;
  -h, --help                               display this help message and exit.&lt;br /&gt;
  -l, --list_pids                         display a list of pids&lt;br /&gt;
  -u, --universe &amp;lt;universe&amp;gt;  universe number.&lt;br /&gt;
  --uid &amp;lt;uid&amp;gt;                            the UID of the device to control.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RDM With ArtNet ==&lt;br /&gt;
&lt;br /&gt;
If you have a copy of DMXWorkshop, you can experiment with RDM over ArtNet by patching an ArtNet Input Port to the same universe as the Dummy Plugin. You can then discover the Dummy Device using DMXWorkshop and configure it's start address over the LAN.&lt;br /&gt;
&lt;br /&gt;
== Useful Tricks ==&lt;br /&gt;
&lt;br /&gt;
If you're using bash, it's worthwhile to set up tab completion of PIDs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ complete -W &amp;quot;$(ola_rdm_get -l | xargs)&amp;quot; ola_rdm_get&lt;br /&gt;
$ complete -W &amp;quot;$(ola_rdm_get -l | xargs)&amp;quot; ola_rdm_set&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>66.92.11.32</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=RDM_with_OLA&amp;diff=3436</id>
		<title>RDM with OLA</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=RDM_with_OLA&amp;diff=3436"/>
				<updated>2010-08-08T02:47:18Z</updated>
		
		<summary type="html">&lt;p&gt;66.92.11.32: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[RDM]] devices can be configured through the web interface (only partially complete) or from the command line. Even if you don't have any RDM devices you can still experiment using the fake RDM device created by the Dummy Plugin.&lt;br /&gt;
&lt;br /&gt;
To follow these examples, patch the Dummy Port to universe 1.&lt;br /&gt;
&lt;br /&gt;
== Device Discovery  ==&lt;br /&gt;
&lt;br /&gt;
Each RDM device has a unique ID (UID) made up of a two byte manufacturer ID and a four byte device ID. The ''ola_rdm_discovery'' tool displays the UIDs found for each universe.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ola_rdm_discover  -u 1&lt;br /&gt;
7a70:ffffff00&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A single device should be found with a manufacturer ID of 7a70 (Open Lighting) and a device ID of ffffff00 (the dummy device).&lt;br /&gt;
&lt;br /&gt;
Passing the -f option will force the discovery algorithm to be run for the particular universe. This won't produce any output unless an error occurs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ola_rdm_discover  -u 1 -f&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Device Configuration ==&lt;br /&gt;
&lt;br /&gt;
Now that a device has been found, we can query it to find the parameters it supports. Each parameter is assigned a two byte identifier known as a PID. The  ''ola_rdm_get'' and ''ola_rdm_set'' commands are used to read / write the values of parameters.  The first thing to do is to view a list of all known parameters:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ola_rdm_get  --list_pids&lt;br /&gt;
boot_software_version_id&lt;br /&gt;
boot_software_version_label&lt;br /&gt;
capture_preset&lt;br /&gt;
clear_status_id&lt;br /&gt;
comms_status&lt;br /&gt;
default_slot_value&lt;br /&gt;
device_hours&lt;br /&gt;
device_info&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This doesn't query the RDM device at all, it simply lists out the names of standard parameters. To see which particular parameters a device supports use:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ola_rdm_get  --universe 1 --uid 7a70:ffffff00 supported_parameters&lt;br /&gt;
Supported Parameters&lt;br /&gt;
  0x50 (supported_parameters)&lt;br /&gt;
  0x60 (device_info)&lt;br /&gt;
  0x80 (device_model_description)&lt;br /&gt;
  0x81 (manufacturer_label)&lt;br /&gt;
  0x82 (device_label)&lt;br /&gt;
  0xc0 (software_version_label)&lt;br /&gt;
  0xf0 (dmx_start_address)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
One of the most useful parameters is device_info:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ola_rdm_get  --universe 1 --uid 7a70:ffffff00 device_info&lt;br /&gt;
Device Info&lt;br /&gt;
RDM Protocol Version: 1.0&lt;br /&gt;
Device Model: 0x1&lt;br /&gt;
Product Category: other&lt;br /&gt;
Software Version: 0x1&lt;br /&gt;
DMX Footprint: 10&lt;br /&gt;
DMX Personality: 1 / 1&lt;br /&gt;
DMX Start Address: 1&lt;br /&gt;
# of Subdevices: 0&lt;br /&gt;
Sensor Count: 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here we see some general information about the device including the DMX start address and the # of DMX channels used (DMX Footprint). We can also get the DMX start address by using the dmx_start_address parameter directly:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ola_rdm_get  --universe 1 --uid 7a70:ffffff00 dmx_start_address &lt;br /&gt;
DMX Start Address: 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To set the start address, the  ''ola_rdm_set'' program is used:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ola_rdm_set  --universe 1 --uid 7a70:ffffff00 dmx_start_address  10&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
No output is displayed unless the request failed. Now we can check that the set worked:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ola_rdm_get  --universe 1 --uid 7a70:ffffff00 dmx_start_address &lt;br /&gt;
DMX Start Address: 10&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finally, the full list of options for ''ola_rdm_get'' and ''ola_rdm_set'' can be found by running with --help:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  -d, --sub_device &amp;lt;device&amp;gt; target a particular sub device (default is 0)&lt;br /&gt;
  -h, --help                               display this help message and exit.&lt;br /&gt;
  -l, --list_pids                         display a list of pids&lt;br /&gt;
  -u, --universe &amp;lt;universe&amp;gt;  universe number.&lt;br /&gt;
  --uid &amp;lt;uid&amp;gt;                            the UID of the device to control.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Useful Tricks ==&lt;br /&gt;
&lt;br /&gt;
If you're using bash, it's worthwhile to set up tab completion of PIDs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ complete -W &amp;quot;$(ola_rdm_get -l | xargs)&amp;quot; ola_rdm_get&lt;br /&gt;
$ complete -W &amp;quot;$(ola_rdm_get -l | xargs)&amp;quot; ola_rdm_set&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>66.92.11.32</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OlaLED&amp;diff=3421</id>
		<title>OlaLED</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=OlaLED&amp;diff=3421"/>
				<updated>2010-07-27T05:16:09Z</updated>
		
		<summary type="html">&lt;p&gt;66.92.11.32: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Introduction ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In this topic, you will learn how to install a python script to permit to control a LED / RGB system via webcontrol (or other python script)&lt;br /&gt;
&lt;br /&gt;
==== prerequisites ====&lt;br /&gt;
&lt;br /&gt;
You need to have a fully functional ola system&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Install script ====&lt;br /&gt;
&lt;br /&gt;
create a directory to store all these new functionnality &lt;br /&gt;
&lt;br /&gt;
  mkdir -p /srv/dmx/&lt;br /&gt;
&lt;br /&gt;
write a this new python script in this folder :&lt;br /&gt;
&lt;br /&gt;
  nano /srv/dmx/server.py&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  #!/usr/bin/python&lt;br /&gt;
  &lt;br /&gt;
  import SocketServer&lt;br /&gt;
  import threading&lt;br /&gt;
  import time&lt;br /&gt;
  from ola_send_dmx import *&lt;br /&gt;
  &lt;br /&gt;
  my_thread = 0&lt;br /&gt;
  my_command = 'start'&lt;br /&gt;
  &lt;br /&gt;
  actual_program = 'color'  ## program wanted&lt;br /&gt;
  param1 = 'red'  ## first param&lt;br /&gt;
  intensity = 100 ## current intensity&lt;br /&gt;
  actual_fixed_color = 0 ## if fixed color choice, put args here to remember (if having to change intensity)&lt;br /&gt;
  R_before = 0  # current color state&lt;br /&gt;
  G_before = 0  &lt;br /&gt;
  B_before = 0&lt;br /&gt;
&lt;br /&gt;
  pitch = 1&lt;br /&gt;
&lt;br /&gt;
  class MyTCPHandler(SocketServer.BaseRequestHandler):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    The RequestHandler class for our server.&lt;br /&gt;
&lt;br /&gt;
    It is instantiated once per connection to the server, and must&lt;br /&gt;
    override the handle() method to implement communication to the&lt;br /&gt;
    client.&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
    def handle(self):&lt;br /&gt;
        # self.request is the TCP socket connected to the client&lt;br /&gt;
	global my_thread&lt;br /&gt;
	&lt;br /&gt;
        self.data = self.request.recv(1024).strip()&lt;br /&gt;
	&lt;br /&gt;
	# was a test&lt;br /&gt;
	#if self.data == 'reset' :&lt;br /&gt;
	#	global my_command&lt;br /&gt;
	#	my_command = 'reset'&lt;br /&gt;
	#else :&lt;br /&gt;
&lt;br /&gt;
	command = self.data.split()&lt;br /&gt;
	command = command[0]&lt;br /&gt;
	&lt;br /&gt;
	if command == 'intensity':			# We separe intensity because should lauch in parallel&lt;br /&gt;
		another_thread = Thread_dmx(self.data)  # thread named different for able controlling mythread&lt;br /&gt;
		another_thread.start()	&lt;br /&gt;
		print &amp;quot;thread intensite lance&amp;quot;&lt;br /&gt;
		# just send back the same data, but upper-cased&lt;br /&gt;
	        self.request.send(self.data.upper())&lt;br /&gt;
	else:&lt;br /&gt;
		if my_thread != 0 :	#if thread is already launched and is not about intensity&lt;br /&gt;
			try:&lt;br /&gt;
				my_thread.stop()	#stop thread&lt;br /&gt;
				my_thread.join()	#stop program to be sure thread is stopped&lt;br /&gt;
			except NameError:&lt;br /&gt;
		    		print &amp;quot;An error occured when trying to stop previous thread.&amp;quot;&lt;br /&gt;
		print &amp;quot;launching thread &amp;quot; + self.data&lt;br /&gt;
		my_thread = Thread_dmx(self.data)&lt;br /&gt;
		my_thread.start()&lt;br /&gt;
		# just send back the same data to the client, but upper-cased&lt;br /&gt;
		self.request.send(self.data.upper())&lt;br /&gt;
  &lt;br /&gt;
  class Thread_dmx(threading.Thread):&lt;br /&gt;
  &lt;br /&gt;
	def __init__(self, nom = ''):&lt;br /&gt;
		threading.Thread.__init__(self)&lt;br /&gt;
		self.nom = nom&lt;br /&gt;
		self.Terminated = False&lt;br /&gt;
	def run(self):&lt;br /&gt;
		global actual_program&lt;br /&gt;
		global intensity&lt;br /&gt;
		global fixed_color&lt;br /&gt;
		## separate command and arguments ##&lt;br /&gt;
		words = self.nom.split()&lt;br /&gt;
		if len(words) == 0:&lt;br /&gt;
			print('Error: empty request\n')&lt;br /&gt;
			return&lt;br /&gt;
  &lt;br /&gt;
		command = words[0]&lt;br /&gt;
		args = words[1:]&lt;br /&gt;
  &lt;br /&gt;
		  &lt;br /&gt;
		methodname = 'do_' + command&lt;br /&gt;
&lt;br /&gt;
		## relauch sending DMX for fixed color, if intensity changed&lt;br /&gt;
		if command=='intensity':&lt;br /&gt;
			&lt;br /&gt;
			intensity = abs(int(args[0]))&lt;br /&gt;
			if intensity &amp;gt; 100:&lt;br /&gt;
				return&lt;br /&gt;
			if actual_program == 'fade':&lt;br /&gt;
				method = getattr(self, 'do_fade')&lt;br /&gt;
				method(*fixed_color)&lt;br /&gt;
				&lt;br /&gt;
		else:&lt;br /&gt;
			&lt;br /&gt;
			actual_program = command&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
			## take care of inexistent function&lt;br /&gt;
			if not hasattr(self, methodname):&lt;br /&gt;
				print('Error: ',command,' is not a valid command')&lt;br /&gt;
				return&lt;br /&gt;
  &lt;br /&gt;
			## save color if fixed color&lt;br /&gt;
			if command=='fade':&lt;br /&gt;
				fixed_color = args&lt;br /&gt;
  &lt;br /&gt;
			## launch corresponding function&lt;br /&gt;
			method = getattr(self, methodname)&lt;br /&gt;
			method(*args)&lt;br /&gt;
  &lt;br /&gt;
	## Stop the thread if called&lt;br /&gt;
	def stop(self):&lt;br /&gt;
		self.Terminated = True	&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
	## Go to specified DMX adresses from previous adresses in fade&lt;br /&gt;
	def do_fade(self,R_after,G_after,B_after,speed):&lt;br /&gt;
		&lt;br /&gt;
		global R_before&lt;br /&gt;
		global G_before&lt;br /&gt;
		global B_before&lt;br /&gt;
		global intensity&lt;br /&gt;
  &lt;br /&gt;
		R_after=int(round((int(R_after)*intensity)/100))&lt;br /&gt;
		G_after=int(round((int(G_after)*intensity)/100))&lt;br /&gt;
		B_after=int(round((int(B_after)*intensity)/100))&lt;br /&gt;
  &lt;br /&gt;
		if(R_after==R_before and G_after==G_before and B_after==B_before):&lt;br /&gt;
			print('Etat deja atteint')&lt;br /&gt;
			return&lt;br /&gt;
  &lt;br /&gt;
		  &lt;br /&gt;
		 		&lt;br /&gt;
		speed=float(speed)&lt;br /&gt;
		&lt;br /&gt;
		actual_intensity = intensity&lt;br /&gt;
		time_to_sleep=(speed/max(abs(R_before-R_after),abs(G_before-G_after),abs(B_before-B_after)))&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
                # count to know wich pitch to apply (processor free)&lt;br /&gt;
  &lt;br /&gt;
                speed_reference=float(0.01)&lt;br /&gt;
                print(time_to_sleep)&lt;br /&gt;
                pitch=int(speed_reference/time_to_sleep)&lt;br /&gt;
                print(pitch)&lt;br /&gt;
                if pitch == 0:&lt;br /&gt;
                        pitch = int(1)&lt;br /&gt;
                print(pitch)&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
		## while ending color are not reached or no order for stopping, increment data&lt;br /&gt;
		while (R_before-R_after!=0 or G_before-G_after!=0 or B_before-B_after!=0) and (not self.Terminated) :	&lt;br /&gt;
			## If intensity was changed, take care of this&lt;br /&gt;
			if actual_intensity != intensity:&lt;br /&gt;
				R_after=int(round((int(R_after)*intensity)/100))&lt;br /&gt;
				G_after=int(round((int(G_after)*intensity)/100))&lt;br /&gt;
				B_after=int(round((int(B_after)*intensity)/100))&lt;br /&gt;
				actual_intensity = intensity			&lt;br /&gt;
  &lt;br /&gt;
			R_diff=R_before-R_after&lt;br /&gt;
			G_diff=G_before-G_after&lt;br /&gt;
			B_diff=B_before-B_after&lt;br /&gt;
			 &lt;br /&gt;
			if R_diff &amp;lt;= -pitch :&lt;br /&gt;
				R_before += pitch&lt;br /&gt;
			elif R_diff &amp;gt;= pitch : &lt;br /&gt;
				R_before-= pitch&lt;br /&gt;
			else :&lt;br /&gt;
				R_before = R_after&lt;br /&gt;
			if G_diff &amp;lt;= -pitch :&lt;br /&gt;
				G_before += pitch&lt;br /&gt;
			elif G_diff &amp;gt;= pitch :&lt;br /&gt;
				G_before -= pitch&lt;br /&gt;
			else :&lt;br /&gt;
				G_before=G_after&lt;br /&gt;
			if B_diff &amp;lt;= -pitch :&lt;br /&gt;
				B_before += pitch&lt;br /&gt;
			elif B_diff &amp;gt;=pitch :&lt;br /&gt;
				B_before -= pitch&lt;br /&gt;
			else :&lt;br /&gt;
				B_before=B_after&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
			#print('AFTER : ',R_after,G_after,B_after)&lt;br /&gt;
			print('values =',R_before,G_before,B_before)&lt;br /&gt;
			print('sleep =',time_to_sleep*pitch)&lt;br /&gt;
			print('pitch =',pitch)&lt;br /&gt;
			dmx_send(R_before,G_before,B_before)&lt;br /&gt;
			time.sleep(time_to_sleep*pitch)&lt;br /&gt;
  &lt;br /&gt;
	## make a chase from red to blue, indefinitely&lt;br /&gt;
	def do_chase(self,speed):&lt;br /&gt;
		intensity = 255&lt;br /&gt;
		speed = float(speed)&lt;br /&gt;
		while not self.Terminated :&lt;br /&gt;
                        self.do_fade(intensity,0,intensity,speed)&lt;br /&gt;
                        print(&amp;quot;7&amp;quot;)&lt;br /&gt;
			print(&amp;quot;1&amp;quot;)&lt;br /&gt;
			self.do_fade(intensity,0,0,speed)&lt;br /&gt;
			print(&amp;quot;2&amp;quot;)&lt;br /&gt;
			self.do_fade(intensity,intensity,0,speed)&lt;br /&gt;
			print(&amp;quot;3&amp;quot;)&lt;br /&gt;
			self.do_fade(0,intensity,0,speed)&lt;br /&gt;
			print(&amp;quot;4&amp;quot;)&lt;br /&gt;
			self.do_fade(0,intensity,intensity,speed)&lt;br /&gt;
			print(&amp;quot;5&amp;quot;)&lt;br /&gt;
			self.do_fade(0,0,intensity,speed)&lt;br /&gt;
			print(&amp;quot;6&amp;quot;)&lt;br /&gt;
			#self.do_fade(intensity,0,intensity,speed)&lt;br /&gt;
			#print(&amp;quot;7&amp;quot;)&lt;br /&gt;
  &lt;br /&gt;
  if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    HOST, PORT = &amp;quot;localhost&amp;quot;, 9999&lt;br /&gt;
  &lt;br /&gt;
    # Create the server, binding to localhost on port 9999&lt;br /&gt;
    server = SocketServer.TCPServer((HOST, PORT), MyTCPHandler)&lt;br /&gt;
  &lt;br /&gt;
    # Activate the server; this will keep running until you&lt;br /&gt;
    # interrupt the program with Ctrl-C&lt;br /&gt;
    server.serve_forever()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
copy client_wrapper.py in this folder :&lt;br /&gt;
&lt;br /&gt;
  cp /usr/src/ola-0.7.4/python/examples/client_wrapper.py /srv/dmx/&lt;br /&gt;
&lt;br /&gt;
create a new python file function : ola_send_dmx.py&lt;br /&gt;
&lt;br /&gt;
  nano /srv/dmx/ola_send_dmx.py&lt;/div&gt;</summary>
		<author><name>66.92.11.32</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=RDM_with_OLA&amp;diff=3415</id>
		<title>RDM with OLA</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=RDM_with_OLA&amp;diff=3415"/>
				<updated>2010-07-20T05:18:39Z</updated>
		
		<summary type="html">&lt;p&gt;66.92.11.32: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;RDM devices can be configured through the web interface (only partially complete) or from the command line.&lt;br /&gt;
&lt;br /&gt;
== Device Discovery  ==&lt;br /&gt;
&lt;br /&gt;
The ''ola_rdm_discovery'' tool displays the UIDs found for each universe. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ola_rdm_discover  -u 1&lt;br /&gt;
414c:010014b3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Passing the -f options will force the discovery algorithm to be run for the particular universe. This won't produce any output unless and error occurs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ola_rdm_discover  -u 1 -f&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Device Configuration ==&lt;br /&gt;
&lt;br /&gt;
The  ''ola_rdm_get'' and ''ola_rdm_get'' commands allow attributes of the devices to be controlled. The first thing to do is to view a list of all known attributes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ola_rdm_get  --list_pids&lt;br /&gt;
boot_software_version_id&lt;br /&gt;
boot_software_version_label&lt;br /&gt;
capture_preset&lt;br /&gt;
clear_status_id&lt;br /&gt;
comms_status&lt;br /&gt;
default_slot_value&lt;br /&gt;
device_hours&lt;br /&gt;
device_info&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To fetch the value of a PID from a device use:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ola_rdm_get  --universe 1 --uid 414c:010014b3 device_info&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Changing the value works in a similar way:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ola_rdm_set  --universe 1 --uid 414c:010014b3 comms_status  # clear the communication counters&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The full list of options can be found by running with --help:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  -d, --sub_device &amp;lt;device&amp;gt; target a particular sub device (default is 0)&lt;br /&gt;
  -h, --help                               display this help message and exit.&lt;br /&gt;
  -l, --list_pids                         display a list of pids&lt;br /&gt;
  -u, --universe &amp;lt;universe&amp;gt;  universe number.&lt;br /&gt;
  --uid &amp;lt;uid&amp;gt;                            the UID of the device to control.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Useful Tricks ==&lt;br /&gt;
&lt;br /&gt;
If you're using bash, it's worthwhile to set up tab completion of PIDs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ complete -W &amp;quot;$(ola_rdm_get -l | xargs)&amp;quot; ola_rdm_get&lt;br /&gt;
$ complete -W &amp;quot;$(ola_rdm_get -l | xargs)&amp;quot; ola_rdm_set&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>66.92.11.32</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=RDM_with_OLA&amp;diff=3414</id>
		<title>RDM with OLA</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=RDM_with_OLA&amp;diff=3414"/>
				<updated>2010-07-20T05:18:10Z</updated>
		
		<summary type="html">&lt;p&gt;66.92.11.32: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;RDM devices can be configured through the web interface (only partially complete) or from the command line.&lt;br /&gt;
&lt;br /&gt;
== Device Discovery  ==&lt;br /&gt;
&lt;br /&gt;
The ''ola_rdm_discovery'' tool displays the UIDs found for each universe. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ola_rdm_discover  -u 1&lt;br /&gt;
414c:010014b3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Passing the -f options will force the discovery algorithm to be for the particular universe. This won't produce any output unless and error occurs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ola_rdm_discover  -u 1 -f&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Device Configuration ==&lt;br /&gt;
&lt;br /&gt;
The  ''ola_rdm_get'' and ''ola_rdm_get'' commands allow attributes of the devices to be controlled. The first thing to do is to view a list of all known attributes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ola_rdm_get  --list_pids&lt;br /&gt;
boot_software_version_id&lt;br /&gt;
boot_software_version_label&lt;br /&gt;
capture_preset&lt;br /&gt;
clear_status_id&lt;br /&gt;
comms_status&lt;br /&gt;
default_slot_value&lt;br /&gt;
device_hours&lt;br /&gt;
device_info&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To fetch the value of a PID from a device use:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ola_rdm_get  --universe 1 --uid 414c:010014b3 device_info&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Changing the value works in a similar way:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ola_rdm_set  --universe 1 --uid 414c:010014b3 comms_status  # clear the communication counters&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The full list of options can be found by running with --help:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  -d, --sub_device &amp;lt;device&amp;gt; target a particular sub device (default is 0)&lt;br /&gt;
  -h, --help                               display this help message and exit.&lt;br /&gt;
  -l, --list_pids                         display a list of pids&lt;br /&gt;
  -u, --universe &amp;lt;universe&amp;gt;  universe number.&lt;br /&gt;
  --uid &amp;lt;uid&amp;gt;                            the UID of the device to control.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Useful Tricks ==&lt;br /&gt;
&lt;br /&gt;
If you're using bash, it's worthwhile to set up tab completion of PIDs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ complete -W &amp;quot;$(ola_rdm_get -l | xargs)&amp;quot; ola_rdm_get&lt;br /&gt;
$ complete -W &amp;quot;$(ola_rdm_get -l | xargs)&amp;quot; ola_rdm_set&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>66.92.11.32</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=RDM_with_OLA&amp;diff=3413</id>
		<title>RDM with OLA</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=RDM_with_OLA&amp;diff=3413"/>
				<updated>2010-07-12T03:31:49Z</updated>
		
		<summary type="html">&lt;p&gt;66.92.11.32: Created page with 'RDM devices can be configured through the web interface (only partially complete) or from the command line.  == Device Discovery  ==  The ''ola_rdm_discovery'' tool displays the …'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;RDM devices can be configured through the web interface (only partially complete) or from the command line.&lt;br /&gt;
&lt;br /&gt;
== Device Discovery  ==&lt;br /&gt;
&lt;br /&gt;
The ''ola_rdm_discovery'' tool displays the UIDs found for each universe. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ola_rdm_discover  -u 1&lt;br /&gt;
414c:010014b3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Passing the -f options will force the discovery algorithm to be for the particular universe. This won't produce any output unless and error occurs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ola_rdm_discover  -u 1 -f&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Device Configuration ==&lt;br /&gt;
&lt;br /&gt;
The  ''ola_rdm_get'' and ''ola_rdm_get'' commands allow attributes of the devices to be controlled. The first thing to do is to view a list of all known attributes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ola_rdm_get  --list_pids&lt;br /&gt;
boot_software_version_id&lt;br /&gt;
boot_software_version_label&lt;br /&gt;
capture_preset&lt;br /&gt;
clear_status_id&lt;br /&gt;
comms_status&lt;br /&gt;
default_slot_value&lt;br /&gt;
device_hours&lt;br /&gt;
device_info&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To fetch the value of a PID from a device use:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ola_rdm_get  --universe 1 --uid 414c:010014b3 device_info&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Changing the value works in a similar way:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ola_rdm_set  --universe 1 --uid 414c:010014b3 comms_status  # clear the communication counters&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The full list of options can be found by running with --help:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  -d, --sub_device &amp;lt;device&amp;gt; target a particular sub device (default is 0)&lt;br /&gt;
  -h, --help                               display this help message and exit.&lt;br /&gt;
  -l, --list_pids                         display a list of pids&lt;br /&gt;
  -u, --universe &amp;lt;universe&amp;gt;  universe number.&lt;br /&gt;
  --uid &amp;lt;uid&amp;gt;                            the UID of the device to control.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>66.92.11.32</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=Open_Lighting_Architecture&amp;diff=3396</id>
		<title>Open Lighting Architecture</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=Open_Lighting_Architecture&amp;diff=3396"/>
				<updated>2010-06-13T17:31:56Z</updated>
		
		<summary type="html">&lt;p&gt;66.92.11.32: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Ola.png|right]]&lt;br /&gt;
Link: http://code.google.com/p/linux-lighting/ &amp;lt;br&amp;gt;&lt;br /&gt;
{{Features|free=yes|tx=yes|rx=yes|linux=yes|osx=yes|http=yes}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OLA (Open Lighting Architecture) is an open source framework which provides applications with a mechanism to send and receive [[DMX512]] using hardware devices and DMX over IP protocols. It enables [[:Category:Controllers | software controllers]] to communicate with DMX hardware either via Ethernet or over traditional DMX512 networks.&lt;br /&gt;
&lt;br /&gt;
[[Image:Llad_home.png|right]]&lt;br /&gt;
OLA can also convert DMX data sent using DMX over IP protocols from one format to another, allowing devices from different manufacturers to interact with each other. For example a [[Strand_Lighting|Strand]] Lighting Console using ShowNet can send DMX to an [[Enttec]] [[DmxEtherGate MKII|EtherGate]]). When combined with a physical DMX interface such as the [[DMX USB Pro]], OLA can send and receive data from traditional wired DMX networks.&lt;br /&gt;
&lt;br /&gt;
OLA can run on Linux and on Mac OS X. A port to Windows is feasible if someone wants to add the necessary platform-dependent code.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Contribute&amp;lt;/b&amp;gt;: Looking to help? Visit the [[OLA Contributors]] page. The page also lists people and companies who have supported OLA. Please support them in return!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Bugs&amp;lt;/b&amp;gt;: Check the bug tracker at http://code.google.com/p/linux-lighting/issues/list&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Questions&amp;lt;/b&amp;gt;: See the news group at http://groups.google.com/group/open-lighting&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Supported Protocols:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| border=1 cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
! '''Protocol'''!! Linux !! '''Mac OS X''' &lt;br /&gt;
|-&lt;br /&gt;
|| [[:Category:ArtNet|ArtNet]]   || [[Image:Green-tick.png|center]]  || [[Image:Green-tick.png|center]] &lt;br /&gt;
|-&lt;br /&gt;
|| [[E1.31]] / [[ACN]] || [[Image:Green-tick.png|center]]  || [[Image:Green-tick.png|center]] &lt;br /&gt;
|-&lt;br /&gt;
|| [[:Category:ESP Net|ESP Net]] || [[Image:Green-tick.png|center]]  || [[Image:Green-tick.png|center]] &lt;br /&gt;
|-&lt;br /&gt;
|| [[:Category:Pathport|Pathport]]  || [[Image:Green-tick.png|center]]  || [[Image:Green-tick.png|center]] &lt;br /&gt;
|-&lt;br /&gt;
|| [[:Category:Sandnet|Sandnet]] || [[Image:Green-tick.png|center]]  || [[Image:Green-tick.png|center]] &lt;br /&gt;
|-&lt;br /&gt;
|| [[:Category:ShowNet|ShowNet]] || [[Image:Green-tick.png|center]]  || [[Image:Green-tick.png|center]] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Supported Devices:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| border=1 cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
! '''Device'''!! Linux !! '''Mac OS X''' &lt;br /&gt;
|-&lt;br /&gt;
||  [[Anyma uDMX]] || [[Image:Green-tick.png|center]] || [[Image:Green-tick.png|center]] &lt;br /&gt;
|-&lt;br /&gt;
|| [[Arduino RGB Mixer]] || [[Image:Green-tick.png|center]]  || [[Image:Green-tick.png|center]] &lt;br /&gt;
|-&lt;br /&gt;
|| [[DMX 4 Linux]] || [[Image:Green-tick.png|center]]  || &lt;br /&gt;
|-&lt;br /&gt;
|| [[DMX USB Pro]] || [[Image:Green-tick.png|center]]  || [[Image:Green-tick.png|center]] &lt;br /&gt;
|-&lt;br /&gt;
|| [[DMX-TRI]] || [[Image:Green-tick.png|center]] Output only || [[Image:Green-tick.png|center]] Output only&lt;br /&gt;
|-&lt;br /&gt;
|| [[DMXking USB DMX512-A]] || [[Image:Green-tick.png|center]]  || [[Image:Green-tick.png|center]] &lt;br /&gt;
|-&lt;br /&gt;
|| [[Open DMX USB]] || [[Image:Green-tick.png|center]]  || &lt;br /&gt;
|-&lt;br /&gt;
|| [[Packetheads USB_DMX Dongle]] ||  [[Image:Green-tick.png|center]]  ||  [[Image:Green-tick.png|center]]  &lt;br /&gt;
|-&lt;br /&gt;
|| [[RDM-TRI]] || [[Image:Green-tick.png|center]] Output only || [[Image:Green-tick.png|center]] Output only&lt;br /&gt;
|-&lt;br /&gt;
|| [[StageProfi]] || [[Image:Green-tick.png|center]]  || [[Image:Green-tick.png|center]] Ethernet version only&lt;br /&gt;
|-&lt;br /&gt;
|| [[USBDMX2]] || [[Image:Green-tick.png|center]]  || [[Image:Green-tick.png|center]] &lt;br /&gt;
|-&lt;br /&gt;
|| [[Velleman K8062]] || [[Image:Green-tick.png|center]]  || [[Image:Green-tick.png|center]] &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Getting Started&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Start here if you've never used OLA before and read these in order.&lt;br /&gt;
* [[Download OLA]]&lt;br /&gt;
* [[OLA on OS X]] or [[OLA on Linux]] - How to install OLA.&lt;br /&gt;
* [[Using OLA]] - A basic introduction&lt;br /&gt;
* [[OLA Command Line Tools]] - Documentation for the tools in ola-examples&lt;br /&gt;
* [[OLA Device Specific Configuration]]&lt;br /&gt;
* [[OLA Tips &amp;amp; Tricks]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Tutorials&amp;lt;/b&amp;gt;&lt;br /&gt;
* [[OlaOutput Max External]] - Setup OlaOutput on Mac OS X to send DMX messages from Max/MSP/Jitter&lt;br /&gt;
* [[OLAGuruPlug]] - Running OLA on a [http://www.globalscaletechnologies.com/c-4-guruplugs.aspx GuruPlug]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Advanced Topics:&amp;lt;/b&amp;gt;&lt;br /&gt;
* [[OLA Merging Algorithms]]&lt;br /&gt;
* [[OLA DiffServ support]] (QOS settings)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Developer Documentation:&amp;lt;/b&amp;gt;&lt;br /&gt;
* [[OLA developer info]] - about the source code and structure&lt;br /&gt;
* [[OLA Client API]] - the C++ API&lt;br /&gt;
* [[OLA Python API]] - easy DMX programming&lt;br /&gt;
* [[Build OLA Mac Packages]] - notes for building the .dmg images&lt;br /&gt;
* [[Building OLA for Windows]] - Notes on Windows support (in progress)&lt;br /&gt;
* [[Using OLA with Xcode]] - on a Mac, in Objective-C++&lt;br /&gt;
* [[Port Throttling]] &lt;br /&gt;
* [[OLA Performance Stats]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Tutorials&amp;lt;/b&amp;gt;, these refer to the previous release but parts of them are still relevant.&lt;br /&gt;
* [[LLA Sandnet Tutorial]] - Setup Horizon using Sandnet and LLA&lt;br /&gt;
* [[LLA and Q Light Controller Ubuntu Tutorial]] - Setup LLA on Ubuntu/Debian-type distro with QLC&lt;br /&gt;
* [[LLA and Q Light Controller OSX Tutorial]] - Setup LLA on Mac OS X with QLC&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Deprecated Documentation&amp;lt;/b&amp;gt;&lt;br /&gt;
* [[OLA 0.3]] - Release Notes&lt;br /&gt;
&lt;br /&gt;
OLA can also run on a wireless access point. [http://nomis52.net/?section=projects&amp;amp;sect2=artnet&amp;amp;page=node]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:ArtNet]]&lt;br /&gt;
[[Category:ESP Net]]&lt;br /&gt;
[[Category:E1.31]]&lt;br /&gt;
[[Category:Sandnet]]&lt;br /&gt;
[[Category:ShowNet]]&lt;br /&gt;
[[Category:Utilities]]&lt;br /&gt;
[[Category:Pathport]]&lt;/div&gt;</summary>
		<author><name>66.92.11.32</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OLAGuruPlug&amp;diff=3361</id>
		<title>OLAGuruPlug</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=OLAGuruPlug&amp;diff=3361"/>
				<updated>2010-05-17T05:34:25Z</updated>
		
		<summary type="html">&lt;p&gt;66.92.11.32: /* Installation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This describes how to setup [[OLA]] on a [http://www.globalscaletechnologies.com/c-4-guruplugs.aspx GuruPlug]. These devices make excellent low cost [[DMX512]] nodes.&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
&lt;br /&gt;
This assumes you have a shell on the guru plug and that it can contact the internet to download the packages. Note that the default guru plug is insecure and comes with a lot of extras (samba, myqls, lighthttpd etc.) that aren't required. Fixing this is outside the scope of this tutorial.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Add the following line to /etc/apt/sources.list:&lt;br /&gt;
&lt;br /&gt;
  deb http://www.nomis52.net/data/ola-arm ./&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then apt-get install ola:&lt;br /&gt;
&lt;br /&gt;
  $ apt-get install olad&lt;br /&gt;
&lt;br /&gt;
== Setup ==&lt;br /&gt;
&lt;br /&gt;
Add a user ''ola'' for the daemon to run as:&lt;br /&gt;
&lt;br /&gt;
  $ adduser ola &lt;br /&gt;
&lt;br /&gt;
If you intend to use USB devices, you need to add this user to the plugdev &amp;amp; dialout groups.  Modify the lines in /etc/group:&lt;br /&gt;
&lt;br /&gt;
  dialout:x:20:ola&lt;br /&gt;
  plugdev:x:46:ola&lt;br /&gt;
&lt;br /&gt;
Finally add any udev rules that you'll need. See [[OLA Device Specific Configuration]]&lt;br /&gt;
&lt;br /&gt;
== Running == &lt;br /&gt;
&lt;br /&gt;
Change to the ''ola'' user and the start the daemon:&lt;br /&gt;
&lt;br /&gt;
  $ su ola&lt;br /&gt;
  $ olad -l 3&lt;/div&gt;</summary>
		<author><name>66.92.11.32</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OLAGuruPlug&amp;diff=3360</id>
		<title>OLAGuruPlug</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=OLAGuruPlug&amp;diff=3360"/>
				<updated>2010-05-17T05:33:05Z</updated>
		
		<summary type="html">&lt;p&gt;66.92.11.32: /* Installation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This describes how to setup [[OLA]] on a [http://www.globalscaletechnologies.com/c-4-guruplugs.aspx GuruPlug]. These devices make excellent low cost [[DMX512]] nodes.&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
&lt;br /&gt;
This assumes you have a shell on the guru plug and that it can contact the internet to download the packages. Note that the default guru plug is insecure and comes with a lot of extras (samba, myqls, lighthttpd etc.) that aren't required. Fixing this is outside the scope of this tutorial.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Add the following line to /etc/apt/sources.list:&lt;br /&gt;
&lt;br /&gt;
  deb http://www.nomis52.net/data/ola ./&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then apt-get install ola:&lt;br /&gt;
&lt;br /&gt;
  $ apt-get install olad&lt;br /&gt;
&lt;br /&gt;
== Setup ==&lt;br /&gt;
&lt;br /&gt;
Add a user ''ola'' for the daemon to run as:&lt;br /&gt;
&lt;br /&gt;
  $ adduser ola &lt;br /&gt;
&lt;br /&gt;
If you intend to use USB devices, you need to add this user to the plugdev &amp;amp; dialout groups.  Modify the lines in /etc/group:&lt;br /&gt;
&lt;br /&gt;
  dialout:x:20:ola&lt;br /&gt;
  plugdev:x:46:ola&lt;br /&gt;
&lt;br /&gt;
Finally add any udev rules that you'll need. See [[OLA Device Specific Configuration]]&lt;br /&gt;
&lt;br /&gt;
== Running == &lt;br /&gt;
&lt;br /&gt;
Change to the ''ola'' user and the start the daemon:&lt;br /&gt;
&lt;br /&gt;
  $ su ola&lt;br /&gt;
  $ olad -l 3&lt;/div&gt;</summary>
		<author><name>66.92.11.32</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OLA_Device_Specific_Configuration&amp;diff=3356</id>
		<title>OLA Device Specific Configuration</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=OLA_Device_Specific_Configuration&amp;diff=3356"/>
				<updated>2010-05-17T03:57:34Z</updated>
		
		<summary type="html">&lt;p&gt;66.92.11.32: /* Linux */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Anyma ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
You need a [http://www.reactivated.net/writing_udev_rules.html udev rule] like this in /etc/udev/rules.d/10-local.rules&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# udev rules file for the anyma dmx device&lt;br /&gt;
SUBSYSTEM==&amp;quot;usb|usb_device&amp;quot;, ACTION==&amp;quot;add&amp;quot;, ATTRS{idVendor}==&amp;quot;16c0&amp;quot;, ATTRS{idProduct}==&amp;quot;05dc&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==StageProfi==&lt;br /&gt;
&lt;br /&gt;
This comes in two flavors, a USB model and an Ethernet/IP model.&lt;br /&gt;
&lt;br /&gt;
  device = /dev/ttyUSB0&lt;br /&gt;
  device = 192.168.1.250&lt;br /&gt;
&lt;br /&gt;
==USB Pro==&lt;br /&gt;
&lt;br /&gt;
===Mac===&lt;br /&gt;
&lt;br /&gt;
Make sure you install the drives: http://www.ftdichip.com/Drivers/VCP.htm&lt;br /&gt;
&lt;br /&gt;
After a restart run:&lt;br /&gt;
&lt;br /&gt;
  ls /dev/cu.usbserial-*&lt;br /&gt;
&lt;br /&gt;
Make sure your ~/.ola/ola-usbpro.conf file matches the path above: &lt;br /&gt;
&lt;br /&gt;
  device_dir = /dev&lt;br /&gt;
  device_prefix = ttyUSB&lt;br /&gt;
  device_prefix = cu.usbserial-&lt;br /&gt;
&lt;br /&gt;
i.e. Look for devices at /dev/ttyUSB*  , /dev/cu.usbserial-*&lt;br /&gt;
&lt;br /&gt;
OLA also comes with a tool to update the firmware on a USB Pro:&lt;br /&gt;
&lt;br /&gt;
  ./tools/usbpro_firmware -d /dev/cu.usbserial-0000101D -f &amp;lt;firmware_file&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==USBDMX2==&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
You need a [http://www.reactivated.net/writing_udev_rules.html udev rule] like this in /etc/udev/rules.d/10-local.rules&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# udev rules file for the usbdmx2 dmx device&lt;br /&gt;
SUBSYSTEM==&amp;quot;usb|usb_device&amp;quot;, ACTION==&amp;quot;add&amp;quot;, ATTRS{idVendor}==&amp;quot;0962&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There is an issue where the device isn't detected correctly the first time. You may need to restart OLA once the DMX Transmit led comes on.&lt;br /&gt;
&lt;br /&gt;
===Mac===&lt;br /&gt;
&lt;br /&gt;
There is an issue where the device isn't detected correctly the first time. You may need to restart OLA once the DMX Transmit led comes on.&lt;br /&gt;
&lt;br /&gt;
==Velleman VM166 / K8062==&lt;br /&gt;
&lt;br /&gt;
===Mac===&lt;br /&gt;
&lt;br /&gt;
If you're installed from source you'll need the codeless KEXT which is available [http://code.google.com/p/linux-lighting/downloads/detail?name=libdmxusbshield.dmg| here]. If you installed OLA from the mac binary package this is already included.&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
You need a [http://www.reactivated.net/writing_udev_rules.html udev rule] like this in /etc/udev/rules.d/10-local.rules&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# udev rules file for the velleman dmx device&lt;br /&gt;
SUBSYSTEM==&amp;quot;usb|usb_device&amp;quot;, ACTION==&amp;quot;add&amp;quot;, ATTRS{idVendor}==&amp;quot;10cf&amp;quot;, ATTRS{idProduct}==&amp;quot;8062&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then make sure the user olad runs as is a member of plugdev.&lt;/div&gt;</summary>
		<author><name>66.92.11.32</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OLA_Client_API&amp;diff=3351</id>
		<title>OLA Client API</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=OLA_Client_API&amp;diff=3351"/>
				<updated>2010-05-02T20:04:56Z</updated>
		
		<summary type="html">&lt;p&gt;66.92.11.32: /* Example I:  Sending an DMX update using the StreamingClient */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;OLA provides a client library which allows other applications to send/receive DMX as well as control the OLA server. When writing a client application you have to choose between the ''StreamingClient'' and the full fledged ''OlaClient'' (provided by the ''SimpleClient'' helper class). The ''StreamingClient'' only allows a client to send DMX data to the OLA server, while the full client allows DMX data to be received and control messages to be sent to the server to change things like port patchings etc.&lt;br /&gt;
&lt;br /&gt;
==Example I:  Sending an DMX update using the StreamingClient==&lt;br /&gt;
&lt;br /&gt;
The simplest interface to OLA is the StreamingClient which just allows an application to send DMX data to the OLA server&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;ola/Closure.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;ola/DmxBuffer.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;ola/Logging.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;ola/StreamingClient.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;lt;iostream&amp;gt;                                                                                                          &lt;br /&gt;
 &lt;br /&gt;
 using std::cout;&lt;br /&gt;
 using std::endl;&lt;br /&gt;
 &lt;br /&gt;
 /*&lt;br /&gt;
   * This is called if the remove end closes the connection&lt;br /&gt;
   */&lt;br /&gt;
 int SocketClosed() {&lt;br /&gt;
   cout &amp;lt;&amp;lt; &amp;quot;The OLA server closed the connection&amp;quot;;&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main(int argc, char *argv[]) {&lt;br /&gt;
   unsigned int universe = 1;  // universe to use for sending data&lt;br /&gt;
   unsigned int i;&lt;br /&gt;
 &lt;br /&gt;
   // turn on OLA logging&lt;br /&gt;
   ola::InitLogging(ola::OLA_LOG_WARN, ola::OLA_LOG_STDERR);&lt;br /&gt;
 &lt;br /&gt;
   // Create a new DmxBuffer to hold the data&lt;br /&gt;
   ola::DmxBuffer buffer;&lt;br /&gt;
   // set all channels to 0&lt;br /&gt;
   buffer.Blackout();&lt;br /&gt;
 &lt;br /&gt;
   // create a new client and set the Error Closure&lt;br /&gt;
   ola::StreamingClient ola_client;&lt;br /&gt;
   ola_client.SetErrorClosure(ola::NewClosure(&amp;amp;SocketClosed));&lt;br /&gt;
 &lt;br /&gt;
   // Setup the client, this connects to the server&lt;br /&gt;
   if (!ola_client.Setup()) {&lt;br /&gt;
     cout &amp;lt;&amp;lt; &amp;quot;Setup failed&amp;quot; &amp;lt;&amp;lt; endl;&lt;br /&gt;
     exit(1);&lt;br /&gt;
   }&lt;br /&gt;
  &lt;br /&gt;
   // send the data to the ola server &lt;br /&gt;
   for (i = 0; i &amp;lt; 100; i++) {&lt;br /&gt;
     buffer.SetChannel(0, i);&lt;br /&gt;
     if (!ola_client.SendDmx(universe, buffer)) {&lt;br /&gt;
       cout &amp;lt;&amp;lt; &amp;quot;Send DMX failed&amp;quot; &amp;lt;&amp;lt; endl;&lt;br /&gt;
       exit(1);&lt;br /&gt;
     }&lt;br /&gt;
     usleep(20000);   // sleep for 20ms between updates                                                                            &lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   // close the connection&lt;br /&gt;
   ola_client.Stop();&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Note there isn't any need to poll for updates from the server in this case because the communication is all one way (client -&amp;gt; server). This also means that you can't receive DMX data or modify state on the server (like port patching and device parameters) when using the StreamingClient.&lt;br /&gt;
&lt;br /&gt;
Also take note of the call to usleep(). Without this you're likely to fill the network socket buffer at which point the client code will detect an error and close the socket (you may need to increase the number of loop iterations to trigger this).&lt;br /&gt;
&lt;br /&gt;
==Example II: Sending an DMX update using the SimpleClient==&lt;br /&gt;
&lt;br /&gt;
This example simply connects to the OLA Server and sends one DMX update just like the example above but using the SimpleClient.  It's about as basic as you can get because it requires no callbacks and exits immediately. We use two classes in this example, ''ola::SimpleClient'', and ''ola::OlaClient''.&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;ola/DmxBuffer.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;ola/Logging.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;ola/SimpleClient.h&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 int main() {&lt;br /&gt;
   ola::InitLogging(ola::OLA_LOG_WARN, ola::OLA_LOG_STDERR);&lt;br /&gt;
   ola::DmxBuffer buffer;&lt;br /&gt;
   buffer.Blackout();&lt;br /&gt;
   // some dummy dmx data&lt;br /&gt;
   buffer.SetChannel(0, 255);&lt;br /&gt;
  &lt;br /&gt;
   ola::SimpleClient simple_client;&lt;br /&gt;
   if (!simple_client.Setup())&lt;br /&gt;
     //setup failed&lt;br /&gt;
     return -1;&lt;br /&gt;
 &lt;br /&gt;
   // Get the underlying OlaClient object&lt;br /&gt;
   ola::OlaClient *client = simple_client.GetClient();&lt;br /&gt;
 &lt;br /&gt;
   // Send the DMX data &lt;br /&gt;
   client-&amp;gt;SendDmx(1, buffer);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The main class used to communicate with the LLA Server is ''OlaClient''. For ease of use, the ''SimpleClient'' class sets up ''OlaClient'' with a connection to an LLA Server running on the localhost:LLA_DEFAULT_PORT. You can call GetClient() on a ''SimpleClient'' instance to get a pointer to the underlying ''OlaClient''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Example III: Sending multiple updates==&lt;br /&gt;
&lt;br /&gt;
The previous example only sent a single DMX update before quitting. This next example adds a timeout which sends DMX every 50ms. This introduces a new class ''SelectServer'' which is used for registering timeouts.&lt;br /&gt;
&lt;br /&gt;
  #include &amp;lt;ola/DmxBuffer.h&amp;gt;&lt;br /&gt;
  #include &amp;lt;ola/network/SelectServer.h&amp;gt;&lt;br /&gt;
  #include &amp;lt;ola/Logging.h&amp;gt;&lt;br /&gt;
  #include &amp;lt;ola/SimpleClient.h&amp;gt;&lt;br /&gt;
  #include &amp;lt;ola/Closure.h&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  // Maximum value of a dmx channel&lt;br /&gt;
  static const unsigned int MAX_DMX = 255;&lt;br /&gt;
  // How often to send updates&lt;br /&gt;
  static const unsigned int TIMEOUT_MS = 50;&lt;br /&gt;
  &lt;br /&gt;
  class DmxTimeout {&lt;br /&gt;
    public:&lt;br /&gt;
      DmxTimeout(ola::OlaClient *client): m_tick(0),&lt;br /&gt;
                                          m_client(client) {&lt;br /&gt;
        buffer.Blackout();&lt;br /&gt;
        m_buffer.SetChannel(0, MAX_DMX);&lt;br /&gt;
      }&lt;br /&gt;
  &lt;br /&gt;
      // Called on timeout&lt;br /&gt;
      int SendDmx() {&lt;br /&gt;
        m_buffer.SetChannel(1, m_tick)&lt;br /&gt;
        m_buffer.SetChannel(2, MAX_DMX - m_tick)&lt;br /&gt;
        m_client-&amp;gt;SendDmx(1, buffer);&lt;br /&gt;
        m_tick++;&lt;br /&gt;
        m_tick %= MAX_DMX + 1;&lt;br /&gt;
        // we must return 0 else we get canceled&lt;br /&gt;
        return 0;&lt;br /&gt;
      }&lt;br /&gt;
    private:&lt;br /&gt;
      unsigned int m_tick;&lt;br /&gt;
      ola::DmxBuffer m_buffer;&lt;br /&gt;
      ola::OlaClient *m_client;&lt;br /&gt;
  };&lt;br /&gt;
  &lt;br /&gt;
  int main() {&lt;br /&gt;
    ola::InitLogging(ola::OLA_LOG_WARN, ola::OLA_LOG_STDERR);&lt;br /&gt;
    ola::SimpleClient simple_client;&lt;br /&gt;
  &lt;br /&gt;
    if (!simple_client.Setup())&lt;br /&gt;
      return -1;&lt;br /&gt;
  &lt;br /&gt;
    // Create a timeout and register it&lt;br /&gt;
    DmxTimeout timeout(simple_client.GetClient());&lt;br /&gt;
    ola::network::SelectServer ss = simple_client.GetSelectServer();&lt;br /&gt;
    ss-&amp;gt;RegisterTimeout(TIMEOUT_MS,&lt;br /&gt;
                        ola::NewClosure(&amp;amp;timeout, &amp;amp;DmxTimeout::SendDmx),&lt;br /&gt;
                        true); // we want this to repeat&lt;br /&gt;
  &lt;br /&gt;
    // Start the main loop&lt;br /&gt;
    ss-&amp;gt;Run();&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In this example we create ''DmxTimeout'' class whose ''SendDmx()'' method is called every time the timer expires.&lt;br /&gt;
&lt;br /&gt;
The other important part here is the ''SelectServer''. As well as the ''RegisterTimeout'' method we've used above, this can also be used to register sockets so we can respond to network activity. The ''Run()'' method starts the main event processing loop which will halt if an error occurs or ''Terminate()'' is called.&lt;br /&gt;
&lt;br /&gt;
==Example IV: Receiving DMX data==&lt;br /&gt;
&lt;br /&gt;
The third example shows how to listen and respond to event from the LLA server.&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;ola/Logging.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;ola/SimpleClient.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 static const unsigned int UNIVERSE = 1;&lt;br /&gt;
 &lt;br /&gt;
 class OurObserver: public ola::OlaClientObserver {&lt;br /&gt;
   public:&lt;br /&gt;
     // Called when new DMX values arrive&lt;br /&gt;
     void NewDmx(unsigned int universe,&lt;br /&gt;
                 const DmxBuffer &amp;amp;data, &lt;br /&gt;
                 const std::string &amp;amp;error) {&lt;br /&gt;
       OLA_INFO &amp;lt;&amp;lt; &amp;quot;Received &amp;quot; &amp;lt;&amp;lt; (int) data.Size() &amp;lt;&amp;lt;&lt;br /&gt;
         &amp;quot; channels for universe &amp;quot; &amp;lt;&amp;lt; (int) universe;&lt;br /&gt;
     }&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 int main() {&lt;br /&gt;
   ola::InitLogging(ola::OLA_LOG_INFO, ola::OLA_LOG_STDERR);&lt;br /&gt;
   ola::SimpleClient simple_client;&lt;br /&gt;
   OurObserver observer;&lt;br /&gt;
 &lt;br /&gt;
   if (!simple_client.Setup())&lt;br /&gt;
     return -1;&lt;br /&gt;
 &lt;br /&gt;
   ola::OlaClient *client = simple_client.GetClient();&lt;br /&gt;
   // Set the observer and register our interest in this universe&lt;br /&gt;
   client-&amp;gt;SetObserver(&amp;amp;observer);&lt;br /&gt;
   client-&amp;gt;RegisterUniverse(UNIVERSE, ola::REGISTER);&lt;br /&gt;
   simple_client.GetSelectServer()-&amp;gt;Run();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Here we inherit from the ''OlaClientObserver'' class and override the methods we're interested in receiving notification for.&lt;br /&gt;
&lt;br /&gt;
In the main function we set the observer object and register our interest in a universe.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Example V: More complex client==&lt;br /&gt;
&lt;br /&gt;
The above is all well and good but what if the main application has it's own event processing loop? An example of this is a GTK/Glib application which uses GMainLoop.&lt;br /&gt;
&lt;br /&gt;
On the other hand, what if you're not connecting to the LLA Server over TCP? Sometimes it may be desirable to embed the LLA server within the main application.&lt;br /&gt;
&lt;br /&gt;
Bypassing the SimpleClient and using OlaClient directly addresses both these problems.&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;ola/OlaClient.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;ola/select_server/SelectServer.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;ola/select_server/Socket.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 using ola::select_server::PipeSocket;&lt;br /&gt;
 &lt;br /&gt;
 int main() {&lt;br /&gt;
   // Create the select server&lt;br /&gt;
   ola::select_server::SelectServer ss;&lt;br /&gt;
 &lt;br /&gt;
   // Create the pipe socket to talk to the server on&lt;br /&gt;
   PipeSocket *pipe_socket = new PipeSocket();&lt;br /&gt;
   if (!pipe_socket-&amp;gt;Init())&lt;br /&gt;
     return -1;&lt;br /&gt;
 &lt;br /&gt;
   // Remember to add this socket to the SelectServer&lt;br /&gt;
   ss.AddSocket(pipe_socket);&lt;br /&gt;
 &lt;br /&gt;
   // Setup the OlaClient&lt;br /&gt;
   ola::OlaClient client(pipe_socket);&lt;br /&gt;
   if (!client.Setup())&lt;br /&gt;
     return -1;&lt;br /&gt;
 &lt;br /&gt;
   // At this point the client is setup. We then need to setup the LLAServer&lt;br /&gt;
   // ...&lt;br /&gt;
 &lt;br /&gt;
   // Once that is done we add the pipe as a new connection&lt;br /&gt;
   ola_server-&amp;gt;NewConnection(m_pipe_socket-&amp;gt;OppositeEnd());&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This example shows how we can create our own instance of a ''ConnectedSocket'' (''PipeSocket'' is a subclass of ''ConnectedSocket'') and pass it to the ''OlaClient'' to use. This code is very similar to what ''SimpleClient'' does under the hood.&lt;/div&gt;</summary>
		<author><name>66.92.11.32</name></author>	</entry>

	</feed>