<?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=Peternewman</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=Peternewman"/>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php/Special:Contributions/Peternewman"/>
		<updated>2026-04-08T19:41:59Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.29.1</generator>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OLA_Buildbot&amp;diff=5899</id>
		<title>OLA Buildbot</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=OLA_Buildbot&amp;diff=5899"/>
				<updated>2020-12-30T01:38:02Z</updated>
		
		<summary type="html">&lt;p&gt;Peternewman: /* OpenBSD Instructions */ Add eg++ etc&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;We run a [http://buildbot.net/ Buildbot] instance for [[OLA]].&lt;br /&gt;
&lt;br /&gt;
*Web UI: http://buildbot.openlighting.org&lt;br /&gt;
*IRC: OLA-buildbot-ch in #openlighting-build on irc.freenode.org&lt;br /&gt;
&lt;br /&gt;
We're currently only building ola, but this could be extended to do other projects such as the QT GUI etc.&lt;br /&gt;
&lt;br /&gt;
== Master Configuration ==&lt;br /&gt;
The buildbot master configuration is stored in git at https://github.com/OpenLightingProject/buildbot . It needs checking out, and symlinking to replace master.cfg in the buildbot master's config directory.&lt;br /&gt;
&lt;br /&gt;
N.B. If the main open-lighting git repository (as opposed to buildbot config) is ever moved or changed, ensure the master's gitpoller-workdir folder is emptied out, or the poller won't work properly.&lt;br /&gt;
&lt;br /&gt;
= Adding a Slave =&lt;br /&gt;
&lt;br /&gt;
Buildbot documentation is at http://docs.buildbot.net/current/manual/installation.html#creating-a-buildslave .  The steps below should cover everything you need though.&lt;br /&gt;
&lt;br /&gt;
== Prerequisites &amp;amp; Warning ==&lt;br /&gt;
&lt;br /&gt;
Slaves execute code directly from the git repo. Even though submits to the git repo are locked down, this is still a possible attack vector for your machine. For this reason it's best to run build slaves within a virtual machine.  TODO: link to some VM solutions.&lt;br /&gt;
&lt;br /&gt;
At the very least you should run the buildslave as a separate user (not root!). Slave passwords aren't stored in the git repo for security, you'll need to get Simon or Peter to add new ones.&lt;br /&gt;
&lt;br /&gt;
The buildbot performs full build &amp;amp; test runs with all the options enabled. Please make sure you have all the necessary libraries installed on your system. You need to be able to complete a &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
autoconf -i&lt;br /&gt;
./configure --enable-e133 --enable-rdm-tests --enable-python-libs --enable-ja-rule&lt;br /&gt;
make&lt;br /&gt;
make check&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
cycle before proceeding. If you have trouble ask on the mailing list.&lt;br /&gt;
&lt;br /&gt;
If you're running the lint check, you need cpplint.py in your path somewhere, see README.developer for info on how to obtain it.&lt;br /&gt;
&lt;br /&gt;
Buildbot slaves need to connect to  buildmaster.openlighting.org:9989 . Make sure your firewall allows this. No port forwarding for inbound connections is required.&lt;br /&gt;
&lt;br /&gt;
== Debian / Ubuntu Instructions ==&lt;br /&gt;
&lt;br /&gt;
This requires wheezy or later. For squeeze you can use the easy_install method below.&lt;br /&gt;
&lt;br /&gt;
=== Build Slave Installation ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo apt-get install buildbot-slave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Slave Configuration ===&lt;br /&gt;
&lt;br /&gt;
Create the slave (the package creates the buildbot user automatically for you):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo -u buildbot buildslave create-slave --usepty=0 /var/lib/buildbot/slaves/ola buildmaster.openlighting.org:9989 &amp;lt;slave user&amp;gt; &amp;lt;slave password&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Update the slave info, edit the files in /var/lib/buildbot/slaves/ola/info to be relevant to you.&lt;br /&gt;
&lt;br /&gt;
Add config for the slave into /etc/default/buildslave (you'll need to increase the array id if you've got more than one slave on the same host), e.g.:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 SLAVE_ENABLED[1]=1                    # 1-enabled, 0-disabled&lt;br /&gt;
 SLAVE_NAME[1]=&amp;quot;ola&amp;quot;         # short name printed on start/stop&lt;br /&gt;
 SLAVE_USER[1]=&amp;quot;buildbot&amp;quot;              # user to run slave as&lt;br /&gt;
 SLAVE_BASEDIR[1]=&amp;quot;/var/lib/buildbot/slaves/ola&amp;quot;                   # basedir to slave (absolute path)&lt;br /&gt;
 SLAVE_OPTIONS[1]=&amp;quot;&amp;quot;                   # buildbot options&lt;br /&gt;
 SLAVE_PREFIXCMD[1]=&amp;quot;&amp;quot;                 # prefix command, i.e. nice, linux32, dchroot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Start the slave&lt;br /&gt;
 sudo /etc/init.d/buildslave start&lt;br /&gt;
&lt;br /&gt;
Check the log if there are any issues, or confirm the slave is registered at http://buildbot.openlighting.org/buildslaves:&lt;br /&gt;
 tail -f /var/lib/buildbot/slaves/ola/twistd.log&lt;br /&gt;
&lt;br /&gt;
== FreeBSD Instructions ==&lt;br /&gt;
&lt;br /&gt;
This was tested on FreeBSD 10.&lt;br /&gt;
&lt;br /&gt;
=== Build Slave Installation ===&lt;br /&gt;
As root:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 pkg install buildbot-slave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Slave Configuration ===&lt;br /&gt;
&lt;br /&gt;
Setup a new user:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
su -&lt;br /&gt;
adduser&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Username: ola-build-slave&lt;br /&gt;
Use password-based authentication? No&lt;br /&gt;
&lt;br /&gt;
Setup the slave:&lt;br /&gt;
&lt;br /&gt;
Switch to the slave user, I did:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
su - #To root&lt;br /&gt;
su - ola-build-slave #To slave user&lt;br /&gt;
cd ~&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Export the variables needed for configure on FreeBSD:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export CPPFLAGS=&amp;quot;-I/usr/local/include/&amp;quot;&lt;br /&gt;
export LDFLAGS=&amp;quot;-L/usr/local/lib/&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setup the slave itself:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/usr/local/bin/buildslave create-slave ola-slave buildmaster.openlighting.org:9989 &amp;lt;slave user&amp;gt; &amp;lt;slave password&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edit &amp;lt;tt&amp;gt;ola-slave/info/admin&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;ola-slave/info/host&amp;lt;/tt&amp;gt; so your slave shows up correctly.&lt;br /&gt;
&lt;br /&gt;
Then start the slave:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/usr/local/bin/buildslave start ola-slave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can look at the logs by running&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 tail -f ola-slave/twistd.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At this point you can go to http://buildbot.openlighting.org/buildslaves and you should see your slave connected. It's probably worth asking someone to kick off a build at this point so we can check your slave is working.&lt;br /&gt;
&lt;br /&gt;
Finally, if everything looks good, configure your slave to launch on startup by editing the crontab for the ola-build-slave user (crontab -e). Add the following line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@reboot /usr/local/bin/buildslave start /home/ola-build-slave/ola-slave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== NetBSD Instructions ==&lt;br /&gt;
&lt;br /&gt;
This was tested on NetBSD 6.&lt;br /&gt;
&lt;br /&gt;
=== Build Slave Installation ===&lt;br /&gt;
As root:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 pkgin install py27-buildbot-slave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Slave Configuration ===&lt;br /&gt;
&lt;br /&gt;
Setup a new user:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
su -&lt;br /&gt;
useradd -m ola-build-slave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Use password-based authentication? No&lt;br /&gt;
&lt;br /&gt;
Setup the slave:&lt;br /&gt;
&lt;br /&gt;
Switch to the slave user:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
su - ola-build-slave&lt;br /&gt;
cd ~&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Export the variables needed for git and configure on NetBSD (add these to the .shrc or equivalent for next time):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export CPPFLAGS=&amp;quot;-I/usr/pkg/include/&amp;quot;&lt;br /&gt;
export LDFLAGS=&amp;quot;-L/usr/pkg/lib/&amp;quot;&lt;br /&gt;
export GIT_SSL_NO_VERIFY=true&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setup the slave itself:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/usr/pkg/bin/buildslave create-slave ola-slave buildmaster.openlighting.org:9989 &amp;lt;slave user&amp;gt; &amp;lt;slave password&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edit &amp;lt;tt&amp;gt;ola-slave/info/admin&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;ola-slave/info/host&amp;lt;/tt&amp;gt; so your slave shows up correctly.&lt;br /&gt;
&lt;br /&gt;
Then start the slave:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/usr/pkg/bin/buildslave start ola-slave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can look at the logs by running&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 tail -f ola-slave/twistd.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At this point you can go to http://buildbot.openlighting.org/buildslaves and you should see your slave connected. It's probably worth asking someone to kick off a build at this point so we can check your slave is working.&lt;br /&gt;
&lt;br /&gt;
Finally, if everything looks good, configure your slave to launch on startup by editing the crontab for the ola-build-slave user (crontab -e). Add the following line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@reboot /usr/pkg/bin/buildslave start /home/ola-build-slave/ola-slave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== OpenBSD Instructions ==&lt;br /&gt;
&lt;br /&gt;
This was tested on OpenBSD 5.4.&lt;br /&gt;
&lt;br /&gt;
=== Build Slave Installation ===&lt;br /&gt;
As root:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pkg_add py-buildslave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Slave Configuration ===&lt;br /&gt;
&lt;br /&gt;
Setup a new user:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
su -&lt;br /&gt;
useradd -m ola-build-slave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setup the slave:&lt;br /&gt;
&lt;br /&gt;
Switch to the slave user:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
su - ola-build-slave&lt;br /&gt;
cd ~&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Export the variables needed for autoconf and configure on OpenBSD (add these to the .profile or equivalent for next time), the eg++/egcc lines are needed if the installed gcc is too old to pass configure, install the eg++ one and then use that line:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export AUTOCONF_VERSION=2.69&lt;br /&gt;
export AUTOMAKE_VERSION=1.13&lt;br /&gt;
export CPPFLAGS=&amp;quot;-I/usr/local/include/&amp;quot;&lt;br /&gt;
export LDFLAGS=&amp;quot;-L/usr/local/lib/&amp;quot;&lt;br /&gt;
export CXX=&amp;quot;eg++&amp;quot; CC=&amp;quot;egcc&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setup the slave itself:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/usr/local/bin/buildslave create-slave ola-slave buildmaster.openlighting.org:9989 &amp;lt;slave user&amp;gt; &amp;lt;slave password&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edit &amp;lt;tt&amp;gt;ola-slave/info/admin&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;ola-slave/info/host&amp;lt;/tt&amp;gt; so your slave shows up correctly.&lt;br /&gt;
&lt;br /&gt;
Then start the slave:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/usr/local/bin/buildslave start ola-slave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can look at the logs by running&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 tail -f ola-slave/twistd.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At this point you can go to http://buildbot.openlighting.org/buildslaves and you should see your slave connected. It's probably worth asking someone to kick off a build at this point so we can check your slave is working.&lt;br /&gt;
&lt;br /&gt;
Finally, if everything looks good, configure your slave to launch on startup by editing the crontab for the ola-build-slave user (crontab -e). Add the following line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@reboot /usr/local/bin/buildslave start /home/ola-build-slave/ola-slave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Other Platforms ==&lt;br /&gt;
&lt;br /&gt;
=== Build Slave Installation ===&lt;br /&gt;
&lt;br /&gt;
The easiest way to get started is by using easy_install. You need to have the Python headers available, so on Debian / Ubuntu run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install python-dev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then install buildbot-slave:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
easy_install buildbot-slave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Slave Configuration ===&lt;br /&gt;
&lt;br /&gt;
Setup a new user:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -s &lt;br /&gt;
adduser ola-build-slave  # use a temp password for now&lt;br /&gt;
vi /etc/shadow  # delete the password entry&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setup the slave:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
su ola-build-slave&lt;br /&gt;
cd ~&lt;br /&gt;
buildslave create-slave ola-slave buildmaster.openlighting.org:9989 &amp;lt;slave user&amp;gt; &amp;lt;slave password&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edit &amp;lt;tt&amp;gt;ola-slave/info/admin&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;ola-slave/info/host&amp;lt;/tt&amp;gt; so your slave shows up correctly.&lt;br /&gt;
&lt;br /&gt;
Then start the slave:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
buildslave start ola-slave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can look at the logs by running&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 tail -f ola-slave/twistd.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At this point you can go to http://buildbot.openlighting.org/buildslaves and you should see your slave connected. It's probably worth asking someone to kick off a build at this point so we can check your slave is working.&lt;br /&gt;
&lt;br /&gt;
Finally, if everything looks good, configure your slave to launch on startup by editing the crontab for the ola-build-slave user (crontab -e). Add the following line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@reboot buildbot start /home/ola-build-slave/ola-slave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Enabling the C++ Lint Checker ==&lt;br /&gt;
&lt;br /&gt;
The lint checker enforces C++ style. We only run this once per change but it's good to have multiple lint-enabled hosts in case one is down.&lt;br /&gt;
&lt;br /&gt;
Download the cpplint checker and put it in /usr/local/bin&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
wget http://google-styleguide.googlecode.com/svn/trunk/cpplint/cpplint.py&lt;br /&gt;
sudo cp cpplint.py /usr/local/bin&lt;br /&gt;
sudo chmod a+x /usr/local/bin/cpplint.py&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finally let Simon or Peter know, or raise an issue, asking them to enable C++ lint for your slave.&lt;br /&gt;
&lt;br /&gt;
== Enabling the Javascript Lint Checker ==&lt;br /&gt;
&lt;br /&gt;
The lint checker enforces Javascript style. We only run this once per change but it's good to have multiple lint-enabled hosts in case one is down.&lt;br /&gt;
&lt;br /&gt;
Either:&lt;br /&gt;
*Install the closure-linter deb package if it's present on your OS&lt;br /&gt;
*Install the gjslint checker by following the relevant instructions here (you man need to install python-setuptools to get easy_install on Debian/Ubuntu) https://developers.google.com/closure/utilities/docs/linter_howto&lt;br /&gt;
&lt;br /&gt;
Finally let Simon or Peter know, or raise an issue, asking them to enable Javascript lint for your slave.&lt;br /&gt;
&lt;br /&gt;
== Enabling the heap checker ==&lt;br /&gt;
&lt;br /&gt;
First we need libunwind:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install libunwind8-dev &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then download the latest gperftools from https://code.google.com/p/gperftools/downloads/list .&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
wget ....&lt;br /&gt;
tar -zxf gperftools-2.1.tar.gz&lt;br /&gt;
cd gperftools-2.1&lt;br /&gt;
./configure&lt;br /&gt;
make&lt;br /&gt;
sudo make install&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Finally let Simon or Peter know, or raise an issue, asking them to enable the heap checker for your slave.&lt;/div&gt;</summary>
		<author><name>Peternewman</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OLA_Device_Specific_Configuration&amp;diff=5895</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=5895"/>
				<updated>2018-11-18T00:35:18Z</updated>
		
		<summary type="html">&lt;p&gt;Peternewman: /* Linux */ Add a note about the GPIO group on later Pi builds&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Anyma uDMX==&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;
==Streaming ACN / E1.31==&lt;br /&gt;
&lt;br /&gt;
===All Platforms===&lt;br /&gt;
Some older networking gear only supports an old revision of E1.31 Called Revision 20. To use this older version you need to change a line in ola-e131.conf. Change this line&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
revision = 0.46&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to this line&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
revision = 0.2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Only do this if the older gear cannot accept the standardized version of E1.31.&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
If you are planning to receive large amounts of multicast traffic 20+, you will need to adjust the maximum amount of igmp memberships.&lt;br /&gt;
Use the following command:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo &amp;lt;number_of_memberships&amp;gt; | sudo tee /proc/sys/net/ipv4/igmp_max_memberships&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example this command sets the maximum number of igmp memberships to 256:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo 256 | sudo tee /proc/sys/net/ipv4/igmp_max_memberships&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Eurolite USB DMX512 PRO==&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
Sometime the cdc_acm kernel module claims the device. If this happens you'll see errors like &amp;quot;Cannot claim device&amp;quot; and/or &amp;quot;another process has device opened for exclusive access&amp;quot;. To avoid this you can remove the module (rmmod). A udev rule like what is used for the Anyma device should also work.&lt;br /&gt;
&lt;br /&gt;
You may also need the following [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;
SUBSYSTEMS==&amp;quot;usb&amp;quot;, ATTRS{idVendor}==&amp;quot;04d8&amp;quot;,ATTRS{idProduct}==&amp;quot;0xfa63&amp;quot;, MODE=&amp;quot;0660&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Mac===&lt;br /&gt;
&lt;br /&gt;
Install the [http://code.google.com/p/open-lighting/downloads/detail?name=euroliteusbshield.dmg&amp;amp;can=2&amp;amp;q=#makechanges KEXT].&lt;br /&gt;
&lt;br /&gt;
== General Purpose I/O ==&lt;br /&gt;
&lt;br /&gt;
This has only been tested on a Raspberry Pi device. You can find information about the GPIO features on a Pi at [http://elinux.org/RPi_Low-level_peripherals elinux.org]&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
You'll need to export the GPIO pins. For example, to use pin 23, as root run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ echo 23 &amp;gt; /sys/class/gpio/export&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You'll also need to ensure that the user olad runs as has permission to change the level of the Pins. Each of the following files should be writeable:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/sys/class/gpio/gpio23/direction&lt;br /&gt;
/sys/class/gpio/gpio23/value&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You could for example do this by running the following as root (assuming olad is in the plugdev group, which you can check with &amp;quot;groups olad&amp;quot;); on later Raspberry Pi builds, this may fail, instead just add the olad user to the gpio group.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chgrp plugdev /sys/class/gpio/gpio23/direction&lt;br /&gt;
chmod g+w /sys/class/gpio/gpio23/direction&lt;br /&gt;
chgrp plugdev /sys/class/gpio/gpio23/value&lt;br /&gt;
chmod g+w /sys/class/gpio/gpio23/value&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ja Rule ==&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
You need the following [http://www.reactivated.net/writing_udev_rules.html udev rule] like this in /etc/udev/rules.d/10-local.rules&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SUBSYSTEM==&amp;quot;usb|usb_device&amp;quot;, ACTION==&amp;quot;add&amp;quot;, ATTRS{idVendor}==&amp;quot;1209&amp;quot;, ATTRS{idProduct}==&amp;quot;aced&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot; MODE=&amp;quot;660&amp;quot;&lt;br /&gt;
SUBSYSTEM==&amp;quot;usb|usb_device&amp;quot;, ACTION==&amp;quot;add&amp;quot;, ATTRS{idVendor}==&amp;quot;1209&amp;quot;, ATTRS{idProduct}==&amp;quot;acee&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot; MODE=&amp;quot;660&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== OSC ==&lt;br /&gt;
&lt;br /&gt;
The message types are described in the  [http://opensoundcontrol.org/spec-1_0 OSC Spec] .&lt;br /&gt;
&lt;br /&gt;
=== Receiving DMX ===&lt;br /&gt;
&lt;br /&gt;
The OSC plugin accepts a number of message formats:&lt;br /&gt;
&lt;br /&gt;
{| border=1 cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
! Path !! OSC Message Type !! Data !! Comments &lt;br /&gt;
|-&lt;br /&gt;
|| /path || 'b' || Blob of length 1 to 512. || The most efficient way of sending DMX data over OSC.&lt;br /&gt;
|-&lt;br /&gt;
|| /path/N || 'i' || Slot value from 0 to 255 || Update a single slot. N is the slot number from 1 - 512. &lt;br /&gt;
|-&lt;br /&gt;
|| /path/N || 'f' || Slot value from 0.0 to 1.0 || Update a single slot. N is the slot number from 1 - 512. &lt;br /&gt;
|-&lt;br /&gt;
|| /path || 'ii' || Slot number from 0 to 511, slot value from 0 to 255 || Update a single slot.&lt;br /&gt;
|-&lt;br /&gt;
|| /path || 'if' || Slot number from 0 to 511, slot value from 0.0 to 1.0 || Update a single slot.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Sending DMX ===&lt;br /&gt;
&lt;br /&gt;
The following formats are available for sending data:&lt;br /&gt;
&lt;br /&gt;
{| border=1 cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
! Config Option !! Path !! OSC Message Type !! Data !! Comments &lt;br /&gt;
|-&lt;br /&gt;
|| blob || /path || 'b' || Blob of length 1 to 512. || The most efficient way of sending DMX data over OSC.&lt;br /&gt;
|-&lt;br /&gt;
|| float_array || /path || N * 'f' || Slot values from 0.0 to 1.0 ||  Not quite as efficient as the blob type.&lt;br /&gt;
|-&lt;br /&gt;
|| int_array || /path || N * 'i' || Slot values from 0 to 255 ||  Not quite as efficient as the blob type.&lt;br /&gt;
|-&lt;br /&gt;
|| individual_float || /path/N || 'f' || Slot value from 0.0 to 1.0 || N is the slot number from 1 - 512.  Results in a lot of messages being sent, avoid using this. &lt;br /&gt;
|-&lt;br /&gt;
|| individual_int || /path/N || 'i' || Slot value from 0 to 255 || N is the slot number from 1 - 512. Results in a lot of messages being sent, avoid using this. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Open DMX USB / FTDI RS485 ==&lt;br /&gt;
&lt;br /&gt;
There are two options, the 'Open DMX' plugin that requires the kernel module and the native FTDI driver.&lt;br /&gt;
&lt;br /&gt;
The Open DMX Plugin requires the dmx_usb kernel module, which means it's Linux only. The FTDI driver can be used on either Mac or Linux. See [https://www.openlighting.org/ola/get-help/ola-faq/#What_is_the_difference_between_the_different_USB_plugins here] for more info.&lt;br /&gt;
&lt;br /&gt;
If you're having issues with the device failing to transmit DMX, these links might help:&lt;br /&gt;
*[http://stevenbreuls.com/2014/04/dmx-rs485-wrong-board-fix/ http://stevenbreuls.com/2014/04/dmx-rs485-wrong-board-fix/]&lt;br /&gt;
*[http://falconchristmas.com/forum/index.php/topic,858.msg9877.html#msg9877 http://falconchristmas.com/forum/index.php/topic,858.msg9877.html#msg9877]&lt;br /&gt;
&lt;br /&gt;
=== Linux, Open DMX Kernel Module ===&lt;br /&gt;
&lt;br /&gt;
Make sure the opendmx plugin is enabled.&lt;br /&gt;
Make sure the dmx_usb kernel module is loaded. &lt;br /&gt;
&lt;br /&gt;
===Mac FTDI ===&lt;br /&gt;
&lt;br /&gt;
You must have libftdi-dev installed before you run ./configure.  Otherwise the FTDI DMX plugin won't show up in the list of OLA plugins. &lt;br /&gt;
&lt;br /&gt;
Enable the FTDI driver (ola-ftdidmx ) and disable the USB Serial and Open DMX drivers (ola-usbserial.conf &amp;amp;  ola-opendmx.conf) &lt;br /&gt;
&lt;br /&gt;
=== Linux, FTDI ===&lt;br /&gt;
&lt;br /&gt;
Same as Mac, but you also need to make sure that you add the following [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 for ftdi devices&lt;br /&gt;
SUBSYSTEM==&amp;quot;usb|usb_device&amp;quot;, ACTION==&amp;quot;add&amp;quot;, ATTRS{idVendor}==&amp;quot;0403&amp;quot;, ATTRS{idProduct}==&amp;quot;6001&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Scanlime Fadecandy==&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 Scanlime Fadecandy device&lt;br /&gt;
SUBSYSTEM==&amp;quot;usb|usb_device&amp;quot;, ACTION==&amp;quot;add&amp;quot;, ATTRS{idVendor}==&amp;quot;1d50&amp;quot;, ATTRS{idProduct}==&amp;quot;607a&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SPI ==&lt;br /&gt;
&lt;br /&gt;
This plugin is designed for the Raspberry Pi. It may work on other hardware, but that's up to you. For instructions on the hardware side of things see [[OLA LED Pixels]].&lt;br /&gt;
&lt;br /&gt;
Enable the spi-bcm2708 module, depending on the version of Raspbian you're running it will either be via Device Tree or by editing /etc/modprobe.d/raspi-blacklist.conf.&lt;br /&gt;
&lt;br /&gt;
For recent versions you can use raspi-config's Advanced Options then SPI, see here for more info:&lt;br /&gt;
https://www.raspberrypi.org/documentation/configuration/raspi-config.md&lt;br /&gt;
&lt;br /&gt;
Or alternatively by manually enabling the SPI Device Tree by uncommenting the dtparam=spi=on line in /boot/config.txt as explained here:&lt;br /&gt;
https://www.raspberrypi.org/documentation/configuration/device-tree.md&lt;br /&gt;
&lt;br /&gt;
For older machines, edit /etc/modprobe.d/raspi-blacklist.conf and comment out the &amp;quot;blacklist spi-bcm2708&amp;quot; line. The file should look something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# blacklist spi and i2c by default (many users don't need them)&lt;br /&gt;
&lt;br /&gt;
#blacklist spi-bcm2708&lt;br /&gt;
blacklist i2c-bcm2708&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In both cases, to allow non-root access, add the following [http://www.reactivated.net/writing_udev_rules.html udev rule] like this in /etc/udev/rules.d/99-spi.rules&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SUBSYSTEM==&amp;quot;spidev&amp;quot;, MODE=&amp;quot;0666&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;
==UART native DMX==&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
====Raspberry Pi====&lt;br /&gt;
&lt;br /&gt;
First stop anything else using the serial port; either use raspi-config (Advanced Options, Serial) or follow the instructions here:&lt;br /&gt;
&lt;br /&gt;
[http://elinux.org/RPi_Serial_Connection#Preventing_Linux_using_the_serial_port http://elinux.org/RPi_Serial_Connection#Preventing_Linux_using_the_serial_port]&lt;br /&gt;
&lt;br /&gt;
To make this work, you will also need to raise the Pi's UART clock, because the default one maxes out at 115kbaud. So you will need to add&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
init_uart_clock=16000000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to the /boot/config.txt file on the system. This won't affect any other user of the serial port provided you have a recent kernel.&lt;br /&gt;
&lt;br /&gt;
Another useful link is [http://fw.hardijzer.nl/?p=138 http://fw.hardijzer.nl/?p=138].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Raspberry Pi 3=====&lt;br /&gt;
For the Raspberry Pi 3 you need to disable Bluetooth and reclaim the PL011 UART from it.&lt;br /&gt;
&lt;br /&gt;
Add:&lt;br /&gt;
 dtoverlay=pi3-disable-bt&lt;br /&gt;
to your config.txt file in the /boot directory.&lt;br /&gt;
&lt;br /&gt;
According to this, you can also swap them, so Bluetooth uses the software UART:&lt;br /&gt;
[http://spellfoundry.com/2016/05/29/configuring-gpio-serial-port-raspbian-jessie-including-pi-3/ http://spellfoundry.com/2016/05/29/configuring-gpio-serial-port-raspbian-jessie-including-pi-3/]&lt;br /&gt;
&lt;br /&gt;
If you use this instead:&lt;br /&gt;
dtoverlay=pi3-miniuart-bt&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-usbserial.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;
==DMXter4 RDM and MiniDMXter 4==&lt;br /&gt;
Navigate to &amp;quot;RDM Controller&amp;quot; in the menu. Then press &amp;lt;LEFT&amp;gt; and &amp;lt;RIGHT&amp;gt; together, then also press &amp;lt;YES/Q&amp;gt;, then release &amp;lt;YES/Q&amp;gt;, finally release &amp;lt;LEFT&amp;gt; and &amp;lt;RIGHT&amp;gt;. It will then show USB DONGLE MODE and be discoverable in OLA.&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 for  [http://downloads.openlighting.org/Velleman%20kext.dmg OS X 10.9 and above] or  [http://code.google.com/p/open-lighting/downloads/detail?name=libdmxusbshield.dmg OS 10.8 and below]. 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;br /&gt;
&lt;br /&gt;
Some people have reported issues with the K8062 on Ubuntu 14.04.&lt;br /&gt;
Symptoms: When you plug in your K8062, Ubuntu responds with Kernel Panic.&lt;br /&gt;
Problem: comedi and vmk60xx kernel modules are loaded and crash the kernel.&lt;br /&gt;
Solution: WARNING! Attempt at your own risk.&lt;br /&gt;
# Blacklist comedi and vmk60xx in /etc/modprobe.d/blacklist.conf, see [https://wiki.debian.org/KernelModuleBlacklisting https://wiki.debian.org/KernelModuleBlacklisting]&lt;br /&gt;
# Reboot and then run lsusb in the terminal. (Make sure K8062 is connected.)&lt;br /&gt;
# After a short hang, the K8062 should come up as &amp;quot;Velleman Components, Inc.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==KarateLight, KarateDMX==&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/81-karate.rules&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# udev rules file for the karate-device&lt;br /&gt;
KERNEL==&amp;quot;ttyACM?&amp;quot;, ATTRS{product}==&amp;quot;DMX2USB simple&amp;quot;, SYMLINK+=&amp;quot;kldmx0&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then make sure the user olad runs as is a member of 'dialout' which is the default group owning ttyACM?.&lt;/div&gt;</summary>
		<author><name>Peternewman</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OLA_Raspberry_Pi&amp;diff=5894</id>
		<title>OLA Raspberry Pi</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=OLA_Raspberry_Pi&amp;diff=5894"/>
				<updated>2018-06-01T02:27:56Z</updated>
		
		<summary type="html">&lt;p&gt;Peternewman: Add migrated template&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{PageMigrated|url=https://www.openlighting.org/ola/tutorials/ola-on-raspberry-pi/}}&lt;br /&gt;
[[Image:Raspi_Colour_R.png|right]]&lt;br /&gt;
&lt;br /&gt;
This tutorial describes how to get [[OLA]] running on the [http://www.raspberrypi.org/ Raspberry Pi]. The procedure described here is designed to get OLA up and running as fast as possible.  If you don't trust the images below, or want to build everything from scratch, you can install an image from the [http://www.raspberrypi.org/downloads Raspberry Pi Site] and use the generic instructions for [[Download &amp;amp; Install OLA|Installing OLA]] on Linux.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
There is plenty of information at the [http://elinux.org/RaspberryPiBoard Raspberry Pi Wiki]. The [http://www.raspberrypi.org/phpBB3/ Raspberry Pi Forum] is a good place to ask for help on Raspberry Pi specific issues.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
= Getting Started=&lt;br /&gt;
&lt;br /&gt;
You'll need the following:&lt;br /&gt;
* A Raspberry Pi  board. See the [http://elinux.org/Buying_RPi Buying Guide] for how to purchase one.&lt;br /&gt;
* An SD card, greater or equal to 4GB. Check the [http://elinux.org/RPi_Verified_Peripherals#SD_cards SD Card Compatibility List] but don't worry too much if your card isn't listed there.&lt;br /&gt;
* An SD card reader. Make sure it supports the SDHC (high capacity) cards. &lt;br /&gt;
* A microUSB cable to provide power&lt;br /&gt;
* A CAT5 network cable.&lt;br /&gt;
* A Composite or HDMI monitor / TV to debug if things go wrong.&lt;br /&gt;
* A computer with a SSH Client and (optionally) Web Browser. You can use the Pi locally with a USB keyboard, but many people find it easier to access it from another machine.&lt;br /&gt;
* A powered USB Hub, if you plan on using a USB DMX/RDM device. Many devices draw more current than the Raspberry Pi can support. See the [http://groups.google.com/forum/?fromgroups=#!searchin/open-lighting/usb$20hub/open-lighting/mJpgweztVdE/pXm5SOihjmAJ discussion] on the Open Lighting Group for more details.&lt;br /&gt;
&lt;br /&gt;
= Select your Image =&lt;br /&gt;
&lt;br /&gt;
At this point you need to decide what image you want to use. The ''GIT Repo Image'' allows you to track the latest changes, but requires you to build the software yourself, which takes time. The ''Binary Package Image'' uses the pre-built binary packages for each release. The images are can be found at http://dl.openlighting.org/.&lt;br /&gt;
&lt;br /&gt;
We recommend the ''Binary Package Image'' if you're starting out.&lt;br /&gt;
&lt;br /&gt;
New images are released every month or two, so remember to update to take advantage of new features and bug fixes.&lt;br /&gt;
&lt;br /&gt;
==GIT Repo Image==&lt;br /&gt;
&lt;br /&gt;
This tracks the [https://github.com/nomis52/ola Git Repo], which means you can always use the very latest version of the code. The downside of using this option is that you have the build the code yourself (which takes time) and configuration is left up to you. It's more flexible that the Binary Package version, but does require some extra work.&lt;br /&gt;
&lt;br /&gt;
Download the latest ola-git-NNNNNNNN.zip image.&lt;br /&gt;
&lt;br /&gt;
== Binary Package Image==&lt;br /&gt;
&lt;br /&gt;
[http://www.raspbian.org/ Raspbian] is an armhf  port of Debian specifically built for the Raspberry Pi. It offers slightly better performance than the stock Debian arm port.&lt;br /&gt;
  &lt;br /&gt;
Use this option if you prefer a more stable system. The pre-compiled packages are usually updated once a month and you don't need to spend time building OLA from source.&lt;br /&gt;
&lt;br /&gt;
Download the latest raspbian-ola-X.Y.Z.zip image.&lt;br /&gt;
&lt;br /&gt;
= Copying the Image =&lt;br /&gt;
&lt;br /&gt;
Once you have selected an image, unzip it, and then you need to copy it to your SD card. The [http://elinux.org/RPi_Easy_SD_Card_Setup Raspberry Pi Wiki] page has detailed instructions for each platform.&lt;br /&gt;
&lt;br /&gt;
This can take a while if you have a slow SD Card (see [http://en.wikipedia.org/wiki/Secure_Digital#Speed_Class_Rating SDHC Speeds]). On my Linux machine with a Class 2 card it took 14 minutes to write the 3.9G image, a Class 4 card took 11 minutes.  On a Macbook Pro, using the onboard SD-Card slot it took 153 seconds to write the image using dd to a Class 4 card.  Your speeds are likely to vary between machines.&lt;br /&gt;
&lt;br /&gt;
= Starting Up =&lt;br /&gt;
&lt;br /&gt;
Insert the card into the Raspberry Pi, make sure it's connected to a network which has a DHCP server running, and apply power. If you have a monitor attached you should see it booting. You'll then need to determine the IP address of your Pi. If you have a screen attached it should be shown just before the login prompt. Otherwise you can check your DHCP server logs and see which address was assigned. This example assumes an IP address of 192.168.1.200.&lt;br /&gt;
&lt;br /&gt;
== Login using SSH ==&lt;br /&gt;
&lt;br /&gt;
From your other machine, start your SSH client and SSH to your Pi. On Linux or Mac you can use the Terminal application and type:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh pi@192.168.1.200&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The password is 'openlighting' (no quotes).&lt;br /&gt;
&lt;br /&gt;
If you're on Windows you can download [http://www.chiark.greenend.org.uk/~sgtatham/putty/ PuTTY] and use that.&lt;br /&gt;
&lt;br /&gt;
You should see the login message and get a shell prompt.  If that doesn't work, you may need to restart (pull the power and plug it in again). Sometimes the Pi gets into a weird state on the first boot.&lt;br /&gt;
&lt;br /&gt;
== Security ==&lt;br /&gt;
&lt;br /&gt;
By default, the image comes with a SSH Key installed for Simon to access the system *only* if you configure your router and tell Simon what the address is. If you trust me (and your probably do since you're running my code) you can leave this on. Otherwise you can delete my key by running:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rm .ssh/authorized_keys&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next change the password:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
passwd&lt;br /&gt;
Changing password for ola.&lt;br /&gt;
(current) UNIX password: &lt;br /&gt;
Enter new UNIX password: &lt;br /&gt;
Retype new UNIX password: &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Enable Turbo Mode (Optional) ==&lt;br /&gt;
&lt;br /&gt;
The Raspberry Pi supports overclocking, which can increase the performance of your system. You can configured this by running &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo raspi-config&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and then selecting the ''overclock'' option. I (Simon) normally run with the Turbo option and haven't experienced any problems.&lt;br /&gt;
&lt;br /&gt;
== Expand the Root Partition (Optional) ==&lt;br /&gt;
&lt;br /&gt;
If your SD card is larger than 4GB you can expand the root partition to use all of the available space.  Again use&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo raspi-config&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and then choose the ''expand_rootfs'' option.&lt;br /&gt;
&lt;br /&gt;
== Installing (git image only) ==&lt;br /&gt;
&lt;br /&gt;
The git image is a pre-built clone of the git repo. The 'make install' step hasn't been run, so before you can use OLA you'll need to run the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd ~/open-lighting&lt;br /&gt;
sudo make install&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then you can launch olad with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
olad -l 3 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Updating =&lt;br /&gt;
&lt;br /&gt;
It's best to always use the latest version of OLA. Even immediately after downloding an image there may be updates to apply so we recommend you do this before you start using the Pi. To update your install follow one of the methods below, depending on what image you used.&lt;br /&gt;
&lt;br /&gt;
== Git Repo ==&lt;br /&gt;
&lt;br /&gt;
Once you're logged in, run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd open-lighting&lt;br /&gt;
git pull&lt;br /&gt;
autoreconf&lt;br /&gt;
./configure --enable-rdm-tests&lt;br /&gt;
make&lt;br /&gt;
sudo make install&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The make step can take a few hours.&lt;br /&gt;
&lt;br /&gt;
== Binary Package Image ==&lt;br /&gt;
&lt;br /&gt;
Run this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get upgrade&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Connecting to OLA =&lt;br /&gt;
&lt;br /&gt;
At this point everything should be running. You can access the OLA web UI by opening a web browser and typing:&lt;br /&gt;
&lt;br /&gt;
http://192.168.1.200:9090&lt;br /&gt;
&lt;br /&gt;
Of course you should replace 192.168.1.200 with the IP Address of your device.&lt;br /&gt;
&lt;br /&gt;
= Config and Log files =&lt;br /&gt;
&lt;br /&gt;
If you're using the pre-built image or Debian packages, the OLA config files are in &amp;lt;tt&amp;gt;/var/lib/ola/conf&amp;lt;/tt&amp;gt;. The logs are written to &amp;lt;tt&amp;gt;/var/log/syslog&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Related Information =&lt;br /&gt;
&lt;br /&gt;
If you're interested in how these images differ from the image released by the Raspberry Pi Foundation, see [[Building a Custom Raspbian Image]]&lt;/div&gt;</summary>
		<author><name>Peternewman</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OLA_on_Windows_with_VMWare&amp;diff=5893</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=5893"/>
				<updated>2018-06-01T02:27:20Z</updated>
		
		<summary type="html">&lt;p&gt;Peternewman: Add migrated template&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{PageMigrated|url=https://www.openlighting.org/ola/tutorials/ola-on-windows-via-vmware/}}&lt;br /&gt;
This explains how to run [[OLA]] on a Windows system using VMWare. This uses virtualization so it's not recommended for real time lighting control. However it's useful if you want to experiment with OLA and perform tasks that aren't time sensitive like [[OLA RDM Responder Testing| Running RDM Responder Tests]] &lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid red; background-color: #ffcccc; padding: 2px&amp;quot;&amp;gt;Warning: There have been reports of the VMWare Player USB Stack dropping frames, which causing problems with the RDM Responder tests. The recommended way of running the tests is to use the [[OLA_Raspberry_Pi | Raspberry Pi]].&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
&lt;br /&gt;
* A Windows PC with a working internet connection.&lt;br /&gt;
* At least 20G of free hard disk space. Chance are you won't need that much.&lt;br /&gt;
&lt;br /&gt;
== Setting up the Linux System ==&lt;br /&gt;
&lt;br /&gt;
This tutorial 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 works 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 &amp;amp; Install 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 as we'll use them later. The download will continue along with the install. This stage can take quite a while.&lt;br /&gt;
&lt;br /&gt;
Once complete, you'll be presented with a graphical login screen showing the username that you setup before. Login to the system and you'll be shown the desktop.&lt;br /&gt;
&lt;br /&gt;
Next enter Unity mode. This seamlessly merges the Linux windows with the Windows desktop. You can also copy and paste between Windows and Linux at this point.&lt;br /&gt;
&lt;br /&gt;
[[Image:Enter_unity.JPG| frameless]]&lt;br /&gt;
&lt;br /&gt;
Finally open the Linux terminal application as shown below. You'll need to move your mouse to the Start button for the Unity menu to appear.&lt;br /&gt;
&lt;br /&gt;
[[Image:Open_terminal.JPG| frameless]]&lt;br /&gt;
&lt;br /&gt;
Now we'll confirm that the network is working. Type:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ping www.google.com&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should see responses like what's below. Hit Control-C to exit the ping program.&lt;br /&gt;
&lt;br /&gt;
[[Image:Linux_terminal.JPG| frameless]]&lt;br /&gt;
&lt;br /&gt;
At this point we have a working Linux system. Time to install [[OLA]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Installing OLA ==&lt;br /&gt;
&lt;br /&gt;
These instructions closely follow [[OLA on Linux]]. &lt;br /&gt;
&lt;br /&gt;
=== Install the dependencies ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install libcppunit-dev libcppunit-1.12-1 uuid-dev pkg-config libncurses5-dev git libtool autoconf automake  g++ libmicrohttpd-dev libmicrohttpd5 protobuf-compiler libprotobuf-lite6 python-protobuf libprotobuf-dev libprotoc-dev zlib1g-dev bison flex make&lt;br /&gt;
&amp;lt;/pre&amp;gt;&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;
Then run ldconfig:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Checkout OLA ===&lt;br /&gt;
&lt;br /&gt;
Run the following to clone the OLA code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  git clone https://github.com/OpenLightingProject/ola.git ola&lt;br /&gt;
  cd ola&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configure, build and test OLA ===&lt;br /&gt;
&lt;br /&gt;
Type these &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  autoreconf -i&lt;br /&gt;
  ./configure --enable-rdm-tests&lt;br /&gt;
  make&lt;br /&gt;
  make check&lt;br /&gt;
  sudo make install&lt;br /&gt;
  sudo ldconfig&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want to do RDM responder testing you '''must''' add --enable-rdm-tests&lt;br /&gt;
&lt;br /&gt;
== Using OLA ==&lt;br /&gt;
&lt;br /&gt;
At this stage you can start OLA by running &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  olad -l 3 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The -l flag controls the logging level from 0 (log nothing) to 4 (debug logs). 3 is log level info, which is usually enough for most people.&lt;br /&gt;
&lt;br /&gt;
Now find the IP address of your Linux instance:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  /sbin/ifconfig eth0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Look for a line that starts with ''inet addr:''. &lt;br /&gt;
&lt;br /&gt;
[[Image:Linux_ip_address.JPG|frameless]]&lt;br /&gt;
&lt;br /&gt;
Open up a browser on the Windows PC and type in the IP address followed by :9090. This will bring up the OLA web console.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Windows_ola_webui.JPG|frameless]]&lt;br /&gt;
&lt;br /&gt;
== USB Devices  ==&lt;br /&gt;
&lt;br /&gt;
When using OLA with VMWare you need to make sure that any DMX USB devices are correctly bound to the guest OS (Linux).&lt;br /&gt;
&lt;br /&gt;
http://www.vmware.com/support/ws45/doc/devices_usb_ws.html describes how to set this up.&lt;br /&gt;
&lt;br /&gt;
== Updating OLA  ==&lt;br /&gt;
&lt;br /&gt;
From time to time you may want to update the code.  From within the existing ola directory run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  git pull&lt;br /&gt;
  autoreconf -i&lt;br /&gt;
  ./configure --enable-python-libs&lt;br /&gt;
  make&lt;br /&gt;
  make check&lt;br /&gt;
  sudo make install&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Not all of these steps are required each time, but unless you have a good idea of what changed it's easier just to run everything.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
*[[Building OLA for Windows]] - In the future this may provide a workable alternative&lt;br /&gt;
&lt;br /&gt;
[[Category:Tutorials]]&lt;/div&gt;</summary>
		<author><name>Peternewman</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OLA_on_Beaglebone&amp;diff=5892</id>
		<title>OLA on Beaglebone</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=OLA_on_Beaglebone&amp;diff=5892"/>
				<updated>2018-06-01T02:26:52Z</updated>
		
		<summary type="html">&lt;p&gt;Peternewman: Add migrated template&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{PageMigrated|url=https://www.openlighting.org/ola/tutorials/ola-on-beaglebone/}}&lt;br /&gt;
This describes how to get [[OLA]] working on a Beaglebone from strach.   At the time of writing, an &amp;quot;image&amp;quot; does not exist for the beagle bone.  This process is based on using the debian os. There certainly are other ways of bulding this, but this is a method that works for me.&lt;br /&gt;
&lt;br /&gt;
=Preparing your debian based Beaglebone=&lt;br /&gt;
&lt;br /&gt;
Get Robert C nelsons Netinstall scripts,  &lt;br /&gt;
&lt;br /&gt;
 https://github.com/RobertCNelson/netinstall&lt;br /&gt;
&lt;br /&gt;
cd /netinstall&lt;br /&gt;
./mk_mmc.sh --uboot bone --mmc /dev/sdX   ( sdX ) is the card&lt;br /&gt;
&lt;br /&gt;
this will build the boot loader onto the card.  This is also based on debian Squeeze.&lt;br /&gt;
&lt;br /&gt;
Once its done, put the card in your beagle, and start up.  You'll need to connect the Beaglebone via USB, and talk to it via Screen.  Follow the instructions for the debian install..  Select SSH server and System Ultiities for your build.      It can take a while to finish a build, depending on how fast your internet connections are.&lt;br /&gt;
&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;
&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-compiler libprotobuf-lite6 python-protobuf libprotobuf-dev libprotoc-dev zlib1g-dev bison flex make libftdi-dev  libftdi1 libusb-1.0-0-dev liblo-dev git&lt;br /&gt;
&lt;br /&gt;
Note, these dependencies are slightly different from the Debian build&lt;br /&gt;
&lt;br /&gt;
= Install OLA =&lt;br /&gt;
&lt;br /&gt;
Check out the git repo with the following command:&lt;br /&gt;
&lt;br /&gt;
  cd /usr/local/src   ( not entirely nessary, but you will be able to find it later )&lt;br /&gt;
  git clone https://github.com/OpenLightingProject/ola.git ola&lt;br /&gt;
  cd 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;
 sudo ldconfig&lt;/div&gt;</summary>
		<author><name>Peternewman</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OLAGuruPlug&amp;diff=5891</id>
		<title>OLAGuruPlug</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=OLAGuruPlug&amp;diff=5891"/>
				<updated>2018-06-01T02:21:34Z</updated>
		
		<summary type="html">&lt;p&gt;Peternewman: Add migrated template&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{PageMigrated|url=https://www.openlighting.org/ola/tutorials/ola-on-guruplug/}}&lt;br /&gt;
[[Image:Guru-plug-setup.png|center]]&lt;br /&gt;
&lt;br /&gt;
 __TOC__ &lt;br /&gt;
&lt;br /&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;
Features of this system:&lt;br /&gt;
* Wifi access point with internet connectivity&lt;br /&gt;
* RDM control either over DMX or [[ArtNet]]&lt;br /&gt;
* Protocol conversion to/from: E1.31, DMX512, ArtNet, ShowNet, Pathport, SandNet, ESP Net &lt;br /&gt;
&lt;br /&gt;
Costs involved:&lt;br /&gt;
* GuruPlug, $99 +shipping&lt;br /&gt;
* Ethernet Switch, from $30&lt;br /&gt;
* USB DMX/RDM Interface, chose from [[Open_Lighting_Architecture#Supported Devices|Support Devices]], usually around $100-$300&lt;br /&gt;
* Wireless Cell Card, shop around. Make sure it works with Linux.&lt;br /&gt;
&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, mysql, lighthttpd etc.) that aren't required. Removing these 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 update&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;br /&gt;
&lt;br /&gt;
Now connect the the GuruPlug on port 9090 with your browser to configure it.&lt;br /&gt;
&lt;br /&gt;
== Questions ==&lt;br /&gt;
&lt;br /&gt;
Ask on the mailing list http://groups.google.com/group/open-lighting&lt;/div&gt;</summary>
		<author><name>Peternewman</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OLA_LED_Pixels&amp;diff=5890</id>
		<title>OLA LED Pixels</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=OLA_LED_Pixels&amp;diff=5890"/>
				<updated>2018-06-01T02:20:59Z</updated>
		
		<summary type="html">&lt;p&gt;Peternewman: Add migrated template&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{PageMigrated|url=https://www.openlighting.org/ola/tutorials/ola-led-pixels/}}&lt;br /&gt;
[[Image:Lpd8806.jpeg|300px|right]]&lt;br /&gt;
&lt;br /&gt;
Since March 2013, [[OLA]] contains an [http://en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus SPI] plugin, which allows you to drive strings of LEDs pixels provided your platform has an SPI interface. Using embedded Linux platforms like the [[OLA_Raspberry_Pi | Raspberry Pi]], this allows one to build  Pixel strings controllable via any of the [[OLA#Supported_Protocols|supported protocols]] ([[ArtNet]],  [[E1.31]],  [[OSC]] &amp;amp; more)  for less than $100.&lt;br /&gt;
&lt;br /&gt;
Alternatively if you don't want network control, you can send [[DMX512]] to the LEDs using the Python, C++ or Java client library running on the host itself.&lt;br /&gt;
&lt;br /&gt;
This page is focused on the Raspberry Pi, but may be applicable to other hardware such as the BeagleBone.  If you're using a Raspberry Pi you can save yourself a lot of time by using the pre-built images, see [[OLA_Raspberry_Pi| OLA on the Raspberry Pi]] for details.&lt;br /&gt;
&lt;br /&gt;
== Host Hardware  ==&lt;br /&gt;
&lt;br /&gt;
The Raspberry Pi contains three SPI interfaces, but only one of these is wired to the 26-pin connector. The interface comes with 3 chip-enable (CE) lines but again only two are connected (pins 24 &amp;amp; 26). With the default mode, pin 24 is pulled low when the /dev/spi0.0 device is used and pin 26 is pulled low when /dev/spi0.1 is used.&lt;br /&gt;
&lt;br /&gt;
The Pi uses 3.3V logic. You can usually get away with connecting the pins directly to the pixel hardware which uses 5V for testing, but for reliable operation it's best to use a driver circuit to convert the voltage levels from 3.3v to 5v especially if you have a cable run between the Pi and the Pixel string. There is a [https://github.com/hackerspaceshop/RaspberryPI_WS2801_Bridge schematic] available or you can buy a [http://www.hackerspaceshop.com/raspberrypi-ws2801.html kit].&lt;br /&gt;
&lt;br /&gt;
Here are some timings stats collected from the Pi:&lt;br /&gt;
&lt;br /&gt;
{| border=1 cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
! SPI Speed !! Number of bytes || time taken for write()  !! Time on the wire &lt;br /&gt;
|-&lt;br /&gt;
|| 1MHz || 75 ||  13.5ms || 11.1ms&lt;br /&gt;
|-&lt;br /&gt;
|| 2MHz || 75 ||  8.1ms || 5.6ms&lt;br /&gt;
|-&lt;br /&gt;
|| 4MHz || 75 ||  4.7 ms || 3.0 ms&lt;br /&gt;
|-&lt;br /&gt;
|| 8MHz || 75 ||  3.7ms || 1.4ms&lt;br /&gt;
|-&lt;br /&gt;
|| 12MHz || 75 ||  3.2ms || 0.75 ms&lt;br /&gt;
|-&lt;br /&gt;
|| 1MHz || 516 ||  78.5 ms || 76.15  ms&lt;br /&gt;
|-&lt;br /&gt;
|| 2MHz || 516 ||  40.2 ms || 38.2ms&lt;br /&gt;
|-&lt;br /&gt;
|| 4MHz || 516 ||  21.5 ms || 19.1 ms&lt;br /&gt;
|-&lt;br /&gt;
|| 8MHz || 516 ||  12.2ms || 9.6ms&lt;br /&gt;
|-&lt;br /&gt;
|| 12MHz || 516 ||  7.4ms || 4.83 ms&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
It also takes somewhere between 3.6 and 4.6 ms to toggle a GPIO pin using the /sys/class/gpio interface. The importance of these numbers will be clear in a minute. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Beyond the Pi, any SPI hardware supported by the Linux kernel should work modulo the timing restrictions. By default OLA looks for devices that match the /dev/spi* .&lt;br /&gt;
&lt;br /&gt;
== Pixel Hardware ==&lt;br /&gt;
&lt;br /&gt;
On the pixel side the following is supported:&lt;br /&gt;
* LPD8806, e.g. https://www.adafruit.com/products/306.  since 0.8.27&lt;br /&gt;
* WS2801, e.g. https://www.adafruit.com/products/738, since 0.8.28&lt;br /&gt;
&lt;br /&gt;
Each of these uses 3 DMX slots per pixel, so you can drive up to 170 pixels from a universe of DMX data.&lt;br /&gt;
&lt;br /&gt;
== Hardware Setup ==&lt;br /&gt;
&lt;br /&gt;
The simplest setup is to connect SCLK (pin 23) to the pixel string's clock line and MOSI (pin 19) to the pixel string's DATA line. You'll need a separate power supply for the pixel string, check the pixel specifications but 1A per m is a good rule of thumb. Don't forget to connect the ground on the power supply to a ground pin (e.g. 25) on the Pi.Do not connect the 5V rail of the pixel power supply to the Pi.&lt;br /&gt;
&lt;br /&gt;
=== Multiplexer ===&lt;br /&gt;
&lt;br /&gt;
If you want to drive more than one string in parallel you'll need to use a de-multiplexer. For a two-line multiplexer one can use the CE0 and CE1 lines to select the output string. To run more than 2 strings you'll need to use some of the GPIO pins as chip-enables. However these pins are slow (~4ms) which limits the update rate.&lt;br /&gt;
&lt;br /&gt;
There is a 8 way demultiplexer schematic [https://docs.google.com/file/d/0B7Z8oqKsoX5HWE1qV2hCeDNNOU0/edit?usp=sharing here].&lt;br /&gt;
&lt;br /&gt;
== OLA SPI Plugin ==&lt;br /&gt;
&lt;br /&gt;
The [[OLA]] SPI plugin is pretty flexible, the primary limitation is how long it takes to write the data out the SPI interface, and this limits the overall refresh rate. Each SPI interface (/dev/spi*) is represented as an OLA Device. Devices can have multiple 'ports' since each port can consume at most one universe of DMX512 data (170 RGB pixels). Each port can be configured (via RDM) with a start address and personality (pixel type). This allows a combination of various strings lengths &amp;amp; pixel hardware types. &lt;br /&gt;
&lt;br /&gt;
Each SPI device uses a backend to write the SPI data. Right now there are two types backends available: a software backend which merges the SPI data from one or more ports, and a hardware backend which uses the GPIO pins to control a hardware demultiplexer.&lt;br /&gt;
&lt;br /&gt;
=== Timing ===&lt;br /&gt;
&lt;br /&gt;
It all comes down to timing. Consider the following example:&lt;br /&gt;
&lt;br /&gt;
* 170 LPD8806  pixels per string (results in 516 bytes written)&lt;br /&gt;
* Two strings using the built in CE lines to drive a hardware demultipliexer. &lt;br /&gt;
* SPI speed of 2Mhz&lt;br /&gt;
&lt;br /&gt;
Using timing table above, we can see this will take 40.2 ms x 2 = 80ms to update all pixels. That means you'll only be able to do 12 updates per second. Most DMX systems run at 40 updates per second so we'll end up dropping updates. &lt;br /&gt;
&lt;br /&gt;
If we tried to use GPIO pins rather than the CE ones it gets worse. Consider a second example:&lt;br /&gt;
&lt;br /&gt;
* 32 WS2801 pixels per string (results in 75 bytes written)&lt;br /&gt;
* Four strings using two GPIO lines to drive a hardware demultipliexer. &lt;br /&gt;
* SPI speed of 2Mhz&lt;br /&gt;
&lt;br /&gt;
Now each write requires setting GPIO pins. Worse case both pins will need to change which adds 8ms. The write itself takes 8.1 ms, so that's 16.1 ms per string or 64.4 ms to update all strings. That gives you an update rate of 15 updates per second. Still not close to DMX's 40 updates per second.&lt;br /&gt;
&lt;br /&gt;
== Software Setup ==&lt;br /&gt;
You'll need a suitable [[OLA_Device_Specific_Configuration#SPI|udev config]], so that OLA has permission to talk to your SPI port. There is also some Raspberry Pi specific config (enabling a kernel module) on the same page.&lt;br /&gt;
&lt;br /&gt;
If you're using the GPIO pins to drive an hardware demultiplexer, you'll need to run the following as root prior to starting olad.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
for pin in 17 21; do&lt;br /&gt;
  echo $pin &amp;gt; /sys/class/gpio/export;&lt;br /&gt;
  chmod a+w /sys/class/gpio/gpio${pin}/value;&lt;br /&gt;
  chmod a+w /sys/class/gpio/gpio${pin}/direction;&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once you have OLA running it's a matter of patching an SPI Output port to a universe and then patching the desired input port. This can be done from the OLA web UI or by using ola_patch&lt;br /&gt;
.&lt;br /&gt;
[[Image:Ola-spi-artnet.png| thumb|center |200px|Example of an ArtNet controlled LED String]]&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
The type of LED drivers, operating mode and DMX Start Address are configurable via [[RDM]]. Click on the RDM tab and you'll see the options.&lt;br /&gt;
&lt;br /&gt;
[[Image:Ola-spi-rdm.png| thumb|center |200px|Using RDM to set the hardware type and DMX start address]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The number of LEDs and SPI speed is set using the ola-spi.conf file.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
base_uid = 7a70:00000100&lt;br /&gt;
device_prefix = spidev&lt;br /&gt;
enabled = true&lt;br /&gt;
spidev0.0-dmx-address = 1&lt;br /&gt;
spidev0.0-personality = 1&lt;br /&gt;
spidev0.0-pixel-count = 25&lt;br /&gt;
spidev0.0-spi-speed = 100000&lt;br /&gt;
spidev0.1-dmx-address = 1&lt;br /&gt;
spidev0.1-personality = 2&lt;br /&gt;
spidev0.1-pixel-count = 25&lt;br /&gt;
spidev0.1-spi-speed = 1000000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Example Configs ==&lt;br /&gt;
&lt;br /&gt;
=== Single Pixel String ===&lt;br /&gt;
&lt;br /&gt;
For a simple single-string output we can use the software backend and ignore the CE lines. This config is for 25 WS2801 pixels running at 1Mhz on /dev/spi0.0.  From the timing information above this should support about 75 updates / second.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
base_uid = 7a70:00000100                                                                                                                                    &lt;br /&gt;
device_prefix = spidev&lt;br /&gt;
enabled = true&lt;br /&gt;
spidev0.0-0-dmx-address = 1&lt;br /&gt;
spidev0.0-0-pixel-count = 25&lt;br /&gt;
spidev0.0-0-personality = 1&lt;br /&gt;
spidev0.0-backend = software&lt;br /&gt;
spidev0.0-ports = 1&lt;br /&gt;
spidev0.0-spi-speed = 1000000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Two Pixel Strings, using the CE lines ===&lt;br /&gt;
&lt;br /&gt;
This example is for 25 WS2801 pixels and 32 LPD8806 pixels. Both strings run at 2Mhz and are connected to the spi bus, and we're using the CE chips to de-multiplex.  We want to CE lines to be active-high.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
base_uid = 7a70:00000100&lt;br /&gt;
device_prefix = spidev&lt;br /&gt;
enabled = true&lt;br /&gt;
spidev0.0-0-dmx-address = 1&lt;br /&gt;
spidev0.0-0-personality = 1&lt;br /&gt;
spidev0.0-0-pixel-count = 25&lt;br /&gt;
spidev0.0-backend = software&lt;br /&gt;
spidev0.0-ports = 1&lt;br /&gt;
spidev0.0-spi-ce-high = true&lt;br /&gt;
spidev0.0-spi-speed = 200000&lt;br /&gt;
spidev0.1-0-dmx-address = 1&lt;br /&gt;
spidev0.1-0-personality = 1&lt;br /&gt;
spidev0.1-0-pixel-count = 25&lt;br /&gt;
spidev0.1-backend = software&lt;br /&gt;
spidev0.1-ports = 1&lt;br /&gt;
spidev0.1-spi-ce-high = true&lt;br /&gt;
spidev0.1-spi-speed = 2000000  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Two Pixel Strings, using a single output ===&lt;br /&gt;
&lt;br /&gt;
This example is a string of 300 WS2801 pixels. Since this is more than one universe of data, we need to use multiple ports. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
base_uid = 7a70:00000100&lt;br /&gt;
device_prefix = spidev&lt;br /&gt;
enabled = true&lt;br /&gt;
spidev0.0-0-dmx-address = 1&lt;br /&gt;
spidev0.0-0-personality = 1&lt;br /&gt;
spidev0.0-0-pixel-count = 150&lt;br /&gt;
spidev0.0-1-dmx-address = 1&lt;br /&gt;
spidev0.0-1-personality = 1&lt;br /&gt;
spidev0.0-1-pixel-count = 150&lt;br /&gt;
spidev0.0-backend = software&lt;br /&gt;
spidev0.0-ports = 2&lt;br /&gt;
spidev0.0-spi-speed = 1000000&lt;br /&gt;
spidev0.0-sync-port = -2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
SPI data is written when data arrives on the second port (sync-port = -2). See the plugin description for more info.&lt;br /&gt;
&lt;br /&gt;
== Exported Variables ==&lt;br /&gt;
&lt;br /&gt;
The SPI plugin exports a number of useful variables. These can be found at http://&amp;lt;ip&amp;gt;:9090/debug. Each is indexed by the device name e.g. /dev/spi0.0 . &lt;br /&gt;
&lt;br /&gt;
;spi-writes&lt;br /&gt;
: Number of writes to each SPI device&lt;br /&gt;
; spi-write-errors&lt;br /&gt;
: Number of writes that resulted in an error&lt;br /&gt;
; spi-drops&lt;br /&gt;
: Number of DMX updates that were skipped. The happens if DMX data is arriving faster than it can be written to the SPI bus.&lt;br /&gt;
&lt;br /&gt;
== Related Links ==&lt;br /&gt;
&lt;br /&gt;
http://www.solderlab.de/index.php/software/glediator (Pixel Control Software that outputs ArtNet)&lt;/div&gt;</summary>
		<author><name>Peternewman</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OLA_Patch_persistency&amp;diff=5889</id>
		<title>OLA Patch persistency</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=OLA_Patch_persistency&amp;diff=5889"/>
				<updated>2018-06-01T02:20:32Z</updated>
		
		<summary type="html">&lt;p&gt;Peternewman: Add migrated template&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{PageMigrated|url=https://www.openlighting.org/ola/advanced-topics/patch-%20persistency/}}&lt;br /&gt;
= Patch Persistency =&lt;br /&gt;
The patch persistency information is stored in plain text files inside your configuration folder (~/.ola by default, or/var/lib/ola/conf if you're using the Raspberry Pi image.)&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;universe&amp;quot; information is stored inside &amp;quot;ola-universe.conf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;patch&amp;quot; information is stored inside &amp;quot;ola-port.conf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
To start with something clean we can delete the &amp;quot;ola-universe.conf&amp;quot; and &amp;quot;ola-port.conf&amp;quot; files and ola will create them again when stopping ola.&lt;br /&gt;
&lt;br /&gt;
Note : olad only writes it's patch files when it exists. That means that is the computer is crashing or if ola is crashing, the patch is not stored in files (see [[issue:125|Issue 125]] ).&lt;br /&gt;
&lt;br /&gt;
== Example ==&lt;br /&gt;
We are going to patch an ArtNet universe as an input with a DmxKing ultraDMX Micro as an output.&lt;br /&gt;
&lt;br /&gt;
On this example, I have enabled only the plugins :&lt;br /&gt;
* ArtNet&lt;br /&gt;
and&lt;br /&gt;
* Serial USB&lt;br /&gt;
setting all the plugins in the config folder with&lt;br /&gt;
    enabled = false&lt;br /&gt;
except the 2 ones needed witch i have enabled using&lt;br /&gt;
    enabled = true&lt;br /&gt;
&lt;br /&gt;
=== Starting ola ===&lt;br /&gt;
We are starting olad using either the command&lt;br /&gt;
    /etc/init.d/olad start&lt;br /&gt;
or&lt;br /&gt;
    olad -l 3&lt;br /&gt;
-l 3 : means that we are starting olad with the login level 3&lt;br /&gt;
&lt;br /&gt;
=== Getting devices info ===&lt;br /&gt;
To get the devices info we are using the command&lt;br /&gt;
    ola_device_info&lt;br /&gt;
That is returning :&lt;br /&gt;
    Device 1: ArtNet [10.0.0.2]&lt;br /&gt;
      port 0, IN , priority 100, RDM supported&lt;br /&gt;
      port 1, IN , priority 100, RDM supported&lt;br /&gt;
      port 2, IN , priority 100, RDM supported&lt;br /&gt;
      port 3, IN , priority 100, RDM supported&lt;br /&gt;
      port 0, OUT , RDM supported&lt;br /&gt;
      port 1, OUT , RDM supported&lt;br /&gt;
      port 2, OUT , RDM supported&lt;br /&gt;
      port 3, OUT , RDM supported&lt;br /&gt;
    Device 2: DMXking.com - ultraDMX Micro&lt;br /&gt;
      port 0, IN Serial #: 84000775, priority 100&lt;br /&gt;
      port 0, OUT Serial #: 84000775, RDM supported&lt;br /&gt;
&lt;br /&gt;
=== Patching the devices ===&lt;br /&gt;
First we are patching the ArtNet device using&lt;br /&gt;
    ola_patch -d 1 -i -p 0 -u 0&lt;br /&gt;
That means :&lt;br /&gt;
patch device 1 (-d 1) input (-i) port 0 (-p 0) to the universe 0 (-u 0)&lt;br /&gt;
(ola is using the output port as the default one, this is why we need to tell it to use the input using -i.&lt;br /&gt;
&lt;br /&gt;
Then we are patching the ultraDMX micro using&lt;br /&gt;
    ola_patch -d 2 -p 0 -u 0&lt;br /&gt;
&lt;br /&gt;
Now the device info is returning&lt;br /&gt;
    Device 1: ArtNet [10.0.0.2]&lt;br /&gt;
      port 0, IN ArtNet Universe 0:0:0, priority 100, patched to universe 0, RDM supported&lt;br /&gt;
      port 1, IN , priority 100, RDM supported&lt;br /&gt;
      port 2, IN , priority 100, RDM supported&lt;br /&gt;
      port 3, IN , priority 100, RDM supported&lt;br /&gt;
      port 0, OUT , RDM supported&lt;br /&gt;
      port 1, OUT , RDM supported&lt;br /&gt;
      port 2, OUT , RDM supported&lt;br /&gt;
      port 3, OUT , RDM supported&lt;br /&gt;
    Device 2: DMXking.com - ultraDMX Micro&lt;br /&gt;
      port 0, IN Serial #: 84000775, priority 100&lt;br /&gt;
      port 0, OUT Serial #: 84000775, patched to universe 0, RDM supported&lt;br /&gt;
&lt;br /&gt;
=== Resulted files ===&lt;br /&gt;
After stopping ola (using &amp;quot;/etc/init.d/olad stop&amp;quot; or &amp;quot;ctrl+c&amp;quot; (if running it directly on the command line))&lt;br /&gt;
&lt;br /&gt;
The ola-port.conf and ola-universe.conf are filled with the infos.&lt;br /&gt;
&lt;br /&gt;
==== ola-universe.conf ====&lt;br /&gt;
Here is the content of this file&lt;br /&gt;
    uni_0_merge = LTP&lt;br /&gt;
    uni_0_name = Universe 0&lt;br /&gt;
LTP priority is set by default.&lt;br /&gt;
&lt;br /&gt;
A default name &amp;quot;Universe 0&amp;quot; was given to the universe 0.&lt;br /&gt;
&lt;br /&gt;
==== ola-port.conf ====&lt;br /&gt;
Here is the content of this file&lt;br /&gt;
    2-1-I-0 = 0&lt;br /&gt;
    2-1-I-0_priority_value = 100&lt;br /&gt;
    2-1-I-1_priority_value = 100&lt;br /&gt;
    2-1-I-2_priority_value = 100&lt;br /&gt;
    2-1-I-3_priority_value = 100&lt;br /&gt;
    5-84000775-I-0_priority_value = 100&lt;br /&gt;
    5-84000775-O-0 = 0&lt;br /&gt;
&lt;br /&gt;
What does it mean ?&lt;br /&gt;
&lt;br /&gt;
First we need to know about the plugins ids.&lt;br /&gt;
&lt;br /&gt;
To get the plugins infos, we are using&lt;br /&gt;
    ola_plugin_info&lt;br /&gt;
That is returning&lt;br /&gt;
       Id   Plugin Name&lt;br /&gt;
    --------------------------------------&lt;br /&gt;
        1   Dummy&lt;br /&gt;
        2   ArtNet&lt;br /&gt;
        3   ShowNet&lt;br /&gt;
        4   ESP Net&lt;br /&gt;
        5   Serial USB&lt;br /&gt;
        6   Enttec Open DMX&lt;br /&gt;
        7   SandNet&lt;br /&gt;
        8   StageProfi&lt;br /&gt;
        9   Pathport&lt;br /&gt;
       11   E1.31 (sACN)&lt;br /&gt;
       12   USB&lt;br /&gt;
       13   FTDI USB DMX&lt;br /&gt;
       14   OSC&lt;br /&gt;
    --------------------------------------&lt;br /&gt;
In this example, we are only using the ArtNet plugin and the Serial USB plugins.&lt;br /&gt;
&lt;br /&gt;
We can see that the ArtNet has the id 2 and the Serial USB has the id 5.&lt;br /&gt;
&lt;br /&gt;
The ola-port.conf file is storing the info as&lt;br /&gt;
    &amp;lt;plugin-id&amp;gt;-&amp;lt;device-id&amp;gt;-&amp;lt;port-id&amp;gt;&lt;br /&gt;
We can translate the first line as :&lt;br /&gt;
&lt;br /&gt;
The plugin 2, device 1 and input port 0 is patched to the universe 0.&lt;br /&gt;
&lt;br /&gt;
The second line is defining the priority level.&lt;br /&gt;
&lt;br /&gt;
Then we can see that other ports are not patched.&lt;br /&gt;
&lt;br /&gt;
And then on the sixth line, we can translate it as :&lt;br /&gt;
&lt;br /&gt;
The plugin 5, device 84000775 (remember ola_device_info values) Input port 0 is not patched.&lt;br /&gt;
&lt;br /&gt;
And on the 7th line we can see translate it as :&lt;br /&gt;
&lt;br /&gt;
The plugin 5, device 84000775 Output port 0 is patched to universe 0.&lt;/div&gt;</summary>
		<author><name>Peternewman</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OLA_DMX_Trigger&amp;diff=5888</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=5888"/>
				<updated>2018-06-01T02:20:00Z</updated>
		
		<summary type="html">&lt;p&gt;Peternewman: Add migrated template&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{PageMigrated|url=https://www.openlighting.org/ola/advanced-topics/ola-dmx-trigger/}}&lt;br /&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 and can trigger on rising values, falling values or both.&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;
==== Rising / Falling Triggering ====&lt;br /&gt;
&lt;br /&gt;
Commands can be specified to trigger only if the value rises or falls. This is done with the + and - symbols:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
+`echo rising edge`  -`echo falling edge`&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Either the rising or falling command can be omitted, in that case no action will be taken.&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 [https://github.com/OpenLightingProject/ola/tree/master/tools/ola_trigger/contrib 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;
[[Raspberry Pi Media Player]] A combination of a Raspberry PI, ola_trigger and omxplayer&lt;/div&gt;</summary>
		<author><name>Peternewman</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OLA_Merging_Algorithms&amp;diff=5887</id>
		<title>OLA Merging Algorithms</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=OLA_Merging_Algorithms&amp;diff=5887"/>
				<updated>2018-06-01T02:19:19Z</updated>
		
		<summary type="html">&lt;p&gt;Peternewman: Add migrated template&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{PageMigrated|url=https://www.openlighting.org/ola/advanced-topics/ola-merging-algorithms/}}&lt;br /&gt;
&lt;br /&gt;
This document outlines the multi-source merging functionality in OLA.&lt;br /&gt;
&lt;br /&gt;
== Problem Definition ==&lt;br /&gt;
&lt;br /&gt;
The old version of OLA had two merge modes, [[HTP]] &amp;amp; [[LTP]]. This didn't allow for priority based merging of multiple [[DMX]] sources and in particular, didn't work well with automated lights.&lt;br /&gt;
&lt;br /&gt;
A separate but related problem what that some devices (such as the [[E1.31]] device) support a priority field when sending [[DMX]] data. These fields should be customizable.&lt;br /&gt;
&lt;br /&gt;
With the new merging features, a user can configure two input ports to be bound to the same universe, and set the priorities of the ports such that data on one is preferred over another. This can be used to implement backup controllers.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The protocols known to support priorities are:&lt;br /&gt;
* [[E1.31]]&lt;br /&gt;
* [[ETCNet2]] (no OLA plugin)&lt;br /&gt;
&lt;br /&gt;
== Proposal ==&lt;br /&gt;
&lt;br /&gt;
From the [[E1.31]] standard, we define a ''source priority'' which is an integer in the range 0 to 200 with 0 the lowest priority and 200 the highest. The default priority is 100.&lt;br /&gt;
&lt;br /&gt;
Each universe will have an ''active priority'' which is the priority that data is being handled for. Data received with a lower priority will be ignored, while data received with a higher priority will raise the universe's ''active priority'' to match that of the new data.&lt;br /&gt;
&lt;br /&gt;
=== Input ports ===&lt;br /&gt;
&lt;br /&gt;
Input ports will be separated into two types, those that support priorities and those that don't.&lt;br /&gt;
&lt;br /&gt;
Ports that support priorities will offer two modes, ''inherit'' and ''override''. ''Inherit'' mode will use the priority provided by the device/protocol. ''Override'' mode will allow the user to set a priority. &lt;br /&gt;
&lt;br /&gt;
Ports that don't support priorities will allow the user to specify the priority, defaulting to 100.&lt;br /&gt;
&lt;br /&gt;
=== Output ports ===&lt;br /&gt;
&lt;br /&gt;
Output ports that support priorities will again provide ''inherit'' and ''override'' modes. ''Inherit'' mode will use the universe's ''active priority'', ports operating in ''override'' mode will allow the user to specify a priority.&lt;br /&gt;
&lt;br /&gt;
Output ports that don't support priorities won't change.&lt;br /&gt;
&lt;br /&gt;
=== Source Clients ===&lt;br /&gt;
&lt;br /&gt;
Source clients will be able to set a source priority when sending DMX data, this will default to 100.&lt;br /&gt;
&lt;br /&gt;
=== Sink Clients ===&lt;br /&gt;
&lt;br /&gt;
No changes required. We may provide the universe's ''active priority'' in the data packet if required.&lt;br /&gt;
&lt;br /&gt;
=== Resolution of Equal Priority Data ===&lt;br /&gt;
&lt;br /&gt;
Universes will offer a choice of [[HTP]] and [[LTP]] merge modes for when data is received from multiple ports with the same priority.&lt;br /&gt;
&lt;br /&gt;
=== Data Timeouts ===&lt;br /&gt;
&lt;br /&gt;
When a data source doesn't receive data for a specified interval (known as the ''timeout interval'') it's considered disconnected. At this point the source is removed from the list of available sources and the universe's ''active priority'' may reduce. Different ports may have different ''timeout intervals''.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Use Cases ==&lt;br /&gt;
&lt;br /&gt;
Consider the following&lt;br /&gt;
&lt;br /&gt;
* Input port A, supports priorities, operating in inherit mode.&lt;br /&gt;
* Input port B, doesn't support priorities, manually set to 120&lt;br /&gt;
* Source client without a priority (defaults to 100)&lt;br /&gt;
* Output port X, doesn't support priorities&lt;br /&gt;
* Output port Y, supports priorities&lt;br /&gt;
&lt;br /&gt;
All ports are bound to the same universe. The cases described below are sequential (the events described in Case 2 assume the events of Case 1 have already occurred)&lt;br /&gt;
&lt;br /&gt;
=== Case 1: No Merge ===&lt;br /&gt;
&lt;br /&gt;
No data is received from either input port and the source client sends data. The ''active priority'' is 100. Output port X sends the data, output port Y sends the data with priority 100.&lt;br /&gt;
&lt;br /&gt;
[[File:ola-merge-case-1.gif|center]]&lt;br /&gt;
&lt;br /&gt;
=== Case 2: Simple Merge ===&lt;br /&gt;
&lt;br /&gt;
Data is now also received on port B. The new ''active priority'' is 120. Output port X sends the data from port B, output port Y sends the data from port B with priority 120.&lt;br /&gt;
&lt;br /&gt;
[[File:ola-merge-case2.gif|center]]&lt;br /&gt;
&lt;br /&gt;
=== Case 3:  Another Simple Merge ===&lt;br /&gt;
&lt;br /&gt;
Continuing on from Case 2, data is received on port A with a priority of 20. The ''active priority'' is still 120 so this data is discarded. Output port X continues to sends the data from port B, output port Y continues to send the data from port B with priority 120.&lt;br /&gt;
&lt;br /&gt;
[[File:Ola-merge-case3.gif|center]]&lt;br /&gt;
&lt;br /&gt;
=== Case 4: Conflict Merge ===&lt;br /&gt;
&lt;br /&gt;
New data is received on port A with a priority of 120. With two data sources of the same priority, the merge mode setting of the universe kicks in and the data from ports A and B is [[HTP]] or [[LTP]] merged depending on the universe setting. Port B continues to send with a priority of 120.&lt;br /&gt;
&lt;br /&gt;
[[File:ola-merge-case4.gif|center]]&lt;br /&gt;
&lt;br /&gt;
=== Case 5: Priority Escalation ===&lt;br /&gt;
&lt;br /&gt;
New data is received on Port A with a priority of 180. The new ''active priority'' is 180 and the conflict merge stops. Output port X sends the data from port A, output port Y sends the data from port A with priority 180.&lt;br /&gt;
&lt;br /&gt;
[[File:ola-merge-case5.gif|center]]&lt;br /&gt;
&lt;br /&gt;
=== Case 6: Overriding the Output Port Priority ===&lt;br /&gt;
&lt;br /&gt;
The user changes the mode of Port Y from ''inherit'' to ''override'' and sets a value of 130. Output port X continues to send the data from port A, output port Y sends the data from port A but with a priority of 130.&lt;br /&gt;
&lt;br /&gt;
[[File:ola-merge-case6.gif|center]]&lt;br /&gt;
&lt;br /&gt;
=== Case 7: Source Removal ===&lt;br /&gt;
&lt;br /&gt;
Port A stops receiving data and is considered disconnected. The ''active priority'' drops to 120 and both output ports use the data from port B. Port Y continues to send a priority of 130 because it's operating in ''override'' mode.&lt;br /&gt;
&lt;br /&gt;
[[File:ola-merge-case7.gif|center]]&lt;br /&gt;
&lt;br /&gt;
== Further Information ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.etcconnect.com/Community/wikis/products/etcnet2-products.aspx ETCNet2 Information]&lt;br /&gt;
* [[E1.31]] specification (purchase required)&lt;/div&gt;</summary>
		<author><name>Peternewman</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=Template:PageMigrated&amp;diff=5886</id>
		<title>Template:PageMigrated</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=Template:PageMigrated&amp;diff=5886"/>
				<updated>2018-06-01T02:12:27Z</updated>
		
		<summary type="html">&lt;p&gt;Peternewman: Tweak the template&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div id=&amp;quot;siteNotice&amp;quot;&amp;gt;&amp;lt;div id=&amp;quot;localNotice&amp;quot; lang=&amp;quot;en&amp;quot; dir=&amp;quot;ltr&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: #9999ff; border: 5px solid #9999ff; -moz-border-radius: 5px; border-radius: 5px;&amp;quot;&amp;gt;&amp;lt;span style=&amp;quot;font-weight: bold; font-size: 14px&amp;quot;&amp;gt;This page has migrated&amp;lt;/span&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;This page has migrated to our new site, please see [{{{url}}} {{{text|{{{url}}}}}}].&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
This content will not be updated and is just left here for reference and will be removed at some point in the future, see the link above for the most up-to-date version.&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;This template is for pages that have been migrated to the website. Remove page contents after some time.&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Peternewman</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OLA_DiffServ_support&amp;diff=5885</id>
		<title>OLA DiffServ support</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=OLA_DiffServ_support&amp;diff=5885"/>
				<updated>2018-06-01T02:07:55Z</updated>
		
		<summary type="html">&lt;p&gt;Peternewman: Add migrated template&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{PageMigrated|url=https://www.openlighting.org/ola/advanced-topics/ola-diffserv-support/}}&lt;br /&gt;
&lt;br /&gt;
[http://en.wikipedia.org/wiki/Differentiated_services DiffServ] allows devices to mark network packets so that network devices can handle different types of traffic differently. This means that latency sensitive data such as VOIP or lighting control traffic can be prioritized on the network.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
OLA supports DiffServ in some of the network plugins:&lt;br /&gt;
&lt;br /&gt;
* [[E1.31]]&lt;br /&gt;
* [[:Category:Pathport|Pathport]]&lt;br /&gt;
&lt;br /&gt;
If you'd like others just ask.&lt;br /&gt;
&lt;br /&gt;
To enable DiffServ support add&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dscp = &amp;lt;value&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to the plugin preference file. e.g. to mark packets as Expedited Forwarding, use&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dscp = 46&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
&lt;br /&gt;
Allow mappings of universe priorities -&amp;gt; DSCP values. This provides a flexible way of implementing backup controllers without provisioning extra network bandwidth.  http://code.google.com/p/linux-lighting/issues/detail?id=76&lt;/div&gt;</summary>
		<author><name>Peternewman</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OLA_JSON_API&amp;diff=5884</id>
		<title>OLA JSON API</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=OLA_JSON_API&amp;diff=5884"/>
				<updated>2018-04-21T15:25:50Z</updated>
		
		<summary type="html">&lt;p&gt;Peternewman: /* Examples */ Add a Get Perl example&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Browse to /help on your OLA webserver to see the available commands (append ?help=1 to the end of a command for more info in newer versions of OLA)&lt;br /&gt;
&lt;br /&gt;
==Examples==&lt;br /&gt;
===Set a universe of DMX===&lt;br /&gt;
====Perl====&lt;br /&gt;
&amp;lt;pre&amp;gt;#!/usr/bin/perl -w&lt;br /&gt;
&lt;br /&gt;
use LWP::UserAgent;&lt;br /&gt;
&lt;br /&gt;
my $ua = LWP::UserAgent-&amp;gt;new;&lt;br /&gt;
$ua-&amp;gt;timeout(5);&lt;br /&gt;
&lt;br /&gt;
my $response = $ua-&amp;gt;post('http://127.0.0.1:9090/set_dmx',&lt;br /&gt;
  {u =&amp;gt; 1, d =&amp;gt; join(&amp;quot;,&amp;quot;,(0,10,20,30,40,50,60,255))}&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
if ($response-&amp;gt;is_success) {&lt;br /&gt;
  print $response-&amp;gt;decoded_content;&lt;br /&gt;
} else {&lt;br /&gt;
  die $response-&amp;gt;status_line;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====curl====&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -d u=1 -d d=0,10,20,30,40,50,60,255 http://localhost:9090/set_dmx&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Get a universe of DMX===&lt;br /&gt;
====Perl====&lt;br /&gt;
&amp;lt;pre&amp;gt;#!/usr/bin/perl -w&lt;br /&gt;
&lt;br /&gt;
use JSON::XS;&lt;br /&gt;
use LWP::UserAgent;&lt;br /&gt;
&lt;br /&gt;
my $ua = LWP::UserAgent-&amp;gt;new;&lt;br /&gt;
$ua-&amp;gt;timeout(5);&lt;br /&gt;
&lt;br /&gt;
my $url = &amp;quot;http://localhost:9090/get_dmx?u=1&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
my $response = $ua-&amp;gt;get($url);&lt;br /&gt;
&lt;br /&gt;
if ($response-&amp;gt;is_success) {&lt;br /&gt;
  my $data  = decode_json($response-&amp;gt;decoded_content);&lt;br /&gt;
&lt;br /&gt;
  print &amp;quot;DMX Data: &amp;quot; . join(&amp;quot;, &amp;quot;, @{$data-&amp;gt;{dmx}}) . &amp;quot;\n&amp;quot;;&lt;br /&gt;
} else {&lt;br /&gt;
  die $response-&amp;gt;status_line;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Peternewman</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OLA_JSON_API&amp;diff=5883</id>
		<title>OLA JSON API</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=OLA_JSON_API&amp;diff=5883"/>
				<updated>2018-03-17T18:33:35Z</updated>
		
		<summary type="html">&lt;p&gt;Peternewman: /* Set a universe of DMX */ Add curl example, minor tweak of example values&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Browse to /help on your OLA webserver to see the available commands (append ?help=1 to the end of a command for more info in newer versions of OLA)&lt;br /&gt;
&lt;br /&gt;
==Examples==&lt;br /&gt;
===Set a universe of DMX===&lt;br /&gt;
====Perl====&lt;br /&gt;
&amp;lt;pre&amp;gt;#!/usr/bin/perl -w&lt;br /&gt;
&lt;br /&gt;
use LWP::UserAgent;&lt;br /&gt;
&lt;br /&gt;
my $ua = LWP::UserAgent-&amp;gt;new;&lt;br /&gt;
$ua-&amp;gt;timeout(5);&lt;br /&gt;
&lt;br /&gt;
my $response = $ua-&amp;gt;post('http://127.0.0.1:9090/set_dmx',&lt;br /&gt;
  {u =&amp;gt; 1, d =&amp;gt; join(&amp;quot;,&amp;quot;,(0,10,20,30,40,50,60,255))}&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
if ($response-&amp;gt;is_success) {&lt;br /&gt;
  print $response-&amp;gt;decoded_content;&lt;br /&gt;
} else {&lt;br /&gt;
  die $response-&amp;gt;status_line;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====curl====&lt;br /&gt;
&amp;lt;pre&amp;gt;curl -d u=1 -d d=0,10,20,30,40,50,60,255 http://localhost:9090/set_dmx&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Peternewman</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OLA_developer_info&amp;diff=5882</id>
		<title>OLA developer info</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=OLA_developer_info&amp;diff=5882"/>
				<updated>2017-12-31T12:55:11Z</updated>
		
		<summary type="html">&lt;p&gt;Peternewman: /* Plugin System */ Fix the link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This attempts to describe the code structure of OLA, in particular the core C++ framework, the olad server and the plugins. Be sure to read [[Using OLA]] first to understand the Port, Device,  Universe &amp;amp; Plugin terminology. &lt;br /&gt;
&lt;br /&gt;
== A Brief Tour ==&lt;br /&gt;
&lt;br /&gt;
Let's quickly cover the layout, you can [[code:|browse the code online]] to follow along.&lt;br /&gt;
&lt;br /&gt;
: &amp;lt;tt&amp;gt;[[code:include|include]]&amp;lt;/tt&amp;gt; - contains the header files (.h) that are installed on the system&lt;br /&gt;
:: &amp;lt;tt&amp;gt;[[code:include/ola|ola]]&amp;lt;/tt&amp;gt; - headers for the OLA framework. If the header is used by both the client and server code it belongs here&lt;br /&gt;
:: &amp;lt;tt&amp;gt;[[code:include/olad|olad]]&amp;lt;/tt&amp;gt; - headers specifically for the olad server&lt;br /&gt;
: &amp;lt;tt&amp;gt;[[code:common|common]]&amp;lt;/tt&amp;gt; - code for the ola framework, contains the implementations of everything in include/ola/&lt;br /&gt;
: &amp;lt;tt&amp;gt;[[code:olad|olad]]&amp;lt;/tt&amp;gt; - the olad server code&lt;br /&gt;
: &amp;lt;tt&amp;gt;[[code:ola|ola]]&amp;lt;/tt&amp;gt; - the ola C++ client code&lt;br /&gt;
: &amp;lt;tt&amp;gt;[[code:plugins|plugins]]&amp;lt;/tt&amp;gt; - headers and code for all the olad plugins&lt;br /&gt;
: &amp;lt;tt&amp;gt;[[code:javascript|javascript]]&amp;lt;/tt&amp;gt; - the client side code used for the web UI&lt;br /&gt;
: &amp;lt;tt&amp;gt;[[code:java|java]]&amp;lt;/tt&amp;gt; - the Java OLA client&lt;br /&gt;
: &amp;lt;tt&amp;gt;[[code:python|python]]&amp;lt;/tt&amp;gt; - the Python OLA client&lt;br /&gt;
: &amp;lt;tt&amp;gt;[[code:tools|tools]]&amp;lt;/tt&amp;gt; - Various utilities like the RDM sniffer, the [[RDM_Responder_Testing | RDM Responder Tests]], [[OLA_DMX_Trigger | DMX Trigger]] etc.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;include/ola&amp;lt;/tt&amp;gt; is further broken into modules. There are modules for RDM (&amp;lt;tt&amp;gt;include/ola/rdm&amp;lt;/tt&amp;gt;), HTTP (&amp;lt;tt&amp;gt;include/ola&amp;lt;/tt&amp;gt;), IO, Network etc.&lt;br /&gt;
&lt;br /&gt;
== Core Framework Classes ==&lt;br /&gt;
&lt;br /&gt;
The headers can all be found in &amp;lt;code&amp;gt;include/ola&amp;lt;/code&amp;gt;, the implementations are in &amp;lt;tt&amp;gt;common/&amp;lt;/tt&amp;gt;. While some of these just wrap the native library calls, we abstract them so that it's easier to port OLA to new platforms. Ideally there would be no platform-dependent code outside of common. &lt;br /&gt;
&lt;br /&gt;
=== DmxBuffer ===&lt;br /&gt;
&amp;lt;tt&amp;gt;[[code:include/ola/DmxBuffer.h|include/ola/DmxBuffer.h]]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The DmxBuffer class allows DMX data to be passed around the code, while avoiding unnecessary copying.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DmxBuffer data;  // new empty buffer, starts with a size of 0&lt;br /&gt;
data.Size(); // size of the buffer, 0 to 512&lt;br /&gt;
data.Blackout();  // set all channels to 0&lt;br /&gt;
data.Set(data, length); // set the buffer from a uint8_t*&lt;br /&gt;
data.Get(data, &amp;amp;length); // copy the data buffer into the memory pointed to by data&lt;br /&gt;
&lt;br /&gt;
Dmxbuffer data2 = data; // no copy&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
DmxBuffers are very similar to the boost [http://www.boost.org/doc/libs/1_43_0/libs/smart_ptr/shared_ptr.htm shared_ptr]&lt;br /&gt;
&lt;br /&gt;
=== Callbacks ===&lt;br /&gt;
&lt;br /&gt;
Callbacks are used extensively throughout OLA. They provide asynchronous notification when an operation completes, and reduce the coupling between modules.&lt;br /&gt;
&lt;br /&gt;
==== Basic Callbacks ====&lt;br /&gt;
&amp;lt;tt&amp;gt;[[code:include/ola/Callback.h|include/ola/Callback.h]]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Callbacks are similar to function pointers, they allow both functions and methods to be invoked at a later time with data from either / both the time the Callback is constructed and the time the Callback is executed.&lt;br /&gt;
&lt;br /&gt;
All Callbacks have a Run() method, which is how the Callback is executed.&lt;br /&gt;
&lt;br /&gt;
Callbacks come on two varieties, Persistent and SingleUse. SingleUse callbacks delete themselves after Run() is called so you don't have to.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// wrap a function that takes no args and returns a bool&lt;br /&gt;
SingleUseCallback&amp;lt;bool&amp;gt; *callback1 = NewSingleCallback(&amp;amp;Function0);&lt;br /&gt;
&lt;br /&gt;
// some time later&lt;br /&gt;
bool result = callback1-&amp;gt;Run();&lt;br /&gt;
// callback1 has deleted itself at this point&lt;br /&gt;
&lt;br /&gt;
// create a Callback for Method1 of the Object class and bind TEST_VALUE as the first arg&lt;br /&gt;
Callback&amp;lt;void&amp;gt; *callback2 = NewCallback(object, &amp;amp;Object::Method1, TEST_VALUE);&lt;br /&gt;
&lt;br /&gt;
// this will call object-&amp;gt;Method1(TEST_VALUE)&lt;br /&gt;
callback2-&amp;gt;Run();&lt;br /&gt;
// this wasn't a SingleUse Callback, so callback is still around and needs to be deleted manually.&lt;br /&gt;
delete callback2;&lt;br /&gt;
&lt;br /&gt;
// create a Callback for a method that takes 1 arg and returns void&lt;br /&gt;
BaseCallback1&amp;lt;void, unsigned int&amp;gt; *callback3 = NewCallback(object, &amp;amp;Object::Method1);&lt;br /&gt;
&lt;br /&gt;
// Call object-&amp;gt;Method1(TEST_VALUE)&lt;br /&gt;
callback3-&amp;gt;Run(TEST_VALUE);&lt;br /&gt;
// callback3 is still around at this stage&lt;br /&gt;
delete callback3;&lt;br /&gt;
&lt;br /&gt;
// create a callback for a method that takes 2 args and returns void&lt;br /&gt;
  BaseCallback2&amp;lt;void, int, int&amp;gt; *callback4 = NewSingleCallback(&lt;br /&gt;
      object,&lt;br /&gt;
      &amp;amp;Object::Method2,&lt;br /&gt;
      TEST_VALUE);&lt;br /&gt;
&lt;br /&gt;
// This calls object-&amp;gt;Method2(TEST_VALUE, TEST_VALUE2);&lt;br /&gt;
callback4-&amp;gt;Run(TEST_VALUE2);&lt;br /&gt;
// callback4 is still around&lt;br /&gt;
delete callback4;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== CallbackRunner ====&lt;br /&gt;
&amp;lt;tt&amp;gt;[[code:include/ola/CallbackRunner.h|include/ola/CallbackRunner.h]]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sometimes you need to ensure that a callback is always executed when a method returns.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void Foo(MyCallback *on_complete) {&lt;br /&gt;
  CallbackRunner runner(on_complete);&lt;br /&gt;
  // do work here, which may contain return statements, on_complete will always be executed.&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== MultiCallback ====&lt;br /&gt;
&amp;lt;tt&amp;gt;[[code:include/ola/MultiCallback.h|include/ola/MultiCallback.h]]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Multicallback is a callback that executes another callback after it has been called N times.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * Calls DoSomething() for each Port and runs the on_complete callback once each port's callback has run.&lt;br /&gt;
 */&lt;br /&gt;
void DoSomethingForAllPorts(const vector&amp;lt;OutputPort&amp;gt; &amp;amp;ports,&lt;br /&gt;
                            SomethingCalback *on_complete) {&lt;br /&gt;
  // This will call on_complete once it itself has been Run ports.size() times.&lt;br /&gt;
  BaseCallback0&amp;lt;void&amp;gt; *multi_callback = NewMultiCallback(                                                                                                       &lt;br /&gt;
      ports.size(),&lt;br /&gt;
      NewSingleCallback(this, &amp;amp;SomethingComplete, on_complete));&lt;br /&gt;
&lt;br /&gt;
  vector&amp;lt;OutputPort*&amp;gt;::iterator iter;&lt;br /&gt;
  for (iter = output_ports.begin(); iter != output_ports.end(); ++iter) {&lt;br /&gt;
    (*iter)-&amp;gt;DoSomething(multi_callback);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Memory Buffers and Streams ===&lt;br /&gt;
&lt;br /&gt;
OLA has a collection of classes for reading and writing data from memory. If you've used the C++ streams classes a lot of this will look familiar. &lt;br /&gt;
&lt;br /&gt;
[[Image:Ola-io-classes.png]]&lt;br /&gt;
&lt;br /&gt;
Abstract classes have dotted borders.&lt;br /&gt;
&lt;br /&gt;
Of all the classes, the ones you probably care about are the IOQueue, BigEndianOutputStream &amp;amp; BigEndianInputStream. Skip down to those classes for an example.&lt;br /&gt;
&lt;br /&gt;
==== Input &amp;amp; Output Buffers ====&lt;br /&gt;
&amp;lt;tt&amp;gt;[[code:include/ola/io/InputBuffer.h|include/ola/io/InputBuffer.h]]&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;tt&amp;gt;[[code:include/ola/io/OutputBuffer.h|include/ola/io/OutputBuffer.h]]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These define the abstract classes for reading and writing from/to memory buffers. &lt;br /&gt;
&lt;br /&gt;
==== IOQueue ====&lt;br /&gt;
&amp;lt;tt&amp;gt;[[code:include/ola/io/IOQueue.h|include/ola/io/IOQueue.h]]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The IOQueue implements both the InputBuffer and OutputBuffer interfaces. They are used in all of the new network code to construct &amp;amp; parse packets.&lt;br /&gt;
&lt;br /&gt;
IOQueues are nice because they grow as data is written. Normally you don't write to IOQueues directly but instead use an OutputStream.&lt;br /&gt;
&lt;br /&gt;
IOQueues are also integrated with the Socket classes, so they avoid a memory copy. For instance when you call UDPSocket::SendTo() it uses [[wp:Vectored_I/O|Vector I/O]] to avoid a copy. &lt;br /&gt;
&lt;br /&gt;
==== MemoryBuffer ====&lt;br /&gt;
&amp;lt;tt&amp;gt;[[code:include/ola/io/IOQueue.h|include/ola/io/MemoryBuffer.h]]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A MemoryBuffer is useful if you have a const block of memory, and want to extract typed data sequentially using an InputStream.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void ExtractData(const uint8_t *data, unsigned int length) {&lt;br /&gt;
  MemoryBuffer input(data, length);&lt;br /&gt;
  // can now use input with an InputStream.&lt;br /&gt;
  // ...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Input &amp;amp; Output Streams ====&lt;br /&gt;
&amp;lt;tt&amp;gt;[[code:include/ola/io/InputStream.h|include/ola/io/InputStream.h]]&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;tt&amp;gt;[[code:include/ola/io/OutputStream.h|include/ola/io/OutputStream.h]]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These allow you to read / write typed data to Input/Output Buffers.&lt;br /&gt;
&lt;br /&gt;
==== BigEndianInputStream &amp;amp; BigEndianOutputStream ====&lt;br /&gt;
&amp;lt;tt&amp;gt;[[code:include/ola/io/BigEndianStream.h|include/ola/io/BigEndianInputStream.h]]&amp;lt;/tt&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;tt&amp;gt;[[code:include/ola/io/BigEndianStream.h|include/ola/io/BigEndianOutputStream.h]]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sending example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
IOQueue packet;&lt;br /&gt;
BigEndianOutputStream output(&amp;amp;packet);&lt;br /&gt;
&lt;br /&gt;
output &amp;lt;&amp;lt; (int) 42; // automatically converts to big endian&lt;br /&gt;
output &amp;lt;&amp;lt; true;&lt;br /&gt;
output.Write(raw_data, raw_data_size);&lt;br /&gt;
&lt;br /&gt;
// now packet contains our binary data.&lt;br /&gt;
socket-&amp;gt;SendTo(packet, target_address); // target_address is a IPV4SocketAddress.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Receiving Example (we don't support IOQueues for input yet):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
bool HandlePacket(const uint_t *data, unsigned int length) {&lt;br /&gt;
  MemoryBuffer packet(data, length);&lt;br /&gt;
  BigEndianInputStream input(&amp;amp;packet);&lt;br /&gt;
&lt;br /&gt;
  int32_t foo;&lt;br /&gt;
  if (!(input &amp;gt;&amp;gt; foo))&lt;br /&gt;
    return false;  // not enough data&lt;br /&gt;
  bool bar;&lt;br /&gt;
  if (!(input &amp;gt;&amp;gt; bar))&lt;br /&gt;
    return false;  // not enough data&lt;br /&gt;
  // do something with foo and bar here&lt;br /&gt;
  return true;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Clock ===&lt;br /&gt;
&amp;lt;tt&amp;gt;[[code:include/ola/Clock.h|include/ola/Clock.h]]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Contains the TimeInterval, TimeStamp and Clock classes for managing time. It also defines a MockClock class which can be useful for testing.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// get the current time&lt;br /&gt;
TimeStamp timestamp, timestamp2;&lt;br /&gt;
Clock::CurrentTime(&amp;amp;timestamp);&lt;br /&gt;
&lt;br /&gt;
// sleep for a bit&lt;br /&gt;
usleep(10000);&lt;br /&gt;
&lt;br /&gt;
// print the duration we slept for&lt;br /&gt;
Clock::CurrentTime(&amp;amp;timestamp2);&lt;br /&gt;
TimeInterval interval = timestamp2 - timestamp;&lt;br /&gt;
cout &amp;lt;&amp;lt; interval &amp;lt;&amp;lt; endl;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Credentials ===&lt;br /&gt;
&amp;lt;tt&amp;gt;[[code:include/ola/base/Credentials.h|include/ola/base/Credentials.h]]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Functions to get user and group information. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
uid_t uid = GetUID();&lt;br /&gt;
PasswdEntry passwd;&lt;br /&gt;
if (!GetPasswdUID(uid, &amp;amp;passwd))&lt;br /&gt;
  return;&lt;br /&gt;
cout &amp;lt;&amp;lt; &amp;quot;Username is &amp;quot; &amp;lt;&amp;lt; passwd.pw_name &amp;lt;&amp;lt; endl;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Initialization ===&lt;br /&gt;
&amp;lt;tt&amp;gt;[[code:include/ola/base/Init.h|include/ola/base/Init.h]]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Helper functions that should be called on startup. They do things like install SEGV stack trace handlers, initialize the random number generator etc.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AppInit(argc, argv);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== HTTP Server ===&lt;br /&gt;
&amp;lt;tt&amp;gt;[[code:include/ola/http/HTTPServer.h|include/ola/HTTPServer.h]]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The HTTP server is provided by [http://www.gnu.org/software/libmicrohttpd/ microhttpd]. The HTTPServer class provides a C++ wrapper around the microhttpd code.&lt;br /&gt;
&lt;br /&gt;
=== Logging ===&lt;br /&gt;
&amp;lt;tt&amp;gt;[[code:include/ola/Logging.h|include/ola/Logging.h]]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Contains logging macros which behave like streams:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
OLA_FATAL &amp;lt;&amp;lt; &amp;quot;foo&amp;quot;;&lt;br /&gt;
OLA_ERROR &amp;lt;&amp;lt; &amp;quot;bar&amp;quot;;&lt;br /&gt;
OLA_INFO &amp;lt;&amp;lt; &amp;quot;baz&amp;quot;;&lt;br /&gt;
OLA_DEBUG &amp;lt;&amp;lt; &amp;quot;bat&amp;quot;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Logging is initialized with a call to InitLogging(level, output). i.e.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Send INFO and above to STDERR&lt;br /&gt;
InitLogging(OLA_LOG_INFO, OLA_LOG_STDERR);&lt;br /&gt;
&lt;br /&gt;
// or&lt;br /&gt;
&lt;br /&gt;
// Send WARNING and above to SYSLOG&lt;br /&gt;
InitLogging(OLA_LOG_WARN, OLA_LOG_SYSLOG);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note you can't send different levels to different destinations (so you need one or the other of the above examples). Calls to InitLogging() overwrite the previous logging configuration.&lt;br /&gt;
&lt;br /&gt;
=== String Utils ===&lt;br /&gt;
&amp;lt;tt&amp;gt;[[code:include/ola/StringUtils.h|include/ola/StringUtils.h]]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
While not a class, this defines a number of helper functions for dealing with Strings. If you need to split strings, convert ints to strings and back, escape, trim or capitalize strings use these functions.&lt;br /&gt;
&lt;br /&gt;
=== STL Utils ===&lt;br /&gt;
&amp;lt;tt&amp;gt;[[code:include/ola/StringUtils.h|include/stl/STLUtils.h]]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Various helper methods for dealing with [http://www.sgi.com/tech/stl/ STL] containers like [http://www.sgi.com/tech/stl/Vector.html vector] and [http://www.sgi.com/tech/stl/Map.html map]. Try to use this as much as possible to reduce code (and the change of introducing a bug!).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
vector&amp;lt;Foo*&amp;gt; foos;&lt;br /&gt;
STLDeleteValues(&amp;amp;foos);  // delete all objects in foo&lt;br /&gt;
&lt;br /&gt;
map&amp;lt;int, string&amp;gt; our_map;&lt;br /&gt;
vector&amp;lt;int&amp;gt; keys;&lt;br /&gt;
vector&amp;lt;string&amp;gt; values;&lt;br /&gt;
STLKeys(our_map, &amp;amp;keys);&lt;br /&gt;
STLValues(our_map, &amp;amp;values);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Filesystem Utils ===&lt;br /&gt;
&amp;lt;tt&amp;gt;[[code:include/ola/file/Util.h|include/ola/file/Util.h]]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A collection of functions for working with files.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
vector&amp;lt;string&amp;gt; usb_devices;&lt;br /&gt;
// return all files that match /dev/ttyUSB*&lt;br /&gt;
FindMatchingFiles(&amp;quot;/dev/&amp;quot;, &amp;quot;ttyUSB&amp;quot;, &amp;amp;files);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Random Numbers ===&lt;br /&gt;
&amp;lt;tt&amp;gt;[[code:include/ola/math/Random.h|include/ola/math/Random.h]]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A simple uniform random number generator. You need to call InitRandom() before using this. Do not use for anything security related. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
InitRandom();&lt;br /&gt;
int r = Random(1, 10);  // returns an int in the range 1 .. 10&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Backoff Policies ===&lt;br /&gt;
&amp;lt;tt&amp;gt;[[code:include/ola/util/Backoff.h|include/ola/util/Backoff.h]]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Backoffs are an important part of writing reliable software. &amp;lt;tt&amp;gt;Backoff.h&amp;lt;/tt&amp;gt; defines various BackoffPolicies and a BackoffGenerator.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
BackoffGenerator generator(&lt;br /&gt;
  new ola::ExponentialBackoffPolicy(TimeInterval(1, 0), TimeInterval(64, 0));&lt;br /&gt;
&lt;br /&gt;
// when an event fails&lt;br /&gt;
TimeInterval backoff = generator.Next();&lt;br /&gt;
// schedule a retry...&lt;br /&gt;
&lt;br /&gt;
// and when it fails a second time&lt;br /&gt;
TimeInterval backoff = generator.Next();&lt;br /&gt;
// schedule a retry...&lt;br /&gt;
&lt;br /&gt;
// and when it succeeds&lt;br /&gt;
generator.Reset();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Networking ===&lt;br /&gt;
==== Network Utils ====&lt;br /&gt;
&lt;br /&gt;
include/ola/network/NetworkUtils.h has helper methods for converting between endian formats, and converting IPv4 addresses to strings and visa-versa.&lt;br /&gt;
&lt;br /&gt;
==== IP Addresses &amp;amp; Socket Addresses ====&lt;br /&gt;
&lt;br /&gt;
include/ola/network/IPV4Address.h  include/ola/network/SocketAddress.h  have classes used to represent IP Addresses and Socket Addresses.&lt;br /&gt;
&lt;br /&gt;
==== SelectServer &amp;amp; Sockets ====&lt;br /&gt;
&lt;br /&gt;
The SelectServer is the dispatcher at the core of OLA and is defined in include/ola/network/SelectServer.h. It waits for events, and when an action occurs calls the specified method. The SelectServer can also be used to register Timeouts (called every N ms) and Loop functions (shouldn't be used).&lt;br /&gt;
&lt;br /&gt;
=== Threads and Locking ===&lt;br /&gt;
&lt;br /&gt;
==== Threads ====&lt;br /&gt;
&amp;lt;tt&amp;gt;[[code:include/ola/thread/Thread.h|ola/include/thread/Thread.h]]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This works as you'd expect.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class MyThread: public Thread {&lt;br /&gt;
 protected:&lt;br /&gt;
   void *Run() {&lt;br /&gt;
     // write code for the new thread here&lt;br /&gt;
   }&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
MyThread thread1;&lt;br /&gt;
thread1.Start();  // blocks until the thread is running&lt;br /&gt;
// continue, and later&lt;br /&gt;
thread1.Join();&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Mutexes &amp;amp; Condition Variables ====&lt;br /&gt;
&amp;lt;tt&amp;gt;[[code:include/ola/thread/Thread.h|ola/include/thread/Mutex.h]]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This provides [[wp:Mutual_exclusion|Mutexes]] (non-recursive) and [[wp:Monitor_(synchronization)|Condition Variables]] (Monitors).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mutex mu;&lt;br /&gt;
int counter;&lt;br /&gt;
&lt;br /&gt;
void Foo() {&lt;br /&gt;
  mu.Lock();&lt;br /&gt;
  counter++;&lt;br /&gt;
  mu.Unlock();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
While this works, it's not good coding practice. Consider what happens if someone later changes this to:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Mutex mu;&lt;br /&gt;
int data_to_protect;&lt;br /&gt;
&lt;br /&gt;
bool Foo() {&lt;br /&gt;
  mu.Lock();&lt;br /&gt;
  counter++;&lt;br /&gt;
  if (counter % 10)&lt;br /&gt;
    return true;&lt;br /&gt;
  mu.Unlock();&lt;br /&gt;
  return false&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now the Mutex isn't unlocked when counter is a multiple of 10. On the next call the program will deadlock.&lt;br /&gt;
&lt;br /&gt;
To avoid this, we use the MutexLocker class. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
void Foo() {&lt;br /&gt;
  MutexLocker locker(&amp;amp;mu);&lt;br /&gt;
  counter++;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It saves a line of code, and unlocks the Mutex automatically when it goes out of scope.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== RDM ===&lt;br /&gt;
&lt;br /&gt;
Write me.&lt;br /&gt;
&lt;br /&gt;
=== Timecode ===&lt;br /&gt;
&amp;lt;tt&amp;gt;[[code:include/ola/timecode/TimeCode.h|include/ola/timecode/TimeCode.h]]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&amp;lt;tt&amp;gt;include/ola/timecode/TimeEnums.h&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A simple class for handling [[wp:Timecode|Timecode]] data. See [[OLA_TimeCode | OLA Timecode]] for more info.&lt;br /&gt;
&lt;br /&gt;
=== JSON ===&lt;br /&gt;
&amp;lt;tt&amp;gt;[[code:include/ola/web/Json.h|include/ola/web/Json.h]]&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A set of classes for constructing [[wp:JSON|JSON]] data structures and serializing them.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
JsonObject obj;&lt;br /&gt;
obj.Add(&amp;quot;name&amp;quot;, &amp;quot;simon&amp;quot;);&lt;br /&gt;
obj.Add(&amp;quot;Australian&amp;quot;, true);&lt;br /&gt;
obj.Add(&amp;quot;age&amp;quot;, 21);&lt;br /&gt;
&lt;br /&gt;
JsonArray *lucky_numbers = obj.AddArray(&amp;quot;lucky_numbers&amp;quot;);&lt;br /&gt;
lucky_numbers-&amp;gt;Append(2);&lt;br /&gt;
lucky_numbers-&amp;gt;Append(5);&lt;br /&gt;
&lt;br /&gt;
// returns the above as JSON.&lt;br /&gt;
const string json_output = JsonWriter::AsString(obj);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== OLAD ==&lt;br /&gt;
&lt;br /&gt;
=== RPC System ===&lt;br /&gt;
&lt;br /&gt;
The RPC system is what allows clients to communicate with the OLA Server. It uses [http://code.google.com/p/protobuf/ Protocol Buffers] as the data interchange format. You can see the message definitions in the [[code:common/protocol/Ola.proto|Ola.proto]] file.&lt;br /&gt;
&lt;br /&gt;
Clients communicate with OLAD over a TCP socket connected to localhost::9010. The RPC port olad listens on can be changed with the &amp;lt;tt&amp;gt;--rpc-port&amp;lt;/tt&amp;gt; command line option but this will require the clients to be updated as well. Because the communication is over localhost we don't need to worry about dropped messages causing the socket buffers to fill up. You can still exceed the socket buffers if the client sends faster than the server can receive, but this usually indicates a poorly written client.&lt;br /&gt;
&lt;br /&gt;
[[Image:Ola-communication.png|center]]&lt;br /&gt;
&lt;br /&gt;
=== Client Side ===&lt;br /&gt;
&lt;br /&gt;
The code required on the client side is the similar irrespective of langage. All that's required to write an OLA client is an implementation of Protocol buffers. See the [http://developers.google.com/protocol-buffers/docs/reference/other  Protocol Buffers, Other Languages] page.&lt;br /&gt;
&lt;br /&gt;
Client code needs to:&lt;br /&gt;
* Open a TCP connection to localhost:9010&lt;br /&gt;
* Provide an API, which constructs protocol buffer objects, serializes them and writes them to the TCP socket.&lt;br /&gt;
* Read data from the TCP socket, de-serialize it into protocol buffer objects and deal with the response data.&lt;br /&gt;
&lt;br /&gt;
The only tricky bit is matching the responses to the requests. This task is usually handled by a StreamRpcChannel class, see the [[code:python/ola/rpc/StreamRpcChannel.py|Python]] or [[code:common/rpc/StreamRpcChannel.h|C++]] code.&lt;br /&gt;
&lt;br /&gt;
=== Server Side ===&lt;br /&gt;
&lt;br /&gt;
On the server side, OLAD creates a listening socket and then calls [[code:olad/OlaServer.cpp#L427|InternalNewConnection]] each time a client connects. This sets up a OlaClientService object, which is what gets called when a new message is received. The OlaClientService objects call into [[code:olad/OlaServerServiceImpl.cpp|OlaServerServiceImpl.cpp]] which is where the message handling takes place.&lt;br /&gt;
&lt;br /&gt;
=== HTTP Server ===&lt;br /&gt;
&lt;br /&gt;
olad/OlaHttpServer.h implements the OLA specific behavior and runs as a separate thread. This uses the OlaCallbackClient which has a TCP connection open to the OLAD core, just like any normal client.  &lt;br /&gt;
&lt;br /&gt;
[[Image:Olad-http.png]]&lt;br /&gt;
&lt;br /&gt;
== Plugin System ==&lt;br /&gt;
Read a walkthrough of the OSC plugin [[code:plugins/osc/README.developer.md|here]].&lt;br /&gt;
&lt;br /&gt;
We'll use plugin to refer to the entire module (Plugin, Devices &amp;amp; Ports), and Plugin to refer to the class that inherits from Plugin.&lt;br /&gt;
 &lt;br /&gt;
Plugins create and register Devices, which each consist of 0 (obviously not useful) or more Ports. A Plugin generally does a bit of work when it starts to detect devices, then leaves all work to the individual Devices and Ports.&lt;br /&gt;
&lt;br /&gt;
[[Image:ola_plugin_uml.png]]&lt;br /&gt;
&lt;br /&gt;
Each plugin implements the classes in blue. Of course, you can choose not to inherit from the BasicPort / Device / Plugin  classes and do everything yourself.&lt;br /&gt;
&lt;br /&gt;
=== PluginAdaptor ===&lt;br /&gt;
&lt;br /&gt;
The PluginAdaptor is the interface between plugin code and the core OLA objects. Each Plugin object has a pointer to a plugin adaptor in the instance variable m_plugin_adaptor.&lt;br /&gt;
&lt;br /&gt;
=== Plugins ===&lt;br /&gt;
&lt;br /&gt;
The AbstractPlugin interface is defined in include/olad/Plugin.h. The Plugin class implements most of this interface, and leaves Id(), PluginPrefix(), StartHook(), StopHook(), SetDefaultPreferences() and Description() to be implemented by the child classes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The startup sequence for a Plugin object is:&lt;br /&gt;
*  From within DynamicPluginLoader::LoadPlugins an instance of the plugin is created&lt;br /&gt;
* If the ShouldStart() method returns False, nothing else happens, otherwise the Start() method is called.&lt;br /&gt;
* The Start() method calls LoadPreferences() which in turn calls SetDefaultPreferences(), this last method gives the Plugin the opportunity to setup the Preferences object.&lt;br /&gt;
* if SetDefaultPreferences() doesn't fail, StartHook() is called where new Devices are created. m_plugin_adaptor-&amp;gt;RegisterDevice() should be called to add new Devices.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
During the shutdown sequence:&lt;br /&gt;
* Stop() is called, which in turn calls StopHook()&lt;br /&gt;
* StopHook should call m_plugin_adaptor-&amp;gt;UnregisterDevice() for any devices registered during the start phase.&lt;br /&gt;
* delete is then called on the Plugin object&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At any time a the following methods can be called:&lt;br /&gt;
* Id()&lt;br /&gt;
* Name()&lt;br /&gt;
* Description()&lt;br /&gt;
&lt;br /&gt;
=== Devices ===&lt;br /&gt;
&lt;br /&gt;
The interface to Devices is defined in include/olad/Device.h as AbstractDevice, again the Device class implements most of this interface, leaving the derived classes to fill in a couple of methods:&lt;br /&gt;
* DeviceId()  - returns a unique persistent string identifying this device&lt;br /&gt;
* StartHook() - this should create the port objects for a device.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Ports ===&lt;br /&gt;
&lt;br /&gt;
Ports are the objects that actually read/write DmxBuffers. Defined in include/olad/Port.h there is the base interface Port, and then two child interfaces, InputPort and OutputPort. The BasicInputPort and BasicOutputPort provide partial implementations for these two interfaces.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
At a minimum , an OutputPort needs to provide the following methods:&lt;br /&gt;
* WriteDMX(const DmxBuffer &amp;amp;buffer, uint8_t priority) &lt;br /&gt;
* Description()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
And an InputPort needs to provide:&lt;br /&gt;
* ReadDMX()&lt;br /&gt;
* Description()&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
A call to ReadDMX() is triggered by calling DmxChanged() on a InputPort object. This causes the universe the port is bound to to fetch the new DMX data. Both ReadDMX() and WriteDMX() must be non-blocking, blocking here will delay the main processing loop. To satisfy this, most ports use this sequence of events:&lt;br /&gt;
&lt;br /&gt;
* register a Socket for reading with the SelectServer&lt;br /&gt;
// some time later&lt;br /&gt;
* receive notification that there is new data on the socket&lt;br /&gt;
* read the data and copy it to a buffer&lt;br /&gt;
* call DmxChanged() to notify the bound Universe we have new data&lt;br /&gt;
* the Universe then calls ReadDMX()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Often more than one port will use the same file descriptor. This means the device is responsible for reading the data and dispatching to the right port. &lt;br /&gt;
&lt;br /&gt;
Here's an example of how dmx data is received from the UsbPro Device.&lt;br /&gt;
&lt;br /&gt;
The UsbProDevice will have been registered using plugin_adaptor-&amp;gt;RegisterSocket(). When input becomes available the following sequence happens:&lt;br /&gt;
  device-&amp;gt;action() // signals the device that new data is available&lt;br /&gt;
    widget-&amp;gt;recv() // tells the widget to read more data&lt;br /&gt;
      widget-&amp;gt;do_recv() // reads the data from the fd&lt;br /&gt;
        widget-&amp;gt;handle_cos() // handles the change-of-state message from the widget&lt;br /&gt;
          device-&amp;gt;new_dmx() // signal the device that new dmx data has arrived &lt;br /&gt;
           port-&amp;gt;DmxChanged() // signal the universe that new dmx data has arrived&lt;br /&gt;
             // if this port is bound to a universe, the universe will then call&lt;br /&gt;
             port-&amp;gt;ReadDMX()&lt;br /&gt;
               device-&amp;gt;get_dmx()&lt;br /&gt;
                widget-&amp;gt;get_dmx()&lt;br /&gt;
&lt;br /&gt;
Of course, the plugin authors are free to implement this however they like.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Config Messages ===&lt;br /&gt;
&lt;br /&gt;
Config messages are handled a little differently for two reasons:&lt;br /&gt;
 * The configure() method in a plugin has to return a response immediately. We don't want to block because we'll delay all lla processing. The new RPC subsystem removes this limitation.&lt;br /&gt;
 * Sending a PARAMETER_REQUEST to the widget doesn't generate a response immediately (in fact it may not generate one at all).&lt;br /&gt;
&lt;br /&gt;
To work around this, we send a parameter_request when we start the device, and then anytime we set parameters. In the meantime we store the parameters in the widget object and return those. The sequence looks like:&lt;br /&gt;
&lt;br /&gt;
  device-&amp;gt;configure()&lt;br /&gt;
    device-&amp;gt;config_get_params()&lt;br /&gt;
      widget-&amp;gt;get_parms()&lt;br /&gt;
&lt;br /&gt;
* What is the interface between the LLA core and LLA plugins?&lt;br /&gt;
&lt;br /&gt;
  See above and the files plugin.h, device.h and port.h. The create() call will be passed a PluginAdaptor object which can then be used to register/unregister file descriptors, loop functions, timeouts and devices.&lt;br /&gt;
&lt;br /&gt;
* What is the interface between the LLA core and other apps/clients to LLA like QLC?&lt;br /&gt;
&lt;br /&gt;
  All clients should use the LlaClient library. This needs better documentation.&lt;br /&gt;
&lt;br /&gt;
* How is functionality split between the usbpro plugin and the example program?&lt;br /&gt;
&lt;br /&gt;
The example program constructs configuration request messages and sends them (using LlaClient) to the Lla Core. The core routes this message to the plugin, which then returns a response message. This response is passed back to the client.&lt;br /&gt;
&lt;br /&gt;
== Ideas for easy configuration ==&lt;br /&gt;
For some users, it will be useful to have a &amp;quot;auto-connect&amp;quot; feature. When a attached device is discovered (either when LLA i started or when a new device is attached), the user could be asked if the available ports (input as well as output) should be patched to the lowest available universes.&lt;br /&gt;
&lt;br /&gt;
* Enable auto-connect ( OFF|connect whatever comes first|connect by stored patch layout)&lt;br /&gt;
* Save a given combination of devices (just by type or with unique ID's from serial numbers, USB device ID's etc)&lt;br /&gt;
&lt;br /&gt;
Which devices cannot be autodetected?&lt;br /&gt;
&lt;br /&gt;
== About device config messages ==&lt;br /&gt;
&lt;br /&gt;
We need a way to tune settings on a port/device that the LLA Core doesn't know about. To enable this, the LlaClient provides a method dev_config(unsigned int dev, LlaDevConfigMsg *msg)&lt;br /&gt;
&lt;br /&gt;
The LlaDevConfigMsg is an interface which declares one method: pack(uint8_t buffer, unsigned int length).&lt;br /&gt;
On the device side, we declare a method configure(uint8_t *request, int length)&lt;br /&gt;
&lt;br /&gt;
So to use this:&lt;br /&gt;
&lt;br /&gt;
On the client&lt;br /&gt;
&lt;br /&gt;
  MyObserver::dev_config(unsigned int dev, uin8_t *res, unsigned int length) {&lt;br /&gt;
    MyLlaDevConfigMsg msg = parse_message(data, length);&lt;br /&gt;
    // do something with the result&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
  int main() {&lt;br /&gt;
    // all the setup code&lt;br /&gt;
  &lt;br /&gt;
    MyObserver observer;&lt;br /&gt;
    // the observer gets the dev_config() callback&lt;br /&gt;
    lla_client-&amp;gt;set_observer(&amp;amp;observer);&lt;br /&gt;
  &lt;br /&gt;
    MyLlaDevConfigMsg msg;&lt;br /&gt;
    // set some fields&lt;br /&gt;
    msg.foo = 1&lt;br /&gt;
    lla_client-&amp;gt;dev_config(device_id, &amp;amp;msg); //calls pack() on the message&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
In the device:&lt;br /&gt;
&lt;br /&gt;
  MyDevice::configure(data, length) {&lt;br /&gt;
    MyLlaDevConfigMsg msg = parse_message(data, length);&lt;br /&gt;
    // do something with the message&lt;br /&gt;
  &lt;br /&gt;
    MyLlaDevConfigMsg *response = new MyLlaDevConfigMsg();&lt;br /&gt;
    // response is deleted by the lla core&lt;br /&gt;
    return response;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== The tool app &amp;quot;lla-usbpro&amp;quot; ==&lt;br /&gt;
&lt;br /&gt;
The purpose is to set and get the settings that reside in the ''USB Pro'' box.&lt;br /&gt;
&lt;br /&gt;
The communication with ''USB Pro's'' seems to go via the LLA core, and lla-usbpro registers as a LLA client, and uses some event handlers.&lt;br /&gt;
&lt;br /&gt;
As defined in the device spec. (PDF from Enttec):&lt;br /&gt;
&lt;br /&gt;
label=3 response&lt;br /&gt;
*1. data byte= Firmware version LSB. Valid range is 0 to 255.&lt;br /&gt;
*2. data byte=Firmware version MSB. Valid range is 0 to 255.&lt;br /&gt;
*3. data byte=DMX output break time in 10.67 microsecond units. range=[9-127] (96.03 - 1355.09 micro seconds)&lt;br /&gt;
*4. data byte=DMX output Mark After Break time in 10.67 microsecond units. range=[1-127] (10.67 - 1355.09 micro seconds)&lt;br /&gt;
*5. data byte=DMX output rate in packets per second. range=[1-40]&lt;br /&gt;
*x. data byte= some user configuration of the requested size&lt;br /&gt;
&lt;br /&gt;
The serial number is is decoded (from 4 bit Binary Coded Decimal) in lla-usbpro, not the plugin.&lt;br /&gt;
&lt;br /&gt;
==Unsupported USB devices==&lt;br /&gt;
&lt;br /&gt;
* [[Peperoni Light| Peperoni]] [[Rodin1]] (but this is supported directly by [[QLC]])&lt;br /&gt;
* [[Peperoni Light|Peperoni]] [[USBDMX21]]&lt;br /&gt;
* [[USB DMX]] from usbdmx.com&lt;br /&gt;
* [[Sandsys]] [[UMX2]]&lt;br /&gt;
* [[Sandsys]] [[UMX4]]&lt;br /&gt;
''Peperoni and usbdmx are probably easy to implement. The specs and source code examples are available.''&lt;/div&gt;</summary>
		<author><name>Peternewman</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OLA_Device_Specific_Configuration&amp;diff=5880</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=5880"/>
				<updated>2017-08-29T13:56:17Z</updated>
		
		<summary type="html">&lt;p&gt;Peternewman: /* Anyma */ Add uDMX name&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Anyma uDMX==&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;
==Streaming ACN / E1.31==&lt;br /&gt;
&lt;br /&gt;
===All Platforms===&lt;br /&gt;
Some older networking gear only supports an old revision of E1.31 Called Revision 20. To use this older version you need to change a line in ola-e131.conf. Change this line&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
revision = 0.46&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to this line&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
revision = 0.2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Only do this if the older gear cannot accept the standardized version of E1.31.&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
If you are planning to receive large amounts of multicast traffic 20+, you will need to adjust the maximum amount of igmp memberships.&lt;br /&gt;
Use the following command:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo &amp;lt;number_of_memberships&amp;gt; | sudo tee /proc/sys/net/ipv4/igmp_max_memberships&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example this command sets the maximum number of igmp memberships to 256:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo 256 | sudo tee /proc/sys/net/ipv4/igmp_max_memberships&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Eurolite USB DMX512 PRO==&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
Sometime the cdc_acm kernel module claims the device. If this happens you'll see errors like &amp;quot;Cannot claim device&amp;quot; and/or &amp;quot;another process has device opened for exclusive access&amp;quot;. To avoid this you can remove the module (rmmod). A udev rule like what is used for the Anyma device should also work.&lt;br /&gt;
&lt;br /&gt;
You may also need the following [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;
SUBSYSTEMS==&amp;quot;usb&amp;quot;, ATTRS{idVendor}==&amp;quot;04d8&amp;quot;,ATTRS{idProduct}==&amp;quot;0xfa63&amp;quot;, MODE=&amp;quot;0660&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Mac===&lt;br /&gt;
&lt;br /&gt;
Install the [http://code.google.com/p/open-lighting/downloads/detail?name=euroliteusbshield.dmg&amp;amp;can=2&amp;amp;q=#makechanges KEXT].&lt;br /&gt;
&lt;br /&gt;
== General Purpose I/O ==&lt;br /&gt;
&lt;br /&gt;
This has only been tested on a Raspberry Pi device. You can find information about the GPIO features on a Pi at [http://elinux.org/RPi_Low-level_peripherals elinux.org]&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
You'll need to export the GPIO pins. For example, to use pin 23, as root run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ echo 23 &amp;gt; /sys/class/gpio/export&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You'll also need to ensure that the user olad runs as has permission to change the level of the Pins. Each of the following files should be writeable:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/sys/class/gpio/gpio23/direction&lt;br /&gt;
/sys/class/gpio/gpio23/value&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You could for example do this by running the following as root (assuming olad is in the plugdev group, which you can check with &amp;quot;groups olad&amp;quot;)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chgrp plugdev /sys/class/gpio/gpio23/direction&lt;br /&gt;
chmod g+w /sys/class/gpio/gpio23/direction&lt;br /&gt;
chgrp plugdev /sys/class/gpio/gpio23/value&lt;br /&gt;
chmod g+w /sys/class/gpio/gpio23/value&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ja Rule ==&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
You need the following [http://www.reactivated.net/writing_udev_rules.html udev rule] like this in /etc/udev/rules.d/10-local.rules&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SUBSYSTEM==&amp;quot;usb|usb_device&amp;quot;, ACTION==&amp;quot;add&amp;quot;, ATTRS{idVendor}==&amp;quot;1209&amp;quot;, ATTRS{idProduct}==&amp;quot;aced&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot; MODE=&amp;quot;660&amp;quot;&lt;br /&gt;
SUBSYSTEM==&amp;quot;usb|usb_device&amp;quot;, ACTION==&amp;quot;add&amp;quot;, ATTRS{idVendor}==&amp;quot;1209&amp;quot;, ATTRS{idProduct}==&amp;quot;acee&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot; MODE=&amp;quot;660&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== OSC ==&lt;br /&gt;
&lt;br /&gt;
The message types are described in the  [http://opensoundcontrol.org/spec-1_0 OSC Spec] .&lt;br /&gt;
&lt;br /&gt;
=== Receiving DMX ===&lt;br /&gt;
&lt;br /&gt;
The OSC plugin accepts a number of message formats:&lt;br /&gt;
&lt;br /&gt;
{| border=1 cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
! Path !! OSC Message Type !! Data !! Comments &lt;br /&gt;
|-&lt;br /&gt;
|| /path || 'b' || Blob of length 1 to 512. || The most efficient way of sending DMX data over OSC.&lt;br /&gt;
|-&lt;br /&gt;
|| /path/N || 'i' || Slot value from 0 to 255 || Update a single slot. N is the slot number from 1 - 512. &lt;br /&gt;
|-&lt;br /&gt;
|| /path/N || 'f' || Slot value from 0.0 to 1.0 || Update a single slot. N is the slot number from 1 - 512. &lt;br /&gt;
|-&lt;br /&gt;
|| /path || 'ii' || Slot number from 0 to 511, slot value from 0 to 255 || Update a single slot.&lt;br /&gt;
|-&lt;br /&gt;
|| /path || 'if' || Slot number from 0 to 511, slot value from 0.0 to 1.0 || Update a single slot.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Sending DMX ===&lt;br /&gt;
&lt;br /&gt;
The following formats are available for sending data:&lt;br /&gt;
&lt;br /&gt;
{| border=1 cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
! Config Option !! Path !! OSC Message Type !! Data !! Comments &lt;br /&gt;
|-&lt;br /&gt;
|| blob || /path || 'b' || Blob of length 1 to 512. || The most efficient way of sending DMX data over OSC.&lt;br /&gt;
|-&lt;br /&gt;
|| float_array || /path || N * 'f' || Slot values from 0.0 to 1.0 ||  Not quite as efficient as the blob type.&lt;br /&gt;
|-&lt;br /&gt;
|| int_array || /path || N * 'i' || Slot values from 0 to 255 ||  Not quite as efficient as the blob type.&lt;br /&gt;
|-&lt;br /&gt;
|| individual_float || /path/N || 'f' || Slot value from 0.0 to 1.0 || N is the slot number from 1 - 512.  Results in a lot of messages being sent, avoid using this. &lt;br /&gt;
|-&lt;br /&gt;
|| individual_int || /path/N || 'i' || Slot value from 0 to 255 || N is the slot number from 1 - 512. Results in a lot of messages being sent, avoid using this. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Open DMX USB / FTDI RS485 ==&lt;br /&gt;
&lt;br /&gt;
There are two options, the 'Open DMX' plugin that requires the kernel module and the native FTDI driver.&lt;br /&gt;
&lt;br /&gt;
The Open DMX Plugin requires the dmx_usb kernel module, which means it's Linux only. The FTDI driver can be used on either Mac or Linux. See [https://www.openlighting.org/ola/get-help/ola-faq/#What_is_the_difference_between_the_different_USB_plugins here] for more info.&lt;br /&gt;
&lt;br /&gt;
If you're having issues with the device failing to transmit DMX, these links might help:&lt;br /&gt;
*[http://stevenbreuls.com/2014/04/dmx-rs485-wrong-board-fix/ http://stevenbreuls.com/2014/04/dmx-rs485-wrong-board-fix/]&lt;br /&gt;
*[http://falconchristmas.com/forum/index.php/topic,858.msg9877.html#msg9877 http://falconchristmas.com/forum/index.php/topic,858.msg9877.html#msg9877]&lt;br /&gt;
&lt;br /&gt;
=== Linux, Open DMX Kernel Module ===&lt;br /&gt;
&lt;br /&gt;
Make sure the opendmx plugin is enabled.&lt;br /&gt;
Make sure the dmx_usb kernel module is loaded. &lt;br /&gt;
&lt;br /&gt;
===Mac FTDI ===&lt;br /&gt;
&lt;br /&gt;
You must have libftdi-dev installed before you run ./configure.  Otherwise the FTDI DMX plugin won't show up in the list of OLA plugins. &lt;br /&gt;
&lt;br /&gt;
Enable the FTDI driver (ola-ftdidmx ) and disable the USB Serial and Open DMX drivers (ola-usbserial.conf &amp;amp;  ola-opendmx.conf) &lt;br /&gt;
&lt;br /&gt;
=== Linux, FTDI ===&lt;br /&gt;
&lt;br /&gt;
Same as Mac, but you also need to make sure that you add the following [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 for ftdi devices&lt;br /&gt;
SUBSYSTEM==&amp;quot;usb|usb_device&amp;quot;, ACTION==&amp;quot;add&amp;quot;, ATTRS{idVendor}==&amp;quot;0403&amp;quot;, ATTRS{idProduct}==&amp;quot;6001&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Scanlime Fadecandy==&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 Scanlime Fadecandy device&lt;br /&gt;
SUBSYSTEM==&amp;quot;usb|usb_device&amp;quot;, ACTION==&amp;quot;add&amp;quot;, ATTRS{idVendor}==&amp;quot;1d50&amp;quot;, ATTRS{idProduct}==&amp;quot;607a&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SPI ==&lt;br /&gt;
&lt;br /&gt;
This plugin is designed for the Raspberry Pi. It may work on other hardware, but that's up to you. For instructions on the hardware side of things see [[OLA LED Pixels]].&lt;br /&gt;
&lt;br /&gt;
Enable the spi-bcm2708 module, depending on the version of Raspbian you're running it will either be via Device Tree or by editing /etc/modprobe.d/raspi-blacklist.conf.&lt;br /&gt;
&lt;br /&gt;
For recent versions you can use raspi-config's Advanced Options then SPI, see here for more info:&lt;br /&gt;
https://www.raspberrypi.org/documentation/configuration/raspi-config.md&lt;br /&gt;
&lt;br /&gt;
Or alternatively by manually enabling the SPI Device Tree by uncommenting the dtparam=spi=on line in /boot/config.txt as explained here:&lt;br /&gt;
https://www.raspberrypi.org/documentation/configuration/device-tree.md&lt;br /&gt;
&lt;br /&gt;
For older machines, edit /etc/modprobe.d/raspi-blacklist.conf and comment out the &amp;quot;blacklist spi-bcm2708&amp;quot; line. The file should look something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# blacklist spi and i2c by default (many users don't need them)&lt;br /&gt;
&lt;br /&gt;
#blacklist spi-bcm2708&lt;br /&gt;
blacklist i2c-bcm2708&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In both cases, to allow non-root access, add the following [http://www.reactivated.net/writing_udev_rules.html udev rule] like this in /etc/udev/rules.d/99-spi.rules&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SUBSYSTEM==&amp;quot;spidev&amp;quot;, MODE=&amp;quot;0666&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;
==UART native DMX==&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
====Raspberry Pi====&lt;br /&gt;
&lt;br /&gt;
First stop anything else using the serial port; either use raspi-config (Advanced Options, Serial) or follow the instructions here:&lt;br /&gt;
&lt;br /&gt;
[http://elinux.org/RPi_Serial_Connection#Preventing_Linux_using_the_serial_port http://elinux.org/RPi_Serial_Connection#Preventing_Linux_using_the_serial_port]&lt;br /&gt;
&lt;br /&gt;
To make this work, you will also need to raise the Pi's UART clock, because the default one maxes out at 115kbaud. So you will need to add&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
init_uart_clock=16000000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to the /boot/config.txt file on the system. This won't affect any other user of the serial port provided you have a recent kernel.&lt;br /&gt;
&lt;br /&gt;
Another useful link is [http://fw.hardijzer.nl/?p=138 http://fw.hardijzer.nl/?p=138].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Raspberry Pi 3=====&lt;br /&gt;
For the Raspberry Pi 3 you need to disable Bluetooth and reclaim the PL011 UART from it.&lt;br /&gt;
&lt;br /&gt;
Add:&lt;br /&gt;
 dtoverlay=pi3-disable-bt&lt;br /&gt;
to your config.txt file in the /boot directory.&lt;br /&gt;
&lt;br /&gt;
According to this, you can also swap them, so Bluetooth uses the software UART:&lt;br /&gt;
[http://spellfoundry.com/2016/05/29/configuring-gpio-serial-port-raspbian-jessie-including-pi-3/ http://spellfoundry.com/2016/05/29/configuring-gpio-serial-port-raspbian-jessie-including-pi-3/]&lt;br /&gt;
&lt;br /&gt;
If you use this instead:&lt;br /&gt;
dtoverlay=pi3-miniuart-bt&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-usbserial.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;
==DMXter4 RDM and MiniDMXter 4==&lt;br /&gt;
Navigate to &amp;quot;RDM Controller&amp;quot; in the menu. Then press &amp;lt;LEFT&amp;gt; and &amp;lt;RIGHT&amp;gt; together, then also press &amp;lt;YES/Q&amp;gt;, then release &amp;lt;YES/Q&amp;gt;, finally release &amp;lt;LEFT&amp;gt; and &amp;lt;RIGHT&amp;gt;. It will then show USB DONGLE MODE and be discoverable in OLA.&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 for  [http://downloads.openlighting.org/Velleman%20kext.dmg OS X 10.9 and above] or  [http://code.google.com/p/open-lighting/downloads/detail?name=libdmxusbshield.dmg OS 10.8 and below]. 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;br /&gt;
&lt;br /&gt;
Some people have reported issues with the K8062 on Ubuntu 14.04.&lt;br /&gt;
Symptoms: When you plug in your K8062, Ubuntu responds with Kernel Panic.&lt;br /&gt;
Problem: comedi and vmk60xx kernel modules are loaded and crash the kernel.&lt;br /&gt;
Solution: WARNING! Attempt at your own risk.&lt;br /&gt;
# Blacklist comedi and vmk60xx in /etc/modprobe.d/blacklist.conf, see [https://wiki.debian.org/KernelModuleBlacklisting https://wiki.debian.org/KernelModuleBlacklisting]&lt;br /&gt;
# Reboot and then run lsusb in the terminal. (Make sure K8062 is connected.)&lt;br /&gt;
# After a short hang, the K8062 should come up as &amp;quot;Velleman Components, Inc.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==KarateLight, KarateDMX==&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/81-karate.rules&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# udev rules file for the karate-device&lt;br /&gt;
KERNEL==&amp;quot;ttyACM?&amp;quot;, ATTRS{product}==&amp;quot;DMX2USB simple&amp;quot;, SYMLINK+=&amp;quot;kldmx0&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then make sure the user olad runs as is a member of 'dialout' which is the default group owning ttyACM?.&lt;/div&gt;</summary>
		<author><name>Peternewman</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=Open_Lighting_PIDs&amp;diff=5879</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=5879"/>
				<updated>2017-08-13T02:48:00Z</updated>
		
		<summary type="html">&lt;p&gt;Peternewman: Fix the link&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;
For the live list in use, visit the  [http://rdm.openlighting.org/pid/manufacturer?manufacturer=31344 RDM Parameter Index].&lt;br /&gt;
&lt;br /&gt;
===0x8000===&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;br /&gt;
&lt;br /&gt;
===0x8001===&lt;br /&gt;
This just returns the current version of the OLA code that's running. It's a manufacturer specific PID used by the dummy responder, so that it provides a manufacturer specific PID for testing purposes.&lt;br /&gt;
&lt;br /&gt;
===0x8002===&lt;br /&gt;
GETs / SETs the device model.&lt;br /&gt;
&lt;br /&gt;
===0x8003===&lt;br /&gt;
GET a list of device models that can be used&lt;br /&gt;
&lt;br /&gt;
===0x8004===&lt;br /&gt;
Reserved&lt;br /&gt;
&lt;br /&gt;
===0x8005===&lt;br /&gt;
GET  / SET the pixel type&lt;br /&gt;
&lt;br /&gt;
===0x8006===&lt;br /&gt;
GET  / SET the pixel count&lt;/div&gt;</summary>
		<author><name>Peternewman</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OLA_Device_Specific_Configuration&amp;diff=5878</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=5878"/>
				<updated>2017-04-28T19:10:47Z</updated>
		
		<summary type="html">&lt;p&gt;Peternewman: Clarify and tidy&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;
==Streaming ACN / E1.31==&lt;br /&gt;
&lt;br /&gt;
===All Platforms===&lt;br /&gt;
Some older networking gear only supports an old revision of E1.31 Called Revision 20. To use this older version you need to change a line in ola-e131.conf. Change this line&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
revision = 0.46&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to this line&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
revision = 0.2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Only do this if the older gear cannot accept the standardized version of E1.31.&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
If you are planning to receive large amounts of multicast traffic 20+, you will need to adjust the maximum amount of igmp memberships.&lt;br /&gt;
Use the following command:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo &amp;lt;number_of_memberships&amp;gt; | sudo tee /proc/sys/net/ipv4/igmp_max_memberships&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example this command sets the maximum number of igmp memberships to 256:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo 256 | sudo tee /proc/sys/net/ipv4/igmp_max_memberships&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Eurolite USB DMX512 PRO==&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
Sometime the cdc_acm kernel module claims the device. If this happens you'll see errors like &amp;quot;Cannot claim device&amp;quot; and/or &amp;quot;another process has device opened for exclusive access&amp;quot;. To avoid this you can remove the module (rmmod). A udev rule like what is used for the Anyma device should also work.&lt;br /&gt;
&lt;br /&gt;
You may also need the following [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;
SUBSYSTEMS==&amp;quot;usb&amp;quot;, ATTRS{idVendor}==&amp;quot;04d8&amp;quot;,ATTRS{idProduct}==&amp;quot;0xfa63&amp;quot;, MODE=&amp;quot;0660&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Mac===&lt;br /&gt;
&lt;br /&gt;
Install the [http://code.google.com/p/open-lighting/downloads/detail?name=euroliteusbshield.dmg&amp;amp;can=2&amp;amp;q=#makechanges KEXT].&lt;br /&gt;
&lt;br /&gt;
== General Purpose I/O ==&lt;br /&gt;
&lt;br /&gt;
This has only been tested on a Raspberry Pi device. You can find information about the GPIO features on a Pi at [http://elinux.org/RPi_Low-level_peripherals elinux.org]&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
You'll need to export the GPIO pins. For example, to use pin 23, as root run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ echo 23 &amp;gt; /sys/class/gpio/export&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You'll also need to ensure that the user olad runs as has permission to change the level of the Pins. Each of the following files should be writeable:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/sys/class/gpio/gpio23/direction&lt;br /&gt;
/sys/class/gpio/gpio23/value&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You could for example do this by running the following as root (assuming olad is in the plugdev group, which you can check with &amp;quot;groups olad&amp;quot;)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chgrp plugdev /sys/class/gpio/gpio23/direction&lt;br /&gt;
chmod g+w /sys/class/gpio/gpio23/direction&lt;br /&gt;
chgrp plugdev /sys/class/gpio/gpio23/value&lt;br /&gt;
chmod g+w /sys/class/gpio/gpio23/value&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ja Rule ==&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
You need the following [http://www.reactivated.net/writing_udev_rules.html udev rule] like this in /etc/udev/rules.d/10-local.rules&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SUBSYSTEM==&amp;quot;usb|usb_device&amp;quot;, ACTION==&amp;quot;add&amp;quot;, ATTRS{idVendor}==&amp;quot;1209&amp;quot;, ATTRS{idProduct}==&amp;quot;aced&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot; MODE=&amp;quot;660&amp;quot;&lt;br /&gt;
SUBSYSTEM==&amp;quot;usb|usb_device&amp;quot;, ACTION==&amp;quot;add&amp;quot;, ATTRS{idVendor}==&amp;quot;1209&amp;quot;, ATTRS{idProduct}==&amp;quot;acee&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot; MODE=&amp;quot;660&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== OSC ==&lt;br /&gt;
&lt;br /&gt;
The message types are described in the  [http://opensoundcontrol.org/spec-1_0 OSC Spec] .&lt;br /&gt;
&lt;br /&gt;
=== Receiving DMX ===&lt;br /&gt;
&lt;br /&gt;
The OSC plugin accepts a number of message formats:&lt;br /&gt;
&lt;br /&gt;
{| border=1 cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
! Path !! OSC Message Type !! Data !! Comments &lt;br /&gt;
|-&lt;br /&gt;
|| /path || 'b' || Blob of length 1 to 512. || The most efficient way of sending DMX data over OSC.&lt;br /&gt;
|-&lt;br /&gt;
|| /path/N || 'i' || Slot value from 0 to 255 || Update a single slot. N is the slot number from 1 - 512. &lt;br /&gt;
|-&lt;br /&gt;
|| /path/N || 'f' || Slot value from 0.0 to 1.0 || Update a single slot. N is the slot number from 1 - 512. &lt;br /&gt;
|-&lt;br /&gt;
|| /path || 'ii' || Slot number from 0 to 511, slot value from 0 to 255 || Update a single slot.&lt;br /&gt;
|-&lt;br /&gt;
|| /path || 'if' || Slot number from 0 to 511, slot value from 0.0 to 1.0 || Update a single slot.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Sending DMX ===&lt;br /&gt;
&lt;br /&gt;
The following formats are available for sending data:&lt;br /&gt;
&lt;br /&gt;
{| border=1 cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
! Config Option !! Path !! OSC Message Type !! Data !! Comments &lt;br /&gt;
|-&lt;br /&gt;
|| blob || /path || 'b' || Blob of length 1 to 512. || The most efficient way of sending DMX data over OSC.&lt;br /&gt;
|-&lt;br /&gt;
|| float_array || /path || N * 'f' || Slot values from 0.0 to 1.0 ||  Not quite as efficient as the blob type.&lt;br /&gt;
|-&lt;br /&gt;
|| int_array || /path || N * 'i' || Slot values from 0 to 255 ||  Not quite as efficient as the blob type.&lt;br /&gt;
|-&lt;br /&gt;
|| individual_float || /path/N || 'f' || Slot value from 0.0 to 1.0 || N is the slot number from 1 - 512.  Results in a lot of messages being sent, avoid using this. &lt;br /&gt;
|-&lt;br /&gt;
|| individual_int || /path/N || 'i' || Slot value from 0 to 255 || N is the slot number from 1 - 512. Results in a lot of messages being sent, avoid using this. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Open DMX USB / FTDI RS485 ==&lt;br /&gt;
&lt;br /&gt;
There are two options, the 'Open DMX' plugin that requires the kernel module and the native FTDI driver.&lt;br /&gt;
&lt;br /&gt;
The Open DMX Plugin requires the dmx_usb kernel module, which means it's Linux only. The FTDI driver can be used on either Mac or Linux. See [https://www.openlighting.org/ola/get-help/ola-faq/#What_is_the_difference_between_the_different_USB_plugins here] for more info.&lt;br /&gt;
&lt;br /&gt;
If you're having issues with the device failing to transmit DMX, these links might help:&lt;br /&gt;
*[http://stevenbreuls.com/2014/04/dmx-rs485-wrong-board-fix/ http://stevenbreuls.com/2014/04/dmx-rs485-wrong-board-fix/]&lt;br /&gt;
*[http://falconchristmas.com/forum/index.php/topic,858.msg9877.html#msg9877 http://falconchristmas.com/forum/index.php/topic,858.msg9877.html#msg9877]&lt;br /&gt;
&lt;br /&gt;
=== Linux, Open DMX Kernel Module ===&lt;br /&gt;
&lt;br /&gt;
Make sure the opendmx plugin is enabled.&lt;br /&gt;
Make sure the dmx_usb kernel module is loaded. &lt;br /&gt;
&lt;br /&gt;
===Mac FTDI ===&lt;br /&gt;
&lt;br /&gt;
You must have libftdi-dev installed before you run ./configure.  Otherwise the FTDI DMX plugin won't show up in the list of OLA plugins. &lt;br /&gt;
&lt;br /&gt;
Enable the FTDI driver (ola-ftdidmx ) and disable the USB Serial and Open DMX drivers (ola-usbserial.conf &amp;amp;  ola-opendmx.conf) &lt;br /&gt;
&lt;br /&gt;
=== Linux, FTDI ===&lt;br /&gt;
&lt;br /&gt;
Same as Mac, but you also need to make sure that you add the following [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 for ftdi devices&lt;br /&gt;
SUBSYSTEM==&amp;quot;usb|usb_device&amp;quot;, ACTION==&amp;quot;add&amp;quot;, ATTRS{idVendor}==&amp;quot;0403&amp;quot;, ATTRS{idProduct}==&amp;quot;6001&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Scanlime Fadecandy==&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 Scanlime Fadecandy device&lt;br /&gt;
SUBSYSTEM==&amp;quot;usb|usb_device&amp;quot;, ACTION==&amp;quot;add&amp;quot;, ATTRS{idVendor}==&amp;quot;1d50&amp;quot;, ATTRS{idProduct}==&amp;quot;607a&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SPI ==&lt;br /&gt;
&lt;br /&gt;
This plugin is designed for the Raspberry Pi. It may work on other hardware, but that's up to you. For instructions on the hardware side of things see [[OLA LED Pixels]].&lt;br /&gt;
&lt;br /&gt;
Enable the spi-bcm2708 module, depending on the version of Raspbian you're running it will either be via Device Tree or by editing /etc/modprobe.d/raspi-blacklist.conf.&lt;br /&gt;
&lt;br /&gt;
For recent versions you can use raspi-config's Advanced Options then SPI, see here for more info:&lt;br /&gt;
https://www.raspberrypi.org/documentation/configuration/raspi-config.md&lt;br /&gt;
&lt;br /&gt;
Or alternatively by manually enabling the SPI Device Tree by uncommenting the dtparam=spi=on line in /boot/config.txt as explained here:&lt;br /&gt;
https://www.raspberrypi.org/documentation/configuration/device-tree.md&lt;br /&gt;
&lt;br /&gt;
For older machines, edit /etc/modprobe.d/raspi-blacklist.conf and comment out the &amp;quot;blacklist spi-bcm2708&amp;quot; line. The file should look something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# blacklist spi and i2c by default (many users don't need them)&lt;br /&gt;
&lt;br /&gt;
#blacklist spi-bcm2708&lt;br /&gt;
blacklist i2c-bcm2708&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In both cases, to allow non-root access, add the following [http://www.reactivated.net/writing_udev_rules.html udev rule] like this in /etc/udev/rules.d/99-spi.rules&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SUBSYSTEM==&amp;quot;spidev&amp;quot;, MODE=&amp;quot;0666&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;
==UART native DMX==&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
====Raspberry Pi====&lt;br /&gt;
&lt;br /&gt;
First stop anything else using the serial port; either use raspi-config (Advanced Options, Serial) or follow the instructions here:&lt;br /&gt;
&lt;br /&gt;
[http://elinux.org/RPi_Serial_Connection#Preventing_Linux_using_the_serial_port http://elinux.org/RPi_Serial_Connection#Preventing_Linux_using_the_serial_port]&lt;br /&gt;
&lt;br /&gt;
To make this work, you will also need to raise the Pi's UART clock, because the default one maxes out at 115kbaud. So you will need to add&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
init_uart_clock=16000000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to the /boot/config.txt file on the system. This won't affect any other user of the serial port provided you have a recent kernel.&lt;br /&gt;
&lt;br /&gt;
Another useful link is [http://fw.hardijzer.nl/?p=138 http://fw.hardijzer.nl/?p=138].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Raspberry Pi 3=====&lt;br /&gt;
For the Raspberry Pi 3 you need to disable Bluetooth and reclaim the PL011 UART from it.&lt;br /&gt;
&lt;br /&gt;
Add:&lt;br /&gt;
 dtoverlay=pi3-disable-bt&lt;br /&gt;
to your config.txt file in the /boot directory.&lt;br /&gt;
&lt;br /&gt;
According to this, you can also swap them, so Bluetooth uses the software UART:&lt;br /&gt;
[http://spellfoundry.com/2016/05/29/configuring-gpio-serial-port-raspbian-jessie-including-pi-3/ http://spellfoundry.com/2016/05/29/configuring-gpio-serial-port-raspbian-jessie-including-pi-3/]&lt;br /&gt;
&lt;br /&gt;
If you use this instead:&lt;br /&gt;
dtoverlay=pi3-miniuart-bt&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-usbserial.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;
==DMXter4 RDM and MiniDMXter 4==&lt;br /&gt;
Navigate to &amp;quot;RDM Controller&amp;quot; in the menu. Then press &amp;lt;LEFT&amp;gt; and &amp;lt;RIGHT&amp;gt; together, then also press &amp;lt;YES/Q&amp;gt;, then release &amp;lt;YES/Q&amp;gt;, finally release &amp;lt;LEFT&amp;gt; and &amp;lt;RIGHT&amp;gt;. It will then show USB DONGLE MODE and be discoverable in OLA.&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 for  [http://downloads.openlighting.org/Velleman%20kext.dmg OS X 10.9 and above] or  [http://code.google.com/p/open-lighting/downloads/detail?name=libdmxusbshield.dmg OS 10.8 and below]. 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;br /&gt;
&lt;br /&gt;
Some people have reported issues with the K8062 on Ubuntu 14.04.&lt;br /&gt;
Symptoms: When you plug in your K8062, Ubuntu responds with Kernel Panic.&lt;br /&gt;
Problem: comedi and vmk60xx kernel modules are loaded and crash the kernel.&lt;br /&gt;
Solution: WARNING! Attempt at your own risk.&lt;br /&gt;
# Blacklist comedi and vmk60xx in /etc/modprobe.d/blacklist.conf, see [https://wiki.debian.org/KernelModuleBlacklisting https://wiki.debian.org/KernelModuleBlacklisting]&lt;br /&gt;
# Reboot and then run lsusb in the terminal. (Make sure K8062 is connected.)&lt;br /&gt;
# After a short hang, the K8062 should come up as &amp;quot;Velleman Components, Inc.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==KarateLight, KarateDMX==&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/81-karate.rules&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# udev rules file for the karate-device&lt;br /&gt;
KERNEL==&amp;quot;ttyACM?&amp;quot;, ATTRS{product}==&amp;quot;DMX2USB simple&amp;quot;, SYMLINK+=&amp;quot;kldmx0&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then make sure the user olad runs as is a member of 'dialout' which is the default group owning ttyACM?.&lt;/div&gt;</summary>
		<author><name>Peternewman</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OLA_Device_Specific_Configuration&amp;diff=5877</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=5877"/>
				<updated>2017-04-28T19:09:09Z</updated>
		
		<summary type="html">&lt;p&gt;Peternewman: /* DMXter4 RDM */ Add the MiniDMXter 4&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;
==Streaming ACN / E1.31==&lt;br /&gt;
&lt;br /&gt;
===All Platforms===&lt;br /&gt;
Some older networking gear only supports an old revision of E1.31 Called Revision 20. To use this older version you need to change a line in ola-e131.conf. Change this line&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
revision = 0.46&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to this line&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
revision = 0.2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Only do this if the older gear cannot accept the standardized version of E1.31.&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
If you are planning to receive large amounts of multicast traffic 20+, you will need to adjust the maximum amount of igmp memberships.&lt;br /&gt;
Use the following command:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo &amp;lt;number_of_memberships&amp;gt; | sudo tee /proc/sys/net/ipv4/igmp_max_memberships&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example this command sets the maximum number of igmp memberships to 256:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo 256 | sudo tee /proc/sys/net/ipv4/igmp_max_memberships&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Eurolite USB DMX512 PRO==&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
Sometime the cdc_acm kernel module claims the device. If this happens you'll see errors like &amp;quot;Cannot claim device&amp;quot; and/or &amp;quot;another process has device opened for exclusive access&amp;quot;. To avoid this you can remove the module (rmmod). A udev rule like what is used for the Anyma device should also work.&lt;br /&gt;
&lt;br /&gt;
You may also need the following [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;
SUBSYSTEMS==&amp;quot;usb&amp;quot;, ATTRS{idVendor}==&amp;quot;04d8&amp;quot;,ATTRS{idProduct}==&amp;quot;0xfa63&amp;quot;, MODE=&amp;quot;0660&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Mac===&lt;br /&gt;
&lt;br /&gt;
Install the [http://code.google.com/p/open-lighting/downloads/detail?name=euroliteusbshield.dmg&amp;amp;can=2&amp;amp;q=#makechanges KEXT].&lt;br /&gt;
&lt;br /&gt;
== General Purpose I/O ==&lt;br /&gt;
&lt;br /&gt;
This has only been tested on a Raspberry Pi device. You can find information about the GPIO features on a Pi at [http://elinux.org/RPi_Low-level_peripherals elinux.org]&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
You'll need to export the GPIO pins. For example, to use pin 23, as root run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ echo 23 &amp;gt; /sys/class/gpio/export&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You'll also need to ensure that the user olad runs as has permission to change the level of the Pins. Each of the following files should be writeable:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/sys/class/gpio/gpio23/direction&lt;br /&gt;
/sys/class/gpio/gpio23/value&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You could for example do this by running the following as root (assuming olad is in the plugdev group, which you can check with &amp;quot;groups olad&amp;quot;)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chgrp plugdev /sys/class/gpio/gpio23/direction&lt;br /&gt;
chmod g+w /sys/class/gpio/gpio23/direction&lt;br /&gt;
chgrp plugdev /sys/class/gpio/gpio23/value&lt;br /&gt;
chmod g+w /sys/class/gpio/gpio23/value&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ja Rule ==&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
You need the following [http://www.reactivated.net/writing_udev_rules.html udev rule] like this in /etc/udev/rules.d/10-local.rules&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SUBSYSTEM==&amp;quot;usb|usb_device&amp;quot;, ACTION==&amp;quot;add&amp;quot;, ATTRS{idVendor}==&amp;quot;1209&amp;quot;, ATTRS{idProduct}==&amp;quot;aced&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot; MODE=&amp;quot;660&amp;quot;&lt;br /&gt;
SUBSYSTEM==&amp;quot;usb|usb_device&amp;quot;, ACTION==&amp;quot;add&amp;quot;, ATTRS{idVendor}==&amp;quot;1209&amp;quot;, ATTRS{idProduct}==&amp;quot;acee&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot; MODE=&amp;quot;660&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== OSC ==&lt;br /&gt;
&lt;br /&gt;
The message types are described in the  [http://opensoundcontrol.org/spec-1_0 OSC Spec] .&lt;br /&gt;
&lt;br /&gt;
=== Receiving DMX ===&lt;br /&gt;
&lt;br /&gt;
The OSC plugin accepts a number of message formats:&lt;br /&gt;
&lt;br /&gt;
{| border=1 cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
! Path !! OSC Message Type !! Data !! Comments &lt;br /&gt;
|-&lt;br /&gt;
|| /path || 'b' || Blob of length 1 to 512. || The most efficient way of sending DMX data over OSC.&lt;br /&gt;
|-&lt;br /&gt;
|| /path/N || 'i' || Slot value from 0 to 255 || Update a single slot. N is the slot number from 1 - 512. &lt;br /&gt;
|-&lt;br /&gt;
|| /path/N || 'f' || Slot value from 0.0 to 1.0 || Update a single slot. N is the slot number from 1 - 512. &lt;br /&gt;
|-&lt;br /&gt;
|| /path || 'ii' || Slot number from 0 to 511, slot value from 0 to 255 || Update a single slot.&lt;br /&gt;
|-&lt;br /&gt;
|| /path || 'if' || Slot number from 0 to 511, slot value from 0.0 to 1.0 || Update a single slot.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Sending DMX ===&lt;br /&gt;
&lt;br /&gt;
The following formats are available for sending data:&lt;br /&gt;
&lt;br /&gt;
{| border=1 cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
! Config Option !! Path !! OSC Message Type !! Data !! Comments &lt;br /&gt;
|-&lt;br /&gt;
|| blob || /path || 'b' || Blob of length 1 to 512. || The most efficient way of sending DMX data over OSC.&lt;br /&gt;
|-&lt;br /&gt;
|| float_array || /path || N * 'f' || Slot values from 0.0 to 1.0 ||  Not quite as efficient as the blob type.&lt;br /&gt;
|-&lt;br /&gt;
|| int_array || /path || N * 'i' || Slot values from 0 to 255 ||  Not quite as efficient as the blob type.&lt;br /&gt;
|-&lt;br /&gt;
|| individual_float || /path/N || 'f' || Slot value from 0.0 to 1.0 || N is the slot number from 1 - 512.  Results in a lot of messages being sent, avoid using this. &lt;br /&gt;
|-&lt;br /&gt;
|| individual_int || /path/N || 'i' || Slot value from 0 to 255 || N is the slot number from 1 - 512. Results in a lot of messages being sent, avoid using this. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Open DMX USB / FTDI RS485 ==&lt;br /&gt;
&lt;br /&gt;
There are two options, the 'Open DMX' plugin that requires the kernel module and the native FTDI driver.&lt;br /&gt;
&lt;br /&gt;
The Open DMX Plugin requires the dmx_usb kernel module, which means it's Linux only. The FTDI driver can be used on either Mac or Linux. See [https://www.openlighting.org/ola/get-help/ola-faq/#What_is_the_difference_between_the_different_USB_plugins here] for more info.&lt;br /&gt;
&lt;br /&gt;
If you're having issues with the device failing to transmit DMX, these links might help:&lt;br /&gt;
*[http://stevenbreuls.com/2014/04/dmx-rs485-wrong-board-fix/ http://stevenbreuls.com/2014/04/dmx-rs485-wrong-board-fix/]&lt;br /&gt;
*[http://falconchristmas.com/forum/index.php/topic,858.msg9877.html#msg9877 http://falconchristmas.com/forum/index.php/topic,858.msg9877.html#msg9877]&lt;br /&gt;
&lt;br /&gt;
=== Linux, Open DMX Kernel Module ===&lt;br /&gt;
&lt;br /&gt;
Make sure the opendmx plugin is enabled.&lt;br /&gt;
Make sure the dmx_usb kernel module is loaded. &lt;br /&gt;
&lt;br /&gt;
===Mac FTDI ===&lt;br /&gt;
&lt;br /&gt;
You must have libftdi-dev installed before you run ./configure.  Otherwise the FTDI DMX plugin won't show up in the list of OLA plugins. &lt;br /&gt;
&lt;br /&gt;
Enable the FTDI driver (ola-ftdidmx ) and disable the USB Serial and Open DMX drivers (ola-usbserial.conf &amp;amp;  ola-opendmx.conf) &lt;br /&gt;
&lt;br /&gt;
=== Linux, FTDI ===&lt;br /&gt;
&lt;br /&gt;
Same as Mac, but you also need to make sure that you add the following [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 for ftdi devices&lt;br /&gt;
SUBSYSTEM==&amp;quot;usb|usb_device&amp;quot;, ACTION==&amp;quot;add&amp;quot;, ATTRS{idVendor}==&amp;quot;0403&amp;quot;, ATTRS{idProduct}==&amp;quot;6001&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Scanlime Fadecandy==&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 Scanlime Fadecandy device&lt;br /&gt;
SUBSYSTEM==&amp;quot;usb|usb_device&amp;quot;, ACTION==&amp;quot;add&amp;quot;, ATTRS{idVendor}==&amp;quot;1d50&amp;quot;, ATTRS{idProduct}==&amp;quot;607a&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SPI ==&lt;br /&gt;
&lt;br /&gt;
This plugin is designed for the Raspberry Pi. It may work on other hardware, but that's up to you. For instructions on the hardware side of things see [[OLA LED Pixels]].&lt;br /&gt;
&lt;br /&gt;
Enable the spi-bcm2708 module, depending on the version of Raspbian you're running it will either be via Device Tree or by editing /etc/modprobe.d/raspi-blacklist.conf.&lt;br /&gt;
&lt;br /&gt;
For recent versions you can use raspi-config's Advanced Options then SPI, see here for more info:&lt;br /&gt;
https://www.raspberrypi.org/documentation/configuration/raspi-config.md&lt;br /&gt;
&lt;br /&gt;
Or alternatively by manually enabling the SPI Device Tree by uncommenting the dtparam=spi=on line in /boot/config.txt as explained here:&lt;br /&gt;
https://www.raspberrypi.org/documentation/configuration/device-tree.md&lt;br /&gt;
&lt;br /&gt;
For older machines, edit /etc/modprobe.d/raspi-blacklist.conf and comment out the &amp;quot;blacklist spi-bcm2708&amp;quot; line. The file should look something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# blacklist spi and i2c by default (many users don't need them)&lt;br /&gt;
&lt;br /&gt;
#blacklist spi-bcm2708&lt;br /&gt;
blacklist i2c-bcm2708&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In both cases, to allow non-root access, add the following [http://www.reactivated.net/writing_udev_rules.html udev rule] like this in /etc/udev/rules.d/99-spi.rules&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SUBSYSTEM==&amp;quot;spidev&amp;quot;, MODE=&amp;quot;0666&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;
==UART native DMX==&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
====Raspberry Pi====&lt;br /&gt;
&lt;br /&gt;
First stop anything else using the serial port; either use raspi-config (Advanced Options, Serial) or follow the instructions here:&lt;br /&gt;
&lt;br /&gt;
[http://elinux.org/RPi_Serial_Connection#Preventing_Linux_using_the_serial_port http://elinux.org/RPi_Serial_Connection#Preventing_Linux_using_the_serial_port]&lt;br /&gt;
&lt;br /&gt;
To make this work, you will also need to raise the Pi's UART clock, because the default one maxes out at 115kbaud. So you will need to add&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
init_uart_clock=16000000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to the /boot/config.txt file on the system. This won't affect any other user of the serial port provided you have a recent kernel.&lt;br /&gt;
&lt;br /&gt;
Another useful link is [http://fw.hardijzer.nl/?p=138 http://fw.hardijzer.nl/?p=138].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Raspberry Pi 3=====&lt;br /&gt;
For the Raspberry Pi 3 you need to disable Bluetooth and reclaim the PL011 UART from it.&lt;br /&gt;
&lt;br /&gt;
Add:&lt;br /&gt;
 dtoverlay=pi3-disable-bt&lt;br /&gt;
to your config.txt file in the /boot directory.&lt;br /&gt;
&lt;br /&gt;
According to this, you can also swap them, so Bluetooth uses the software UART:&lt;br /&gt;
[http://spellfoundry.com/2016/05/29/configuring-gpio-serial-port-raspbian-jessie-including-pi-3/ http://spellfoundry.com/2016/05/29/configuring-gpio-serial-port-raspbian-jessie-including-pi-3/]&lt;br /&gt;
&lt;br /&gt;
If you use this instead:&lt;br /&gt;
dtoverlay=pi3-miniuart-bt&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-usbserial.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;
==DMXter4 RDM==&lt;br /&gt;
==MiniDMXter 4==&lt;br /&gt;
RDM Controller&lt;br /&gt;
Press &amp;lt;LEFT&amp;gt; and &amp;lt;RIGHT&amp;gt; together, then also press &amp;lt;YES/Q&amp;gt;, then release &amp;lt;YES/Q&amp;gt;, finally release &amp;lt;LEFT&amp;gt; and &amp;lt;RIGHT&amp;gt;. It will then show USB DONGLE MODE and be discoverable in OLA.&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 for  [http://downloads.openlighting.org/Velleman%20kext.dmg OS X 10.9 and above] or  [http://code.google.com/p/open-lighting/downloads/detail?name=libdmxusbshield.dmg OS 10.8 and below]. 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;br /&gt;
&lt;br /&gt;
Some people have reported issues with the K8062 on Ubuntu 14.04.&lt;br /&gt;
Symptoms: When you plug in your K8062, Ubuntu responds with Kernel Panic.&lt;br /&gt;
Problem: comedi and vmk60xx kernel modules are loaded and crash the kernel.&lt;br /&gt;
Solution: WARNING! Attempt at your own risk.&lt;br /&gt;
# Blacklist comedi and vmk60xx in /etc/modprobe.d/blacklist.conf, see [https://wiki.debian.org/KernelModuleBlacklisting https://wiki.debian.org/KernelModuleBlacklisting]&lt;br /&gt;
# Reboot and then run lsusb in the terminal. (Make sure K8062 is connected.)&lt;br /&gt;
# After a short hang, the K8062 should come up as &amp;quot;Velleman Components, Inc.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==KarateLight, KarateDMX==&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/81-karate.rules&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# udev rules file for the karate-device&lt;br /&gt;
KERNEL==&amp;quot;ttyACM?&amp;quot;, ATTRS{product}==&amp;quot;DMX2USB simple&amp;quot;, SYMLINK+=&amp;quot;kldmx0&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then make sure the user olad runs as is a member of 'dialout' which is the default group owning ttyACM?.&lt;/div&gt;</summary>
		<author><name>Peternewman</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OLA_Device_Specific_Configuration&amp;diff=5876</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=5876"/>
				<updated>2017-04-26T18:25:25Z</updated>
		
		<summary type="html">&lt;p&gt;Peternewman: Add info on DMXter4&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;
==Streaming ACN / E1.31==&lt;br /&gt;
&lt;br /&gt;
===All Platforms===&lt;br /&gt;
Some older networking gear only supports an old revision of E1.31 Called Revision 20. To use this older version you need to change a line in ola-e131.conf. Change this line&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
revision = 0.46&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to this line&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
revision = 0.2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Only do this if the older gear cannot accept the standardized version of E1.31.&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
If you are planning to receive large amounts of multicast traffic 20+, you will need to adjust the maximum amount of igmp memberships.&lt;br /&gt;
Use the following command:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo &amp;lt;number_of_memberships&amp;gt; | sudo tee /proc/sys/net/ipv4/igmp_max_memberships&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example this command sets the maximum number of igmp memberships to 256:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo 256 | sudo tee /proc/sys/net/ipv4/igmp_max_memberships&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Eurolite USB DMX512 PRO==&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
Sometime the cdc_acm kernel module claims the device. If this happens you'll see errors like &amp;quot;Cannot claim device&amp;quot; and/or &amp;quot;another process has device opened for exclusive access&amp;quot;. To avoid this you can remove the module (rmmod). A udev rule like what is used for the Anyma device should also work.&lt;br /&gt;
&lt;br /&gt;
You may also need the following [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;
SUBSYSTEMS==&amp;quot;usb&amp;quot;, ATTRS{idVendor}==&amp;quot;04d8&amp;quot;,ATTRS{idProduct}==&amp;quot;0xfa63&amp;quot;, MODE=&amp;quot;0660&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Mac===&lt;br /&gt;
&lt;br /&gt;
Install the [http://code.google.com/p/open-lighting/downloads/detail?name=euroliteusbshield.dmg&amp;amp;can=2&amp;amp;q=#makechanges KEXT].&lt;br /&gt;
&lt;br /&gt;
== General Purpose I/O ==&lt;br /&gt;
&lt;br /&gt;
This has only been tested on a Raspberry Pi device. You can find information about the GPIO features on a Pi at [http://elinux.org/RPi_Low-level_peripherals elinux.org]&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
You'll need to export the GPIO pins. For example, to use pin 23, as root run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ echo 23 &amp;gt; /sys/class/gpio/export&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You'll also need to ensure that the user olad runs as has permission to change the level of the Pins. Each of the following files should be writeable:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/sys/class/gpio/gpio23/direction&lt;br /&gt;
/sys/class/gpio/gpio23/value&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You could for example do this by running the following as root (assuming olad is in the plugdev group, which you can check with &amp;quot;groups olad&amp;quot;)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chgrp plugdev /sys/class/gpio/gpio23/direction&lt;br /&gt;
chmod g+w /sys/class/gpio/gpio23/direction&lt;br /&gt;
chgrp plugdev /sys/class/gpio/gpio23/value&lt;br /&gt;
chmod g+w /sys/class/gpio/gpio23/value&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ja Rule ==&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
You need the following [http://www.reactivated.net/writing_udev_rules.html udev rule] like this in /etc/udev/rules.d/10-local.rules&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SUBSYSTEM==&amp;quot;usb|usb_device&amp;quot;, ACTION==&amp;quot;add&amp;quot;, ATTRS{idVendor}==&amp;quot;1209&amp;quot;, ATTRS{idProduct}==&amp;quot;aced&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot; MODE=&amp;quot;660&amp;quot;&lt;br /&gt;
SUBSYSTEM==&amp;quot;usb|usb_device&amp;quot;, ACTION==&amp;quot;add&amp;quot;, ATTRS{idVendor}==&amp;quot;1209&amp;quot;, ATTRS{idProduct}==&amp;quot;acee&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot; MODE=&amp;quot;660&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== OSC ==&lt;br /&gt;
&lt;br /&gt;
The message types are described in the  [http://opensoundcontrol.org/spec-1_0 OSC Spec] .&lt;br /&gt;
&lt;br /&gt;
=== Receiving DMX ===&lt;br /&gt;
&lt;br /&gt;
The OSC plugin accepts a number of message formats:&lt;br /&gt;
&lt;br /&gt;
{| border=1 cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
! Path !! OSC Message Type !! Data !! Comments &lt;br /&gt;
|-&lt;br /&gt;
|| /path || 'b' || Blob of length 1 to 512. || The most efficient way of sending DMX data over OSC.&lt;br /&gt;
|-&lt;br /&gt;
|| /path/N || 'i' || Slot value from 0 to 255 || Update a single slot. N is the slot number from 1 - 512. &lt;br /&gt;
|-&lt;br /&gt;
|| /path/N || 'f' || Slot value from 0.0 to 1.0 || Update a single slot. N is the slot number from 1 - 512. &lt;br /&gt;
|-&lt;br /&gt;
|| /path || 'ii' || Slot number from 0 to 511, slot value from 0 to 255 || Update a single slot.&lt;br /&gt;
|-&lt;br /&gt;
|| /path || 'if' || Slot number from 0 to 511, slot value from 0.0 to 1.0 || Update a single slot.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Sending DMX ===&lt;br /&gt;
&lt;br /&gt;
The following formats are available for sending data:&lt;br /&gt;
&lt;br /&gt;
{| border=1 cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
! Config Option !! Path !! OSC Message Type !! Data !! Comments &lt;br /&gt;
|-&lt;br /&gt;
|| blob || /path || 'b' || Blob of length 1 to 512. || The most efficient way of sending DMX data over OSC.&lt;br /&gt;
|-&lt;br /&gt;
|| float_array || /path || N * 'f' || Slot values from 0.0 to 1.0 ||  Not quite as efficient as the blob type.&lt;br /&gt;
|-&lt;br /&gt;
|| int_array || /path || N * 'i' || Slot values from 0 to 255 ||  Not quite as efficient as the blob type.&lt;br /&gt;
|-&lt;br /&gt;
|| individual_float || /path/N || 'f' || Slot value from 0.0 to 1.0 || N is the slot number from 1 - 512.  Results in a lot of messages being sent, avoid using this. &lt;br /&gt;
|-&lt;br /&gt;
|| individual_int || /path/N || 'i' || Slot value from 0 to 255 || N is the slot number from 1 - 512. Results in a lot of messages being sent, avoid using this. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Open DMX USB / FTDI RS485 ==&lt;br /&gt;
&lt;br /&gt;
There are two options, the 'Open DMX' plugin that requires the kernel module and the native FTDI driver.&lt;br /&gt;
&lt;br /&gt;
The Open DMX Plugin requires the dmx_usb kernel module, which means it's Linux only. The FTDI driver can be used on either Mac or Linux. See [https://www.openlighting.org/ola/get-help/ola-faq/#What_is_the_difference_between_the_different_USB_plugins here] for more info.&lt;br /&gt;
&lt;br /&gt;
If you're having issues with the device failing to transmit DMX, these links might help:&lt;br /&gt;
*[http://stevenbreuls.com/2014/04/dmx-rs485-wrong-board-fix/ http://stevenbreuls.com/2014/04/dmx-rs485-wrong-board-fix/]&lt;br /&gt;
*[http://falconchristmas.com/forum/index.php/topic,858.msg9877.html#msg9877 http://falconchristmas.com/forum/index.php/topic,858.msg9877.html#msg9877]&lt;br /&gt;
&lt;br /&gt;
=== Linux, Open DMX Kernel Module ===&lt;br /&gt;
&lt;br /&gt;
Make sure the opendmx plugin is enabled.&lt;br /&gt;
Make sure the dmx_usb kernel module is loaded. &lt;br /&gt;
&lt;br /&gt;
===Mac FTDI ===&lt;br /&gt;
&lt;br /&gt;
You must have libftdi-dev installed before you run ./configure.  Otherwise the FTDI DMX plugin won't show up in the list of OLA plugins. &lt;br /&gt;
&lt;br /&gt;
Enable the FTDI driver (ola-ftdidmx ) and disable the USB Serial and Open DMX drivers (ola-usbserial.conf &amp;amp;  ola-opendmx.conf) &lt;br /&gt;
&lt;br /&gt;
=== Linux, FTDI ===&lt;br /&gt;
&lt;br /&gt;
Same as Mac, but you also need to make sure that you add the following [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 for ftdi devices&lt;br /&gt;
SUBSYSTEM==&amp;quot;usb|usb_device&amp;quot;, ACTION==&amp;quot;add&amp;quot;, ATTRS{idVendor}==&amp;quot;0403&amp;quot;, ATTRS{idProduct}==&amp;quot;6001&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Scanlime Fadecandy==&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 Scanlime Fadecandy device&lt;br /&gt;
SUBSYSTEM==&amp;quot;usb|usb_device&amp;quot;, ACTION==&amp;quot;add&amp;quot;, ATTRS{idVendor}==&amp;quot;1d50&amp;quot;, ATTRS{idProduct}==&amp;quot;607a&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SPI ==&lt;br /&gt;
&lt;br /&gt;
This plugin is designed for the Raspberry Pi. It may work on other hardware, but that's up to you. For instructions on the hardware side of things see [[OLA LED Pixels]].&lt;br /&gt;
&lt;br /&gt;
Enable the spi-bcm2708 module, depending on the version of Raspbian you're running it will either be via Device Tree or by editing /etc/modprobe.d/raspi-blacklist.conf.&lt;br /&gt;
&lt;br /&gt;
For recent versions you can use raspi-config's Advanced Options then SPI, see here for more info:&lt;br /&gt;
https://www.raspberrypi.org/documentation/configuration/raspi-config.md&lt;br /&gt;
&lt;br /&gt;
Or alternatively by manually enabling the SPI Device Tree by uncommenting the dtparam=spi=on line in /boot/config.txt as explained here:&lt;br /&gt;
https://www.raspberrypi.org/documentation/configuration/device-tree.md&lt;br /&gt;
&lt;br /&gt;
For older machines, edit /etc/modprobe.d/raspi-blacklist.conf and comment out the &amp;quot;blacklist spi-bcm2708&amp;quot; line. The file should look something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# blacklist spi and i2c by default (many users don't need them)&lt;br /&gt;
&lt;br /&gt;
#blacklist spi-bcm2708&lt;br /&gt;
blacklist i2c-bcm2708&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In both cases, to allow non-root access, add the following [http://www.reactivated.net/writing_udev_rules.html udev rule] like this in /etc/udev/rules.d/99-spi.rules&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SUBSYSTEM==&amp;quot;spidev&amp;quot;, MODE=&amp;quot;0666&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;
==UART native DMX==&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
====Raspberry Pi====&lt;br /&gt;
&lt;br /&gt;
First stop anything else using the serial port; either use raspi-config (Advanced Options, Serial) or follow the instructions here:&lt;br /&gt;
&lt;br /&gt;
[http://elinux.org/RPi_Serial_Connection#Preventing_Linux_using_the_serial_port http://elinux.org/RPi_Serial_Connection#Preventing_Linux_using_the_serial_port]&lt;br /&gt;
&lt;br /&gt;
To make this work, you will also need to raise the Pi's UART clock, because the default one maxes out at 115kbaud. So you will need to add&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
init_uart_clock=16000000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to the /boot/config.txt file on the system. This won't affect any other user of the serial port provided you have a recent kernel.&lt;br /&gt;
&lt;br /&gt;
Another useful link is [http://fw.hardijzer.nl/?p=138 http://fw.hardijzer.nl/?p=138].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Raspberry Pi 3=====&lt;br /&gt;
For the Raspberry Pi 3 you need to disable Bluetooth and reclaim the PL011 UART from it.&lt;br /&gt;
&lt;br /&gt;
Add:&lt;br /&gt;
 dtoverlay=pi3-disable-bt&lt;br /&gt;
to your config.txt file in the /boot directory.&lt;br /&gt;
&lt;br /&gt;
According to this, you can also swap them, so Bluetooth uses the software UART:&lt;br /&gt;
[http://spellfoundry.com/2016/05/29/configuring-gpio-serial-port-raspbian-jessie-including-pi-3/ http://spellfoundry.com/2016/05/29/configuring-gpio-serial-port-raspbian-jessie-including-pi-3/]&lt;br /&gt;
&lt;br /&gt;
If you use this instead:&lt;br /&gt;
dtoverlay=pi3-miniuart-bt&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-usbserial.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;
==DMXter4 RDM==&lt;br /&gt;
RDM Controller&lt;br /&gt;
Press &amp;lt;LEFT&amp;gt; and &amp;lt;RIGHT&amp;gt; together, then also press &amp;lt;YES/Q&amp;gt;, then release &amp;lt;YES/Q&amp;gt;, finally release &amp;lt;LEFT&amp;gt; and &amp;lt;RIGHT&amp;gt;. It will then show USB DONGLE MODE and be discoverable in OLA.&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 for  [http://downloads.openlighting.org/Velleman%20kext.dmg OS X 10.9 and above] or  [http://code.google.com/p/open-lighting/downloads/detail?name=libdmxusbshield.dmg OS 10.8 and below]. 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;br /&gt;
&lt;br /&gt;
Some people have reported issues with the K8062 on Ubuntu 14.04.&lt;br /&gt;
Symptoms: When you plug in your K8062, Ubuntu responds with Kernel Panic.&lt;br /&gt;
Problem: comedi and vmk60xx kernel modules are loaded and crash the kernel.&lt;br /&gt;
Solution: WARNING! Attempt at your own risk.&lt;br /&gt;
# Blacklist comedi and vmk60xx in /etc/modprobe.d/blacklist.conf, see [https://wiki.debian.org/KernelModuleBlacklisting https://wiki.debian.org/KernelModuleBlacklisting]&lt;br /&gt;
# Reboot and then run lsusb in the terminal. (Make sure K8062 is connected.)&lt;br /&gt;
# After a short hang, the K8062 should come up as &amp;quot;Velleman Components, Inc.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==KarateLight, KarateDMX==&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/81-karate.rules&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# udev rules file for the karate-device&lt;br /&gt;
KERNEL==&amp;quot;ttyACM?&amp;quot;, ATTRS{product}==&amp;quot;DMX2USB simple&amp;quot;, SYMLINK+=&amp;quot;kldmx0&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then make sure the user olad runs as is a member of 'dialout' which is the default group owning ttyACM?.&lt;/div&gt;</summary>
		<author><name>Peternewman</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OLA_Device_Specific_Configuration&amp;diff=5875</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=5875"/>
				<updated>2017-04-22T11:13:23Z</updated>
		
		<summary type="html">&lt;p&gt;Peternewman: /* Mac */ Correct the config filename&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;
==Streaming ACN / E1.31==&lt;br /&gt;
&lt;br /&gt;
===All Platforms===&lt;br /&gt;
Some older networking gear only supports an old revision of E1.31 Called Revision 20. To use this older version you need to change a line in ola-e131.conf. Change this line&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
revision = 0.46&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to this line&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
revision = 0.2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Only do this if the older gear cannot accept the standardized version of E1.31.&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
If you are planning to receive large amounts of multicast traffic 20+, you will need to adjust the maximum amount of igmp memberships.&lt;br /&gt;
Use the following command:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo &amp;lt;number_of_memberships&amp;gt; | sudo tee /proc/sys/net/ipv4/igmp_max_memberships&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example this command sets the maximum number of igmp memberships to 256:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo 256 | sudo tee /proc/sys/net/ipv4/igmp_max_memberships&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Eurolite USB DMX512 PRO==&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
Sometime the cdc_acm kernel module claims the device. If this happens you'll see errors like &amp;quot;Cannot claim device&amp;quot; and/or &amp;quot;another process has device opened for exclusive access&amp;quot;. To avoid this you can remove the module (rmmod). A udev rule like what is used for the Anyma device should also work.&lt;br /&gt;
&lt;br /&gt;
You may also need the following [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;
SUBSYSTEMS==&amp;quot;usb&amp;quot;, ATTRS{idVendor}==&amp;quot;04d8&amp;quot;,ATTRS{idProduct}==&amp;quot;0xfa63&amp;quot;, MODE=&amp;quot;0660&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Mac===&lt;br /&gt;
&lt;br /&gt;
Install the [http://code.google.com/p/open-lighting/downloads/detail?name=euroliteusbshield.dmg&amp;amp;can=2&amp;amp;q=#makechanges KEXT].&lt;br /&gt;
&lt;br /&gt;
== General Purpose I/O ==&lt;br /&gt;
&lt;br /&gt;
This has only been tested on a Raspberry Pi device. You can find information about the GPIO features on a Pi at [http://elinux.org/RPi_Low-level_peripherals elinux.org]&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
You'll need to export the GPIO pins. For example, to use pin 23, as root run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ echo 23 &amp;gt; /sys/class/gpio/export&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You'll also need to ensure that the user olad runs as has permission to change the level of the Pins. Each of the following files should be writeable:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/sys/class/gpio/gpio23/direction&lt;br /&gt;
/sys/class/gpio/gpio23/value&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You could for example do this by running the following as root (assuming olad is in the plugdev group, which you can check with &amp;quot;groups olad&amp;quot;)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chgrp plugdev /sys/class/gpio/gpio23/direction&lt;br /&gt;
chmod g+w /sys/class/gpio/gpio23/direction&lt;br /&gt;
chgrp plugdev /sys/class/gpio/gpio23/value&lt;br /&gt;
chmod g+w /sys/class/gpio/gpio23/value&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ja Rule ==&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
You need the following [http://www.reactivated.net/writing_udev_rules.html udev rule] like this in /etc/udev/rules.d/10-local.rules&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SUBSYSTEM==&amp;quot;usb|usb_device&amp;quot;, ACTION==&amp;quot;add&amp;quot;, ATTRS{idVendor}==&amp;quot;1209&amp;quot;, ATTRS{idProduct}==&amp;quot;aced&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot; MODE=&amp;quot;660&amp;quot;&lt;br /&gt;
SUBSYSTEM==&amp;quot;usb|usb_device&amp;quot;, ACTION==&amp;quot;add&amp;quot;, ATTRS{idVendor}==&amp;quot;1209&amp;quot;, ATTRS{idProduct}==&amp;quot;acee&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot; MODE=&amp;quot;660&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== OSC ==&lt;br /&gt;
&lt;br /&gt;
The message types are described in the  [http://opensoundcontrol.org/spec-1_0 OSC Spec] .&lt;br /&gt;
&lt;br /&gt;
=== Receiving DMX ===&lt;br /&gt;
&lt;br /&gt;
The OSC plugin accepts a number of message formats:&lt;br /&gt;
&lt;br /&gt;
{| border=1 cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
! Path !! OSC Message Type !! Data !! Comments &lt;br /&gt;
|-&lt;br /&gt;
|| /path || 'b' || Blob of length 1 to 512. || The most efficient way of sending DMX data over OSC.&lt;br /&gt;
|-&lt;br /&gt;
|| /path/N || 'i' || Slot value from 0 to 255 || Update a single slot. N is the slot number from 1 - 512. &lt;br /&gt;
|-&lt;br /&gt;
|| /path/N || 'f' || Slot value from 0.0 to 1.0 || Update a single slot. N is the slot number from 1 - 512. &lt;br /&gt;
|-&lt;br /&gt;
|| /path || 'ii' || Slot number from 0 to 511, slot value from 0 to 255 || Update a single slot.&lt;br /&gt;
|-&lt;br /&gt;
|| /path || 'if' || Slot number from 0 to 511, slot value from 0.0 to 1.0 || Update a single slot.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Sending DMX ===&lt;br /&gt;
&lt;br /&gt;
The following formats are available for sending data:&lt;br /&gt;
&lt;br /&gt;
{| border=1 cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
! Config Option !! Path !! OSC Message Type !! Data !! Comments &lt;br /&gt;
|-&lt;br /&gt;
|| blob || /path || 'b' || Blob of length 1 to 512. || The most efficient way of sending DMX data over OSC.&lt;br /&gt;
|-&lt;br /&gt;
|| float_array || /path || N * 'f' || Slot values from 0.0 to 1.0 ||  Not quite as efficient as the blob type.&lt;br /&gt;
|-&lt;br /&gt;
|| int_array || /path || N * 'i' || Slot values from 0 to 255 ||  Not quite as efficient as the blob type.&lt;br /&gt;
|-&lt;br /&gt;
|| individual_float || /path/N || 'f' || Slot value from 0.0 to 1.0 || N is the slot number from 1 - 512.  Results in a lot of messages being sent, avoid using this. &lt;br /&gt;
|-&lt;br /&gt;
|| individual_int || /path/N || 'i' || Slot value from 0 to 255 || N is the slot number from 1 - 512. Results in a lot of messages being sent, avoid using this. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Open DMX USB / FTDI RS485 ==&lt;br /&gt;
&lt;br /&gt;
There are two options, the 'Open DMX' plugin that requires the kernel module and the native FTDI driver.&lt;br /&gt;
&lt;br /&gt;
The Open DMX Plugin requires the dmx_usb kernel module, which means it's Linux only. The FTDI driver can be used on either Mac or Linux. See [https://www.openlighting.org/ola/get-help/ola-faq/#What_is_the_difference_between_the_different_USB_plugins here] for more info.&lt;br /&gt;
&lt;br /&gt;
If you're having issues with the device failing to transmit DMX, these links might help:&lt;br /&gt;
*[http://stevenbreuls.com/2014/04/dmx-rs485-wrong-board-fix/ http://stevenbreuls.com/2014/04/dmx-rs485-wrong-board-fix/]&lt;br /&gt;
*[http://falconchristmas.com/forum/index.php/topic,858.msg9877.html#msg9877 http://falconchristmas.com/forum/index.php/topic,858.msg9877.html#msg9877]&lt;br /&gt;
&lt;br /&gt;
=== Linux, Open DMX Kernel Module ===&lt;br /&gt;
&lt;br /&gt;
Make sure the opendmx plugin is enabled.&lt;br /&gt;
Make sure the dmx_usb kernel module is loaded. &lt;br /&gt;
&lt;br /&gt;
===Mac FTDI ===&lt;br /&gt;
&lt;br /&gt;
You must have libftdi-dev installed before you run ./configure.  Otherwise the FTDI DMX plugin won't show up in the list of OLA plugins. &lt;br /&gt;
&lt;br /&gt;
Enable the FTDI driver (ola-ftdidmx ) and disable the USB Serial and Open DMX drivers (ola-usbserial.conf &amp;amp;  ola-opendmx.conf) &lt;br /&gt;
&lt;br /&gt;
=== Linux, FTDI ===&lt;br /&gt;
&lt;br /&gt;
Same as Mac, but you also need to make sure that you add the following [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 for ftdi devices&lt;br /&gt;
SUBSYSTEM==&amp;quot;usb|usb_device&amp;quot;, ACTION==&amp;quot;add&amp;quot;, ATTRS{idVendor}==&amp;quot;0403&amp;quot;, ATTRS{idProduct}==&amp;quot;6001&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Scanlime Fadecandy==&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 Scanlime Fadecandy device&lt;br /&gt;
SUBSYSTEM==&amp;quot;usb|usb_device&amp;quot;, ACTION==&amp;quot;add&amp;quot;, ATTRS{idVendor}==&amp;quot;1d50&amp;quot;, ATTRS{idProduct}==&amp;quot;607a&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SPI ==&lt;br /&gt;
&lt;br /&gt;
This plugin is designed for the Raspberry Pi. It may work on other hardware, but that's up to you. For instructions on the hardware side of things see [[OLA LED Pixels]].&lt;br /&gt;
&lt;br /&gt;
Enable the spi-bcm2708 module, depending on the version of Raspbian you're running it will either be via Device Tree or by editing /etc/modprobe.d/raspi-blacklist.conf.&lt;br /&gt;
&lt;br /&gt;
For recent versions you can use raspi-config's Advanced Options then SPI, see here for more info:&lt;br /&gt;
https://www.raspberrypi.org/documentation/configuration/raspi-config.md&lt;br /&gt;
&lt;br /&gt;
Or alternatively by manually enabling the SPI Device Tree by uncommenting the dtparam=spi=on line in /boot/config.txt as explained here:&lt;br /&gt;
https://www.raspberrypi.org/documentation/configuration/device-tree.md&lt;br /&gt;
&lt;br /&gt;
For older machines, edit /etc/modprobe.d/raspi-blacklist.conf and comment out the &amp;quot;blacklist spi-bcm2708&amp;quot; line. The file should look something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# blacklist spi and i2c by default (many users don't need them)&lt;br /&gt;
&lt;br /&gt;
#blacklist spi-bcm2708&lt;br /&gt;
blacklist i2c-bcm2708&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In both cases, to allow non-root access, add the following [http://www.reactivated.net/writing_udev_rules.html udev rule] like this in /etc/udev/rules.d/99-spi.rules&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SUBSYSTEM==&amp;quot;spidev&amp;quot;, MODE=&amp;quot;0666&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;
==UART native DMX==&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
====Raspberry Pi====&lt;br /&gt;
&lt;br /&gt;
First stop anything else using the serial port; either use raspi-config (Advanced Options, Serial) or follow the instructions here:&lt;br /&gt;
&lt;br /&gt;
[http://elinux.org/RPi_Serial_Connection#Preventing_Linux_using_the_serial_port http://elinux.org/RPi_Serial_Connection#Preventing_Linux_using_the_serial_port]&lt;br /&gt;
&lt;br /&gt;
To make this work, you will also need to raise the Pi's UART clock, because the default one maxes out at 115kbaud. So you will need to add&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
init_uart_clock=16000000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to the /boot/config.txt file on the system. This won't affect any other user of the serial port provided you have a recent kernel.&lt;br /&gt;
&lt;br /&gt;
Another useful link is [http://fw.hardijzer.nl/?p=138 http://fw.hardijzer.nl/?p=138].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Raspberry Pi 3=====&lt;br /&gt;
For the Raspberry Pi 3 you need to disable Bluetooth and reclaim the PL011 UART from it.&lt;br /&gt;
&lt;br /&gt;
Add:&lt;br /&gt;
 dtoverlay=pi3-disable-bt&lt;br /&gt;
to your config.txt file in the /boot directory.&lt;br /&gt;
&lt;br /&gt;
According to this, you can also swap them, so Bluetooth uses the software UART:&lt;br /&gt;
[http://spellfoundry.com/2016/05/29/configuring-gpio-serial-port-raspbian-jessie-including-pi-3/ http://spellfoundry.com/2016/05/29/configuring-gpio-serial-port-raspbian-jessie-including-pi-3/]&lt;br /&gt;
&lt;br /&gt;
If you use this instead:&lt;br /&gt;
dtoverlay=pi3-miniuart-bt&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-usbserial.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 for  [http://downloads.openlighting.org/Velleman%20kext.dmg OS X 10.9 and above] or  [http://code.google.com/p/open-lighting/downloads/detail?name=libdmxusbshield.dmg OS 10.8 and below]. 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;br /&gt;
&lt;br /&gt;
Some people have reported issues with the K8062 on Ubuntu 14.04.&lt;br /&gt;
Symptoms: When you plug in your K8062, Ubuntu responds with Kernel Panic.&lt;br /&gt;
Problem: comedi and vmk60xx kernel modules are loaded and crash the kernel.&lt;br /&gt;
Solution: WARNING! Attempt at your own risk.&lt;br /&gt;
# Blacklist comedi and vmk60xx in /etc/modprobe.d/blacklist.conf, see [https://wiki.debian.org/KernelModuleBlacklisting https://wiki.debian.org/KernelModuleBlacklisting]&lt;br /&gt;
# Reboot and then run lsusb in the terminal. (Make sure K8062 is connected.)&lt;br /&gt;
# After a short hang, the K8062 should come up as &amp;quot;Velleman Components, Inc.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==KarateLight, KarateDMX==&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/81-karate.rules&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# udev rules file for the karate-device&lt;br /&gt;
KERNEL==&amp;quot;ttyACM?&amp;quot;, ATTRS{product}==&amp;quot;DMX2USB simple&amp;quot;, SYMLINK+=&amp;quot;kldmx0&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then make sure the user olad runs as is a member of 'dialout' which is the default group owning ttyACM?.&lt;/div&gt;</summary>
		<author><name>Peternewman</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OLA_Device_Specific_Configuration&amp;diff=5874</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=5874"/>
				<updated>2017-04-01T22:51:08Z</updated>
		
		<summary type="html">&lt;p&gt;Peternewman: /* Raspberry Pi */ Add info on Pi 3 UART&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;
==Streaming ACN / E1.31==&lt;br /&gt;
&lt;br /&gt;
===All Platforms===&lt;br /&gt;
Some older networking gear only supports an old revision of E1.31 Called Revision 20. To use this older version you need to change a line in ola-e131.conf. Change this line&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
revision = 0.46&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to this line&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
revision = 0.2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Only do this if the older gear cannot accept the standardized version of E1.31.&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
If you are planning to receive large amounts of multicast traffic 20+, you will need to adjust the maximum amount of igmp memberships.&lt;br /&gt;
Use the following command:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo &amp;lt;number_of_memberships&amp;gt; | sudo tee /proc/sys/net/ipv4/igmp_max_memberships&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example this command sets the maximum number of igmp memberships to 256:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo 256 | sudo tee /proc/sys/net/ipv4/igmp_max_memberships&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Eurolite USB DMX512 PRO==&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
Sometime the cdc_acm kernel module claims the device. If this happens you'll see errors like &amp;quot;Cannot claim device&amp;quot; and/or &amp;quot;another process has device opened for exclusive access&amp;quot;. To avoid this you can remove the module (rmmod). A udev rule like what is used for the Anyma device should also work.&lt;br /&gt;
&lt;br /&gt;
You may also need the following [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;
SUBSYSTEMS==&amp;quot;usb&amp;quot;, ATTRS{idVendor}==&amp;quot;04d8&amp;quot;,ATTRS{idProduct}==&amp;quot;0xfa63&amp;quot;, MODE=&amp;quot;0660&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Mac===&lt;br /&gt;
&lt;br /&gt;
Install the [http://code.google.com/p/open-lighting/downloads/detail?name=euroliteusbshield.dmg&amp;amp;can=2&amp;amp;q=#makechanges KEXT].&lt;br /&gt;
&lt;br /&gt;
== General Purpose I/O ==&lt;br /&gt;
&lt;br /&gt;
This has only been tested on a Raspberry Pi device. You can find information about the GPIO features on a Pi at [http://elinux.org/RPi_Low-level_peripherals elinux.org]&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
You'll need to export the GPIO pins. For example, to use pin 23, as root run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ echo 23 &amp;gt; /sys/class/gpio/export&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You'll also need to ensure that the user olad runs as has permission to change the level of the Pins. Each of the following files should be writeable:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/sys/class/gpio/gpio23/direction&lt;br /&gt;
/sys/class/gpio/gpio23/value&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You could for example do this by running the following as root (assuming olad is in the plugdev group, which you can check with &amp;quot;groups olad&amp;quot;)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chgrp plugdev /sys/class/gpio/gpio23/direction&lt;br /&gt;
chmod g+w /sys/class/gpio/gpio23/direction&lt;br /&gt;
chgrp plugdev /sys/class/gpio/gpio23/value&lt;br /&gt;
chmod g+w /sys/class/gpio/gpio23/value&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ja Rule ==&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
You need the following [http://www.reactivated.net/writing_udev_rules.html udev rule] like this in /etc/udev/rules.d/10-local.rules&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SUBSYSTEM==&amp;quot;usb|usb_device&amp;quot;, ACTION==&amp;quot;add&amp;quot;, ATTRS{idVendor}==&amp;quot;1209&amp;quot;, ATTRS{idProduct}==&amp;quot;aced&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot; MODE=&amp;quot;660&amp;quot;&lt;br /&gt;
SUBSYSTEM==&amp;quot;usb|usb_device&amp;quot;, ACTION==&amp;quot;add&amp;quot;, ATTRS{idVendor}==&amp;quot;1209&amp;quot;, ATTRS{idProduct}==&amp;quot;acee&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot; MODE=&amp;quot;660&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== OSC ==&lt;br /&gt;
&lt;br /&gt;
The message types are described in the  [http://opensoundcontrol.org/spec-1_0 OSC Spec] .&lt;br /&gt;
&lt;br /&gt;
=== Receiving DMX ===&lt;br /&gt;
&lt;br /&gt;
The OSC plugin accepts a number of message formats:&lt;br /&gt;
&lt;br /&gt;
{| border=1 cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
! Path !! OSC Message Type !! Data !! Comments &lt;br /&gt;
|-&lt;br /&gt;
|| /path || 'b' || Blob of length 1 to 512. || The most efficient way of sending DMX data over OSC.&lt;br /&gt;
|-&lt;br /&gt;
|| /path/N || 'i' || Slot value from 0 to 255 || Update a single slot. N is the slot number from 1 - 512. &lt;br /&gt;
|-&lt;br /&gt;
|| /path/N || 'f' || Slot value from 0.0 to 1.0 || Update a single slot. N is the slot number from 1 - 512. &lt;br /&gt;
|-&lt;br /&gt;
|| /path || 'ii' || Slot number from 0 to 511, slot value from 0 to 255 || Update a single slot.&lt;br /&gt;
|-&lt;br /&gt;
|| /path || 'if' || Slot number from 0 to 511, slot value from 0.0 to 1.0 || Update a single slot.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Sending DMX ===&lt;br /&gt;
&lt;br /&gt;
The following formats are available for sending data:&lt;br /&gt;
&lt;br /&gt;
{| border=1 cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
! Config Option !! Path !! OSC Message Type !! Data !! Comments &lt;br /&gt;
|-&lt;br /&gt;
|| blob || /path || 'b' || Blob of length 1 to 512. || The most efficient way of sending DMX data over OSC.&lt;br /&gt;
|-&lt;br /&gt;
|| float_array || /path || N * 'f' || Slot values from 0.0 to 1.0 ||  Not quite as efficient as the blob type.&lt;br /&gt;
|-&lt;br /&gt;
|| int_array || /path || N * 'i' || Slot values from 0 to 255 ||  Not quite as efficient as the blob type.&lt;br /&gt;
|-&lt;br /&gt;
|| individual_float || /path/N || 'f' || Slot value from 0.0 to 1.0 || N is the slot number from 1 - 512.  Results in a lot of messages being sent, avoid using this. &lt;br /&gt;
|-&lt;br /&gt;
|| individual_int || /path/N || 'i' || Slot value from 0 to 255 || N is the slot number from 1 - 512. Results in a lot of messages being sent, avoid using this. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Open DMX USB / FTDI RS485 ==&lt;br /&gt;
&lt;br /&gt;
There are two options, the 'Open DMX' plugin that requires the kernel module and the native FTDI driver.&lt;br /&gt;
&lt;br /&gt;
The Open DMX Plugin requires the dmx_usb kernel module, which means it's Linux only. The FTDI driver can be used on either Mac or Linux. See [https://www.openlighting.org/ola/get-help/ola-faq/#What_is_the_difference_between_the_different_USB_plugins here] for more info.&lt;br /&gt;
&lt;br /&gt;
If you're having issues with the device failing to transmit DMX, these links might help:&lt;br /&gt;
*[http://stevenbreuls.com/2014/04/dmx-rs485-wrong-board-fix/ http://stevenbreuls.com/2014/04/dmx-rs485-wrong-board-fix/]&lt;br /&gt;
*[http://falconchristmas.com/forum/index.php/topic,858.msg9877.html#msg9877 http://falconchristmas.com/forum/index.php/topic,858.msg9877.html#msg9877]&lt;br /&gt;
&lt;br /&gt;
=== Linux, Open DMX Kernel Module ===&lt;br /&gt;
&lt;br /&gt;
Make sure the opendmx plugin is enabled.&lt;br /&gt;
Make sure the dmx_usb kernel module is loaded. &lt;br /&gt;
&lt;br /&gt;
===Mac FTDI ===&lt;br /&gt;
&lt;br /&gt;
You must have libftdi-dev installed before you run ./configure.  Otherwise the FTDI DMX plugin won't show up in the list of OLA plugins. &lt;br /&gt;
&lt;br /&gt;
Enable the FTDI driver (ola-ftdidmx ) and disable the USB Serial and Open DMX drivers (ola-usbserial.conf &amp;amp;  ola-opendmx.conf) &lt;br /&gt;
&lt;br /&gt;
=== Linux, FTDI ===&lt;br /&gt;
&lt;br /&gt;
Same as Mac, but you also need to make sure that you add the following [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 for ftdi devices&lt;br /&gt;
SUBSYSTEM==&amp;quot;usb|usb_device&amp;quot;, ACTION==&amp;quot;add&amp;quot;, ATTRS{idVendor}==&amp;quot;0403&amp;quot;, ATTRS{idProduct}==&amp;quot;6001&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Scanlime Fadecandy==&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 Scanlime Fadecandy device&lt;br /&gt;
SUBSYSTEM==&amp;quot;usb|usb_device&amp;quot;, ACTION==&amp;quot;add&amp;quot;, ATTRS{idVendor}==&amp;quot;1d50&amp;quot;, ATTRS{idProduct}==&amp;quot;607a&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SPI ==&lt;br /&gt;
&lt;br /&gt;
This plugin is designed for the Raspberry Pi. It may work on other hardware, but that's up to you. For instructions on the hardware side of things see [[OLA LED Pixels]].&lt;br /&gt;
&lt;br /&gt;
Enable the spi-bcm2708 module, depending on the version of Raspbian you're running it will either be via Device Tree or by editing /etc/modprobe.d/raspi-blacklist.conf.&lt;br /&gt;
&lt;br /&gt;
For recent versions you can use raspi-config's Advanced Options then SPI, see here for more info:&lt;br /&gt;
https://www.raspberrypi.org/documentation/configuration/raspi-config.md&lt;br /&gt;
&lt;br /&gt;
Or alternatively by manually enabling the SPI Device Tree by uncommenting the dtparam=spi=on line in /boot/config.txt as explained here:&lt;br /&gt;
https://www.raspberrypi.org/documentation/configuration/device-tree.md&lt;br /&gt;
&lt;br /&gt;
For older machines, edit /etc/modprobe.d/raspi-blacklist.conf and comment out the &amp;quot;blacklist spi-bcm2708&amp;quot; line. The file should look something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# blacklist spi and i2c by default (many users don't need them)&lt;br /&gt;
&lt;br /&gt;
#blacklist spi-bcm2708&lt;br /&gt;
blacklist i2c-bcm2708&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In both cases, to allow non-root access, add the following [http://www.reactivated.net/writing_udev_rules.html udev rule] like this in /etc/udev/rules.d/99-spi.rules&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SUBSYSTEM==&amp;quot;spidev&amp;quot;, MODE=&amp;quot;0666&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;
==UART native DMX==&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
====Raspberry Pi====&lt;br /&gt;
&lt;br /&gt;
First stop anything else using the serial port; either use raspi-config (Advanced Options, Serial) or follow the instructions here:&lt;br /&gt;
&lt;br /&gt;
[http://elinux.org/RPi_Serial_Connection#Preventing_Linux_using_the_serial_port http://elinux.org/RPi_Serial_Connection#Preventing_Linux_using_the_serial_port]&lt;br /&gt;
&lt;br /&gt;
To make this work, you will also need to raise the Pi's UART clock, because the default one maxes out at 115kbaud. So you will need to add&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
init_uart_clock=16000000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to the /boot/config.txt file on the system. This won't affect any other user of the serial port provided you have a recent kernel.&lt;br /&gt;
&lt;br /&gt;
Another useful link is [http://fw.hardijzer.nl/?p=138 http://fw.hardijzer.nl/?p=138].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Raspberry Pi 3=====&lt;br /&gt;
For the Raspberry Pi 3 you need to disable Bluetooth and reclaim the PL011 UART from it.&lt;br /&gt;
&lt;br /&gt;
Add:&lt;br /&gt;
 dtoverlay=pi3-disable-bt&lt;br /&gt;
to your config.txt file in the /boot directory.&lt;br /&gt;
&lt;br /&gt;
According to this, you can also swap them, so Bluetooth uses the software UART:&lt;br /&gt;
[http://spellfoundry.com/2016/05/29/configuring-gpio-serial-port-raspbian-jessie-including-pi-3/ http://spellfoundry.com/2016/05/29/configuring-gpio-serial-port-raspbian-jessie-including-pi-3/]&lt;br /&gt;
&lt;br /&gt;
If you use this instead:&lt;br /&gt;
dtoverlay=pi3-miniuart-bt&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 for  [http://downloads.openlighting.org/Velleman%20kext.dmg OS X 10.9 and above] or  [http://code.google.com/p/open-lighting/downloads/detail?name=libdmxusbshield.dmg OS 10.8 and below]. 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;br /&gt;
&lt;br /&gt;
Some people have reported issues with the K8062 on Ubuntu 14.04.&lt;br /&gt;
Symptoms: When you plug in your K8062, Ubuntu responds with Kernel Panic.&lt;br /&gt;
Problem: comedi and vmk60xx kernel modules are loaded and crash the kernel.&lt;br /&gt;
Solution: WARNING! Attempt at your own risk.&lt;br /&gt;
# Blacklist comedi and vmk60xx in /etc/modprobe.d/blacklist.conf, see [https://wiki.debian.org/KernelModuleBlacklisting https://wiki.debian.org/KernelModuleBlacklisting]&lt;br /&gt;
# Reboot and then run lsusb in the terminal. (Make sure K8062 is connected.)&lt;br /&gt;
# After a short hang, the K8062 should come up as &amp;quot;Velleman Components, Inc.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==KarateLight, KarateDMX==&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/81-karate.rules&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# udev rules file for the karate-device&lt;br /&gt;
KERNEL==&amp;quot;ttyACM?&amp;quot;, ATTRS{product}==&amp;quot;DMX2USB simple&amp;quot;, SYMLINK+=&amp;quot;kldmx0&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then make sure the user olad runs as is a member of 'dialout' which is the default group owning ttyACM?.&lt;/div&gt;</summary>
		<author><name>Peternewman</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OLA_Device_Specific_Configuration&amp;diff=5873</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=5873"/>
				<updated>2017-02-16T19:55:07Z</updated>
		
		<summary type="html">&lt;p&gt;Peternewman: /* Open DMX USB / FTDI RS485 */&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;
==Streaming ACN / E1.31==&lt;br /&gt;
&lt;br /&gt;
===All Platforms===&lt;br /&gt;
Some older networking gear only supports an old revision of E1.31 Called Revision 20. To use this older version you need to change a line in ola-e131.conf. Change this line&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
revision = 0.46&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to this line&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
revision = 0.2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Only do this if the older gear cannot accept the standardized version of E1.31.&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
If you are planning to receive large amounts of multicast traffic 20+, you will need to adjust the maximum amount of igmp memberships.&lt;br /&gt;
Use the following command:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo &amp;lt;number_of_memberships&amp;gt; | sudo tee /proc/sys/net/ipv4/igmp_max_memberships&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example this command sets the maximum number of igmp memberships to 256:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo 256 | sudo tee /proc/sys/net/ipv4/igmp_max_memberships&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Eurolite USB DMX512 PRO==&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
Sometime the cdc_acm kernel module claims the device. If this happens you'll see errors like &amp;quot;Cannot claim device&amp;quot; and/or &amp;quot;another process has device opened for exclusive access&amp;quot;. To avoid this you can remove the module (rmmod). A udev rule like what is used for the Anyma device should also work.&lt;br /&gt;
&lt;br /&gt;
You may also need the following [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;
SUBSYSTEMS==&amp;quot;usb&amp;quot;, ATTRS{idVendor}==&amp;quot;04d8&amp;quot;,ATTRS{idProduct}==&amp;quot;0xfa63&amp;quot;, MODE=&amp;quot;0660&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Mac===&lt;br /&gt;
&lt;br /&gt;
Install the [http://code.google.com/p/open-lighting/downloads/detail?name=euroliteusbshield.dmg&amp;amp;can=2&amp;amp;q=#makechanges KEXT].&lt;br /&gt;
&lt;br /&gt;
== General Purpose I/O ==&lt;br /&gt;
&lt;br /&gt;
This has only been tested on a Raspberry Pi device. You can find information about the GPIO features on a Pi at [http://elinux.org/RPi_Low-level_peripherals elinux.org]&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
You'll need to export the GPIO pins. For example, to use pin 23, as root run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ echo 23 &amp;gt; /sys/class/gpio/export&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You'll also need to ensure that the user olad runs as has permission to change the level of the Pins. Each of the following files should be writeable:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/sys/class/gpio/gpio23/direction&lt;br /&gt;
/sys/class/gpio/gpio23/value&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You could for example do this by running the following as root (assuming olad is in the plugdev group, which you can check with &amp;quot;groups olad&amp;quot;)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chgrp plugdev /sys/class/gpio/gpio23/direction&lt;br /&gt;
chmod g+w /sys/class/gpio/gpio23/direction&lt;br /&gt;
chgrp plugdev /sys/class/gpio/gpio23/value&lt;br /&gt;
chmod g+w /sys/class/gpio/gpio23/value&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ja Rule ==&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
You need the following [http://www.reactivated.net/writing_udev_rules.html udev rule] like this in /etc/udev/rules.d/10-local.rules&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SUBSYSTEM==&amp;quot;usb|usb_device&amp;quot;, ACTION==&amp;quot;add&amp;quot;, ATTRS{idVendor}==&amp;quot;1209&amp;quot;, ATTRS{idProduct}==&amp;quot;aced&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot; MODE=&amp;quot;660&amp;quot;&lt;br /&gt;
SUBSYSTEM==&amp;quot;usb|usb_device&amp;quot;, ACTION==&amp;quot;add&amp;quot;, ATTRS{idVendor}==&amp;quot;1209&amp;quot;, ATTRS{idProduct}==&amp;quot;acee&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot; MODE=&amp;quot;660&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== OSC ==&lt;br /&gt;
&lt;br /&gt;
The message types are described in the  [http://opensoundcontrol.org/spec-1_0 OSC Spec] .&lt;br /&gt;
&lt;br /&gt;
=== Receiving DMX ===&lt;br /&gt;
&lt;br /&gt;
The OSC plugin accepts a number of message formats:&lt;br /&gt;
&lt;br /&gt;
{| border=1 cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
! Path !! OSC Message Type !! Data !! Comments &lt;br /&gt;
|-&lt;br /&gt;
|| /path || 'b' || Blob of length 1 to 512. || The most efficient way of sending DMX data over OSC.&lt;br /&gt;
|-&lt;br /&gt;
|| /path/N || 'i' || Slot value from 0 to 255 || Update a single slot. N is the slot number from 1 - 512. &lt;br /&gt;
|-&lt;br /&gt;
|| /path/N || 'f' || Slot value from 0.0 to 1.0 || Update a single slot. N is the slot number from 1 - 512. &lt;br /&gt;
|-&lt;br /&gt;
|| /path || 'ii' || Slot number from 0 to 511, slot value from 0 to 255 || Update a single slot.&lt;br /&gt;
|-&lt;br /&gt;
|| /path || 'if' || Slot number from 0 to 511, slot value from 0.0 to 1.0 || Update a single slot.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Sending DMX ===&lt;br /&gt;
&lt;br /&gt;
The following formats are available for sending data:&lt;br /&gt;
&lt;br /&gt;
{| border=1 cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
! Config Option !! Path !! OSC Message Type !! Data !! Comments &lt;br /&gt;
|-&lt;br /&gt;
|| blob || /path || 'b' || Blob of length 1 to 512. || The most efficient way of sending DMX data over OSC.&lt;br /&gt;
|-&lt;br /&gt;
|| float_array || /path || N * 'f' || Slot values from 0.0 to 1.0 ||  Not quite as efficient as the blob type.&lt;br /&gt;
|-&lt;br /&gt;
|| int_array || /path || N * 'i' || Slot values from 0 to 255 ||  Not quite as efficient as the blob type.&lt;br /&gt;
|-&lt;br /&gt;
|| individual_float || /path/N || 'f' || Slot value from 0.0 to 1.0 || N is the slot number from 1 - 512.  Results in a lot of messages being sent, avoid using this. &lt;br /&gt;
|-&lt;br /&gt;
|| individual_int || /path/N || 'i' || Slot value from 0 to 255 || N is the slot number from 1 - 512. Results in a lot of messages being sent, avoid using this. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Open DMX USB / FTDI RS485 ==&lt;br /&gt;
&lt;br /&gt;
There are two options, the 'Open DMX' plugin that requires the kernel module and the native FTDI driver.&lt;br /&gt;
&lt;br /&gt;
The Open DMX Plugin requires the dmx_usb kernel module, which means it's Linux only. The FTDI driver can be used on either Mac or Linux. See [https://www.openlighting.org/ola/get-help/ola-faq/#What_is_the_difference_between_the_different_USB_plugins here] for more info.&lt;br /&gt;
&lt;br /&gt;
If you're having issues with the device failing to transmit DMX, these links might help:&lt;br /&gt;
*[http://stevenbreuls.com/2014/04/dmx-rs485-wrong-board-fix/ http://stevenbreuls.com/2014/04/dmx-rs485-wrong-board-fix/]&lt;br /&gt;
*[http://falconchristmas.com/forum/index.php/topic,858.msg9877.html#msg9877 http://falconchristmas.com/forum/index.php/topic,858.msg9877.html#msg9877]&lt;br /&gt;
&lt;br /&gt;
=== Linux, Open DMX Kernel Module ===&lt;br /&gt;
&lt;br /&gt;
Make sure the opendmx plugin is enabled.&lt;br /&gt;
Make sure the dmx_usb kernel module is loaded. &lt;br /&gt;
&lt;br /&gt;
===Mac FTDI ===&lt;br /&gt;
&lt;br /&gt;
You must have libftdi-dev installed before you run ./configure.  Otherwise the FTDI DMX plugin won't show up in the list of OLA plugins. &lt;br /&gt;
&lt;br /&gt;
Enable the FTDI driver (ola-ftdidmx ) and disable the USB Serial and Open DMX drivers (ola-usbserial.conf &amp;amp;  ola-opendmx.conf) &lt;br /&gt;
&lt;br /&gt;
=== Linux, FTDI ===&lt;br /&gt;
&lt;br /&gt;
Same as Mac, but you also need to make sure that you add the following [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 for ftdi devices&lt;br /&gt;
SUBSYSTEM==&amp;quot;usb|usb_device&amp;quot;, ACTION==&amp;quot;add&amp;quot;, ATTRS{idVendor}==&amp;quot;0403&amp;quot;, ATTRS{idProduct}==&amp;quot;6001&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Scanlime Fadecandy==&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 Scanlime Fadecandy device&lt;br /&gt;
SUBSYSTEM==&amp;quot;usb|usb_device&amp;quot;, ACTION==&amp;quot;add&amp;quot;, ATTRS{idVendor}==&amp;quot;1d50&amp;quot;, ATTRS{idProduct}==&amp;quot;607a&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SPI ==&lt;br /&gt;
&lt;br /&gt;
This plugin is designed for the Raspberry Pi. It may work on other hardware, but that's up to you. For instructions on the hardware side of things see [[OLA LED Pixels]].&lt;br /&gt;
&lt;br /&gt;
Enable the spi-bcm2708 module, depending on the version of Raspbian you're running it will either be via Device Tree or by editing /etc/modprobe.d/raspi-blacklist.conf.&lt;br /&gt;
&lt;br /&gt;
For recent versions you can use raspi-config's Advanced Options then SPI, see here for more info:&lt;br /&gt;
https://www.raspberrypi.org/documentation/configuration/raspi-config.md&lt;br /&gt;
&lt;br /&gt;
Or alternatively by manually enabling the SPI Device Tree by uncommenting the dtparam=spi=on line in /boot/config.txt as explained here:&lt;br /&gt;
https://www.raspberrypi.org/documentation/configuration/device-tree.md&lt;br /&gt;
&lt;br /&gt;
For older machines, edit /etc/modprobe.d/raspi-blacklist.conf and comment out the &amp;quot;blacklist spi-bcm2708&amp;quot; line. The file should look something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# blacklist spi and i2c by default (many users don't need them)&lt;br /&gt;
&lt;br /&gt;
#blacklist spi-bcm2708&lt;br /&gt;
blacklist i2c-bcm2708&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In both cases, to allow non-root access, add the following [http://www.reactivated.net/writing_udev_rules.html udev rule] like this in /etc/udev/rules.d/99-spi.rules&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SUBSYSTEM==&amp;quot;spidev&amp;quot;, MODE=&amp;quot;0666&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;
==UART native DMX==&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
====Raspberry Pi====&lt;br /&gt;
&lt;br /&gt;
First stop anything else using the serial port; either use raspi-config (Advanced Options, Serial) or follow the instructions here:&lt;br /&gt;
&lt;br /&gt;
[http://elinux.org/RPi_Serial_Connection#Preventing_Linux_using_the_serial_port http://elinux.org/RPi_Serial_Connection#Preventing_Linux_using_the_serial_port]&lt;br /&gt;
&lt;br /&gt;
To make this work, you will also need to raise the Pi's UART clock, because the default one maxes out at 115kbaud. So you will need to add&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
init_uart_clock=16000000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to the /boot/config.txt file on the system. This won't affect any other user of the serial port provided you have a recent kernel.&lt;br /&gt;
&lt;br /&gt;
Another useful link is [http://fw.hardijzer.nl/?p=138 http://fw.hardijzer.nl/?p=138].&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 for  [http://downloads.openlighting.org/Velleman%20kext.dmg OS X 10.9 and above] or  [http://code.google.com/p/open-lighting/downloads/detail?name=libdmxusbshield.dmg OS 10.8 and below]. 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;br /&gt;
&lt;br /&gt;
Some people have reported issues with the K8062 on Ubuntu 14.04.&lt;br /&gt;
Symptoms: When you plug in your K8062, Ubuntu responds with Kernel Panic.&lt;br /&gt;
Problem: comedi and vmk60xx kernel modules are loaded and crash the kernel.&lt;br /&gt;
Solution: WARNING! Attempt at your own risk.&lt;br /&gt;
# Blacklist comedi and vmk60xx in /etc/modprobe.d/blacklist.conf, see [https://wiki.debian.org/KernelModuleBlacklisting https://wiki.debian.org/KernelModuleBlacklisting]&lt;br /&gt;
# Reboot and then run lsusb in the terminal. (Make sure K8062 is connected.)&lt;br /&gt;
# After a short hang, the K8062 should come up as &amp;quot;Velleman Components, Inc.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==KarateLight, KarateDMX==&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/81-karate.rules&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# udev rules file for the karate-device&lt;br /&gt;
KERNEL==&amp;quot;ttyACM?&amp;quot;, ATTRS{product}==&amp;quot;DMX2USB simple&amp;quot;, SYMLINK+=&amp;quot;kldmx0&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then make sure the user olad runs as is a member of 'dialout' which is the default group owning ttyACM?.&lt;/div&gt;</summary>
		<author><name>Peternewman</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=Open_Lighting_Architecture&amp;diff=5865</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=5865"/>
				<updated>2016-03-24T22:10:03Z</updated>
		
		<summary type="html">&lt;p&gt;Peternewman: /* Developer Documentation */ More APIs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:OLA-Logo-Fitted-48px.png|right]]&lt;br /&gt;
Link: http://www.openlighting.org/ola/ &amp;lt;br&amp;gt;&lt;br /&gt;
{{Features|free=yes|tx=yes|rx=yes|linux=yes|osx=yes|http=yes|rdm=yes|win=yes}}&lt;br /&gt;
[[Image:Ola-download.png |right|link=http://opendmx.net/index.php/Download_%26_Install_OLA]]&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;
==Supported Protocols==&lt;br /&gt;
&lt;br /&gt;
{| border=1 cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
! '''Protocol'''!! Linux !! '''Mac OS X'''  || '''FreeBSD''' || '''Windows'''&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]][[Image:Rdm.gif|center]] || [[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]]  || [[Image:Green-tick.png|center]] ||  Not yet&lt;br /&gt;
|-&lt;br /&gt;
|| [[:Category:ESP Net|ESP Net]] || [[Image:Green-tick.png|center]]  || [[Image:Green-tick.png|center]]  || [[Image:Green-tick.png|center]] || [[Image:Green-tick.png|center]]&lt;br /&gt;
|-&lt;br /&gt;
|| [[KiNET]] ||  [[Image:Trans.gif|center]]  ||  [[Image:Trans.gif|center]] ||  [[Image:Trans.gif|center]] || [[Image:Trans.gif|center]]&lt;br /&gt;
|-&lt;br /&gt;
|| [[OSC]] (Open Sound Control)  || [[Image:Green-tick.png|center]]  || [[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]] || [[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]] || [[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]] || [[Image:Green-tick.png|center]] || [[Image:Green-tick.png|center]]&lt;br /&gt;
|}&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'''  || '''FreeBSD''' || '''Windows'''&lt;br /&gt;
|-&lt;br /&gt;
||  [[Anyma uDMX]] || [[Image:Trans.gif|center]] || [[Image:Trans.gif|center]]  || ? || no&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]] || ? || no&lt;br /&gt;
|-&lt;br /&gt;
|| [[DMX 4 Linux]] || [[Image:Trans.gif|center]]  ||  ||  ? || no&lt;br /&gt;
|-&lt;br /&gt;
|| [[DMX USB Pro]] || [[Image:Trans.gif|center]] [[Image:Recv.gif|center]] [[Image:Rdm.gif|center]]  || [[Image:Trans.gif|center]] [[Image:Recv.gif|center]] [[Image:Rdm.gif|center]]  ||  [[Image:Trans.gif|center]] [[Image:Recv.gif|center]] [[Image:Rdm.gif|center]] || no&lt;br /&gt;
|-&lt;br /&gt;
|| [[DMX USB Pro MkII]] || [[Image:Trans.gif|center]] [[Image:Recv.gif|center]] [[Image:Rdm.gif|center]]  || [[Image:Trans.gif|center]] [[Image:Recv.gif|center]] [[Image:Rdm.gif|center]]  ||  [[Image:Trans.gif|center]] [[Image:Recv.gif|center]] [[Image:Rdm.gif|center]] || no&lt;br /&gt;
|-&lt;br /&gt;
|| [[DMX-TRI]] || [[Image:Trans.gif|center]] || [[Image:Trans.gif|center]]  || [[Image:Trans.gif|center]] || no&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]] || ? || no&lt;br /&gt;
|-&lt;br /&gt;
|| [[DMXter4 RDM]] / [[MiniDMXter]] || [[Image:Rdm.gif|center]] || [[Image:Rdm.gif|center]] || ? || no&lt;br /&gt;
|-&lt;br /&gt;
|| [[Eurolite USB DMX512 PRO]] || [[Image:Trans.gif|center]] || [[Image:Trans.gif|center]]  || ? || no&lt;br /&gt;
|-&lt;br /&gt;
|| [[KarateLight]] || [[Image:Trans.gif|center]] ||  || ? || no&lt;br /&gt;
|-&lt;br /&gt;
|| [http://kmtronic.com/kmtronic-dmx-adapter.html KMtronic DMX Adapter] || [[Image:Trans.gif|center]] ||  || ? || no&lt;br /&gt;
|-&lt;br /&gt;
|| [[Open DMX USB]] || [[Image:Trans.gif|center]]  ||  || ? || no&lt;br /&gt;
|-&lt;br /&gt;
|| [[Milford Instruments 1-463]] || [[Image:Trans.gif|center]] || ? || ? || no&lt;br /&gt;
|-&lt;br /&gt;
|| [[Packetheads USB_DMX Dongle]] ||  [[Image:Green-tick.png|center]]  ||  [[Image:Green-tick.png|center]]  || ? || no&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]] || ? || no&lt;br /&gt;
|-&lt;br /&gt;
|| [[RDM-TRI]] || [[Image:Trans.gif|center]] [[Image:Rdm.gif|center]] || [[Image:Trans.gif|center]] [[Image:Rdm.gif|center]] ||   [[Image:Trans.gif|center]] [[Image:Rdm.gif|center]]  || no&lt;br /&gt;
|-&lt;br /&gt;
|| [http://www.doityourselfchristmas.com/wiki/index.php?title=Renard Renard Serial Protocol (Renard SS24, SS8, etc)] || [[Image:Trans.gif|center]] || ? || ? || no&lt;br /&gt;
|-&lt;br /&gt;
|| [[Robe Universal Interface]] || [[Image:Trans.gif|center]]  [[Image:Recv.gif|center]] [[Image:Rdm.gif|center]] || [[Image:Trans.gif|center]]  [[Image:Recv.gif|center]] [[Image:Rdm.gif|center]] || ? || no&lt;br /&gt;
|-&lt;br /&gt;
|| [[RUNIT WTX]] || [[Image:Trans.gif|center]]  [[Image:Recv.gif|center]] [[Image:Rdm.gif|center]] || [[Image:Trans.gif|center]]  [[Image:Recv.gif|center]] [[Image:Rdm.gif|center]] ||  ? || no&lt;br /&gt;
|-&lt;br /&gt;
|| [[OLA_LED_Pixels|SPI control of LED pixels]] || [[Image:Trans.gif|center]] [[Image:Rdm.gif|center]] || ? || ? || no&lt;br /&gt;
|-&lt;br /&gt;
|| [[StageProfi]] || [[Image:Trans.gif|center]]  || [[Image:Trans.gif|center]] (Ethernet version only) || ? || no&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]]  || ? || no&lt;br /&gt;
|-&lt;br /&gt;
|| [[ultraDMX Pro]] ||  [[Image:Trans.gif|center]] [[Image:Recv.gif|center]]  || [[Image:Trans.gif|center]] [[Image:Recv.gif|center]]  || ? || no&lt;br /&gt;
|-&lt;br /&gt;
|| [[ultraDMX Micro]] ||  [[Image:Trans.gif|center]] [[Image:Recv.gif|center]]  || [[Image:Trans.gif|center]] [[Image:Recv.gif|center]]  || ? || no&lt;br /&gt;
|-&lt;br /&gt;
|| [[USBDMX2]] || [[Image:Trans.gif|center]]  || [[Image:Trans.gif|center]]  || ? || no&lt;br /&gt;
|-&lt;br /&gt;
|| [http://www.soh.cz/produkty/modul-usb-dmx512 USB-DMX512] || [[Image:Trans.gif|center]]  || [[Image:Trans.gif|center]]  || ? || no&lt;br /&gt;
|-&lt;br /&gt;
|| [[Velleman K8062]] || [[Image:Trans.gif|center]]  || [[Image:Trans.gif|center]]  || ? || no&lt;br /&gt;
|-&lt;br /&gt;
|| [[Velleman_K8062_Upgrade|VX8062]] || [[Image:Trans.gif|center]]  || [[Image:Trans.gif|center]]  || ? || no&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 &amp;amp; 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;
&lt;br /&gt;
===Tutorials===&lt;br /&gt;
* [[OLA on Windows with VMWare]]&lt;br /&gt;
* [[OLA Live CD]], instructions on how to use the Live CD&lt;br /&gt;
* [[OLA Raspberry Pi]]&lt;br /&gt;
* [[OLA on Beaglebone]]&lt;br /&gt;
* [[OLAGuruPlug]] - Running OLA on a [http://www.globalscaletechnologies.com/c-4-guruplugs.aspx GuruPlug]&lt;br /&gt;
* [[OLA RDM Responder Testing]]&lt;br /&gt;
* [[OLA LED Pixels]] - Using OLA and a Pi to drive SPI LED tape&lt;br /&gt;
* [[OlaOutput Max External]] - Setup OlaOutput on Mac OS X to send DMX messages from Max/MSP/Jitter&lt;br /&gt;
* [[OlaLED]] - control RGB LED via HTTP&lt;br /&gt;
&lt;br /&gt;
===Advanced Topics===&lt;br /&gt;
* [[OLA Merging Algorithms]]&lt;br /&gt;
* [[OLA DiffServ support]] (QOS settings)&lt;br /&gt;
* [[OLA Thread Scheduling]] (Control latency)&lt;br /&gt;
* [[OLA DMX Trigger]] - Using OLA and DMX to trigger events on a computer&lt;br /&gt;
* [[OLA Patch persistency]]&lt;br /&gt;
&lt;br /&gt;
===Developer Documentation===&lt;br /&gt;
&lt;br /&gt;
The developer documentation is in the process of being re-written as doxygen comments in the src tarball. The latest generated copy of the docs is hosted at https://docs.openlighting.org/doc/latest/ versions for specific releases are hosted at https://docs.openlighting.org/doc/.  &lt;br /&gt;
&lt;br /&gt;
* [[OLA developer info]] - about the source code and structure&lt;br /&gt;
* [[doc:index|OLA Doxygen Docs]] - Generated Doxygen docs aimed at developers creating clients.&lt;br /&gt;
** See [[OLA_on_Linux#Doxygen_Documentation|here]] for info on generating Doxygen docs locally.&lt;br /&gt;
* [[code-raw:plugins/osc/README|Walkthrough of the OSC plugin code]] - good for people wanting to create new plugins&lt;br /&gt;
* OLA APIs - See also [https://www.openlighting.org/ola/apis/ https://www.openlighting.org/ola/apis/]&lt;br /&gt;
** Protobufs Based&lt;br /&gt;
*** [[doc:client_tutorial|OLA Client API]] - the C++ API, (also [[OLA Client API|older examples]])&lt;br /&gt;
*** [[OLA Python API]] - easy DMX programming&lt;br /&gt;
*** [[code:java|Java]] - currently a work in progress (see an example using it [https://github.com/neophob/ola-to-tpm2net here])&lt;br /&gt;
** Alternatives&lt;br /&gt;
*** [[OLA JSON API|JSON]] - Browse to /help on your OLA webserver to see the available commands (append ?help=1 to the end of a command for more info in newer versions of OLA)&lt;br /&gt;
*** [[OSC]] - Not technically an API, but not strictly a lighting protocol either, enable the OSC plugin and use it to communicate with OLA from a variety of software&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;
* [[OLA on Android]] - Notes on Android support (in progress)&lt;br /&gt;
* [[Cross Compiling OLA]]&lt;br /&gt;
* [[OLA Buildbot|Buildbot]] - For continuous build and testing&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;
* [[RDM PID Definitions]]&lt;br /&gt;
* [[OLA Performance Stats]]&lt;br /&gt;
* [[OLA TimeCode]]&lt;br /&gt;
* [[doc:rpc_system|RPC Protocol]] (or &amp;quot;How do I talk to OLA in a different language&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
===Old Tutorials===&lt;br /&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>Peternewman</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OLP_SOC_Ideas_Page&amp;diff=5864</id>
		<title>OLP SOC Ideas Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=OLP_SOC_Ideas_Page&amp;diff=5864"/>
				<updated>2016-02-18T14:50:59Z</updated>
		
		<summary type="html">&lt;p&gt;Peternewman: OLE ideas&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page lists some ideas for [https://summerofcode.withgoogle.com/ Google Summer of Code 2016] projects for the [[Open Lighting Project]]. You can use these ideas as a basis for your application, or come up with something different. Please see the Google SOC site for the 2016 timeline. If you would like to discuss any of these ideas, or are thinking of applying to work with us, please send an email to the [https://groups.google.com/forum/?fromgroups#!forum/open-lighting Open Lighting List] introducing yourself. You can also see what projects [https://www.openlighting.org/openlightingproject/get-involved/gsoc/ past students] did.&lt;br /&gt;
&lt;br /&gt;
Please also read our [https://www.openlighting.org/openlightingproject/get-involved/gsoc/gsoc-information/ GSOC Application Guide].&lt;br /&gt;
&lt;br /&gt;
=Open Lighting Architecture Ideas=&lt;br /&gt;
Ideas for [https://www.openlighting.org/ola/ OLA].&lt;br /&gt;
== Adding RDM support to the &amp;quot;new&amp;quot; Web UI ==&lt;br /&gt;
&lt;br /&gt;
This project would include:&lt;br /&gt;
* Adding support for RDM discovery to list devices and sub-devices in the UI and extending the existing supporting code in the web server back-end where necessary&lt;br /&gt;
* Adding support to render the generic JSON returned by the back-end&lt;br /&gt;
* Adding support for Ack Timer packets in the RDM flow&lt;br /&gt;
* Adding support for additional parameter IDs or (PIDS).&lt;br /&gt;
'''Skills Required''': HTML, Javascript, C++ &amp;lt;br/&amp;gt;&lt;br /&gt;
'''Estimated Difficulty''': Medium&lt;br /&gt;
&lt;br /&gt;
== Adding support for more RDM PIDS to the Web UI(s) ==&lt;br /&gt;
&lt;br /&gt;
Our current &amp;quot;old&amp;quot; Web UI lacks support for a lot of the really cool parameters and features that RDM is capable of (our &amp;quot;new&amp;quot; Web UI currently lacks all RDM support, but see the idea above for that). The main task of this project would to add support for RDM sub-devices and Ack Timer. &lt;br /&gt;
&lt;br /&gt;
This project would include:&lt;br /&gt;
* Adding support for RDM sub-devices in the UI and supporting code in the web server back-end&lt;br /&gt;
* Adding support for Ack Timer packets in the RDM flow&lt;br /&gt;
* Adding support for additional parameter ids or (PIDS).&lt;br /&gt;
'''Skills Required''': HTML, Javascript, C++ &amp;lt;br/&amp;gt;&lt;br /&gt;
'''Estimated Difficulty''': Medium&lt;br /&gt;
&lt;br /&gt;
== Raspberry Pi UI ==&lt;br /&gt;
&lt;br /&gt;
The Raspberry Pi is a great platform but lacks a good user interface. With the addition of a small touchscreen, a portable DMX/RDM debugger can be created.&lt;br /&gt;
&lt;br /&gt;
This project would include:&lt;br /&gt;
* Designing, writing and testing the new UI&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Skills Required''': Python ? &amp;lt;br/&amp;gt;&lt;br /&gt;
'''Estimated Difficulty''': Easy&lt;br /&gt;
&lt;br /&gt;
== RESTful API ==&lt;br /&gt;
&lt;br /&gt;
The current API that the website uses is a bit old and needs updated to allow full use of OLA's inner working in a general RESTful way. This would allow third parties to easily build new web based apps that could connect to RDM and DMX devices.&lt;br /&gt;
&lt;br /&gt;
This project would include:&lt;br /&gt;
* Writing and testing the new API&lt;br /&gt;
* Modifying our current Web apps to use the new web API&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Skills Required''': C++, Javascript, HTML, JSON &amp;lt;br/&amp;gt;&lt;br /&gt;
'''Estimated Difficulty''': Easy&lt;br /&gt;
&lt;br /&gt;
== Web Based Configuration of Preferences ==&lt;br /&gt;
&lt;br /&gt;
User Preferences for [[OLA]] are stored in text files but the web UI provides no method for changing any preferences beyond port patchings. At the moment the user is required to stop the OLA Daemon, edit the text files and restart if settings are to be changed.  This project would involve building a generic preference store and exposing it through the web UI. Changing preferences on the fly is likely to expose bugs in some of the OLA plugins. These will need to be fixed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Skills Required''': C++, Javascript, HTML   &amp;lt;br/&amp;gt;&lt;br /&gt;
'''Estimated Difficulty''': Easy&lt;br /&gt;
&lt;br /&gt;
== Asynchronous Web Notification of RDM Messages == &lt;br /&gt;
&lt;br /&gt;
Thanks to sites like GMail and Facebook, users have come to expect asynchronous notification of events in their web browser. [[RDM]] enabled lighting devices can generate events such as ''Over Temperature'' and ''Lamp Faulty'' so it would be nice to alert the users to this. This project would involve work with two Open Source efforts. The student would need to work with [http://www.gnu.org/software/libmicrohttpd/ libmicrohttpd] to add [http://en.wikipedia.org/wiki/WebSocket WebSocket] support (see the [http://lists.gnu.org/archive/html/libmicrohttpd/2012-01/msg00015.html email thread]).&lt;br /&gt;
&lt;br /&gt;
The second step would involve using WebSockets to deliver events to the browser, and building a UI to notify the user. The [[OLA]] UI is built with [http://code.google.com/closure/ Google Closure].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Skills Required''': C++, Network Programming, Javascript, HTML, AngularJS and JQuery or Google Closure&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Estimated Difficulty''': Medium&lt;br /&gt;
&lt;br /&gt;
==Port to Android==&lt;br /&gt;
&lt;br /&gt;
Android is an obvious target for [[OLA]]. Not only does it make perfect sense to use phones &amp;amp; tablets as lighting control interfaces but the Android platform could be used to build embedded lighting control devices. A small amount of this has been done, see [[OLA on Android]]. [[issue:222|Bug #222]] covers this work.&lt;br /&gt;
&lt;br /&gt;
This project would include:&lt;br /&gt;
* Building OLA as a Android Application&lt;br /&gt;
* Adding a [[issue:16|Java client]] or wrapping the C++ client with a Java library.&lt;br /&gt;
* Writing a frontend in Java to demonstrate the capabilities of OLA. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Skills Required''': C++, Java, Android &amp;lt;br/&amp;gt;&lt;br /&gt;
'''Estimated Difficulty''': Hard&lt;br /&gt;
&lt;br /&gt;
==Continue Porting to Windows ==&lt;br /&gt;
&lt;br /&gt;
This is the most requested 'feature' and would significantly expand the reach of the project especially as we approach v1.0. The current supported method of running OLA on Windows is using VMWare  ([[OLA_on_Windows_with_VMWare|instructions]]). This is sub optimal, since it requires the use of non-free software, is challenging for users without Unix command line experience, and doesn't allow Windows applications to communicate with OLA.  Work on a Windows port commenced in mid 2011 (see [[Building_OLA_for_Windows|these notes]]), but was postponed due to lack of resources.&lt;br /&gt;
&lt;br /&gt;
Lukase has got the core and network functionality working on Windows as part of GSOC 2014, but support for hardware interfaces is still missing, as well as one or two network plugins.&lt;br /&gt;
&lt;br /&gt;
A Windows port would enable lighting controller applications like [[QLC]] and [[D::Light]] to move to OLA entirely, and not have to maintain their own plugins.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Skills Required''': C++, Windows Hardware Programming&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Estimated Difficulty''': Hard&lt;br /&gt;
&lt;br /&gt;
== Patcher v2 ==&lt;br /&gt;
&lt;br /&gt;
Patcher v2 is one of the next big projects for [[OLA]] it requires a rewrite of our current daemon to allow users to patch a specific channel:universe to a different channel:universe. It would most likely not be entirely up to the student but would be a small team effort as this touches all major points of our system. This would also require a change in the web interface to possibly allow drag and drop of patching. Depending on the students knowledge they may help with the web interface, web backend or the OLA daemon.&lt;br /&gt;
&lt;br /&gt;
See [[issue:280|issue 280]] for some additional features and thoughts.&lt;br /&gt;
&lt;br /&gt;
'''Skills Required''': C++, Javascript, HTML&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Estimated Difficulty''': Hard&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Open Lighting Embedded (OLE) Ideas=&lt;br /&gt;
Ideas for [https://www.openlighting.org/ole/ OLE].&lt;br /&gt;
&lt;br /&gt;
== DMX in mode ==&lt;br /&gt;
&lt;br /&gt;
OLE currently only supports DMX out from the ports, add support for DMX input too.&lt;br /&gt;
See [[ja-rule-issue:99|issue 99]] for some additional thoughts. You'd also need to make the additional changes to OLA to support DMX input via Ja Rule.&lt;br /&gt;
&lt;br /&gt;
'''Skills Required''': Embedded C, C++&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Estimated Difficulty''': Hard&lt;br /&gt;
&lt;br /&gt;
== Second Port Support ==&lt;br /&gt;
&lt;br /&gt;
OLE currently only supports DMX/RDM out from the first port, add support on the second too.&lt;br /&gt;
See [[ja-rule-issue:251|issue 251]] for some additional thoughts. You'd also need to make the additional changes to OLA to support the second port. [[ja-rule-issue:226|Issue 226]] details the plan to detect if the unit is a one or two port device. It would also be good to make use of DMX input on both ports as mentioned above.&lt;br /&gt;
&lt;br /&gt;
'''Skills Required''': Embedded C, C++&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Estimated Difficulty''': Medium&lt;br /&gt;
&lt;br /&gt;
== Sniffer mode ==&lt;br /&gt;
&lt;br /&gt;
It would be very useful to be able to use OLE as a DMX/RDM sniffer.&lt;br /&gt;
See [[ja-rule-issue:103|issue 103]] for some additional thoughts. You may also need to make additional changes to OLA to support the sniffer mode.&lt;br /&gt;
&lt;br /&gt;
'''Skills Required''': Embedded C, C++&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Estimated Difficulty''': Hard&lt;/div&gt;</summary>
		<author><name>Peternewman</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OLP_SOC_Ideas_Page&amp;diff=5862</id>
		<title>OLP SOC Ideas Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=OLP_SOC_Ideas_Page&amp;diff=5862"/>
				<updated>2016-02-18T14:38:34Z</updated>
		
		<summary type="html">&lt;p&gt;Peternewman: Peternewman moved page OLA SOC Ideas Page to OLP SOC Ideas Page: Generalise to Open Lighting Project&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page lists some ideas for [https://summerofcode.withgoogle.com/ Google Summer of Code 2016] projects for the [[Open Lighting Project]]. You can use these ideas as a basis for your application, or come up with something different. Please see the Google SOC site for the 2016 timeline. If you would like to discuss any of these ideas, or are thinking of applying to work with us, please send an email to the [https://groups.google.com/forum/?fromgroups#!forum/open-lighting Open Lighting List] introducing yourself. You can also see what projects [https://www.openlighting.org/openlightingproject/get-involved/gsoc/ past students] did.&lt;br /&gt;
&lt;br /&gt;
Please also read our [https://www.openlighting.org/openlightingproject/get-involved/gsoc/gsoc-information/ GSOC Application Guide].&lt;br /&gt;
&lt;br /&gt;
== Adding RDM support to the &amp;quot;new&amp;quot; Web UI ==&lt;br /&gt;
&lt;br /&gt;
This project would include:&lt;br /&gt;
* Adding support for RDM discovery to list devices and sub-devices in the UI and extending the existing supporting code in the web server back-end where necessary&lt;br /&gt;
* Adding support to render the generic JSON returned by the back-end&lt;br /&gt;
* Adding support for Ack Timer packets in the RDM flow&lt;br /&gt;
* Adding support for additional parameter IDs or (PIDS).&lt;br /&gt;
'''Skills Required''': HTML, Javascript, C++ &amp;lt;br/&amp;gt;&lt;br /&gt;
'''Estimated Difficulty''': Medium&lt;br /&gt;
&lt;br /&gt;
== Adding support for more RDM PIDS to the Web UI(s) ==&lt;br /&gt;
&lt;br /&gt;
Our current &amp;quot;old&amp;quot; Web UI lacks support for a lot of the really cool parameters and features that RDM is capable of (our &amp;quot;new&amp;quot; Web UI currently lacks all RDM support, but see the idea above for that). The main task of this project would to add support for RDM sub-devices and Ack Timer. &lt;br /&gt;
&lt;br /&gt;
This project would include:&lt;br /&gt;
* Adding support for RDM sub-devices in the UI and supporting code in the web server back-end&lt;br /&gt;
* Adding support for Ack Timer packets in the RDM flow&lt;br /&gt;
* Adding support for additional parameter ids or (PIDS).&lt;br /&gt;
'''Skills Required''': HTML, Javascript, C++ &amp;lt;br/&amp;gt;&lt;br /&gt;
'''Estimated Difficulty''': Medium&lt;br /&gt;
&lt;br /&gt;
== Raspberry Pi UI ==&lt;br /&gt;
&lt;br /&gt;
The Raspberry Pi is a great platform but lacks a good user interface. With the addition of a small touchscreen, a portable DMX/RDM debugger can be created.&lt;br /&gt;
&lt;br /&gt;
This project would include:&lt;br /&gt;
* Designing, writing and testing the new UI&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Skills Required''': Python ? &amp;lt;br/&amp;gt;&lt;br /&gt;
'''Estimated Difficulty''': Easy&lt;br /&gt;
&lt;br /&gt;
== RESTful API ==&lt;br /&gt;
&lt;br /&gt;
The current API that the website uses is a bit old and needs updated to allow full use of OLA's inner working in a general RESTful way. This would allow third parties to easily build new web based apps that could connect to RDM and DMX devices.&lt;br /&gt;
&lt;br /&gt;
This project would include:&lt;br /&gt;
* Writing and testing the new API&lt;br /&gt;
* Modifying our current Web apps to use the new web API&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Skills Required''': C++, Javascript, HTML, JSON &amp;lt;br/&amp;gt;&lt;br /&gt;
'''Estimated Difficulty''': Easy&lt;br /&gt;
&lt;br /&gt;
== Web Based Configuration of Preferences ==&lt;br /&gt;
&lt;br /&gt;
User Preferences for [[OLA]] are stored in text files but the web UI provides no method for changing any preferences beyond port patchings. At the moment the user is required to stop the OLA Daemon, edit the text files and restart if settings are to be changed.  This project would involve building a generic preference store and exposing it through the web UI. Changing preferences on the fly is likely to expose bugs in some of the OLA plugins. These will need to be fixed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Skills Required''': C++, Javascript, HTML   &amp;lt;br/&amp;gt;&lt;br /&gt;
'''Estimated Difficulty''': Easy&lt;br /&gt;
&lt;br /&gt;
== Asynchronous Web Notification of RDM Messages == &lt;br /&gt;
&lt;br /&gt;
Thanks to sites like GMail and Facebook, users have come to expect asynchronous notification of events in their web browser. [[RDM]] enabled lighting devices can generate events such as ''Over Temperature'' and ''Lamp Faulty'' so it would be nice to alert the users to this. This project would involve work with two Open Source efforts. The student would need to work with [http://www.gnu.org/software/libmicrohttpd/ libmicrohttpd] to add [http://en.wikipedia.org/wiki/WebSocket WebSocket] support (see the [http://lists.gnu.org/archive/html/libmicrohttpd/2012-01/msg00015.html email thread]).&lt;br /&gt;
&lt;br /&gt;
The second step would involve using WebSockets to deliver events to the browser, and building a UI to notify the user. The [[OLA]] UI is built with [http://code.google.com/closure/ Google Closure].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Skills Required''': C++, Network Programming, Javascript, HTML, AngularJS and JQuery or Google Closure&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Estimated Difficulty''': Medium&lt;br /&gt;
&lt;br /&gt;
==Port to Android==&lt;br /&gt;
&lt;br /&gt;
Android is an obvious target for [[OLA]]. Not only does it make perfect sense to use phones &amp;amp; tablets as lighting control interfaces but the Android platform could be used to build embedded lighting control devices. A small amount of this has been done, see [[OLA on Android]]. [[issue:222|Bug #222]] covers this work.&lt;br /&gt;
&lt;br /&gt;
This project would include:&lt;br /&gt;
* Building OLA as a Android Application&lt;br /&gt;
* Adding a [[issue:16|Java client]] or wrapping the C++ client with a Java library.&lt;br /&gt;
* Writing a frontend in Java to demonstrate the capabilities of OLA. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Skills Required''': C++, Java, Android &amp;lt;br/&amp;gt;&lt;br /&gt;
'''Estimated Difficulty''': Hard&lt;br /&gt;
&lt;br /&gt;
==Continue Porting to Windows ==&lt;br /&gt;
&lt;br /&gt;
This is the most requested 'feature' and would significantly expand the reach of the project especially as we approach v1.0. The current supported method of running OLA on Windows is using VMWare  ([[OLA_on_Windows_with_VMWare|instructions]]). This is sub optimal, since it requires the use of non-free software, is challenging for users without Unix command line experience, and doesn't allow Windows applications to communicate with OLA.  Work on a Windows port commenced in mid 2011 (see [[Building_OLA_for_Windows|these notes]]), but was postponed due to lack of resources.&lt;br /&gt;
&lt;br /&gt;
Lukase has got the core and network functionality working on Windows as part of GSOC 2014, but support for hardware interfaces is still missing, as well as one or two network plugins.&lt;br /&gt;
&lt;br /&gt;
A Windows port would enable lighting controller applications like [[QLC]] and [[D::Light]] to move to OLA entirely, and not have to maintain their own plugins.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Skills Required''': C++, Windows Hardware Programming&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Estimated Difficulty''': Hard&lt;br /&gt;
&lt;br /&gt;
== Patcher v2 ==&lt;br /&gt;
&lt;br /&gt;
Patcher v2 is one of the next big projects for [[OLA]] it requires a rewrite of our current daemon to allow users to patch a specific channel:universe to a different channel:universe. It would most likely not be entirely up to the student but would be a small team effort as this touches all major points of our system. This would also require a change in the web interface to possibly allow drag and drop of patching. Depending on the students knowledge they may help with the web interface, web backend or the OLA daemon.&lt;br /&gt;
&lt;br /&gt;
See [[issue:280|issue 280]] for some additional features and thoughts.&lt;br /&gt;
&lt;br /&gt;
'''Skills Required''': C++, Javascript, HTML   &amp;lt;br/&amp;gt;&lt;br /&gt;
'''Estimated Difficulty''': Hard&lt;/div&gt;</summary>
		<author><name>Peternewman</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OLA_SOC_Ideas_Page&amp;diff=5863</id>
		<title>OLA SOC Ideas Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=OLA_SOC_Ideas_Page&amp;diff=5863"/>
				<updated>2016-02-18T14:38:34Z</updated>
		
		<summary type="html">&lt;p&gt;Peternewman: Peternewman moved page OLA SOC Ideas Page to OLP SOC Ideas Page: Generalise to Open Lighting Project&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[OLP SOC Ideas Page]]&lt;/div&gt;</summary>
		<author><name>Peternewman</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OLP_SOC_Ideas_Page&amp;diff=5861</id>
		<title>OLP SOC Ideas Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=OLP_SOC_Ideas_Page&amp;diff=5861"/>
				<updated>2016-02-18T00:52:26Z</updated>
		
		<summary type="html">&lt;p&gt;Peternewman: Updates to 2016 and link to old projects&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page lists some ideas for [https://summerofcode.withgoogle.com/ Google Summer of Code 2016] projects for the [[Open Lighting Project]]. You can use these ideas as a basis for your application, or come up with something different. Please see the Google SOC site for the 2016 timeline. If you would like to discuss any of these ideas, or are thinking of applying to work with us, please send an email to the [https://groups.google.com/forum/?fromgroups#!forum/open-lighting Open Lighting List] introducing yourself. You can also see what projects [https://www.openlighting.org/openlightingproject/get-involved/gsoc/ past students] did.&lt;br /&gt;
&lt;br /&gt;
Please also read our [https://www.openlighting.org/openlightingproject/get-involved/gsoc/gsoc-information/ GSOC Application Guide].&lt;br /&gt;
&lt;br /&gt;
== Adding RDM support to the &amp;quot;new&amp;quot; Web UI ==&lt;br /&gt;
&lt;br /&gt;
This project would include:&lt;br /&gt;
* Adding support for RDM discovery to list devices and sub-devices in the UI and extending the existing supporting code in the web server back-end where necessary&lt;br /&gt;
* Adding support to render the generic JSON returned by the back-end&lt;br /&gt;
* Adding support for Ack Timer packets in the RDM flow&lt;br /&gt;
* Adding support for additional parameter IDs or (PIDS).&lt;br /&gt;
'''Skills Required''': HTML, Javascript, C++ &amp;lt;br/&amp;gt;&lt;br /&gt;
'''Estimated Difficulty''': Medium&lt;br /&gt;
&lt;br /&gt;
== Adding support for more RDM PIDS to the Web UI(s) ==&lt;br /&gt;
&lt;br /&gt;
Our current &amp;quot;old&amp;quot; Web UI lacks support for a lot of the really cool parameters and features that RDM is capable of (our &amp;quot;new&amp;quot; Web UI currently lacks all RDM support, but see the idea above for that). The main task of this project would to add support for RDM sub-devices and Ack Timer. &lt;br /&gt;
&lt;br /&gt;
This project would include:&lt;br /&gt;
* Adding support for RDM sub-devices in the UI and supporting code in the web server back-end&lt;br /&gt;
* Adding support for Ack Timer packets in the RDM flow&lt;br /&gt;
* Adding support for additional parameter ids or (PIDS).&lt;br /&gt;
'''Skills Required''': HTML, Javascript, C++ &amp;lt;br/&amp;gt;&lt;br /&gt;
'''Estimated Difficulty''': Medium&lt;br /&gt;
&lt;br /&gt;
== Raspberry Pi UI ==&lt;br /&gt;
&lt;br /&gt;
The Raspberry Pi is a great platform but lacks a good user interface. With the addition of a small touchscreen, a portable DMX/RDM debugger can be created.&lt;br /&gt;
&lt;br /&gt;
This project would include:&lt;br /&gt;
* Designing, writing and testing the new UI&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Skills Required''': Python ? &amp;lt;br/&amp;gt;&lt;br /&gt;
'''Estimated Difficulty''': Easy&lt;br /&gt;
&lt;br /&gt;
== RESTful API ==&lt;br /&gt;
&lt;br /&gt;
The current API that the website uses is a bit old and needs updated to allow full use of OLA's inner working in a general RESTful way. This would allow third parties to easily build new web based apps that could connect to RDM and DMX devices.&lt;br /&gt;
&lt;br /&gt;
This project would include:&lt;br /&gt;
* Writing and testing the new API&lt;br /&gt;
* Modifying our current Web apps to use the new web API&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Skills Required''': C++, Javascript, HTML, JSON &amp;lt;br/&amp;gt;&lt;br /&gt;
'''Estimated Difficulty''': Easy&lt;br /&gt;
&lt;br /&gt;
== Web Based Configuration of Preferences ==&lt;br /&gt;
&lt;br /&gt;
User Preferences for [[OLA]] are stored in text files but the web UI provides no method for changing any preferences beyond port patchings. At the moment the user is required to stop the OLA Daemon, edit the text files and restart if settings are to be changed.  This project would involve building a generic preference store and exposing it through the web UI. Changing preferences on the fly is likely to expose bugs in some of the OLA plugins. These will need to be fixed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Skills Required''': C++, Javascript, HTML   &amp;lt;br/&amp;gt;&lt;br /&gt;
'''Estimated Difficulty''': Easy&lt;br /&gt;
&lt;br /&gt;
== Asynchronous Web Notification of RDM Messages == &lt;br /&gt;
&lt;br /&gt;
Thanks to sites like GMail and Facebook, users have come to expect asynchronous notification of events in their web browser. [[RDM]] enabled lighting devices can generate events such as ''Over Temperature'' and ''Lamp Faulty'' so it would be nice to alert the users to this. This project would involve work with two Open Source efforts. The student would need to work with [http://www.gnu.org/software/libmicrohttpd/ libmicrohttpd] to add [http://en.wikipedia.org/wiki/WebSocket WebSocket] support (see the [http://lists.gnu.org/archive/html/libmicrohttpd/2012-01/msg00015.html email thread]).&lt;br /&gt;
&lt;br /&gt;
The second step would involve using WebSockets to deliver events to the browser, and building a UI to notify the user. The [[OLA]] UI is built with [http://code.google.com/closure/ Google Closure].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Skills Required''': C++, Network Programming, Javascript, HTML, AngularJS and JQuery or Google Closure&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Estimated Difficulty''': Medium&lt;br /&gt;
&lt;br /&gt;
==Port to Android==&lt;br /&gt;
&lt;br /&gt;
Android is an obvious target for [[OLA]]. Not only does it make perfect sense to use phones &amp;amp; tablets as lighting control interfaces but the Android platform could be used to build embedded lighting control devices. A small amount of this has been done, see [[OLA on Android]]. [[issue:222|Bug #222]] covers this work.&lt;br /&gt;
&lt;br /&gt;
This project would include:&lt;br /&gt;
* Building OLA as a Android Application&lt;br /&gt;
* Adding a [[issue:16|Java client]] or wrapping the C++ client with a Java library.&lt;br /&gt;
* Writing a frontend in Java to demonstrate the capabilities of OLA. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Skills Required''': C++, Java, Android &amp;lt;br/&amp;gt;&lt;br /&gt;
'''Estimated Difficulty''': Hard&lt;br /&gt;
&lt;br /&gt;
==Continue Porting to Windows ==&lt;br /&gt;
&lt;br /&gt;
This is the most requested 'feature' and would significantly expand the reach of the project especially as we approach v1.0. The current supported method of running OLA on Windows is using VMWare  ([[OLA_on_Windows_with_VMWare|instructions]]). This is sub optimal, since it requires the use of non-free software, is challenging for users without Unix command line experience, and doesn't allow Windows applications to communicate with OLA.  Work on a Windows port commenced in mid 2011 (see [[Building_OLA_for_Windows|these notes]]), but was postponed due to lack of resources.&lt;br /&gt;
&lt;br /&gt;
Lukase has got the core and network functionality working on Windows as part of GSOC 2014, but support for hardware interfaces is still missing, as well as one or two network plugins.&lt;br /&gt;
&lt;br /&gt;
A Windows port would enable lighting controller applications like [[QLC]] and [[D::Light]] to move to OLA entirely, and not have to maintain their own plugins.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Skills Required''': C++, Windows Hardware Programming&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Estimated Difficulty''': Hard&lt;br /&gt;
&lt;br /&gt;
== Patcher v2 ==&lt;br /&gt;
&lt;br /&gt;
Patcher v2 is one of the next big projects for [[OLA]] it requires a rewrite of our current daemon to allow users to patch a specific channel:universe to a different channel:universe. It would most likely not be entirely up to the student but would be a small team effort as this touches all major points of our system. This would also require a change in the web interface to possibly allow drag and drop of patching. Depending on the students knowledge they may help with the web interface, web backend or the OLA daemon.&lt;br /&gt;
&lt;br /&gt;
See [[issue:280|issue 280]] for some additional features and thoughts.&lt;br /&gt;
&lt;br /&gt;
'''Skills Required''': C++, Javascript, HTML   &amp;lt;br/&amp;gt;&lt;br /&gt;
'''Estimated Difficulty''': Hard&lt;/div&gt;</summary>
		<author><name>Peternewman</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OLP_SOC_Ideas_Page&amp;diff=5860</id>
		<title>OLP SOC Ideas Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=OLP_SOC_Ideas_Page&amp;diff=5860"/>
				<updated>2016-02-18T00:48:59Z</updated>
		
		<summary type="html">&lt;p&gt;Peternewman: More ideas&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page lists some ideas for [http://www.google-melange.com/gsoc/homepage/google/gsoc2014 Google Summer of Code 2014] projects for the [[Open Lighting Project]]. You can use these ideas as a basis for your application, or come up with something different. Please see the Google SOC site for the 2014 timeline. If you would like to discuss any of these ideas, or are thinking of applying to work with us, please send an email to the [https://groups.google.com/forum/?fromgroups#!forum/open-lighting Open Lighting List] introducing yourself.&lt;br /&gt;
&lt;br /&gt;
Please also read our [https://www.openlighting.org/openlightingproject/get-involved/gsoc/gsoc-information/ GSOC Application Guide].&lt;br /&gt;
&lt;br /&gt;
== Adding RDM support to the &amp;quot;new&amp;quot; Web UI ==&lt;br /&gt;
&lt;br /&gt;
This project would include:&lt;br /&gt;
* Adding support for RDM discovery to list devices and sub-devices in the UI and extending the existing supporting code in the web server back-end where necessary&lt;br /&gt;
* Adding support to render the generic JSON returned by the back-end&lt;br /&gt;
* Adding support for Ack Timer packets in the RDM flow&lt;br /&gt;
* Adding support for additional parameter IDs or (PIDS).&lt;br /&gt;
'''Skills Required''': HTML, Javascript, C++ &amp;lt;br/&amp;gt;&lt;br /&gt;
'''Estimated Difficulty''': Medium&lt;br /&gt;
&lt;br /&gt;
== Adding support for more RDM PIDS to the Web UI(s) ==&lt;br /&gt;
&lt;br /&gt;
Our current &amp;quot;old&amp;quot; Web UI lacks support for a lot of the really cool parameters and features that RDM is capable of (our &amp;quot;new&amp;quot; Web UI currently lacks all RDM support, but see the idea above for that). The main task of this project would to add support for RDM sub-devices and Ack Timer. &lt;br /&gt;
&lt;br /&gt;
This project would include:&lt;br /&gt;
* Adding support for RDM sub-devices in the UI and supporting code in the web server back-end&lt;br /&gt;
* Adding support for Ack Timer packets in the RDM flow&lt;br /&gt;
* Adding support for additional parameter ids or (PIDS).&lt;br /&gt;
'''Skills Required''': HTML, Javascript, C++ &amp;lt;br/&amp;gt;&lt;br /&gt;
'''Estimated Difficulty''': Medium&lt;br /&gt;
&lt;br /&gt;
== Raspberry Pi UI ==&lt;br /&gt;
&lt;br /&gt;
The Raspberry Pi is a great platform but lacks a good user interface. With the addition of a small touchscreen, a portable DMX/RDM debugger can be created.&lt;br /&gt;
&lt;br /&gt;
This project would include:&lt;br /&gt;
* Designing, writing and testing the new UI&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Skills Required''': Python ? &amp;lt;br/&amp;gt;&lt;br /&gt;
'''Estimated Difficulty''': Easy&lt;br /&gt;
&lt;br /&gt;
== RESTful API ==&lt;br /&gt;
&lt;br /&gt;
The current API that the website uses is a bit old and needs updated to allow full use of OLA's inner working in a general RESTful way. This would allow third parties to easily build new web based apps that could connect to RDM and DMX devices.&lt;br /&gt;
&lt;br /&gt;
This project would include:&lt;br /&gt;
* Writing and testing the new API&lt;br /&gt;
* Modifying our current Web apps to use the new web API&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Skills Required''': C++, Javascript, HTML, JSON &amp;lt;br/&amp;gt;&lt;br /&gt;
'''Estimated Difficulty''': Easy&lt;br /&gt;
&lt;br /&gt;
== Web Based Configuration of Preferences ==&lt;br /&gt;
&lt;br /&gt;
User Preferences for [[OLA]] are stored in text files but the web UI provides no method for changing any preferences beyond port patchings. At the moment the user is required to stop the OLA Daemon, edit the text files and restart if settings are to be changed.  This project would involve building a generic preference store and exposing it through the web UI. Changing preferences on the fly is likely to expose bugs in some of the OLA plugins. These will need to be fixed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Skills Required''': C++, Javascript, HTML   &amp;lt;br/&amp;gt;&lt;br /&gt;
'''Estimated Difficulty''': Easy&lt;br /&gt;
&lt;br /&gt;
== Asynchronous Web Notification of RDM Messages == &lt;br /&gt;
&lt;br /&gt;
Thanks to sites like GMail and Facebook, users have come to expect asynchronous notification of events in their web browser. [[RDM]] enabled lighting devices can generate events such as ''Over Temperature'' and ''Lamp Faulty'' so it would be nice to alert the users to this. This project would involve work with two Open Source efforts. The student would need to work with [http://www.gnu.org/software/libmicrohttpd/ libmicrohttpd] to add [http://en.wikipedia.org/wiki/WebSocket WebSocket] support (see the [http://lists.gnu.org/archive/html/libmicrohttpd/2012-01/msg00015.html email thread]).&lt;br /&gt;
&lt;br /&gt;
The second step would involve using WebSockets to deliver events to the browser, and building a UI to notify the user. The [[OLA]] UI is built with [http://code.google.com/closure/ Google Closure].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Skills Required''': C++, Network Programming, Javascript, HTML, AngularJS and JQuery or Google Closure&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Estimated Difficulty''': Medium&lt;br /&gt;
&lt;br /&gt;
==Port to Android==&lt;br /&gt;
&lt;br /&gt;
Android is an obvious target for [[OLA]]. Not only does it make perfect sense to use phones &amp;amp; tablets as lighting control interfaces but the Android platform could be used to build embedded lighting control devices. A small amount of this has been done, see [[OLA on Android]]. [[issue:222|Bug #222]] covers this work.&lt;br /&gt;
&lt;br /&gt;
This project would include:&lt;br /&gt;
* Building OLA as a Android Application&lt;br /&gt;
* Adding a [[issue:16|Java client]] or wrapping the C++ client with a Java library.&lt;br /&gt;
* Writing a frontend in Java to demonstrate the capabilities of OLA. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Skills Required''': C++, Java, Android &amp;lt;br/&amp;gt;&lt;br /&gt;
'''Estimated Difficulty''': Hard&lt;br /&gt;
&lt;br /&gt;
==Continue Porting to Windows ==&lt;br /&gt;
&lt;br /&gt;
This is the most requested 'feature' and would significantly expand the reach of the project especially as we approach v1.0. The current supported method of running OLA on Windows is using VMWare  ([[OLA_on_Windows_with_VMWare|instructions]]). This is sub optimal, since it requires the use of non-free software, is challenging for users without Unix command line experience, and doesn't allow Windows applications to communicate with OLA.  Work on a Windows port commenced in mid 2011 (see [[Building_OLA_for_Windows|these notes]]), but was postponed due to lack of resources.&lt;br /&gt;
&lt;br /&gt;
Lukase has got the core and network functionality working on Windows as part of GSOC 2014, but support for hardware interfaces is still missing, as well as one or two network plugins.&lt;br /&gt;
&lt;br /&gt;
A Windows port would enable lighting controller applications like [[QLC]] and [[D::Light]] to move to OLA entirely, and not have to maintain their own plugins.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Skills Required''': C++, Windows Hardware Programming&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Estimated Difficulty''': Hard&lt;br /&gt;
&lt;br /&gt;
== Patcher v2 ==&lt;br /&gt;
&lt;br /&gt;
Patcher v2 is one of the next big projects for [[OLA]] it requires a rewrite of our current daemon to allow users to patch a specific channel:universe to a different channel:universe. It would most likely not be entirely up to the student but would be a small team effort as this touches all major points of our system. This would also require a change in the web interface to possibly allow drag and drop of patching. Depending on the students knowledge they may help with the web interface, web backend or the OLA daemon.&lt;br /&gt;
&lt;br /&gt;
See [[issue:280|issue 280]] for some additional features and thoughts.&lt;br /&gt;
&lt;br /&gt;
'''Skills Required''': C++, Javascript, HTML   &amp;lt;br/&amp;gt;&lt;br /&gt;
'''Estimated Difficulty''': Hard&lt;/div&gt;</summary>
		<author><name>Peternewman</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OLA_Device_Specific_Configuration&amp;diff=5859</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=5859"/>
				<updated>2016-02-17T00:36:12Z</updated>
		
		<summary type="html">&lt;p&gt;Peternewman: More udev rule explanation&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;
==Streaming ACN / E1.31==&lt;br /&gt;
&lt;br /&gt;
===All Platforms===&lt;br /&gt;
Some older networking gear only supports an old revision of E1.31 Called Revision 20. To use this older version you need to change a line in ola-e131.conf. Change this line&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
revision = 0.46&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to this line&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
revision = 0.2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Only do this if the older gear cannot accept the standardized version of E1.31.&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
If you are planning to receive large amounts of multicast traffic 20+, you will need to adjust the maximum amount of igmp memberships.&lt;br /&gt;
Use the following command:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo &amp;lt;number_of_memberships&amp;gt; | sudo tee /proc/sys/net/ipv4/igmp_max_memberships&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example this command sets the maximum number of igmp memberships to 256:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo 256 | sudo tee /proc/sys/net/ipv4/igmp_max_memberships&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Eurolite USB DMX512 PRO==&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
Sometime the cdc_acm kernel module claims the device. If this happens you'll see errors like &amp;quot;Cannot claim device&amp;quot; and/or &amp;quot;another process has device opened for exclusive access&amp;quot;. To avoid this you can remove the module (rmmod). A udev rule like what is used for the Anyma device should also work.&lt;br /&gt;
&lt;br /&gt;
You may also need the following [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;
SUBSYSTEMS==&amp;quot;usb&amp;quot;, ATTRS{idVendor}==&amp;quot;04d8&amp;quot;,ATTRS{idProduct}==&amp;quot;0xfa63&amp;quot;, MODE=&amp;quot;0660&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Mac===&lt;br /&gt;
&lt;br /&gt;
Install the [http://code.google.com/p/open-lighting/downloads/detail?name=euroliteusbshield.dmg&amp;amp;can=2&amp;amp;q=#makechanges KEXT].&lt;br /&gt;
&lt;br /&gt;
== General Purpose I/O ==&lt;br /&gt;
&lt;br /&gt;
This has only been tested on a Raspberry Pi device. You can find information about the GPIO features on a Pi at [http://elinux.org/RPi_Low-level_peripherals elinux.org]&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
You'll need to export the GPIO pins. For example, to use pin 23, as root run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ echo 23 &amp;gt; /sys/class/gpio/export&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You'll also need to ensure that the user olad runs as has permission to change the level of the Pins. Each of the following files should be writeable:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/sys/class/gpio/gpio23/direction&lt;br /&gt;
/sys/class/gpio/gpio23/value&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You could for example do this by running the following as root (assuming olad is in the plugdev group, which you can check with &amp;quot;groups olad&amp;quot;)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chgrp plugdev /sys/class/gpio/gpio23/direction&lt;br /&gt;
chmod g+w /sys/class/gpio/gpio23/direction&lt;br /&gt;
chgrp plugdev /sys/class/gpio/gpio23/value&lt;br /&gt;
chmod g+w /sys/class/gpio/gpio23/value&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ja Rule ==&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
You need the following [http://www.reactivated.net/writing_udev_rules.html udev rule] like this in /etc/udev/rules.d/10-local.rules&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SUBSYSTEM==&amp;quot;usb|usb_device&amp;quot;, ACTION==&amp;quot;add&amp;quot;, ATTRS{idVendor}==&amp;quot;1209&amp;quot;, ATTRS{idProduct}==&amp;quot;aced&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot; MODE=&amp;quot;660&amp;quot;&lt;br /&gt;
SUBSYSTEM==&amp;quot;usb|usb_device&amp;quot;, ACTION==&amp;quot;add&amp;quot;, ATTRS{idVendor}==&amp;quot;1209&amp;quot;, ATTRS{idProduct}==&amp;quot;acee&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot; MODE=&amp;quot;660&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== OSC ==&lt;br /&gt;
&lt;br /&gt;
The message types are described in the  [http://opensoundcontrol.org/spec-1_0 OSC Spec] .&lt;br /&gt;
&lt;br /&gt;
=== Receiving DMX ===&lt;br /&gt;
&lt;br /&gt;
The OSC plugin accepts a number of message formats:&lt;br /&gt;
&lt;br /&gt;
{| border=1 cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
! Path !! OSC Message Type !! Data !! Comments &lt;br /&gt;
|-&lt;br /&gt;
|| /path || 'b' || Blob of length 1 to 512. || The most efficient way of sending DMX data over OSC.&lt;br /&gt;
|-&lt;br /&gt;
|| /path/N || 'i' || Slot value from 0 to 255 || Update a single slot. N is the slot number from 1 - 512. &lt;br /&gt;
|-&lt;br /&gt;
|| /path/N || 'f' || Slot value from 0.0 to 1.0 || Update a single slot. N is the slot number from 1 - 512. &lt;br /&gt;
|-&lt;br /&gt;
|| /path || 'ii' || Slot number from 0 to 511, slot value from 0 to 255 || Update a single slot.&lt;br /&gt;
|-&lt;br /&gt;
|| /path || 'if' || Slot number from 0 to 511, slot value from 0.0 to 1.0 || Update a single slot.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Sending DMX ===&lt;br /&gt;
&lt;br /&gt;
The following formats are available for sending data:&lt;br /&gt;
&lt;br /&gt;
{| border=1 cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
! Config Option !! Path !! OSC Message Type !! Data !! Comments &lt;br /&gt;
|-&lt;br /&gt;
|| blob || /path || 'b' || Blob of length 1 to 512. || The most efficient way of sending DMX data over OSC.&lt;br /&gt;
|-&lt;br /&gt;
|| float_array || /path || N * 'f' || Slot values from 0.0 to 1.0 ||  Not quite as efficient as the blob type.&lt;br /&gt;
|-&lt;br /&gt;
|| int_array || /path || N * 'i' || Slot values from 0 to 255 ||  Not quite as efficient as the blob type.&lt;br /&gt;
|-&lt;br /&gt;
|| individual_float || /path/N || 'f' || Slot value from 0.0 to 1.0 || N is the slot number from 1 - 512.  Results in a lot of messages being sent, avoid using this. &lt;br /&gt;
|-&lt;br /&gt;
|| individual_int || /path/N || 'i' || Slot value from 0 to 255 || N is the slot number from 1 - 512. Results in a lot of messages being sent, avoid using this. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Open DMX USB / FTDI RS485 ==&lt;br /&gt;
&lt;br /&gt;
There are two options, the 'Open DMX' plugin that requires the kernel module and the native FTDI driver.&lt;br /&gt;
&lt;br /&gt;
The Open DMX Plugin requires the dmx_usb kernel module, which means it's Linux only. The FTDI driver can be used on either Mac or Linux.&lt;br /&gt;
&lt;br /&gt;
=== Linux, Open DMX Kernel Module ===&lt;br /&gt;
&lt;br /&gt;
Make sure the opendmx plugin is enabled.&lt;br /&gt;
Make sure the dmx_usb kernel module is loaded. &lt;br /&gt;
&lt;br /&gt;
===Mac FTDI ===&lt;br /&gt;
&lt;br /&gt;
You must have libftdi-dev installed before you run ./configure.  Otherwise the FTDI DMX plugin won't show up in the list of OLA plugins. &lt;br /&gt;
&lt;br /&gt;
Enable the FTDI driver (ola-ftdidmx ) and disable the USB Serial and Open DMX drivers (ola-usbserial.conf &amp;amp;  ola-opendmx.conf) &lt;br /&gt;
&lt;br /&gt;
=== Linux, FTDI ===&lt;br /&gt;
&lt;br /&gt;
Same as Mac, but you also need to make sure that you add the following [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 for ftdi devices&lt;br /&gt;
SUBSYSTEM==&amp;quot;usb|usb_device&amp;quot;, ACTION==&amp;quot;add&amp;quot;, ATTRS{idVendor}==&amp;quot;0403&amp;quot;, ATTRS{idProduct}==&amp;quot;6001&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Scanlime Fadecandy==&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 Scanlime Fadecandy device&lt;br /&gt;
SUBSYSTEM==&amp;quot;usb|usb_device&amp;quot;, ACTION==&amp;quot;add&amp;quot;, ATTRS{idVendor}==&amp;quot;1d50&amp;quot;, ATTRS{idProduct}==&amp;quot;607a&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SPI ==&lt;br /&gt;
&lt;br /&gt;
This plugin is designed for the Raspberry Pi. It may work on other hardware, but that's up to you. For instructions on the hardware side of things see [[OLA LED Pixels]].&lt;br /&gt;
&lt;br /&gt;
Enable the spi-bcm2708 module, depending on the version of Raspbian you're running it will either be via Device Tree or by editing /etc/modprobe.d/raspi-blacklist.conf.&lt;br /&gt;
&lt;br /&gt;
For recent versions you can use raspi-config's Advanced Options then SPI, see here for more info:&lt;br /&gt;
https://www.raspberrypi.org/documentation/configuration/raspi-config.md&lt;br /&gt;
&lt;br /&gt;
Or alternatively by manually enabling the SPI Device Tree by uncommenting the dtparam=spi=on line in /boot/config.txt as explained here:&lt;br /&gt;
https://www.raspberrypi.org/documentation/configuration/device-tree.md&lt;br /&gt;
&lt;br /&gt;
For older machines, edit /etc/modprobe.d/raspi-blacklist.conf and comment out the &amp;quot;blacklist spi-bcm2708&amp;quot; line. The file should look something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# blacklist spi and i2c by default (many users don't need them)&lt;br /&gt;
&lt;br /&gt;
#blacklist spi-bcm2708&lt;br /&gt;
blacklist i2c-bcm2708&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In both cases, to allow non-root access, add the following [http://www.reactivated.net/writing_udev_rules.html udev rule] like this in /etc/udev/rules.d/99-spi.rules&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SUBSYSTEM==&amp;quot;spidev&amp;quot;, MODE=&amp;quot;0666&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;
==UART native DMX==&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
====Raspberry Pi====&lt;br /&gt;
&lt;br /&gt;
First stop anything else using the serial port; either use raspi-config (Advanced Options, Serial) or follow the instructions here:&lt;br /&gt;
&lt;br /&gt;
[http://elinux.org/RPi_Serial_Connection#Preventing_Linux_using_the_serial_port http://elinux.org/RPi_Serial_Connection#Preventing_Linux_using_the_serial_port]&lt;br /&gt;
&lt;br /&gt;
To make this work, you will also need to raise the Pi's UART clock, because the default one maxes out at 115kbaud. So you will need to add&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
init_uart_clock=16000000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to the /boot/config.txt file on the system. This won't affect any other user of the serial port provided you have a recent kernel.&lt;br /&gt;
&lt;br /&gt;
Another useful link is [http://fw.hardijzer.nl/?p=138 http://fw.hardijzer.nl/?p=138].&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 for  [http://downloads.openlighting.org/Velleman%20kext.dmg OS X 10.9 and above] or  [http://code.google.com/p/open-lighting/downloads/detail?name=libdmxusbshield.dmg OS 10.8 and below]. 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;br /&gt;
&lt;br /&gt;
Some people have reported issues with the K8062 on Ubuntu 14.04.&lt;br /&gt;
Symptoms: When you plug in your K8062, Ubuntu responds with Kernel Panic.&lt;br /&gt;
Problem: comedi and vmk60xx kernel modules are loaded and crash the kernel.&lt;br /&gt;
Solution: WARNING! Attempt at your own risk.&lt;br /&gt;
# Blacklist comedi and vmk60xx in /etc/modprobe.d/blacklist.conf, see [https://wiki.debian.org/KernelModuleBlacklisting https://wiki.debian.org/KernelModuleBlacklisting]&lt;br /&gt;
# Reboot and then run lsusb in the terminal. (Make sure K8062 is connected.)&lt;br /&gt;
# After a short hang, the K8062 should come up as &amp;quot;Velleman Components, Inc.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==KarateLight, KarateDMX==&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/81-karate.rules&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# udev rules file for the karate-device&lt;br /&gt;
KERNEL==&amp;quot;ttyACM?&amp;quot;, ATTRS{product}==&amp;quot;DMX2USB simple&amp;quot;, SYMLINK+=&amp;quot;kldmx0&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then make sure the user olad runs as is a member of 'dialout' which is the default group owning ttyACM?.&lt;/div&gt;</summary>
		<author><name>Peternewman</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OLA_Buildbot&amp;diff=5858</id>
		<title>OLA Buildbot</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=OLA_Buildbot&amp;diff=5858"/>
				<updated>2016-02-14T21:15:17Z</updated>
		
		<summary type="html">&lt;p&gt;Peternewman: /* Enabling the Javascript Lint Checker */ More ways to install the linter&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;We run a [http://buildbot.net/ Buildbot] instance for [[OLA]].&lt;br /&gt;
&lt;br /&gt;
*Web UI: http://buildbot.openlighting.org&lt;br /&gt;
*IRC: OLA-buildbot-ch in #openlighting-build on irc.freenode.org&lt;br /&gt;
&lt;br /&gt;
We're currently only building ola, but this could be extended to do other projects such as the QT GUI etc.&lt;br /&gt;
&lt;br /&gt;
== Master Configuration ==&lt;br /&gt;
The buildbot master configuration is stored in git at https://github.com/OpenLightingProject/buildbot . It needs checking out, and symlinking to replace master.cfg in the buildbot master's config directory.&lt;br /&gt;
&lt;br /&gt;
N.B. If the main open-lighting git repository (as opposed to buildbot config) is ever moved or changed, ensure the master's gitpoller-workdir folder is emptied out, or the poller won't work properly.&lt;br /&gt;
&lt;br /&gt;
= Adding a Slave =&lt;br /&gt;
&lt;br /&gt;
Buildbot documentation is at http://docs.buildbot.net/current/manual/installation.html#creating-a-buildslave .  The steps below should cover everything you need though.&lt;br /&gt;
&lt;br /&gt;
== Prerequisites &amp;amp; Warning ==&lt;br /&gt;
&lt;br /&gt;
Slaves execute code directly from the git repo. Even though submits to the git repo are locked down, this is still a possible attack vector for your machine. For this reason it's best to run build slaves within a virtual machine.  TODO: link to some VM solutions.&lt;br /&gt;
&lt;br /&gt;
At the very least you should run the buildslave as a separate user (not root!). Slave passwords aren't stored in the git repo for security, you'll need to get Simon or Peter to add new ones.&lt;br /&gt;
&lt;br /&gt;
The buildbot performs full build &amp;amp; test runs with all the options enabled. Please make sure you have all the necessary libraries installed on your system. You need to be able to complete a &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
autoconf -i&lt;br /&gt;
./configure --enable-e133 --enable-rdm-tests --enable-python-libs --enable-ja-rule&lt;br /&gt;
make&lt;br /&gt;
make check&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
cycle before proceeding. If you have trouble ask on the mailing list.&lt;br /&gt;
&lt;br /&gt;
If you're running the lint check, you need cpplint.py in your path somewhere, see README.developer for info on how to obtain it.&lt;br /&gt;
&lt;br /&gt;
Buildbot slaves need to connect to  buildmaster.openlighting.org:9989 . Make sure your firewall allows this. No port forwarding for inbound connections is required.&lt;br /&gt;
&lt;br /&gt;
== Debian / Ubuntu Instructions ==&lt;br /&gt;
&lt;br /&gt;
This requires wheezy or later. For squeeze you can use the easy_install method below.&lt;br /&gt;
&lt;br /&gt;
=== Build Slave Installation ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo apt-get install buildbot-slave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Slave Configuration ===&lt;br /&gt;
&lt;br /&gt;
Create the slave (the package creates the buildbot user automatically for you):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo -u buildbot buildslave create-slave --usepty=0 /var/lib/buildbot/slaves/ola buildmaster.openlighting.org:9989 &amp;lt;slave user&amp;gt; &amp;lt;slave password&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Update the slave info, edit the files in /var/lib/buildbot/slaves/ola/info to be relevant to you.&lt;br /&gt;
&lt;br /&gt;
Add config for the slave into /etc/default/buildslave (you'll need to increase the array id if you've got more than one slave on the same host), e.g.:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 SLAVE_ENABLED[1]=1                    # 1-enabled, 0-disabled&lt;br /&gt;
 SLAVE_NAME[1]=&amp;quot;ola&amp;quot;         # short name printed on start/stop&lt;br /&gt;
 SLAVE_USER[1]=&amp;quot;buildbot&amp;quot;              # user to run slave as&lt;br /&gt;
 SLAVE_BASEDIR[1]=&amp;quot;/var/lib/buildbot/slaves/ola&amp;quot;                   # basedir to slave (absolute path)&lt;br /&gt;
 SLAVE_OPTIONS[1]=&amp;quot;&amp;quot;                   # buildbot options&lt;br /&gt;
 SLAVE_PREFIXCMD[1]=&amp;quot;&amp;quot;                 # prefix command, i.e. nice, linux32, dchroot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Start the slave&lt;br /&gt;
 sudo /etc/init.d/buildslave start&lt;br /&gt;
&lt;br /&gt;
Check the log if there are any issues, or confirm the slave is registered at http://buildbot.openlighting.org/buildslaves:&lt;br /&gt;
 tail -f /var/lib/buildbot/slaves/ola/twistd.log&lt;br /&gt;
&lt;br /&gt;
== FreeBSD Instructions ==&lt;br /&gt;
&lt;br /&gt;
This was tested on FreeBSD 10.&lt;br /&gt;
&lt;br /&gt;
=== Build Slave Installation ===&lt;br /&gt;
As root:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 pkg install buildbot-slave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Slave Configuration ===&lt;br /&gt;
&lt;br /&gt;
Setup a new user:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
su -&lt;br /&gt;
adduser&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Username: ola-build-slave&lt;br /&gt;
Use password-based authentication? No&lt;br /&gt;
&lt;br /&gt;
Setup the slave:&lt;br /&gt;
&lt;br /&gt;
Switch to the slave user, I did:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
su - #To root&lt;br /&gt;
su - ola-build-slave #To slave user&lt;br /&gt;
cd ~&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Export the variables needed for configure on FreeBSD:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export CPPFLAGS=&amp;quot;-I/usr/local/include/&amp;quot;&lt;br /&gt;
export LDFLAGS=&amp;quot;-L/usr/local/lib/&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setup the slave itself:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/usr/local/bin/buildslave create-slave ola-slave buildmaster.openlighting.org:9989 &amp;lt;slave user&amp;gt; &amp;lt;slave password&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edit &amp;lt;tt&amp;gt;ola-slave/info/admin&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;ola-slave/info/host&amp;lt;/tt&amp;gt; so your slave shows up correctly.&lt;br /&gt;
&lt;br /&gt;
Then start the slave:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/usr/local/bin/buildslave start ola-slave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can look at the logs by running&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 tail -f ola-slave/twistd.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At this point you can go to http://buildbot.openlighting.org/buildslaves and you should see your slave connected. It's probably worth asking someone to kick off a build at this point so we can check your slave is working.&lt;br /&gt;
&lt;br /&gt;
Finally, if everything looks good, configure your slave to launch on startup by editing the crontab for the ola-build-slave user (crontab -e). Add the following line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@reboot /usr/local/bin/buildslave start /home/ola-build-slave/ola-slave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== NetBSD Instructions ==&lt;br /&gt;
&lt;br /&gt;
This was tested on NetBSD 6.&lt;br /&gt;
&lt;br /&gt;
=== Build Slave Installation ===&lt;br /&gt;
As root:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 pkgin install py27-buildbot-slave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Slave Configuration ===&lt;br /&gt;
&lt;br /&gt;
Setup a new user:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
su -&lt;br /&gt;
useradd -m ola-build-slave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Use password-based authentication? No&lt;br /&gt;
&lt;br /&gt;
Setup the slave:&lt;br /&gt;
&lt;br /&gt;
Switch to the slave user:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
su - ola-build-slave&lt;br /&gt;
cd ~&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Export the variables needed for git and configure on NetBSD (add these to the .shrc or equivalent for next time):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export CPPFLAGS=&amp;quot;-I/usr/pkg/include/&amp;quot;&lt;br /&gt;
export LDFLAGS=&amp;quot;-L/usr/pkg/lib/&amp;quot;&lt;br /&gt;
export GIT_SSL_NO_VERIFY=true&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setup the slave itself:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/usr/pkg/bin/buildslave create-slave ola-slave buildmaster.openlighting.org:9989 &amp;lt;slave user&amp;gt; &amp;lt;slave password&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edit &amp;lt;tt&amp;gt;ola-slave/info/admin&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;ola-slave/info/host&amp;lt;/tt&amp;gt; so your slave shows up correctly.&lt;br /&gt;
&lt;br /&gt;
Then start the slave:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/usr/pkg/bin/buildslave start ola-slave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can look at the logs by running&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 tail -f ola-slave/twistd.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At this point you can go to http://buildbot.openlighting.org/buildslaves and you should see your slave connected. It's probably worth asking someone to kick off a build at this point so we can check your slave is working.&lt;br /&gt;
&lt;br /&gt;
Finally, if everything looks good, configure your slave to launch on startup by editing the crontab for the ola-build-slave user (crontab -e). Add the following line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@reboot /usr/pkg/bin/buildslave start /home/ola-build-slave/ola-slave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== OpenBSD Instructions ==&lt;br /&gt;
&lt;br /&gt;
This was tested on OpenBSD 5.4.&lt;br /&gt;
&lt;br /&gt;
=== Build Slave Installation ===&lt;br /&gt;
As root:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pkg_add py-buildslave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Slave Configuration ===&lt;br /&gt;
&lt;br /&gt;
Setup a new user:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
su -&lt;br /&gt;
useradd -m ola-build-slave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setup the slave:&lt;br /&gt;
&lt;br /&gt;
Switch to the slave user:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
su - ola-build-slave&lt;br /&gt;
cd ~&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Export the variables needed for autoconf and configure on OpenBSD (add these to the .profile or equivalent for next time):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export AUTOCONF_VERSION=2.69&lt;br /&gt;
export AUTOMAKE_VERSION=1.13&lt;br /&gt;
export CPPFLAGS=&amp;quot;-I/usr/local/include/&amp;quot;&lt;br /&gt;
export LDFLAGS=&amp;quot;-L/usr/local/lib/&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setup the slave itself:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/usr/local/bin/buildslave create-slave ola-slave buildmaster.openlighting.org:9989 &amp;lt;slave user&amp;gt; &amp;lt;slave password&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edit &amp;lt;tt&amp;gt;ola-slave/info/admin&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;ola-slave/info/host&amp;lt;/tt&amp;gt; so your slave shows up correctly.&lt;br /&gt;
&lt;br /&gt;
Then start the slave:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/usr/local/bin/buildslave start ola-slave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can look at the logs by running&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 tail -f ola-slave/twistd.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At this point you can go to http://buildbot.openlighting.org/buildslaves and you should see your slave connected. It's probably worth asking someone to kick off a build at this point so we can check your slave is working.&lt;br /&gt;
&lt;br /&gt;
Finally, if everything looks good, configure your slave to launch on startup by editing the crontab for the ola-build-slave user (crontab -e). Add the following line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@reboot /usr/local/bin/buildslave start /home/ola-build-slave/ola-slave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Other Platforms ==&lt;br /&gt;
&lt;br /&gt;
=== Build Slave Installation ===&lt;br /&gt;
&lt;br /&gt;
The easiest way to get started is by using easy_install. You need to have the Python headers available, so on Debian / Ubuntu run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install python-dev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then install buildbot-slave:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
easy_install buildbot-slave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Slave Configuration ===&lt;br /&gt;
&lt;br /&gt;
Setup a new user:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -s &lt;br /&gt;
adduser ola-build-slave  # use a temp password for now&lt;br /&gt;
vi /etc/shadow  # delete the password entry&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setup the slave:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
su ola-build-slave&lt;br /&gt;
cd ~&lt;br /&gt;
buildslave create-slave ola-slave buildmaster.openlighting.org:9989 &amp;lt;slave user&amp;gt; &amp;lt;slave password&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edit &amp;lt;tt&amp;gt;ola-slave/info/admin&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;ola-slave/info/host&amp;lt;/tt&amp;gt; so your slave shows up correctly.&lt;br /&gt;
&lt;br /&gt;
Then start the slave:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
buildslave start ola-slave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can look at the logs by running&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 tail -f ola-slave/twistd.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At this point you can go to http://buildbot.openlighting.org/buildslaves and you should see your slave connected. It's probably worth asking someone to kick off a build at this point so we can check your slave is working.&lt;br /&gt;
&lt;br /&gt;
Finally, if everything looks good, configure your slave to launch on startup by editing the crontab for the ola-build-slave user (crontab -e). Add the following line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@reboot buildbot start /home/ola-build-slave/ola-slave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Enabling the C++ Lint Checker ==&lt;br /&gt;
&lt;br /&gt;
The lint checker enforces C++ style. We only run this once per change but it's good to have multiple lint-enabled hosts in case one is down.&lt;br /&gt;
&lt;br /&gt;
Download the cpplint checker and put it in /usr/local/bin&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
wget http://google-styleguide.googlecode.com/svn/trunk/cpplint/cpplint.py&lt;br /&gt;
sudo cp cpplint.py /usr/local/bin&lt;br /&gt;
sudo chmod a+x /usr/local/bin/cpplint.py&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finally let Simon or Peter know, or raise an issue, asking them to enable C++ lint for your slave.&lt;br /&gt;
&lt;br /&gt;
== Enabling the Javascript Lint Checker ==&lt;br /&gt;
&lt;br /&gt;
The lint checker enforces Javascript style. We only run this once per change but it's good to have multiple lint-enabled hosts in case one is down.&lt;br /&gt;
&lt;br /&gt;
Either:&lt;br /&gt;
*Install the closure-linter deb package if it's present on your OS&lt;br /&gt;
*Install the gjslint checker by following the relevant instructions here (you man need to install python-setuptools to get easy_install on Debian/Ubuntu) https://developers.google.com/closure/utilities/docs/linter_howto&lt;br /&gt;
&lt;br /&gt;
Finally let Simon or Peter know, or raise an issue, asking them to enable Javascript lint for your slave.&lt;br /&gt;
&lt;br /&gt;
== Enabling the heap checker ==&lt;br /&gt;
&lt;br /&gt;
First we need libunwind:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install libunwind8-dev &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then download the latest gperftools from https://code.google.com/p/gperftools/downloads/list .&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
wget ....&lt;br /&gt;
tar -zxf gperftools-2.1.tar.gz&lt;br /&gt;
cd gperftools-2.1&lt;br /&gt;
./configure&lt;br /&gt;
make&lt;br /&gt;
sudo make install&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Finally let Simon or Peter know, or raise an issue, asking them to enable the heap checker for your slave.&lt;/div&gt;</summary>
		<author><name>Peternewman</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OLA_Device_Specific_Configuration&amp;diff=5857</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=5857"/>
				<updated>2016-02-10T04:15:04Z</updated>
		
		<summary type="html">&lt;p&gt;Peternewman: /* Linux */ Remove one note as confirmed working&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;
==Streaming ACN / E1.31==&lt;br /&gt;
&lt;br /&gt;
===All Platforms===&lt;br /&gt;
Some older networking gear only supports an old revision of E1.31 Called Revision 20. To use this older version you need to change a line in ola-e131.conf. Change this line&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
revision = 0.46&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to this line&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
revision = 0.2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Only do this if the older gear cannot accept the standardized version of E1.31.&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
If you are planning to receive large amounts of multicast traffic 20+, you will need to adjust the maximum amount of igmp memberships.&lt;br /&gt;
Use the following command:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo &amp;lt;number_of_memberships&amp;gt; | sudo tee /proc/sys/net/ipv4/igmp_max_memberships&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example this command sets the maximum number of igmp memberships to 256:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo 256 | sudo tee /proc/sys/net/ipv4/igmp_max_memberships&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Eurolite USB DMX512 PRO==&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
Sometime the cdc_acm kernel module claims the device. If this happens you'll see errors like &amp;quot;Cannot claim device&amp;quot; and/or &amp;quot;another process has device opened for exclusive access&amp;quot;. To avoid this you can remove the module (rmmod). A udev rule like what is used for the Anyma device should also work.&lt;br /&gt;
&lt;br /&gt;
You may also need the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SUBSYSTEMS==&amp;quot;usb&amp;quot;, ATTRS{idVendor}==&amp;quot;04d8&amp;quot;,ATTRS{idProduct}==&amp;quot;0xfa63&amp;quot;, MODE=&amp;quot;0660&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Mac===&lt;br /&gt;
&lt;br /&gt;
Install the [http://code.google.com/p/open-lighting/downloads/detail?name=euroliteusbshield.dmg&amp;amp;can=2&amp;amp;q=#makechanges KEXT].&lt;br /&gt;
&lt;br /&gt;
== General Purpose I/O ==&lt;br /&gt;
&lt;br /&gt;
This has only been tested on a Raspberry Pi device. You can find information about the GPIO features on a Pi at [http://elinux.org/RPi_Low-level_peripherals elinux.org]&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
You'll need to export the GPIO pins. For example, to use pin 23, as root run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ echo 23 &amp;gt; /sys/class/gpio/export&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You'll also need to ensure that the user olad runs as has permission to change the level of the Pins. Each of the following files should be writeable:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/sys/class/gpio/gpio23/direction&lt;br /&gt;
/sys/class/gpio/gpio23/value&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You could for example do this by running the following as root (assuming olad is in the plugdev group, which you can check with &amp;quot;groups olad&amp;quot;)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chgrp plugdev /sys/class/gpio/gpio23/direction&lt;br /&gt;
chmod g+w /sys/class/gpio/gpio23/direction&lt;br /&gt;
chgrp plugdev /sys/class/gpio/gpio23/value&lt;br /&gt;
chmod g+w /sys/class/gpio/gpio23/value&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ja Rule ==&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SUBSYSTEM==&amp;quot;usb|usb_device&amp;quot;, ACTION==&amp;quot;add&amp;quot;, ATTRS{idVendor}==&amp;quot;1209&amp;quot;, ATTRS{idProduct}==&amp;quot;aced&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot; MODE=&amp;quot;660&amp;quot;&lt;br /&gt;
SUBSYSTEM==&amp;quot;usb|usb_device&amp;quot;, ACTION==&amp;quot;add&amp;quot;, ATTRS{idVendor}==&amp;quot;1209&amp;quot;, ATTRS{idProduct}==&amp;quot;acee&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot; MODE=&amp;quot;660&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== OSC ==&lt;br /&gt;
&lt;br /&gt;
The message types are described in the  [http://opensoundcontrol.org/spec-1_0 OSC Spec] .&lt;br /&gt;
&lt;br /&gt;
=== Receiving DMX ===&lt;br /&gt;
&lt;br /&gt;
The OSC plugin accepts a number of message formats:&lt;br /&gt;
&lt;br /&gt;
{| border=1 cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
! Path !! OSC Message Type !! Data !! Comments &lt;br /&gt;
|-&lt;br /&gt;
|| /path || 'b' || Blob of length 1 to 512. || The most efficient way of sending DMX data over OSC.&lt;br /&gt;
|-&lt;br /&gt;
|| /path/N || 'i' || Slot value from 0 to 255 || Update a single slot. N is the slot number from 1 - 512. &lt;br /&gt;
|-&lt;br /&gt;
|| /path/N || 'f' || Slot value from 0.0 to 1.0 || Update a single slot. N is the slot number from 1 - 512. &lt;br /&gt;
|-&lt;br /&gt;
|| /path || 'ii' || Slot number from 0 to 511, slot value from 0 to 255 || Update a single slot.&lt;br /&gt;
|-&lt;br /&gt;
|| /path || 'if' || Slot number from 0 to 511, slot value from 0.0 to 1.0 || Update a single slot.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Sending DMX ===&lt;br /&gt;
&lt;br /&gt;
The following formats are available for sending data:&lt;br /&gt;
&lt;br /&gt;
{| border=1 cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
! Config Option !! Path !! OSC Message Type !! Data !! Comments &lt;br /&gt;
|-&lt;br /&gt;
|| blob || /path || 'b' || Blob of length 1 to 512. || The most efficient way of sending DMX data over OSC.&lt;br /&gt;
|-&lt;br /&gt;
|| float_array || /path || N * 'f' || Slot values from 0.0 to 1.0 ||  Not quite as efficient as the blob type.&lt;br /&gt;
|-&lt;br /&gt;
|| int_array || /path || N * 'i' || Slot values from 0 to 255 ||  Not quite as efficient as the blob type.&lt;br /&gt;
|-&lt;br /&gt;
|| individual_float || /path/N || 'f' || Slot value from 0.0 to 1.0 || N is the slot number from 1 - 512.  Results in a lot of messages being sent, avoid using this. &lt;br /&gt;
|-&lt;br /&gt;
|| individual_int || /path/N || 'i' || Slot value from 0 to 255 || N is the slot number from 1 - 512. Results in a lot of messages being sent, avoid using this. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Open DMX USB / FTDI RS485 ==&lt;br /&gt;
&lt;br /&gt;
There are two options, the 'Open DMX' plugin that requires the kernel module and the native FTDI driver.&lt;br /&gt;
&lt;br /&gt;
The Open DMX Plugin requires the dmx_usb kernel module, which means it's Linux only. The FTDI driver can be used on either Mac or Linux.&lt;br /&gt;
&lt;br /&gt;
=== Linux, Open DMX Kernel Module ===&lt;br /&gt;
&lt;br /&gt;
Make sure the opendmx plugin is enabled.&lt;br /&gt;
Make sure the dmx_usb kernel module is loaded. &lt;br /&gt;
&lt;br /&gt;
===Mac FTDI ===&lt;br /&gt;
&lt;br /&gt;
You must have libftdi-dev installed before you run ./configure.  Otherwise the FTDI DMX plugin won't show up in the list of OLA plugins. &lt;br /&gt;
&lt;br /&gt;
Enable the FTDI driver (ola-ftdidmx ) and disable the USB Serial and Open DMX drivers (ola-usbserial.conf &amp;amp;  ola-opendmx.conf) &lt;br /&gt;
&lt;br /&gt;
=== Linux, FTDI ===&lt;br /&gt;
&lt;br /&gt;
Same as Mac, but you also need to make sure that you add the following udev rule:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# udev rules for ftdi devices&lt;br /&gt;
SUBSYSTEM==&amp;quot;usb|usb_device&amp;quot;, ACTION==&amp;quot;add&amp;quot;, ATTRS{idVendor}==&amp;quot;0403&amp;quot;, ATTRS{idProduct}==&amp;quot;6001&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Scanlime Fadecandy==&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 Scanlime Fadecandy device&lt;br /&gt;
SUBSYSTEM==&amp;quot;usb|usb_device&amp;quot;, ACTION==&amp;quot;add&amp;quot;, ATTRS{idVendor}==&amp;quot;1d50&amp;quot;, ATTRS{idProduct}==&amp;quot;607a&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SPI ==&lt;br /&gt;
&lt;br /&gt;
This plugin is designed for the Raspberry Pi. It may work on other hardware, but that's up to you. For instructions on the hardware side of things see [[OLA LED Pixels]].&lt;br /&gt;
&lt;br /&gt;
Enable the spi-bcm2708 module, depending on the version of Raspbian you're running it will either be via Device Tree or by editing /etc/modprobe.d/raspi-blacklist.conf.&lt;br /&gt;
&lt;br /&gt;
For recent versions you can use raspi-config's Advanced Options then SPI, see here for more info:&lt;br /&gt;
https://www.raspberrypi.org/documentation/configuration/raspi-config.md&lt;br /&gt;
&lt;br /&gt;
Or alternatively by manually enabling the SPI Device Tree by uncommenting the dtparam=spi=on line in /boot/config.txt as explained here:&lt;br /&gt;
https://www.raspberrypi.org/documentation/configuration/device-tree.md&lt;br /&gt;
&lt;br /&gt;
For older machines, edit /etc/modprobe.d/raspi-blacklist.conf and comment out the &amp;quot;blacklist spi-bcm2708&amp;quot; line. The file should look something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# blacklist spi and i2c by default (many users don't need them)&lt;br /&gt;
&lt;br /&gt;
#blacklist spi-bcm2708&lt;br /&gt;
blacklist i2c-bcm2708&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In both cases, to allow non-root access, add the following to /etc/udev/rules.d/99-spi.rules&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SUBSYSTEM==&amp;quot;spidev&amp;quot;, MODE=&amp;quot;0666&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;
==UART native DMX==&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
====Raspberry Pi====&lt;br /&gt;
&lt;br /&gt;
First stop anything else using the serial port; either use raspi-config (Advanced Options, Serial) or follow the instructions here:&lt;br /&gt;
&lt;br /&gt;
[http://elinux.org/RPi_Serial_Connection#Preventing_Linux_using_the_serial_port http://elinux.org/RPi_Serial_Connection#Preventing_Linux_using_the_serial_port]&lt;br /&gt;
&lt;br /&gt;
To make this work, you will also need to raise the Pi's UART clock, because the default one maxes out at 115kbaud. So you will need to add&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
init_uart_clock=16000000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to the /boot/config.txt file on the system. This won't affect any other user of the serial port provided you have a recent kernel.&lt;br /&gt;
&lt;br /&gt;
Another useful link is [http://fw.hardijzer.nl/?p=138 http://fw.hardijzer.nl/?p=138].&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 for  [http://downloads.openlighting.org/Velleman%20kext.dmg OS X 10.9 and above] or  [http://code.google.com/p/open-lighting/downloads/detail?name=libdmxusbshield.dmg OS 10.8 and below]. 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;br /&gt;
&lt;br /&gt;
Some people have reported issues with the K8062 on Ubuntu 14.04.&lt;br /&gt;
Symptoms: When you plug in your K8062, Ubuntu responds with Kernel Panic.&lt;br /&gt;
Problem: comedi and vmk60xx kernel modules are loaded and crash the kernel.&lt;br /&gt;
Solution: WARNING! Attempt at your own risk.&lt;br /&gt;
# Blacklist comedi and vmk60xx in /etc/modprobe.d/blacklist.conf, see [https://wiki.debian.org/KernelModuleBlacklisting https://wiki.debian.org/KernelModuleBlacklisting]&lt;br /&gt;
# Reboot and then run lsusb in the terminal. (Make sure K8062 is connected.)&lt;br /&gt;
# After a short hang, the K8062 should come up as &amp;quot;Velleman Components, Inc.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==KarateLight, KarateDMX==&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/81-karate.rules&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# udev rules file for the karate-device&lt;br /&gt;
KERNEL==&amp;quot;ttyACM?&amp;quot;, ATTRS{product}==&amp;quot;DMX2USB simple&amp;quot;, SYMLINK+=&amp;quot;kldmx0&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then make sure the user olad runs as is a member of 'dialout' which is the default group owning ttyACM?.&lt;/div&gt;</summary>
		<author><name>Peternewman</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OLA_Device_Specific_Configuration&amp;diff=5856</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=5856"/>
				<updated>2016-02-10T01:39:59Z</updated>
		
		<summary type="html">&lt;p&gt;Peternewman: /* Linux */ Tidy formatting&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;
==Streaming ACN / E1.31==&lt;br /&gt;
&lt;br /&gt;
===All Platforms===&lt;br /&gt;
Some older networking gear only supports an old revision of E1.31 Called Revision 20. To use this older version you need to change a line in ola-e131.conf. Change this line&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
revision = 0.46&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to this line&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
revision = 0.2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Only do this if the older gear cannot accept the standardized version of E1.31.&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
If you are planning to receive large amounts of multicast traffic 20+, you will need to adjust the maximum amount of igmp memberships.&lt;br /&gt;
Use the following command:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo &amp;lt;number_of_memberships&amp;gt; | sudo tee /proc/sys/net/ipv4/igmp_max_memberships&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example this command sets the maximum number of igmp memberships to 256:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo 256 | sudo tee /proc/sys/net/ipv4/igmp_max_memberships&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Eurolite USB DMX512 PRO==&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
Sometime the cdc_acm kernel module claims the device. If this happens you'll see errors like &amp;quot;Cannot claim device&amp;quot; and/or &amp;quot;another process has device opened for exclusive access&amp;quot;. To avoid this you can remove the module (rmmod). A udev rule like what is used for the Anyma device should also work.&lt;br /&gt;
&lt;br /&gt;
You may also need the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SUBSYSTEMS==&amp;quot;usb&amp;quot;, ATTRS{idVendor}==&amp;quot;04d8&amp;quot;,ATTRS{idProduct}==&amp;quot;0xfa63&amp;quot;, MODE=&amp;quot;0660&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Mac===&lt;br /&gt;
&lt;br /&gt;
Install the [http://code.google.com/p/open-lighting/downloads/detail?name=euroliteusbshield.dmg&amp;amp;can=2&amp;amp;q=#makechanges KEXT].&lt;br /&gt;
&lt;br /&gt;
== General Purpose I/O ==&lt;br /&gt;
&lt;br /&gt;
This has only been tested on a Raspberry Pi device. You can find information about the GPIO features on a Pi at [http://elinux.org/RPi_Low-level_peripherals elinux.org]&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
You'll need to export the GPIO pins. For example, to use pin 23, as root run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ echo 23 &amp;gt; /sys/class/gpio/export&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You'll also need to ensure that the user olad runs as has permission to change the level of the Pins. Each of the following files should be writeable:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/sys/class/gpio/gpio23/direction&lt;br /&gt;
/sys/class/gpio/gpio23/value&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You could for example do this by running the following as root (assuming olad is in the plugdev group, which you can check with &amp;quot;groups olad&amp;quot;)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chgrp plugdev /sys/class/gpio/gpio23/direction&lt;br /&gt;
chmod g+w /sys/class/gpio/gpio23/direction&lt;br /&gt;
chgrp plugdev /sys/class/gpio/gpio23/value&lt;br /&gt;
chmod g+w /sys/class/gpio/gpio23/value&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ja Rule ==&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SUBSYSTEM==&amp;quot;usb|usb_device&amp;quot;, ACTION==&amp;quot;add&amp;quot;, ATTRS{idVendor}==&amp;quot;1209&amp;quot;, ATTRS{idProduct}==&amp;quot;aced&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot; MODE=&amp;quot;660&amp;quot;&lt;br /&gt;
SUBSYSTEM==&amp;quot;usb|usb_device&amp;quot;, ACTION==&amp;quot;add&amp;quot;, ATTRS{idVendor}==&amp;quot;1209&amp;quot;, ATTRS{idProduct}==&amp;quot;acee&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot; MODE=&amp;quot;660&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== OSC ==&lt;br /&gt;
&lt;br /&gt;
The message types are described in the  [http://opensoundcontrol.org/spec-1_0 OSC Spec] .&lt;br /&gt;
&lt;br /&gt;
=== Receiving DMX ===&lt;br /&gt;
&lt;br /&gt;
The OSC plugin accepts a number of message formats:&lt;br /&gt;
&lt;br /&gt;
{| border=1 cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
! Path !! OSC Message Type !! Data !! Comments &lt;br /&gt;
|-&lt;br /&gt;
|| /path || 'b' || Blob of length 1 to 512. || The most efficient way of sending DMX data over OSC.&lt;br /&gt;
|-&lt;br /&gt;
|| /path/N || 'i' || Slot value from 0 to 255 || Update a single slot. N is the slot number from 1 - 512. &lt;br /&gt;
|-&lt;br /&gt;
|| /path/N || 'f' || Slot value from 0.0 to 1.0 || Update a single slot. N is the slot number from 1 - 512. &lt;br /&gt;
|-&lt;br /&gt;
|| /path || 'ii' || Slot number from 0 to 511, slot value from 0 to 255 || Update a single slot.&lt;br /&gt;
|-&lt;br /&gt;
|| /path || 'if' || Slot number from 0 to 511, slot value from 0.0 to 1.0 || Update a single slot.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Sending DMX ===&lt;br /&gt;
&lt;br /&gt;
The following formats are available for sending data:&lt;br /&gt;
&lt;br /&gt;
{| border=1 cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
! Config Option !! Path !! OSC Message Type !! Data !! Comments &lt;br /&gt;
|-&lt;br /&gt;
|| blob || /path || 'b' || Blob of length 1 to 512. || The most efficient way of sending DMX data over OSC.&lt;br /&gt;
|-&lt;br /&gt;
|| float_array || /path || N * 'f' || Slot values from 0.0 to 1.0 ||  Not quite as efficient as the blob type.&lt;br /&gt;
|-&lt;br /&gt;
|| int_array || /path || N * 'i' || Slot values from 0 to 255 ||  Not quite as efficient as the blob type.&lt;br /&gt;
|-&lt;br /&gt;
|| individual_float || /path/N || 'f' || Slot value from 0.0 to 1.0 || N is the slot number from 1 - 512.  Results in a lot of messages being sent, avoid using this. &lt;br /&gt;
|-&lt;br /&gt;
|| individual_int || /path/N || 'i' || Slot value from 0 to 255 || N is the slot number from 1 - 512. Results in a lot of messages being sent, avoid using this. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Open DMX USB / FTDI RS485 ==&lt;br /&gt;
&lt;br /&gt;
There are two options, the 'Open DMX' plugin that requires the kernel module and the native FTDI driver.&lt;br /&gt;
&lt;br /&gt;
The Open DMX Plugin requires the dmx_usb kernel module, which means it's Linux only. The FTDI driver can be used on either Mac or Linux.&lt;br /&gt;
&lt;br /&gt;
=== Linux, Open DMX Kernel Module ===&lt;br /&gt;
&lt;br /&gt;
Make sure the opendmx plugin is enabled.&lt;br /&gt;
Make sure the dmx_usb kernel module is loaded. &lt;br /&gt;
&lt;br /&gt;
===Mac FTDI ===&lt;br /&gt;
&lt;br /&gt;
You must have libftdi-dev installed before you run ./configure.  Otherwise the FTDI DMX plugin won't show up in the list of OLA plugins. &lt;br /&gt;
&lt;br /&gt;
Enable the FTDI driver (ola-ftdidmx ) and disable the USB Serial and Open DMX drivers (ola-usbserial.conf &amp;amp;  ola-opendmx.conf) &lt;br /&gt;
&lt;br /&gt;
=== Linux, FTDI ===&lt;br /&gt;
&lt;br /&gt;
Same as Mac, but you also need to make sure that you add the following udev rule:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# udev rules for ftdi devices&lt;br /&gt;
SUBSYSTEM==&amp;quot;usb|usb_device&amp;quot;, ACTION==&amp;quot;add&amp;quot;, ATTRS{idVendor}==&amp;quot;0403&amp;quot;, ATTRS{idProduct}==&amp;quot;6001&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Scanlime Fadecandy==&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 Scanlime Fadecandy device&lt;br /&gt;
SUBSYSTEM==&amp;quot;usb|usb_device&amp;quot;, ACTION==&amp;quot;add&amp;quot;, ATTRS{idVendor}==&amp;quot;1d50&amp;quot;, ATTRS{idProduct}==&amp;quot;607a&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SPI ==&lt;br /&gt;
&lt;br /&gt;
This plugin is designed for the Raspberry Pi. It may work on other hardware, but that's up to you. For instructions on the hardware side of things see [[OLA LED Pixels]].&lt;br /&gt;
&lt;br /&gt;
Enable the spi-bcm2708 module, depending on the version of Raspbian you're running it will either be via Device Tree or by editing /etc/modprobe.d/raspi-blacklist.conf.&lt;br /&gt;
&lt;br /&gt;
For recent versions you can use raspi-config's Advanced Options then SPI, see here for more info:&lt;br /&gt;
https://www.raspberrypi.org/documentation/configuration/raspi-config.md&lt;br /&gt;
&lt;br /&gt;
Or alternatively by manually enabling the SPI Device Tree by uncommenting the dtparam=spi=on line in /boot/config.txt as explained here:&lt;br /&gt;
https://www.raspberrypi.org/documentation/configuration/device-tree.md&lt;br /&gt;
&lt;br /&gt;
For older machines, edit /etc/modprobe.d/raspi-blacklist.conf and comment out the &amp;quot;blacklist spi-bcm2708&amp;quot; line. The file should look something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# blacklist spi and i2c by default (many users don't need them)&lt;br /&gt;
&lt;br /&gt;
#blacklist spi-bcm2708&lt;br /&gt;
blacklist i2c-bcm2708&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In both cases, to allow non-root access, add the following to /etc/udev/rules.d/99-spi.rules&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SUBSYSTEM==&amp;quot;spidev&amp;quot;, MODE=&amp;quot;0666&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;
==UART native DMX==&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
====Raspberry Pi====&lt;br /&gt;
&lt;br /&gt;
First stop anything else using the serial port; either use raspi-config (Advanced Options, Serial) or follow the instructions here:&lt;br /&gt;
&lt;br /&gt;
[http://elinux.org/RPi_Serial_Connection#Preventing_Linux_using_the_serial_port http://elinux.org/RPi_Serial_Connection#Preventing_Linux_using_the_serial_port]&lt;br /&gt;
&lt;br /&gt;
To make this work, you will also need to raise the Pi's UART clock, because the default one maxes out at 115kbaud. So you will need to add&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
init_uart_clock=16000000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to the /boot/config.txt file on the system. This won't affect any other user of the serial port provided you have a recent kernel.&lt;br /&gt;
&lt;br /&gt;
Another useful link is [http://fw.hardijzer.nl/?p=138 http://fw.hardijzer.nl/?p=138].&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 for  [http://downloads.openlighting.org/Velleman%20kext.dmg OS X 10.9 and above] or  [http://code.google.com/p/open-lighting/downloads/detail?name=libdmxusbshield.dmg OS 10.8 and below]. 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;br /&gt;
&lt;br /&gt;
Some people have reported issues with the K8062 on Ubuntu 14.04.&lt;br /&gt;
Symptoms: When you plug in your K8062, Ubuntu responds with Kernel Panic.&lt;br /&gt;
Problem: comedi and vmk60xx kernel modules are loaded and crash the kernel.&lt;br /&gt;
Solution: WARNING! Attempt at your own risk.&lt;br /&gt;
# Blacklist comedi and vmk60xx in /etc/modprobe.d/blacklist.conf, see [https://wiki.debian.org/KernelModuleBlacklisting https://wiki.debian.org/KernelModuleBlacklisting]&lt;br /&gt;
# Reboot and then run lsusb in the terminal. (Make sure K8062 is connected.)&lt;br /&gt;
After a short hang, the K8062 should come up as &amp;quot;Velleman Components, Inc.&amp;quot;&lt;br /&gt;
The K8062 has not been tested with any software after following this solution. It is only for the purpose of avoiding the Kernel Panic on Ubuntu.&lt;br /&gt;
&lt;br /&gt;
==KarateLight, KarateDMX==&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/81-karate.rules&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# udev rules file for the karate-device&lt;br /&gt;
KERNEL==&amp;quot;ttyACM?&amp;quot;, ATTRS{product}==&amp;quot;DMX2USB simple&amp;quot;, SYMLINK+=&amp;quot;kldmx0&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then make sure the user olad runs as is a member of 'dialout' which is the default group owning ttyACM?.&lt;/div&gt;</summary>
		<author><name>Peternewman</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OLA_Device_Specific_Configuration&amp;diff=5855</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=5855"/>
				<updated>2016-02-10T01:39:25Z</updated>
		
		<summary type="html">&lt;p&gt;Peternewman: /* Linux */ Add more info on kernel panics&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;
==Streaming ACN / E1.31==&lt;br /&gt;
&lt;br /&gt;
===All Platforms===&lt;br /&gt;
Some older networking gear only supports an old revision of E1.31 Called Revision 20. To use this older version you need to change a line in ola-e131.conf. Change this line&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
revision = 0.46&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to this line&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
revision = 0.2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Only do this if the older gear cannot accept the standardized version of E1.31.&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
If you are planning to receive large amounts of multicast traffic 20+, you will need to adjust the maximum amount of igmp memberships.&lt;br /&gt;
Use the following command:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo &amp;lt;number_of_memberships&amp;gt; | sudo tee /proc/sys/net/ipv4/igmp_max_memberships&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example this command sets the maximum number of igmp memberships to 256:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo 256 | sudo tee /proc/sys/net/ipv4/igmp_max_memberships&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Eurolite USB DMX512 PRO==&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
Sometime the cdc_acm kernel module claims the device. If this happens you'll see errors like &amp;quot;Cannot claim device&amp;quot; and/or &amp;quot;another process has device opened for exclusive access&amp;quot;. To avoid this you can remove the module (rmmod). A udev rule like what is used for the Anyma device should also work.&lt;br /&gt;
&lt;br /&gt;
You may also need the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SUBSYSTEMS==&amp;quot;usb&amp;quot;, ATTRS{idVendor}==&amp;quot;04d8&amp;quot;,ATTRS{idProduct}==&amp;quot;0xfa63&amp;quot;, MODE=&amp;quot;0660&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Mac===&lt;br /&gt;
&lt;br /&gt;
Install the [http://code.google.com/p/open-lighting/downloads/detail?name=euroliteusbshield.dmg&amp;amp;can=2&amp;amp;q=#makechanges KEXT].&lt;br /&gt;
&lt;br /&gt;
== General Purpose I/O ==&lt;br /&gt;
&lt;br /&gt;
This has only been tested on a Raspberry Pi device. You can find information about the GPIO features on a Pi at [http://elinux.org/RPi_Low-level_peripherals elinux.org]&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
You'll need to export the GPIO pins. For example, to use pin 23, as root run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ echo 23 &amp;gt; /sys/class/gpio/export&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You'll also need to ensure that the user olad runs as has permission to change the level of the Pins. Each of the following files should be writeable:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/sys/class/gpio/gpio23/direction&lt;br /&gt;
/sys/class/gpio/gpio23/value&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You could for example do this by running the following as root (assuming olad is in the plugdev group, which you can check with &amp;quot;groups olad&amp;quot;)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chgrp plugdev /sys/class/gpio/gpio23/direction&lt;br /&gt;
chmod g+w /sys/class/gpio/gpio23/direction&lt;br /&gt;
chgrp plugdev /sys/class/gpio/gpio23/value&lt;br /&gt;
chmod g+w /sys/class/gpio/gpio23/value&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ja Rule ==&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SUBSYSTEM==&amp;quot;usb|usb_device&amp;quot;, ACTION==&amp;quot;add&amp;quot;, ATTRS{idVendor}==&amp;quot;1209&amp;quot;, ATTRS{idProduct}==&amp;quot;aced&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot; MODE=&amp;quot;660&amp;quot;&lt;br /&gt;
SUBSYSTEM==&amp;quot;usb|usb_device&amp;quot;, ACTION==&amp;quot;add&amp;quot;, ATTRS{idVendor}==&amp;quot;1209&amp;quot;, ATTRS{idProduct}==&amp;quot;acee&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot; MODE=&amp;quot;660&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== OSC ==&lt;br /&gt;
&lt;br /&gt;
The message types are described in the  [http://opensoundcontrol.org/spec-1_0 OSC Spec] .&lt;br /&gt;
&lt;br /&gt;
=== Receiving DMX ===&lt;br /&gt;
&lt;br /&gt;
The OSC plugin accepts a number of message formats:&lt;br /&gt;
&lt;br /&gt;
{| border=1 cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
! Path !! OSC Message Type !! Data !! Comments &lt;br /&gt;
|-&lt;br /&gt;
|| /path || 'b' || Blob of length 1 to 512. || The most efficient way of sending DMX data over OSC.&lt;br /&gt;
|-&lt;br /&gt;
|| /path/N || 'i' || Slot value from 0 to 255 || Update a single slot. N is the slot number from 1 - 512. &lt;br /&gt;
|-&lt;br /&gt;
|| /path/N || 'f' || Slot value from 0.0 to 1.0 || Update a single slot. N is the slot number from 1 - 512. &lt;br /&gt;
|-&lt;br /&gt;
|| /path || 'ii' || Slot number from 0 to 511, slot value from 0 to 255 || Update a single slot.&lt;br /&gt;
|-&lt;br /&gt;
|| /path || 'if' || Slot number from 0 to 511, slot value from 0.0 to 1.0 || Update a single slot.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Sending DMX ===&lt;br /&gt;
&lt;br /&gt;
The following formats are available for sending data:&lt;br /&gt;
&lt;br /&gt;
{| border=1 cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
! Config Option !! Path !! OSC Message Type !! Data !! Comments &lt;br /&gt;
|-&lt;br /&gt;
|| blob || /path || 'b' || Blob of length 1 to 512. || The most efficient way of sending DMX data over OSC.&lt;br /&gt;
|-&lt;br /&gt;
|| float_array || /path || N * 'f' || Slot values from 0.0 to 1.0 ||  Not quite as efficient as the blob type.&lt;br /&gt;
|-&lt;br /&gt;
|| int_array || /path || N * 'i' || Slot values from 0 to 255 ||  Not quite as efficient as the blob type.&lt;br /&gt;
|-&lt;br /&gt;
|| individual_float || /path/N || 'f' || Slot value from 0.0 to 1.0 || N is the slot number from 1 - 512.  Results in a lot of messages being sent, avoid using this. &lt;br /&gt;
|-&lt;br /&gt;
|| individual_int || /path/N || 'i' || Slot value from 0 to 255 || N is the slot number from 1 - 512. Results in a lot of messages being sent, avoid using this. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Open DMX USB / FTDI RS485 ==&lt;br /&gt;
&lt;br /&gt;
There are two options, the 'Open DMX' plugin that requires the kernel module and the native FTDI driver.&lt;br /&gt;
&lt;br /&gt;
The Open DMX Plugin requires the dmx_usb kernel module, which means it's Linux only. The FTDI driver can be used on either Mac or Linux.&lt;br /&gt;
&lt;br /&gt;
=== Linux, Open DMX Kernel Module ===&lt;br /&gt;
&lt;br /&gt;
Make sure the opendmx plugin is enabled.&lt;br /&gt;
Make sure the dmx_usb kernel module is loaded. &lt;br /&gt;
&lt;br /&gt;
===Mac FTDI ===&lt;br /&gt;
&lt;br /&gt;
You must have libftdi-dev installed before you run ./configure.  Otherwise the FTDI DMX plugin won't show up in the list of OLA plugins. &lt;br /&gt;
&lt;br /&gt;
Enable the FTDI driver (ola-ftdidmx ) and disable the USB Serial and Open DMX drivers (ola-usbserial.conf &amp;amp;  ola-opendmx.conf) &lt;br /&gt;
&lt;br /&gt;
=== Linux, FTDI ===&lt;br /&gt;
&lt;br /&gt;
Same as Mac, but you also need to make sure that you add the following udev rule:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# udev rules for ftdi devices&lt;br /&gt;
SUBSYSTEM==&amp;quot;usb|usb_device&amp;quot;, ACTION==&amp;quot;add&amp;quot;, ATTRS{idVendor}==&amp;quot;0403&amp;quot;, ATTRS{idProduct}==&amp;quot;6001&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Scanlime Fadecandy==&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 Scanlime Fadecandy device&lt;br /&gt;
SUBSYSTEM==&amp;quot;usb|usb_device&amp;quot;, ACTION==&amp;quot;add&amp;quot;, ATTRS{idVendor}==&amp;quot;1d50&amp;quot;, ATTRS{idProduct}==&amp;quot;607a&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SPI ==&lt;br /&gt;
&lt;br /&gt;
This plugin is designed for the Raspberry Pi. It may work on other hardware, but that's up to you. For instructions on the hardware side of things see [[OLA LED Pixels]].&lt;br /&gt;
&lt;br /&gt;
Enable the spi-bcm2708 module, depending on the version of Raspbian you're running it will either be via Device Tree or by editing /etc/modprobe.d/raspi-blacklist.conf.&lt;br /&gt;
&lt;br /&gt;
For recent versions you can use raspi-config's Advanced Options then SPI, see here for more info:&lt;br /&gt;
https://www.raspberrypi.org/documentation/configuration/raspi-config.md&lt;br /&gt;
&lt;br /&gt;
Or alternatively by manually enabling the SPI Device Tree by uncommenting the dtparam=spi=on line in /boot/config.txt as explained here:&lt;br /&gt;
https://www.raspberrypi.org/documentation/configuration/device-tree.md&lt;br /&gt;
&lt;br /&gt;
For older machines, edit /etc/modprobe.d/raspi-blacklist.conf and comment out the &amp;quot;blacklist spi-bcm2708&amp;quot; line. The file should look something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# blacklist spi and i2c by default (many users don't need them)&lt;br /&gt;
&lt;br /&gt;
#blacklist spi-bcm2708&lt;br /&gt;
blacklist i2c-bcm2708&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In both cases, to allow non-root access, add the following to /etc/udev/rules.d/99-spi.rules&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SUBSYSTEM==&amp;quot;spidev&amp;quot;, MODE=&amp;quot;0666&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;
==UART native DMX==&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
====Raspberry Pi====&lt;br /&gt;
&lt;br /&gt;
First stop anything else using the serial port; either use raspi-config (Advanced Options, Serial) or follow the instructions here:&lt;br /&gt;
&lt;br /&gt;
[http://elinux.org/RPi_Serial_Connection#Preventing_Linux_using_the_serial_port http://elinux.org/RPi_Serial_Connection#Preventing_Linux_using_the_serial_port]&lt;br /&gt;
&lt;br /&gt;
To make this work, you will also need to raise the Pi's UART clock, because the default one maxes out at 115kbaud. So you will need to add&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
init_uart_clock=16000000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to the /boot/config.txt file on the system. This won't affect any other user of the serial port provided you have a recent kernel.&lt;br /&gt;
&lt;br /&gt;
Another useful link is [http://fw.hardijzer.nl/?p=138 http://fw.hardijzer.nl/?p=138].&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 for  [http://downloads.openlighting.org/Velleman%20kext.dmg OS X 10.9 and above] or  [http://code.google.com/p/open-lighting/downloads/detail?name=libdmxusbshield.dmg OS 10.8 and below]. 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;br /&gt;
&lt;br /&gt;
Some people have reported issues with the K8062 on Ubuntu 14.04.&lt;br /&gt;
Symptoms: When you plug in your K8062, Ubuntu responds with Kernel Panic.&lt;br /&gt;
Problem: comedi and vmk60xx kernel modules are loaded and crash the kernel.&lt;br /&gt;
Solution: WARNING! Attempt at your own risk.&lt;br /&gt;
# Blacklist comedi and vmk60xx in /etc/modprobe.d/blacklist.conf&lt;br /&gt;
https://wiki.debian.org/KernelModuleBlacklisting&lt;br /&gt;
# Reboot and then run lsusb in the terminal. (Make sure K8062 is connected.)&lt;br /&gt;
After a short hang, the K8062 should come up as &amp;quot;Velleman Components, Inc.&amp;quot;&lt;br /&gt;
The K8062 has not been tested with any software after following this solution. It is only for the purpose of avoiding the Kernel Panic on Ubuntu.&lt;br /&gt;
&lt;br /&gt;
==KarateLight, KarateDMX==&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/81-karate.rules&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# udev rules file for the karate-device&lt;br /&gt;
KERNEL==&amp;quot;ttyACM?&amp;quot;, ATTRS{product}==&amp;quot;DMX2USB simple&amp;quot;, SYMLINK+=&amp;quot;kldmx0&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then make sure the user olad runs as is a member of 'dialout' which is the default group owning ttyACM?.&lt;/div&gt;</summary>
		<author><name>Peternewman</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=RDM_PID_Definitions&amp;diff=5850</id>
		<title>RDM PID Definitions</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=RDM_PID_Definitions&amp;diff=5850"/>
				<updated>2015-11-03T00:54:33Z</updated>
		
		<summary type="html">&lt;p&gt;Peternewman: Fix some links&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Parameter Definitions and OLA ==&lt;br /&gt;
&lt;br /&gt;
[[OLA]] reads the structure of [[RDM]] parameter messages at runtime. This allows the users to update PID definitions without upgrading the binaries and also means we can add knowledge of new manufacturer PIDs to the RDM controller software very quickly. &lt;br /&gt;
&lt;br /&gt;
To enable this, we've designed a parameter definition language which allows us to describe the structure of RDM parameter messages in a language-independent manner. This language has the following assumptions:&lt;br /&gt;
&lt;br /&gt;
* The structure of a message (i.e. # of repeated values and the length of variable sized fields) must be able to be determined solely from the parameter definition and the length of the message. All parameters in E1.20 and E1.37-1 conform to this, as well as every manufacturer parameter I've encountered. This means that only one variable-sized field can be present in each message, and that [http://en.wikipedia.org/wiki/Type-length-value TLV] style messages aren't supported.&lt;br /&gt;
&lt;br /&gt;
To get the full benefits of the definition language, the parameter definitions should also:&lt;br /&gt;
&lt;br /&gt;
* Use big-endian for multi-byte fields&lt;br /&gt;
* When integer values are used, the values are stores as normal int values, not as ASCII.&lt;br /&gt;
&lt;br /&gt;
The canonical parameter definitions are stored on the http://rdm.openlighting.org site. The data from the site is used to generate an ASCII [https://github.com/google/protobuf protocol buffer] which is then checked into the OLA codebase and distributed with the tarball. One day we may support automatic updating of the parameter definition files.&lt;br /&gt;
&lt;br /&gt;
You can see the latest pid protobufs at &amp;lt;tt&amp;gt;[[code:data/rdm/pids.proto|pids.proto]]&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;[[code:data/rdm/manufacturer_pids.proto|manufacturer_pids.proto]]&amp;lt;/tt&amp;gt;. In the tarball the files are in  &amp;lt;tt&amp;gt;data/rdm/&amp;lt;/tt&amp;gt; and they are usually installed into &amp;lt;tt&amp;gt;/usr/local/share/ola/pids/&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Adding New Parameters ==&lt;br /&gt;
&lt;br /&gt;
Parameters are added to the rdm.openlighting.org site by specifying the message structure, as well as properties like the parameter name and PID in a Python file. To get started, clone the rdm.openlighting.org code from https://github.com/OpenLightingProject/rdm-app. The definitions are found in &amp;lt;tt&amp;gt;data/pid_data.py&amp;lt;/tt&amp;gt;. Once you have edited this file push the change to a public git repo and email the open-lighting list asking for a pull request. Simon will sanity check the new parameters and push them to the rdm.openlighting.org site.&lt;br /&gt;
&lt;br /&gt;
You can use RDM Pid Builder to add your definitions:&lt;br /&gt;
http://imaginux.com/lighting/pids/addpids.php&lt;br /&gt;
&lt;br /&gt;
Or use the tool locally:&lt;br /&gt;
https://github.com/RenZ0/rdm-pid-builder&lt;br /&gt;
&lt;br /&gt;
== Structure ==&lt;br /&gt;
&lt;br /&gt;
The section describes the syntax of the parameter definition language in the Python representation used by the rdm.openlighting.org site. The protobuf representation is very similar and the concepts are the same for both representations.&lt;br /&gt;
&lt;br /&gt;
The parameter definitions file is just a Python data structure. At the top level there are two variables &amp;lt;tt&amp;gt;MANUFACTURER_PIDS&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;ESTA_PIDS&amp;lt;/tt&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MANUFACTURER_PIDS = [&lt;br /&gt;
  {'id': &amp;lt;int&amp;gt;,   # the manufacturer ID, written in hex&lt;br /&gt;
   'name': &amp;lt;string&amp;gt;,  # the manufacturer name&lt;br /&gt;
   'pids': [&amp;lt;parameter_definition&amp;gt;],&lt;br /&gt;
  },&lt;br /&gt;
  ...&lt;br /&gt;
]&lt;br /&gt;
&lt;br /&gt;
ESTA_PIDS = [&lt;br /&gt;
  &amp;lt;parameter_definition&amp;gt;&lt;br /&gt;
]&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each Parameter Definition takes the form: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  'get_request': {'items': [&amp;lt;item&amp;gt;]},&lt;br /&gt;
  'get_response': {'items': [&amp;lt;item&amp;gt;]},&lt;br /&gt;
  'get_sub_device_range': &amp;lt;int&amp;gt;,&lt;br /&gt;
  'name': &amp;lt;string&amp;gt;,&lt;br /&gt;
  'set_request': {'items': [&amp;lt;item&amp;gt;]},&lt;br /&gt;
  'set_response': {'items': [&amp;lt;item&amp;gt;]},&lt;br /&gt;
  'set_sub_device_range': &amp;lt;int&amp;gt;,&lt;br /&gt;
  'link': &amp;lt;string&amp;gt;,   # the URL for more information&lt;br /&gt;
  'notes': &amp;lt;string&amp;gt;,&lt;br /&gt;
  'value': &amp;lt;int&amp;gt;,  # the PID &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; {get,set}_request&lt;br /&gt;
:  The structure of the GET / SET request. This specifies a list of items which are the fields in the parameter message. See the section below for more details.&lt;br /&gt;
; {get,set}_response&lt;br /&gt;
:  The structure of the GET / SET response, same structure as the _request fields.&lt;br /&gt;
; {get,set}_sub_device_range&lt;br /&gt;
: A value between 0 and 3 which places restrictions on the value of the SubDevice field in the RDM message.&lt;br /&gt;
; name&lt;br /&gt;
: The name of the PID, should be in CAPS like the names in E1.20&lt;br /&gt;
; link&lt;br /&gt;
: A URL pointing to where this information was obtained, set to the empty string is there isn't one&lt;br /&gt;
; notes&lt;br /&gt;
: A text description of what this parameter does. This should be explain to the user how to use the parameter.&lt;br /&gt;
; value&lt;br /&gt;
: The parameter ID (PID).&lt;br /&gt;
&lt;br /&gt;
The allowed values for the sub_device_ranges are:&lt;br /&gt;
&lt;br /&gt;
; 0&lt;br /&gt;
: ROOT_DEVICE, implies the subdevice field is 0x0000&lt;br /&gt;
; 1&lt;br /&gt;
: ROOT_OR_ALL_SUBDEVICE, the subdevice field is 0x0000 to 0x0200 or 0xffff&lt;br /&gt;
; 2&lt;br /&gt;
: ROOT_OR_SUBDEVICE, the subdevice field is 0x0000 to 0x0200&lt;br /&gt;
; 3&lt;br /&gt;
: ONLY_SUBDEVICES, the sub device field is 0x0001 to 0x0200&lt;br /&gt;
&lt;br /&gt;
If a {get,set}_request field isn't present, this means the parameter doesn't support the GET / SET operation. In that case the corresponding _response field should also not be present. Note that this differs from a _request field which is present, but contains no items. The latter means that the parameter data length is 0.&lt;br /&gt;
&lt;br /&gt;
== Items ==&lt;br /&gt;
&lt;br /&gt;
Items represent the data fields within each message. An item can also be a group of items, which is how repeated fields are supported. There are only two required attributes for an item:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  'name': &amp;lt;string&amp;gt;,&lt;br /&gt;
  'type': &amp;lt;string&amp;gt;',&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Item names should be all lower case, with spaces replaced by _ .  In OLA, item names are run through CustomCapitalizeLabel() before being displayed to the user. This replaces '_' with ' ' and capitalizes words. For more details see the code in [[code:common/utils/StringUtils.cpp|StringUtils.cpp]].&lt;br /&gt;
&lt;br /&gt;
The valid item types are:&lt;br /&gt;
&lt;br /&gt;
* bool&lt;br /&gt;
* uint8&lt;br /&gt;
* uint16&lt;br /&gt;
* uint32&lt;br /&gt;
* int8&lt;br /&gt;
* int16&lt;br /&gt;
* int32&lt;br /&gt;
* string&lt;br /&gt;
* group, a group of items, see below for more details.&lt;br /&gt;
* ipv4, a 32 bit IP address&lt;br /&gt;
* mac, a 48 bit MAC address&lt;br /&gt;
* uid, a 48 bit UID.&lt;br /&gt;
&lt;br /&gt;
All multi-byte items are big endian.&lt;br /&gt;
&lt;br /&gt;
=== Optional Attributes ===&lt;br /&gt;
&lt;br /&gt;
These are only defined for certain item types.&lt;br /&gt;
&lt;br /&gt;
==== Labels ====&lt;br /&gt;
&lt;br /&gt;
Labels can be used with int items (uint8, uint16, uint32, int8, int16, int32) to attach string descriptions to values.&lt;br /&gt;
&lt;br /&gt;
Using DISPLAY_INVERT as an example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{'name': 'invert_status', 'type': 'uint8',&lt;br /&gt;
 'labels': [(0, 'Off'), (1, 'On'), (2, 'Auto')],&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Labels implicitly restrict the values that the item can hold. In the example above, a value outside the range 0-2 will generate an exception.&lt;br /&gt;
&lt;br /&gt;
==== Ranges ====&lt;br /&gt;
&lt;br /&gt;
Ranges are used to limit the values for an int item. Using REAL_TIME_CLOCK as the example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{'name': 'month', 'type': 'uint8', 'range': [(1, 12)]}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If both ranges and labels are specified, the union of values is used as the set of allowed values for the item.&lt;br /&gt;
&lt;br /&gt;
==== Multiplier ====&lt;br /&gt;
&lt;br /&gt;
This is used to shift the decimal point for int items. For example, in PRESET_INFO, the fade times are reported in 10ths of a second. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{'name': 'max_preset_fade_time', 'type': 'uint16', 'multiplier': -1},&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
==== Max Size ====&lt;br /&gt;
&lt;br /&gt;
This limits the maximum size of a string, or the maximum allowed groups in a repeated item. From DEVICE_LABEL:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{'name': 'label', 'max_size': 32, 'type': 'string'}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Min Size ====&lt;br /&gt;
&lt;br /&gt;
The opposite of max_size, used for strings and groups. From LANGUAGE_CAPABILITIES:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{'name': 'language', 'max_size': 2, 'min_size': 2, 'type': 'string'}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Item Groups ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
TODO: fill this in&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
These examples show how parameters from E1.20 are described using the PID Definitions Syntax.&lt;br /&gt;
&lt;br /&gt;
=== DEVICE_INFO ===&lt;br /&gt;
&lt;br /&gt;
A simple example is DEVICE_INFO. This is only defined for GET commands, and returns a message with various mixed-type fields:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 {'get_request': {'items': []},&lt;br /&gt;
  'get_response': {'items': [&lt;br /&gt;
      {'name': 'protocol_major', 'type': 'uint8'},&lt;br /&gt;
      {'name': 'protocol_minor', 'type': 'uint8'},&lt;br /&gt;
      {'name': 'device_model', 'type': 'uint16'},&lt;br /&gt;
      {'name': 'product_category', 'type': 'uint16'},&lt;br /&gt;
      {'name': 'software_version','type': 'uint32'},&lt;br /&gt;
      {'name': 'dmx_footprint', 'type': 'uint16'},&lt;br /&gt;
      {'name': 'current_personality', 'type': 'uint8'},&lt;br /&gt;
      {'name': 'personality_count','type': 'uint8'},&lt;br /&gt;
      {'name': 'dmx_start_address', 'type': 'uint16'},&lt;br /&gt;
      {'name': 'sub_device_count','type': 'uint16'},&lt;br /&gt;
      {'name': 'sensor_count', 'type': 'uint8'}]},&lt;br /&gt;
  'get_sub_device_range': 2,&lt;br /&gt;
  'name': 'DEVICE_INFO',                                                                                                                                             &lt;br /&gt;
  'value': 96},&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== DEVICE_LABEL === &lt;br /&gt;
&lt;br /&gt;
DEVICE_LABEL is defined for GET and SET. This example shows how to limit the length of a string.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 {'get_request': {'items': []},&lt;br /&gt;
  'get_response': {'items': [&lt;br /&gt;
      {'name': 'label', 'max_size': 32, 'type': 'string'}&lt;br /&gt;
  ]},&lt;br /&gt;
  'get_sub_device_range': 2,&lt;br /&gt;
  'name': 'DEVICE_LABEL',                                                                                                                                            &lt;br /&gt;
  'set_request': {'items': [&lt;br /&gt;
      {'name': 'label','max_size': 32, 'type': 'string'}&lt;br /&gt;
  ]},&lt;br /&gt;
  'set_response': {'items': []},&lt;br /&gt;
  'set_sub_device_range': 1,&lt;br /&gt;
  'value': 130},&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SLOT_INFO ===&lt;br /&gt;
&lt;br /&gt;
This example shows how repeated fields work:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 {'get_request': {'items': []},&lt;br /&gt;
  'get_response': {'items': [&lt;br /&gt;
      {'name': 'slots',&lt;br /&gt;
       'type': 'group',&lt;br /&gt;
       'items': [&lt;br /&gt;
          {'name': 'slot_offset', 'type': 'uint16'},&lt;br /&gt;
          {'name': 'slot_type', 'type': 'uint8'},&lt;br /&gt;
          {'name': 'slot_label_id', 'type': 'uint16'}&lt;br /&gt;
      ]},&lt;br /&gt;
  ]},&lt;br /&gt;
  'get_sub_device_range': 2,&lt;br /&gt;
  'name': 'SLOT_INFO',                                                                                                                                               &lt;br /&gt;
  'value': 288},&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Peternewman</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=Open_Lighting_Allocations&amp;diff=5848</id>
		<title>Open Lighting Allocations</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=Open_Lighting_Allocations&amp;diff=5848"/>
				<updated>2015-10-12T01:48:28Z</updated>
		
		<summary type="html">&lt;p&gt;Peternewman: /* UIDs */ SPaG and fix the link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== RDM Model Numbers ==&lt;br /&gt;
For the live list in use, see [[code:include/ola/rdm/OpenLightingEnums.h|here]].&lt;br /&gt;
&lt;br /&gt;
{| border=1 cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
! '''Number'''!! '''Assigned To'''&lt;br /&gt;
|-&lt;br /&gt;
|| 0x0001  || Dummy Device&lt;br /&gt;
|-&lt;br /&gt;
|| 0x0002 || [[Arduino RGB Mixer]]&lt;br /&gt;
|-&lt;br /&gt;
|| 0x0003 || SPI Device&lt;br /&gt;
|-&lt;br /&gt;
|| 0x0004 || Dummy Dimmer&lt;br /&gt;
|-&lt;br /&gt;
|| 0x0005 || Dummy Moving Light&lt;br /&gt;
|-&lt;br /&gt;
|| 0x0006 || Dummy Ack Timer&lt;br /&gt;
|-&lt;br /&gt;
|| 0x0007 || Dummy Sensor Responder&lt;br /&gt;
|-&lt;br /&gt;
|| 0x0008 || Dummy E1.37-1 Dimmer&lt;br /&gt;
|-&lt;br /&gt;
|| 0x0009 || Dummy E1.37-2 Network Responder&lt;br /&gt;
|-&lt;br /&gt;
|| 0x0100 || Ja Rule LED Model&lt;br /&gt;
|-&lt;br /&gt;
|| 0x0101 || Ja Rule Proxy&lt;br /&gt;
|-&lt;br /&gt;
|| 0x0102 || Ja Rule Moving Light&lt;br /&gt;
|-&lt;br /&gt;
|| 0x0103 || Ja Rule Sensor Only&lt;br /&gt;
|-&lt;br /&gt;
|| 0x0104 || Ja Rule Network&lt;br /&gt;
|-&lt;br /&gt;
|| 0x0105 || Ja Rule Dimmer&lt;br /&gt;
|-&lt;br /&gt;
|| 0x0106 || Ja Rule Proxy Child Device&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== UIDs ==&lt;br /&gt;
&lt;br /&gt;
The Open Lighting code is [http://rdm.openlighting.org/manufacturer/display?manufacturer=31344 0x7a70]&lt;br /&gt;
&lt;br /&gt;
{| border=1 cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
! '''UID Range'''!! '''Assigned To'''&lt;br /&gt;
|-&lt;br /&gt;
|| 7a70:00000001 || [[Arduino RGB Mixer]] default UID&lt;br /&gt;
|-&lt;br /&gt;
|| 7a70:00000100 - 7a70:000001ff || SPI Devices&lt;br /&gt;
|-&lt;br /&gt;
|| 7a70:10000000 - 7a70:1fffffff || Microchip devices 00:1E:C0 OUI (Ja Rule)&lt;br /&gt;
|-&lt;br /&gt;
|| 7a70:20000000 - 7a70:2fffffff || Microchip devices D8:80:39 OUI (Ja Rule)&lt;br /&gt;
|-&lt;br /&gt;
|| 7a70:30000000 - 7a70:3fffffff || Reserved for Microchip devices 00:04:A3 OUI (Ja Rule)&lt;br /&gt;
|-&lt;br /&gt;
|| 7a70:fffffe00 - 7a70:fffffe0f || Ja Rule non-MAC Development UIDs&lt;br /&gt;
|-&lt;br /&gt;
|| 7a70:fffffe10 - 7a70:fffffefe || Development&lt;br /&gt;
|-&lt;br /&gt;
|| 7a70:ffffff00 - 7a70:fffffffe || Dummy Devices&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Status Message Ids ==&lt;br /&gt;
&lt;br /&gt;
Status Message ID	Value	Data Value 1	Data Value 2	Status ID Description&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=1 cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
! '''Status Message ID'''!! '''Value''' !! '''Data Value 1''' !! '''Data Value2 ''' !! '''Status ID Description'''&lt;br /&gt;
|-&lt;br /&gt;
|| STS_OLP_TESTING  || 0x8000 || Cycle counter major || Cycle counter minor || Counter cycle %d.%d&lt;br /&gt;
|-&lt;br /&gt;
|| STS_OLP_SELFTEST_PASSED  || 0x8001 || Self Test ID || N/A || Self test %d ok&lt;br /&gt;
|-&lt;br /&gt;
|| STS_OLP_SELFTEST_FAILED  || 0x8002 || Self Test ID || N/A || Self test %d failed&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Manufacturer Specific PIDs ==&lt;br /&gt;
{{:Open Lighting PIDs}}&lt;/div&gt;</summary>
		<author><name>Peternewman</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=Open_Lighting_Allocations&amp;diff=5847</id>
		<title>Open Lighting Allocations</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=Open_Lighting_Allocations&amp;diff=5847"/>
				<updated>2015-10-12T01:26:25Z</updated>
		
		<summary type="html">&lt;p&gt;Peternewman: /* UIDs */ More utilisation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== RDM Model Numbers ==&lt;br /&gt;
For the live list in use, see [[code:include/ola/rdm/OpenLightingEnums.h|here]].&lt;br /&gt;
&lt;br /&gt;
{| border=1 cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
! '''Number'''!! '''Assigned To'''&lt;br /&gt;
|-&lt;br /&gt;
|| 0x0001  || Dummy Device&lt;br /&gt;
|-&lt;br /&gt;
|| 0x0002 || [[Arduino RGB Mixer]]&lt;br /&gt;
|-&lt;br /&gt;
|| 0x0003 || SPI Device&lt;br /&gt;
|-&lt;br /&gt;
|| 0x0004 || Dummy Dimmer&lt;br /&gt;
|-&lt;br /&gt;
|| 0x0005 || Dummy Moving Light&lt;br /&gt;
|-&lt;br /&gt;
|| 0x0006 || Dummy Ack Timer&lt;br /&gt;
|-&lt;br /&gt;
|| 0x0007 || Dummy Sensor Responder&lt;br /&gt;
|-&lt;br /&gt;
|| 0x0008 || Dummy E1.37-1 Dimmer&lt;br /&gt;
|-&lt;br /&gt;
|| 0x0009 || Dummy E1.37-2 Network Responder&lt;br /&gt;
|-&lt;br /&gt;
|| 0x0100 || Ja Rule LED Model&lt;br /&gt;
|-&lt;br /&gt;
|| 0x0101 || Ja Rule Proxy&lt;br /&gt;
|-&lt;br /&gt;
|| 0x0102 || Ja Rule Moving Light&lt;br /&gt;
|-&lt;br /&gt;
|| 0x0103 || Ja Rule Sensor Only&lt;br /&gt;
|-&lt;br /&gt;
|| 0x0104 || Ja Rule Network&lt;br /&gt;
|-&lt;br /&gt;
|| 0x0105 || Ja Rule Dimmer&lt;br /&gt;
|-&lt;br /&gt;
|| 0x0106 || Ja Rule Proxy Child Device&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== UIDs ==&lt;br /&gt;
&lt;br /&gt;
The Open Lighting code is [http://rdm.openlighting.org/manufacturer/display?manufacturer=31344|0x7a70]&lt;br /&gt;
&lt;br /&gt;
{| border=1 cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
! '''UID Range'''!! '''Assigned To'''&lt;br /&gt;
|-&lt;br /&gt;
|| 7a70:00000001 || [[Arduino RGB Mixer]] default UID&lt;br /&gt;
|-&lt;br /&gt;
|| 7a70:00000100 - 7a70:000001ff || SPI Devices&lt;br /&gt;
|-&lt;br /&gt;
|| 7a70:10000000 - 7a70:1fffffff || Microchip devices 00:1E:C0 OID (Ja Rule)&lt;br /&gt;
|-&lt;br /&gt;
|| 7a70:20000000 - 7a70:2fffffff || Microchip devices D8:80:39 OID (Ja Rule)&lt;br /&gt;
|-&lt;br /&gt;
|| 7a70:30000000 - 7a70:3fffffff || Reserved for Microchip devices 00:04:A3 OID (Ja Rule)&lt;br /&gt;
|-&lt;br /&gt;
|| 7a70:fffffe00 - 7a70:fffffe0f || Ja Rule non-MAC Development UIDs&lt;br /&gt;
|-&lt;br /&gt;
|| 7a70:fffffe10 - 7a70:fffffefe || Development&lt;br /&gt;
|-&lt;br /&gt;
|| 7a70:ffffff00 - 7a70:fffffffe || Dummy Devices&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Status Message Ids ==&lt;br /&gt;
&lt;br /&gt;
Status Message ID	Value	Data Value 1	Data Value 2	Status ID Description&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=1 cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
! '''Status Message ID'''!! '''Value''' !! '''Data Value 1''' !! '''Data Value2 ''' !! '''Status ID Description'''&lt;br /&gt;
|-&lt;br /&gt;
|| STS_OLP_TESTING  || 0x8000 || Cycle counter major || Cycle counter minor || Counter cycle %d.%d&lt;br /&gt;
|-&lt;br /&gt;
|| STS_OLP_SELFTEST_PASSED  || 0x8001 || Self Test ID || N/A || Self test %d ok&lt;br /&gt;
|-&lt;br /&gt;
|| STS_OLP_SELFTEST_FAILED  || 0x8002 || Self Test ID || N/A || Self test %d failed&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Manufacturer Specific PIDs ==&lt;br /&gt;
{{:Open Lighting PIDs}}&lt;/div&gt;</summary>
		<author><name>Peternewman</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OlaOutput_Build_Intructions&amp;diff=5822</id>
		<title>OlaOutput Build Intructions</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=OlaOutput_Build_Intructions&amp;diff=5822"/>
				<updated>2015-05-02T22:58:18Z</updated>
		
		<summary type="html">&lt;p&gt;Peternewman: Peternewman moved page OlaOutput Build Intructions to OlaOutput Build Instructions: SPaG&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[OlaOutput Build Instructions]]&lt;/div&gt;</summary>
		<author><name>Peternewman</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OlaOutput_Build_Instructions&amp;diff=5821</id>
		<title>OlaOutput Build Instructions</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=OlaOutput_Build_Instructions&amp;diff=5821"/>
				<updated>2015-05-02T22:58:17Z</updated>
		
		<summary type="html">&lt;p&gt;Peternewman: Peternewman moved page OlaOutput Build Intructions to OlaOutput Build Instructions: SPaG&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This describes how to build a 64bit version of the OlaOutput MAX/MSP plugin. Building a 32bit plugin is left as an exercise for the reader.&lt;br /&gt;
 &lt;br /&gt;
==Download the Max SDK ==&lt;br /&gt;
&lt;br /&gt;
Download the MAX/MSP SDK from https://cycling74.com/downloads/sdk/. Extract the zip file.&lt;br /&gt;
&lt;br /&gt;
== Install XCode ==&lt;br /&gt;
&lt;br /&gt;
Download [https://developer.apple.com/xcode/ XCode]&lt;br /&gt;
&lt;br /&gt;
== Install OLA ==&lt;br /&gt;
&lt;br /&gt;
Follow the [https://www.openlighting.org/ola/mac-install/ instructions for installing OLA]. The easiest way is to install using MacPorts, which will install into the /opt/local path.&lt;br /&gt;
&lt;br /&gt;
== Clone the OlaOutput Git Repo ==&lt;br /&gt;
&lt;br /&gt;
Clone the [https://github.com/OpenLightingProject/olaoutput  git repo].&lt;br /&gt;
&lt;br /&gt;
Move the olaoutput directory under the Max SDK directory from the zip file. It should now look something like:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
simon:~/Downloads/max-sdk-7.0.3 $ ls -l&lt;br /&gt;
total 12016&lt;br /&gt;
-rwxr-xr-x@   1 simon  5000      516 Apr 30 05:38 MaxAPI-7.0.3.html&lt;br /&gt;
-rwxr-xr-x@   1 simon  5000  6137127 Apr 30 05:38 MaxAPI-7.0.3.pdf&lt;br /&gt;
-rwxr-xr-x@   1 simon  5000      265 Apr 30 05:38 README.md&lt;br /&gt;
drwxr-xr-x@ 105 simon  5000     3570 Apr 30 05:38 help&lt;br /&gt;
drwxr-xr-x@ 831 simon  5000    28254 Apr 30 05:38 html&lt;br /&gt;
drwxr-xr-x    3 simon  5000      102 May  1 22:37 max_build&lt;br /&gt;
drwxr-xr-x    9 simon  5000      306 May  1 22:36 olaoutput&lt;br /&gt;
-rwxr-xr-x@   1 simon  5000      214 Apr 30 05:38 package-info.json&lt;br /&gt;
drwxr-xr-x@  15 simon  5000      510 Apr 30 05:38 source&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
== Build ==&lt;br /&gt;
&lt;br /&gt;
Start XCode and open the olaoutput/olaoutput/olaoutput.xcodeproj file. You should see something like the screenshot below.&lt;br /&gt;
&lt;br /&gt;
[[File:Olaoutput-xcode1.png|thumb|center]]&lt;br /&gt;
&lt;br /&gt;
Note that XCode can't find commonsyms.c or libprotobuf.8.dylib. Click on commonsyms.c on the left, then in the right panel click on the folder icon and navigate to source/c74support/max-includes/common/commonsyms.c .&lt;br /&gt;
&lt;br /&gt;
For libprotobuf.8.dylib, it's a similar story, click on the folder icon and then select /opt/local/lib/libprotobuf.9.dylib. If you didn't use MacPorts to install OLA, the protobuf library may be in a different location.&lt;br /&gt;
&lt;br /&gt;
Next you'll need to fix the C74SUPPORT path. Click on the 'olaoutput project' in the left pane, then choose 'Build Settings'. Set C74SUPPORT to the correct path (see screenshot).&lt;br /&gt;
&lt;br /&gt;
[[File:Olaoutput-xcode2.png|thumb|center]]&lt;br /&gt;
&lt;br /&gt;
Finally change the dropdown in the center pane from 'max-external' to olaoutput. Then under build settings remove i386 from the list of Valid Architectures. &lt;br /&gt;
&lt;br /&gt;
[[File:Olaoutput-xcode3.png|thumb|center]]&lt;br /&gt;
&lt;br /&gt;
At this point the build should succeed.  The .mxo file will be in the max_build directory under the MAX SDK directory.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Extra Info ==&lt;br /&gt;
&lt;br /&gt;
The plugin will only work on machines where the OLA libraries are installed in the same paths. This means you can build a plugin on a machine where OLA was installed from a tarball and then expect it to work on a machine where OLA was installed using MacPorts.&lt;br /&gt;
&lt;br /&gt;
If you want to build a 386 (32-bit) version, you'll need to build all the MacPorts software with i386 support. See the [https://guide.macports.org/chunked/internals.configuration-files.html build_arch] variable.&lt;/div&gt;</summary>
		<author><name>Peternewman</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OLA_Device_Specific_Configuration&amp;diff=5810</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=5810"/>
				<updated>2015-04-26T00:17:33Z</updated>
		
		<summary type="html">&lt;p&gt;Peternewman: /* SPI */ Info on Device Tree&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;
==Streaming ACN / E1.31==&lt;br /&gt;
&lt;br /&gt;
===All Platforms===&lt;br /&gt;
Some older networking gear only supports an old revision of E1.31 Called Revision 20. To use this older version you need to change a line in ola-e131.conf. Change this line&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
revision = 0.46&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to this line&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
revision = 0.2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Only do this if the older gear cannot accept the standardized version of E1.31.&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
If you are planning to receive large amounts of multicast traffic 20+, you will need to adjust the maximum amount of igmp memberships.&lt;br /&gt;
Use the following command:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo &amp;lt;number_of_memberships&amp;gt; | sudo tee /proc/sys/net/ipv4/igmp_max_memberships&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example this command sets the maximum number of igmp memberships to 256:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo 256 | sudo tee /proc/sys/net/ipv4/igmp_max_memberships&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Eurolite USB DMX512 PRO==&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
Sometime the cdc_acm kernel module claims the device. If this happens you'll see errors like &amp;quot;Cannot claim device&amp;quot; and/or &amp;quot;another process has device opened for exclusive access&amp;quot;. To avoid this you can remove the module (rmmod). A udev rule like what is used for the Anyma device should also work.&lt;br /&gt;
&lt;br /&gt;
You may also need the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SUBSYSTEMS==&amp;quot;usb&amp;quot;, ATTRS{idVendor}==&amp;quot;04d8&amp;quot;,ATTRS{idProduct}==&amp;quot;0xfa63&amp;quot;, MODE=&amp;quot;0660&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Mac===&lt;br /&gt;
&lt;br /&gt;
Install the [http://code.google.com/p/open-lighting/downloads/detail?name=euroliteusbshield.dmg&amp;amp;can=2&amp;amp;q=#makechanges KEXT].&lt;br /&gt;
&lt;br /&gt;
== General Purpose I/O ==&lt;br /&gt;
&lt;br /&gt;
This has only been tested on a Raspberry Pi device. You can find information about the GPIO features on a Pi at [http://elinux.org/RPi_Low-level_peripherals elinux.org]&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
You'll need to export the GPIO pins. For example, to use pin 23, as root run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ echo 23 &amp;gt; /sys/class/gpio/export&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You'll also need to ensure that the user olad runs as has permission to change the level of the Pins. Each of the following files should be writeable:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/sys/class/gpio/gpio23/direction&lt;br /&gt;
/sys/class/gpio/gpio23/value&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You could for example do this by running the following as root (assuming olad is in the plugdev group, which you can check with &amp;quot;groups olad&amp;quot;)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chgrp plugdev /sys/class/gpio/gpio23/direction&lt;br /&gt;
chmod g+w /sys/class/gpio/gpio23/direction&lt;br /&gt;
chgrp plugdev /sys/class/gpio/gpio23/value&lt;br /&gt;
chmod g+w /sys/class/gpio/gpio23/value&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== OSC ==&lt;br /&gt;
&lt;br /&gt;
The message types are described in the  [http://opensoundcontrol.org/spec-1_0 OSC Spec] .&lt;br /&gt;
&lt;br /&gt;
=== Receiving DMX ===&lt;br /&gt;
&lt;br /&gt;
The OSC plugin accepts a number of message formats:&lt;br /&gt;
&lt;br /&gt;
{| border=1 cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
! Path !! OSC Message Type !! Data !! Comments &lt;br /&gt;
|-&lt;br /&gt;
|| /path || 'b' || Blob of length 1 to 512. || The most efficient way of sending DMX data over OSC.&lt;br /&gt;
|-&lt;br /&gt;
|| /path/N || 'i' || Slot value from 0 to 255 || Update a single slot. N is the slot number from 1 - 512. &lt;br /&gt;
|-&lt;br /&gt;
|| /path/N || 'f' || Slot value from 0.0 to 1.0 || Update a single slot. N is the slot number from 1 - 512. &lt;br /&gt;
|-&lt;br /&gt;
|| /path || 'ii' || Slot number from 0 to 511, slot value from 0 to 255 || Update a single slot.&lt;br /&gt;
|-&lt;br /&gt;
|| /path || 'if' || Slot number from 0 to 511, slot value from 0.0 to 1.0 || Update a single slot.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Sending DMX ===&lt;br /&gt;
&lt;br /&gt;
The following formats are available for sending data:&lt;br /&gt;
&lt;br /&gt;
{| border=1 cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
! Config Option !! Path !! OSC Message Type !! Data !! Comments &lt;br /&gt;
|-&lt;br /&gt;
|| blob || /path || 'b' || Blob of length 1 to 512. || The most efficient way of sending DMX data over OSC.&lt;br /&gt;
|-&lt;br /&gt;
|| float_array || /path || N * 'f' || Slot values from 0.0 to 1.0 ||  Not quite as efficient as the blob type.&lt;br /&gt;
|-&lt;br /&gt;
|| int_array || /path || N * 'i' || Slot values from 0 to 255 ||  Not quite as efficient as the blob type.&lt;br /&gt;
|-&lt;br /&gt;
|| individual_float || /path/N || 'f' || Slot value from 0.0 to 1.0 || N is the slot number from 1 - 512.  Results in a lot of messages being sent, avoid using this. &lt;br /&gt;
|-&lt;br /&gt;
|| individual_int || /path/N || 'i' || Slot value from 0 to 255 || N is the slot number from 1 - 512. Results in a lot of messages being sent, avoid using this. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Open DMX USB / FTDI RS485 ==&lt;br /&gt;
&lt;br /&gt;
There are two options, the 'Open DMX' plugin that requires the kernel module and the native FTDI driver.&lt;br /&gt;
&lt;br /&gt;
The Open DMX Plugin requires the dmx_usb kernel module, which means it's Linux only. The FTDI driver can be used on either Mac or Linux.&lt;br /&gt;
&lt;br /&gt;
=== Linux, Open DMX Kernel Module ===&lt;br /&gt;
&lt;br /&gt;
Make sure the opendmx plugin is enabled.&lt;br /&gt;
Make sure the dmx_usb kernel module is loaded. &lt;br /&gt;
&lt;br /&gt;
===Mac FTDI ===&lt;br /&gt;
&lt;br /&gt;
You must have libftdi-dev installed before you run ./configure.  Otherwise the FTDI DMX plugin won't show up in the list of OLA plugins. &lt;br /&gt;
&lt;br /&gt;
Enable the FTDI driver (ola-ftdidmx ) and disable the USB Serial and Open DMX drivers (ola-usbserial.conf &amp;amp;  ola-opendmx.conf) &lt;br /&gt;
&lt;br /&gt;
=== Linux, FTDI ===&lt;br /&gt;
&lt;br /&gt;
Same as Mac, but you also need to make sure that you add the following udev rule:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# udev rules for ftdi devices&lt;br /&gt;
SUBSYSTEM==&amp;quot;usb|usb_device&amp;quot;, ACTION==&amp;quot;add&amp;quot;, ATTRS{idVendor}==&amp;quot;0403&amp;quot;, ATTRS{idProduct}==&amp;quot;6001&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Scanlime Fadecandy==&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 Scanlime Fadecandy device&lt;br /&gt;
SUBSYSTEM==&amp;quot;usb|usb_device&amp;quot;, ACTION==&amp;quot;add&amp;quot;, ATTRS{idVendor}==&amp;quot;1d50&amp;quot;, ATTRS{idProduct}==&amp;quot;607a&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SPI ==&lt;br /&gt;
&lt;br /&gt;
This plugin is designed for the Raspberry Pi. It may work on other hardware, but that's up to you. For instructions on the hardware side of things see [[OLA LED Pixels]].&lt;br /&gt;
&lt;br /&gt;
Enable the spi-bcm2708 module, depending on the version of Raspbian you're running it will either be via Device Tree or by editing /etc/modprobe.d/raspi-blacklist.conf.&lt;br /&gt;
&lt;br /&gt;
For recent versions you can use raspi-config's Advanced Options then SPI, see here for more info:&lt;br /&gt;
https://www.raspberrypi.org/documentation/configuration/raspi-config.md&lt;br /&gt;
&lt;br /&gt;
Or alternatively by manually enabling the SPI Device Tree by uncommenting the dtparam=spi=on line in /boot/config.txt as explained here:&lt;br /&gt;
https://www.raspberrypi.org/documentation/configuration/device-tree.md&lt;br /&gt;
&lt;br /&gt;
For older machines, edit /etc/modprobe.d/raspi-blacklist.conf and comment out the &amp;quot;blacklist spi-bcm2708&amp;quot; line. The file should look something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# blacklist spi and i2c by default (many users don't need them)&lt;br /&gt;
&lt;br /&gt;
#blacklist spi-bcm2708&lt;br /&gt;
blacklist i2c-bcm2708&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In both cases, to allow non-root access, add the following to /etc/udev/rules.d/99-spi.rules&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SUBSYSTEM==&amp;quot;spidev&amp;quot;, MODE=&amp;quot;0666&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;
==UART native DMX==&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
====Raspberry Pi====&lt;br /&gt;
&lt;br /&gt;
First stop anything else using the serial port; either use raspi-config (Advanced Options, Serial) or follow the instructions here:&lt;br /&gt;
&lt;br /&gt;
[http://elinux.org/RPi_Serial_Connection#Preventing_Linux_using_the_serial_port http://elinux.org/RPi_Serial_Connection#Preventing_Linux_using_the_serial_port]&lt;br /&gt;
&lt;br /&gt;
To make this work, you will also need to raise the Pi's UART clock, because the default one maxes out at 115kbaud. So you will need to add&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
init_uart_clock=16000000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to the /boot/config.txt file on the system. This won't affect any other user of the serial port provided you have a recent kernel.&lt;br /&gt;
&lt;br /&gt;
Another useful link is [http://fw.hardijzer.nl/?p=138 http://fw.hardijzer.nl/?p=138].&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 for  [http://downloads.openlighting.org/Velleman%20kext.dmg OS X 10.9 and above] or  [http://code.google.com/p/open-lighting/downloads/detail?name=libdmxusbshield.dmg OS 10.8 and below]. 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;br /&gt;
&lt;br /&gt;
==KarateLight, KarateDMX==&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/81-karate.rules&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# udev rules file for the karate-device&lt;br /&gt;
KERNEL==&amp;quot;ttyACM?&amp;quot;, ATTRS{product}==&amp;quot;DMX2USB simple&amp;quot;, SYMLINK+=&amp;quot;kldmx0&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then make sure the user olad runs as is a member of 'dialout' which is the default group owning ttyACM?.&lt;/div&gt;</summary>
		<author><name>Peternewman</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=Open_Lighting_Allocations&amp;diff=5807</id>
		<title>Open Lighting Allocations</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=Open_Lighting_Allocations&amp;diff=5807"/>
				<updated>2015-03-17T00:27:26Z</updated>
		
		<summary type="html">&lt;p&gt;Peternewman: /* UIDs */ Add Arduino RGB mixer&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== RDM Model Numbers ==&lt;br /&gt;
For the live list in use, see [[code:include/ola/rdm/OpenLightingEnums.h|here]].&lt;br /&gt;
&lt;br /&gt;
{| border=1 cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
! '''Number'''!! '''Assigned To'''&lt;br /&gt;
|-&lt;br /&gt;
|| 1  || Dummy Device&lt;br /&gt;
|-&lt;br /&gt;
|| 2 || [[Arduino RGB Mixer]]&lt;br /&gt;
|-&lt;br /&gt;
|| 3 || SPI Device&lt;br /&gt;
|-&lt;br /&gt;
|| 4 || Dummy Dimmer&lt;br /&gt;
|-&lt;br /&gt;
|| 5 || Dummy Moving Light&lt;br /&gt;
|-&lt;br /&gt;
|| 6 || Dummy Ack Timer&lt;br /&gt;
|-&lt;br /&gt;
|| 7 || Dummy Sensor Responder&lt;br /&gt;
|-&lt;br /&gt;
|| 8 || Dummy E1.37-1 Dimmer&lt;br /&gt;
|-&lt;br /&gt;
|| 9 || Dummy E1.37-2 Network Responder&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== UIDs ==&lt;br /&gt;
&lt;br /&gt;
The Open Lighting code is 0x7a70&lt;br /&gt;
&lt;br /&gt;
{| border=1 cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
! '''UID Range'''!! '''Assigned To'''&lt;br /&gt;
|-&lt;br /&gt;
|| 7a70:00000001 || [[Arduino RGB Mixer]] default UID&lt;br /&gt;
|-&lt;br /&gt;
|| 7a70:00000100 - 7a70:000001ff || SPI Devices&lt;br /&gt;
|-&lt;br /&gt;
|| 7a70:fffffe00 - 7a70:fffffefe || Ja Rule Controllers&lt;br /&gt;
|-&lt;br /&gt;
|| 7a70:ffffff00 - 7a70:fffffffe || Dummy Devices&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Manufacturer Specific PIDs ==&lt;br /&gt;
{{:Open Lighting PIDs}}&lt;/div&gt;</summary>
		<author><name>Peternewman</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=Open_Lighting_Allocations&amp;diff=5806</id>
		<title>Open Lighting Allocations</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=Open_Lighting_Allocations&amp;diff=5806"/>
				<updated>2015-03-17T00:14:27Z</updated>
		
		<summary type="html">&lt;p&gt;Peternewman: /* RDM Model Numbers */ Update some more current model numbers&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== RDM Model Numbers ==&lt;br /&gt;
For the live list in use, see [[code:include/ola/rdm/OpenLightingEnums.h|here]].&lt;br /&gt;
&lt;br /&gt;
{| border=1 cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
! '''Number'''!! '''Assigned To'''&lt;br /&gt;
|-&lt;br /&gt;
|| 1  || Dummy Device&lt;br /&gt;
|-&lt;br /&gt;
|| 2 || [[Arduino RGB Mixer]]&lt;br /&gt;
|-&lt;br /&gt;
|| 3 || SPI Device&lt;br /&gt;
|-&lt;br /&gt;
|| 4 || Dummy Dimmer&lt;br /&gt;
|-&lt;br /&gt;
|| 5 || Dummy Moving Light&lt;br /&gt;
|-&lt;br /&gt;
|| 6 || Dummy Ack Timer&lt;br /&gt;
|-&lt;br /&gt;
|| 7 || Dummy Sensor Responder&lt;br /&gt;
|-&lt;br /&gt;
|| 8 || Dummy E1.37-1 Dimmer&lt;br /&gt;
|-&lt;br /&gt;
|| 9 || Dummy E1.37-2 Network Responder&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== UIDs ==&lt;br /&gt;
&lt;br /&gt;
The Open Lighting code is 0x7a70&lt;br /&gt;
&lt;br /&gt;
{| border=1 cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
! '''UID Range'''!! '''Assigned To'''&lt;br /&gt;
|-&lt;br /&gt;
|| 7a70:00000100 - 7a70:000001ff || SPI Devices&lt;br /&gt;
|-&lt;br /&gt;
|| 7a70:fffffe00 - 7a70:fffffefe || Ja Rule Controllers&lt;br /&gt;
|-&lt;br /&gt;
|| 7a70:ffffff00 - 7a70:fffffffe || Dummy Devices&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Manufacturer Specific PIDs ==&lt;br /&gt;
{{:Open Lighting PIDs}}&lt;/div&gt;</summary>
		<author><name>Peternewman</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OLA_Buildbot&amp;diff=5804</id>
		<title>OLA Buildbot</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=OLA_Buildbot&amp;diff=5804"/>
				<updated>2015-03-14T16:14:01Z</updated>
		
		<summary type="html">&lt;p&gt;Peternewman: /* Prerequisites &amp;amp; Warning */ Update the configure options we run&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;We run a [http://buildbot.net/ Buildbot] instance for [[OLA]].&lt;br /&gt;
&lt;br /&gt;
*Web UI: http://buildbot.openlighting.org&lt;br /&gt;
*IRC: OLA-buildbot-ch in #openlighting-build on irc.freenode.org&lt;br /&gt;
&lt;br /&gt;
We're currently only building ola, but this could be extended to do other projects such as the QT GUI etc.&lt;br /&gt;
&lt;br /&gt;
== Master Configuration ==&lt;br /&gt;
The buildbot master configuration is stored in git at https://github.com/OpenLightingProject/buildbot . It needs checking out, and symlinking to replace master.cfg in the buildbot master's config directory.&lt;br /&gt;
&lt;br /&gt;
N.B. If the main open-lighting git repository (as opposed to buildbot config) is ever moved or changed, ensure the master's gitpoller-workdir folder is emptied out, or the poller won't work properly.&lt;br /&gt;
&lt;br /&gt;
= Adding a Slave =&lt;br /&gt;
&lt;br /&gt;
Buildbot documentation is at http://docs.buildbot.net/current/manual/installation.html#creating-a-buildslave .  The steps below should cover everything you need though.&lt;br /&gt;
&lt;br /&gt;
== Prerequisites &amp;amp; Warning ==&lt;br /&gt;
&lt;br /&gt;
Slaves execute code directly from the git repo. Even though submits to the git repo are locked down, this is still a possible attack vector for your machine. For this reason it's best to run build slaves within a virtual machine.  TODO: link to some VM solutions.&lt;br /&gt;
&lt;br /&gt;
At the very least you should run the buildslave as a separate user (not root!). Slave passwords aren't stored in the git repo for security, you'll need to get Simon or Peter to add new ones.&lt;br /&gt;
&lt;br /&gt;
The buildbot performs full build &amp;amp; test runs with all the options enabled. Please make sure you have all the necessary libraries installed on your system. You need to be able to complete a &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
autoconf -i&lt;br /&gt;
./configure --enable-e133 --enable-rdm-tests --enable-python-libs --enable-ja-rule&lt;br /&gt;
make&lt;br /&gt;
make check&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
cycle before proceeding. If you have trouble ask on the mailing list.&lt;br /&gt;
&lt;br /&gt;
If you're running the lint check, you need cpplint.py in your path somewhere, see README.developer for info on how to obtain it.&lt;br /&gt;
&lt;br /&gt;
Buildbot slaves need to connect to  buildmaster.openlighting.org:9989 . Make sure your firewall allows this. No port forwarding for inbound connections is required.&lt;br /&gt;
&lt;br /&gt;
== Debian / Ubuntu Instructions ==&lt;br /&gt;
&lt;br /&gt;
This requires wheezy or later. For squeeze you can use the easy_install method below.&lt;br /&gt;
&lt;br /&gt;
=== Build Slave Installation ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo apt-get install buildbot-slave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Slave Configuration ===&lt;br /&gt;
&lt;br /&gt;
Create the slave (the package creates the buildbot user automatically for you):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo -u buildbot buildslave create-slave --usepty=0 /var/lib/buildbot/slaves/ola buildmaster.openlighting.org:9989 &amp;lt;slave user&amp;gt; &amp;lt;slave password&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Update the slave info, edit the files in /var/lib/buildbot/slaves/ola/info to be relevant to you.&lt;br /&gt;
&lt;br /&gt;
Add config for the slave into /etc/default/buildslave (you'll need to increase the array id if you've got more than one slave on the same host), e.g.:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 SLAVE_ENABLED[1]=1                    # 1-enabled, 0-disabled&lt;br /&gt;
 SLAVE_NAME[1]=&amp;quot;ola&amp;quot;         # short name printed on start/stop&lt;br /&gt;
 SLAVE_USER[1]=&amp;quot;buildbot&amp;quot;              # user to run slave as&lt;br /&gt;
 SLAVE_BASEDIR[1]=&amp;quot;/var/lib/buildbot/slaves/ola&amp;quot;                   # basedir to slave (absolute path)&lt;br /&gt;
 SLAVE_OPTIONS[1]=&amp;quot;&amp;quot;                   # buildbot options&lt;br /&gt;
 SLAVE_PREFIXCMD[1]=&amp;quot;&amp;quot;                 # prefix command, i.e. nice, linux32, dchroot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Start the slave&lt;br /&gt;
 sudo /etc/init.d/buildslave start&lt;br /&gt;
&lt;br /&gt;
Check the log if there are any issues, or confirm the slave is registered at http://buildbot.openlighting.org/buildslaves:&lt;br /&gt;
 tail -f /var/lib/buildbot/slaves/ola/twistd.log&lt;br /&gt;
&lt;br /&gt;
== FreeBSD Instructions ==&lt;br /&gt;
&lt;br /&gt;
This was tested on FreeBSD 10.&lt;br /&gt;
&lt;br /&gt;
=== Build Slave Installation ===&lt;br /&gt;
As root:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 pkg install buildbot-slave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Slave Configuration ===&lt;br /&gt;
&lt;br /&gt;
Setup a new user:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
su -&lt;br /&gt;
adduser&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Username: ola-build-slave&lt;br /&gt;
Use password-based authentication? No&lt;br /&gt;
&lt;br /&gt;
Setup the slave:&lt;br /&gt;
&lt;br /&gt;
Switch to the slave user, I did:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
su - #To root&lt;br /&gt;
su - ola-build-slave #To slave user&lt;br /&gt;
cd ~&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Export the variables needed for configure on FreeBSD:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export CPPFLAGS=&amp;quot;-I/usr/local/include/&amp;quot;&lt;br /&gt;
export LDFLAGS=&amp;quot;-L/usr/local/lib/&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setup the slave itself:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/usr/local/bin/buildslave create-slave ola-slave buildmaster.openlighting.org:9989 &amp;lt;slave user&amp;gt; &amp;lt;slave password&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edit &amp;lt;tt&amp;gt;ola-slave/info/admin&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;ola-slave/info/host&amp;lt;/tt&amp;gt; so your slave shows up correctly.&lt;br /&gt;
&lt;br /&gt;
Then start the slave:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/usr/local/bin/buildslave start ola-slave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can look at the logs by running&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 tail -f ola-slave/twistd.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At this point you can go to http://buildbot.openlighting.org/buildslaves and you should see your slave connected. It's probably worth asking someone to kick off a build at this point so we can check your slave is working.&lt;br /&gt;
&lt;br /&gt;
Finally, if everything looks good, configure your slave to launch on startup by editing the crontab for the ola-build-slave user (crontab -e). Add the following line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@reboot /usr/local/bin/buildslave start /home/ola-build-slave/ola-slave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== NetBSD Instructions ==&lt;br /&gt;
&lt;br /&gt;
This was tested on NetBSD 6.&lt;br /&gt;
&lt;br /&gt;
=== Build Slave Installation ===&lt;br /&gt;
As root:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 pkgin install py27-buildbot-slave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Slave Configuration ===&lt;br /&gt;
&lt;br /&gt;
Setup a new user:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
su -&lt;br /&gt;
useradd -m ola-build-slave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Use password-based authentication? No&lt;br /&gt;
&lt;br /&gt;
Setup the slave:&lt;br /&gt;
&lt;br /&gt;
Switch to the slave user:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
su - ola-build-slave&lt;br /&gt;
cd ~&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Export the variables needed for git and configure on NetBSD (add these to the .shrc or equivalent for next time):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export CPPFLAGS=&amp;quot;-I/usr/pkg/include/&amp;quot;&lt;br /&gt;
export LDFLAGS=&amp;quot;-L/usr/pkg/lib/&amp;quot;&lt;br /&gt;
export GIT_SSL_NO_VERIFY=true&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setup the slave itself:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/usr/pkg/bin/buildslave create-slave ola-slave buildmaster.openlighting.org:9989 &amp;lt;slave user&amp;gt; &amp;lt;slave password&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edit &amp;lt;tt&amp;gt;ola-slave/info/admin&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;ola-slave/info/host&amp;lt;/tt&amp;gt; so your slave shows up correctly.&lt;br /&gt;
&lt;br /&gt;
Then start the slave:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/usr/pkg/bin/buildslave start ola-slave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can look at the logs by running&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 tail -f ola-slave/twistd.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At this point you can go to http://buildbot.openlighting.org/buildslaves and you should see your slave connected. It's probably worth asking someone to kick off a build at this point so we can check your slave is working.&lt;br /&gt;
&lt;br /&gt;
Finally, if everything looks good, configure your slave to launch on startup by editing the crontab for the ola-build-slave user (crontab -e). Add the following line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@reboot /usr/pkg/bin/buildslave start /home/ola-build-slave/ola-slave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== OpenBSD Instructions ==&lt;br /&gt;
&lt;br /&gt;
This was tested on OpenBSD 5.4.&lt;br /&gt;
&lt;br /&gt;
=== Build Slave Installation ===&lt;br /&gt;
As root:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pkg_add py-buildslave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Slave Configuration ===&lt;br /&gt;
&lt;br /&gt;
Setup a new user:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
su -&lt;br /&gt;
useradd -m ola-build-slave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setup the slave:&lt;br /&gt;
&lt;br /&gt;
Switch to the slave user:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
su - ola-build-slave&lt;br /&gt;
cd ~&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Export the variables needed for autoconf and configure on OpenBSD (add these to the .profile or equivalent for next time):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export AUTOCONF_VERSION=2.69&lt;br /&gt;
export AUTOMAKE_VERSION=1.13&lt;br /&gt;
export CPPFLAGS=&amp;quot;-I/usr/local/include/&amp;quot;&lt;br /&gt;
export LDFLAGS=&amp;quot;-L/usr/local/lib/&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setup the slave itself:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/usr/local/bin/buildslave create-slave ola-slave buildmaster.openlighting.org:9989 &amp;lt;slave user&amp;gt; &amp;lt;slave password&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edit &amp;lt;tt&amp;gt;ola-slave/info/admin&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;ola-slave/info/host&amp;lt;/tt&amp;gt; so your slave shows up correctly.&lt;br /&gt;
&lt;br /&gt;
Then start the slave:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/usr/local/bin/buildslave start ola-slave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can look at the logs by running&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 tail -f ola-slave/twistd.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At this point you can go to http://buildbot.openlighting.org/buildslaves and you should see your slave connected. It's probably worth asking someone to kick off a build at this point so we can check your slave is working.&lt;br /&gt;
&lt;br /&gt;
Finally, if everything looks good, configure your slave to launch on startup by editing the crontab for the ola-build-slave user (crontab -e). Add the following line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@reboot /usr/local/bin/buildslave start /home/ola-build-slave/ola-slave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Other Platforms ==&lt;br /&gt;
&lt;br /&gt;
=== Build Slave Installation ===&lt;br /&gt;
&lt;br /&gt;
The easiest way to get started is by using easy_install. You need to have the Python headers available, so on Debian / Ubuntu run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install python-dev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then install buildbot-slave:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
easy_install buildbot-slave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Slave Configuration ===&lt;br /&gt;
&lt;br /&gt;
Setup a new user:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -s &lt;br /&gt;
adduser ola-build-slave  # use a temp password for now&lt;br /&gt;
vi /etc/shadow  # delete the password entry&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setup the slave:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
su ola-build-slave&lt;br /&gt;
cd ~&lt;br /&gt;
buildslave create-slave ola-slave buildmaster.openlighting.org:9989 &amp;lt;slave user&amp;gt; &amp;lt;slave password&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edit &amp;lt;tt&amp;gt;ola-slave/info/admin&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;ola-slave/info/host&amp;lt;/tt&amp;gt; so your slave shows up correctly.&lt;br /&gt;
&lt;br /&gt;
Then start the slave:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
buildslave start ola-slave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can look at the logs by running&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 tail -f ola-slave/twistd.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At this point you can go to http://buildbot.openlighting.org/buildslaves and you should see your slave connected. It's probably worth asking someone to kick off a build at this point so we can check your slave is working.&lt;br /&gt;
&lt;br /&gt;
Finally, if everything looks good, configure your slave to launch on startup by editing the crontab for the ola-build-slave user (crontab -e). Add the following line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@reboot buildbot start /home/ola-build-slave/ola-slave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Enabling the C++ Lint Checker ==&lt;br /&gt;
&lt;br /&gt;
The lint checker enforces C++ style. We only run this once per change but it's good to have multiple lint-enabled hosts in case one is down.&lt;br /&gt;
&lt;br /&gt;
Download the cpplint checker and put it in /usr/local/bin&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
wget http://google-styleguide.googlecode.com/svn/trunk/cpplint/cpplint.py&lt;br /&gt;
sudo cp cpplint.py /usr/local/bin&lt;br /&gt;
sudo chmod a+x /usr/local/bin/cpplint.py&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finally let Simon or Peter know, or raise an issue, asking them to enable C++ lint for your slave.&lt;br /&gt;
&lt;br /&gt;
== Enabling the Javascript Lint Checker ==&lt;br /&gt;
&lt;br /&gt;
The lint checker enforces Javascript style. We only run this once per change but it's good to have multiple lint-enabled hosts in case one is down.&lt;br /&gt;
&lt;br /&gt;
Install the gjslint checker by following the relevant instructions here (you man need to install python-setuptools to get easy_install on Debian/Ubuntu):&lt;br /&gt;
https://developers.google.com/closure/utilities/docs/linter_howto&lt;br /&gt;
&lt;br /&gt;
Finally let Simon or Peter know, or raise an issue, asking them to enable Javascript lint for your slave.&lt;br /&gt;
&lt;br /&gt;
== Enabling the heap checker ==&lt;br /&gt;
&lt;br /&gt;
First we need libunwind:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install libunwind8-dev &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then download the latest gperftools from https://code.google.com/p/gperftools/downloads/list .&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
wget ....&lt;br /&gt;
tar -zxf gperftools-2.1.tar.gz&lt;br /&gt;
cd gperftools-2.1&lt;br /&gt;
./configure&lt;br /&gt;
make&lt;br /&gt;
sudo make install&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Finally let Simon or Peter know, or raise an issue, asking them to enable the heap checker for your slave.&lt;/div&gt;</summary>
		<author><name>Peternewman</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OLA_Buildbot&amp;diff=5803</id>
		<title>OLA Buildbot</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=OLA_Buildbot&amp;diff=5803"/>
				<updated>2015-03-14T16:11:25Z</updated>
		
		<summary type="html">&lt;p&gt;Peternewman: /* Prerequisites &amp;amp; Warning */ More info on passwords&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;We run a [http://buildbot.net/ Buildbot] instance for [[OLA]].&lt;br /&gt;
&lt;br /&gt;
*Web UI: http://buildbot.openlighting.org&lt;br /&gt;
*IRC: OLA-buildbot-ch in #openlighting-build on irc.freenode.org&lt;br /&gt;
&lt;br /&gt;
We're currently only building ola, but this could be extended to do other projects such as the QT GUI etc.&lt;br /&gt;
&lt;br /&gt;
== Master Configuration ==&lt;br /&gt;
The buildbot master configuration is stored in git at https://github.com/OpenLightingProject/buildbot . It needs checking out, and symlinking to replace master.cfg in the buildbot master's config directory.&lt;br /&gt;
&lt;br /&gt;
N.B. If the main open-lighting git repository (as opposed to buildbot config) is ever moved or changed, ensure the master's gitpoller-workdir folder is emptied out, or the poller won't work properly.&lt;br /&gt;
&lt;br /&gt;
= Adding a Slave =&lt;br /&gt;
&lt;br /&gt;
Buildbot documentation is at http://docs.buildbot.net/current/manual/installation.html#creating-a-buildslave .  The steps below should cover everything you need though.&lt;br /&gt;
&lt;br /&gt;
== Prerequisites &amp;amp; Warning ==&lt;br /&gt;
&lt;br /&gt;
Slaves execute code directly from the git repo. Even though submits to the git repo are locked down, this is still a possible attack vector for your machine. For this reason it's best to run build slaves within a virtual machine.  TODO: link to some VM solutions.&lt;br /&gt;
&lt;br /&gt;
At the very least you should run the buildslave as a separate user (not root!). Slave passwords aren't stored in the git repo for security, you'll need to get Simon or Peter to add new ones.&lt;br /&gt;
&lt;br /&gt;
The buildbot performs full build &amp;amp; test runs with all the options enabled. Please make sure you have all the necessary libraries installed on your system. You need to be able to complete a &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
autoconf -i&lt;br /&gt;
./configure --enable-e133 --enable-rdm-tests --enable-python-libs&lt;br /&gt;
make&lt;br /&gt;
make check&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
cycle before proceeding. If you have trouble ask on the mailing list.&lt;br /&gt;
&lt;br /&gt;
If you're running the lint check, you need ccplint.py in your path somewhere, see README.developer for info on how to obtain it.&lt;br /&gt;
&lt;br /&gt;
Buildbot slaves need to connect to  buildmaster.openlighting.org:9989 . Make sure your firewall allows this. No port forwarding for inbound connections is required.&lt;br /&gt;
&lt;br /&gt;
== Debian / Ubuntu Instructions ==&lt;br /&gt;
&lt;br /&gt;
This requires wheezy or later. For squeeze you can use the easy_install method below.&lt;br /&gt;
&lt;br /&gt;
=== Build Slave Installation ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo apt-get install buildbot-slave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Slave Configuration ===&lt;br /&gt;
&lt;br /&gt;
Create the slave (the package creates the buildbot user automatically for you):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 sudo -u buildbot buildslave create-slave --usepty=0 /var/lib/buildbot/slaves/ola buildmaster.openlighting.org:9989 &amp;lt;slave user&amp;gt; &amp;lt;slave password&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Update the slave info, edit the files in /var/lib/buildbot/slaves/ola/info to be relevant to you.&lt;br /&gt;
&lt;br /&gt;
Add config for the slave into /etc/default/buildslave (you'll need to increase the array id if you've got more than one slave on the same host), e.g.:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 SLAVE_ENABLED[1]=1                    # 1-enabled, 0-disabled&lt;br /&gt;
 SLAVE_NAME[1]=&amp;quot;ola&amp;quot;         # short name printed on start/stop&lt;br /&gt;
 SLAVE_USER[1]=&amp;quot;buildbot&amp;quot;              # user to run slave as&lt;br /&gt;
 SLAVE_BASEDIR[1]=&amp;quot;/var/lib/buildbot/slaves/ola&amp;quot;                   # basedir to slave (absolute path)&lt;br /&gt;
 SLAVE_OPTIONS[1]=&amp;quot;&amp;quot;                   # buildbot options&lt;br /&gt;
 SLAVE_PREFIXCMD[1]=&amp;quot;&amp;quot;                 # prefix command, i.e. nice, linux32, dchroot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Start the slave&lt;br /&gt;
 sudo /etc/init.d/buildslave start&lt;br /&gt;
&lt;br /&gt;
Check the log if there are any issues, or confirm the slave is registered at http://buildbot.openlighting.org/buildslaves:&lt;br /&gt;
 tail -f /var/lib/buildbot/slaves/ola/twistd.log&lt;br /&gt;
&lt;br /&gt;
== FreeBSD Instructions ==&lt;br /&gt;
&lt;br /&gt;
This was tested on FreeBSD 10.&lt;br /&gt;
&lt;br /&gt;
=== Build Slave Installation ===&lt;br /&gt;
As root:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 pkg install buildbot-slave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Slave Configuration ===&lt;br /&gt;
&lt;br /&gt;
Setup a new user:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
su -&lt;br /&gt;
adduser&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Username: ola-build-slave&lt;br /&gt;
Use password-based authentication? No&lt;br /&gt;
&lt;br /&gt;
Setup the slave:&lt;br /&gt;
&lt;br /&gt;
Switch to the slave user, I did:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
su - #To root&lt;br /&gt;
su - ola-build-slave #To slave user&lt;br /&gt;
cd ~&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Export the variables needed for configure on FreeBSD:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export CPPFLAGS=&amp;quot;-I/usr/local/include/&amp;quot;&lt;br /&gt;
export LDFLAGS=&amp;quot;-L/usr/local/lib/&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setup the slave itself:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/usr/local/bin/buildslave create-slave ola-slave buildmaster.openlighting.org:9989 &amp;lt;slave user&amp;gt; &amp;lt;slave password&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edit &amp;lt;tt&amp;gt;ola-slave/info/admin&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;ola-slave/info/host&amp;lt;/tt&amp;gt; so your slave shows up correctly.&lt;br /&gt;
&lt;br /&gt;
Then start the slave:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/usr/local/bin/buildslave start ola-slave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can look at the logs by running&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 tail -f ola-slave/twistd.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At this point you can go to http://buildbot.openlighting.org/buildslaves and you should see your slave connected. It's probably worth asking someone to kick off a build at this point so we can check your slave is working.&lt;br /&gt;
&lt;br /&gt;
Finally, if everything looks good, configure your slave to launch on startup by editing the crontab for the ola-build-slave user (crontab -e). Add the following line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@reboot /usr/local/bin/buildslave start /home/ola-build-slave/ola-slave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== NetBSD Instructions ==&lt;br /&gt;
&lt;br /&gt;
This was tested on NetBSD 6.&lt;br /&gt;
&lt;br /&gt;
=== Build Slave Installation ===&lt;br /&gt;
As root:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 pkgin install py27-buildbot-slave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Slave Configuration ===&lt;br /&gt;
&lt;br /&gt;
Setup a new user:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
su -&lt;br /&gt;
useradd -m ola-build-slave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Use password-based authentication? No&lt;br /&gt;
&lt;br /&gt;
Setup the slave:&lt;br /&gt;
&lt;br /&gt;
Switch to the slave user:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
su - ola-build-slave&lt;br /&gt;
cd ~&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Export the variables needed for git and configure on NetBSD (add these to the .shrc or equivalent for next time):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export CPPFLAGS=&amp;quot;-I/usr/pkg/include/&amp;quot;&lt;br /&gt;
export LDFLAGS=&amp;quot;-L/usr/pkg/lib/&amp;quot;&lt;br /&gt;
export GIT_SSL_NO_VERIFY=true&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setup the slave itself:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/usr/pkg/bin/buildslave create-slave ola-slave buildmaster.openlighting.org:9989 &amp;lt;slave user&amp;gt; &amp;lt;slave password&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edit &amp;lt;tt&amp;gt;ola-slave/info/admin&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;ola-slave/info/host&amp;lt;/tt&amp;gt; so your slave shows up correctly.&lt;br /&gt;
&lt;br /&gt;
Then start the slave:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/usr/pkg/bin/buildslave start ola-slave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can look at the logs by running&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 tail -f ola-slave/twistd.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At this point you can go to http://buildbot.openlighting.org/buildslaves and you should see your slave connected. It's probably worth asking someone to kick off a build at this point so we can check your slave is working.&lt;br /&gt;
&lt;br /&gt;
Finally, if everything looks good, configure your slave to launch on startup by editing the crontab for the ola-build-slave user (crontab -e). Add the following line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@reboot /usr/pkg/bin/buildslave start /home/ola-build-slave/ola-slave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== OpenBSD Instructions ==&lt;br /&gt;
&lt;br /&gt;
This was tested on OpenBSD 5.4.&lt;br /&gt;
&lt;br /&gt;
=== Build Slave Installation ===&lt;br /&gt;
As root:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pkg_add py-buildslave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Slave Configuration ===&lt;br /&gt;
&lt;br /&gt;
Setup a new user:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
su -&lt;br /&gt;
useradd -m ola-build-slave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setup the slave:&lt;br /&gt;
&lt;br /&gt;
Switch to the slave user:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
su - ola-build-slave&lt;br /&gt;
cd ~&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Export the variables needed for autoconf and configure on OpenBSD (add these to the .profile or equivalent for next time):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
export AUTOCONF_VERSION=2.69&lt;br /&gt;
export AUTOMAKE_VERSION=1.13&lt;br /&gt;
export CPPFLAGS=&amp;quot;-I/usr/local/include/&amp;quot;&lt;br /&gt;
export LDFLAGS=&amp;quot;-L/usr/local/lib/&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setup the slave itself:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/usr/local/bin/buildslave create-slave ola-slave buildmaster.openlighting.org:9989 &amp;lt;slave user&amp;gt; &amp;lt;slave password&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edit &amp;lt;tt&amp;gt;ola-slave/info/admin&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;ola-slave/info/host&amp;lt;/tt&amp;gt; so your slave shows up correctly.&lt;br /&gt;
&lt;br /&gt;
Then start the slave:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/usr/local/bin/buildslave start ola-slave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can look at the logs by running&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 tail -f ola-slave/twistd.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At this point you can go to http://buildbot.openlighting.org/buildslaves and you should see your slave connected. It's probably worth asking someone to kick off a build at this point so we can check your slave is working.&lt;br /&gt;
&lt;br /&gt;
Finally, if everything looks good, configure your slave to launch on startup by editing the crontab for the ola-build-slave user (crontab -e). Add the following line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@reboot /usr/local/bin/buildslave start /home/ola-build-slave/ola-slave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Other Platforms ==&lt;br /&gt;
&lt;br /&gt;
=== Build Slave Installation ===&lt;br /&gt;
&lt;br /&gt;
The easiest way to get started is by using easy_install. You need to have the Python headers available, so on Debian / Ubuntu run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install python-dev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then install buildbot-slave:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
easy_install buildbot-slave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Slave Configuration ===&lt;br /&gt;
&lt;br /&gt;
Setup a new user:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo -s &lt;br /&gt;
adduser ola-build-slave  # use a temp password for now&lt;br /&gt;
vi /etc/shadow  # delete the password entry&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Setup the slave:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
su ola-build-slave&lt;br /&gt;
cd ~&lt;br /&gt;
buildslave create-slave ola-slave buildmaster.openlighting.org:9989 &amp;lt;slave user&amp;gt; &amp;lt;slave password&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edit &amp;lt;tt&amp;gt;ola-slave/info/admin&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;ola-slave/info/host&amp;lt;/tt&amp;gt; so your slave shows up correctly.&lt;br /&gt;
&lt;br /&gt;
Then start the slave:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
buildslave start ola-slave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can look at the logs by running&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 tail -f ola-slave/twistd.log&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At this point you can go to http://buildbot.openlighting.org/buildslaves and you should see your slave connected. It's probably worth asking someone to kick off a build at this point so we can check your slave is working.&lt;br /&gt;
&lt;br /&gt;
Finally, if everything looks good, configure your slave to launch on startup by editing the crontab for the ola-build-slave user (crontab -e). Add the following line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
@reboot buildbot start /home/ola-build-slave/ola-slave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Enabling the C++ Lint Checker ==&lt;br /&gt;
&lt;br /&gt;
The lint checker enforces C++ style. We only run this once per change but it's good to have multiple lint-enabled hosts in case one is down.&lt;br /&gt;
&lt;br /&gt;
Download the cpplint checker and put it in /usr/local/bin&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
wget http://google-styleguide.googlecode.com/svn/trunk/cpplint/cpplint.py&lt;br /&gt;
sudo cp cpplint.py /usr/local/bin&lt;br /&gt;
sudo chmod a+x /usr/local/bin/cpplint.py&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finally let Simon or Peter know, or raise an issue, asking them to enable C++ lint for your slave.&lt;br /&gt;
&lt;br /&gt;
== Enabling the Javascript Lint Checker ==&lt;br /&gt;
&lt;br /&gt;
The lint checker enforces Javascript style. We only run this once per change but it's good to have multiple lint-enabled hosts in case one is down.&lt;br /&gt;
&lt;br /&gt;
Install the gjslint checker by following the relevant instructions here (you man need to install python-setuptools to get easy_install on Debian/Ubuntu):&lt;br /&gt;
https://developers.google.com/closure/utilities/docs/linter_howto&lt;br /&gt;
&lt;br /&gt;
Finally let Simon or Peter know, or raise an issue, asking them to enable Javascript lint for your slave.&lt;br /&gt;
&lt;br /&gt;
== Enabling the heap checker ==&lt;br /&gt;
&lt;br /&gt;
First we need libunwind:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install libunwind8-dev &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then download the latest gperftools from https://code.google.com/p/gperftools/downloads/list .&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
wget ....&lt;br /&gt;
tar -zxf gperftools-2.1.tar.gz&lt;br /&gt;
cd gperftools-2.1&lt;br /&gt;
./configure&lt;br /&gt;
make&lt;br /&gt;
sudo make install&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Finally let Simon or Peter know, or raise an issue, asking them to enable the heap checker for your slave.&lt;/div&gt;</summary>
		<author><name>Peternewman</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OLA_Device_Specific_Configuration&amp;diff=5802</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=5802"/>
				<updated>2015-03-12T11:35:31Z</updated>
		
		<summary type="html">&lt;p&gt;Peternewman: /* Linux */ Detail how to make pins writable&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;
==Streaming ACN / E1.31==&lt;br /&gt;
&lt;br /&gt;
===All Platforms===&lt;br /&gt;
Some older networking gear only supports an old revision of E1.31 Called Revision 20. To use this older version you need to change a line in ola-e131.conf. Change this line&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
revision = 0.46&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to this line&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
revision = 0.2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Only do this if the older gear cannot accept the standardized version of E1.31.&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
If you are planning to receive large amounts of multicast traffic 20+, you will need to adjust the maximum amount of igmp memberships.&lt;br /&gt;
Use the following command:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo &amp;lt;number_of_memberships&amp;gt; | sudo tee /proc/sys/net/ipv4/igmp_max_memberships&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example this command sets the maximum number of igmp memberships to 256:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo 256 | sudo tee /proc/sys/net/ipv4/igmp_max_memberships&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Eurolite USB DMX512 PRO==&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
Sometime the cdc_acm kernel module claims the device. If this happens you'll see errors like &amp;quot;Cannot claim device&amp;quot; and/or &amp;quot;another process has device opened for exclusive access&amp;quot;. To avoid this you can remove the module (rmmod). A udev rule like what is used for the Anyma device should also work.&lt;br /&gt;
&lt;br /&gt;
You may also need the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SUBSYSTEMS==&amp;quot;usb&amp;quot;, ATTRS{idVendor}==&amp;quot;04d8&amp;quot;,ATTRS{idProduct}==&amp;quot;0xfa63&amp;quot;, MODE=&amp;quot;0660&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Mac===&lt;br /&gt;
&lt;br /&gt;
Install the [http://code.google.com/p/open-lighting/downloads/detail?name=euroliteusbshield.dmg&amp;amp;can=2&amp;amp;q=#makechanges KEXT].&lt;br /&gt;
&lt;br /&gt;
== General Purpose I/O ==&lt;br /&gt;
&lt;br /&gt;
This has only been tested on a Raspberry Pi device. You can find information about the GPIO features on a Pi at [http://elinux.org/RPi_Low-level_peripherals elinux.org]&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
You'll need to export the GPIO pins. For example, to use pin 23, as root run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ echo 23 &amp;gt; /sys/class/gpio/export&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You'll also need to ensure that the user olad runs as has permission to change the level of the Pins. Each of the following files should be writeable:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/sys/class/gpio/gpio23/direction&lt;br /&gt;
/sys/class/gpio/gpio23/value&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You could for example do this by running the following as root (assuming olad is in the plugdev group, which you can check with &amp;quot;groups olad&amp;quot;)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
chgrp plugdev /sys/class/gpio/gpio23/direction&lt;br /&gt;
chmod g+w /sys/class/gpio/gpio23/direction&lt;br /&gt;
chgrp plugdev /sys/class/gpio/gpio23/value&lt;br /&gt;
chmod g+w /sys/class/gpio/gpio23/value&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== OSC ==&lt;br /&gt;
&lt;br /&gt;
The message types are described in the  [http://opensoundcontrol.org/spec-1_0 OSC Spec] .&lt;br /&gt;
&lt;br /&gt;
=== Receiving DMX ===&lt;br /&gt;
&lt;br /&gt;
The OSC plugin accepts a number of message formats:&lt;br /&gt;
&lt;br /&gt;
{| border=1 cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
! Path !! OSC Message Type !! Data !! Comments &lt;br /&gt;
|-&lt;br /&gt;
|| /path || 'b' || Blob of length 1 to 512. || The most efficient way of sending DMX data over OSC.&lt;br /&gt;
|-&lt;br /&gt;
|| /path/N || 'i' || Slot value from 0 to 255 || Update a single slot. N is the slot number from 1 - 512. &lt;br /&gt;
|-&lt;br /&gt;
|| /path/N || 'f' || Slot value from 0.0 to 1.0 || Update a single slot. N is the slot number from 1 - 512. &lt;br /&gt;
|-&lt;br /&gt;
|| /path || 'ii' || Slot number from 0 to 511, slot value from 0 to 255 || Update a single slot.&lt;br /&gt;
|-&lt;br /&gt;
|| /path || 'if' || Slot number from 0 to 511, slot value from 0.0 to 1.0 || Update a single slot.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Sending DMX ===&lt;br /&gt;
&lt;br /&gt;
The following formats are available for sending data:&lt;br /&gt;
&lt;br /&gt;
{| border=1 cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
! Config Option !! Path !! OSC Message Type !! Data !! Comments &lt;br /&gt;
|-&lt;br /&gt;
|| blob || /path || 'b' || Blob of length 1 to 512. || The most efficient way of sending DMX data over OSC.&lt;br /&gt;
|-&lt;br /&gt;
|| float_array || /path || N * 'f' || Slot values from 0.0 to 1.0 ||  Not quite as efficient as the blob type.&lt;br /&gt;
|-&lt;br /&gt;
|| int_array || /path || N * 'i' || Slot values from 0 to 255 ||  Not quite as efficient as the blob type.&lt;br /&gt;
|-&lt;br /&gt;
|| individual_float || /path/N || 'f' || Slot value from 0.0 to 1.0 || N is the slot number from 1 - 512.  Results in a lot of messages being sent, avoid using this. &lt;br /&gt;
|-&lt;br /&gt;
|| individual_int || /path/N || 'i' || Slot value from 0 to 255 || N is the slot number from 1 - 512. Results in a lot of messages being sent, avoid using this. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Open DMX USB / FTDI RS485 ==&lt;br /&gt;
&lt;br /&gt;
There are two options, the 'Open DMX' plugin that requires the kernel module and the native FTDI driver.&lt;br /&gt;
&lt;br /&gt;
The Open DMX Plugin requires the dmx_usb kernel module, which means it's Linux only. The FTDI driver can be used on either Mac or Linux.&lt;br /&gt;
&lt;br /&gt;
=== Linux, Open DMX Kernel Module ===&lt;br /&gt;
&lt;br /&gt;
Make sure the opendmx plugin is enabled.&lt;br /&gt;
Make sure the dmx_usb kernel module is loaded. &lt;br /&gt;
&lt;br /&gt;
===Mac FTDI ===&lt;br /&gt;
&lt;br /&gt;
You must have libftdi-dev installed before you run ./configure.  Otherwise the FTDI DMX plugin won't show up in the list of OLA plugins. &lt;br /&gt;
&lt;br /&gt;
Enable the FTDI driver (ola-ftdidmx ) and disable the USB Serial and Open DMX drivers (ola-usbserial.conf &amp;amp;  ola-opendmx.conf) &lt;br /&gt;
&lt;br /&gt;
=== Linux, FTDI ===&lt;br /&gt;
&lt;br /&gt;
Same as Mac, but you also need to make sure that you add the following udev rule:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# udev rules for ftdi devices&lt;br /&gt;
SUBSYSTEM==&amp;quot;usb|usb_device&amp;quot;, ACTION==&amp;quot;add&amp;quot;, ATTRS{idVendor}==&amp;quot;0403&amp;quot;, ATTRS{idProduct}==&amp;quot;6001&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Scanlime Fadecandy==&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 Scanlime Fadecandy device&lt;br /&gt;
SUBSYSTEM==&amp;quot;usb|usb_device&amp;quot;, ACTION==&amp;quot;add&amp;quot;, ATTRS{idVendor}==&amp;quot;1d50&amp;quot;, ATTRS{idProduct}==&amp;quot;607a&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SPI ==&lt;br /&gt;
&lt;br /&gt;
This plugin is designed for the Raspberry Pi. It may work on other hardware, but that's up to you. For instructions on the hardware side of things see [[OLA LED Pixels]].&lt;br /&gt;
&lt;br /&gt;
Enable the spi-bcm2708 module, by editing /etc/modprobe.d/raspi-blacklist.conf and commenting out the &amp;quot;blacklist spi-bcm2708&amp;quot; line. The file should look something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# blacklist spi and i2c by default (many users don't need them)&lt;br /&gt;
&lt;br /&gt;
#blacklist spi-bcm2708&lt;br /&gt;
blacklist i2c-bcm2708&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To allow non-root access, add the following to /etc/udev/rules.d/99-spi.rules&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SUBSYSTEM==&amp;quot;spidev&amp;quot;, MODE=&amp;quot;0666&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;
==UART native DMX==&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
====Raspberry Pi====&lt;br /&gt;
&lt;br /&gt;
First stop anything else using the serial port; either use raspi-config (Advanced Options, Serial) or follow the instructions here:&lt;br /&gt;
&lt;br /&gt;
[http://elinux.org/RPi_Serial_Connection#Preventing_Linux_using_the_serial_port http://elinux.org/RPi_Serial_Connection#Preventing_Linux_using_the_serial_port]&lt;br /&gt;
&lt;br /&gt;
To make this work, you will also need to raise the Pi's UART clock, because the default one maxes out at 115kbaud. So you will need to add&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
init_uart_clock=16000000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to the /boot/config.txt file on the system. This won't affect any other user of the serial port provided you have a recent kernel.&lt;br /&gt;
&lt;br /&gt;
Another useful link is [http://fw.hardijzer.nl/?p=138 http://fw.hardijzer.nl/?p=138].&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 for  [http://downloads.openlighting.org/Velleman%20kext.dmg OS X 10.9 and above] or  [http://code.google.com/p/open-lighting/downloads/detail?name=libdmxusbshield.dmg OS 10.8 and below]. 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;br /&gt;
&lt;br /&gt;
==KarateLight, KarateDMX==&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/81-karate.rules&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# udev rules file for the karate-device&lt;br /&gt;
KERNEL==&amp;quot;ttyACM?&amp;quot;, ATTRS{product}==&amp;quot;DMX2USB simple&amp;quot;, SYMLINK+=&amp;quot;kldmx0&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then make sure the user olad runs as is a member of 'dialout' which is the default group owning ttyACM?.&lt;/div&gt;</summary>
		<author><name>Peternewman</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=Building_OLA&amp;diff=5800</id>
		<title>Building OLA</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=Building_OLA&amp;diff=5800"/>
				<updated>2015-02-27T01:18:19Z</updated>
		
		<summary type="html">&lt;p&gt;Peternewman: Link to website&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Please see [https://www.openlighting.org/ola/getting-started/downloads/ https://www.openlighting.org/ola/getting-started/downloads/]&lt;/div&gt;</summary>
		<author><name>Peternewman</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OLA_Device_Specific_Configuration&amp;diff=5798</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=5798"/>
				<updated>2015-02-06T19:44:30Z</updated>
		
		<summary type="html">&lt;p&gt;Peternewman: /* Scanlime Fadecandy */&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;
==Streaming ACN / E1.31==&lt;br /&gt;
&lt;br /&gt;
===All Platforms===&lt;br /&gt;
Some older networking gear only supports an old revision of E1.31 Called Revision 20. To use this older version you need to change a line in ola-e131.conf. Change this line&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
revision = 0.46&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to this line&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
revision = 0.2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Only do this if the older gear cannot accept the standardized version of E1.31.&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
If you are planning to receive large amounts of multicast traffic 20+, you will need to adjust the maximum amount of igmp memberships.&lt;br /&gt;
Use the following command:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo &amp;lt;number_of_memberships&amp;gt; | sudo tee /proc/sys/net/ipv4/igmp_max_memberships&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For example this command sets the maximum number of igmp memberships to 256:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo 256 | sudo tee /proc/sys/net/ipv4/igmp_max_memberships&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Eurolite USB DMX512 PRO==&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
Sometime the cdc_acm kernel module claims the device. If this happens you'll see errors like &amp;quot;Cannot claim device&amp;quot; and/or &amp;quot;another process has device opened for exclusive access&amp;quot;. To avoid this you can remove the module (rmmod). A udev rule like what is used for the Anyma device should also work.&lt;br /&gt;
&lt;br /&gt;
You may also need the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SUBSYSTEMS==&amp;quot;usb&amp;quot;, ATTRS{idVendor}==&amp;quot;04d8&amp;quot;,ATTRS{idProduct}==&amp;quot;0xfa63&amp;quot;, MODE=&amp;quot;0660&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Mac===&lt;br /&gt;
&lt;br /&gt;
Install the [http://code.google.com/p/open-lighting/downloads/detail?name=euroliteusbshield.dmg&amp;amp;can=2&amp;amp;q=#makechanges KEXT].&lt;br /&gt;
&lt;br /&gt;
== General Purpose I/O ==&lt;br /&gt;
&lt;br /&gt;
This has only been tested on a Raspberry Pi device. You can find information about the GPIO features on a Pi at [http://elinux.org/RPi_Low-level_peripherals elinux.org]&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
You'll need to export the GPIO pins. For example, to use pin 23, as root run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ echo 23 &amp;gt; /sys/class/gpio/export&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You'll also need to ensure that the user olad runs as has permission to change the level of the Pins. Each of the following files should be writeable:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/sys/class/gpio/gpio23/direction&lt;br /&gt;
/sys/class/gpio/gpio23/value&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== OSC ==&lt;br /&gt;
&lt;br /&gt;
The message types are described in the  [http://opensoundcontrol.org/spec-1_0 OSC Spec] .&lt;br /&gt;
&lt;br /&gt;
=== Receiving DMX ===&lt;br /&gt;
&lt;br /&gt;
The OSC plugin accepts a number of message formats:&lt;br /&gt;
&lt;br /&gt;
{| border=1 cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
! Path !! OSC Message Type !! Data !! Comments &lt;br /&gt;
|-&lt;br /&gt;
|| /path || 'b' || Blob of length 1 to 512. || The most efficient way of sending DMX data over OSC.&lt;br /&gt;
|-&lt;br /&gt;
|| /path/N || 'i' || Slot value from 0 to 255 || Update a single slot. N is the slot number from 1 - 512. &lt;br /&gt;
|-&lt;br /&gt;
|| /path/N || 'f' || Slot value from 0.0 to 1.0 || Update a single slot. N is the slot number from 1 - 512. &lt;br /&gt;
|-&lt;br /&gt;
|| /path || 'ii' || Slot number from 0 to 511, slot value from 0 to 255 || Update a single slot.&lt;br /&gt;
|-&lt;br /&gt;
|| /path || 'if' || Slot number from 0 to 511, slot value from 0.0 to 1.0 || Update a single slot.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Sending DMX ===&lt;br /&gt;
&lt;br /&gt;
The following formats are available for sending data:&lt;br /&gt;
&lt;br /&gt;
{| border=1 cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
! Config Option !! Path !! OSC Message Type !! Data !! Comments &lt;br /&gt;
|-&lt;br /&gt;
|| blob || /path || 'b' || Blob of length 1 to 512. || The most efficient way of sending DMX data over OSC.&lt;br /&gt;
|-&lt;br /&gt;
|| float_array || /path || N * 'f' || Slot values from 0.0 to 1.0 ||  Not quite as efficient as the blob type.&lt;br /&gt;
|-&lt;br /&gt;
|| int_array || /path || N * 'i' || Slot values from 0 to 255 ||  Not quite as efficient as the blob type.&lt;br /&gt;
|-&lt;br /&gt;
|| individual_float || /path/N || 'f' || Slot value from 0.0 to 1.0 || N is the slot number from 1 - 512.  Results in a lot of messages being sent, avoid using this. &lt;br /&gt;
|-&lt;br /&gt;
|| individual_int || /path/N || 'i' || Slot value from 0 to 255 || N is the slot number from 1 - 512. Results in a lot of messages being sent, avoid using this. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Open DMX USB / FTDI RS485 ==&lt;br /&gt;
&lt;br /&gt;
There are two options, the 'Open DMX' plugin that requires the kernel module and the native FTDI driver.&lt;br /&gt;
&lt;br /&gt;
The Open DMX Plugin requires the dmx_usb kernel module, which means it's Linux only. The FTDI driver can be used on either Mac or Linux.&lt;br /&gt;
&lt;br /&gt;
=== Linux, Open DMX Kernel Module ===&lt;br /&gt;
&lt;br /&gt;
Make sure the opendmx plugin is enabled.&lt;br /&gt;
Make sure the dmx_usb kernel module is loaded. &lt;br /&gt;
&lt;br /&gt;
===Mac FTDI ===&lt;br /&gt;
&lt;br /&gt;
You must have libftdi-dev installed before you run ./configure.  Otherwise the FTDI DMX plugin won't show up in the list of OLA plugins. &lt;br /&gt;
&lt;br /&gt;
Enable the FTDI driver (ola-ftdidmx ) and disable the USB Serial and Open DMX drivers (ola-usbserial.conf &amp;amp;  ola-opendmx.conf) &lt;br /&gt;
&lt;br /&gt;
=== Linux, FTDI ===&lt;br /&gt;
&lt;br /&gt;
Same as Mac, but you also need to make sure that you add the following udev rule:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# udev rules for ftdi devices&lt;br /&gt;
SUBSYSTEM==&amp;quot;usb|usb_device&amp;quot;, ACTION==&amp;quot;add&amp;quot;, ATTRS{idVendor}==&amp;quot;0403&amp;quot;, ATTRS{idProduct}==&amp;quot;6001&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Scanlime Fadecandy==&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 Scanlime Fadecandy device&lt;br /&gt;
SUBSYSTEM==&amp;quot;usb|usb_device&amp;quot;, ACTION==&amp;quot;add&amp;quot;, ATTRS{idVendor}==&amp;quot;1d50&amp;quot;, ATTRS{idProduct}==&amp;quot;607a&amp;quot;, GROUP=&amp;quot;plugdev&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== SPI ==&lt;br /&gt;
&lt;br /&gt;
This plugin is designed for the Raspberry Pi. It may work on other hardware, but that's up to you. For instructions on the hardware side of things see [[OLA LED Pixels]].&lt;br /&gt;
&lt;br /&gt;
Enable the spi-bcm2708 module, by editing /etc/modprobe.d/raspi-blacklist.conf and commenting out the &amp;quot;blacklist spi-bcm2708&amp;quot; line. The file should look something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# blacklist spi and i2c by default (many users don't need them)&lt;br /&gt;
&lt;br /&gt;
#blacklist spi-bcm2708&lt;br /&gt;
blacklist i2c-bcm2708&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To allow non-root access, add the following to /etc/udev/rules.d/99-spi.rules&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SUBSYSTEM==&amp;quot;spidev&amp;quot;, MODE=&amp;quot;0666&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;
==UART native DMX==&lt;br /&gt;
&lt;br /&gt;
===Linux===&lt;br /&gt;
&lt;br /&gt;
====Raspberry Pi====&lt;br /&gt;
&lt;br /&gt;
First stop anything else using the serial port; either use raspi-config (Advanced Options, Serial) or follow the instructions here:&lt;br /&gt;
&lt;br /&gt;
[http://elinux.org/RPi_Serial_Connection#Preventing_Linux_using_the_serial_port http://elinux.org/RPi_Serial_Connection#Preventing_Linux_using_the_serial_port]&lt;br /&gt;
&lt;br /&gt;
To make this work, you will also need to raise the Pi's UART clock, because the default one maxes out at 115kbaud. So you will need to add&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
init_uart_clock=16000000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to the /boot/config.txt file on the system. This won't affect any other user of the serial port provided you have a recent kernel.&lt;br /&gt;
&lt;br /&gt;
Another useful link is [http://fw.hardijzer.nl/?p=138 http://fw.hardijzer.nl/?p=138].&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 for  [http://downloads.openlighting.org/Velleman%20kext.dmg OS X 10.9 and above] or  [http://code.google.com/p/open-lighting/downloads/detail?name=libdmxusbshield.dmg OS 10.8 and below]. 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;br /&gt;
&lt;br /&gt;
==KarateLight, KarateDMX==&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/81-karate.rules&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# udev rules file for the karate-device&lt;br /&gt;
KERNEL==&amp;quot;ttyACM?&amp;quot;, ATTRS{product}==&amp;quot;DMX2USB simple&amp;quot;, SYMLINK+=&amp;quot;kldmx0&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then make sure the user olad runs as is a member of 'dialout' which is the default group owning ttyACM?.&lt;/div&gt;</summary>
		<author><name>Peternewman</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OLP_SOC_Ideas_Page&amp;diff=5796</id>
		<title>OLP SOC Ideas Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=OLP_SOC_Ideas_Page&amp;diff=5796"/>
				<updated>2015-01-11T23:20:40Z</updated>
		
		<summary type="html">&lt;p&gt;Peternewman: /* Port to Windows */ Update the status of this idea&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page lists some ideas for [http://www.google-melange.com/gsoc/homepage/google/gsoc2014 Google Summer of Code 2014] projects for the [[Open Lighting Project]]. You can use these ideas as a basis for your application, or come up with something different. Please see the Google SOC site for the 2014 timeline. If you would like to discuss any of these ideas, or are thinking of applying to work with us, please send an email to the [https://groups.google.com/forum/?fromgroups#!forum/open-lighting Open Lighting List] introducing yourself.&lt;br /&gt;
&lt;br /&gt;
Please also read our [https://www.openlighting.org/openlightingproject/get-involved/gsoc/gsoc-information/ GSOC Application Guide].&lt;br /&gt;
&lt;br /&gt;
== Adding support for more RDM PIDS to the Web UI ==&lt;br /&gt;
&lt;br /&gt;
Our current WebUI lacks support for a lot of the really cool parameters and features that RDM is capable of. The main task of this project would to add support for RDM sub-devices and Ack Timer. &lt;br /&gt;
&lt;br /&gt;
This project would include:&lt;br /&gt;
* Adding support for RDM sub-devices in the UI and supporting code in the web server back-end &amp;lt;br/&amp;gt;&lt;br /&gt;
* Adding support for Ack Timer packets in the RDM flow &amp;lt;br/&amp;gt;&lt;br /&gt;
* Adding support for additional parameter ids or (PIDS).&lt;br /&gt;
'''Skills Required''': HTML, Javascript, C++ &amp;lt;br/&amp;gt;&lt;br /&gt;
'''Estimated Difficulty''': Medium&lt;br /&gt;
&lt;br /&gt;
== Raspberry Pi UI ==&lt;br /&gt;
&lt;br /&gt;
The Raspberry Pi is a great platform but lacks a good user interface. With the addition of a small touchscreen, a portable DMX/RDM debugger can be created.&lt;br /&gt;
&lt;br /&gt;
This project would include:&lt;br /&gt;
* Designing, writing and testing the new UI&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Skills Required''': Python ? &amp;lt;br/&amp;gt;&lt;br /&gt;
'''Estimated Difficulty''': Easy&lt;br /&gt;
&lt;br /&gt;
== RESTful API ==&lt;br /&gt;
&lt;br /&gt;
The current API that the website uses is a bit old and needs updated to allow full use of OLA's inner working in a general RESTful way. This would allow third parties to easily build new web based apps that could connect to RDM and DMX devices.&lt;br /&gt;
&lt;br /&gt;
This project would include:&lt;br /&gt;
* Writing and testing the new API&lt;br /&gt;
* Modifying our current Web app to use the new web api&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Skills Required''': C++, Javascript, HTML, JSON &amp;lt;br/&amp;gt;&lt;br /&gt;
'''Estimated Difficulty''': Easy&lt;br /&gt;
&lt;br /&gt;
== Web Based Configuration of Preferences ==&lt;br /&gt;
&lt;br /&gt;
User Preferences for [[OLA]] are stored in text files but the web UI provides no method for changing any preferences beyond port patchings. At the moment the user is required to stop the OLA Daemon, edit the text files and restart if settings are to be changed.  This project would involve building a generic preference store and exposing it through the web UI. Changing preferences on the fly is likely to expose bugs in some of the OLA plugins. These will need to be fixed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Skills Required''': C++, Javascript, HTML   &amp;lt;br/&amp;gt;&lt;br /&gt;
'''Estimated Difficulty''': Easy&lt;br /&gt;
&lt;br /&gt;
== Asynchronous Web Notification of RDM Messages == &lt;br /&gt;
&lt;br /&gt;
Thanks to sites like GMail and Facebook, users have come to expect asynchronous notification of events in their web browser. [[RDM]] enabled lighting devices can generate events such as ''Over Temperature'' and ''Lamp Faulty'' so it would be nice to alert the users to this. This project would involve work with two Open Source efforts. The student would need to work with [http://www.gnu.org/software/libmicrohttpd/ libmicrohttpd] to add [http://en.wikipedia.org/wiki/WebSocket WebSocket] support (see the [http://lists.gnu.org/archive/html/libmicrohttpd/2012-01/msg00015.html email thread]).&lt;br /&gt;
&lt;br /&gt;
The second step would involve using WebSockets to deliver events to the browser, and building a UI to notify the user. The [[OLA]] UI is built with [http://code.google.com/closure/ Google Closure].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Skills Required''': C++, Network Programming, Javascript, HTML, Google Closure&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Estimated Difficulty''': Medium&lt;br /&gt;
&lt;br /&gt;
==Port to Android==&lt;br /&gt;
&lt;br /&gt;
Android is an obvious target for [[OLA]]. Not only does it make perfect sense to use phones &amp;amp; tablets as lighting control interfaces but the Android platform could be used to build embedded lighting control devices. A small amount of this has been done, see [[OLA on Android]]. [[issue:222|Bug #222]] covers this work.&lt;br /&gt;
&lt;br /&gt;
This project would include:&lt;br /&gt;
* Building OLA as a Android Application&lt;br /&gt;
* Adding a [[issue:16|Java client]] or wrapping the C++ client with a Java library.&lt;br /&gt;
* Writing a frontend in Java to demonstrate the capabilities of OLA. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Skills Required''': C++, Java, Android &amp;lt;br/&amp;gt;&lt;br /&gt;
'''Estimated Difficulty''': Hard&lt;br /&gt;
&lt;br /&gt;
==Continue Porting to Windows ==&lt;br /&gt;
&lt;br /&gt;
This is the most requested 'feature' and would significantly expand the reach of the project especially as we approach v1.0. The current supported method of running OLA on Windows is using VMWare  ([[OLA_on_Windows_with_VMWare|instructions]]). This is sub optimal, since it requires the use of non-free software, is challenging for users without Unix command line experience, and doesn't allow Windows applications to communicate with OLA.  Work on a Windows port commenced in mid 2011 (see [[Building_OLA_for_Windows|these notes]]), but was postponed due to lack of resources.&lt;br /&gt;
&lt;br /&gt;
Lukase has got the core and network functionality working on Windows as part of GSOC 2014, but support for hardware interfaces is still missing, as well as one or two network plugins.&lt;br /&gt;
&lt;br /&gt;
A Windows port would enable lighting controller applications like [[QLC]] and [[D::Light]] to move to OLA entirely, and not have to maintain their own plugins.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Skills Required''': C++, Windows Hardware Programming&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Estimated Difficulty''': Hard&lt;br /&gt;
&lt;br /&gt;
== Patcher v2 ==&lt;br /&gt;
&lt;br /&gt;
Patcher v2 is one of the next big projects for [[OLA]] it requires a rewrite of our current daemon to allow users to patch a specific channel:universe to a different channel:universe. It would most likely not be entirely up to the student but would be a small team effort as this touches all major points of our system. This would also require a change in the web interface to possibly allow drag and drop of patching. Depending on the students knowledge they may help with the web interface, web backend or the OLA daemon.&lt;br /&gt;
&lt;br /&gt;
See [[issue:280|issue 280]] for some additional features and thoughts.&lt;br /&gt;
&lt;br /&gt;
'''Skills Required''': C++, Javascript, HTML   &amp;lt;br/&amp;gt;&lt;br /&gt;
'''Estimated Difficulty''': Hard&lt;/div&gt;</summary>
		<author><name>Peternewman</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OLP_SOC_Ideas_Page&amp;diff=5794</id>
		<title>OLP SOC Ideas Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=OLP_SOC_Ideas_Page&amp;diff=5794"/>
				<updated>2015-01-11T12:57:32Z</updated>
		
		<summary type="html">&lt;p&gt;Peternewman: /* Patcher v2 */ Switch to Interwiki links&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page lists some ideas for [http://www.google-melange.com/gsoc/homepage/google/gsoc2014 Google Summer of Code 2014] projects for the [[Open Lighting Project]]. You can use these ideas as a basis for your application, or come up with something different. Please see the Google SOC site for the 2014 timeline. If you would like to discuss any of these ideas, or are thinking of applying to work with us, please send an email to the [https://groups.google.com/forum/?fromgroups#!forum/open-lighting Open Lighting List] introducing yourself.&lt;br /&gt;
&lt;br /&gt;
Before asking questions on the list, please read ESR's  [http://www.catb.org/esr/faqs/smart-questions.html How To Ask Questions The Smart Way].  Remember, when deciding who to select, we're looking for students who are self-starters and won't start asking questions the first time they run into something they don't understand. A quick Google search goes a long way.&lt;br /&gt;
&lt;br /&gt;
If you'd like to apply, please complete the OLA [[GSOC Challenge]]. This is a prerequisite for being selected. We suggest you start it at least a week before, in case you need to ask questions.&lt;br /&gt;
&lt;br /&gt;
== Adding support for more RDM PIDS to the Web UI ==&lt;br /&gt;
&lt;br /&gt;
Our current WebUI lacks support for a lot of the really cool parameters and features that RDM is capable of. The main task of this project would to add support for RDM sub-devices and Ack Timer. &lt;br /&gt;
&lt;br /&gt;
This project would include:&lt;br /&gt;
* Adding support for RDM sub-devices in the UI and supporting code in the web server back-end &amp;lt;br/&amp;gt;&lt;br /&gt;
* Adding support for Ack Timer packets in the RDM flow &amp;lt;br/&amp;gt;&lt;br /&gt;
* Adding support for additional parameter ids or (PIDS).&lt;br /&gt;
'''Skills Required''': HTML, Javascript, C++ &amp;lt;br/&amp;gt;&lt;br /&gt;
'''Estimated Difficulty''': Medium&lt;br /&gt;
&lt;br /&gt;
== Raspberry Pi UI ==&lt;br /&gt;
&lt;br /&gt;
The Raspberry Pi is a great platform but lacks a good user interface. With the addition of a small touchscreen, a portable DMX/RDM debugger can be created.&lt;br /&gt;
&lt;br /&gt;
This project would include:&lt;br /&gt;
* Designing, writing and testing the new UI&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Skills Required''': Python ? &amp;lt;br/&amp;gt;&lt;br /&gt;
'''Estimated Difficulty''': Easy&lt;br /&gt;
&lt;br /&gt;
== RESTful API ==&lt;br /&gt;
&lt;br /&gt;
The current API that the website uses is a bit old and needs updated to allow full use of OLA's inner working in a general RESTful way. This would allow third parties to easily build new web based apps that could connect to RDM and DMX devices.&lt;br /&gt;
&lt;br /&gt;
This project would include:&lt;br /&gt;
* Writing and testing the new API&lt;br /&gt;
* Modifying our current Web app to use the new web api&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Skills Required''': C++, Javascript, HTML, JSON &amp;lt;br/&amp;gt;&lt;br /&gt;
'''Estimated Difficulty''': Easy&lt;br /&gt;
&lt;br /&gt;
== Web Based Configuration of Preferences ==&lt;br /&gt;
&lt;br /&gt;
User Preferences for [[OLA]] are stored in text files but the web UI provides no method for changing any preferences beyond port patchings. At the moment the user is required to stop the OLA Daemon, edit the text files and restart if settings are to be changed.  This project would involve building a generic preference store and exposing it through the web UI. Changing preferences on the fly is likely to expose bugs in some of the OLA plugins. These will need to be fixed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Skills Required''': C++, Javascript, HTML   &amp;lt;br/&amp;gt;&lt;br /&gt;
'''Estimated Difficulty''': Easy&lt;br /&gt;
&lt;br /&gt;
== Asynchronous Web Notification of RDM Messages == &lt;br /&gt;
&lt;br /&gt;
Thanks to sites like GMail and Facebook, users have come to expect asynchronous notification of events in their web browser. [[RDM]] enabled lighting devices can generate events such as ''Over Temperature'' and ''Lamp Faulty'' so it would be nice to alert the users to this. This project would involve work with two Open Source efforts. The student would need to work with [http://www.gnu.org/software/libmicrohttpd/ libmicrohttpd] to add [http://en.wikipedia.org/wiki/WebSocket WebSocket] support (see the [http://lists.gnu.org/archive/html/libmicrohttpd/2012-01/msg00015.html email thread]).&lt;br /&gt;
&lt;br /&gt;
The second step would involve using WebSockets to deliver events to the browser, and building a UI to notify the user. The [[OLA]] UI is built with [http://code.google.com/closure/ Google Closure].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Skills Required''': C++, Network Programming, Javascript, HTML, Google Closure&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Estimated Difficulty''': Medium&lt;br /&gt;
&lt;br /&gt;
==Port to Android==&lt;br /&gt;
&lt;br /&gt;
Android is an obvious target for [[OLA]]. Not only does it make perfect sense to use phones &amp;amp; tablets as lighting control interfaces but the Android platform could be used to build embedded lighting control devices. A small amount of this has been done, see [[OLA on Android]]. [[issue:222|Bug #222]] covers this work.&lt;br /&gt;
&lt;br /&gt;
This project would include:&lt;br /&gt;
* Building OLA as a Android Application&lt;br /&gt;
* Adding a [[issue:16|Java client]] or wrapping the C++ client with a Java library.&lt;br /&gt;
* Writing a frontend in Java to demonstrate the capabilities of OLA. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Skills Required''': C++, Java, Android &amp;lt;br/&amp;gt;&lt;br /&gt;
'''Estimated Difficulty''': Hard&lt;br /&gt;
&lt;br /&gt;
==Port to Windows ==&lt;br /&gt;
&lt;br /&gt;
This is the most requested 'feature' and would significantly expand the reach of the project especially as we approach v1.0. The current supported method of running OLA on Windows is using VMWare  ([[OLA_on_Windows_with_VMWare|instructions]]). This is sub optimal, since it requires the use of non-free software, is challenging for users without Unix command line experience, and doesn't allow Windows applications to communicate with OLA.  Work on a Windows port commenced in mid 2011 (see [[Building_OLA_for_Windows|these notes]]), but was postponed due to lack of resources.&lt;br /&gt;
&lt;br /&gt;
This project would include:&lt;br /&gt;
* Refactoring the base classes under [[code:common/network|common/network]] to use the Windows network &amp;amp; event management APIs and ensuring that all unit tests pass. &lt;br /&gt;
* Cleaning up various parts of the code which use POSIX APIs (see [[issue:140|issue 140]] for an example)&lt;br /&gt;
&lt;br /&gt;
A Windows port would enable lighting controller applications like [[QLC]] and [[D::Light]] to move to OLA entirely, and not have to maintain their own plugins.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Skills Required''': C++, Windows Network Programming &amp;amp; Windows Event Handling&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Estimated Difficulty''': Hard&lt;br /&gt;
&lt;br /&gt;
== Patcher v2 ==&lt;br /&gt;
&lt;br /&gt;
Patcher v2 is one of the next big projects for [[OLA]] it requires a rewrite of our current daemon to allow users to patch a specific channel:universe to a different channel:universe. It would most likely not be entirely up to the student but would be a small team effort as this touches all major points of our system. This would also require a change in the web interface to possibly allow drag and drop of patching. Depending on the students knowledge they may help with the web interface, web backend or the OLA daemon.&lt;br /&gt;
&lt;br /&gt;
See [[issue:280|issue 280]] for some additional features and thoughts.&lt;br /&gt;
&lt;br /&gt;
'''Skills Required''': C++, Javascript, HTML   &amp;lt;br/&amp;gt;&lt;br /&gt;
'''Estimated Difficulty''': Hard&lt;/div&gt;</summary>
		<author><name>Peternewman</name></author>	</entry>

	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OLP_SOC_Ideas_Page&amp;diff=5793</id>
		<title>OLP SOC Ideas Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=OLP_SOC_Ideas_Page&amp;diff=5793"/>
				<updated>2015-01-11T12:56:44Z</updated>
		
		<summary type="html">&lt;p&gt;Peternewman: /* Port to Windows */ Switch to interwiki links&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page lists some ideas for [http://www.google-melange.com/gsoc/homepage/google/gsoc2014 Google Summer of Code 2014] projects for the [[Open Lighting Project]]. You can use these ideas as a basis for your application, or come up with something different. Please see the Google SOC site for the 2014 timeline. If you would like to discuss any of these ideas, or are thinking of applying to work with us, please send an email to the [https://groups.google.com/forum/?fromgroups#!forum/open-lighting Open Lighting List] introducing yourself.&lt;br /&gt;
&lt;br /&gt;
Before asking questions on the list, please read ESR's  [http://www.catb.org/esr/faqs/smart-questions.html How To Ask Questions The Smart Way].  Remember, when deciding who to select, we're looking for students who are self-starters and won't start asking questions the first time they run into something they don't understand. A quick Google search goes a long way.&lt;br /&gt;
&lt;br /&gt;
If you'd like to apply, please complete the OLA [[GSOC Challenge]]. This is a prerequisite for being selected. We suggest you start it at least a week before, in case you need to ask questions.&lt;br /&gt;
&lt;br /&gt;
== Adding support for more RDM PIDS to the Web UI ==&lt;br /&gt;
&lt;br /&gt;
Our current WebUI lacks support for a lot of the really cool parameters and features that RDM is capable of. The main task of this project would to add support for RDM sub-devices and Ack Timer. &lt;br /&gt;
&lt;br /&gt;
This project would include:&lt;br /&gt;
* Adding support for RDM sub-devices in the UI and supporting code in the web server back-end &amp;lt;br/&amp;gt;&lt;br /&gt;
* Adding support for Ack Timer packets in the RDM flow &amp;lt;br/&amp;gt;&lt;br /&gt;
* Adding support for additional parameter ids or (PIDS).&lt;br /&gt;
'''Skills Required''': HTML, Javascript, C++ &amp;lt;br/&amp;gt;&lt;br /&gt;
'''Estimated Difficulty''': Medium&lt;br /&gt;
&lt;br /&gt;
== Raspberry Pi UI ==&lt;br /&gt;
&lt;br /&gt;
The Raspberry Pi is a great platform but lacks a good user interface. With the addition of a small touchscreen, a portable DMX/RDM debugger can be created.&lt;br /&gt;
&lt;br /&gt;
This project would include:&lt;br /&gt;
* Designing, writing and testing the new UI&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Skills Required''': Python ? &amp;lt;br/&amp;gt;&lt;br /&gt;
'''Estimated Difficulty''': Easy&lt;br /&gt;
&lt;br /&gt;
== RESTful API ==&lt;br /&gt;
&lt;br /&gt;
The current API that the website uses is a bit old and needs updated to allow full use of OLA's inner working in a general RESTful way. This would allow third parties to easily build new web based apps that could connect to RDM and DMX devices.&lt;br /&gt;
&lt;br /&gt;
This project would include:&lt;br /&gt;
* Writing and testing the new API&lt;br /&gt;
* Modifying our current Web app to use the new web api&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Skills Required''': C++, Javascript, HTML, JSON &amp;lt;br/&amp;gt;&lt;br /&gt;
'''Estimated Difficulty''': Easy&lt;br /&gt;
&lt;br /&gt;
== Web Based Configuration of Preferences ==&lt;br /&gt;
&lt;br /&gt;
User Preferences for [[OLA]] are stored in text files but the web UI provides no method for changing any preferences beyond port patchings. At the moment the user is required to stop the OLA Daemon, edit the text files and restart if settings are to be changed.  This project would involve building a generic preference store and exposing it through the web UI. Changing preferences on the fly is likely to expose bugs in some of the OLA plugins. These will need to be fixed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Skills Required''': C++, Javascript, HTML   &amp;lt;br/&amp;gt;&lt;br /&gt;
'''Estimated Difficulty''': Easy&lt;br /&gt;
&lt;br /&gt;
== Asynchronous Web Notification of RDM Messages == &lt;br /&gt;
&lt;br /&gt;
Thanks to sites like GMail and Facebook, users have come to expect asynchronous notification of events in their web browser. [[RDM]] enabled lighting devices can generate events such as ''Over Temperature'' and ''Lamp Faulty'' so it would be nice to alert the users to this. This project would involve work with two Open Source efforts. The student would need to work with [http://www.gnu.org/software/libmicrohttpd/ libmicrohttpd] to add [http://en.wikipedia.org/wiki/WebSocket WebSocket] support (see the [http://lists.gnu.org/archive/html/libmicrohttpd/2012-01/msg00015.html email thread]).&lt;br /&gt;
&lt;br /&gt;
The second step would involve using WebSockets to deliver events to the browser, and building a UI to notify the user. The [[OLA]] UI is built with [http://code.google.com/closure/ Google Closure].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Skills Required''': C++, Network Programming, Javascript, HTML, Google Closure&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Estimated Difficulty''': Medium&lt;br /&gt;
&lt;br /&gt;
==Port to Android==&lt;br /&gt;
&lt;br /&gt;
Android is an obvious target for [[OLA]]. Not only does it make perfect sense to use phones &amp;amp; tablets as lighting control interfaces but the Android platform could be used to build embedded lighting control devices. A small amount of this has been done, see [[OLA on Android]]. [[issue:222|Bug #222]] covers this work.&lt;br /&gt;
&lt;br /&gt;
This project would include:&lt;br /&gt;
* Building OLA as a Android Application&lt;br /&gt;
* Adding a [[issue:16|Java client]] or wrapping the C++ client with a Java library.&lt;br /&gt;
* Writing a frontend in Java to demonstrate the capabilities of OLA. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Skills Required''': C++, Java, Android &amp;lt;br/&amp;gt;&lt;br /&gt;
'''Estimated Difficulty''': Hard&lt;br /&gt;
&lt;br /&gt;
==Port to Windows ==&lt;br /&gt;
&lt;br /&gt;
This is the most requested 'feature' and would significantly expand the reach of the project especially as we approach v1.0. The current supported method of running OLA on Windows is using VMWare  ([[OLA_on_Windows_with_VMWare|instructions]]). This is sub optimal, since it requires the use of non-free software, is challenging for users without Unix command line experience, and doesn't allow Windows applications to communicate with OLA.  Work on a Windows port commenced in mid 2011 (see [[Building_OLA_for_Windows|these notes]]), but was postponed due to lack of resources.&lt;br /&gt;
&lt;br /&gt;
This project would include:&lt;br /&gt;
* Refactoring the base classes under [[code:common/network|common/network]] to use the Windows network &amp;amp; event management APIs and ensuring that all unit tests pass. &lt;br /&gt;
* Cleaning up various parts of the code which use POSIX APIs (see [[issue:140|issue 140]] for an example)&lt;br /&gt;
&lt;br /&gt;
A Windows port would enable lighting controller applications like [[QLC]] and [[D::Light]] to move to OLA entirely, and not have to maintain their own plugins.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Skills Required''': C++, Windows Network Programming &amp;amp; Windows Event Handling&amp;lt;br/&amp;gt;&lt;br /&gt;
'''Estimated Difficulty''': Hard&lt;br /&gt;
&lt;br /&gt;
== Patcher v2 ==&lt;br /&gt;
&lt;br /&gt;
Patcher v2 is one of the next big projects for [[OLA]] it requires a rewrite of our current daemon to allow users to patch a specific channel:universe to a different channel:universe. It would most likely not be entirely up to the student but would be a small team effort as this touches all major points of our system. This would also require a change in the web interface to possibly allow drag and drop of patching. Depending on the students knowledge they may help with the web interface, web backend or the OLA daemon.&lt;br /&gt;
&lt;br /&gt;
See https://github.com/OpenLightingProject/ola/issues/280 for some additional features and thoughts.&lt;br /&gt;
&lt;br /&gt;
'''Skills Required''': C++, Javascript, HTML   &amp;lt;br/&amp;gt;&lt;br /&gt;
'''Estimated Difficulty''': Hard&lt;/div&gt;</summary>
		<author><name>Peternewman</name></author>	</entry>

	</feed>