Welcome to HomeAutomation.Geoff-Reynolds.NET

IR Driver Editor for Crestron IR Drivers

I have written a utility program that extends the functionality of Crestron Electronic Inc.'s DEAL utility. DEAL allows a user to add infrared codes into an IR driver file only by learning those codes from an existing remote control. Sometimes, codes that are not included on the factory remote are available. Many of these codes have been discovered by the Philips Pronto community and are often referred to as "discrete codes." These codes give you the ability to control the state of a device. For example, while most remotes include simply a power toggle command (pressing this button toggles the state of the device between on and standby modes), many devices also support separate on and standby commands. By using the separate commands, macros may be written to accomplish things like system turn on and system turn off without the need for devices like current and video sensors and the problems associated with them (such as incorrect status reports). Until this utility was written, a Crestron CNXLIR IR learner and a Philips Pronto were needed* to add these commands to an IR driver through DEAL. My program is capable of importing individual Pronto commands in the standard Pronto "hex" format and can also import all commands from a Pronto CCF configuration file. In addition to these features, the program offers much more control over an IR driver file, including the following features:

  1. All driver header fields may be edited
  2. All parameters for each function (carrier frequency, number of repeats, timing information, etc.) may be edited.
  3. Functions may be removed from the driver file
  4. Functions may be added to the driver file by hand (if you know all the timing information). There is no interaction with the IR learning hardware.
  5. Functions may be generated for known devices. I have figured out the code formats for a number of manufacturers, so by providing the device code and function code range, you can generate codes for a device. This portion of the program started life as a utility I wrote for the Pronto community called ProntoUtil (catchy name isn't it?). This feature is useful for either hunting for discrete codes that aren't included on the factory remote or for adding a specific code if the manufacturer provides the device and function codes (unusual, but sometimes the manufacturers are helpful...).
  6. Functions may be generated given a Pronto "hex" code**.
  7. Functions may be imported directly from a Pronto CCF file**. The program will extract the function name, carrier frequency, and timing information for each code in the file and add it to the IR driver.
  8. If you happen to add more codes than an IR driver file can support (239 functions), the program will split the driver into multiple files when you save it. This is only likely to happen when importing a Pronto CCF file.
  9. There are a few other useful features, such as the ability to swap one time and repeat timing information.

* Even though my software allows the user to do some things that previously would have required a Crestron CNXLIR IR learner device and a Pronto, I firmly believe that no dealer should be without a CNXLIR in their toolkit. There are going to be plenty of times when there isn't a set of Pronto CCF codes available for a new device and a driver is needed immediately. Rather than spending an inordinate time searching the web for someone who might have the driver file, having a CNXLIR would allow you to create the driver file on the spot and could potentially save a lot of time (and therefore money). I own a CNXLIR myself, so I've put my money where my mouth is.

** Pronto codes that begin with 0000, 0100, 5000, 5001, 6000, and 6001 are supported - I haven't added support to import 7000, 8000, and 9000 series codes yet.

Click on the following link to download a demonstration version of the program. In this version, the Save and Save As features are disabled. Contact me at greynolds.automation@geoff-reynolds.net for information on obtaining the full version of the program. Indicate whether you are an end user, or professional user (installer, programmer, reseller, etc.).


Some handy links:

Crestron Electronics Inc. Manufactures high end control systems for residential and commercial applications.

Remote Central, an excellent discussion forum on remote controls (best Pronto resource on the web).

A Yahoo Groups group about Crestron programming.

Some useful remote control information.

Discussion of Pulse Width IR codes by Barry Gordon. This is the document that really got me started in figuring things out.

RC-5 code explanation.

RC-6 code explanation.

TheaterTek Crestron Module

This module makes use of IP control feedback from the TheaterTek media player application. Input is expected to come from a TCP/IP Client symbol, connected to the TheaterTek application software. Likewise, output should be routed to a TCP/IP Client symbol, connected to the TheaterTek application software.

A connection to TheaterTek is established by connecting to port 2663 on the computer TheaterTek is running on (the port can be configured, but 2663 is the default). Note that a connection can also be made to the TheaterTek AutoKiller system tray app via port 2664 (also configurable) and can be used to start and stop the TheaterTek application.

This module also implements most commands for controlling TheaterTek. Logic has been included to allow for repeating cursor keys which is useful in the time shuttle control, menu bar, and file browser. Use the ALT cursor commands if repeating cursor keys are not desired.

Feedback is available for the current play state, domain, current time, current chapter, etc.

The DVD_Domain values indicate which area of a DVD is currently active, or None if another media format is playing.

Media_Playing / Media_Stopped are useful for controlling room lights based on whether media is playing or not. Media_Stopped is high if paused, stopped, or in DVD menus.

Current_File$ shows what media file is currently playing, including the full path.

Media_Time$ returns elapsed and total play times.

Aspect_Ratio$ returns the name of the current aspect ratio.

Format is 0 for NTSC, 1 for PAL.

Current_Title indicates which title is playing on a DVD.

Current_Chapter indicates which chapter is playing on a DVD.

Current_Angle indicates which angle is playing on a DVD.

Some additional feedback is also available, but not currently implemented in this module. Placeholders exist in the code for most of the other feedback in case someone chooses to implement them.

My RepeatLogic module, found below, is required for this module to compile.


RepeatLogic Crestron Module

This module takes the Press and Hold macro and extends it to allow for cases where a command needs to be repeated as long as a signal is high. Such cases include keyboard emulation, where one needs to send key down messages at regular intervals as long as a key is held down and then a key up message once the key has been released, such as holding a cursor key down to scroll through a list of options.

This module accepts a single digital input, an analog repeat interval, and provides the following digital outputs:

make_init: This is briefly driven high when the in argument is asserted.
make: This is briefly driven high after make_init has been de-asserted.
repeat: This is briefly asserted for the repeat_interval time by an oscillator if the in parameter has been asserted for at least .5s until the in parameter is de-asserted.
make_or_repeat: This simply is the output of an OR symbol from the make and repeat outputs.
break: This is briefly asserted once the in parameter has been deasserted.

The make_init parameter is useful if an initial command needs to be sent to set up a pending repeat operation.

The make, repeat, and make_or_repeat parameters allow for unique or identical commands to be sent for those conditions.