<?xml version="1.0" encoding="utf-8"?>
<Manual>
  <OTHERDATA NAME="Developer Kit">
    <INTRODUCTION PARAGRAPH1="Welcome to the Developer Kit tutorials. These tutorials will guide you through the use of the Developer Kit software."
                  PARAGRAPH2="The speed of the tutorials can be changed by selecting the arrows at the bottom right. Use the thumbnails on the right to skip through a tutorial. These functions are here to help you navigate through the tutorial at your own pace. "
                  PARAGRAPH3="The tutorials follow the basics of the developer kit using C++ in Visual Studio. If you are new to programming it is advisable that you spend some time learning programming basics before watching these tutorials. Hover over the left of the screen to reveal the menu and begin exploring the world of DMX software development!" />
  </OTHERDATA>

  <DOWNLOADS NAME="Downloads">
    <DOWNLOAD DATE="06/2010" FILE="Stand Alone Tutorials"
              PATH="suite2Tutorials.zip" />
  </DOWNLOADS>

  <HEADING NAME="Before we start">
    <TUTORIAL NAME="Introduction" PATH="videos/en/introduction.mp4"
              SOUND="audio/en/intro0.mp3">
      <POINT FRAME="2" ICON="thumbnails/en/intro1.jpg"
             INSTRUCTION="Welcome to the Developer Kit tutorials. The aim of this set of tutorials is to help you to quickly get familiar with your Developer Kit package"
             SOUND="audio/en/intro1.mp3" />

      <POINT FRAME="12" ICON="thumbnails/en/intro2.jpg"
             INSTRUCTION="You will need package with a SIUDI 5, 6, 7 or 8 DMX interface"
             SOUND="audio/en/intro2.mp3" />

      <POINT FRAME="18" ICON="thumbnails/en/intro3.jpg"
             INSTRUCTION="A PC or laptop computer running Microsoft Windows XP, Vista or Severn"
             SOUND="audio/en/intro3.mp3" />

      <POINT FRAME="25" ICON="thumbnails/en/intro4.jpg"
             INSTRUCTION="A compiler. We will be using Microsoft Visual studio in these tutorials. If you wish to program in the Delphi or Visual Basic languages, you can follow these tutorials to help grasp the concepts, however the syntax will be different"
             SOUND="audio/en/intro4.mp3" />

      <POINT FRAME="41" ICON="thumbnails/en/intro5.jpg"
             INSTRUCTION="Knowlege of programming in C++. If you have never programmed anything before, then perhaps the developer kit is not for you. However if you wish to learn, there are thousands of programming websites and tutorials out there. Try www.cprogramming.com then come back when you have finished the beginner tutorials!"
             SOUND="audio/en/intro5.mp3" />

      <POINT FRAME="68" ICON="thumbnails/en/intro6.jpg"
             INSTRUCTION="If you have an internet connection, we advise that you visit our website at www.nicolaudie.com and download the latest copy of the Developer Kit"
             SOUND="audio/en/intro6.mp3" />

      <POINT FRAME="85" ICON="thumbnails/en/intro7.jpg"
             INSTRUCTION="and remember..never connect your interface to your computer until the developer kit templates have been installed, otherwise Windows may try to choose a driver for you!"
             SOUND="audio/en/intro7.mp3" />
    </TUTORIAL>

    <TUTORIAL NAME="Connecting your DMX Devices"
              PATH="videos/en/interface.mp4"
              SOUND="audio/en/connectingDevices0.mp3">
      <POINT FRAME="4" ICON="thumbnails/en/connectingDevices1.jpg"
             INSTRUCTION="Connect the Male (3/5 pins) end of the XLR cable into your USB interface"
             SOUND="audio/en/connectingDevices1.mp3" />

      <POINT FRAME="9" ICON="thumbnails/en/connectingDevices2.jpg"
             INSTRUCTION="Connect the female (3/5 holes) end of the XLR into your first fixture"
             SOUND="audio/en/connectingDevices2.mp3" />

      <POINT FRAME="14" ICON="thumbnails/en/connectingDevices3.jpg"
             INSTRUCTION="Connect your interface to your computer if you have not done already"
             SOUND="audio/en/connectingDevices3.mp3" />
    </TUTORIAL>

    <TUTORIAL NAME="Software &amp; Hardware Installation"
              PATH="videos/en/softwareInstallation.mp4"
              SOUND="audio/en/softwareInstallation0.mp3">
      <POINT FRAME="3" ICON="thumbnails/en/softwareInstallation1.jpg"
             INSTRUCTION="You must install the software first, then install the hardware second"
             SOUND="audio/en/softwareInstallation1.mp3" />

      <POINT FRAME="9" ICON="thumbnails/en/softwareInstallation2.jpg"
             INSTRUCTION="Insert the Sunlite installation CD into the CD drive of the computer.  Wait for the software installation to begin automatically. If you've downloaded the software from our website, double click the setup icon"
             SOUND="audio/en/softwareInstallation2.mp3" />

      <POINT FRAME="38" ICON="thumbnails/en/softwareInstallation3.jpg"
             INSTRUCTION="Follow the on-screen instructions to install the software"
             SOUND="audio/en/softwareInstallation3.mp3" />

      <POINT FRAME="49" ICON="thumbnails/en/softwareInstallation4.jpg"
             INSTRUCTION="You may also need to install directx"
             SOUND="audio/en/softwareInstallation4.mp3" />
    </TUTORIAL>

    <TUTORIAL NAME="Included Files" PATH="videos/en/includedFiles.mp4"
              SOUND="audio/en/includedFiles0.mp3">
      <POINT FRAME="2" ICON="thumbnails/en/includedFiles1.jpg"
             INSTRUCTION="We offer sample projects in Delphi, Visual Basic and C++. The C++ example code is contained within the folder &quot;slmini2006&quot;"
             SOUND="audio/en/includedFiles1.mp3" />

      <POINT FRAME="18" ICON="thumbnails/en/includedFiles2.jpg"
             INSTRUCTION="To start with, take a look at the demo code. If you are a confident programmer, this may be all the information you need to get started"
             SOUND="audio/en/includedFiles2.mp3" />

      <POINT FRAME="45" ICON="thumbnails/en/includedFiles3.jpg"
             INSTRUCTION="A PDF file is included to explain the DLL function, how to open and close the interface, how to send DMX data and how to write to the standalone memory"
             SOUND="audio/en/includedFiles3.mp3" />

      <POINT FRAME="67" ICON="thumbnails/en/includedFiles4.jpg"
             INSTRUCTION="In the getting started tutorials, we will be creating a new C++ project. You will need the DasHard header file and the DasHard2006 files located in the src directory. Notice that there is a seperate DLL for use with Visual Basic"
             SOUND="audio/en/includedFiles4.mp3" />

      <POINT FRAME="87" ICON="thumbnails/en/includedFiles5.jpg"
             INSTRUCTION="The USB-DMX driver is installed automatically with the developer kit, this driver can be located here"
             SOUND="audio/en/includedFiles5.mp3" />
    </TUTORIAL>

    <TUTORIAL NAME="DasHard2006.dll" PATH="videos/en/dashard.mp4"
              SOUND="audio/en/dashard0.mp3">
      <POINT FRAME="3" ICON="thumbnails/en/dashard1.jpg"
             INSTRUCTION="DasHard2006.dll will enable you to communicate with your SIUDI 5 or SIUDI 6 interface using C++ or Delphi. Visual Basic programmers will require DasHard2006VB.dll"
             SOUND="audio/en/dashard1.mp3" />

      <POINT FRAME="20" ICON="thumbnails/en/dashard2.jpg"
             INSTRUCTION="The DLL contains just one function. int DasUsbCommand( int command, int param, unsigned char *bloc );"
             SOUND="audio/en/dashard2.mp3" />

      <POINT FRAME="25" ICON="thumbnails/en/dashard3.jpg"
             INSTRUCTION="The first parameter, 'command' defines the thing to do"
             SOUND="audio/en/dashard3.mp3" />

      <POINT FRAME="30" ICON="thumbnails/en/dashard4.jpg"
             INSTRUCTION="For a full list of commands, see the Developer Kit pdf"
             SOUND="audio/en/dashard4.mp3" />

      <POINT FRAME="35" ICON="thumbnails/en/dashard5.jpg"
             INSTRUCTION="All the constants DHC_OPEN, DHC_CLOSE etc.. are defined in the &quot;_DasHard.h&quot; include file"
             SOUND="audio/en/dashard5.mp3" />
    </TUTORIAL>
  </HEADING>

  <HEADING NAME="Getting Started">
    <TUTORIAL NAME="Creating a New Project" PATH="videos/en/newProject.mp4"
              SOUND="audio/en/newProject0.mp3">
      <POINT FRAME="3" ICON="thumbnails/en/newProject1.jpg"
             INSTRUCTION="This tutorial will guide you through the steps to make a simple DMX controller in Microsoft Visual Studio"
             SOUND="audio/en/newProject1.mp3" />

      <POINT FRAME="12" ICON="thumbnails/en/newProject2.jpg"
             INSTRUCTION="Click here to create a new project and choose a name. We will call our application dmxjockey"
             SOUND="audio/en/newProject2.mp3" />

      <POINT FRAME="30" ICON="thumbnails/en/newProject3.jpg"
             INSTRUCTION="We will be creating a Dialog based MFC application"
             SOUND="audio/en/newProject3.mp3" />

      <POINT FRAME="57" ICON="thumbnails/en/newProject4.jpg"
             INSTRUCTION="Once your project template has been created, copy across the DasHard DLL and Header files"
             SOUND="audio/en/newProject4.mp3" />

      <POINT FRAME="79" ICON="thumbnails/en/newProject5.jpg"
             INSTRUCTION="Open up the dmxJockey cpp file and add the header file"
             SOUND="audio/en/newProject5.mp3" />

      <POINT FRAME="97" ICON="thumbnails/en/newProject6.jpg"
             INSTRUCTION="It is now time to link the DLL with our application. Progress onto the next tutorial, &quot;Linking the DLL&quot;"
             SOUND="audio/en/newProject6.mp3" />
    </TUTORIAL>

    <TUTORIAL NAME="Linking the DLL" PATH="videos/en/linkingDll.mp4"
              SOUND="audio/en/linkingDll0.mp3">
      <POINT FRAME="2" ICON="thumbnails/en/linkingDll1.jpg"
             INSTRUCTION="To link the DLL with our program we need to start by defining an instance for the communication, we will call this g_dasusbdll. For now we will initialize this to NULL"
             SOUND="audio/en/linkingDll1.mp3" />

      <POINT FRAME="21" ICON="thumbnails/en/linkingDll2.jpg"
             INSTRUCTION="We now need to create a prototype to be used with the dll function described in the tutorial DasHard2006.dll. We will call this DASHARDCOMMAND. This prototype will consist of 2 integars and an unsigned char"
             SOUND="audio/en/linkingDll2.mp3" />

      <POINT FRAME="48" ICON="thumbnails/en/linkingDll3.jpg"
             INSTRUCTION="Next we will create an instance of this prototype and call this DasUsbCommand. Again, we will initialize this to NULL"
             SOUND="audio/en/linkingDll3.mp3" />

      <POINT FRAME="63" ICON="thumbnails/en/linkingDll4.jpg"
             INSTRUCTION="We will also need a value to tell us if the interface communication is open or not (for later). We will call this ref_open and initialize this to 0"
             SOUND="audio/en/linkingDll4.mp3" />

      <POINT FRAME="75" ICON="thumbnails/en/linkingDll5.jpg"
             INSTRUCTION="Now we are ready to open the DLL. Create a function called HardDllOpen. This function will return an integar"
             SOUND="audio/en/linkingDll5.mp3" />

      <POINT FRAME="89" ICON="thumbnails/en/linkingDll6.jpg"
             INSTRUCTION="We will first load our DLL into our instance g_dasusbdll"
             SOUND="audio/en/linkingDll6.mp3" />

      <POINT FRAME="110" ICON="thumbnails/en/linkingDll7.jpg"
             INSTRUCTION="At the moment, we are trying to cast a multi-byte string into a unicode string. One way to fix this is to go into properties and change the character set here"
             SOUND="audio/en/linkingDll7.mp3" />

      <POINT FRAME="137" ICON="thumbnails/en/linkingDll8.jpg"
             INSTRUCTION="If the cast is successfull we will then set up a link between our type and the function within the DLL"
             SOUND="audio/en/linkingDll8.mp3" />

      <POINT FRAME="185" ICON="thumbnails/en/linkingDll9.jpg"
             INSTRUCTION="If this is successful we can return 1"
             SOUND="audio/en/linkingDll9.mp3" />

      <POINT FRAME="201" ICON="thumbnails/en/linkingDll10.jpg"
             INSTRUCTION="We will now create a function to close the DLL, we will call this HardDllClose"
             SOUND="audio/en/linkingDll10.mp3" />

      <POINT FRAME="216" ICON="thumbnails/en/linkingDll11.jpg"
             INSTRUCTION="We first need to make sure that our DLL instance actually exists"
             SOUND="audio/en/linkingDll11.mp3" />

      <POINT FRAME="229" ICON="thumbnails/en/linkingDll12.jpg"
             INSTRUCTION="If it does, we will return FreeLibrary"
             SOUND="audio/en/linkingDll12.mp3" />

      <POINT FRAME="249" ICON="thumbnails/en/linkingDll13.jpg"
             INSTRUCTION="Finally we will make a quick cleaner function which will be called from the dialog cpp and will communicate with DasUsbCommand. We will call this HardDllCommand and it will be called whenever we need to speak with the hardware"
             SOUND="audio/en/linkingDll13.mp3" />
    </TUTORIAL>

    <TUTORIAL NAME="Opening and Closing the Interface"
              PATH="videos/en/openCloseInterface.mp4"
              SOUND="audio/en/openCloseInterface0.mp3">
      <POINT FRAME="3" ICON="thumbnails/en/openCloseInterface1.jpg"
             INSTRUCTION="The code to open and close the interface can be positioned in the initInstance function, before the dialog class instances are created"
             SOUND="audio/en/openCloseInterface1.mp3" />

      <POINT FRAME="42" ICON="thumbnails/en/openCloseInterface2.jpg"
             INSTRUCTION="We will start by creating an integer to store whether the DLL is open or not. We can link this to our HardDllOpen() function we created before"
             SOUND="audio/en/openCloseInterface2.mp3" />

      <POINT FRAME="62" ICON="thumbnails/en/openCloseInterface3.jpg"
             INSTRUCTION="If the DLL is open, we are ready to open up the interface communication. Type the following command: HardDllCommand(DHC_INIT,0,NULL);"
             SOUND="audio/en/openCloseInterface3.mp3" />

      <POINT FRAME="84" ICON="thumbnails/en/openCloseInterface4.jpg"
             INSTRUCTION="Remember that variable we created earlier on? ref_open. It is now time to assign this to the function we have just called. This will return weather the connection has been successfully created or not"
             SOUND="audio/en/openCloseInterface4.mp3" />

      <POINT FRAME="109" ICON="thumbnails/en/openCloseInterface5.jpg"
             INSTRUCTION="We'll add an error message if the DLL has not been found"
             SOUND="audio/en/openCloseInterface5.mp3" />

      <POINT FRAME="140" ICON="thumbnails/en/openCloseInterface6.jpg"
             INSTRUCTION="Finally, we will need to break the connection to the interface when the application is closed, insert the close command at the end of the program here"
             SOUND="audio/en/openCloseInterface6.mp3" />

      <POINT FRAME="190" ICON="thumbnails/en/openCloseInterface7.jpg"
             INSTRUCTION="It's now time to check to see if your program compiles. As we have modified some of the project settings, the program may fail at the embedding manifest stage. Try cleaning up your project if you get this error"
             SOUND="audio/en/openCloseInterface7.mp3" />
    </TUTORIAL>

    <TUTORIAL NAME="Sending a DMX Signal" PATH="videos/en/sendingDMX.mp4"
              SOUND="audio/en/sendingDMX0.mp3">
      <POINT FRAME="3" ICON="thumbnails/en/sendingDMX1.jpg"
             INSTRUCTION="From this point forward we will be working mostly in the dialog class. We need to include the header file here and copy the DLL function and ref_open variables"
             SOUND="audio/en/sendingDMX1.mp3" />

      <POINT FRAME="54" ICON="thumbnails/en/sendingDMX2.jpg"
             INSTRUCTION="We send a DMX signal in a 1 Universe, 512 byte block"
             SOUND="audio/en/sendingDMX2.mp3" />

      <POINT FRAME="60" ICON="thumbnails/en/sendingDMX3.jpg"
             INSTRUCTION="Let's add some code to set DMX channel 2 to 255 and set all other DMX channels to 0. We will add this code to the dialog initialize function"
             SOUND="audio/en/sendingDMX3.mp3" />

      <POINT FRAME="74" ICON="thumbnails/en/sendingDMX4.jpg"
             INSTRUCTION="We first need to set up our variable array to hold 512 values between 0 and 254"
             SOUND="audio/en/sendingDMX4.mp3" />

      <POINT FRAME="129" ICON="thumbnails/en/sendingDMX5.jpg"
             INSTRUCTION="We will now write a for loop to cycle through the values and set them to 0"
             SOUND="audio/en/sendingDMX5.mp3" />

      <POINT FRAME="172" ICON="thumbnails/en/sendingDMX6.jpg"
             INSTRUCTION="We need to remove the initialization which was automatically inserted when we created the dmxBlock variable"
             SOUND="audio/en/sendingDMX6.mp3" />

      <POINT FRAME="183" ICON="thumbnails/en/sendingDMX7.jpg"
             INSTRUCTION="Now let's set the second dmxBlock value to 254"
             SOUND="audio/en/sendingDMX7.mp3" />

      <POINT FRAME="194" ICON="thumbnails/en/sendingDMX8.jpg"
             INSTRUCTION="Finally, we need to output our value using the DHC_DMXOUT command"
             SOUND="audio/en/sendingDMX8.mp3" />

      <POINT FRAME="215" ICON="thumbnails/en/sendingDMX9.jpg"
             INSTRUCTION="Make sure your DMX fixture is connected and the DMX address of the fixture is set to 1. We advise that you test with a basic fixture such as an RGB LED par where the second DMX channel is GREEN. Hit F5 to compile! "
             SOUND="audio/en/sendingDMX9.mp3" />

      <POINT FRAME="235" ICON="thumbnails/en/sendingDMX10.jpg"
             INSTRUCTION="If you have followed the steps carefully, everything should be working. The fixture will stop responding after 5 seconds. This is because the interface automatically goes into stand-alone mode if it does not receive a DMX command every 5 seconds. Therefore it is necessary to make a timer function"
             SOUND="audio/en/sendingDMX10.mp3" />

      <POINT FRAME="257" ICON="thumbnails/en/sendingDMX11.jpg"
             INSTRUCTION="We will create a function which will run every 20ms. To set up the timer, write SetTimer. We'll give our timer an ID of 0. Enter 20ms and set the third parameter to NULL"
             SOUND="audio/en/sendingDMX11.mp3" />

      <POINT FRAME="275" ICON="thumbnails/en/sendingDMX12.jpg"
             INSTRUCTION="We also need to add some code to kill the timer when the program is closed. We will add this to an OnClose event handler"
             SOUND="audio/en/sendingDMX12.mp3" />

      <POINT FRAME="309" ICON="thumbnails/en/sendingDMX13.jpg"
             INSTRUCTION="The only parameter required is the timer ID we used in the SetTimer function, 0"
             SOUND="audio/en/sendingDMX13.mp3" />

      <POINT FRAME="318" ICON="thumbnails/en/sendingDMX14.jpg"
             INSTRUCTION="Now it is time to add our timer function"
             SOUND="audio/en/sendingDMX14.mp3" />

      <POINT FRAME="342" ICON="thumbnails/en/sendingDMX15.jpg"
             INSTRUCTION="Finally, we just need to copy our output message over to this function. Compile your application and you should see the same results as before, but this time the USB interface will not change to stand-alone mode"
             SOUND="audio/en/sendingDMX15.mp3" />
    </TUTORIAL>

    <TUTORIAL NAME="Adding a Graphical Channel Slider"
              PATH="videos/en/graphicalSlider.mp4"
              SOUND="audio/en/graphicalSlider0.mp3">
      <POINT FRAME="3" ICON="thumbnails/en/graphicalSlider1.jpg"
             INSTRUCTION="We can add a slider to change the DMX channel number and value. We will start by adding a slider to change the DMX channel value of channel 1"
             SOUND="audio/en/graphicalSlider1.mp3" />

      <POINT FRAME="15" ICON="thumbnails/en/graphicalSlider2.jpg"
             INSTRUCTION="Open up the toolbox and drag a slider control object onto the dialog. We will call this IDC_DMX_VALUE"
             SOUND="audio/en/graphicalSlider2.mp3" />

      <POINT FRAME="55" ICON="thumbnails/en/graphicalSlider3.jpg"
             INSTRUCTION="We'll also drag a static text object to tell us the value on the slider. We'll call this IDC_DMX_VALUE_TEXT"
             SOUND="audio/en/graphicalSlider3.mp3" />

      <POINT FRAME="75" ICON="thumbnails/en/graphicalSlider4.jpg"
             INSTRUCTION="We now need to add member variables for these objects. We will add the control variables m_dmxValue and m_dmxValueText"
             SOUND="audio/en/graphicalSlider4.mp3" />

      <POINT FRAME="115" ICON="thumbnails/en/graphicalSlider5.jpg"
             INSTRUCTION="We will now create an event handler for the slider. Choose the message type &quot;Custom Draw&quot;"
             SOUND="audio/en/graphicalSlider5.mp3" />

      <POINT FRAME="126" ICON="thumbnails/en/graphicalSlider6.jpg"
             INSTRUCTION="Let's create a function called changeDMXValue. This can then be called from the custom draw function"
             SOUND="audio/en/graphicalSlider6.mp3" />

      <POINT FRAME="170" ICON="thumbnails/en/graphicalSlider7.jpg"
             INSTRUCTION="We will create a string to show us the current DMX value. We can use the GetPos function to get the position of the slider"
             SOUND="audio/en/graphicalSlider7.mp3" />

      <POINT FRAME="209" ICON="thumbnails/en/graphicalSlider8.jpg"
             INSTRUCTION="We can now display this string using our static text object"
             SOUND="audio/en/graphicalSlider8.mp3" />

      <POINT FRAME="226" ICON="thumbnails/en/graphicalSlider9.jpg"
             INSTRUCTION="By default, the slider will output a value between 0 and 100. We must modify the range to 0 and 254"
             SOUND="audio/en/graphicalSlider9.mp3" />

      <POINT FRAME="257" ICON="thumbnails/en/graphicalSlider10.jpg"
             INSTRUCTION="The range goes from top to bottom, we want the range to go from bottom to top so we must always remember to take our value from 254"
             SOUND="audio/en/graphicalSlider10.mp3" />

      <POINT FRAME="268" ICON="thumbnails/en/graphicalSlider11.jpg"
             INSTRUCTION="Finally, we can copy our DMX block command and swap the constant value to the value from our slider"
             SOUND="audio/en/graphicalSlider11.mp3" />

      <POINT FRAME="301" ICON="thumbnails/en/graphicalSlider12.jpg"
             INSTRUCTION="Hit F5 and see if your new Slider works!"
             SOUND="audio/en/graphicalSlider12.mp3" />
    </TUTORIAL>

    <TUTORIAL NAME="Adding a Channel Selector Slider"
              PATH="videos/en/channelSlider.mp4"
              SOUND="audio/en/channelSlider0.mp3">
      <POINT FRAME="3" ICON="thumbnails/en/channelSlider1.jpg"
             INSTRUCTION="We now have a DMX value slider, however this only works on DMX channel 2. We will now create a second slider to change the channel number"
             SOUND="audio/en/channelSlider1.mp3" />

      <POINT FRAME="15" ICON="thumbnails/en/channelSlider2.jpg"
             INSTRUCTION="Drag a new text field and a new slider. Call these IDC_DMX_CHANNEL and IDC_DMX_CHANNEL_TEXT"
             SOUND="audio/en/channelSlider2.mp3" />

      <POINT FRAME="55" ICON="thumbnails/en/channelSlider3.jpg"
             INSTRUCTION="We now need to add the member variables for these objects. We will add the control variables m_channelValue and m_channelValueText"
             SOUND="audio/en/channelSlider3.mp3" />

      <POINT FRAME="89" ICON="thumbnails/en/channelSlider4.jpg"
             INSTRUCTION="Our new slider will need an event handler as with the channel Slider"
             SOUND="audio/en/channelSlider4.mp3" />

      <POINT FRAME="101" ICON="thumbnails/en/channelSlider5.jpg"
             INSTRUCTION="Next, we will create a function to change the channel"
             SOUND="audio/en/channelSlider5.mp3" />

      <POINT FRAME="122" ICON="thumbnails/en/channelSlider6.jpg"
             INSTRUCTION="Copy and paste the code from the channel slider event handler into the new function and change the text and member variables"
             SOUND="audio/en/channelSlider6.mp3" />

      <POINT FRAME="144" ICON="thumbnails/en/channelSlider7.jpg"
             INSTRUCTION="The channel range must go from 1 to 512. We no longer have to take our value away from 254"
             SOUND="audio/en/channelSlider7.mp3" />

      <POINT FRAME="176" ICON="thumbnails/en/channelSlider8.jpg"
             INSTRUCTION="Finally, modify our dmx block replace the 1 (channel 2) with the value from our channel slider minus 1. We also need to call our changeChannelValue() function from the channel slider event handler"
             SOUND="audio/en/channelSlider8.mp3" />

      <POINT FRAME="208" ICON="thumbnails/en/channelSlider9.jpg"
             INSTRUCTION="You now have full control over every channel of every fixture within your DMX universe!"
             SOUND="audio/en/channelSlider9.mp3" />

      <POINT FRAME="218" ICON="thumbnails/en/channelSlider10.jpg"
             INSTRUCTION="We could also add buttons to increment or decrement the channel and DMX value. Drag a button from the toolbox and then double click to edit"
             SOUND="audio/en/channelSlider10.mp3" />

      <POINT FRAME="255" ICON="thumbnails/en/channelSlider11.jpg"
             INSTRUCTION="We need to set the position of the channel slider based on its current position"
             SOUND="audio/en/channelSlider11.mp3" />

      <POINT FRAME="283" ICON="thumbnails/en/channelSlider12.jpg"
             INSTRUCTION="Finally, we just need to call our changeChannelValue function"
             SOUND="audio/en/channelSlider12.mp3" />
    </TUTORIAL>
  </HEADING>

  <HEADING NAME="Other Features"><TUTORIAL NAME="Accessing the Trigger Ports"
      PATH="videos/en/triggerPorts.mp4" SOUND="audio/en/triggerPorts0.mp3">
      <POINT FRAME="3" ICON="thumbnails/en/triggerPorts1.jpg"
             INSTRUCTION="You can read the 8 rear port connections and the three buttons mounted onto the interface. To read the 8 ports, each port pin must be connected to the ground pin"
             SOUND="audio/en/triggerPorts1.mp3" />

      <POINT FRAME="17" ICON="thumbnails/en/triggerPorts2.jpg"
             INSTRUCTION="You can connect an 8 button touch pad with a HE10 connector, or you can connect up to 255 buttons by combining the trigger pins"
             SOUND="audio/en/triggerPorts2.mp3" />

      <POINT FRAME="43" ICON="thumbnails/en/triggerPorts3.jpg"
             INSTRUCTION="Notice that a few changes have been made since the previous tutorial. The sliders have been arranged into a group box and buttons have been added to change the DMX value"
             SOUND="audio/en/triggerPorts3.mp3" />

      <POINT FRAME="57" ICON="thumbnails/en/triggerPorts4.jpg"
             INSTRUCTION="We'll start by inserting a check box for each port and button. We then need to name our check boxes accordingly"
             SOUND="audio/en/triggerPorts4.mp3" />

      <POINT FRAME="131" ICON="thumbnails/en/triggerPorts5.jpg"
             INSTRUCTION="We can now add a array of controller variables to our checkboxes"
             SOUND="audio/en/triggerPorts5.mp3" />

      <POINT FRAME="163" ICON="thumbnails/en/triggerPorts6.jpg"
             INSTRUCTION="The dll function will return an 11 bit value based on which ports are triggered. The next and previous buttons use the first 2 bits, (bit 9 and 10). The 8 trigger ports use the next 8 bits (bit 8,7,6,5,4,3,2,1), and the button 3 uses the final bit (bit 1)"
             SOUND="audio/en/triggerPorts6.mp3" />

      <POINT FRAME="185" ICON="thumbnails/en/triggerPorts7.jpg"
             INSTRUCTION="We will now make a function to ask the interface if a port has been triggered"
             SOUND="audio/en/triggerPorts7.mp3" />

      <POINT FRAME="209" ICON="thumbnails/en/triggerPorts8.jpg"
             INSTRUCTION="This function can be called from our on timer function, so every time a DMX value is sent, our check ports function will run"
             SOUND="audio/en/triggerPorts8.mp3" />

      <POINT FRAME="250" ICON="thumbnails/en/triggerPorts9.jpg"
             INSTRUCTION="We now need to convert the denary number sent to us from the PARTREAD command, into an 11 bit binary address. We do this by cycling through each bit number and finding the power, for example, the first number will be 2 to the power of 10"
             SOUND="audio/en/triggerPorts9.mp3" />

      <POINT FRAME="311" ICON="thumbnails/en/triggerPorts10.jpg"
             INSTRUCTION="We then divide our decimal port number by this power. If it is divisable atleast once, then we know that this bit is true, and can therefore check the checkbox"
             SOUND="audio/en/triggerPorts10.mp3" />

      <POINT FRAME="350" ICON="thumbnails/en/triggerPorts11.jpg"
             INSTRUCTION="We now need to take away the power number(bitNum), in this case 1024, and continue to the next bit"
             SOUND="audio/en/triggerPorts11.mp3" />

      <POINT FRAME="366" ICON="thumbnails/en/triggerPorts12.jpg"
             INSTRUCTION="If the bit is false, we need to uncheck the checkbox"
             SOUND="audio/en/triggerPorts12.mp3" />

      <POINT FRAME="383" ICON="thumbnails/en/triggerPorts13.jpg"
             INSTRUCTION="We also need to include the math header file so we can use the power function. Let's compile this code and see what this looks like"
             SOUND="audio/en/triggerPorts13.mp3" />

      <POINT FRAME="400" ICON="thumbnails/en/triggerPorts14.jpg"
             INSTRUCTION="If you do not have a HE10 connector, you can test the ports out by shorting each pin and the ground pin with a piece of wire. Be careful not to short pin 2 with pin 10 as this will cause the interface to switch off and you will have to reset your application"
             SOUND="audio/en/triggerPorts14.mp3" />

      <POINT FRAME="419" ICON="thumbnails/en/triggerPorts15.jpg"
             INSTRUCTION="As you can see, our denery number given to us has now been represented as a binary number. However, we don't want the check boxes to show us the binary representation, we want them to show us if the port is active or not. In our case, 0's represent a port is active, therefore we need to invert everything we see"
             SOUND="audio/en/triggerPorts15.mp3" />

      <POINT FRAME="440" ICON="thumbnails/en/triggerPorts16.jpg"
             INSTRUCTION="We can do this simply by swapping the true and false commands here"
             SOUND="audio/en/triggerPorts16.mp3" />

      <POINT FRAME="448" ICON="thumbnails/en/triggerPorts17.jpg"
             INSTRUCTION="Several ports can be triggered at the same time. This means it is possible to combine the ports and buttons to receive up to 2047 input triggers from the USB interface!"
             SOUND="audio/en/triggerPorts17.mp3" />
    </TUTORIAL><TUTORIAL NAME="Reading the DMX Input"
      PATH="videos/en/readingDMX.mp4" SOUND="audio/en/readingDMX0.mp3">
      <POINT FRAME="3" ICON="thumbnails/en/readingDMX1.jpg"
             INSTRUCTION="Reading the DMX input is the same as sending a DMX signal, all we need to do is to simply swap everything around"
             SOUND="audio/en/readingDMX1.mp3" />

      <POINT FRAME="27" ICON="thumbnails/en/readingDMX2.jpg"
             INSTRUCTION="Instead of using a slider, we will use a progress control to visualize the DMX input. We will also need to insert a Slider to select the DMX channel we wish to read"
             SOUND="audio/en/readingDMX2.mp3" />

      <POINT FRAME="134" ICON="thumbnails/en/readingDMX3.jpg"
             INSTRUCTION="Let's now set up our member variables as before"
             SOUND="audio/en/readingDMX3.mp3" />

      <POINT FRAME="204" ICON="thumbnails/en/readingDMX4.jpg"
             INSTRUCTION="We will need to set our default slider and progress bar range as before"
             SOUND="audio/en/readingDMX4.mp3" />

      <POINT FRAME="227" ICON="thumbnails/en/readingDMX5.jpg"
             INSTRUCTION="We can now make a function to be called when the channel slider is moved"
             SOUND="audio/en/readingDMX5.mp3" />

      <POINT FRAME="265" ICON="thumbnails/en/readingDMX6.jpg"
             INSTRUCTION="We will also make a function to manage all the DMX-IN related tasks"
             SOUND="audio/en/readingDMX6.mp3" />

      <POINT FRAME="284" ICON="thumbnails/en/readingDMX7.jpg"
             INSTRUCTION="We will call this function from our timer function, so the DMX input will be read every time we send a DMX output"
             SOUND="audio/en/readingDMX7.mp3" />

      <POINT FRAME="300" ICON="thumbnails/en/readingDMX8.jpg"
             INSTRUCTION="A variable array will be used to store the DMX block read"
             SOUND="audio/en/readingDMX8.mp3" />

      <POINT FRAME="360" ICON="thumbnails/en/readingDMX9.jpg"
             INSTRUCTION="We can now call our dll function to read the values into our variable array"
             SOUND="audio/en/readingDMX9.mp3" />

      <POINT FRAME="420" ICON="thumbnails/en/readingDMX10.jpg"
             INSTRUCTION="We also need to link our text objects. The channel text field will be updated as the channel slider is moved. The input text field will be updated everytime the DMX input is read"
             SOUND="audio/en/readingDMX10.mp3" />

      <POINT FRAME="480" ICON="thumbnails/en/readingDMX11.jpg"
             INSTRUCTION="We'll also create a couple of butttons to change the channel value"
             SOUND="audio/en/readingDMX11.mp3" />

      <POINT FRAME="563" ICON="thumbnails/en/readingDMX12.jpg"
             INSTRUCTION="Finally, hit F5 to compile your program. If you don't have a DMX input device, join your DMX output to the DMX input"
             SOUND="audio/en/readingDMX12.mp3" />
    </TUTORIAL><TUTORIAL NAME="Changing the 2nd DMX Universe"
      PATH="videos/en/2ndUniverse.mp4" SOUND="audio/en/2ndUniverse0.mp3">
      <POINT FRAME="3" ICON="thumbnails/en/2ndUniverse1.jpg"
             INSTRUCTION="You can change the DMX input socket to a second DMX output by connecting a female to female XLR converter"
             SOUND="audio/en/2ndUniverse1.mp3" />

      <POINT FRAME="20" ICON="thumbnails/en/2ndUniverse2.jpg"
             INSTRUCTION="We will start by dragging a checkbox. When this box is checked, we will change the second XLR socket from a DMX input to a DMX output. Set up a member variable for this checkbox then double click to edit"
             SOUND="audio/en/2ndUniverse2.mp3" />

      <POINT FRAME="60" ICON="thumbnails/en/2ndUniverse3.jpg"
             INSTRUCTION="To change the DMX input to a DMX output, we simply use the DHC_DMX2ENABLE command in our DLL function. A value of 1 will change the DMX INPUT to a DMX OUTPUT and a value of 0 will change the OUTPUT back to an INPUT"
             SOUND="audio/en/2ndUniverse3.mp3" />

      <POINT FRAME="125" ICON="thumbnails/en/2ndUniverse4.jpg"
             INSTRUCTION="Let's compile and test to see if this has worked. Join the input socket to the output socket and click the checkbox to change the INPUT to a second OUTPUT. Move the DMX output slider, notice that the DMX input is not read"
             SOUND="audio/en/2ndUniverse4.mp3" />

      <POINT FRAME="143" ICON="thumbnails/en/2ndUniverse5.jpg"
             INSTRUCTION="Uncheck the checkbox to change the OUTPUT back to an INPUT and move the DMX output slider. The DMX input is read once again"
             SOUND="audio/en/2ndUniverse5.mp3" />

      <POINT FRAME="154" ICON="thumbnails/en/2ndUniverse6.jpg"
             INSTRUCTION="To send a DMX signal out of the second output we'll first need to set up a new variable array called dmxBlock2"
             SOUND="audio/en/2ndUniverse6.mp3" />

      <POINT FRAME="185" ICON="thumbnails/en/2ndUniverse7.jpg"
             INSTRUCTION="We need to initialize the array values to 0"
             SOUND="audio/en/2ndUniverse7.mp3" />

      <POINT FRAME="211" ICON="thumbnails/en/2ndUniverse8.jpg"
             INSTRUCTION="We now need to call the DLL function to send the second universe. We will use the DHC_DMX2OUT command"
             SOUND="audio/en/2ndUniverse8.mp3" />

      <POINT FRAME="239" ICON="thumbnails/en/2ndUniverse9.jpg"
             INSTRUCTION="We only need to call this function if the second universe is enabled"
             SOUND="audio/en/2ndUniverse9.mp3" />

      <POINT FRAME="258" ICON="thumbnails/en/2ndUniverse10.jpg"
             INSTRUCTION="We also need to expand the output channel range form 512 to 1024"
             SOUND="audio/en/2ndUniverse10.mp3" />

      <POINT FRAME="296" ICON="thumbnails/en/2ndUniverse11.jpg"
             INSTRUCTION="The last task is to navigate to the changeDMXValue function. If the channel select slider outputs a value above 512, we need to take away 513 and output out of the second universe"
             SOUND="audio/en/2ndUniverse11.mp3" />

      <POINT FRAME="367" ICON="thumbnails/en/2ndUniverse12.jpg"
             INSTRUCTION="Hit F5. Once you have checked the 2nd universe checkbox, all DMX values on channels above 512 should output out of the second universe"
             SOUND="audio/en/2ndUniverse12.mp3" />
    </TUTORIAL><TUTORIAL NAME="Using Multiple Interfaces"
      PATH="videos/en/multipleInterfaces.mp4"
      SOUND="audio/en/multipleInterfaces0.mp3">
      <POINT FRAME="3" ICON="thumbnails/en/multipleInterfaces1.jpg"
             INSTRUCTION="You can use up to 10 DMX interfaces simultaneously by simply modifying the commmand parameter every time the dll function is called"
             SOUND="audio/en/multipleInterfaces1.mp3" />

      <POINT FRAME="14" ICON="thumbnails/en/multipleInterfaces2.jpg"
             INSTRUCTION="If you want to call a function from a second USB interface, simply write DHC_SIUDI1 before any command"
             SOUND="audio/en/multipleInterfaces2.mp3" />

      <POINT FRAME="26" ICON="thumbnails/en/multipleInterfaces3.jpg"
             INSTRUCTION="For example, to open interface number 2, this would be the command to write: DasUsbCommand( DHC_SIUDI1+DHC_OPEN, 0, 0 )"
             SOUND="audio/en/multipleInterfaces3.mp3" />

      <POINT FRAME="33" ICON="thumbnails/en/multipleInterfaces4.jpg"
             INSTRUCTION="To open interface number 3, this would be the command to write: DasUsbCommand(2*DHC_SIUDI1+DHC_OPEN, 0, 0 )"
             SOUND="audio/en/multipleInterfaces4.mp3" />

      <POINT FRAME="42" ICON="thumbnails/en/multipleInterfaces5.jpg"
             INSTRUCTION="To send a DMX output to interface number 4, you wrould write this: HardDllCommand(3*DHC_SIUDI1+DHC_DMXOUT, 512, dmxBlock);"
             SOUND="audio/en/multipleInterfaces5.mp3" />
    </TUTORIAL><TUTORIAL NAME="Next Steps" PATH="videos/en/NextSteps.mp4"
      SOUND="audio/en/nextSteps0.mp3">
      <POINT FRAME="2" ICON="thumbnails/en/nextSteps1.jpg"
             INSTRUCTION="You can now communicate with the hardware DLL file, send and receive DMX signals and read from the DMX interface ports"
             SOUND="audio/en/nextSteps1.mp3" />

      <POINT FRAME="15" ICON="thumbnails/en/nextSteps2.jpg"
             INSTRUCTION="Some of the code we have written has been inefficiant, we have also not used much exception handling. It is advisable that you now go through your code, handle any other possible exceptions, and tidy up the code with important variables initialized together. See the slmini demo application for guidance"
             SOUND="audio/en/nextSteps2.mp3" />

      <POINT FRAME="38" ICON="thumbnails/en/nextSteps3.jpg"
             INSTRUCTION="You could try making an array of DMX blocks and each block could be called a SCENE. You could then make a list of SCENES and SEQUENCES and call each one after a time determined by the user"
             SOUND="audio/en/nextSteps3.mp3" />

      <POINT FRAME="53" ICON="thumbnails/en/nextSteps4.jpg"
             INSTRUCTION="You could then trigger these scenes by buttons or from the input ports on the DMX interface"
             SOUND="audio/en/nextSteps4.mp3" />
    </TUTORIAL>http://www.reelseo.com/take-this-lollipop-personalized-video/</HEADING>
</Manual>

