
# Cavendish skin uses APIs deprecated in 1.42; keep those warnings out of the error log
$wgDeprecationReleaseLimit = "1.41";
$wgEnableSidebarCache = true;
$wgParserCacheType = CACHE_DB;
<?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=216.239.45.4</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=216.239.45.4"/>
	<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=Special:Contributions/216.239.45.4"/>
	<updated>2026-11-04T01:56:29Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.11</generator>
	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OLA_developer_info&amp;diff=4039</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=4039"/>
		<updated>2011-12-29T18:45:25Z</updated>

		<summary type="html">&lt;p&gt;216.239.45.4: /* HTTP Server */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This attempts to describe the internal structure of OLA, in particular the classes that make up plugins. Read [[Using_OLA]] first to understand the Port/Device/Universe/Plugin terminology. &lt;br /&gt;
&lt;br /&gt;
== Core Classes ==&lt;br /&gt;
&lt;br /&gt;
=== DmxBuffer ===&lt;br /&gt;
&lt;br /&gt;
The DmxBuffer class allows DMX data to be passed around the code, while avoiding unnecessary copying. DmxBuffer is defined in include/ola/DmxBuffer.h&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DmxBuffer data;  // new empty buffer&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 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. The classes are defined in include/ola/Callback.h&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&#039;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&#039;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;
=== 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&#039;t be used).&lt;br /&gt;
&lt;br /&gt;
=== Logging ===&lt;br /&gt;
&lt;br /&gt;
The logging macros are defined in include/ola/Logging.h. Logging outputs 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;
=== TimeStamp and TimeInterval ===&lt;br /&gt;
&lt;br /&gt;
These are basic classes used for dealing with Time. They are defined in include/ola/Clock.h.&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;
=== String Utils ===&lt;br /&gt;
&lt;br /&gt;
While not a class, include/ola/StringUtils.h defines a number of helper functions for dealing with Strings.&lt;br /&gt;
&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;
&lt;br /&gt;
== Plugin System ==&lt;br /&gt;
&lt;br /&gt;
We&#039;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&#039;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&#039;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&#039;t want to block because we&#039;ll delay all lla processing. The new RPC subsystem removes this limitation.&lt;br /&gt;
 * Sending a PARAMETER_REQUEST to the widget doesn&#039;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;
== RPC Mechanism ==&lt;br /&gt;
&lt;br /&gt;
RPCs are at the heart of OLA. The RPC system is built on [http://code.google.com/apis/protocolbuffers/ protocol buffers].  olad/OlaServerServiceImpl.h provides the implementation for the RPCs on the server side.&lt;br /&gt;
&lt;br /&gt;
== HTTP Server ==&lt;br /&gt;
&lt;br /&gt;
The HTTP server is provided by [http://www.gnu.org/software/libmicrohttpd/ microhttpd]. The olad/HttpServer.h class provides a C++ class wrapper around the microhttpd code, and then olad/OlaHttpServer.h implements the OLA specific behavior.&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&#039;s from serial numbers, USB device ID&#039;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&#039;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 &#039;&#039;USB Pro&#039;&#039; box.&lt;br /&gt;
&lt;br /&gt;
The communication with &#039;&#039;USB Pro&#039;s&#039;&#039; 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;
&#039;&#039;Peperoni and usbdmx are probably easy to implement. The specs and source code examples are available.&#039;&#039;&lt;/div&gt;</summary>
		<author><name>216.239.45.4</name></author>
	</entry>
	<entry>
		<id>https://wiki.openlighting.org/index.php?title=Arduino_RGB_Mixer&amp;diff=3926</id>
		<title>Arduino RGB Mixer</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=Arduino_RGB_Mixer&amp;diff=3926"/>
		<updated>2011-08-31T17:02:39Z</updated>

		<summary type="html">&lt;p&gt;216.239.45.4: /* Host Software */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Features|free=yes|linux=yes|osx=yes|rdm=yes}}&lt;br /&gt;
[[Image:Arduino-RGB-RDM.jpg|right|200px]]&lt;br /&gt;
[[Image:Ardunio-RGB.jpg|right|200px]]&lt;br /&gt;
&lt;br /&gt;
This page describes how to build a 2 LED RGB (6 channel) color mixer using an [[Arduino]] and [[OLA]] and [[QLC]]. The Arduino is programed to emulate a [[DMX USB Pro]] and implements the [[USB Protocol Extensions]] along with [[RDM]].&lt;br /&gt;
&lt;br /&gt;
=== Features ===&lt;br /&gt;
&lt;br /&gt;
* Six channel PWM controller (multiple personalities enable inversion of the output)&lt;br /&gt;
* DMX Address and Device label can be set using RDM&lt;br /&gt;
* Identify led (useful when multiple devices are in use so you can identify which device is which)&lt;br /&gt;
* Power cycle counter&lt;br /&gt;
* Optional Temperature Sensor&lt;br /&gt;
* Serial number (UID) can be set remotely&lt;br /&gt;
&lt;br /&gt;
=== Parts ===&lt;br /&gt;
&lt;br /&gt;
* LED strip lights, Ikea has a set which are reasonably cheap and come with mounting brackets: [http://www.ikea.com/us/en/catalog/products/50119407 Dioder] - $50&lt;br /&gt;
* A power supply for the led lights, make sure it can provide enough current for the amount of leds you plan to use. You can use the one from the Ikea lights.&lt;br /&gt;
* An [[Arduino]], I used the [http://arduino.cc/en/Main/ArduinoBoardDuemilanove Duemilanove] - $30&lt;br /&gt;
* Parts to make a driver circuit: 3 x 2N2222 transistors, 3x 2.2k resistors, small PCB - $10&lt;br /&gt;
* A 110ohm resistor (or 100 + 10 ohm) to disable the auto-reset on the new Arduino boards.&lt;br /&gt;
* A LM35DZ temperature sensor - $2&lt;br /&gt;
* A LED to indicate the device is in identify mode - 50c&lt;br /&gt;
&lt;br /&gt;
In the example above the Ikea leds run from 12V and draw ~420mA when all colors are on so you need to make sure the driver circuit and power supply is sized correctly.&lt;br /&gt;
&lt;br /&gt;
==Hardware==&lt;br /&gt;
&lt;br /&gt;
=== LED Driver ===&lt;br /&gt;
&lt;br /&gt;
The LEDs use 12V while the Arduino supplies 5V so we need to make a driver circuit. The one below should be good up to 600mA per channel or so.&lt;br /&gt;
&lt;br /&gt;
[[Image:RGB-arduino-driver.png|center]]&lt;br /&gt;
&lt;br /&gt;
You need one of these per channel. The inputs should be connected to the PWM pins on the Arduino (pins 3, 5, 6, 9, 10, 11 on a Duemilanove). Make sure you connect the ground of both circuits.&lt;br /&gt;
&lt;br /&gt;
=== Identify LED ===&lt;br /&gt;
&lt;br /&gt;
RDM allows a device to be put into &#039;identify mode&#039;. The RGB Mixer uses an LED to indicate when identify mode is enabled. This LED should be connected between pins 12 and ground.&lt;br /&gt;
&lt;br /&gt;
=== Temperature Sensor ===&lt;br /&gt;
&lt;br /&gt;
The output of the LM35 should be connected to analog pin 0 as shown on http://www.danielandrade.net/2008/07/05/temperature-sensor-arduino/&lt;br /&gt;
&lt;br /&gt;
===Disable Auto-Reset===&lt;br /&gt;
&lt;br /&gt;
The newer Ardiuno boards auto-reset when the serial connection is established which causes problems with OLA. To disable the auto-reset connect a 110 ohm resistor between the RESET and 5V pins. Note that you need to remove this when you program your Arduino. In the picture above a switch is used for ease of programming.&lt;br /&gt;
&lt;br /&gt;
== Arduino Software==&lt;br /&gt;
&lt;br /&gt;
The sources can be downloaded by running&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
git clone https://code.google.com/p/linux-lighting.arduino-rgb-mixer/ arduino-rgb-mixer&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To build the sources you&#039;ll need the Arduino development environment. That can be found at http://arduino.cc/en/Main/Software.&lt;br /&gt;
&lt;br /&gt;
The latest compiled version of the firmware is available at  http://code.google.com/p/linux-lighting/downloads/list&lt;br /&gt;
&lt;br /&gt;
== Host Software==&lt;br /&gt;
&lt;br /&gt;
Download and install [[OLA]] (verion 0.8.9 or above) and [[QLC]] if you want a graphical frontend. See the documentation for either/both products for getting it installed. The device should show up as a [[DMX USB Pro]], the first three channel control the red, green &amp;amp; blue intensities.&lt;br /&gt;
&lt;br /&gt;
The image below shows the RDM settings page in OLA for this device.&lt;br /&gt;
&lt;br /&gt;
[[Image:RGB_Mixer_RDM_Control.png|center|200px]]&lt;br /&gt;
&lt;br /&gt;
== Future Work ==&lt;br /&gt;
&lt;br /&gt;
* Expand the PWM outputs with http://www.arduino.cc/playground/Learning/TLC5940&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Articles]]&lt;/div&gt;</summary>
		<author><name>216.239.45.4</name></author>
	</entry>
	<entry>
		<id>https://wiki.openlighting.org/index.php?title=USB_Protocol_Extensions&amp;diff=3282</id>
		<title>USB Protocol Extensions</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=USB_Protocol_Extensions&amp;diff=3282"/>
		<updated>2010-03-19T03:44:05Z</updated>

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

		<summary type="html">&lt;p&gt;216.239.45.4: /* Install libraries */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Installing OLA on Linux From GIT/Archive=&lt;br /&gt;
&lt;br /&gt;
This describes how to get OLA working on a Linux system.&lt;br /&gt;
&lt;br /&gt;
==Checkout or Download an Archive==&lt;br /&gt;
&lt;br /&gt;
  git clone http://www.nomis52.net/git/lla&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t have it yet, install &#039;&#039;&#039;git&#039;&#039;&#039; using your distro&#039;s package manager.&lt;br /&gt;
&lt;br /&gt;
==Install libraries==&lt;br /&gt;
&lt;br /&gt;
You need a couple of libraries installed for everything to work correctly. Some of these are available as packages in most distros but others need to be downloaded.&lt;br /&gt;
&lt;br /&gt;
First up we&#039;ll need &#039;&#039;&#039;microhttpd&#039;&#039;&#039; for the embedded web server (Note: you&#039;ll need version &amp;gt;= 0.4.0):&lt;br /&gt;
  &lt;br /&gt;
-&amp;gt; [ftp://ftp.gnu.org/gnu/libmicrohttpd/ ftp://ftp.gnu.org/gnu/libmicrohttpd/]&lt;br /&gt;
&lt;br /&gt;
Then you will need &#039;&#039;&#039;libcppunit-dev&#039;&#039;&#039; and &#039;&#039;&#039;libcppunit&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Debian users can install them with apt:&lt;br /&gt;
&lt;br /&gt;
  apt-get install libcppunit-dev libcppunit-1.12-1 uuid-dev&lt;br /&gt;
&lt;br /&gt;
Next, you need the &#039;&#039;&#039;Protocol Buffers&#039;&#039;&#039; from Google (BSD license). Most likely, you will need to download and build them yourself:&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; [http://code.google.com/p/protobuf/ http://code.google.com/p/protobuf/]&lt;br /&gt;
&lt;br /&gt;
Debian users will can use the following packets (not yet in stable):&lt;br /&gt;
libprotobuf2, libprotobuf-dev, protobuf-compiler&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then, build &#039;&#039;&#039;CTemplate&#039;&#039;&#039; (another Google goodie):&lt;br /&gt;
&lt;br /&gt;
-&amp;gt; [http://code.google.com/p/google-ctemplate/ http://code.google.com/p/google-ctemplate/]&lt;br /&gt;
&lt;br /&gt;
Finally run ldconfig as root to pick up the new libraries&lt;br /&gt;
&lt;br /&gt;
  ldconfig&lt;br /&gt;
&lt;br /&gt;
==Configure==&lt;br /&gt;
&lt;br /&gt;
If you checked out the sources from git, you&#039;ll need to run&lt;br /&gt;
&lt;br /&gt;
  autoreconf -i&lt;br /&gt;
&lt;br /&gt;
After that run&lt;br /&gt;
&lt;br /&gt;
  ./configure&lt;br /&gt;
&lt;br /&gt;
==Building &amp;amp; Testing==&lt;br /&gt;
&lt;br /&gt;
Build&lt;br /&gt;
  make&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you get an error like the following:&lt;br /&gt;
&lt;br /&gt;
 /bin/sh ./libtool --tag=CC   --mode=compile gcc -DHAVE_CONFIG_H -I.   -I/opt/local/var/macports/software/protobuf-cpp/2.0.3_0/opt/local/include/  -g -O2 -c -o ltdl.lo ltdl.c&lt;br /&gt;
 ./libtool: line 464: CDPATH: command not found&lt;br /&gt;
 /Users/simonn/lighting/lla/libltdl/libtool: line 464: CDPATH: command not found&lt;br /&gt;
 /Users/simonn/lighting/lla/libltdl/libtool: line 1142: func_opt_split: command not found&lt;br /&gt;
 libtool: Version mismatch error.  This is libtool 2.2.6, but the&lt;br /&gt;
 libtool: definition of this LT_INIT comes from an older release.&lt;br /&gt;
 libtool: You should recreate aclocal.m4 with macros from libtool 2.2.6&lt;br /&gt;
 libtool: and run autoconf again.&lt;br /&gt;
&lt;br /&gt;
Your system uses a different version of libtool. Run:&lt;br /&gt;
&lt;br /&gt;
  libtoolize --ltdl -c -f&lt;br /&gt;
&lt;br /&gt;
and then start from the autoreconf step again.&lt;br /&gt;
&lt;br /&gt;
Run the tests&lt;br /&gt;
  make check&lt;br /&gt;
&lt;br /&gt;
And install OLA&lt;br /&gt;
  sudo make install&lt;br /&gt;
  sudo ldconfig&lt;/div&gt;</summary>
		<author><name>216.239.45.4</name></author>
	</entry>
	<entry>
		<id>https://wiki.openlighting.org/index.php?title=For_Sale&amp;diff=3030</id>
		<title>For Sale</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=For_Sale&amp;diff=3030"/>
		<updated>2009-08-15T18:58:15Z</updated>

		<summary type="html">&lt;p&gt;216.239.45.4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The rules are simple - add items in the format:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Item - $price - contact email - d/m/y added&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Description, be sure to mention the location.&lt;br /&gt;
&lt;br /&gt;
Any unsold items will be removed after a month.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;KSD250 Lamp (MSD 250) x 2 - $45 each - webspam &amp;lt;at&amp;gt; nomis52.net - 15/8/2009&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
2 KSD250 lamps, one of them has been used once to test a fixture, the other is brand new.&lt;br /&gt;
[http://www.divinelighting.com/philips-msd-2502-277210-277210-lamp-bulb-p-328.html Link]. Located in CA.&lt;/div&gt;</summary>
		<author><name>216.239.45.4</name></author>
	</entry>
	<entry>
		<id>https://wiki.openlighting.org/index.php?title=For_Sale&amp;diff=3029</id>
		<title>For Sale</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=For_Sale&amp;diff=3029"/>
		<updated>2009-08-15T18:57:23Z</updated>

		<summary type="html">&lt;p&gt;216.239.45.4: Created page with &amp;#039;The rules are simple - add items in the format:  &amp;#039;&amp;#039;&amp;#039;Item - $price - contact email - d/m/y added&amp;#039;&amp;#039;&amp;#039;&amp;lt;br&amp;gt; Description  Any unsold items will be removed after a month.   ----   &amp;#039;&amp;#039;&amp;#039;KS…&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The rules are simple - add items in the format:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Item - $price - contact email - d/m/y added&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
Any unsold items will be removed after a month.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;KSD250 Lamp (MSD 250) x 2 - $45 each - webspam &amp;lt;at&amp;gt; nomis52.net - 15/8/2009&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
2 KSD250 lamps, one of them has been used once to test a fixture, the other is brand new.&lt;br /&gt;
[http://www.divinelighting.com/philips-msd-2502-277210-277210-lamp-bulb-p-328.html Link]&lt;/div&gt;</summary>
		<author><name>216.239.45.4</name></author>
	</entry>
	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OpenDMX.net&amp;diff=3028</id>
		<title>OpenDMX.net</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=OpenDMX.net&amp;diff=3028"/>
		<updated>2009-08-15T18:47:46Z</updated>

		<summary type="html">&lt;p&gt;216.239.45.4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- To add a news item edit the Template:News page --&amp;gt;&lt;br /&gt;
{{News}}&lt;br /&gt;
Welcome to opendmx.net. This site aims to be a resource for those involved in the lighting industry looking for DMX software and associated control systems. It&#039;s also home to documentation for various open source and free lighting software.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you&#039;re new to the world of lighting check out the [[:Category:Definitions|Definitions]] page, or have a look at the list of [[:Category:USB | USB interfaces]] or [[:Category:Controllers|Software Controllers]].&lt;br /&gt;
&lt;br /&gt;
Do you know of non-conforming or fussy DMX equipment? If so, please add it to the [[NonConformDMX]] page. Are you interesting in seeing what equipment and solutions are available? See the list of upcoming [[Conferences &amp;amp; Exhibitions]].&lt;br /&gt;
&lt;br /&gt;
Check out the [[For Sale]] section if you&#039;re looking for cheap equipment.&lt;br /&gt;
&lt;br /&gt;
For questions about the site, contact admin &amp;lt;AT&amp;gt; opendmx.net&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Old News]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>216.239.45.4</name></author>
	</entry>
	<entry>
		<id>https://wiki.openlighting.org/index.php?title=Libartnet&amp;diff=3019</id>
		<title>Libartnet</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=Libartnet&amp;diff=3019"/>
		<updated>2009-08-08T19:44:53Z</updated>

		<summary type="html">&lt;p&gt;216.239.45.4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Link: http://code.google.com/p/linux-lighting/&amp;lt;br&amp;gt;&lt;br /&gt;
{{Features|linux=yes|osx=yes|rdm=yes|free=yes}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
libartnet is a implementation of the [[ArtNet]] protocol designed for Unix-like systems and part of the [[OLA|Open Lighting Architecture]]. The artnet-examples package provides sample programs demonstrating the use of the library. Of particular interest is artnet_usb which allows ArtNet to DMX conversion by using the Enttec [[Open DMX USB]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Related Tutorials:&amp;lt;/b&amp;gt;&lt;br /&gt;
* [[LLA Sandnet Tutorial]]&lt;br /&gt;
* [[LLA and Q Light Controller Ubuntu Tutorial]]&lt;br /&gt;
* [[Linux ArtNet Node]]&lt;br /&gt;
* [[Libartnet on Windows]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Related Products:&amp;lt;/b&amp;gt;&lt;br /&gt;
* [[OLA]]&lt;br /&gt;
* [[Open DMX USB]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Drivers / Libraries]]&lt;/div&gt;</summary>
		<author><name>216.239.45.4</name></author>
	</entry>
	<entry>
		<id>https://wiki.openlighting.org/index.php?title=Download_OLA&amp;diff=2968</id>
		<title>Download OLA</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=Download_OLA&amp;diff=2968"/>
		<updated>2009-08-03T01:46:38Z</updated>

		<summary type="html">&lt;p&gt;216.239.45.4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sources (via git) - this will download version [[LLA 0.3]]&lt;br /&gt;
&lt;br /&gt;
 http://www.nomis52.net/git/lla&lt;br /&gt;
 http://www.nomis52.net/git/lla-examples&lt;br /&gt;
&lt;br /&gt;
Tarball:&lt;br /&gt;
&lt;br /&gt;
  http://code.google.com/p/linux-lighting/downloads/list&lt;br /&gt;
&lt;br /&gt;
RPMS (probably out of date):&lt;br /&gt;
&lt;br /&gt;
 http://rpms.netmindz.net/&lt;br /&gt;
&lt;br /&gt;
Live CD (iso) (really old):&lt;br /&gt;
&lt;br /&gt;
 [https://sourceforge.net/project/showfiles.php?group_id=126566&amp;amp;package_id=192352 Sourceforge]&lt;/div&gt;</summary>
		<author><name>216.239.45.4</name></author>
	</entry>
	<entry>
		<id>https://wiki.openlighting.org/index.php?title=D::Light&amp;diff=2942</id>
		<title>D::Light</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=D::Light&amp;diff=2942"/>
		<updated>2009-07-21T13:44:55Z</updated>

		<summary type="html">&lt;p&gt;216.239.45.4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Link: http://www.nicole-banana.com/ &amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:DL.png|300px|right]]&lt;br /&gt;
{{Features|win=yes|osx=yes|tx=yes}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
D::Light is a software designed for theater lighting. &lt;br /&gt;
It currently both works on OS X and windows XP&lt;br /&gt;
&lt;br /&gt;
Art-Net support is added but only tested on osx.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Controllers]]&lt;/div&gt;</summary>
		<author><name>216.239.45.4</name></author>
	</entry>
	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OpenDMX.net&amp;diff=2937</id>
		<title>OpenDMX.net</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=OpenDMX.net&amp;diff=2937"/>
		<updated>2009-07-21T00:55:30Z</updated>

		<summary type="html">&lt;p&gt;216.239.45.4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- To add a news item edit the Template:News page --&amp;gt;&lt;br /&gt;
{{News}}&lt;br /&gt;
Welcome to opendmx.net. This site aims to be a resource for those involved in the lighting industry looking DMX software and the associated control systems. It&#039;s also home to documentation for various open source and free lighting software.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you&#039;re new to the world of lighting check out the [[:Category:Definitions|Definitions]] page, or have a look at the list of [[:Category:USB | USB interfaces]] or [[:Category:Controllers|Software Controllers]].&lt;br /&gt;
&lt;br /&gt;
Do you know of non-conforming or fussy equipment? Add it to the [[NonConformDMX]] page. Are you interesting in seeing what equipment and solutions are available? See the list of upcoming [[Conferences &amp;amp; Exhibitions]].&lt;br /&gt;
&lt;br /&gt;
For questions about the site, contact admin &amp;lt;AT&amp;gt; opendmx.net&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Old News]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>216.239.45.4</name></author>
	</entry>
	<entry>
		<id>https://wiki.openlighting.org/index.php?title=Conferences_%26_Exhibitions&amp;diff=2936</id>
		<title>Conferences &amp; Exhibitions</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=Conferences_%26_Exhibitions&amp;diff=2936"/>
		<updated>2009-07-21T00:53:29Z</updated>

		<summary type="html">&lt;p&gt;216.239.45.4: Created page with &amp;#039;== LDI 2009 == Orlando, FL, USA&amp;lt;br&amp;gt; 16 - 22 November 2009&amp;lt;br&amp;gt; http://www.ldishow.com   == PLASA09== London, UK&amp;lt;br&amp;gt; 13 - 16 September 2009&amp;lt;br&amp;gt; http://www.plasashow.com   == USITT …&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== LDI 2009 ==&lt;br /&gt;
Orlando, FL, USA&amp;lt;br&amp;gt;&lt;br /&gt;
16 - 22 November 2009&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.ldishow.com&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== PLASA09==&lt;br /&gt;
London, UK&amp;lt;br&amp;gt;&lt;br /&gt;
13 - 16 September 2009&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.plasashow.com&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== USITT 2010==&lt;br /&gt;
Kansas City, MO, USA&amp;lt;br&amp;gt;&lt;br /&gt;
March 30 - April 3&amp;lt;br&amp;gt;&lt;br /&gt;
http://www.usitt.org/2010/&lt;/div&gt;</summary>
		<author><name>216.239.45.4</name></author>
	</entry>
	<entry>
		<id>https://wiki.openlighting.org/index.php?title=Libartnet_on_Windows&amp;diff=2934</id>
		<title>Libartnet on Windows</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=Libartnet_on_Windows&amp;diff=2934"/>
		<updated>2009-07-20T15:55:04Z</updated>

		<summary type="html">&lt;p&gt;216.239.45.4: /* Install Mingw, msys &amp;amp; build tools */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Written by sl1200mk2 2009/07/01.&lt;br /&gt;
(nicole-banana.com)&lt;br /&gt;
&lt;br /&gt;
This HOWTO outlines a method for compiling libartnet on Windows using MinGW to produce the libartnet-1.dll.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Install Mingw, msys &amp;amp; build tools ==&lt;br /&gt;
&lt;br /&gt;
The instructions at http://www.mingw.org/wiki/MSYS are very helpful. There are similar instructions at http://www.cccp-project.net/wiki/index.php?title=Installing_MSYS-MinGW&lt;br /&gt;
&lt;br /&gt;
* Install mingw and msys&lt;br /&gt;
&lt;br /&gt;
* Download these packages&lt;br /&gt;
** autoconf [http://ftp.gnu.org/gnu/autoconf/] &lt;br /&gt;
** automake [http://ftp.gnu.org/gnu/automake/]&lt;br /&gt;
** libtool [http://ftp.gnu.org/gnu/libtool/]&lt;br /&gt;
&lt;br /&gt;
* Launch the msys shell&lt;br /&gt;
&lt;br /&gt;
* Unpack autoconf, automake and libtool to a directory of your choice.&lt;br /&gt;
&lt;br /&gt;
* Install each of them with the following command:&lt;br /&gt;
&lt;br /&gt;
 $ ./configure --prefix=/mingw &amp;amp;&amp;amp; make &amp;amp;&amp;amp; make install&lt;br /&gt;
&lt;br /&gt;
* Update PKG_CONFIG_PATH&lt;br /&gt;
&lt;br /&gt;
As all the libraries will be installed in /mingw, PKG_CONFIG_PATH must be set. &lt;br /&gt;
&lt;br /&gt;
Open the file /etc/profile (C:\msys\1.0\etc\profile) with your favorite editor (make sure it uses LF line endings) and add:&lt;br /&gt;
&lt;br /&gt;
 PKG_CONFIG_PATH=&amp;quot;/mingw/lib/pkgconfig&amp;quot;&lt;br /&gt;
&lt;br /&gt;
You might also want to set CFLAGS. Safe options for MinGW are:&lt;br /&gt;
&lt;br /&gt;
 CFLAGS=&amp;quot;-pipe -O2 -mms-bitfields -march=i686&amp;quot;&lt;br /&gt;
&lt;br /&gt;
just before&lt;br /&gt;
&lt;br /&gt;
 export HOME LOGNAME MSYSTEM HISTFILE&lt;br /&gt;
&lt;br /&gt;
and modify that line by adding the variables:&lt;br /&gt;
&lt;br /&gt;
 export HOME LOGNAME MSYSTEM HISTFILE CFLAGS PKG_CONFIG_PATH&lt;br /&gt;
&lt;br /&gt;
Now restart MSYS. You should now be able to use MSYS without problems.&lt;br /&gt;
          &lt;br /&gt;
This is the biggest part of the job.&lt;br /&gt;
&lt;br /&gt;
== Install Git ==&lt;br /&gt;
&lt;br /&gt;
See http://code.google.com/p/msysgit/, be sure to select &amp;quot;unix style carriage returns&amp;quot; otherwise you&#039;ll get autoconf errors.&lt;br /&gt;
&lt;br /&gt;
== Download Libartnet ==&lt;br /&gt;
&lt;br /&gt;
Grab the libarnet sources (via the git shell or the git UI)&lt;br /&gt;
&lt;br /&gt;
 $ git clone http://www.nomis52.net/git/libartnet&lt;br /&gt;
&lt;br /&gt;
== Compile Libartnet ==&lt;br /&gt;
&lt;br /&gt;
 $ cd libartnet&lt;br /&gt;
 $ autoreconf -i -f &lt;br /&gt;
 $ ./configure --prefix=/mingw &amp;amp;&amp;amp; make &amp;amp;&amp;amp; make install&lt;/div&gt;</summary>
		<author><name>216.239.45.4</name></author>
	</entry>
	<entry>
		<id>https://wiki.openlighting.org/index.php?title=Libartnet_on_Windows&amp;diff=2933</id>
		<title>Libartnet on Windows</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=Libartnet_on_Windows&amp;diff=2933"/>
		<updated>2009-07-20T15:54:39Z</updated>

		<summary type="html">&lt;p&gt;216.239.45.4: /* Compile Libartnet */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Written by sl1200mk2 2009/07/01.&lt;br /&gt;
(nicole-banana.com)&lt;br /&gt;
&lt;br /&gt;
This HOWTO outlines a method for compiling libartnet on Windows using MinGW to produce the libartnet-1.dll.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Install Mingw, msys &amp;amp; build tools ==&lt;br /&gt;
&lt;br /&gt;
The instructions at http://www.mingw.org/wiki/MSYS are very helpful.&lt;br /&gt;
&lt;br /&gt;
* Install mingw and msys&lt;br /&gt;
&lt;br /&gt;
* Download these packages&lt;br /&gt;
** autoconf [http://ftp.gnu.org/gnu/autoconf/] &lt;br /&gt;
** automake [http://ftp.gnu.org/gnu/automake/]&lt;br /&gt;
** libtool [http://ftp.gnu.org/gnu/libtool/]&lt;br /&gt;
&lt;br /&gt;
* Launch the msys shell&lt;br /&gt;
&lt;br /&gt;
* Unpack autoconf, automake and libtool to a directory of your choice.&lt;br /&gt;
&lt;br /&gt;
* Install each of them with the following command:&lt;br /&gt;
&lt;br /&gt;
 $ ./configure --prefix=/mingw &amp;amp;&amp;amp; make &amp;amp;&amp;amp; make install&lt;br /&gt;
&lt;br /&gt;
* Update PKG_CONFIG_PATH&lt;br /&gt;
&lt;br /&gt;
As all the libraries will be installed in /mingw, PKG_CONFIG_PATH must be set. &lt;br /&gt;
&lt;br /&gt;
Open the file /etc/profile (C:\msys\1.0\etc\profile) with your favorite editor (make sure it uses LF line endings) and add:&lt;br /&gt;
&lt;br /&gt;
 PKG_CONFIG_PATH=&amp;quot;/mingw/lib/pkgconfig&amp;quot;&lt;br /&gt;
&lt;br /&gt;
You might also want to set CFLAGS. Safe options for MinGW are:&lt;br /&gt;
&lt;br /&gt;
 CFLAGS=&amp;quot;-pipe -O2 -mms-bitfields -march=i686&amp;quot;&lt;br /&gt;
&lt;br /&gt;
just before&lt;br /&gt;
&lt;br /&gt;
 export HOME LOGNAME MSYSTEM HISTFILE&lt;br /&gt;
&lt;br /&gt;
and modify that line by adding the variables:&lt;br /&gt;
&lt;br /&gt;
 export HOME LOGNAME MSYSTEM HISTFILE CFLAGS PKG_CONFIG_PATH&lt;br /&gt;
&lt;br /&gt;
Now restart MSYS. You should now be able to use MSYS without problems.&lt;br /&gt;
          &lt;br /&gt;
This is the biggest part of the job.&lt;br /&gt;
&lt;br /&gt;
== Install Git ==&lt;br /&gt;
&lt;br /&gt;
See http://code.google.com/p/msysgit/, be sure to select &amp;quot;unix style carriage returns&amp;quot; otherwise you&#039;ll get autoconf errors.&lt;br /&gt;
&lt;br /&gt;
== Download Libartnet ==&lt;br /&gt;
&lt;br /&gt;
Grab the libarnet sources (via the git shell or the git UI)&lt;br /&gt;
&lt;br /&gt;
 $ git clone http://www.nomis52.net/git/libartnet&lt;br /&gt;
&lt;br /&gt;
== Compile Libartnet ==&lt;br /&gt;
&lt;br /&gt;
 $ cd libartnet&lt;br /&gt;
 $ autoreconf -i -f &lt;br /&gt;
 $ ./configure --prefix=/mingw &amp;amp;&amp;amp; make &amp;amp;&amp;amp; make install&lt;/div&gt;</summary>
		<author><name>216.239.45.4</name></author>
	</entry>
	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OpenDMX.net&amp;diff=2900</id>
		<title>OpenDMX.net</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=OpenDMX.net&amp;diff=2900"/>
		<updated>2009-07-13T20:14:57Z</updated>

		<summary type="html">&lt;p&gt;216.239.45.4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- To add a news item edit the Template:News page --&amp;gt;&lt;br /&gt;
{{News}}&lt;br /&gt;
Welcome to opendmx.net. This site aims to be a resource for those involved in the lighting industry looking DMX software and the associated control systems. It&#039;s also home to documentation for various open source and free lighting software.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you&#039;re new to the world of lighting check out the [[:Category:Definitions|Definitions]] page, or check out the list of [[:Category:USB | USB interfaces]] or [[:Category:Controllers|Software Controllers]].&lt;br /&gt;
&lt;br /&gt;
Do you know of non-conforming or fussy equipment? Add it to the [[NonConformDMX]] page.&lt;br /&gt;
&lt;br /&gt;
For questions about the site, contact admin &amp;lt;AT&amp;gt; opendmx.net&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Old News]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>216.239.45.4</name></author>
	</entry>
	<entry>
		<id>https://wiki.openlighting.org/index.php?title=Template:NewsHeading&amp;diff=2830</id>
		<title>Template:NewsHeading</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=Template:NewsHeading&amp;diff=2830"/>
		<updated>2009-07-11T00:13:37Z</updated>

		<summary type="html">&lt;p&gt;216.239.45.4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;style=&amp;quot;border-top: 1px solid #999;&amp;quot; bgcolor=&amp;quot;#C5D8FC&amp;quot; align=&amp;quot;center&amp;quot;&lt;/div&gt;</summary>
		<author><name>216.239.45.4</name></author>
	</entry>
	<entry>
		<id>https://wiki.openlighting.org/index.php?title=Template:NewsHeading&amp;diff=2829</id>
		<title>Template:NewsHeading</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=Template:NewsHeading&amp;diff=2829"/>
		<updated>2009-07-11T00:12:55Z</updated>

		<summary type="html">&lt;p&gt;216.239.45.4: New page: bgcolor=&amp;quot;#A7C1F2&amp;quot; align=&amp;quot;center&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;bgcolor=&amp;quot;#A7C1F2&amp;quot; align=&amp;quot;center&amp;quot;&lt;/div&gt;</summary>
		<author><name>216.239.45.4</name></author>
	</entry>
	<entry>
		<id>https://wiki.openlighting.org/index.php?title=Libartnet_on_Windows&amp;diff=2793</id>
		<title>Libartnet on Windows</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=Libartnet_on_Windows&amp;diff=2793"/>
		<updated>2009-07-02T00:24:26Z</updated>

		<summary type="html">&lt;p&gt;216.239.45.4: /* Compile Libartnet */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Written by sl1200mk2 2009/07/01.&lt;br /&gt;
(nicole-banana.com)&lt;br /&gt;
&lt;br /&gt;
This HOWTO outlines a method for compiling libartnet on Windows using MinGW to produce the libartnet-1.dll.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Install Mingw, msys &amp;amp; build tools ==&lt;br /&gt;
&lt;br /&gt;
The instructions at http://www.mingw.org/wiki/MSYS are very helpful.&lt;br /&gt;
&lt;br /&gt;
* Install mingw and msys&lt;br /&gt;
&lt;br /&gt;
* Download these packages&lt;br /&gt;
** autoconf [http://ftp.gnu.org/gnu/autoconf/] &lt;br /&gt;
** automake [http://ftp.gnu.org/gnu/automake/]&lt;br /&gt;
** libtool [http://ftp.gnu.org/gnu/libtool/]&lt;br /&gt;
&lt;br /&gt;
* Launch the msys shell&lt;br /&gt;
&lt;br /&gt;
* Unpack autoconf, automake and libtool to a directory of your choice.&lt;br /&gt;
&lt;br /&gt;
* Install each of them with the following command:&lt;br /&gt;
&lt;br /&gt;
 $ ./configure --prefix=/mingw &amp;amp;&amp;amp; make &amp;amp;&amp;amp; make install&lt;br /&gt;
&lt;br /&gt;
* Update PKG_CONFIG_PATH&lt;br /&gt;
&lt;br /&gt;
As all the libraries will be installed in /mingw, PKG_CONFIG_PATH must be set. &lt;br /&gt;
&lt;br /&gt;
Open the file /etc/profile (C:\msys\1.0\etc\profile) with your favorite editor (make sure it uses LF line endings) and add:&lt;br /&gt;
&lt;br /&gt;
 PKG_CONFIG_PATH=&amp;quot;/mingw/lib/pkgconfig&amp;quot;&lt;br /&gt;
&lt;br /&gt;
You might also want to set CFLAGS. Safe options for MinGW are:&lt;br /&gt;
&lt;br /&gt;
 CFLAGS=&amp;quot;-pipe -O2 -mms-bitfields -march=i686&amp;quot;&lt;br /&gt;
&lt;br /&gt;
just before&lt;br /&gt;
&lt;br /&gt;
 export HOME LOGNAME MSYSTEM HISTFILE&lt;br /&gt;
&lt;br /&gt;
and modify that line by adding the variables:&lt;br /&gt;
&lt;br /&gt;
 export HOME LOGNAME MSYSTEM HISTFILE CFLAGS PKG_CONFIG_PATH&lt;br /&gt;
&lt;br /&gt;
Now restart MSYS. You should now be able to use MSYS without problems.&lt;br /&gt;
          &lt;br /&gt;
This is the biggest part of the job.&lt;br /&gt;
&lt;br /&gt;
== Install Git ==&lt;br /&gt;
&lt;br /&gt;
See http://code.google.com/p/msysgit/, be sure to select &amp;quot;unix style carriage returns&amp;quot; otherwise you&#039;ll get autoconf errors.&lt;br /&gt;
&lt;br /&gt;
== Download Libartnet ==&lt;br /&gt;
&lt;br /&gt;
Grab the libarnet sources (via the git shell or the git UI)&lt;br /&gt;
&lt;br /&gt;
 $ git clone http://www.nomis52.net/git/libartnet&lt;br /&gt;
&lt;br /&gt;
== Compile Libartnet ==&lt;br /&gt;
&lt;br /&gt;
 $ cd libartnet&lt;br /&gt;
 $ autoreconf -i -f &lt;br /&gt;
 $ ./configure --prefix=/c/MinGW/ &amp;amp;&amp;amp; make &amp;amp;&amp;amp; make install&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
AC_PROG_LIBTOOL macro and -no-undefined flag cause libartnet to build as DLL&lt;/div&gt;</summary>
		<author><name>216.239.45.4</name></author>
	</entry>
	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OLA_on_OS_X&amp;diff=2782</id>
		<title>OLA on OS X</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=OLA_on_OS_X&amp;diff=2782"/>
		<updated>2009-06-24T01:23:01Z</updated>

		<summary type="html">&lt;p&gt;216.239.45.4: /* Set some env vars */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page describes how to get LLA 0.3 working on OS X. &lt;br /&gt;
&lt;br /&gt;
== Basic setup ==&lt;br /&gt;
&lt;br /&gt;
* Install xcode [[http://developer.apple.com/technology/xcode.html]]&lt;br /&gt;
* install git [[http://code.google.com/p/git-osx-installer/]]&lt;br /&gt;
* install mac ports [[http://www.macports.org/]]&lt;br /&gt;
&lt;br /&gt;
== Use Mac Ports to install stuff==&lt;br /&gt;
&lt;br /&gt;
 $ port install pkgconfig cppunit unittest-cpp protobuf-cpp &lt;br /&gt;
&lt;br /&gt;
== Set some env vars==&lt;br /&gt;
&lt;br /&gt;
set $PATH to point to something sane (you should also make sure you point it at your ctemplate and libmicrohttpd)&lt;br /&gt;
&lt;br /&gt;
 export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig&lt;br /&gt;
 export CPPFLAGS=&amp;quot;-I/opt/local/include/&amp;quot;&lt;br /&gt;
 export LDFLAGS=&amp;quot;-L/opt/local/lib/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Optionally install microhttpd and ctemplate==&lt;br /&gt;
&lt;br /&gt;
If you want the http interface you need these&lt;br /&gt;
&lt;br /&gt;
* http://www.gnu.org/software/libmicrohttpd/ [&amp;gt;= 0.4] (Currently you need to install libgcrypt too for this library to work)&lt;br /&gt;
 sudo port install libgcrypt&lt;br /&gt;
or you can disable https support (which should work with LLA just fine) by using the configure line &amp;quot;./configure --enable-https=no&amp;quot;&lt;br /&gt;
* http://code.google.com/p/google-ctemplate/&lt;br /&gt;
&lt;br /&gt;
* Make sure both of these are made AND installed before running &amp;quot;./configure&amp;quot; on LLA otherwise it will not detect the libraries and ignore all the HTTP server code&lt;br /&gt;
&lt;br /&gt;
== Checkout LLA ==&lt;br /&gt;
&lt;br /&gt;
  git clone http://www.nomis52.net/git/lla&lt;br /&gt;
  cd lla&lt;br /&gt;
&lt;br /&gt;
== Run reautoconf==&lt;br /&gt;
&lt;br /&gt;
If this is the first time run with -i to install the missing files&lt;br /&gt;
&lt;br /&gt;
 autoreconf -i&lt;br /&gt;
&lt;br /&gt;
== Do the usual steps==&lt;br /&gt;
&lt;br /&gt;
 ./configure&lt;br /&gt;
 make&lt;br /&gt;
 make check&lt;br /&gt;
 sudo make install&lt;br /&gt;
&lt;br /&gt;
If you get an error like the following:&lt;br /&gt;
&lt;br /&gt;
 /bin/sh ./libtool --tag=CC   --mode=compile gcc -DHAVE_CONFIG_H -I.   -I/opt/local/var/macports/software/protobuf-cpp/2.0.3_0/opt/local/include/  -g -O2 -c -o ltdl.lo ltdl.c&lt;br /&gt;
 ./libtool: line 464: CDPATH: command not found&lt;br /&gt;
 /Users/simonn/lighting/lla/libltdl/libtool: line 464: CDPATH: command not found&lt;br /&gt;
 /Users/simonn/lighting/lla/libltdl/libtool: line 1142: func_opt_split: command not found&lt;br /&gt;
 libtool: Version mismatch error.  This is libtool 2.2.6, but the&lt;br /&gt;
 libtool: definition of this LT_INIT comes from an older release.&lt;br /&gt;
 libtool: You should recreate aclocal.m4 with macros from libtool 2.2.6&lt;br /&gt;
 libtool: and run autoconf again.&lt;br /&gt;
&lt;br /&gt;
Your system uses a different version of libtool. Run:&lt;br /&gt;
&lt;br /&gt;
  glibtoolize --ltdl -c -f&lt;br /&gt;
&lt;br /&gt;
and then start from the autoreconf step again.&lt;/div&gt;</summary>
		<author><name>216.239.45.4</name></author>
	</entry>
	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OLA_on_OS_X&amp;diff=2781</id>
		<title>OLA on OS X</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=OLA_on_OS_X&amp;diff=2781"/>
		<updated>2009-06-24T01:03:21Z</updated>

		<summary type="html">&lt;p&gt;216.239.45.4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page describes how to get LLA 0.3 working on OS X. &lt;br /&gt;
&lt;br /&gt;
== Basic setup ==&lt;br /&gt;
&lt;br /&gt;
* Install xcode [[http://developer.apple.com/technology/xcode.html]]&lt;br /&gt;
* install git [[http://code.google.com/p/git-osx-installer/]]&lt;br /&gt;
* install mac ports [[http://www.macports.org/]]&lt;br /&gt;
&lt;br /&gt;
== Use Mac Ports to install stuff==&lt;br /&gt;
&lt;br /&gt;
 $ port install pkgconfig cppunit unittest-cpp protobuf-cpp &lt;br /&gt;
&lt;br /&gt;
== Set some env vars==&lt;br /&gt;
&lt;br /&gt;
set $PATH to point to something sane (you should also make sure you point it at your ctemplate and libmicrohttpd)&lt;br /&gt;
&lt;br /&gt;
 export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig&lt;br /&gt;
 export CPPFLAGS=&amp;quot;-I/opt/local/var/macports/software/protobuf-cpp/2.0.3_0/opt/local/include/&amp;quot;&lt;br /&gt;
 export LDFLAGS=&amp;quot;-L/opt/local/var/macports/software/protobuf-cpp/2.0.3_0/opt/local/lib/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Optionally install microhttpd and ctemplate==&lt;br /&gt;
&lt;br /&gt;
If you want the http interface you need these&lt;br /&gt;
&lt;br /&gt;
* http://www.gnu.org/software/libmicrohttpd/ [&amp;gt;= 0.4] (Currently you need to install libgcrypt too for this library to work)&lt;br /&gt;
 sudo port install libgcrypt&lt;br /&gt;
or you can disable https support (which should work with LLA just fine) by using the configure line &amp;quot;./configure --enable-https=no&amp;quot;&lt;br /&gt;
* http://code.google.com/p/google-ctemplate/&lt;br /&gt;
&lt;br /&gt;
* Make sure both of these are made AND installed before running &amp;quot;./configure&amp;quot; on LLA otherwise it will not detect the libraries and ignore all the HTTP server code&lt;br /&gt;
&lt;br /&gt;
== Checkout LLA ==&lt;br /&gt;
&lt;br /&gt;
  git clone http://www.nomis52.net/git/lla&lt;br /&gt;
  cd lla&lt;br /&gt;
&lt;br /&gt;
== Run reautoconf==&lt;br /&gt;
&lt;br /&gt;
If this is the first time run with -i to install the missing files&lt;br /&gt;
&lt;br /&gt;
 autoreconf -i&lt;br /&gt;
&lt;br /&gt;
== Do the usual steps==&lt;br /&gt;
&lt;br /&gt;
 ./configure&lt;br /&gt;
 make&lt;br /&gt;
 make check&lt;br /&gt;
 sudo make install&lt;br /&gt;
&lt;br /&gt;
If you get an error like the following:&lt;br /&gt;
&lt;br /&gt;
 /bin/sh ./libtool --tag=CC   --mode=compile gcc -DHAVE_CONFIG_H -I.   -I/opt/local/var/macports/software/protobuf-cpp/2.0.3_0/opt/local/include/  -g -O2 -c -o ltdl.lo ltdl.c&lt;br /&gt;
 ./libtool: line 464: CDPATH: command not found&lt;br /&gt;
 /Users/simonn/lighting/lla/libltdl/libtool: line 464: CDPATH: command not found&lt;br /&gt;
 /Users/simonn/lighting/lla/libltdl/libtool: line 1142: func_opt_split: command not found&lt;br /&gt;
 libtool: Version mismatch error.  This is libtool 2.2.6, but the&lt;br /&gt;
 libtool: definition of this LT_INIT comes from an older release.&lt;br /&gt;
 libtool: You should recreate aclocal.m4 with macros from libtool 2.2.6&lt;br /&gt;
 libtool: and run autoconf again.&lt;br /&gt;
&lt;br /&gt;
Your system uses a different version of libtool. Run:&lt;br /&gt;
&lt;br /&gt;
  glibtoolize --ltdl -c -f&lt;br /&gt;
&lt;br /&gt;
and then start from the autoreconf step again.&lt;/div&gt;</summary>
		<author><name>216.239.45.4</name></author>
	</entry>
	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OLA_on_OS_X&amp;diff=2780</id>
		<title>OLA on OS X</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=OLA_on_OS_X&amp;diff=2780"/>
		<updated>2009-06-24T00:42:06Z</updated>

		<summary type="html">&lt;p&gt;216.239.45.4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page describes how to get LLA 0.3 working on OS X. &lt;br /&gt;
&lt;br /&gt;
== Basic setup ==&lt;br /&gt;
&lt;br /&gt;
* Install xcode [[http://developer.apple.com/technology/xcode.html]]&lt;br /&gt;
* install git [[http://code.google.com/p/git-osx-installer/]]&lt;br /&gt;
* install mac ports [[http://www.macports.org/]]&lt;br /&gt;
&lt;br /&gt;
== Use Mac Ports to install stuff==&lt;br /&gt;
&lt;br /&gt;
 $ port install pkgconfig cppunit unittest-cpp&lt;br /&gt;
&lt;br /&gt;
== Set some env vars==&lt;br /&gt;
&lt;br /&gt;
set $PATH to point to something sane (you should also make sure you point it at your ctemplate and libmicrohttpd)&lt;br /&gt;
&lt;br /&gt;
 export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig&lt;br /&gt;
 export CPPFLAGS=&amp;quot;-I/opt/local/var/macports/software/protobuf-cpp/2.0.3_0/opt/local/include/&amp;quot;&lt;br /&gt;
 export LDFLAGS=&amp;quot;-L/opt/local/var/macports/software/protobuf-cpp/2.0.3_0/opt/local/lib/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Installed protobuf libraries ==&lt;br /&gt;
&lt;br /&gt;
http://code.google.com/p/protobuf/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Optionally install microhttpd and ctemplate==&lt;br /&gt;
&lt;br /&gt;
If you want the http interface you need these&lt;br /&gt;
&lt;br /&gt;
* http://www.gnu.org/software/libmicrohttpd/ [&amp;gt;= 0.4] (Currently you need to install libgcrypt too for this library to work)&lt;br /&gt;
 sudo port install libgcrypt&lt;br /&gt;
or you can disable https support (which should work with LLA just fine) by using the configure line &amp;quot;./configure --enable-https=no&amp;quot;&lt;br /&gt;
* http://code.google.com/p/google-ctemplate/&lt;br /&gt;
&lt;br /&gt;
* Make sure both of these are made AND installed before running &amp;quot;./configure&amp;quot; on LLA otherwise it will not detect the libraries and ignore all the HTTP server code&lt;br /&gt;
&lt;br /&gt;
== Checkout LLA ==&lt;br /&gt;
&lt;br /&gt;
  git clone http://www.nomis52.net/git/lla&lt;br /&gt;
  cd lla&lt;br /&gt;
&lt;br /&gt;
== Run reautoconf==&lt;br /&gt;
&lt;br /&gt;
If this is the first time run with -i to install the missing files&lt;br /&gt;
&lt;br /&gt;
 autoreconf -i&lt;br /&gt;
&lt;br /&gt;
== Do the usual steps==&lt;br /&gt;
&lt;br /&gt;
 ./configure&lt;br /&gt;
 make&lt;br /&gt;
 make check&lt;br /&gt;
 sudo make install&lt;br /&gt;
&lt;br /&gt;
If you get an error like the following:&lt;br /&gt;
&lt;br /&gt;
 /bin/sh ./libtool --tag=CC   --mode=compile gcc -DHAVE_CONFIG_H -I.   -I/opt/local/var/macports/software/protobuf-cpp/2.0.3_0/opt/local/include/  -g -O2 -c -o ltdl.lo ltdl.c&lt;br /&gt;
 ./libtool: line 464: CDPATH: command not found&lt;br /&gt;
 /Users/simonn/lighting/lla/libltdl/libtool: line 464: CDPATH: command not found&lt;br /&gt;
 /Users/simonn/lighting/lla/libltdl/libtool: line 1142: func_opt_split: command not found&lt;br /&gt;
 libtool: Version mismatch error.  This is libtool 2.2.6, but the&lt;br /&gt;
 libtool: definition of this LT_INIT comes from an older release.&lt;br /&gt;
 libtool: You should recreate aclocal.m4 with macros from libtool 2.2.6&lt;br /&gt;
 libtool: and run autoconf again.&lt;br /&gt;
&lt;br /&gt;
Your system uses a different version of libtool. Run:&lt;br /&gt;
&lt;br /&gt;
  glibtoolize --ltdl -c -f&lt;br /&gt;
&lt;br /&gt;
and then start from the autoreconf step again.&lt;/div&gt;</summary>
		<author><name>216.239.45.4</name></author>
	</entry>
	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OLA_on_OS_X&amp;diff=2779</id>
		<title>OLA on OS X</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=OLA_on_OS_X&amp;diff=2779"/>
		<updated>2009-06-24T00:38:28Z</updated>

		<summary type="html">&lt;p&gt;216.239.45.4: /* Use Mac Ports to install stuff */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page describes how to get LLA 0.3 working on OS X. &lt;br /&gt;
&lt;br /&gt;
== Basic setup ==&lt;br /&gt;
&lt;br /&gt;
* Install xcode [[http://developer.apple.com/technology/xcode.html]]&lt;br /&gt;
* install git [[http://code.google.com/p/git-osx-installer/]]&lt;br /&gt;
* install mac ports [[http://www.macports.org/]]&lt;br /&gt;
&lt;br /&gt;
== Use Mac Ports to install stuff==&lt;br /&gt;
&lt;br /&gt;
 $ port install pkgconfig cppunit unittest-cpp&lt;br /&gt;
&lt;br /&gt;
== Set some env vars==&lt;br /&gt;
&lt;br /&gt;
set $PATH to point to something sane (you should also make sure you point it at your ctemplate and libmicrohttpd)&lt;br /&gt;
&lt;br /&gt;
 export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig&lt;br /&gt;
 export CPPFLAGS=&amp;quot;-I/opt/local/var/macports/software/protobuf-cpp/2.0.3_0/opt/local/include/&amp;quot;&lt;br /&gt;
 export LDFLAGS=&amp;quot;-L/opt/local/var/macports/software/protobuf-cpp/2.0.3_0/opt/local/lib/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Optionally install microhttpd and ctemplate==&lt;br /&gt;
&lt;br /&gt;
If you want the http interface you need these&lt;br /&gt;
&lt;br /&gt;
* http://www.gnu.org/software/libmicrohttpd/ [&amp;gt;= 0.4] (Currently you need to install libgcrypt too for this library to work)&lt;br /&gt;
 sudo port install libgcrypt&lt;br /&gt;
or you can disable https support (which should work with LLA just fine) by using the configure line &amp;quot;./configure --enable-https=no&amp;quot;&lt;br /&gt;
* http://code.google.com/p/google-ctemplate/&lt;br /&gt;
&lt;br /&gt;
* Make sure both of these are made AND installed before running &amp;quot;./configure&amp;quot; on LLA otherwise it will not detect the libraries and ignore all the HTTP server code&lt;br /&gt;
&lt;br /&gt;
== Checkout LLA ==&lt;br /&gt;
&lt;br /&gt;
  git clone http://www.nomis52.net/git/lla&lt;br /&gt;
  cd lla&lt;br /&gt;
&lt;br /&gt;
== Run reautoconf==&lt;br /&gt;
&lt;br /&gt;
If this is the first time run with -i to install the missing files&lt;br /&gt;
&lt;br /&gt;
 autoreconf -i&lt;br /&gt;
&lt;br /&gt;
== Do the usual steps==&lt;br /&gt;
&lt;br /&gt;
 ./configure&lt;br /&gt;
 make&lt;br /&gt;
 make check&lt;br /&gt;
 sudo make install&lt;br /&gt;
&lt;br /&gt;
If you get an error like the following:&lt;br /&gt;
&lt;br /&gt;
 /bin/sh ./libtool --tag=CC   --mode=compile gcc -DHAVE_CONFIG_H -I.   -I/opt/local/var/macports/software/protobuf-cpp/2.0.3_0/opt/local/include/  -g -O2 -c -o ltdl.lo ltdl.c&lt;br /&gt;
 ./libtool: line 464: CDPATH: command not found&lt;br /&gt;
 /Users/simonn/lighting/lla/libltdl/libtool: line 464: CDPATH: command not found&lt;br /&gt;
 /Users/simonn/lighting/lla/libltdl/libtool: line 1142: func_opt_split: command not found&lt;br /&gt;
 libtool: Version mismatch error.  This is libtool 2.2.6, but the&lt;br /&gt;
 libtool: definition of this LT_INIT comes from an older release.&lt;br /&gt;
 libtool: You should recreate aclocal.m4 with macros from libtool 2.2.6&lt;br /&gt;
 libtool: and run autoconf again.&lt;br /&gt;
&lt;br /&gt;
Your system uses a different version of libtool. Run:&lt;br /&gt;
&lt;br /&gt;
  glibtoolize --ltdl -c -f&lt;br /&gt;
&lt;br /&gt;
and then start from the autoreconf step again.&lt;/div&gt;</summary>
		<author><name>216.239.45.4</name></author>
	</entry>
	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OLA_on_OS_X&amp;diff=2722</id>
		<title>OLA on OS X</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=OLA_on_OS_X&amp;diff=2722"/>
		<updated>2009-05-06T16:46:06Z</updated>

		<summary type="html">&lt;p&gt;216.239.45.4: /* Run reautoconf */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page describes how to get LLA 0.3 working on OS X. &lt;br /&gt;
&lt;br /&gt;
== Basic setup ==&lt;br /&gt;
&lt;br /&gt;
* Install xcode [[http://developer.apple.com/technology/xcode.html]]&lt;br /&gt;
* install git [[http://code.google.com/p/git-osx-installer/]]&lt;br /&gt;
* install mac ports [[http://www.macports.org/]]&lt;br /&gt;
&lt;br /&gt;
== Use Mac Ports to install stuff==&lt;br /&gt;
&lt;br /&gt;
 $ port install pkgconfig protobuf-cpp cppunit unittest-cpp libtool&lt;br /&gt;
&lt;br /&gt;
== Set some env vars==&lt;br /&gt;
&lt;br /&gt;
set $PATH to point to something sane (you should also make sure you point it at your ctemplate and libmicrohttpd)&lt;br /&gt;
&lt;br /&gt;
 export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig&lt;br /&gt;
 export CPPFLAGS=&amp;quot;-I/opt/local/var/macports/software/protobuf-cpp/2.0.3_0/opt/local/include/&amp;quot;&lt;br /&gt;
 export LDFLAGS=&amp;quot;-L/opt/local/var/macports/software/protobuf-cpp/2.0.3_0/opt/local/lib/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Optionally install microhttpd and ctemplate==&lt;br /&gt;
&lt;br /&gt;
If you want the http interface you need these&lt;br /&gt;
&lt;br /&gt;
* http://www.gnu.org/software/libmicrohttpd/ [&amp;gt;= 0.4] (Currently you need to install libgcrypt too for this library to work)&lt;br /&gt;
 sudo port install libgcrypt&lt;br /&gt;
or you can disable https support (which should work with LLA just fine) by using the configure line &amp;quot;./configure --enable-https=no&amp;quot;&lt;br /&gt;
* http://code.google.com/p/google-ctemplate/&lt;br /&gt;
&lt;br /&gt;
* Make sure both of these are made AND installed before running &amp;quot;./configure&amp;quot; on LLA otherwise it will not detect the libraries and ignore all the HTTP server code&lt;br /&gt;
&lt;br /&gt;
== Checkout LLA ==&lt;br /&gt;
&lt;br /&gt;
  git clone http://www.nomis52.net/git/lla&lt;br /&gt;
  cd lla&lt;br /&gt;
&lt;br /&gt;
== Run reautoconf==&lt;br /&gt;
&lt;br /&gt;
If this is the first time run with -i to install the missing files&lt;br /&gt;
&lt;br /&gt;
 autoreconf -i&lt;br /&gt;
&lt;br /&gt;
== Do the usual steps==&lt;br /&gt;
&lt;br /&gt;
 ./configure&lt;br /&gt;
 make&lt;br /&gt;
 make check&lt;br /&gt;
 sudo make install&lt;/div&gt;</summary>
		<author><name>216.239.45.4</name></author>
	</entry>
	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OLA_on_OS_X&amp;diff=2721</id>
		<title>OLA on OS X</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=OLA_on_OS_X&amp;diff=2721"/>
		<updated>2009-05-06T16:45:42Z</updated>

		<summary type="html">&lt;p&gt;216.239.45.4: /* Run autoconf */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page describes how to get LLA 0.3 working on OS X. &lt;br /&gt;
&lt;br /&gt;
== Basic setup ==&lt;br /&gt;
&lt;br /&gt;
* Install xcode [[http://developer.apple.com/technology/xcode.html]]&lt;br /&gt;
* install git [[http://code.google.com/p/git-osx-installer/]]&lt;br /&gt;
* install mac ports [[http://www.macports.org/]]&lt;br /&gt;
&lt;br /&gt;
== Use Mac Ports to install stuff==&lt;br /&gt;
&lt;br /&gt;
 $ port install pkgconfig protobuf-cpp cppunit unittest-cpp libtool&lt;br /&gt;
&lt;br /&gt;
== Set some env vars==&lt;br /&gt;
&lt;br /&gt;
set $PATH to point to something sane (you should also make sure you point it at your ctemplate and libmicrohttpd)&lt;br /&gt;
&lt;br /&gt;
 export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig&lt;br /&gt;
 export CPPFLAGS=&amp;quot;-I/opt/local/var/macports/software/protobuf-cpp/2.0.3_0/opt/local/include/&amp;quot;&lt;br /&gt;
 export LDFLAGS=&amp;quot;-L/opt/local/var/macports/software/protobuf-cpp/2.0.3_0/opt/local/lib/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Optionally install microhttpd and ctemplate==&lt;br /&gt;
&lt;br /&gt;
If you want the http interface you need these&lt;br /&gt;
&lt;br /&gt;
* http://www.gnu.org/software/libmicrohttpd/ [&amp;gt;= 0.4] (Currently you need to install libgcrypt too for this library to work)&lt;br /&gt;
 sudo port install libgcrypt&lt;br /&gt;
or you can disable https support (which should work with LLA just fine) by using the configure line &amp;quot;./configure --enable-https=no&amp;quot;&lt;br /&gt;
* http://code.google.com/p/google-ctemplate/&lt;br /&gt;
&lt;br /&gt;
* Make sure both of these are made AND installed before running &amp;quot;./configure&amp;quot; on LLA otherwise it will not detect the libraries and ignore all the HTTP server code&lt;br /&gt;
&lt;br /&gt;
== Checkout LLA ==&lt;br /&gt;
&lt;br /&gt;
  git clone http://www.nomis52.net/git/lla&lt;br /&gt;
  cd lla&lt;br /&gt;
&lt;br /&gt;
== Run reautoconf==&lt;br /&gt;
&lt;br /&gt;
If this is the first time run with -i to install the missing files&lt;br /&gt;
&lt;br /&gt;
 autoreconf -i&lt;br /&gt;
[[Link title]]&lt;br /&gt;
&lt;br /&gt;
== Do the usual steps==&lt;br /&gt;
&lt;br /&gt;
 ./configure&lt;br /&gt;
 make&lt;br /&gt;
 make check&lt;br /&gt;
 sudo make install&lt;/div&gt;</summary>
		<author><name>216.239.45.4</name></author>
	</entry>
	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OLA_Device_Specific_Configuration&amp;diff=2699</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=2699"/>
		<updated>2009-03-03T06:24:33Z</updated>

		<summary type="html">&lt;p&gt;216.239.45.4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&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;
&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;
And add the path to you ~/.lla/lla-usbpro.conf file: &lt;br /&gt;
&lt;br /&gt;
  device = /dev/cu.usbserial-0000101D&lt;/div&gt;</summary>
		<author><name>216.239.45.4</name></author>
	</entry>
	<entry>
		<id>https://wiki.openlighting.org/index.php?title=Using_OLA&amp;diff=2698</id>
		<title>Using OLA</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=Using_OLA&amp;diff=2698"/>
		<updated>2009-03-02T19:59:25Z</updated>

		<summary type="html">&lt;p&gt;216.239.45.4: /* How to start llad */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== About LLA ==&lt;br /&gt;
&lt;br /&gt;
[[LLA]] is a framework that allows applications to send and receive DMX using various hardware devices and DMX over IP protocols. Hardware devices and protocols can also be connected together and LLA will route the DMX between the two.&lt;br /&gt;
&lt;br /&gt;
LLA consists of 4 parts:&lt;br /&gt;
 - the lla daemon (llad)&lt;br /&gt;
 - the lla client library (liblla)&lt;br /&gt;
 - various lla plugins (libllaX)&lt;br /&gt;
 - example programs (lla_dev_info, lla_patch etc.)&lt;br /&gt;
&lt;br /&gt;
== LLA Terminology ==&lt;br /&gt;
&lt;br /&gt;
; Port (noun)&lt;br /&gt;
: A port represents up to 512 DMX channels that sends data (OUT port) or receives data (IN port). It can be either a physical port on a device or a virtual port created by a DMX over IP protocol.&lt;br /&gt;
&lt;br /&gt;
; Device (noun)&lt;br /&gt;
: A device is a group of ports, for example some devices might have an input and output port.&lt;br /&gt;
&lt;br /&gt;
; Plugin (noun)&lt;br /&gt;
:A LLA plugin supports a group of physical devices or a DMX over IP protocol. Example plugins include ArtNet, ShowNet, EspNet, DmxUsbPro, OpenDmx, StageProfi, Dmx4Linux etc. On startup plugins look for the devices they are responsible for and set them up.&lt;br /&gt;
&lt;br /&gt;
; Universe (noun)&lt;br /&gt;
: A universe is a set of 512 DMX channels. Ports can be patched to universes in which case they&#039;ll either send the data for the universe (in the case of output ports) or set the values for the universe (for input ports)&lt;br /&gt;
&lt;br /&gt;
; Client (noun)&lt;br /&gt;
: A client is another application that connects to LLA using liblla.&lt;br /&gt;
&lt;br /&gt;
; Patch (verb)&lt;br /&gt;
: The act of assigning a port to a universe.&lt;br /&gt;
&lt;br /&gt;
== Using LLA ==&lt;br /&gt;
&lt;br /&gt;
In the general case you want to:&lt;br /&gt;
 - start the lla daemon&lt;br /&gt;
 - patch some output ports to universes&lt;br /&gt;
 - patch an input port or run a client application&lt;br /&gt;
&lt;br /&gt;
=== How to start llad ===&lt;br /&gt;
&lt;br /&gt;
For testing run llad in non-forking, log to stdout, debug level 3:&lt;br /&gt;
&lt;br /&gt;
 llad -l 3&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Do not run this as root&#039;&#039;&#039;. If LLA doesn&#039;t work as your user it&#039;s due to incorrect permissions on files within /dev - fix them and try again. I repeat do not run this as root.&lt;br /&gt;
&lt;br /&gt;
=== How to setup an interface ===&lt;br /&gt;
&lt;br /&gt;
Before an interface (e.g. a USB dongle) can be used, a &#039;&#039;port&#039;&#039; on the &#039;&#039;device&#039;&#039; must be &#039;&#039;patched&#039;&#039; to a &#039;&#039;universe&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
First run lla_dev_info and find out what device / port the desired interface has:&lt;br /&gt;
&lt;br /&gt;
 $ lla_dev_info&lt;br /&gt;
  Device 0: Art-Net Device&lt;br /&gt;
   port 0, cap IN&lt;br /&gt;
   port 1, cap IN&lt;br /&gt;
   port 2, cap IN&lt;br /&gt;
   port 3, cap IN&lt;br /&gt;
   port 4, cap OUT&lt;br /&gt;
   port 5, cap OUT&lt;br /&gt;
   port 6, cap OUT&lt;br /&gt;
   port 7, cap OUT&lt;br /&gt;
 Device 1: Stage Profi Device&lt;br /&gt;
   port 0, cap OUT&lt;br /&gt;
&lt;br /&gt;
In this case we want to use the StageProfi device so we patch device 1, port 0 to a new universe (1)&lt;br /&gt;
&lt;br /&gt;
Then the command &#039;&#039;&#039;lla_patch&#039;&#039;&#039; can be given the numbers just found and the desired universe, so they get connected.&lt;br /&gt;
&lt;br /&gt;
 lla_patch  -d 1 -p 0 -u 1&lt;br /&gt;
&lt;br /&gt;
Running lla_dev_info again shows us the patch has been made:&lt;br /&gt;
&lt;br /&gt;
 $ lla_dev_info&lt;br /&gt;
  Device 0: Art-Net Device&lt;br /&gt;
   port 0, cap IN&lt;br /&gt;
   port 1, cap IN&lt;br /&gt;
   port 2, cap IN&lt;br /&gt;
   port 3, cap IN&lt;br /&gt;
   port 4, cap OUT&lt;br /&gt;
   port 5, cap OUT&lt;br /&gt;
   port 6, cap OUT&lt;br /&gt;
   port 7, cap OUT&lt;br /&gt;
 Device 1: Stage Profi Device&lt;br /&gt;
   port 0, cap OUT, universe 1&lt;br /&gt;
&lt;br /&gt;
Finally the setup can be tested with &#039;&#039;&#039;lla_dmxconsole&#039;&#039;&#039; or &#039;&#039;&#039;lla_dmxmonitor&#039;&#039;&#039; to set or receive DMX values.&lt;br /&gt;
&lt;br /&gt;
Command line options can be seen [http://nomis52.net/?section=projects&amp;amp;sect2=lla&amp;amp;page=llatools here].&lt;br /&gt;
&lt;br /&gt;
[[Category:Articles]]&lt;/div&gt;</summary>
		<author><name>216.239.45.4</name></author>
	</entry>
	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OLA_0.3&amp;diff=2697</id>
		<title>OLA 0.3</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=OLA_0.3&amp;diff=2697"/>
		<updated>2009-03-02T19:57:44Z</updated>

		<summary type="html">&lt;p&gt;216.239.45.4: /* Other Docs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page discusses the development release of LLA (0.3).&lt;br /&gt;
&lt;br /&gt;
==User facing changes==&lt;br /&gt;
&lt;br /&gt;
* (Optional) HTTP server with web interface for configuration&lt;br /&gt;
* Web based dmx console&lt;br /&gt;
* Support for embedding&lt;br /&gt;
* OS X support&lt;br /&gt;
&lt;br /&gt;
==Internal changes==&lt;br /&gt;
&lt;br /&gt;
* Completely new RPC system based on [[http://code.google.com/p/protobuf/ Protocol Buffers]] allowing for asynchronous rpcs from the client.&lt;br /&gt;
* ExportMap&lt;br /&gt;
&lt;br /&gt;
==Known Issues==&lt;br /&gt;
&lt;br /&gt;
Please report issues at http://code.google.com/p/linux-lighting/issues/list&lt;br /&gt;
&lt;br /&gt;
* Due to bugs in libmicrohttpd, you need version 0.4 and above for it to work correctly.&lt;br /&gt;
&lt;br /&gt;
==Other Docs==&lt;br /&gt;
&lt;br /&gt;
* [[LLA on OS X]]&lt;br /&gt;
* [[LLA on Debian]]&lt;br /&gt;
* [[LLA Client API]]&lt;/div&gt;</summary>
		<author><name>216.239.45.4</name></author>
	</entry>
	<entry>
		<id>https://wiki.openlighting.org/index.php?title=Download_OLA&amp;diff=2696</id>
		<title>Download OLA</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=Download_OLA&amp;diff=2696"/>
		<updated>2009-03-02T19:56:26Z</updated>

		<summary type="html">&lt;p&gt;216.239.45.4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sources (via git) - this will download version [[LLA 0.3]]&lt;br /&gt;
&lt;br /&gt;
 http://www.nomis52.net/git/lla&lt;br /&gt;
 http://www.nomis52.net/git/lla-examples&lt;br /&gt;
&lt;br /&gt;
Debian Packages (out of date):&lt;br /&gt;
&lt;br /&gt;
 http://www.nomis52.net/data/debian&lt;br /&gt;
&lt;br /&gt;
RPMS (probably out of date):&lt;br /&gt;
&lt;br /&gt;
 http://rpms.netmindz.net/&lt;br /&gt;
&lt;br /&gt;
Live CD (iso) (really old):&lt;br /&gt;
&lt;br /&gt;
 [https://sourceforge.net/project/showfiles.php?group_id=126566&amp;amp;package_id=192352 Sourceforge]&lt;/div&gt;</summary>
		<author><name>216.239.45.4</name></author>
	</entry>
	<entry>
		<id>https://wiki.openlighting.org/index.php?title=Open_Lighting_Architecture&amp;diff=2695</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=2695"/>
		<updated>2009-03-02T19:53:51Z</updated>

		<summary type="html">&lt;p&gt;216.239.45.4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Link: http://www.nomis52.net/?section=projects&amp;amp;sect2=lla&amp;amp;page=llaintro &amp;lt;br&amp;gt;&lt;br /&gt;
{{Features|free=yes|tx=yes|rx=yes|linux=yes|osx=yes}}&lt;br /&gt;
[[Image:Llad_home.png|right]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
LLA is a framework that allows applications to send and receive DMX, using various hardware devices and &#039;DMX over IP&#039; protocols. It can make [[:Category:Controllers | software controllers]] talk to DMX hardware.&lt;br /&gt;
&lt;br /&gt;
LLA allows DMX sent using various DMX over IP protocols to be converted from one format to another. This enables devices from different manufacturers to talk to each another (for example a [[Strand_Lighting|Strand]] Console can send DMX to an [[Enttec]] [[DmxEtherGate MKII|EtherGate]]).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[LLA Live]] is a stand-alone bootable CD containing software from the Linux Lighting Architecture project.&lt;br /&gt;
&lt;br /&gt;
When combined with a physical DMX interface such as the [[DMX USB Pro]], LLA Live can send and receive data from traditional wired DMX networks.&lt;br /&gt;
&lt;br /&gt;
LLA can run on Linux with all its drivers, and on Mac OS X (but at the moment the drivers (LLA plugins) needs to be modified to work).&lt;br /&gt;
A port to Windows is feasible, if someone wants to add the necessary code.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Bugs?&amp;lt;/b&amp;gt;: Check the bug tracker at http://code.google.com/p/linux-lighting/issues/list&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Questions?&amp;lt;/b&amp;gt;: See the news group at http://groups.google.com/group/linux-lighting&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Supported Devices/Protocols:&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| border=1&lt;br /&gt;
! &#039;&#039;&#039;Driver&#039;&#039;&#039;!! Linux !! &#039;&#039;&#039;Mac OS X&#039;&#039;&#039; &lt;br /&gt;
|-&lt;br /&gt;
|| [[:Category:ArtNet|ArtNet]]   || Yes || Yes&lt;br /&gt;
|-&lt;br /&gt;
|| [[:Category:ShowNet|ShowNet]] || Yes || ??&lt;br /&gt;
|-&lt;br /&gt;
|| [[:Category:ESP Net|ESP Net]] || Yes || ??&lt;br /&gt;
|-&lt;br /&gt;
|| [[:Category:Sandnet|Sandnet]] || Yes || ??&lt;br /&gt;
|-&lt;br /&gt;
|| [[E1.31]] / [[ACN]] || underway || ??&lt;br /&gt;
|-&lt;br /&gt;
|| [[DMX USB Pro]] || Yes || Yes&lt;br /&gt;
|-&lt;br /&gt;
|| [[Open DMX USB]] || Yes || ??&lt;br /&gt;
|-&lt;br /&gt;
|| [[StageProfi]] || Yes || ??&lt;br /&gt;
|-&lt;br /&gt;
|| [[:Category:Pathport|Pathport]]  || in testing || ??&lt;br /&gt;
|-&lt;br /&gt;
|| [[DMX 4 Linux]] || Yes || -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Getting Started&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Start here if you&#039;ve never used LLA before and read these in order.&lt;br /&gt;
* [[Download LLA]]&lt;br /&gt;
* [[Building LLA]] - How to get it compiled (old version)&lt;br /&gt;
* [[Using LLA]] - A basic introduction&lt;br /&gt;
* [[LLA Device Specific Configuration]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Documentation:&amp;lt;/b&amp;gt;&lt;br /&gt;
* [[LLA 0.3]] - The new release&lt;br /&gt;
* [[LLA developer info]] - about the source code and structure&lt;br /&gt;
* [[LLA Tips &amp;amp; Tricks]]&lt;br /&gt;
* [[Using the Python libraries]] - easy DMX programming&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Tutorials&amp;lt;/b&amp;gt;&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;
&lt;br /&gt;
&lt;br /&gt;
LLA can also run on a wireless access point. [http://nomis52.net/?section=projects&amp;amp;sect2=artnet&amp;amp;page=node]&lt;br /&gt;
&lt;br /&gt;
There is a project underway to build packages for OpenWrt. See http://lists.culturebase.org/cgi-bin/mailman/listinfo/lla-openwrt for more details.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:ArtNet]]&lt;br /&gt;
[[Category:ESP Net]]&lt;br /&gt;
[[Category:Sandnet]]&lt;br /&gt;
[[Category:ShowNet]]&lt;br /&gt;
[[Category:Utilities]]&lt;/div&gt;</summary>
		<author><name>216.239.45.4</name></author>
	</entry>
	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OLA_Client_API&amp;diff=2683</id>
		<title>OLA Client API</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=OLA_Client_API&amp;diff=2683"/>
		<updated>2009-02-18T00:06:11Z</updated>

		<summary type="html">&lt;p&gt;216.239.45.4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; This refers to the most recent version of LLA [&amp;gt;= 0.3.0]&lt;br /&gt;
&lt;br /&gt;
LLA provides a client library which allows other applications to send/receive DMX as well as control the LLA server. To cater for different application requirements, a &#039;&#039;SimpleClient&#039;&#039; helper class is provided which can be used to perform the client setup / management. &lt;br /&gt;
&lt;br /&gt;
==Example I: Sending an DMX update==&lt;br /&gt;
&lt;br /&gt;
This first client simply connects to the LLA Server and sends one DMX update. It&#039;s about as simple as you can get because it requires no callbacks and exits immediately. We use two classes in this example, &#039;&#039;lla::SimpleClient&#039;&#039;, and &#039;&#039;lla::LlaClient&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;lla/SimpleClient.h&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 int main() {&lt;br /&gt;
   // some dummy dmx data&lt;br /&gt;
   dmx_t dmx_data[] = {0, 128, 255};&lt;br /&gt;
 &lt;br /&gt;
   lla::SimpleClient simple_client;&lt;br /&gt;
   if (!simple_client.Setup())&lt;br /&gt;
     //setup failed&lt;br /&gt;
     return -1;&lt;br /&gt;
 &lt;br /&gt;
   // Get the underlying LlaClient&lt;br /&gt;
   lla::LlaClient *client = simple_client.GetClient();&lt;br /&gt;
 &lt;br /&gt;
   // Send the DMX data &lt;br /&gt;
   client-&amp;gt;SendDmx(1, dmx_data, sizeof(dmx_data));&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The main class used to communicate with the LLA Server is &#039;&#039;LlaClient&#039;&#039;. For ease of use, the &#039;&#039;SimpleClient&#039;&#039; class sets up &#039;&#039;LlaClient&#039;&#039; with a connection to an LLA Server running on the localhost:LLA_DEFAULT_PORT. You can call GetClient() on a &#039;&#039;SimpleClient&#039;&#039; instance to get a pointer to the underlying &#039;&#039;LlaClient&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Example II: Sending multiple updates==&lt;br /&gt;
&lt;br /&gt;
The previous example only sent a single DMX update before quitting. This next example adds a timeout which sends DMX every 50ms. This introduces a new class &#039;&#039;SelectServer&#039;&#039; which is used for registering timeouts.&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;lla/SimpleClient.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 // Maximum value of a dmx channel&lt;br /&gt;
 static const unsigned int MAX_DMX = 255;&lt;br /&gt;
 // How often to send updates&lt;br /&gt;
 static const unsigned int TIMEOUT_MS = 50;&lt;br /&gt;
 &lt;br /&gt;
 class DmxTimeout: public lla::select_server::TimeoutListener {&lt;br /&gt;
   public:&lt;br /&gt;
     DmxTimeout(lla::LlaClient *client):&lt;br /&gt;
       TimeoutListener(), m_tick(0), m_client(client) {}&lt;br /&gt;
 &lt;br /&gt;
     // Called on timeout&lt;br /&gt;
     int Timeout() {&lt;br /&gt;
       m_dmx_data[0] = MAX_DMX;&lt;br /&gt;
       m_dmx_data[1] = m_tick;&lt;br /&gt;
       m_dmx_data[2] = MAX_DMX - m_tick;&lt;br /&gt;
       m_client-&amp;gt;SendDmx(1, m_dmx_data, sizeof(m_dmx_data));&lt;br /&gt;
       m_tick++;&lt;br /&gt;
       m_tick %= MAX_DMX + 1;&lt;br /&gt;
     }&lt;br /&gt;
   private:&lt;br /&gt;
     unsigned int m_tick;&lt;br /&gt;
     dmx_t m_dmx_data[3];&lt;br /&gt;
     lla::LlaClient *m_client;&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 int main() {&lt;br /&gt;
   lla::SimpleClient simple_client;&lt;br /&gt;
 &lt;br /&gt;
   if (!simple_client.Setup())&lt;br /&gt;
     return -1;&lt;br /&gt;
                                                                                                                                                &lt;br /&gt;
   lla::select_server::SelectServer *ss = simple_client.GetSelectServer();&lt;br /&gt;
   // Create a timeout and register it&lt;br /&gt;
   DmxTimeout timeout(simple_client.GetClient());&lt;br /&gt;
   ss-&amp;gt;RegisterTimeout(TIMEOUT_MS, &amp;amp;timeout);&lt;br /&gt;
   &lt;br /&gt;
   // Start the main loop&lt;br /&gt;
   ss-&amp;gt;Run();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In this example we create &#039;&#039;DmxTimeout&#039;&#039; class whose &#039;&#039;Timeout()&#039;&#039; method is called every time the timer expires. We use the &#039;&#039;Timeout()&#039;&#039; method to send DMX data.&lt;br /&gt;
&lt;br /&gt;
The other important part here is the &#039;&#039;SelectServer&#039;&#039;. As well as the &#039;&#039;RegisterTimeout&#039;&#039; method we&#039;ve used above, this can also be used to register sockets so we can respond to network activity. The &#039;&#039;Run()&#039;&#039; method starts the main event processing loop which will halt if an error occurs or &#039;&#039;Terminate()&#039;&#039; is called.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Example III: Receiving DMX data==&lt;br /&gt;
&lt;br /&gt;
The third example shows how to listen and respond to event from the LLA server.&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;lla/SimpleClient.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 static const unsigned int UNIVERSE = 1;&lt;br /&gt;
 &lt;br /&gt;
 class OurObserver: public lla::LlaClientObserver {&lt;br /&gt;
   public:&lt;br /&gt;
     // Called when new DMX values arrive&lt;br /&gt;
     void NewDmx(unsigned int universe, unsigned int length,&lt;br /&gt;
                 dmx_t *data, const std::string &amp;amp;error) {&lt;br /&gt;
       printf(&amp;quot;received %d channels for universe %d\n&amp;quot;,&lt;br /&gt;
              length, universe);&lt;br /&gt;
     }&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 int main() {&lt;br /&gt;
   lla::SimpleClient simple_client;&lt;br /&gt;
   OurObserver observer;&lt;br /&gt;
 &lt;br /&gt;
   if (!simple_client.Setup())&lt;br /&gt;
     return -1;&lt;br /&gt;
 &lt;br /&gt;
   lla::LlaClient *client = simple_client.GetClient();&lt;br /&gt;
   // Set the observer and register our interest in this universe&lt;br /&gt;
   client-&amp;gt;SetObserver(&amp;amp;observer);&lt;br /&gt;
   client-&amp;gt;RegisterUniverse(UNIVERSE, lla::REGISTER);&lt;br /&gt;
   simple_client.GetSelectServer()-&amp;gt;Run();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Here we inherit from the &#039;&#039;LlaClientObserver&#039;&#039; class and override the methods we&#039;re interested in receiving notification for.&lt;br /&gt;
&lt;br /&gt;
In the main function we set the observer object and register our interest in a universe.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Example IV: More complex client==&lt;br /&gt;
&lt;br /&gt;
The above is all well and good but what if the main application has it&#039;s own event processing loop? An example of this is a GTK/Glib application which uses GMainLoop.&lt;br /&gt;
&lt;br /&gt;
On the other hand, what if you&#039;re not connecting to the LLA Server over TCP? Sometimes it may be desirable to embed the LLA server within the main application.&lt;br /&gt;
&lt;br /&gt;
Bypassing the SimpleClient and using LlaClient directly addresses both these problems.&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;lla/LlaClient.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;lla/select_server/SelectServer.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;lla/select_server/Socket.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 using lla::select_server::PipeSocket;&lt;br /&gt;
 &lt;br /&gt;
 int main() {&lt;br /&gt;
   // Create the select server&lt;br /&gt;
   lla::select_server::SelectServer ss;&lt;br /&gt;
 &lt;br /&gt;
   // Create the pipe socket to talk to the server on&lt;br /&gt;
   PipeSocket *pipe_socket = new PipeSocket();&lt;br /&gt;
   if (!pipe_socket-&amp;gt;Init())&lt;br /&gt;
     return -1;&lt;br /&gt;
 &lt;br /&gt;
   // Remember to add this socket to the SelectServer&lt;br /&gt;
   ss.AddSocket(pipe_socket);&lt;br /&gt;
 &lt;br /&gt;
   // Setup the LlaClient&lt;br /&gt;
   lla::LlaClient client(pipe_socket);&lt;br /&gt;
   if (!client.Setup())&lt;br /&gt;
     return -1;&lt;br /&gt;
 &lt;br /&gt;
   // At this point the client is setup. We then need to setup the LLAServer&lt;br /&gt;
   // ...&lt;br /&gt;
 &lt;br /&gt;
   // Once that is done we add the pipe as a new connection&lt;br /&gt;
   lla_server-&amp;gt;NewConnection(m_pipe_socket-&amp;gt;OppositeEnd());&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This example shows how we can create our own instance of a &#039;&#039;ConnectedSocket&#039;&#039; (&#039;&#039;PipeSocket&#039;&#039; is a subclass of &#039;&#039;ConnectedSocket&#039;&#039;) and pass it to the &#039;&#039;LlaClient&#039;&#039; to use. This code is very similar to what &#039;&#039;SimpleClient&#039;&#039; does under the hood.&lt;/div&gt;</summary>
		<author><name>216.239.45.4</name></author>
	</entry>
	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OLA_Client_API&amp;diff=2682</id>
		<title>OLA Client API</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=OLA_Client_API&amp;diff=2682"/>
		<updated>2009-02-17T23:45:44Z</updated>

		<summary type="html">&lt;p&gt;216.239.45.4: /* Example IV: More complex client */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; This refers to the most recent version of LLA [&amp;gt;= 0.3.0]&lt;br /&gt;
&lt;br /&gt;
LLA provides a client library which allows other applications to send/receive DMX as well as control the LLA server. To cater for different application requirements, helper classes as provided which can be used to do most of the client setup / management. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Example I: Sending an DMX update==&lt;br /&gt;
&lt;br /&gt;
This first client simply connects to the LLA Server and sends one DMX update. It&#039;s about as simple as you can get because it requires no callbacks and exits immediately. We use two classes in this example, &#039;&#039;lla::SimpleClient&#039;&#039;, and &#039;&#039;lla::LlaClient&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;lla/SimpleClient.h&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 int main() {&lt;br /&gt;
   // some dummy dmx data&lt;br /&gt;
   dmx_t dmx_data[] = {0, 128, 255};&lt;br /&gt;
 &lt;br /&gt;
   lla::SimpleClient simple_client;&lt;br /&gt;
   if (!simple_client.Setup())&lt;br /&gt;
     //setup failed&lt;br /&gt;
     return -1;&lt;br /&gt;
 &lt;br /&gt;
   // Get the underlying LlaClient&lt;br /&gt;
   lla::LlaClient *client = simple_client.GetClient();&lt;br /&gt;
 &lt;br /&gt;
   // Send the DMX data &lt;br /&gt;
   client-&amp;gt;SendDmx(1, dmx_data, sizeof(dmx_data));&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The main class used to communicate with the LLA Server is &#039;&#039;LlaClient&#039;&#039;. For ease of use, the &#039;&#039;SimpleClient&#039;&#039; class sets up &#039;&#039;LlaClient&#039;&#039; with a connection to an LLA Server running on the localhost:LLA_DEFAULT_PORT. You can call GetClient() on a &#039;&#039;SimpleClient&#039;&#039; instance to get a pointer to the underlying &#039;&#039;LlaClient&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Example II: Sending multiple updates==&lt;br /&gt;
&lt;br /&gt;
The previous example only sent a single DMX update before quitting. This next example adds a timeout which sends DMX every 50ms. This introduces a new class &#039;&#039;SelectServer&#039;&#039; which is used for registering timeouts.&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;lla/SimpleClient.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 // Maximum value of a dmx channel&lt;br /&gt;
 static const unsigned int MAX_DMX = 255;&lt;br /&gt;
 // How often to send updates&lt;br /&gt;
 static const unsigned int TIMEOUT_MS = 50;&lt;br /&gt;
 &lt;br /&gt;
 class DmxTimeout: public lla::select_server::TimeoutListener {&lt;br /&gt;
   public:&lt;br /&gt;
     DmxTimeout(lla::LlaClient *client):&lt;br /&gt;
       TimeoutListener(), m_tick(0), m_client(client) {}&lt;br /&gt;
 &lt;br /&gt;
     // Called on timeout&lt;br /&gt;
     int Timeout() {&lt;br /&gt;
       m_dmx_data[0] = MAX_DMX;&lt;br /&gt;
       m_dmx_data[1] = m_tick;&lt;br /&gt;
       m_dmx_data[2] = MAX_DMX - m_tick;&lt;br /&gt;
       m_client-&amp;gt;SendDmx(1, m_dmx_data, sizeof(m_dmx_data));&lt;br /&gt;
       m_tick++;&lt;br /&gt;
       m_tick %= MAX_DMX + 1;&lt;br /&gt;
     }&lt;br /&gt;
   private:&lt;br /&gt;
     unsigned int m_tick;&lt;br /&gt;
     dmx_t m_dmx_data[3];&lt;br /&gt;
     lla::LlaClient *m_client;&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 int main() {&lt;br /&gt;
   lla::SimpleClient simple_client;&lt;br /&gt;
 &lt;br /&gt;
   if (!simple_client.Setup())&lt;br /&gt;
     return -1;&lt;br /&gt;
                                                                                                                                                &lt;br /&gt;
   lla::select_server::SelectServer *ss = simple_client.GetSelectServer();&lt;br /&gt;
   // Create a timeout and register it&lt;br /&gt;
   DmxTimeout timeout(simple_client.GetClient());&lt;br /&gt;
   ss-&amp;gt;RegisterTimeout(TIMEOUT_MS, &amp;amp;timeout);&lt;br /&gt;
   &lt;br /&gt;
   // Start the main loop&lt;br /&gt;
   ss-&amp;gt;Run();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In this example we create &#039;&#039;DmxTimeout&#039;&#039; class whose &#039;&#039;Timeout()&#039;&#039; method is called every time the timer expires. We use the &#039;&#039;Timeout()&#039;&#039; method to send DMX data.&lt;br /&gt;
&lt;br /&gt;
The other important part here is the &#039;&#039;SelectServer&#039;&#039;. As well as the &#039;&#039;RegisterTimeout&#039;&#039; method we&#039;ve used above, this can also be used to register sockets so we can respond to network activity. The &#039;&#039;Run()&#039;&#039; method starts the main event processing loop which will halt if an error occurs or &#039;&#039;Terminate()&#039;&#039; is called.&lt;br /&gt;
&lt;br /&gt;
==Example III: Receiving DMX data==&lt;br /&gt;
&lt;br /&gt;
The third example shows how to listen and respond to event from the LLA server.&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;lla/SimpleClient.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 static const unsigned int UNIVERSE = 1;&lt;br /&gt;
 &lt;br /&gt;
 class OurObserver: public lla::LlaClientObserver {&lt;br /&gt;
   public:&lt;br /&gt;
     // Called when new DMX values arrive&lt;br /&gt;
     void NewDmx(unsigned int universe, unsigned int length,&lt;br /&gt;
                 dmx_t *data, const std::string &amp;amp;error) {&lt;br /&gt;
       printf(&amp;quot;received %d channels for universe %d\n&amp;quot;,&lt;br /&gt;
              length, universe);&lt;br /&gt;
     }&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 int main() {&lt;br /&gt;
   lla::SimpleClient simple_client;&lt;br /&gt;
   OurObserver observer;&lt;br /&gt;
 &lt;br /&gt;
   if (!simple_client.Setup())&lt;br /&gt;
     return -1;&lt;br /&gt;
 &lt;br /&gt;
   lla::LlaClient *client = simple_client.GetClient();&lt;br /&gt;
   // Set the observer and register our interest in this universe&lt;br /&gt;
   client-&amp;gt;SetObserver(&amp;amp;observer);&lt;br /&gt;
   client-&amp;gt;RegisterUniverse(UNIVERSE, lla::REGISTER);&lt;br /&gt;
   simple_client.GetSelectServer()-&amp;gt;Run();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Here we inherit from the &#039;&#039;LlaClientObserver&#039;&#039; class and override the methods we&#039;re interested in receiving notification for.&lt;br /&gt;
&lt;br /&gt;
In the main function we set the observer object and register our interest in a universe.&lt;br /&gt;
&lt;br /&gt;
==Example IV: More complex client==&lt;br /&gt;
&lt;br /&gt;
The above is all well and good but what if the main application has it&#039;s own event processing loop? An example of this is a GTK/Glib application which uses GMainLoop.&lt;br /&gt;
&lt;br /&gt;
On the other hand, what if you&#039;re not connecting to the LLA Server over TCP? Sometimes it may be desirable to embed the LLA server within the main application.&lt;br /&gt;
&lt;br /&gt;
Bypassing the SimpleClient and using LlaClient directly addresses both these problems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;lla/LlaClient.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;lla/select_server/SelectServer.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;lla/select_server/Socket.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 using lla::select_server::PipeSocket;&lt;br /&gt;
 &lt;br /&gt;
 int main() {&lt;br /&gt;
   // Create the select server&lt;br /&gt;
   lla::select_server::SelectServer ss;&lt;br /&gt;
 &lt;br /&gt;
   // Create the pipe socket to talk to the server on&lt;br /&gt;
   PipeSocket *pipe_socket = new PipeSocket();&lt;br /&gt;
   if (!pipe_socket-&amp;gt;Init())&lt;br /&gt;
     return -1;&lt;br /&gt;
 &lt;br /&gt;
   // Remember to add this socket to the SelectServer&lt;br /&gt;
   ss.AddSocket(pipe_socket);&lt;br /&gt;
 &lt;br /&gt;
   // Setup the LlaClient&lt;br /&gt;
   lla::LlaClient client(pipe_socket);&lt;br /&gt;
   if (!client.Setup())&lt;br /&gt;
     return -1;&lt;br /&gt;
 &lt;br /&gt;
   // At this point the client is setup. We then need to setup the LLAServer&lt;br /&gt;
   // ...&lt;br /&gt;
 &lt;br /&gt;
   // Once that is done we add the pipe as a new connection&lt;br /&gt;
   lla_server-&amp;gt;NewConnection(m_pipe_socket-&amp;gt;OppositeEnd());&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This example shows how we can create our own instance of a &#039;&#039;ConnectedSocket&#039;&#039; (&#039;&#039;PipeSocket&#039;&#039; is a subclass of &#039;&#039;ConnectedSocket&#039;&#039;) and pass it to the &#039;&#039;LlaClient&#039;&#039; to use. This code is very similar to what &#039;&#039;SimpleClient&#039;&#039; does under the hood.&lt;/div&gt;</summary>
		<author><name>216.239.45.4</name></author>
	</entry>
	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OLA_Client_API&amp;diff=2681</id>
		<title>OLA Client API</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=OLA_Client_API&amp;diff=2681"/>
		<updated>2009-02-17T22:54:33Z</updated>

		<summary type="html">&lt;p&gt;216.239.45.4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Note:&#039;&#039;&#039; This refers to the most recent version of LLA [&amp;gt;= 0.3.0]&lt;br /&gt;
&lt;br /&gt;
LLA provides a client library which allows other applications to send/receive DMX as well as control the LLA server. To cater for different application requirements, helper classes as provided which can be used to do most of the client setup / management. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Example I: Sending an DMX update==&lt;br /&gt;
&lt;br /&gt;
This first client simply connects to the LLA Server and sends one DMX update. It&#039;s about as simple as you can get because it requires no callbacks and exits immediately. We use two classes in this example, &#039;&#039;lla::SimpleClient&#039;&#039;, and &#039;&#039;lla::LlaClient&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;lla/SimpleClient.h&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 int main() {&lt;br /&gt;
   // some dummy dmx data&lt;br /&gt;
   dmx_t dmx_data[] = {0, 128, 255};&lt;br /&gt;
 &lt;br /&gt;
   lla::SimpleClient simple_client;&lt;br /&gt;
   if (!simple_client.Setup())&lt;br /&gt;
     //setup failed&lt;br /&gt;
     return -1;&lt;br /&gt;
 &lt;br /&gt;
   // Get the underlying LlaClient&lt;br /&gt;
   lla::LlaClient *client = simple_client.GetClient();&lt;br /&gt;
 &lt;br /&gt;
   // Send the DMX data &lt;br /&gt;
   client-&amp;gt;SendDmx(1, dmx_data, sizeof(dmx_data));&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The main class used to communicate with the LLA Server is &#039;&#039;LlaClient&#039;&#039;. For ease of use, the &#039;&#039;SimpleClient&#039;&#039; class sets up &#039;&#039;LlaClient&#039;&#039; with a connection to an LLA Server running on the localhost:LLA_DEFAULT_PORT. You can call GetClient() on a &#039;&#039;SimpleClient&#039;&#039; instance to get a pointer to the underlying &#039;&#039;LlaClient&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Example II: Sending multiple updates==&lt;br /&gt;
&lt;br /&gt;
The previous example only sent a single DMX update before quitting. This next example adds a timeout which sends DMX every 50ms. This introduces a new class &#039;&#039;SelectServer&#039;&#039; which is used for registering timeouts.&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;lla/SimpleClient.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 // Maximum value of a dmx channel&lt;br /&gt;
 static const unsigned int MAX_DMX = 255;&lt;br /&gt;
 // How often to send updates&lt;br /&gt;
 static const unsigned int TIMEOUT_MS = 50;&lt;br /&gt;
 &lt;br /&gt;
 class DmxTimeout: public lla::select_server::TimeoutListener {&lt;br /&gt;
   public:&lt;br /&gt;
     DmxTimeout(lla::LlaClient *client):&lt;br /&gt;
       TimeoutListener(), m_tick(0), m_client(client) {}&lt;br /&gt;
 &lt;br /&gt;
     // Called on timeout&lt;br /&gt;
     int Timeout() {&lt;br /&gt;
       m_dmx_data[0] = MAX_DMX;&lt;br /&gt;
       m_dmx_data[1] = m_tick;&lt;br /&gt;
       m_dmx_data[2] = MAX_DMX - m_tick;&lt;br /&gt;
       m_client-&amp;gt;SendDmx(1, m_dmx_data, sizeof(m_dmx_data));&lt;br /&gt;
       m_tick++;&lt;br /&gt;
       m_tick %= MAX_DMX + 1;&lt;br /&gt;
     }&lt;br /&gt;
   private:&lt;br /&gt;
     unsigned int m_tick;&lt;br /&gt;
     dmx_t m_dmx_data[3];&lt;br /&gt;
     lla::LlaClient *m_client;&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 int main() {&lt;br /&gt;
   lla::SimpleClient simple_client;&lt;br /&gt;
 &lt;br /&gt;
   if (!simple_client.Setup())&lt;br /&gt;
     return -1;&lt;br /&gt;
                                                                                                                                                &lt;br /&gt;
   lla::select_server::SelectServer *ss = simple_client.GetSelectServer();&lt;br /&gt;
   // Create a timeout and register it&lt;br /&gt;
   DmxTimeout timeout(simple_client.GetClient());&lt;br /&gt;
   ss-&amp;gt;RegisterTimeout(TIMEOUT_MS, &amp;amp;timeout);&lt;br /&gt;
   &lt;br /&gt;
   // Start the main loop&lt;br /&gt;
   ss-&amp;gt;Run();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In this example we create &#039;&#039;DmxTimeout&#039;&#039; class whose &#039;&#039;Timeout()&#039;&#039; method is called every time the timer expires. We use the &#039;&#039;Timeout()&#039;&#039; method to send DMX data.&lt;br /&gt;
&lt;br /&gt;
The other important part here is the &#039;&#039;SelectServer&#039;&#039;. As well as the &#039;&#039;RegisterTimeout&#039;&#039; method we&#039;ve used above, this can also be used to register sockets so we can respond to network activity. The &#039;&#039;Run()&#039;&#039; method starts the main event processing loop which will halt if an error occurs or &#039;&#039;Terminate()&#039;&#039; is called.&lt;br /&gt;
&lt;br /&gt;
==Example III: Receiving DMX data==&lt;br /&gt;
&lt;br /&gt;
The third example shows how to listen and respond to event from the LLA server.&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;lla/SimpleClient.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 static const unsigned int UNIVERSE = 1;&lt;br /&gt;
 &lt;br /&gt;
 class OurObserver: public lla::LlaClientObserver {&lt;br /&gt;
   public:&lt;br /&gt;
     // Called when new DMX values arrive&lt;br /&gt;
     void NewDmx(unsigned int universe, unsigned int length,&lt;br /&gt;
                 dmx_t *data, const std::string &amp;amp;error) {&lt;br /&gt;
       printf(&amp;quot;received %d channels for universe %d\n&amp;quot;,&lt;br /&gt;
              length, universe);&lt;br /&gt;
     }&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 int main() {&lt;br /&gt;
   lla::SimpleClient simple_client;&lt;br /&gt;
   OurObserver observer;&lt;br /&gt;
 &lt;br /&gt;
   if (!simple_client.Setup())&lt;br /&gt;
     return -1;&lt;br /&gt;
 &lt;br /&gt;
   lla::LlaClient *client = simple_client.GetClient();&lt;br /&gt;
   // Set the observer and register our interest in this universe&lt;br /&gt;
   client-&amp;gt;SetObserver(&amp;amp;observer);&lt;br /&gt;
   client-&amp;gt;RegisterUniverse(UNIVERSE, lla::REGISTER);&lt;br /&gt;
   simple_client.GetSelectServer()-&amp;gt;Run();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Here we inherit from the &#039;&#039;LlaClientObserver&#039;&#039; class and override the methods we&#039;re interested in receiving notification for.&lt;br /&gt;
&lt;br /&gt;
In the main function we set the observer object and register our interest in a universe.&lt;br /&gt;
&lt;br /&gt;
==Example IV: More complex client==&lt;/div&gt;</summary>
		<author><name>216.239.45.4</name></author>
	</entry>
	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OLA_Client_API&amp;diff=2680</id>
		<title>OLA Client API</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=OLA_Client_API&amp;diff=2680"/>
		<updated>2009-02-17T22:48:17Z</updated>

		<summary type="html">&lt;p&gt;216.239.45.4: /* Example III: Receiving DMX data */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;LLA provides a client library which allows other applications to send/receive DMX as well as control the LLA server. To cater for different application requirements, helper classes as provided which can be used to do most of the client setup / management. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Example I: Sending an DMX update==&lt;br /&gt;
&lt;br /&gt;
This first client simply connects to the LLA Server and sends one DMX update. It&#039;s about as simple as you can get because it requires no callbacks and exits immediately. We use two classes in this example, &#039;&#039;lla::SimpleClient&#039;&#039;, and &#039;&#039;lla::LlaClient&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;lla/SimpleClient.h&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 int main() {&lt;br /&gt;
   // some dummy dmx data&lt;br /&gt;
   dmx_t dmx_data[] = {0, 128, 255};&lt;br /&gt;
 &lt;br /&gt;
   lla::SimpleClient simple_client;&lt;br /&gt;
   if (!simple_client.Setup())&lt;br /&gt;
     //setup failed&lt;br /&gt;
     return -1;&lt;br /&gt;
 &lt;br /&gt;
   // Get the underlying LlaClient&lt;br /&gt;
   lla::LlaClient *client = simple_client.GetClient();&lt;br /&gt;
 &lt;br /&gt;
   // Send the DMX data &lt;br /&gt;
   client-&amp;gt;SendDmx(1, dmx_data, sizeof(dmx_data));&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The main class used to communicate with the LLA Server is &#039;&#039;LlaClient&#039;&#039;. For ease of use, the &#039;&#039;SimpleClient&#039;&#039; class sets up &#039;&#039;LlaClient&#039;&#039; with a connection to an LLA Server running on the localhost:LLA_DEFAULT_PORT. You can call GetClient() on a &#039;&#039;SimpleClient&#039;&#039; instance to get a pointer to the underlying &#039;&#039;LlaClient&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Example II: Sending multiple updates==&lt;br /&gt;
&lt;br /&gt;
The previous example only sent a single DMX update before quitting. This next example adds a timeout which sends DMX every 50ms. This introduces a new class &#039;&#039;SelectServer&#039;&#039; which is used for registering timeouts.&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;lla/SimpleClient.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 // Maximum value of a dmx channel&lt;br /&gt;
 static const unsigned int MAX_DMX = 255;&lt;br /&gt;
 // How often to send updates&lt;br /&gt;
 static const unsigned int TIMEOUT_MS = 50;&lt;br /&gt;
 &lt;br /&gt;
 class DmxTimeout: public lla::select_server::TimeoutListener {&lt;br /&gt;
   public:&lt;br /&gt;
     DmxTimeout(lla::LlaClient *client):&lt;br /&gt;
       TimeoutListener(), m_tick(0), m_client(client) {}&lt;br /&gt;
 &lt;br /&gt;
     // Called on timeout&lt;br /&gt;
     int Timeout() {&lt;br /&gt;
       m_dmx_data[0] = MAX_DMX;&lt;br /&gt;
       m_dmx_data[1] = m_tick;&lt;br /&gt;
       m_dmx_data[2] = MAX_DMX - m_tick;&lt;br /&gt;
       m_client-&amp;gt;SendDmx(1, m_dmx_data, sizeof(m_dmx_data));&lt;br /&gt;
       m_tick++;&lt;br /&gt;
       m_tick %= MAX_DMX + 1;&lt;br /&gt;
     }&lt;br /&gt;
   private:&lt;br /&gt;
     unsigned int m_tick;&lt;br /&gt;
     dmx_t m_dmx_data[3];&lt;br /&gt;
     lla::LlaClient *m_client;&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 int main() {&lt;br /&gt;
   lla::SimpleClient simple_client;&lt;br /&gt;
 &lt;br /&gt;
   if (!simple_client.Setup())&lt;br /&gt;
     return -1;&lt;br /&gt;
                                                                                                                                                &lt;br /&gt;
   lla::select_server::SelectServer *ss = simple_client.GetSelectServer();&lt;br /&gt;
   // Create a timeout and register it&lt;br /&gt;
   DmxTimeout timeout(simple_client.GetClient());&lt;br /&gt;
   ss-&amp;gt;RegisterTimeout(TIMEOUT_MS, &amp;amp;timeout);&lt;br /&gt;
   &lt;br /&gt;
   // Start the main loop&lt;br /&gt;
   ss-&amp;gt;Run();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In this example we create &#039;&#039;DmxTimeout&#039;&#039; class whose &#039;&#039;Timeout()&#039;&#039; method is called every time the timer expires. We use the &#039;&#039;Timeout()&#039;&#039; method to send DMX data.&lt;br /&gt;
&lt;br /&gt;
The other important part here is the &#039;&#039;SelectServer&#039;&#039;. As well as the &#039;&#039;RegisterTimeout&#039;&#039; method we&#039;ve used above, this can also be used to register sockets so we can respond to network activity. The &#039;&#039;Run()&#039;&#039; method starts the main event processing loop which will halt if an error occurs or &#039;&#039;Terminate()&#039;&#039; is called.&lt;br /&gt;
&lt;br /&gt;
==Example III: Receiving DMX data==&lt;br /&gt;
&lt;br /&gt;
The third example shows how to listen and respond to event from the LLA server.&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;lla/SimpleClient.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 static const unsigned int UNIVERSE = 1;&lt;br /&gt;
 &lt;br /&gt;
 class OurObserver: public lla::LlaClientObserver {&lt;br /&gt;
   public:&lt;br /&gt;
     // Called when new DMX values arrive&lt;br /&gt;
     void NewDmx(unsigned int universe, unsigned int length,&lt;br /&gt;
                 dmx_t *data, const std::string &amp;amp;error) {&lt;br /&gt;
       printf(&amp;quot;received %d channels for universe %d\n&amp;quot;,&lt;br /&gt;
              length, universe);&lt;br /&gt;
     }&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 int main() {&lt;br /&gt;
   lla::SimpleClient simple_client;&lt;br /&gt;
   OurObserver observer;&lt;br /&gt;
 &lt;br /&gt;
   if (!simple_client.Setup())&lt;br /&gt;
     return -1;&lt;br /&gt;
 &lt;br /&gt;
   lla::LlaClient *client = simple_client.GetClient();&lt;br /&gt;
   // Set the observer and register our interest in this universe&lt;br /&gt;
   client-&amp;gt;SetObserver(&amp;amp;observer);&lt;br /&gt;
   client-&amp;gt;RegisterUniverse(UNIVERSE, lla::REGISTER);&lt;br /&gt;
   simple_client.GetSelectServer()-&amp;gt;Run();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Here we inherit from the &#039;&#039;LlaClientObserver&#039;&#039; class and override the methods we&#039;re interested in receiving notification for.&lt;br /&gt;
&lt;br /&gt;
In the main function we set the observer object and register our interest in a universe.&lt;br /&gt;
&lt;br /&gt;
==Example IV: More complex client==&lt;/div&gt;</summary>
		<author><name>216.239.45.4</name></author>
	</entry>
	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OLA_Client_API&amp;diff=2679</id>
		<title>OLA Client API</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=OLA_Client_API&amp;diff=2679"/>
		<updated>2009-02-17T22:33:48Z</updated>

		<summary type="html">&lt;p&gt;216.239.45.4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;LLA provides a client library which allows other applications to send/receive DMX as well as control the LLA server. To cater for different application requirements, helper classes as provided which can be used to do most of the client setup / management. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Example I: Sending an DMX update==&lt;br /&gt;
&lt;br /&gt;
This first client simply connects to the LLA Server and sends one DMX update. It&#039;s about as simple as you can get because it requires no callbacks and exits immediately. We use two classes in this example, &#039;&#039;lla::SimpleClient&#039;&#039;, and &#039;&#039;lla::LlaClient&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;lla/SimpleClient.h&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
 int main() {&lt;br /&gt;
   // some dummy dmx data&lt;br /&gt;
   dmx_t dmx_data[] = {0, 128, 255};&lt;br /&gt;
 &lt;br /&gt;
   lla::SimpleClient simple_client;&lt;br /&gt;
   if (!simple_client.Setup())&lt;br /&gt;
     //setup failed&lt;br /&gt;
     return -1;&lt;br /&gt;
 &lt;br /&gt;
   // Get the underlying LlaClient&lt;br /&gt;
   lla::LlaClient *client = simple_client.GetClient();&lt;br /&gt;
 &lt;br /&gt;
   // Send the DMX data &lt;br /&gt;
   client-&amp;gt;SendDmx(1, dmx_data, sizeof(dmx_data));&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The main class used to communicate with the LLA Server is &#039;&#039;LlaClient&#039;&#039;. For ease of use, the &#039;&#039;SimpleClient&#039;&#039; class sets up &#039;&#039;LlaClient&#039;&#039; with a connection to an LLA Server running on the localhost:LLA_DEFAULT_PORT. You can call GetClient() on a &#039;&#039;SimpleClient&#039;&#039; instance to get a pointer to the underlying &#039;&#039;LlaClient&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Example II: Sending multiple updates==&lt;br /&gt;
&lt;br /&gt;
The previous example only sent a single DMX update before quitting. This next example adds a timeout which sends DMX every 50ms. This introduces a new class &#039;&#039;SelectServer&#039;&#039; which is used for registering timeouts.&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;lla/SimpleClient.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 // Maximum value of a dmx channel&lt;br /&gt;
 static const unsigned int MAX_DMX = 255;&lt;br /&gt;
 // How often to send updates&lt;br /&gt;
 static const unsigned int TIMEOUT_MS = 50;&lt;br /&gt;
 &lt;br /&gt;
 class DmxTimeout: public lla::select_server::TimeoutListener {&lt;br /&gt;
   public:&lt;br /&gt;
     DmxTimeout(lla::LlaClient *client):&lt;br /&gt;
       TimeoutListener(), m_tick(0), m_client(client) {}&lt;br /&gt;
 &lt;br /&gt;
     // Called on timeout&lt;br /&gt;
     int Timeout() {&lt;br /&gt;
       m_dmx_data[0] = MAX_DMX;&lt;br /&gt;
       m_dmx_data[1] = m_tick;&lt;br /&gt;
       m_dmx_data[2] = MAX_DMX - m_tick;&lt;br /&gt;
       m_client-&amp;gt;SendDmx(1, m_dmx_data, sizeof(m_dmx_data));&lt;br /&gt;
       m_tick++;&lt;br /&gt;
       m_tick %= MAX_DMX + 1;&lt;br /&gt;
     }&lt;br /&gt;
   private:&lt;br /&gt;
     unsigned int m_tick;&lt;br /&gt;
     dmx_t m_dmx_data[3];&lt;br /&gt;
     lla::LlaClient *m_client;&lt;br /&gt;
 };&lt;br /&gt;
 &lt;br /&gt;
 int main() {&lt;br /&gt;
   lla::SimpleClient simple_client;&lt;br /&gt;
 &lt;br /&gt;
   if (!simple_client.Setup())&lt;br /&gt;
     return -1;&lt;br /&gt;
                                                                                                                                                &lt;br /&gt;
   lla::select_server::SelectServer *ss = simple_client.GetSelectServer();&lt;br /&gt;
   // Create a timeout and register it&lt;br /&gt;
   DmxTimeout timeout(simple_client.GetClient());&lt;br /&gt;
   ss-&amp;gt;RegisterTimeout(TIMEOUT_MS, &amp;amp;timeout);&lt;br /&gt;
   &lt;br /&gt;
   // Start the main loop&lt;br /&gt;
   ss-&amp;gt;Run();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In this example we create &#039;&#039;DmxTimeout&#039;&#039; class whose &#039;&#039;Timeout()&#039;&#039; method is called every time the timer expires. We use the &#039;&#039;Timeout()&#039;&#039; method to send DMX data.&lt;br /&gt;
&lt;br /&gt;
The other important part here is the &#039;&#039;SelectServer&#039;&#039;. As well as the &#039;&#039;RegisterTimeout&#039;&#039; method we&#039;ve used above, this can also be used to register sockets so we can respond to network activity. The &#039;&#039;Run()&#039;&#039; method starts the main event processing loop which will halt if an error occurs or &#039;&#039;Terminate()&#039;&#039; is called.&lt;br /&gt;
&lt;br /&gt;
==Example III: Receiving DMX data==&lt;br /&gt;
&lt;br /&gt;
==Example IV: More complex client==&lt;/div&gt;</summary>
		<author><name>216.239.45.4</name></author>
	</entry>
	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OLA_on_Linux&amp;diff=2653</id>
		<title>OLA on Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=OLA_on_Linux&amp;diff=2653"/>
		<updated>2009-02-07T02:10:22Z</updated>

		<summary type="html">&lt;p&gt;216.239.45.4: /* Configure */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Installing LLA on Debian From GIT/Archive=&lt;br /&gt;
&lt;br /&gt;
This describes how to get LLA working on a Debian system. It should be pretty similar for any other Linux based OS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Checkout or Download an Archive==&lt;br /&gt;
&lt;br /&gt;
 git clone xxxx&lt;br /&gt;
&lt;br /&gt;
==Install libraries==&lt;br /&gt;
&lt;br /&gt;
You need a couple of libraries installed for everything to work correctly. Some of these are available as Debian packages but others need to be downloaded.&lt;br /&gt;
&lt;br /&gt;
First up we&#039;ll need microhttpd for the embedded web server (Note: if you want the dmx console to work you need the latest svn version):&lt;br /&gt;
&lt;br /&gt;
With apt:&lt;br /&gt;
&lt;br /&gt;
  apt-get install libmicrohttpd-dev libmicrohttpd4 libcppunit-dev libcppunit-1.12-1&lt;br /&gt;
&lt;br /&gt;
From source or debian packages:&lt;br /&gt;
&lt;br /&gt;
  libprotobuf2, libprotobuf-dev, protobuf-compiler&lt;br /&gt;
  [http://code.google.com/p/protobuf/ ProtocolBuffers]&lt;br /&gt;
&lt;br /&gt;
From source:&lt;br /&gt;
&lt;br /&gt;
  [http://code.google.com/p/google-ctemplate/ CTemplate]&lt;br /&gt;
&lt;br /&gt;
Finally run ldconfig as root to pick up the new libraries&lt;br /&gt;
&lt;br /&gt;
  ldconfig&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Configure==&lt;br /&gt;
&lt;br /&gt;
If you checked out the sources from git, you&#039;ll need to run&lt;br /&gt;
&lt;br /&gt;
  autoreconf -i&lt;br /&gt;
&lt;br /&gt;
After that run&lt;br /&gt;
&lt;br /&gt;
  ./configure&lt;br /&gt;
&lt;br /&gt;
==Building &amp;amp; Testing==&lt;br /&gt;
&lt;br /&gt;
Build&lt;br /&gt;
  make&lt;br /&gt;
&lt;br /&gt;
Run the tests&lt;br /&gt;
  make check&lt;br /&gt;
&lt;br /&gt;
And install LLA&lt;br /&gt;
  sudo make install&lt;/div&gt;</summary>
		<author><name>216.239.45.4</name></author>
	</entry>
	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OLA_on_OS_X&amp;diff=2652</id>
		<title>OLA on OS X</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=OLA_on_OS_X&amp;diff=2652"/>
		<updated>2009-02-07T02:06:49Z</updated>

		<summary type="html">&lt;p&gt;216.239.45.4: /* Run autoreconf */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page describes how to get LLA 0.3 working on OS X. &lt;br /&gt;
&lt;br /&gt;
== Basic setup ==&lt;br /&gt;
&lt;br /&gt;
* Install xcode&lt;br /&gt;
* install git&lt;br /&gt;
* install mac ports [[http://www.macports.org/]]&lt;br /&gt;
&lt;br /&gt;
== Use Mac Ports to install stuff==&lt;br /&gt;
&lt;br /&gt;
 $ port install pkgconfig protobuf-cpp cppunit unittest-cpp&lt;br /&gt;
&lt;br /&gt;
== Set some env vars==&lt;br /&gt;
&lt;br /&gt;
set $PATH to point to something sane&lt;br /&gt;
&lt;br /&gt;
 export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig&lt;br /&gt;
 export CPPFLAGS=&amp;quot;-I/opt/local/var/macports/software/protobuf-cpp/2.0.2_0/opt/local/include/&amp;quot;&lt;br /&gt;
 export LDFLAGS=&amp;quot;-L/opt/local/var/macports/software/protobuf-cpp/2.0.2_0/opt/local/lib/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Optionally install microhttpd and ctemplate==&lt;br /&gt;
&lt;br /&gt;
If you want the http interface you need these&lt;br /&gt;
&lt;br /&gt;
* http://www.gnu.org/software/libmicrohttpd/&lt;br /&gt;
* http://code.google.com/p/google-ctemplate/&lt;br /&gt;
&lt;br /&gt;
== Run autoreconf==&lt;br /&gt;
&lt;br /&gt;
If this is the first time run with -i to install the missing files&lt;br /&gt;
&lt;br /&gt;
 autoconf -i&lt;br /&gt;
&lt;br /&gt;
== Do the usual steps==&lt;br /&gt;
&lt;br /&gt;
 ./configure&lt;br /&gt;
 make&lt;br /&gt;
 make check&lt;br /&gt;
 sudo make install&lt;/div&gt;</summary>
		<author><name>216.239.45.4</name></author>
	</entry>
	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OLA_on_Linux&amp;diff=2643</id>
		<title>OLA on Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=OLA_on_Linux&amp;diff=2643"/>
		<updated>2009-01-20T04:51:39Z</updated>

		<summary type="html">&lt;p&gt;216.239.45.4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Installing LLA on Debian From GIT/Archive=&lt;br /&gt;
&lt;br /&gt;
This describes how to get LLA working on a Debian system. It should be pretty similar for any other Linux based OS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Checkout or Download an Archive==&lt;br /&gt;
&lt;br /&gt;
 git clone xxxx&lt;br /&gt;
&lt;br /&gt;
==Install libraries==&lt;br /&gt;
&lt;br /&gt;
You need a couple of libraries installed for everything to work correctly. Some of these are available as Debian packages but others need to be downloaded.&lt;br /&gt;
&lt;br /&gt;
First up we&#039;ll need microhttpd for the embedded web server:&lt;br /&gt;
&lt;br /&gt;
With apt:&lt;br /&gt;
&lt;br /&gt;
  apt-get install libmicrohttpd-dev libmicrohttpd4 libcppunit-dev libcppunit-1.12-1&lt;br /&gt;
&lt;br /&gt;
From source or debian packages:&lt;br /&gt;
&lt;br /&gt;
  libprotobuf2, libprotobuf-dev, protobuf-compiler&lt;br /&gt;
  [http://code.google.com/p/protobuf/ ProtocolBuffers]&lt;br /&gt;
&lt;br /&gt;
From source:&lt;br /&gt;
&lt;br /&gt;
  [http://code.google.com/p/google-ctemplate/ CTemplate]&lt;br /&gt;
&lt;br /&gt;
Finally run ldconfig as root to pick up the new libraries&lt;br /&gt;
&lt;br /&gt;
  ldconfig&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Configure==&lt;br /&gt;
&lt;br /&gt;
If you checked out the sources from git, you&#039;ll need to run&lt;br /&gt;
&lt;br /&gt;
  autoreconf&lt;br /&gt;
&lt;br /&gt;
After that run&lt;br /&gt;
&lt;br /&gt;
  ./configure&lt;br /&gt;
&lt;br /&gt;
==Building &amp;amp; Testing==&lt;br /&gt;
&lt;br /&gt;
Build&lt;br /&gt;
  make&lt;br /&gt;
&lt;br /&gt;
Run the tests&lt;br /&gt;
  make check&lt;br /&gt;
&lt;br /&gt;
And install LLA&lt;br /&gt;
  sudo make install&lt;/div&gt;</summary>
		<author><name>216.239.45.4</name></author>
	</entry>
	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OLA_on_Linux&amp;diff=2642</id>
		<title>OLA on Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=OLA_on_Linux&amp;diff=2642"/>
		<updated>2009-01-19T17:32:04Z</updated>

		<summary type="html">&lt;p&gt;216.239.45.4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Installing LLA on Debian From GIT/Archive=&lt;br /&gt;
&lt;br /&gt;
This describes how to get LLA working on a Debian system. It should be pretty similar for any other Linux based OS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Checkout or Download an Archive==&lt;br /&gt;
&lt;br /&gt;
 git clone xxxx&lt;br /&gt;
&lt;br /&gt;
==Install libraries==&lt;br /&gt;
&lt;br /&gt;
You need a couple of libraries installed for everything to work correctly. Some of these are available as Debian packages but others need to be downloaded.&lt;br /&gt;
&lt;br /&gt;
First up we&#039;ll need microhttpd for the embedded web server:&lt;br /&gt;
&lt;br /&gt;
With apt:&lt;br /&gt;
&lt;br /&gt;
  apt-get install libmicrohttpd-dev libmicrohttpd4 libcppunit-dev libcppunit-1.12-1&lt;br /&gt;
&lt;br /&gt;
From source or debian packages:&lt;br /&gt;
&lt;br /&gt;
  libprotobuf2, libprotobuf-dev, protobuf-compiler&lt;br /&gt;
  [http://code.google.com/p/protobuf/ ProtocolBuffers]&lt;br /&gt;
&lt;br /&gt;
From source:&lt;br /&gt;
&lt;br /&gt;
  [http://code.google.com/p/google-ctemplate/ CTemplate]&lt;br /&gt;
&lt;br /&gt;
==Configure==&lt;br /&gt;
&lt;br /&gt;
If you checked out the sources from git, you&#039;ll need to run&lt;br /&gt;
&lt;br /&gt;
  autoreconf&lt;br /&gt;
&lt;br /&gt;
After that run&lt;br /&gt;
&lt;br /&gt;
  ./configure&lt;br /&gt;
&lt;br /&gt;
==Building &amp;amp; Testing==&lt;br /&gt;
&lt;br /&gt;
Build&lt;br /&gt;
  make&lt;br /&gt;
&lt;br /&gt;
Run the tests&lt;br /&gt;
  make check&lt;br /&gt;
&lt;br /&gt;
And install LLA&lt;br /&gt;
  sudo make install&lt;/div&gt;</summary>
		<author><name>216.239.45.4</name></author>
	</entry>
	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OLA_on_Linux&amp;diff=2641</id>
		<title>OLA on Linux</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=OLA_on_Linux&amp;diff=2641"/>
		<updated>2009-01-19T17:31:11Z</updated>

		<summary type="html">&lt;p&gt;216.239.45.4: New page: =Installing LLA on Debian From GIT/Archive=  This describes how to get LLA working on a Debian system. It should be pretty similar for any other Linux based OS.   ==Checkout or Download an...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Installing LLA on Debian From GIT/Archive=&lt;br /&gt;
&lt;br /&gt;
This describes how to get LLA working on a Debian system. It should be pretty similar for any other Linux based OS.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Checkout or Download an Archive==&lt;br /&gt;
&lt;br /&gt;
 git clone xxxx&lt;br /&gt;
&lt;br /&gt;
==Install libraries==&lt;br /&gt;
&lt;br /&gt;
You need a couple of libraries installed for everything to work correctly. Some of these are available as Debian packages but others need to be downloaded.&lt;br /&gt;
&lt;br /&gt;
First up we&#039;ll need microhttpd for the embedded web server:&lt;br /&gt;
&lt;br /&gt;
With apt:&lt;br /&gt;
&lt;br /&gt;
  apt-get install libmicrohttpd-dev libmicrohttpd4&lt;br /&gt;
&lt;br /&gt;
From source or debian packages:&lt;br /&gt;
&lt;br /&gt;
  libprotobuf2, libprotobuf-dev, protobuf-compiler&lt;br /&gt;
  [http://code.google.com/p/protobuf/ ProtocolBuffers]&lt;br /&gt;
&lt;br /&gt;
From source:&lt;br /&gt;
&lt;br /&gt;
  [http://code.google.com/p/google-ctemplate/ CTemplate]&lt;br /&gt;
&lt;br /&gt;
==Configure==&lt;br /&gt;
&lt;br /&gt;
If you checked out the sources from git, you&#039;ll need to run&lt;br /&gt;
&lt;br /&gt;
  autoreconf&lt;br /&gt;
&lt;br /&gt;
After that run&lt;br /&gt;
&lt;br /&gt;
  ./configure&lt;br /&gt;
&lt;br /&gt;
==Building &amp;amp; Testing==&lt;br /&gt;
&lt;br /&gt;
Build&lt;br /&gt;
  make&lt;br /&gt;
&lt;br /&gt;
Run the tests&lt;br /&gt;
  make check&lt;br /&gt;
&lt;br /&gt;
And install LLA&lt;br /&gt;
  sudo make install&lt;/div&gt;</summary>
		<author><name>216.239.45.4</name></author>
	</entry>
	<entry>
		<id>https://wiki.openlighting.org/index.php?title=OLA_0.3&amp;diff=2640</id>
		<title>OLA 0.3</title>
		<link rel="alternate" type="text/html" href="https://wiki.openlighting.org/index.php?title=OLA_0.3&amp;diff=2640"/>
		<updated>2009-01-18T18:49:52Z</updated>

		<summary type="html">&lt;p&gt;216.239.45.4: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page discusses the development release of LLA (0.3).&lt;br /&gt;
&lt;br /&gt;
==User facing changes==&lt;br /&gt;
&lt;br /&gt;
* (Optional) HTTP server with web interface for configuration&lt;br /&gt;
* Support for embedding&lt;br /&gt;
* OS X support&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Internal changes==&lt;br /&gt;
&lt;br /&gt;
* Completely new RPC system based on [[http://code.google.com/p/protobuf/ Protocol Buffers]]&lt;br /&gt;
* ExportMap&lt;br /&gt;
&lt;br /&gt;
==Still left to complete==&lt;br /&gt;
&lt;br /&gt;
* convert all the plugins to the new format&lt;br /&gt;
* convert the usb_pro binary to the new format&lt;br /&gt;
* check everything works under Linux correctly&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Other Docs==&lt;br /&gt;
&lt;br /&gt;
* [[LLA on OS X]]&lt;br /&gt;
* [[LLA on Debian]]&lt;/div&gt;</summary>
		<author><name>216.239.45.4</name></author>
	</entry>
</feed>